diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-05 16:18:34 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-05 16:18:34 +0000 |
commit | 3667197efb7b18ec842efd504785965911f8ac4b (patch) | |
tree | 0b986a4bc6879d080b100666a97cdabbc9ca1f28 /ansible_collections/awx | |
parent | Adding upstream version 9.5.1+dfsg. (diff) | |
download | ansible-upstream/10.0.0+dfsg.tar.xz ansible-upstream/10.0.0+dfsg.zip |
Adding upstream version 10.0.0+dfsg.upstream/10.0.0+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ansible_collections/awx')
25 files changed, 1529 insertions, 563 deletions
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" |