diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-18 05:52:35 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-18 05:52:35 +0000 |
commit | 7fec0b69a082aaeec72fee0612766aa42f6b1b4d (patch) | |
tree | efb569b86ca4da888717f5433e757145fa322e08 /ansible_collections/f5networks | |
parent | Releasing progress-linux version 7.7.0+dfsg-3~progress7.99u1. (diff) | |
download | ansible-7fec0b69a082aaeec72fee0612766aa42f6b1b4d.tar.xz ansible-7fec0b69a082aaeec72fee0612766aa42f6b1b4d.zip |
Merging upstream version 9.4.0+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ansible_collections/f5networks')
552 files changed, 1707 insertions, 63903 deletions
diff --git a/ansible_collections/f5networks/f5_modules/CHANGELOG.rst b/ansible_collections/f5networks/f5_modules/CHANGELOG.rst index fc430b6c7..4c8021d44 100644 --- a/ansible_collections/f5networks/f5_modules/CHANGELOG.rst +++ b/ansible_collections/f5networks/f5_modules/CHANGELOG.rst @@ -1,9 +1,58 @@ -============================================== -F5Networks F5_Modules Collection Release Notes -============================================== +=============================================== +F5Networks F5\_Modules Collection Release Notes +=============================================== .. contents:: Topics +v1.28.0 +======= + +Bugfixes +-------- + +- bigip_gtm_monitor_bigip - fixed an issue where IP and port were not applied correctly when creating new monitor. +- bigip_gtm_monitor_firepass - fixed an issue where IP and port were not applied correctly when creating new monitor. +- bigip_gtm_monitor_http - fixed an issue where IP and port were not applied correctly when creating new monitor. +- bigip_gtm_monitor_https- fixed an issue where IP and port were not applied correctly when creating new monitor. +- bigip_gtm_monitor_tcp - fixed an issue where IP and port were not applied correctly when creating new monitor. +- bigip_gtm_monitor_tcp_half_open - fixed an issue where IP and port were not applied correctly when creating new monitor. +- bigip_gtm_topology_region - fixed an issue where if multiple states with spaces in values were defined, module would throw invalid command error +- bigip_gtm_topology_region - fixed an issue where states names that contained spaces caused the idempotency to break. +- bigip_ssl_key_cert - fixed an issue where the passphrase was not being properly send to the BIG-IP. + +v1.27.1 +======= + +Minor Changes +------------- + +- bigiq_device_discovery - Changes in documentation related to Provider block + +v1.27.0 +======= + +Minor Changes +------------- + +- bigip_policy_rule - added six more options for ssl_extension condition + +Bugfixes +-------- + +- bigip_device_certificate - error-handling for connection error while running exec command function to fetch certificate details +- bigip_pool - Resolved a bug in the code to allow the module to remove monitors from the pool + +v1.26.0 +======= + +Bugfixes +-------- + +- bigip_ssl_key_cert - fixed flaw in code to make module work with same key and cert name when true_names set to true +- bigip_virtual_server - fixed an idempotency bug where the module send asm policy profile for update even when not specified explicitly by the user + +v1.25.1 +======= v1.25.0 ======= diff --git a/ansible_collections/f5networks/f5_modules/FILES.json b/ansible_collections/f5networks/f5_modules/FILES.json index 05ae64d29..b32a6f0ab 100644 --- a/ansible_collections/f5networks/f5_modules/FILES.json +++ b/ansible_collections/f5networks/f5_modules/FILES.json @@ -8,640 +8,591 @@ "format": 1 }, { - "name": "plugins", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "plugins/lookup", + "name": "changelogs", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/lookup/bigiq_license.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d627f07e48fe26e1d7698448d97cb8fe90742bf133695a9b0753f25c4a0894ff", - "format": 1 - }, - { - "name": "plugins/lookup/license_hopper.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cb148682ac7f425a4249bf35da7c5a32a3fe5f9ae13d757bec75ae9e6c896279", - "format": 1 - }, - { - "name": "plugins/lookup/__init__.py", + "name": "changelogs/config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "fb04d7108c26fb4ed2bcea3561fc73f99a41714f8478dd3109c96c9f9a72e527", "format": 1 }, { - "name": "plugins/modules", + "name": "changelogs/fragments", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/bigip_device_httpd.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bbd8591c14bd505e520432d00c085a800dc060996041ccdf7a4bc03735b8abf8", - "format": 1 - }, - { - "name": "plugins/modules/bigiq_device_discovery.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ebed40bebb230017dc3d29f8c42c9897673f9b4dbfad1e546c2b511b93f9573b", - "format": 1 - }, - { - "name": "plugins/modules/bigip_apm_acl.py", + "name": "changelogs/fragments/.gitkeep", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "009880221d3625fde0b1fe098807c8cee9a39eec899866754a9757f9085e6050", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/modules/bigip_profile_udp.py", + "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26030f30aead7f0033fd8cf3e0694abf5e1f1dc24f05af24ad32a96ce722b27b", + "chksum_sha256": "d88a720063ff427b3d797e6d223ea2d6f9d3c8cf298633e8c9db1c8733c12278", "format": 1 }, { - "name": "plugins/modules/bigip_device_syslog.py", + "name": "CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80cc4b183972da70ad10b0caef53709958572246a6320ad3034995e6a022b4e9", + "chksum_sha256": "ceed2b3ac40d7405432ee11a7a307709ec0464875a98574cc9868868165ca436", "format": 1 }, { - "name": "plugins/modules/bigip_message_routing_route.py", + "name": "requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ad0222f325fc2c9d784acbe78ab6464cf1fa5ce49761124f8c1754a22a3f235", + "chksum_sha256": "ae8fc643547bbfa59fd2713e3a951856be3c57ca3fe0f6f7072ff5eafda6d4e7", "format": 1 }, { - "name": "plugins/modules/bigip_cgnat_lsn_pool.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "63f83317d54bd66b6e97338f2701128f1abd7f1c2b501faceb34457d93d73869", + "name": "plugins", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/bigip_wait.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "487ab60410f891e6347fde3576683f55b09c363cfb271a6a7f30a04e7f115384", + "name": "plugins/terminal", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/bigip_gtm_monitor_external.py", + "name": "plugins/terminal/bigip.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3591ce33db925fbcdd3fee902a0afaea9d7caefaba524e19e23c99a8c3aae60f", + "chksum_sha256": "a6aef530b33f3a1b1858a6107fe421e4f3c1b19cabe666788903d19629ca5ab9", "format": 1 }, { - "name": "plugins/modules/bigip_monitor_icmp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "775aeceae7ec1e4067bed2af94b9bdbf629042ffe34cf9ce0d0aeb909b38f60d", + "name": "plugins/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/bigip_profile_oneconnect.py", + "name": "plugins/modules/bigip_device_connectivity.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3628016ae189d81c3b1302b9f0b6b871292a04942e604af4a64a8c23f592c4e2", + "chksum_sha256": "7652eee26c3e6da4aaf1d697f0fd0e31dbced5fa7a4f9033b4fb36ffe7f00edc", "format": 1 }, { - "name": "plugins/modules/bigip_ltm_global.py", + "name": "plugins/modules/bigip_firewall_global_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d908da3f807cdf618e0f54d993c1bc3c28cc9ac9e886791d2aef7ed46d1f3ffc", + "chksum_sha256": "761da4bd39bb7b5cad5721b04776a739c160fc2289e053168b65da981121f9d1", "format": 1 }, { - "name": "plugins/modules/bigip_profile_persistence_src_addr.py", + "name": "plugins/modules/bigip_firewall_address_list.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6924925d97464cb0cf0c3fe0bec2b10a576ac2357e933fa3e302497475788e2", + "chksum_sha256": "b7cd334daa149654a9e755464668a2fd1ca880142618bf0a7de1e0179a4b104f", "format": 1 }, { - "name": "plugins/modules/bigip_device_trust.py", + "name": "plugins/modules/bigip_ike_peer.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a6cf492b56c8bbc97abc2aee3bbfe71cdb34825fda4a34f40e6f00d63c6072ed", + "chksum_sha256": "b1bec167211a09094b6e5a215e318b33e74be47d14bc249ef1603d8337c7b78d", "format": 1 }, { - "name": "plugins/modules/bigip_apm_network_access.py", + "name": "plugins/modules/bigip_profile_fastl4.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5f6df02de44ea236e866ab4d2a45f99e91f5dccc209a21f26d550c55ff9b3143", + "chksum_sha256": "7bbfb3eab896bfe678272fb7cb3ceb9114596c4e0d2d3fef5f92e83925fba93f", "format": 1 }, { - "name": "plugins/modules/bigip_pool_member.py", + "name": "plugins/modules/bigip_firewall_log_profile.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "075b63b9aaace5e1e340ecd1fefe3a8e7255544968677a6561917deb1285350d", + "chksum_sha256": "9ac6a7dddde21339a1929168c6502ff990daac25f6c50894219fa735548c82a2", "format": 1 }, { - "name": "plugins/modules/bigip_device_group.py", + "name": "plugins/modules/bigip_device_auth_radius.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c28d69f9eabb1884410ee3bfbb9ca3c9bf82be4366d75625e40278df636e622", + "chksum_sha256": "4363414aa99301cc5405bed7f786fb08ece55927a1b1c684bc013b907e446f36", "format": 1 }, { - "name": "plugins/modules/bigip_asm_policy_server_technology.py", + "name": "plugins/modules/bigip_sys_daemon_log_tmm.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6508985230a1ea3c0311c48580ace162b30db28df8e24970514915764ea0099", + "chksum_sha256": "80495414e105c3587af33e9d45eb00b9f41e908794a7320d0d049e7284d494db", "format": 1 }, { - "name": "plugins/modules/bigip_software_install.py", + "name": "plugins/modules/bigip_gtm_monitor_http.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3b97913218cfc9004547691d4caf549c12320fe4c84e8e1eedfae976cdb04668", + "chksum_sha256": "2082bfd4b73bf07961254086ded40e10c064038c725accc2eede750c4aae1d0e", "format": 1 }, { - "name": "plugins/modules/bigip_config.py", + "name": "plugins/modules/bigip_remote_role.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f0d7f56bd30725e4a40a3d936b187e50bcc7ddce9541b3fdadb40bcf9927f060", + "chksum_sha256": "30b6c075a72778651059b816aa27fc2f02427c5afc4b9ad5c6a1018c25f388db", "format": 1 }, { - "name": "plugins/modules/bigip_snmp_community.py", + "name": "plugins/modules/bigip_firewall_log_profile_network.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9ee667c377959fda8bfe8d39053ab49152f67c60b4784677d354a94f56c724a", + "chksum_sha256": "05c5f41d6158c8f0d3bf39c081a11098823e99c6e115080822e9c6b6a04083fb", "format": 1 }, { - "name": "plugins/modules/bigiq_regkey_pool.py", + "name": "plugins/modules/bigip_profile_udp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9b3a41cd7b0e13314e1d91fc7073db5bc2e2595fcbaa5c538a79451e8ad590f1", + "chksum_sha256": "1d2ffa1d1e53f1cfedec09527eb208cc53df565103cdd2065d2a9f25e41e6799", "format": 1 }, { - "name": "plugins/modules/bigip_gtm_dns_listener.py", + "name": "plugins/modules/bigip_device_group_member.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cd50071aa675d7caecd65cd827615c5f4f295dca15efba643085c3035c3d0b23", + "chksum_sha256": "57354c1d59d0e961f250659c72a88f14e8fa0b98a4f64e2637b2e6bfbbc98d76", "format": 1 }, { - "name": "plugins/modules/bigip_network_globals.py", + "name": "plugins/modules/bigip_device_certificate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "28ff4881b827f5403960976a970f42d0189eaa13a9f6361b6787159385ebe76c", + "chksum_sha256": "4588d20f4e06abcd95066f11587fde466ca99128969630f86a2cba7418e58700", "format": 1 }, { - "name": "plugins/modules/bigip_pool.py", + "name": "plugins/modules/bigip_dns_nameserver.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6969170a53c9d4fb13706f589dc0a45ebbb0cd5fca42a43115e01c56113dc7a8", + "chksum_sha256": "4fdf0467eaf737a72017b9043a77294a01f73608a2705d1b6ff31efd34401351", "format": 1 }, { "name": "plugins/modules/bigip_profile_tcp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5460add5ea714a03bd038816a4d9aeed6dd3ad985e69bfcaa9899a4168e76ec6", - "format": 1 - }, - { - "name": "plugins/modules/bigip_vlan.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "900e3fa4c491cb5460643ac3217d80f0308524ae232aa8915d313a5581882f56", + "chksum_sha256": "6d7edfb14a15532c273611a033c1d172dd00a9cb721304e8cbcf7880a7cff7e5", "format": 1 }, { - "name": "plugins/modules/bigip_ucs_fetch.py", + "name": "plugins/modules/bigip_gtm_monitor_firepass.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ae075deaf28778a46ab65479302e7d38187cbdc7f36a98d6a3fa75fbe16bd9d", + "chksum_sha256": "9db42adae4977f48d386936e0324af463fccab654df58e96f6e763d7472f506d", "format": 1 }, { - "name": "plugins/modules/bigip_software_update.py", + "name": "plugins/modules/bigip_cli_alias.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f335fd6280fbf567edccce40838ce1821fa258d1e81e6987b03196d4ee4d508e", + "chksum_sha256": "cae992a3d711616226d002391af7dbbf4eee2e77dae97804d4401cdc5069fff1", "format": 1 }, { - "name": "plugins/modules/bigip_firewall_log_profile.py", + "name": "plugins/modules/bigip_device_auth_ldap.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "198c1d2ca52c65324304b72d85f08520490d958ef3af9b4b420d40cb21fab01f", + "chksum_sha256": "b33f84c854bef127a5d54ddd37d33f29e33935ac787d070af86ce4c43d506583", "format": 1 }, { - "name": "plugins/modules/bigip_provision.py", + "name": "plugins/modules/bigip_ucs.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "74812f7aa4a251d98ae9c904273a0da1bb327b740c75f2ba69576db2c7ea9e42", + "chksum_sha256": "66fc7b9cae1b01838659674db4116e62f3bde20035b537d192b137fce6b40ee2", "format": 1 }, { - "name": "plugins/modules/bigip_apm_policy_import.py", + "name": "plugins/modules/bigip_gtm_wide_ip.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21b245141667a609edc7dd626e237bb780c50fe3707ee8dde8fd1f3353e2c874", + "chksum_sha256": "5486732d9dd7459c1fdaac781652abd3cacb9abfa00969fdd10a15298138f5ea", "format": 1 }, { - "name": "plugins/modules/bigip_monitor_tcp.py", + "name": "plugins/modules/bigip_gtm_monitor_external.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb43a03c16b7349438aa924f5369e1ccc4e06ddbae3d01ebee1a4a83594797f3", + "chksum_sha256": "3591ce33db925fbcdd3fee902a0afaea9d7caefaba524e19e23c99a8c3aae60f", "format": 1 }, { - "name": "plugins/modules/bigip_gtm_virtual_server.py", + "name": "plugins/modules/bigip_dns_resolver.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ca294dde4d59c8be107ba82967bac2eb79f52ba5f1fa971bd7bad67dcd36a24", + "chksum_sha256": "9ae2bf84029f37350b769691a847d238037861c0331e86fb43df0f05873f8708", "format": 1 }, { - "name": "plugins/modules/bigip_asm_policy_fetch.py", + "name": "plugins/modules/bigiq_regkey_pool.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "396fe9a9c7227c016ed14b1304f612e9ea95e586aa7a1829e353b06be7e958d3", + "chksum_sha256": "8cbc04ab2cf0b45bd49b4eb9765d67a7c5c10dd901c528fcf3bedc8124269065", "format": 1 }, { - "name": "plugins/modules/bigip_iapp_template.py", + "name": "plugins/modules/bigiq_application_fasthttp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "172a3bd16811f0de66eb7b399e7c5ebf968780d8b031261a062d7d33366054d0", + "chksum_sha256": "f1b8c7ae8a5b2c69d8d9594ac03d7c9fa5dad3ff32914676047de300b2a999f4", "format": 1 }, { - "name": "plugins/modules/bigip_profile_analytics.py", + "name": "plugins/modules/bigip_device_auth.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7e522fbe0d291260f1a2aa2b9eea81810c313951cfd183b196099995f9ddd5d", + "chksum_sha256": "918dc4ca4f821c423655198a1feea7609a9d326406cc9b69da2a381ef52bab7d", "format": 1 }, { - "name": "plugins/modules/bigip_gtm_monitor_tcp_half_open.py", + "name": "plugins/modules/bigip_monitor_snmp_dca.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cf8b147d91c935543446542ea9fb88b211d739cb1ef70081a654479c217f24ba", + "chksum_sha256": "49045abd49860fdea778f85e2f3218481efbcf5d498e015ff96e697d0da7ad26", "format": 1 }, { - "name": "plugins/modules/bigip_gtm_global.py", + "name": "plugins/modules/bigip_device_ntp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7214edbe79e14b91589411641ad648eedb94ca59f63ba2b132c09108b365158b", + "chksum_sha256": "4ee41ce95c64f8ba921ae8520c1e16f77b2b7ab5ac24ce30a90784d459d05d9f", "format": 1 }, { - "name": "plugins/modules/bigip_snat_pool.py", + "name": "plugins/modules/bigip_gtm_monitor_bigip.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "66ef1b82e9da473c3cdce5292e65fa70581a803233d3d193f8a282b0f6859717", + "chksum_sha256": "671d61e28861bff95d0f8540c86884a727b5efe0cd9b6e00a4817d7c273448ff", "format": 1 }, { - "name": "plugins/modules/bigip_asm_dos_application.py", + "name": "plugins/modules/bigip_apm_policy_fetch.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b48249f212af22690559a145e696154b15246b5be021c86ee485b095538dd951", + "chksum_sha256": "f8c5dc2994df97ca9d5066847a15eb61a6603c0bc59512b295003fe558c0acc1", "format": 1 }, { - "name": "plugins/modules/bigip_firewall_log_profile_network.py", + "name": "plugins/modules/bigip_trunk.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78808dbd83f22206ede6437fa4f89258b930fd60c142bac6b7ff90e1931305d2", + "chksum_sha256": "71e50e104d4626d9f05ee1ec4d9bb3875f884dd2963e561561b211c21ea58df4", "format": 1 }, { - "name": "plugins/modules/bigip_device_traffic_group.py", + "name": "plugins/modules/bigip_monitor_smtp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fbb73fa2c3cc28955c60523f568ba16a04e793c9e7d335c244e5c958a6447774", + "chksum_sha256": "49442c7ce41064806ebe6e8dcefcebdde78232da8a11ef7da39a703b08514c3e", "format": 1 }, { - "name": "plugins/modules/bigip_monitor_ldap.py", + "name": "plugins/modules/bigip_ssl_key.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "15c13e26bd33f77a7b19f4a7526fce4490e6c89e76b7b222b371dc2755fe8170", + "chksum_sha256": "04aab925b52624ae35f3772132560244253c5d45e1f5ea20fa90b6de030cb345", "format": 1 }, { - "name": "plugins/modules/bigip_ipsec_policy.py", + "name": "plugins/modules/bigip_vlan.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "09ed1f9b2ac5b69c0978d5d2f69842fc52cca1b370ab0d3187fc8a2725ef62fc", + "chksum_sha256": "900e3fa4c491cb5460643ac3217d80f0308524ae232aa8915d313a5581882f56", "format": 1 }, { "name": "plugins/modules/bigip_ssl_ocsp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8c0b2d38c0f61b2eba0298400bfe9f0bbe2c9555108bcb3e28bd0bd1d77cf92", + "chksum_sha256": "6beeaa92539b9c8d9080a0b80dab7c1adef488306e91ce6f708f1a93cd488e05", "format": 1 }, { - "name": "plugins/modules/bigip_firewall_policy.py", + "name": "plugins/modules/bigip_cgnat_lsn_pool.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "884b72e661b6e884e71ef387c2cf211cba6fa1f04e38c09982b8ef8345b452d5", + "chksum_sha256": "63f83317d54bd66b6e97338f2701128f1abd7f1c2b501faceb34457d93d73869", "format": 1 }, { - "name": "plugins/modules/bigip_management_route.py", + "name": "plugins/modules/bigip_monitor_http.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97d580a927d9cf33e812fc384f396cf343500e69adc3cf21fb7b1e979620e3a0", + "chksum_sha256": "bd74076eaf3967ac51fcc983934b0ca0985c60ed74abe7443d61fde6b7ce04e7", "format": 1 }, { - "name": "plugins/modules/bigip_device_auth_radius.py", + "name": "plugins/modules/bigiq_regkey_license.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3b6fd2fbe220931c43784402b6e00d553d7586a2c513010b4a0187796bb18129", + "chksum_sha256": "81afcdfc40713e3d15813a2ea1bb76cb7c2bcce4e23d23f5f5cc0eea52d049d1", "format": 1 }, { - "name": "plugins/modules/bigip_monitor_snmp_dca.py", + "name": "plugins/modules/bigip_ipsec_policy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49045abd49860fdea778f85e2f3218481efbcf5d498e015ff96e697d0da7ad26", + "chksum_sha256": "09ed1f9b2ac5b69c0978d5d2f69842fc52cca1b370ab0d3187fc8a2725ef62fc", "format": 1 }, { - "name": "plugins/modules/bigip_log_publisher.py", + "name": "plugins/modules/bigip_ssl_key_cert.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "77d20dda9243dc13cf41681be6c4cf774c6ebece0ea8f84c7b8896642c4c79fa", + "chksum_sha256": "59b8633ef34779426eebbf782d670d0fc40671d3390fd80f10755bbae3b5bbd9", "format": 1 }, { - "name": "plugins/modules/bigip_profile_server_ssl.py", + "name": "plugins/modules/bigip_asm_policy_manage.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e77c4bd43165f3173e835c21400e049db3adc1ae4780a4fadab267dd98fbfc52", + "chksum_sha256": "2a3c5f2ba1ae39e0dec19720cb469c99e1f7f2835296e0d3049213cde33b7e88", "format": 1 }, { - "name": "plugins/modules/bigip_monitor_udp.py", + "name": "plugins/modules/bigip_profile_persistence_cookie.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "89b1a4232936060fc6a7dcd27a369b830f7911e64a9b87d4c024872e0f7a7851", + "chksum_sha256": "32295b340ee8870954cc7b0507d04a79669617a6f44e283c8d06861b6c5c2527", "format": 1 }, { - "name": "plugins/modules/bigip_snmp.py", + "name": "plugins/modules/bigip_traffic_selector.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba09adca418e02b22573570d79a5b7a4917b0bc69eaa6b6f822c2992eb385399", + "chksum_sha256": "9f96c55a2d323e93e35d9bf9605858df0b1128473e0649102532e0aac784e350", "format": 1 }, { - "name": "plugins/modules/bigip_policy.py", + "name": "plugins/modules/bigip_hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b36e214da792266b8c95ce1cbea815dc9495ba88746ba52bce736d0e970dd6db", + "chksum_sha256": "b4bec8f0ade9a0a8780698f85f25414429f60c9c96a47fea00437c84fcbe6016", "format": 1 }, { - "name": "plugins/modules/bigip_sys_global.py", + "name": "plugins/modules/bigip_partition.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a266d0e8cb5bd4bf630306d7895e1f23f9b55f37e573e34452cd5c4855a8680", + "chksum_sha256": "d469275bd12517ab87972825bd68d62296c2d861c8973086cb53e22f6a556419", "format": 1 }, { - "name": "plugins/modules/bigip_gtm_datacenter.py", + "name": "plugins/modules/bigip_irule.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "873bc98ca107f38c49eed027edf1dc8a3c08d76fea5bf61099462861b7b8ac44", + "chksum_sha256": "666ef88f65a6ef99b8bd65f57c79c1ed9160bd944b81936591d25841846d0d54", "format": 1 }, { - "name": "plugins/modules/bigip_command.py", + "name": "plugins/modules/bigip_firewall_rule_list.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "51fbb780ac470f03458efca16d0918b2f51190ff70c613694228e0cfc0bc1163", + "chksum_sha256": "dd21fc65fcdde86cfb7bb27382234b58197295bdbff31bd466e9b1e2885206b3", "format": 1 }, { - "name": "plugins/modules/bigip_log_destination.py", + "name": "plugins/modules/bigip_software_install.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe7769726c44b27b9439ea928b5de6e0b94038b4df2d7b35e6b93ee772f37efd", + "chksum_sha256": "3b97913218cfc9004547691d4caf549c12320fe4c84e8e1eedfae976cdb04668", "format": 1 }, { - "name": "plugins/modules/bigip_message_routing_router.py", + "name": "plugins/modules/bigiq_application_fastl4_udp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "374b06931189e06a17cb0e0a6eee7168f8212fc47efb9c070dad13a97f91f6cc", + "chksum_sha256": "0d2537a7ee1adff75ae76f38d4f2bf185d4f2a8aca62859d9892c6d296baa7f1", "format": 1 }, { - "name": "plugins/modules/bigip_profile_ftp.py", + "name": "plugins/modules/bigip_ssl_csr.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "293ec2ec07998b66db1f3a96d0c92754be79706648d144acf2809b18066c10ae", + "chksum_sha256": "2e8c72f9fd0db6276b5ee05cf06df0d711b344b48c398b4d93e9cdc249efa3c0", "format": 1 }, { - "name": "plugins/modules/bigip_remote_syslog.py", + "name": "plugins/modules/bigip_asm_dos_application.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0323b91326fcf57fda627c6e2ecb94444e1387a8186585537f1660215ad04b63", + "chksum_sha256": "7ddd4060c3099d7a46c723d3ea34dd76add5e4236bf9f4e0e34bfcf31e8739c7", "format": 1 }, { "name": "plugins/modules/bigip_device_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "20af5ad997348fa19c1f5b258f4aff42698680ffba380a148e51e6276111625e", - "format": 1 - }, - { - "name": "plugins/modules/bigip_virtual_address.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "54a5cac6b7bbc0557ba99cfd13b2cf366c6b8c7b620893af4d94b77ae623f1ce", + "chksum_sha256": "2ab00eb5648c15f5d9e2563d848c8d9a86f297982778be6ef078843ed4cb73f9", "format": 1 }, { - "name": "plugins/modules/bigiq_application_fastl4_tcp.py", + "name": "plugins/modules/bigip_data_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81c4e3f6096301155151f5680d73400f45a0be10f90e68ca2defefcad7889634", + "chksum_sha256": "d1dbfedb328edefb4c8733a88ecc82fea990debe7094726178c2530973efccda", "format": 1 }, { - "name": "plugins/modules/bigip_virtual_server.py", + "name": "plugins/modules/bigiq_device_discovery.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "be04abf12f91ba8688d070abde516dc18fedfe5725522188513be17940df779a", + "chksum_sha256": "f7391d9c7ba714d28ba0e247485b346623d6e77bfd544c933c084fecac5e50b2", "format": 1 }, { - "name": "plugins/modules/bigip_timer_policy.py", + "name": "plugins/modules/bigip_snmp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "19c398a5727501b4133f4b54cec1538975099d4c21e7378d5e5df1fe85f21bc8", + "chksum_sha256": "ba09adca418e02b22573570d79a5b7a4917b0bc69eaa6b6f822c2992eb385399", "format": 1 }, { - "name": "plugins/modules/bigiq_utility_license_assignment.py", + "name": "plugins/modules/bigiq_application_http.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "acb63118097387424854564890ea18e49b5a6f6c875e10c55096c7d56e725c4f", + "chksum_sha256": "e39c3b6b980983fba418b1f68eff014682ac717bda1fd4def1cfccdfbbc09b08", "format": 1 }, { - "name": "plugins/modules/bigiq_application_https_offload.py", + "name": "plugins/modules/bigip_policy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "da394a482c5554988aed7517ae67bfbe0396238bd959a2af8db64a033a2c9a11", + "chksum_sha256": "45d0c8f74da1858587543cfa482a785cc150a8f9d666a64bf83ff75424b7178f", "format": 1 }, { - "name": "plugins/modules/bigip_hostname.py", + "name": "plugins/modules/bigip_virtual_address.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b4bec8f0ade9a0a8780698f85f25414429f60c9c96a47fea00437c84fcbe6016", + "chksum_sha256": "54a5cac6b7bbc0557ba99cfd13b2cf366c6b8c7b620893af4d94b77ae623f1ce", "format": 1 }, { - "name": "plugins/modules/bigiq_application_http.py", + "name": "plugins/modules/bigip_iapp_template.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0583bd82bafbe5fa05bb5afb9d7f5ac8e7a4f152ef370f51eeb84c82d55700c6", + "chksum_sha256": "31e831d4a356f261c43a1c9c7e112c65fc3cd2f1bdb15efe1a98bc2eede5b8f3", "format": 1 }, { - "name": "plugins/modules/bigip_device_group_member.py", + "name": "plugins/modules/bigip_apm_policy_import.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "57354c1d59d0e961f250659c72a88f14e8fa0b98a4f64e2637b2e6bfbbc98d76", + "chksum_sha256": "176d7f754034fc68d5655dc466fea5d17fda537748e629508d4ee92871820495", "format": 1 }, { - "name": "plugins/modules/__init__.py", + "name": "plugins/modules/bigip_network_globals.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "28ff4881b827f5403960976a970f42d0189eaa13a9f6361b6787159385ebe76c", "format": 1 }, { - "name": "plugins/modules/bigip_device_dns.py", + "name": "plugins/modules/bigip_ucs_fetch.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5a4cd44095eefc62fabb59facf73715d35365a1eab8811d1d40023c5dea28d01", + "chksum_sha256": "3722c83be3b5be21dbde1cb250d0cb8b3a01f524bab263d7a1129cdf17109027", "format": 1 }, { - "name": "plugins/modules/bigip_firewall_dos_profile.py", + "name": "plugins/modules/bigip_gtm_pool_member.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "261bbad4881195f7bf4b56efe6d2489aad15f5e1f7bc875b63d4d8d22f647bf9", + "chksum_sha256": "c97ea9087221f64230000f955a68beb51d6c9e7268be107e47cee79a8a5efb9b", "format": 1 }, { - "name": "plugins/modules/bigip_firewall_rule.py", + "name": "plugins/modules/bigip_monitor_external.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a0ca84c2ae80188f14f41ec0e5ec2385700f1b760c54a00d7a1c8235687b0e95", + "chksum_sha256": "43e75580c7d679fc4b6acbc8006adbbf64d4a81a7d91319e364866878bd3e429", "format": 1 }, { - "name": "plugins/modules/bigip_monitor_ftp.py", + "name": "plugins/modules/bigip_message_routing_router.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bdc1d53cfad9a92ec822598e93bc448017d408aeec3ec3bd659dd8a698b9df39", + "chksum_sha256": "796cc64fd335dbe0cd555dfc9b51c20da1c40bce8cdef735e530e6986b3853f9", "format": 1 }, { - "name": "plugins/modules/bigip_gtm_topology_record.py", + "name": "plugins/modules/bigiq_utility_license_assignment.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "00865d14bd80e2181874e00c9cf4b86b9b9a87820637cfb733ae887b08572c23", + "chksum_sha256": "267df3677f7d19ef302d412965d7e3d3e1c02718e83ee759b6fa56720599a7a3", "format": 1 }, { - "name": "plugins/modules/bigip_asm_policy_import.py", + "name": "plugins/modules/bigip_apm_acl.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9023fbe4a97bb1400fa604b55fa829922d42402c02dc5602bc53c0c86822c3c5", + "chksum_sha256": "bcecc478feec9552be7ee700b425806dbfe2a7ff8bd0dc0ddc79981ff6ca2829", "format": 1 }, { - "name": "plugins/modules/bigip_snat_translation.py", + "name": "plugins/modules/bigip_monitor_ftp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "47661dbe803d5e73cc0cb62e3553fc6fdb57373978b7a41e599624fe5d1700f1", + "chksum_sha256": "bdc1d53cfad9a92ec822598e93bc448017d408aeec3ec3bd659dd8a698b9df39", "format": 1 }, { - "name": "plugins/modules/bigip_irule.py", + "name": "plugins/modules/bigip_profile_persistence_src_addr.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "666ef88f65a6ef99b8bd65f57c79c1ed9160bd944b81936591d25841846d0d54", + "chksum_sha256": "6e771aa8c5b4c1f91272569f28a040918ba97437c1041bbc676b318e50b8a15e", "format": 1 }, { - "name": "plugins/modules/bigip_device_ha_group.py", + "name": "plugins/modules/bigip_message_routing_route.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec405c082a9c7dd8aa7d425d584a8f8e5334cab1511b5607ef052291273abd20", + "chksum_sha256": "0ad0222f325fc2c9d784acbe78ab6464cf1fa5ce49761124f8c1754a22a3f235", "format": 1 }, { - "name": "plugins/modules/bigip_device_connectivity.py", + "name": "plugins/modules/bigip_monitor_icmp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7652eee26c3e6da4aaf1d697f0fd0e31dbced5fa7a4f9033b4fb36ffe7f00edc", + "chksum_sha256": "bd9ba994c0657d9e53473ccba2417f225f312712fb4d818fd31a0dc5d4a74539", "format": 1 }, { - "name": "plugins/modules/bigip_gtm_wide_ip.py", + "name": "plugins/modules/bigip_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9655660eec607f8a89ecfece004ef30cabf5c1b1524b602360e8d9590a25e05", + "chksum_sha256": "5b6b940d23853d5bd154d7f23ebef294d879126ccdf2e995b37ef03791160981", "format": 1 }, { - "name": "plugins/modules/bigip_monitor_dns.py", + "name": "plugins/modules/bigip_profile_analytics.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ce2274e3ef03ad905f27d379780577761ae6c58888493a2cefe77a555bdcd3a7", + "chksum_sha256": "e7e522fbe0d291260f1a2aa2b9eea81810c313951cfd183b196099995f9ddd5d", "format": 1 }, { @@ -652,87 +603,59 @@ "format": 1 }, { - "name": "plugins/modules/bigip_dns_nameserver.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8eb8664bb45e53549ea810d432af569a6cf209e73f5316f2be36b52ba4cb140c", - "format": 1 - }, - { - "name": "plugins/modules/bigip_qkview.py", + "name": "plugins/modules/bigip_firewall_port_list.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "db4275d34c586503ec8a835f6620d3dd6cac70091b597011afef79366606eec2", + "chksum_sha256": "29b67fe1133eca5c46abb1b02744eb47876fb84baf3ae4fa160cbdbe73ee0303", "format": 1 }, { - "name": "plugins/modules/bigip_snmp_trap.py", + "name": "plugins/modules/bigip_monitor_gateway_icmp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "924448cfe508cba9eb94b45c6369c4970e5be1f85453fec0dd7410af2ad74871", + "chksum_sha256": "1ef78e2fcc4e3534ae79851e252cfea92be264ecb1a823af400e132cbdcbb2eb", "format": 1 }, { - "name": "plugins/modules/bigip_profile_http_compression.py", + "name": "plugins/modules/bigip_message_routing_peer.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a7c0e11936f9a289d0ca3b2e6580a183ef2711348cc54dea0cff059cae7e2d6a", + "chksum_sha256": "4943d7ebe349446ce1658869d552d704e25d9321093c60cd5cacc3be9234cb9c", "format": 1 }, { - "name": "plugins/modules/bigip_ssl_csr.py", + "name": "plugins/modules/bigip_log_publisher.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2e8c72f9fd0db6276b5ee05cf06df0d711b344b48c398b4d93e9cdc249efa3c0", + "chksum_sha256": "77d20dda9243dc13cf41681be6c4cf774c6ebece0ea8f84c7b8896642c4c79fa", "format": 1 }, { - "name": "plugins/modules/bigip_gtm_monitor_bigip.py", + "name": "plugins/modules/bigip_service_policy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8eb188c2df0b83dfef0005af068c1bbd0138b4243abafd4a21cf49bc4bd0482c", + "chksum_sha256": "bdeb2d4ac6712c01cac5cb69dd1a6ced91737f3466364ad71d84354b601ad09d", "format": 1 }, { - "name": "plugins/modules/bigip_monitor_tcp_half_open.py", + "name": "plugins/modules/bigip_device_auth_radius_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7d919761480f92083867ccb1d8db4cc15e446628992274a20fd44b416b28dba", + "chksum_sha256": "5bb0cf640dcdd465703e0905f30282a4446b372caa41f945361a452da9d8f498", "format": 1 }, { "name": "plugins/modules/bigip_profile_http2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe51f060f74bef886566fb06356240b491126aff325c8d51c1dfbeee804f814a", - "format": 1 - }, - { - "name": "plugins/modules/bigip_interface.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c1008aa3e82bc4f02c7036b138a9ed1758cf18ab5c1a513670c6bfe7152f407b", - "format": 1 - }, - { - "name": "plugins/modules/bigip_monitor_external.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43e75580c7d679fc4b6acbc8006adbbf64d4a81a7d91319e364866878bd3e429", - "format": 1 - }, - { - "name": "plugins/modules/bigip_monitor_mysql.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f1c745e52bafb055ca741d508172281751da55b868c4b5a7681f118d96d41c4f", + "chksum_sha256": "3c8d5916b0135b7b93cd3b12d46920a38bd7ee4b943cf33f747a1413e390989e", "format": 1 }, { - "name": "plugins/modules/bigip_node.py", + "name": "plugins/modules/bigip_asm_policy_import.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "598bf801c6b24b42e860966d3085d31dda668499885972087657c2df1af00384", + "chksum_sha256": "3919e54d0cf9b2a47cc72ae34dde3a32f1c6abeded24346202b8f1967aa3f7ea", "format": 1 }, { @@ -743,227 +666,178 @@ "format": 1 }, { - "name": "plugins/modules/bigip_gtm_pool_member.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a74c0eba59fa34bdb9e1dc79cce2bd21a6bca3d8a4f5555e6ec377dbade7d6ca", - "format": 1 - }, - { - "name": "plugins/modules/bigip_ucs.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "899480011c6db0b8cf346f78bd093f346fc52cdc8909ed1e3461682e6ceb6891", - "format": 1 - }, - { - "name": "plugins/modules/bigip_ike_peer.py", + "name": "plugins/modules/bigiq_application_fastl4_tcp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "966aa91cf1f333f99e079e77617d5eff066584eb9ee00e0a5295647bd439dd2e", + "chksum_sha256": "c5e068042f40bc180bb08c974e75562765ff6972b116f83a1a27f239de3e357f", "format": 1 }, { - "name": "plugins/modules/bigip_cli_alias.py", + "name": "plugins/modules/bigip_software_update.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cae992a3d711616226d002391af7dbbf4eee2e77dae97804d4401cdc5069fff1", + "chksum_sha256": "f4bacc2c811b40aecc76df3616848280666ce95335db020ead636d34fdd25388", "format": 1 }, { - "name": "plugins/modules/bigip_device_license.py", + "name": "plugins/modules/bigip_imish_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5dd54d84ffd28cac02c251975456f75de7ff05bd1531a68dad8d4516ea1254b3", + "chksum_sha256": "562f282de4901e38caa7f40d164c2ea8bf1a5a5b4e5be007dc24b18e976cd38e", "format": 1 }, { - "name": "plugins/modules/bigip_firewall_address_list.py", + "name": "plugins/modules/bigip_gtm_virtual_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "56a3c75eebf5487aa7a30303e3963b452616556df44a99b735a9af9937ca39c8", + "chksum_sha256": "9ca294dde4d59c8be107ba82967bac2eb79f52ba5f1fa971bd7bad67dcd36a24", "format": 1 }, { - "name": "plugins/modules/bigip_monitor_http.py", + "name": "plugins/modules/bigip_gtm_topology_record.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bd74076eaf3967ac51fcc983934b0ca0985c60ed74abe7443d61fde6b7ce04e7", + "chksum_sha256": "c447e5e0435c7a7f1bcc84c3e254e3da81d64c28e57a1ad6e309c308a18e0f18", "format": 1 }, { - "name": "plugins/modules/bigip_password_policy.py", + "name": "plugins/modules/bigip_file_copy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70bce623b55a300f89514cefbc5629c2c133246c2c5e699bd73da7d50f624646", + "chksum_sha256": "127753ca60229fa8a859a11326ed840671cefd179a83e9cf12bec89b93e9f393", "format": 1 }, { - "name": "plugins/modules/bigip_smtp.py", + "name": "plugins/modules/bigip_message_routing_protocol.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f2bfc977d3ddd1f15c77fde618519718d135342c06cda532dd58354b99c5bb22", + "chksum_sha256": "d15f1e12cb1819dc5eff8e9e32ad4ff3d3aa9fd6e2e0696466352ae8dc23ff39", "format": 1 }, { - "name": "plugins/modules/bigip_profile_persistence_universal.py", + "name": "plugins/modules/bigip_command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "88a8959e828755f1d229a8118616f19daa3c0c21b1d21743938160cf812c1702", + "chksum_sha256": "51fbb780ac470f03458efca16d0918b2f51190ff70c613694228e0cfc0bc1163", "format": 1 }, { - "name": "plugins/modules/bigip_message_routing_transport_config.py", + "name": "plugins/modules/bigip_snmp_community.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "751336b1ec434bcd4d8acd6034f3b061b17d6995ac16b83144d7412a9800e5b7", + "chksum_sha256": "c9ee667c377959fda8bfe8d39053ab49152f67c60b4784677d354a94f56c724a", "format": 1 }, { - "name": "plugins/modules/bigip_profile_dns.py", + "name": "plugins/modules/bigip_tunnel.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b945587d80c3ca931f274c725e6097c77c1bd175e3b20598f2f80bc21112a965", + "chksum_sha256": "3cfbe5f2b8d5a34d7e171339d5a5e28170171bd6208f3db4776d240dcba8038e", "format": 1 }, { - "name": "plugins/modules/bigip_service_policy.py", + "name": "plugins/modules/bigip_monitor_mysql.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "71b1cd8295ed5746246e9238d3fb057277256baf0490a081572839f16acc51f1", + "chksum_sha256": "f1c745e52bafb055ca741d508172281751da55b868c4b5a7681f118d96d41c4f", "format": 1 }, { - "name": "plugins/modules/bigip_gtm_monitor_http.py", + "name": "plugins/modules/bigip_node.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75340235ae5bc6d9ebc7b95ea2966c681d586a9a7c3a78df693dfbc4a3084011", + "chksum_sha256": "598bf801c6b24b42e860966d3085d31dda668499885972087657c2df1af00384", "format": 1 }, { - "name": "plugins/modules/bigip_ssl_key_cert.py", + "name": "plugins/modules/bigip_asm_policy_server_technology.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b8e6d9a4af56ab8135b00e89e7b31ff07ffb49a8c760e92ec93fac1ee7005991", + "chksum_sha256": "d6508985230a1ea3c0311c48580ace162b30db28df8e24970514915764ea0099", "format": 1 }, { - "name": "plugins/modules/bigiq_regkey_license_assignment.py", + "name": "plugins/modules/bigip_smtp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a77e03c560b3e1ffd3608ec37bc1268d16f8d9d85401b605717c6cbf601beae", + "chksum_sha256": "f2bfc977d3ddd1f15c77fde618519718d135342c06cda532dd58354b99c5bb22", "format": 1 }, { - "name": "plugins/modules/bigip_device_auth_radius_server.py", + "name": "plugins/modules/bigip_software_image.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5bb0cf640dcdd465703e0905f30282a4446b372caa41f945361a452da9d8f498", + "chksum_sha256": "8e7ef3ba6aa029fa69e38fce67e7fd49db7e207f78b2e86204fb058ee520eb64", "format": 1 }, { - "name": "plugins/modules/bigip_device_ntp.py", + "name": "plugins/modules/bigip_gtm_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ee41ce95c64f8ba921ae8520c1e16f77b2b7ab5ac24ce30a90784d459d05d9f", + "chksum_sha256": "dcc757069f4ee747612a5a9c703e51fb14ff9b81649bccf80b74ddcdcf744155", "format": 1 }, { "name": "plugins/modules/bigip_gtm_monitor_tcp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5b7e3ded2ec9b5fb9a690cb333ee5942367dc9898557fd513b2c965d699286d6", + "chksum_sha256": "edeeecc688557e8f253fd9fde44b70d4163b819c536a627e758f1de2868788e6", "format": 1 }, { - "name": "plugins/modules/bigip_vcmp_guest.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "08d4155c3f3285dcce93f389fee183d85044db9ec7ad53949064c50e2b1e8e34", - "format": 1 - }, - { - "name": "plugins/modules/bigip_monitor_oracle.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8bd7d1d9cbd13563836ecb1d7531118496d5c8d6b35e0241890744b3e6c32674", - "format": 1 - }, - { - "name": "plugins/modules/bigip_monitor_https.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d9738c134e528f7406cca5bd8cf7e091b280326c85e9db444e6de387a280861c", - "format": 1 - }, - { - "name": "plugins/modules/bigip_device_auth.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1ad78ea7904b6786f1572a9f4fdfc9f27bfd536ab0951dbdedf7c074003c5ea6", - "format": 1 - }, - { - "name": "plugins/modules/bigip_selfip.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0e18f26b1394474dbed398b297afaa380be7839c343775dafaa6af05761b2f29", - "format": 1 - }, - { - "name": "plugins/modules/bigip_tunnel.py", + "name": "plugins/modules/bigiq_regkey_license_assignment.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "56b64fda6c16aeefe8e0ead59c9fa05cf90633373ed45bb21041812e378d5de1", + "chksum_sha256": "6d96ee9032104c4373eddbf597943754932fddc834309e344c28663a61aadfe9", "format": 1 }, { - "name": "plugins/modules/bigiq_application_fasthttp.py", + "name": "plugins/modules/bigip_firewall_dos_profile.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "27a45cda2321034744a9406bf006cf478c2b82333d9768c215e45304ed8a3993", + "chksum_sha256": "261bbad4881195f7bf4b56efe6d2489aad15f5e1f7bc875b63d4d8d22f647bf9", "format": 1 }, { - "name": "plugins/modules/bigip_message_routing_protocol.py", + "name": "plugins/modules/bigip_device_traffic_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ff33eb7944ecf69c221768b85502494dc52dc5666292a2d7799b01319d0e627", + "chksum_sha256": "b25d9bd8a69c42dfeda65cf72e7d6dffb4a7b60abe37f6b9596392041f7f29fa", "format": 1 }, { - "name": "plugins/modules/bigiq_regkey_license.py", + "name": "plugins/modules/bigip_profile_dns.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "164af498ef1f146266138b546354b783f5778ccb6ae9472383162860aa1026e6", + "chksum_sha256": "6fe56fe03aa30f03585c2098b657ee62517655683782fe781a87b74daa1f5a23", "format": 1 }, { - "name": "plugins/modules/bigiq_device_info.py", + "name": "plugins/modules/bigip_profile_sip.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "927802576c425dde2e44af840d5cdf8af5765125fc240fbd52c67159d95dcb92", + "chksum_sha256": "c9d196f7338d5882878f29be43544f1872245431e71b4a9630084bc6460c96c4", "format": 1 }, { - "name": "plugins/modules/bigip_dns_cache_resolver.py", + "name": "plugins/modules/bigip_apm_network_access.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d11e72c29f3a0c0a686511765d94ec940cb904ebd01b09e53d7ca40e555fcd01", + "chksum_sha256": "a8a3b1c7128d80762a5540ef424c70ff08397814dd3f51b3fc4f37abf70eea43", "format": 1 }, { - "name": "plugins/modules/bigip_static_route.py", + "name": "plugins/modules/bigip_vcmp_guest.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "69dc27521933bb89a9fa762d61e5cc9c52c80e716dab92386ffeb3808eb61680", + "chksum_sha256": "249c388e7c34a0ef40a36b4352c91ec38142ad07162846d32bc3b833c14c0f9c", "format": 1 }, { - "name": "plugins/modules/bigiq_application_https_waf.py", + "name": "plugins/modules/bigip_profile_persistence_universal.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a7d6b610ac97107100ab8fe4c509b5051357196d43e04f0848f7b2939d6ac4b", + "chksum_sha256": "a194b75b214b6b23a14e848924ec5e94d992284af95cef2965b2bc374c9b70f5", "format": 1 }, { @@ -974,3755 +848,745 @@ "format": 1 }, { - "name": "plugins/modules/bigip_cli_script.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b903a5a98332ee87425c2ae98499ba1efdf30ac1cd2264e0dd3cd0315501d03a", - "format": 1 - }, - { - "name": "plugins/modules/bigiq_utility_license.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1dafc8b998e6b347c403ffcbb8c6c10a416c02d2a6a8c3046d2b5a5912606391", - "format": 1 - }, - { - "name": "plugins/modules/bigip_gtm_monitor_firepass.py", + "name": "plugins/modules/bigip_pool.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c6cbf14603b1b0a4feb4f08de1e9b22f1232932e645de6b0b22e53df20272115", + "chksum_sha256": "59a2fc469ddefd4d2fbde356d4196a51d7690650f404fc1dc09dc5383d34cf81", "format": 1 }, { - "name": "plugins/modules/bigip_profile_http.py", + "name": "plugins/modules/bigip_device_httpd.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "415220b57860693d226a9b222bc8bfea38375537aa590e88861d3f0ba61cbe9e", + "chksum_sha256": "8a75ca3cfc9fc376ce7fa58d7b66ef85cefcbd866bc2968e539dec5ef49a55de", "format": 1 }, { - "name": "plugins/modules/bigip_data_group.py", + "name": "plugins/modules/bigip_wait.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6d7bd0388e26408dd19ed5f45158905f449ae6247a22c54b3efd5c5c193387ee", + "chksum_sha256": "487ab60410f891e6347fde3576683f55b09c363cfb271a6a7f30a04e7f115384", "format": 1 }, { - "name": "plugins/modules/bigip_gtm_pool.py", + "name": "plugins/modules/bigip_gtm_monitor_tcp_half_open.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4c262455f66a73a433b88227b77a83caeb3d8b4eaffed21b783bd827ce4a69", + "chksum_sha256": "b764deb9bfc965b253770b8b3f44d9cf8ec0139a53b889a638ad6faa0704c8c5", "format": 1 }, { - "name": "plugins/modules/bigip_asm_advanced_settings.py", + "name": "plugins/modules/bigip_profile_server_ssl.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1702b84354d2f532b350a6236692ce722234e6fad0f3d720f7bcc445c70ae299", + "chksum_sha256": "8f91206619baaf98690eee1d6efe9f37c789f78ffe9a6edf637939f047a31ede", "format": 1 }, { - "name": "plugins/modules/bigip_firewall_port_list.py", + "name": "plugins/modules/bigip_password_policy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29b67fe1133eca5c46abb1b02744eb47876fb84baf3ae4fa160cbdbe73ee0303", + "chksum_sha256": "b4da3a7eb482c93c088f32d7296cacfaefa15f159984eb57fe03371ac1e6d902", "format": 1 }, { - "name": "plugins/modules/bigip_remote_role.py", + "name": "plugins/modules/bigip_gtm_pool.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d24b08254fe993afd682d61b0793e6e4ec37e9eec663888ae2bff728deb439b", + "chksum_sha256": "ec4c262455f66a73a433b88227b77a83caeb3d8b4eaffed21b783bd827ce4a69", "format": 1 }, { - "name": "plugins/modules/bigip_apm_policy_fetch.py", + "name": "plugins/modules/bigip_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8c5dc2994df97ca9d5066847a15eb61a6603c0bc59512b295003fe558c0acc1", + "chksum_sha256": "8c17ffbbb9f88b59a9ab1b43260f34451fa85db91ec66814f41b13f302fe1a63", "format": 1 }, { - "name": "plugins/modules/bigip_device_sshd.py", + "name": "plugins/modules/bigip_ltm_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8ab29953693b4a12101be9c048b6dca5da3a26ede42bf35e379664ba83d618", + "chksum_sha256": "d908da3f807cdf618e0f54d993c1bc3c28cc9ac9e886791d2aef7ed46d1f3ffc", "format": 1 }, { - "name": "plugins/modules/bigip_asm_policy_signature_set.py", + "name": "plugins/modules/bigip_monitor_tcp_echo.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "02ce26664f6f5e5f5a3102e30a20de4a62b37204bf3d647d8029f01b312ba68a", + "chksum_sha256": "ae96be8c2f48e0da75c18cc0f81c8dbb8e84d5defc2ade753b525e419c1a5274", "format": 1 }, { - "name": "plugins/modules/bigip_monitor_smtp.py", + "name": "plugins/modules/bigip_remote_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49442c7ce41064806ebe6e8dcefcebdde78232da8a11ef7da39a703b08514c3e", + "chksum_sha256": "570c39c038b76b5826e7f585388dcb279050245f98a2c5cf635e214cae16ec7e", "format": 1 }, { - "name": "plugins/modules/bigip_lx_package.py", + "name": "plugins/modules/bigip_profile_http.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a3084dcb49d9a3bc0d2cdc664bbe29dea60e91ff020dfd139e34d81d81ca50d", + "chksum_sha256": "933d3ec165a0631923a61e3950e5f84f46f72aaa30afe8e4ca2f20ba17c04d9a", "format": 1 }, { - "name": "plugins/modules/bigip_provision_async.py", + "name": "plugins/modules/bigiq_application_https_offload.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8991bc1811395b74021987f44ed4b976665d0e7e657b1dd933c363565c48eb21", + "chksum_sha256": "d09875b1531663f7b67fe0cbd21bbb55b7fb9ca33aa193580bbb678b2ad213c3", "format": 1 }, { - "name": "plugins/modules/bigip_configsync_action.py", + "name": "plugins/modules/bigip_sys_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37f7f1b5f8bf62a9fb44cadc9b0a62c8a0616b19a8b9fcc5b758e5401cc0ea87", + "chksum_sha256": "8de67ea678ede33c2e74c25a3407b850a285e41a9b197f4b6e48d640e96695e8", "format": 1 }, { - "name": "plugins/modules/bigip_gtm_server.py", + "name": "plugins/modules/bigip_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26bb7cc2f623229b81df3a596e662f988cc27e637106a5afc346fca2de498617", + "chksum_sha256": "dbe2fd940d86d471496009eeb360c60b0563b04a551033696980e29b1a33d126", "format": 1 }, { - "name": "plugins/modules/bigip_profile_sip.py", + "name": "plugins/modules/bigip_monitor_dns.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7cf39b850e6e1324a4f302f05d95a88269558ebd366f69272ab196a07c10efb", + "chksum_sha256": "922b49dfe20681c59fbc4b8362baa99541c5a38440b6062f07075f6660e6f50f", "format": 1 }, { - "name": "plugins/modules/bigip_asm_policy_manage.py", + "name": "plugins/modules/bigiq_application_https_waf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c24f11e10a42813ed2a78b9c69da080b8543ab2eb7a1ca10676344a02c15c11", + "chksum_sha256": "3f8bd97823ac25efd91f6a3762ae91405d5b866763a53be087dccb7e999bffe5", "format": 1 }, { - "name": "plugins/modules/bigip_profile_client_ssl.py", + "name": "plugins/modules/bigip_gtm_datacenter.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1d71d3c6149c382b031e85212b4c28a197b596a986cec35216ed0260b4c8cea1", + "chksum_sha256": "873bc98ca107f38c49eed027edf1dc8a3c08d76fea5bf61099462861b7b8ac44", "format": 1 }, { - "name": "plugins/modules/bigip_firewall_rule_list.py", + "name": "plugins/modules/bigip_pool_member.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dd21fc65fcdde86cfb7bb27382234b58197295bdbff31bd466e9b1e2885206b3", + "chksum_sha256": "92c491433024ef9d22c266f50a6cf481ae856777858a2d2bcbf178aef93b73c3", "format": 1 }, { - "name": "plugins/modules/bigip_device_certificate.py", + "name": "plugins/modules/bigip_message_routing_transport_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5fd231a5d46c1f69c2d9751b460ccc2296a4f334cf64b1e942427fb25032c74", + "chksum_sha256": "751336b1ec434bcd4d8acd6034f3b061b17d6995ac16b83144d7412a9800e5b7", "format": 1 }, { - "name": "plugins/modules/bigip_imish_config.py", + "name": "plugins/modules/bigip_asm_advanced_settings.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d72039a4961776d9e6c42b10589a074229fa382ed00b22ac5658c0324845a8e7", + "chksum_sha256": "1702b84354d2f532b350a6236692ce722234e6fad0f3d720f7bcc445c70ae299", "format": 1 }, { - "name": "plugins/modules/bigip_user.py", + "name": "plugins/modules/bigip_provision_async.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dbe2fd940d86d471496009eeb360c60b0563b04a551033696980e29b1a33d126", + "chksum_sha256": "146e163d5c92d5e2e181332390ee3cfe551a90cb42ee9d2152734d8674445b82", "format": 1 }, { - "name": "plugins/modules/bigip_traffic_selector.py", + "name": "plugins/modules/bigip_snmp_trap.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9f96c55a2d323e93e35d9bf9605858df0b1128473e0649102532e0aac784e350", + "chksum_sha256": "924448cfe508cba9eb94b45c6369c4970e5be1f85453fec0dd7410af2ad74871", "format": 1 }, { - "name": "plugins/modules/bigip_dns_zone.py", + "name": "plugins/modules/bigip_profile_oneconnect.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eac29a970cfc8d1233087a411a1e8f8f40c1a4b256521cbc5dcfea38fbc8a219", + "chksum_sha256": "3628016ae189d81c3b1302b9f0b6b871292a04942e604af4a64a8c23f592c4e2", "format": 1 }, { "name": "plugins/modules/bigip_iapp_service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c14eaf1f6981364a84ee0672e94d3e9e542cad1143a76194a10a9494ff8c108", - "format": 1 - }, - { - "name": "plugins/modules/bigip_gtm_topology_region.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "765bbddda2e650572f13bdc34baef49294589fc379d17b9bd2295e4e7439bb97", - "format": 1 - }, - { - "name": "plugins/modules/bigip_remote_user.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9cee9d710199b2c22cda979d86cdcb4c47226ee911321b195068542cea78edf7", + "chksum_sha256": "daf54ebd537314b543c5ce79aff94f6a4632413ccc77ae2f139fe3e243a6244d", "format": 1 }, { - "name": "plugins/modules/bigip_trunk.py", + "name": "plugins/modules/bigip_gtm_dns_listener.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d54179bf64ef68923d4343ab54db75a5355effdb38afa6cc24ee039aa204294", + "chksum_sha256": "80be0bb7701797ba155292e074f35128405e42282534dd287d30c1c27e30dd19", "format": 1 }, { - "name": "plugins/modules/bigip_file_copy.py", + "name": "plugins/modules/bigip_gtm_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c243a6d1783d49a7ac6b5f4e75eb8f498a8086c6398c7587ba6d10f6b10f4454", + "chksum_sha256": "eb6ee54dfaf86a600c5331e2788b3bae47935b0b25040132a608c2674e4809b8", "format": 1 }, { - "name": "plugins/modules/bigip_policy_rule.py", + "name": "plugins/modules/bigiq_utility_license.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2ae59d5d6b248a9b8c362850ec1849e2ec3c1378cd5a076de21b000bb81fcb3f", + "chksum_sha256": "898b6b52f5fb6f01032c5a122832f3b0d1de2e6b4ec4de1dd0987c5b0e959029", "format": 1 }, { - "name": "plugins/modules/bigip_partition.py", + "name": "plugins/modules/bigip_dns_zone.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d469275bd12517ab87972825bd68d62296c2d861c8973086cb53e22f6a556419", + "chksum_sha256": "72f93b478f7213eaefdf3ef4dea8e47070ea71aba641006812edc2bf970e5aa7", "format": 1 }, { - "name": "plugins/modules/bigip_monitor_gateway_icmp.py", + "name": "plugins/modules/bigip_monitor_tcp_half_open.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6c118a8157686a4ff8541faea6015d3fdb8b8fbbe88d9f6348d2c0330f8f01b", + "chksum_sha256": "c7d919761480f92083867ccb1d8db4cc15e446628992274a20fd44b416b28dba", "format": 1 }, { - "name": "plugins/modules/bigip_firewall_global_rules.py", + "name": "plugins/modules/bigip_static_route.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "761da4bd39bb7b5cad5721b04776a739c160fc2289e053168b65da981121f9d1", + "chksum_sha256": "519a729fb294d5cc0e7cc27be45fea6db2afecad863f041bbca28f1bbf54d30a", "format": 1 }, { - "name": "plugins/modules/bigip_sys_db.py", + "name": "plugins/modules/bigip_policy_rule.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "23aed116310c42a867a67d370b3cdc96d2693ee2244d040142f3ac15d9727b11", + "chksum_sha256": "19c7438674941eaeb50860f8198495cf16bfd63978cef2fcc5bb1ad161514b7f", "format": 1 }, { - "name": "plugins/modules/bigip_monitor_tcp_echo.py", + "name": "plugins/modules/bigip_virtual_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae96be8c2f48e0da75c18cc0f81c8dbb8e84d5defc2ade753b525e419c1a5274", + "chksum_sha256": "543ce917b77a7f8f27d77973b79e0b25a24361b36766977422988f2a525293ce", "format": 1 }, { - "name": "plugins/modules/bigip_ssl_key.py", + "name": "plugins/modules/bigip_device_license.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "04aab925b52624ae35f3772132560244253c5d45e1f5ea20fa90b6de030cb345", + "chksum_sha256": "0ba0ba018bbba20feb99a5e931e9ee4e6985fe8e20c18defb6772f02074b2138", "format": 1 }, { - "name": "plugins/modules/bigip_message_routing_peer.py", + "name": "plugins/modules/bigip_profile_client_ssl.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e926fd5a8255a0d4f7a30e8794f515290280874755c482a5380ba510f74ed373", + "chksum_sha256": "1ab89babd2dc571c0c1681cb097bbdad7daec4996785e5eacde6e80f748fab9d", "format": 1 }, { - "name": "plugins/modules/bigip_software_image.py", + "name": "plugins/modules/bigip_profile_ftp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8e7ef3ba6aa029fa69e38fce67e7fd49db7e207f78b2e86204fb058ee520eb64", + "chksum_sha256": "b95de4d4fa1f43fdc2c1d674dc65b946c2d1f10cf765662a2b3782019b128a0b", "format": 1 }, { - "name": "plugins/modules/bigip_firewall_dos_vector.py", + "name": "plugins/modules/bigip_monitor_https.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d673ca106f6e71d6b6610084dab7c058db54a38191c969052b4575c0218b686c", + "chksum_sha256": "d9738c134e528f7406cca5bd8cf7e091b280326c85e9db444e6de387a280861c", "format": 1 }, { - "name": "plugins/modules/bigip_sys_daemon_log_tmm.py", + "name": "plugins/modules/bigip_lx_package.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80495414e105c3587af33e9d45eb00b9f41e908794a7320d0d049e7284d494db", + "chksum_sha256": "a0954410c5b1b02dbbf116f870a6818bb8d831e9591dd6435769fc2b6b133511", "format": 1 }, { - "name": "plugins/modules/bigip_dns_resolver.py", + "name": "plugins/modules/bigip_remote_syslog.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ae2bf84029f37350b769691a847d238037861c0331e86fb43df0f05873f8708", + "chksum_sha256": "0323b91326fcf57fda627c6e2ecb94444e1387a8186585537f1660215ad04b63", "format": 1 }, { - "name": "plugins/modules/bigip_profile_fastl4.py", + "name": "plugins/modules/bigip_device_ha_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7bbfb3eab896bfe678272fb7cb3ceb9114596c4e0d2d3fef5f92e83925fba93f", + "chksum_sha256": "7ba19e1fc4326c3c7abc65d9a86e372dfdbaa05fa4be4b5e9e883d2de5830ef1", "format": 1 }, { - "name": "plugins/modules/bigip_device_auth_ldap.py", + "name": "plugins/modules/bigip_log_destination.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6aaf3cb639065e979cea6c0f27b87f3c0fea5120f0aa61a349fb308b607f3a97", + "chksum_sha256": "fe7769726c44b27b9439ea928b5de6e0b94038b4df2d7b35e6b93ee772f37efd", "format": 1 }, { - "name": "plugins/modules/bigiq_application_fastl4_udp.py", + "name": "plugins/modules/bigip_device_syslog.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2feadf0af8b493f6b3e5ebc8d601e5fa802990ca17ce6e073c4371c19abaa006", + "chksum_sha256": "80cc4b183972da70ad10b0caef53709958572246a6320ad3034995e6a022b4e9", "format": 1 }, { - "name": "plugins/modules/bigip_gtm_monitor_https.py", + "name": "plugins/modules/bigip_monitor_oracle.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8a56a9d00ff663b1ae2199bfe600c589063f4ffe1405aa0f43338a04fd3cc7cc", + "chksum_sha256": "8bd7d1d9cbd13563836ecb1d7531118496d5c8d6b35e0241890744b3e6c32674", "format": 1 }, { - "name": "plugins/modules/bigip_profile_persistence_cookie.py", + "name": "plugins/modules/bigip_device_dns.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "32295b340ee8870954cc7b0507d04a79669617a6f44e283c8d06861b6c5c2527", - "format": 1 - }, - { - "name": "plugins/filter", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "5a4cd44095eefc62fabb59facf73715d35365a1eab8811d1d40023c5dea28d01", "format": 1 }, { - "name": "plugins/filter/markdev.yml", + "name": "plugins/modules/bigip_qkview.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6cdb9729e47fd2c745535ff94f747b303a36f44a651ebd3a3dc072546e38a467", + "chksum_sha256": "0608f829f202b3c412626c6f5b47227dc3f6381214e527f1a9cf2c669bf99057", "format": 1 }, { - "name": "plugins/filter/__init__.py", + "name": "plugins/modules/bigip_firewall_rule.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "756823fbdcc4c95bfe1ca59aec13dd7dd70e889ae217d10a0910a0b7f882372c", "format": 1 }, { - "name": "plugins/filter/abspath.py", + "name": "plugins/modules/bigip_timer_policy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "94388256cab5f78d822f4ed1ae29c393bc9c99f985a94d3e3a3dc1dcf48902c7", + "chksum_sha256": "19c398a5727501b4133f4b54cec1538975099d4c21e7378d5e5df1fe85f21bc8", "format": 1 }, { - "name": "plugins/filter/markdev.py", + "name": "plugins/modules/bigip_profile_http_compression.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e5979643cec822c97fcac16f9949e0c492a2beec58059ac4d92cbfdd0e69eff4", + "chksum_sha256": "a7c0e11936f9a289d0ca3b2e6580a183ef2711348cc54dea0cff059cae7e2d6a", "format": 1 }, { - "name": "plugins/filter/abspath.yml", + "name": "plugins/modules/bigip_snat_translation.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "303ac903f5a03c6ac97db580e016613c76991b64cc00c9f878648ae75bde81d8", - "format": 1 - }, - { - "name": "plugins/terminal", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "68287038f9e4f7443ef5af303a11f3ad6d1397b636b9b776708fd55909f6d4d5", "format": 1 }, { - "name": "plugins/terminal/bigip.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a6aef530b33f3a1b1858a6107fe421e4f3c1b19cabe666788903d19629ca5ab9", - "format": 1 - }, - { - "name": "plugins/action", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "plugins/action/bigip.py", + "name": "plugins/modules/bigip_snat_pool.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d4a954f0bd617af57a2fed473cb3d11e147c8f51fd0b9b24786b1bf1010ca0c9", + "chksum_sha256": "66ef1b82e9da473c3cdce5292e65fa70581a803233d3d193f8a282b0f6859717", "format": 1 }, { - "name": "plugins/action/bigiq.py", + "name": "plugins/modules/bigip_monitor_ldap.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3fd5efd828fd32d99042df102ef65f523f0ca50fa92b26d68f9965dee9d07f8", + "chksum_sha256": "15c13e26bd33f77a7b19f4a7526fce4490e6c89e76b7b222b371dc2755fe8170", "format": 1 }, { - "name": "plugins/action/__init__.py", + "name": "plugins/modules/bigiq_device_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "476dbd4245265ab47d4881b64413ab0a47505d662713b692ac335f31740cbc63", "format": 1 }, { - "name": "plugins/action/bigip_imish_config.py", + "name": "plugins/modules/bigip_sys_db.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31e51f351239d474360b8e925ab329ea8c7a6708b1e4bf65482a13ad0c467de1", + "chksum_sha256": "3d4d12b22bf14dc7f635a0817f5b1517d5fe7987b2e97156e48cd58adaddeaf3", "format": 1 }, { - "name": "plugins/module_utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "plugins/module_utils/bigip.py", + "name": "plugins/modules/bigip_monitor_udp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9bf1c7eed8b58689a446f8d230d5bbec595af048dbe552ac8ba4f7c7ea4dc159", + "chksum_sha256": "89b1a4232936060fc6a7dcd27a369b830f7911e64a9b87d4c024872e0f7a7851", "format": 1 }, { - "name": "plugins/module_utils/common.py", + "name": "plugins/modules/bigip_cli_script.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c36c92d5fa539b0148466d8e9b1722bbd6af047e9b7583e6d59591efeb480e8", + "chksum_sha256": "b903a5a98332ee87425c2ae98499ba1efdf30ac1cd2264e0dd3cd0315501d03a", "format": 1 }, { - "name": "plugins/module_utils/icontrol.py", + "name": "plugins/modules/bigip_asm_policy_signature_set.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c71d6a6fceec383fed5ee3d3c00954e7f86ecfa078f28c59af1c4b1a9c54931", + "chksum_sha256": "02ce26664f6f5e5f5a3102e30a20de4a62b37204bf3d647d8029f01b312ba68a", "format": 1 }, { - "name": "plugins/module_utils/urls.py", + "name": "plugins/modules/bigip_device_trust.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f436f363ea23d8fb624544adc4771e2c53a0cd595f68b19fdb924f02400a6cb8", + "chksum_sha256": "a6cf492b56c8bbc97abc2aee3bbfe71cdb34825fda4a34f40e6f00d63c6072ed", "format": 1 }, { - "name": "plugins/module_utils/version.py", + "name": "plugins/modules/bigip_dns_cache_resolver.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "38f579c0ec4108bf7c22f2f7d45643d7c71a9eb60301d2f5b8c0329d94a8d13b", + "chksum_sha256": "67becd2eaaa73e4afa0ab6cb15297a326979a16cfe4902a850688807ffb19d69", "format": 1 }, { - "name": "plugins/module_utils/bigiq.py", + "name": "plugins/modules/bigip_asm_policy_fetch.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9b8b2050050443f1f9c62fecea243d81406adf8c0a71039bbf012546b63675ba", + "chksum_sha256": "994b85ee7503fa8a15cb74744338c52e0d95d422e464cfc79f5fd4304be1ac62", "format": 1 }, { - "name": "plugins/module_utils/compare.py", + "name": "plugins/modules/bigip_firewall_policy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "92cbe2dedb92dc808900590a9cda97f9dfa8ee2f524be5956ac85367eb3779f8", + "chksum_sha256": "884b72e661b6e884e71ef387c2cf211cba6fa1f04e38c09982b8ef8345b452d5", "format": 1 }, { - "name": "plugins/module_utils/constants.py", + "name": "plugins/modules/bigip_gtm_monitor_https.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "91773c13ccdcdede9b230def5ff1b20bc9db1ede042f7e036f1430c748c6375e", + "chksum_sha256": "b28973b4f5a7f27eb84c37795923704d93710fa193f95f32c4ecf84b30c61c16", "format": 1 }, { - "name": "plugins/module_utils/__init__.py", + "name": "plugins/modules/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/ipaddress.py", + "name": "plugins/modules/bigip_configsync_action.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ed137ab728c4bf0db553fb1ae4a0c311dbd07a919c08e0e1d564d6ce932b625b", + "chksum_sha256": "21d27e603ad4f312c3d5cd380b2096199892f31734e4c01e7457bfc962b1e735", "format": 1 }, { - "name": "plugins/module_utils/teem.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "896f61bcd09bdc0a3bba99e90085bfda598fb0eb1a1df5722675e10751a38fa0", - "format": 1 - }, - { - "name": "plugins/doc_fragments", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "plugins/doc_fragments/f5_rest_cli.py", + "name": "plugins/modules/bigip_device_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bada3d8a76f3bf2e5d8af486acac899d18d7ea6ad05cb0311f9ddad0aaf2cb9e", + "chksum_sha256": "f4f990b6428881102c8f892719dae175a0710d92a7531f0e88342fc34f8ca18a", "format": 1 }, { - "name": "plugins/doc_fragments/f5.py", + "name": "plugins/modules/bigip_monitor_tcp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "933f7850e73d9c9def45c694cc83ef7f9d7484de9101341bbbcab7863b5db9af", + "chksum_sha256": "bb43a03c16b7349438aa924f5369e1ccc4e06ddbae3d01ebee1a4a83594797f3", "format": 1 }, { - "name": "plugins/doc_fragments/f5ssh.py", + "name": "plugins/modules/bigip_gtm_topology_region.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cc8d730aa05dee2b74b7f2b6a6d11e2fddfcf45cdbc9f7e4b7fc7b0f5c744795", + "chksum_sha256": "9d46c1cda5ed4ab6a55acab7d8f2a555ac64223fd8b34b2e5a7046eebeb61bcc", "format": 1 }, { - "name": "README.md", + "name": "plugins/modules/bigip_firewall_dos_vector.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "560b1dbba5a07577d94d8e07caa498fe9ed5e03950300b52ae7f497bed0156ed", - "format": 1 - }, - { - "name": "meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "d673ca106f6e71d6b6610084dab7c058db54a38191c969052b4575c0218b686c", "format": 1 }, { - "name": "meta/runtime.yml", + "name": "plugins/modules/bigip_management_route.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52a0cfd3860b8fe53a06c30e2c88a9767f6dfaa152c96a7f9056b4ff97acee42", + "chksum_sha256": "97d580a927d9cf33e812fc384f396cf343500e69adc3cf21fb7b1e979620e3a0", "format": 1 }, { - "name": "requirements.txt", + "name": "plugins/modules/bigip_provision.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae8fc643547bbfa59fd2713e3a951856be3c57ca3fe0f6f7072ff5eafda6d4e7", + "chksum_sha256": "74812f7aa4a251d98ae9c904273a0da1bb327b740c75f2ba69576db2c7ea9e42", "format": 1 }, { - "name": "CHANGELOG.rst", + "name": "plugins/modules/bigip_selfip.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ce04a15c6088db8156309db5f7d953cb29917d8f5c553c8972f05b20d9d7ba7d", + "chksum_sha256": "9b1a696dbcca1c8ea97bc6d3e3c9bf706dcba807751f6bf2c21296355b70ed0c", "format": 1 }, { - "name": "changelogs", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "changelogs/.plugin-cache.yaml", + "name": "plugins/modules/bigip_device_sshd.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "72990cdd9da2ab0a0623a9985d3246bf3d5fbcb9822f3de0e152af743a53e6c2", + "chksum_sha256": "1c8ab29953693b4a12101be9c048b6dca5da3a26ede42bf35e379664ba83d618", "format": 1 }, { - "name": "changelogs/fragments", + "name": "plugins/action", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "changelogs/fragments/.gitkeep", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "changelogs/config.yaml", + "name": "plugins/action/bigip_imish_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "873ec82a82a091e5b1f61bd7d437c96c15c2499db6bce405421f6bbd911363b0", + "chksum_sha256": "31e51f351239d474360b8e925ab329ea8c7a6708b1e4bf65482a13ad0c467de1", "format": 1 }, { - "name": "changelogs/changelog.yaml", + "name": "plugins/action/bigiq.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "58f5f55097fdf980ed6cfc2b1f918a73cc4a1432f9c3dc8b57b794045dce03e4", - "format": 1 - }, - { - "name": "tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "d3fd5efd828fd32d99042df102ef65f523f0ca50fa92b26d68f9965dee9d07f8", "format": 1 }, { - "name": "tests/requirements.yml", + "name": "plugins/action/bigip.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c721c22d162a92e24e44914441db245a2504e988507b4acb891d015ee3d257e", - "format": 1 - }, - { - "name": "tests/unit", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "d4a954f0bd617af57a2fed473cb3d11e147c8f51fd0b9b24786b1bf1010ca0c9", "format": 1 }, { - "name": "tests/unit/requirements.yml", + "name": "plugins/action/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c721c22d162a92e24e44914441db245a2504e988507b4acb891d015ee3d257e", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/mock", + "name": "plugins/filter", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/mock/procenv.py", + "name": "plugins/filter/abspath.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "429a8314ff29212b69426bfd0ddf73a618db4161b3088ebd77dafd3245140e8e", + "chksum_sha256": "303ac903f5a03c6ac97db580e016613c76991b64cc00c9f878648ae75bde81d8", "format": 1 }, { - "name": "tests/unit/mock/vault_helper.py", + "name": "plugins/filter/markdev.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4535613601c419f7d20f0c21e638dabccf69b4a7fac99d5f6f9b81d1519dafd6", + "chksum_sha256": "e5979643cec822c97fcac16f9949e0c492a2beec58059ac4d92cbfdd0e69eff4", "format": 1 }, { - "name": "tests/unit/mock/loader.py", + "name": "plugins/filter/abspath.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3b51ec0d45347a3568300e50f688998007e346f052bd2e961c2ac6d13f7cee4d", + "chksum_sha256": "94388256cab5f78d822f4ed1ae29c393bc9c99f985a94d3e3a3dc1dcf48902c7", "format": 1 }, { - "name": "tests/unit/mock/__init__.py", + "name": "plugins/filter/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/mock/path.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f7526597db22056cbcecbe67a098e27013a27de092d2d4d48ac7ca105e8ef950", - "format": 1 - }, - { - "name": "tests/unit/mock/yaml_helper.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fada9f3506c951e21c60c2a0e68d3cdf3cadd71c8858b2d14a55c4b778f10983", - "format": 1 - }, - { - "name": "tests/unit/modules", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/unit/modules/conftest.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "059e213995beaaaa9eec4f29ef05f3d879308a5817952b1e822b8b7763b466ac", - "format": 1 - }, - { - "name": "tests/unit/modules/network", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/unit/modules/network/__init__.py", + "name": "plugins/filter/markdev.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c84f7c26f64cae1d04ac89a319762fba9f2ab1838e89239851302597721ba2d3", "format": 1 }, { - "name": "tests/unit/modules/network/f5", + "name": "plugins/doc_fragments", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/f5/test_bigip_smtp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3362f1a8a0384bf7a7b43f203591e9b6e2e3c6eeeccf558f04c0f0409be92506", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigiq_regkey_license.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7c549a1de75c752c5cc5e6e2d338e97adc937a7a79e58d23698a0077863cbe3f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_message_routing_peer.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "546f975f51af11a3b35cc2866799737ffc63f75d8ec15bb59b23916feab7be10", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_firewall_global_rules.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6445ec3ce6b078584ba9cac2c9b9f600c9d124fb7be823a28b94010445c41759", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_syslog.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c3a1bf256086a266e34f2a224bdf3e8802ec541e580072f04fda24d045da1e7e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_tcp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "21305c1c5894d060d52f502f978730d38e0666a2a23359e6148d9751f07ce405", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_ssl_ocsp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ec36370e93ab27bed224a889963c556c087b27d9cc27570a0cd8455c53ba3a64", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_snmp_community.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1ffe67804659e6497d4f20df753325f92edad291154c5370bd0fe2fda8fb0933", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_wait.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "eab83a2fe8adcd13cd61ddceb97d342c7545d71fa520366fd45ec3d1ea13db94", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_ipsec_policy.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a9a8650c5e31208067caa05582a93470ce9870635e1d63b46d4b89d19366cc9d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_cli_alias.py", + "name": "plugins/doc_fragments/f5_rest_cli.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cd1950606dc4804006d029cc33762b248a94cccc58647f1da43f58adb6390c4b", + "chksum_sha256": "38c1ffe56156426425db2ee1407b5d0552ab815238e9035a831c1af083d1612c", "format": 1 }, { - "name": "tests/unit/modules/network/f5/test_bigiq_application_fastl4_udp.py", + "name": "plugins/doc_fragments/f5ssh.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26d056f6c26a3cf1f7aa3c507800b2fcd6244ad71eb0893879db2cfdea3f2dbd", + "chksum_sha256": "cc8d730aa05dee2b74b7f2b6a6d11e2fddfcf45cdbc9f7e4b7fc7b0f5c744795", "format": 1 }, { - "name": "tests/unit/modules/network/f5/test_bigip_apm_policy_import.py", + "name": "plugins/doc_fragments/f5.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "01d3d94799feb21972e1bebd083a8e84c3d5b1ec240be481e39111c63322c69a", + "chksum_sha256": "6490ebc92532c0533f1bc41b7220ec87e3f0e95a2c7de3369962989d5140fc7b", "format": 1 }, { - "name": "tests/unit/modules/network/f5/test_bigiq_application_https_offload.py", + "name": "plugins/doc_fragments/files.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4e722ed31d3ea9f54397b0bb18671811e9a427a23fe2b5fc56bf40d2e39fc35d", + "chksum_sha256": "6104548211ce3ba1d20291ccc4e22b3cb57c5b5f48aa053fb724c87ea2296db0", "format": 1 }, { - "name": "tests/unit/modules/network/f5/fixtures", + "name": "plugins/module_utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_cli_alias_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "99efc096ed5aa010cab5cd1baa01a708d372aa75e698c77cc4fd2001d6bf6c18", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_http-uri_forward.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f8d8838731dc8eff04c1e8e934b6954a6421fa44a04909e7eee76bb5b44a9ddd", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_net_dns_resolver_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e136279c344c68abf4b3fe066de6f8fff94f7041c17b3ebab1c44fcc58c37a23", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_httpd.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9f0001d4b928b502a068b0f0ba6548ae0ffd0610c60e20037f378208f86d153e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_apm_network_access.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7d3c95a9490d481c8545032a4e96651bf47ea867f973f865a592f129296aacba", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_with_members_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "68f385f36ba3638d62669f23ceb711e30c614dcdda56d0f44d288ab821a422bd", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_stp_globals.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4a2e16b95ec4587c7d32c5f9d4564e4dc9223898e4530e18359ac883982eb1b1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_datacenter_default.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7ce2b1db45b2b7cc4331ce9e7d7436c972d2bf43a798c9c508a10af15b7ba400", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/md5_sum_failed_software.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3bd4a03d3bce523bd14a4277707c2679d98c21022ea55f17409392622ab0872a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_cm_device.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "45bdc5d01b181952b218e1b4af5108c9c5c6ffcfc2576198b8889920ea57bc03", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_vlan.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b3038b870c4b23256ef536c0ca25aa001dd91e51fe6471c1ac8f9a0e35cd947d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_f5.microsoft_adfs.v1.0.0.tmpl", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "03daf17bad7c57859554b4eb7a136efafab41a518dc8db439637f8a9e931cdc7", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_virtual_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4f9ecb8201fa01c1dd79411ad085f933530cc13858a40d5270e80bb0ab95857e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_security_port_list_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "df343165e70546a95b1c82bff562fe71d75c9e7b7a8c93816d567df2a52dd354", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_dns_zone_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "933e39dbaa78fa870c279a1779c4a92f5099fc6a5f5b86e44d0f1c32abcef13d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_security_address_list_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e57cda67a8cd58951970de47535f572dd17f8a9ded225c11ee1d61a9338f4169", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_smtp_server.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "06ca402d7fd01cc00a2f98a90a9cdc6759735032b69d1f51789add388bc78473", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_cli_script_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c809919201c988027bad763858af3c91269fa797f192ff00bac2e0929af22d46", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_imish_output_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0997e05cdee281904f35081ba852b145ed541fb7b1ed267f5fec2ca6c0205856", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_cm_cloud_managed_devices.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7e722d952cfe9de1ec324a2e6cb7635d2e664a2ac04e4729b2d0003156268960", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_auth_user_no_pass.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6d7361b75c4990d997973130f88611725d21f9198102379c28f958af03dda5ce", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/chain1.crt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e5542aec858aae85fc81d335ac81409b46cc15590ec21a3a17ad8caca6bf7f82", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_asm_dos.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8a7b66f4f60238c6bb14a66104adfaa64011be0d495046b05e265e293e1dffae", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_virtual_address_default.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b65176437803c70dbc8d307aba4dc5076d6d260e5b7a6bd14dd4bdd7e47ca2da", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_lldp_globals.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d47e020d86cb152326797d70d8c0e2a529c39bc8d886de2b09c87a998bf3416e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/list_hotfixes_after_upload_remote.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "58a591365b571dfd7110f23a75f27c7d91551316ba94979e6d855b227fe687a7", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_monitor_tcp_echo.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "aedb74c02b2dc3263f47aac9fab2443902b31a485863686569c556ae2ae59459", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_profile_analytics_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c7e30f09ed63307cc3bd470eadf81f51d11f486372e35a30146eca41b3b1b4e9", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/MyApp-0.1.0-0001.noarch.rpm", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5f3ba77f73dba20785c87c56b7020abe3ccb0ea9c5b271e06dc9b74d8f9adcb6", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/basic-iapp.tmpl", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a98ecf597c9f0085f7ebfd76245475edfcb3448a0bb82e4572a574e4326fe743", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_remote_user_settings.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2d1986fa091f67b9a41272f18ef2bdc17c6a6bb84a5fb038118a208dd46e7bea", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_generic_peer.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d9bda115c32a5ed7e27316ff21af35eb0d6d264af34796dc7c414ab1fb137253", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tenant.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d75332b22de94b2548ebb67164b3cbd159cac0cd5d18d0e492e9f15cb6f478ef", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/create_gtm_irule.tcl", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a112871cb16aeed7aec5d44cc120675b4f370c627452e49de1290284e44138ff", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_monitor_ftp.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "44d4c2ec8eb339fedf79c9eff4f7c63cc5728773b653d6373214d875da57a5e7", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_server_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "656d7af6a8927213bdbcd02462f217fd454b41ba40b57e66287e41bcf47af11d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_profile_persistence_cookie_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "18e6e3b1951f5bfacea48d3683c88d025c4b558ed152935b90754eabfc47e2b8", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_software_update.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9c196e4879e3f65e89505b7e76147213ffcf06bbfad58a69d0bbd4ae96cdbb2b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_no_actions_no_conditions.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "28966bab74cfeaa0f13c2177dc5913a0b694093e381ea7abfcd6f9705a77e526", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_virtual_2.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c08e8e85a9f76be1abb3e46acdfedf0106e095f7db1727b7786230d27719b646", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/update_vlan_description.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1aabc1a94acae8f89cb1290ab9bcf9724220474d2280864d658366f8a7bf445d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_auth_user_with_pass.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5568212d8af3da4f4044e0d89e8435df051738debed62b2516d409165aeafa73", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/f5.microsoft_adfs.v1.0.0.tmpl", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1917464a4dd3f2c5ff332e3451829ca94f11fcea3fc03ed68a0f6990a1a0c294", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/import_policy_task_started.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8154a94a091a3688103044379305395345e2fb8e2b8a6195e7ff56f5b7ecf0d3", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/list_images_after_upload_remote.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6b5a5d8362a2b202b1ab5eb3a08aef8d1bf69d3cbcd7e66ef816b91b8691be01", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_3.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "943fd13d6ca61eb49955167f0d1d81588cf5ac46c0056f8549aa8aedc5fef5e4", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/cert1.crt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d89c43fafd34956a3b709b15aa23c41c9fd15f32d8056ca325f61ad8660ca071", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_net_node_with_fqdn.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2dadff49d7e1ba71b1ebb3aa11e80858ecf67efa8e08cadcb57b8a1e4042d6ce", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_monitor_firepass_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4469e01f76c0c85b0af4730323aeb01a8e2c0a9b43f4da2bd53e7634d72c82eb", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_mcast_globals.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e7234ebf4f336ab74d4960b9772daff9d5852fe34223c7c76f50ef683f1e2145", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_machine_resolver.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "aa88ff83a45d788d83b903f641c4c475e91072508b899cb72af73c9880919bb4", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/create_iworkflow_service.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b9614ea6b8fb3b540cd9b2b1ad92f184d7f40329c466b7bf6f5acfe66b5a1a0f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_crypto_csr.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "70ed49eb1f38e1ec5cd25451e6e4b9d75208b58f0e8339c0bddd57b2860a6215", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_virtual_3.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ca9dfe1399b168bdd7928c2e69a6afc7469f199bf4efac6835f95cd821355b2a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_security_firewall_global_rules_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "58307051cadc857ab1d17fbd8983ed558d63898af4721cc831170766daaf6872", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_pool_with_metadata.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f8a18ca0841b208c00509cb01ce242e4d2d13ccc1b4035175323fdf5f9fcce08", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_easy_setup.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "236d19b570d24b7fcacdbe3533fc38e2882a9474b3b78077427e4366c9082c35", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_application_template_w_old_checksum.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "28042444652f865a85c63a214bc7d26ddaf47035fd5afc2db0b49d45699c0112", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_management_route_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bf46e31ceae25230243056b28bb4b60532ffccf428b6093c24aec0654ef8d935", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_net_interfaces.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d8848103f482fb57930460d33060bdf4af45f6b0f3ffd8295efb3795e6bc7ac3", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_file_external-monitor_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "550b024679ffc87d703fb0442f0cf7cca6447a2c762359a474a08d893f13cff7", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_global_settings_general_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4f2b5a1650b994b22d0f2b928f092349516dad3b19e223fdd207e042d7ab649b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_sys_file_ssl_cert_no_password.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f5197eb81d3e419807065e27bb58c67716ac157de31aed59367e99d6abef970e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_httpd_non_default.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "40866dee2b603f6a688360e08596d0b982649e0b470cb41c73ceffb6b57f1305", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/apply_asm_policy_started.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "572da13f5d4c7f1ba186702f9710786d932fd91c4d356819395fc6840125a45a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_provision_default.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6c0f223a896135f6bc81ee100a804b8c7cfcb6ae8a02658ba01b0fb01b6bcaf7", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_member_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f2dac1717f312cb232d0263e80493ae7bb8a898edc8b6ce114c9d4313cf00ecf", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_monitor_http.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8357e1f0ab8fe1c1d40e8351f98d4318b8db5c0033c4fb10246613ae6288395c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/chain2.crt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6eba715a405fbeb25a759f7b6a1a9f45bba52237b45e527def6cadf34e39da68", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/cert1.key", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "34728493e4a8d44ac685c279d3f79ac7a575e7a3cda784e12335b980130cac65", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/fake_policy.xml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5afe1970a8e73be967cd50f73e99d771fa7c4a0d7439ac714a6145706cfb7d8e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_device_group.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5d76a3480d17c156b8e9690e7dfb94ea00f6082d8a1efb8fb4ddacc27971c552", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_vlan_tagged_ifcs.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "88e54b2d4de8bf0f9152068c1ee54ea0a6cce23e8afb239f4e8f35de6f1932fd", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_global_settings.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "65f6c590df9b89c3e23567790c60e01a15757b441ab431a13f5ca6375f025e2a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ntp.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "91bce548a436e78c6b3b2ced81663980f602bc8693c40b9d322cae071799f7a1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_afm_log_global_network_profile.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9d738e58c6b375a103e46e393fc4e6962a76b5db94c64eca946f5f52540bd8d0", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_generic_route.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b7fce56cf314786eb467958a521fb00e133c25397719e9c19cf82b8a47e4c25a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_monitor_udp.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a87ef67ea691e094993de542fcac2d7d645f356036171619964a3bf287c9acb1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/current_easy_setup.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d46a7bba113a2ddf1c31bcfc1821083028bf67681be1453b021fc7ce857270dc", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/import_policy_from_template_task_started.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7c3f920a34d2a11f9224bebcb56fe428672b1c00570b5d925f9f57c05028171c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_sys_ucs.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "89c5af867578b3655a0ba9ecfbaa2ef6768bce13d4b346a06937e4859e8343d6", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tmm_log.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a820e9ed084cecfc25ec1cf6b659bf987e2a0f4da443dc858afa5cd220d3f8e6", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_virtual_1_address.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0d54b502178571b27e06974a7b1518b388c24f3fa54fb937c6d7ac45084e82bc", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_cm_traffic_group_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f668786dc45b825c0b35cfd530b378803a1e2da72c18d57b5b14bda7779575b8", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_radius_server.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ac669856552bbe5bb05f5fcdb027fc380c15ab27e504fc25b68380b18e752ed3", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_cm_device_default.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "42df8f66dedbd6ac246b23dd9ed92017f2587b1bf626cfce8362410980515fcd", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/list_of_volumes_12_1_2_not_installed.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "67de5cbf3d0e5f504ffe4c1ec3e04df2b01d5ebb96c08a403089d43dd7bcdaa4", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_policy_draft_rule_http-uri_forward.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1d11e1020ffffeab8c2fc442860596888498a34d5fa0845aed956f175bf355ef", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_auth_remote_role_role_info_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a1eb0f279bf02399a9191628828def28d148f33d12aec019581c4bcf5f398079", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/cert2.crt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e57a94deee9ed42baf1734d9d87c741b32dd77fdfe27a80d50429fda6ef83571", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_software_image_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7817e86dcc39b7cdc078f4599c1bc97c0369e570138e1eb40ef425343f8eb5f4", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_many_actions_many_conditions.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ef8967ddefd9d26e84d28c554505422a9c808831f3c6ceb5b74c77700784aa86", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_server_virtual_2.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ee80a2a03585aeecc0b93710aba72cd7b2f33c270e78c5e7dc0d6b9107f8e763", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_pool.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9469180fdeba07218c6f0e7b093aa619e541e05495c26efb50b811d785d64664", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/data-group-address.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1a3323a093352b619315f902da75fc63149cc46f0f4224f446e6166df0f6e206", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_cm_device_group.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b59e3a5d60d6953bc80fadbb98bee4799e761b5d71df7fcfa666be7c4801307b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_application_template_w_new_checksum.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6e522096e693ffd817e75856b1f865db12606ef82c4cceed06a254217c2ee3ff", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_dag_globals.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7bac7b5e6542f35181c7160cfe8fe81577de239a1cb3a3b2185c084ef132cf27", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_license_pool.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c9c0808fe1c79aab5e32755c1b8ca2dd739a6a8756528d34db46650024b3cc21", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/create_ltm_irule.tcl", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b1356f0a0c8ffda826420f206e1ef146e46570e9495e8d60e34efe054073257e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/fw_addr_rd.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3f716cab66c10304b8d2517a6c376070d200acea91133e0d287b050c44eb71b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_log_config_destination_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6c9783c32654d9e038b2dcfc8046d37e53db7b636612171e1bbff71a70b04812", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_net_self.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a60fd87880c6d708017298a50b02edf9909e071306b4c3b8b45388a3f8bc0f9c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/list_hotfixes_local.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0dc30192c4e207d075d5300c65c4be7410219e9758dd219d99a02718187f43b5", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_asm_policy_active.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "06b1557b7218db818d430ffdbb31b90076d792e8e87c11a27cd88fc0b74363ae", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_dns_cache_resolver_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6af4433243f1eb1f00eae38dce4713835ba2237efd4c516398d17d2b08679762", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_profile_sip.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9fb4cfc3f8e1a0df98427589bf3c92cc90cc7b8a1ef8a62107e49a4980da8574", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_dns_nameserver_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d7716eeb1e2d559d81c9913a8e7ca42204c94b9fd79d8a6f94ec53221b1401b4", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_node_3.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ffec29b8b80410658c8609f042c4839862659aa6f79369d150ac7173200a97a9", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_monitor_http_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1eec1a1716b89e5c6d2fbf0e98c5a73d347ad240737da0533e78e0f1d0cbe416", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_monitor_smtp.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "92c71e97c7b2987258550d9b4f606e665f1b588f352c8cbdf224d22178435ba4", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tg_ha_order.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "668e23bbc25343ecc697fcf4310d2f3a793bab84b4cdee08f956fea3be6d6d83", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_asm_policy_inactive.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8ae6b4dae6bbc93b44387d65f7c520f17f4119e6ff05d6ce2dd2fe4a6ca746cf", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_regkey_license_pool.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bafc16089834d04976447d4e029c68195050400676f5ef7ab1a4f078cc6ceae1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_http2_profile.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b36ed81eedbb21db02bf1e14efffb4c1729070857bb0d060b7c1a007333a4dd9", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_active_volume.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "370ad13c2a4161064f055c63cababdc97eb834fe701426b865fbb753cc392e1b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_profile_oneconnect_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "82dec68f8f9599eac461d172d2e15e74cede394960f35b8c8e902ee354a90596", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_snatpool.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "15b368b96a0234b5c4edda549bde83fdfad3caddee498224df0a47cd31da35ed", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_sys_file_ssl_key_no_password.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0a5498d364516eeb476f71f8b2fb18ba295939e96573c9f77a480322619ce70f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_file_ssl_cert_with_issuer_cert.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b5f28033e4f8b15e26126c6eea75a2e4438e7874d0a8a2eb82c37f06a1981a8e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_profile_http_compression_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "601d8d84ac28aa728c73bae72378ee3084ce65c38e0ae01310c59301bb8c5f01", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_profile_persistence_src_addr_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "07b28c84748feb74b6290537fa77fe16873b984ec4f6c6556ed9745f111961ad", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_license_pool_members.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e523b263031cb32988977afae272ffab3b86812e096c330e3133b0404132c6c7", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_vcmp_guest.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0f063bf99e48b1ac2ac54b24e9a1881d44142348558fbc2219a68e8cfb26153a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_datacenter_disabled.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "23ca76159778a84a608ec3a0d6ea2d74b65381ea8d6ef74a5d5abfe0e1e026c0", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_vcmp_guest_virtual_disk_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "47c630b3780e1aa5a11e9d5792c65a5b309672ba1586b5472cf011541fff1375", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_default.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c867554e0ffc8915dda5f33afed8016d121ffe768d55b9f12e29ddf7319d6bae", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/create_iapp_service_parameters_f5_http.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ed8c2d063e659158411fb79b2c513b34ec220e45e28f5841df49183c918bdd8c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_interface.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "874ddd47c94ccf4c4028be395aa1901768a8a9209633fcbdd1c9cd9c21b27b80", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_asm_settings.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "81f88a96849b296e16eeb09f05bb2cee3242c8054bef384b6b62323223298295", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_4.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9c4e31f85dedabd95a2757a8d2a3483efc6b42a5c9398b3074bdeab68022e8dc", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/create_iworkflow_service_template_appsvcs_integration.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7928bd400136f3e559371fc716d7bbb13578dedbbef23a4d82bb8b203cc4dc7a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/create_insecure_cert1.crt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d89c43fafd34956a3b709b15aa23c41c9fd15f32d8056ca325f61ad8660ca071", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_no_actions_one_condition.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "54d463a8028d2b9c44a7360a1e32aa9603cb3a0e05f2cc4b1ae0cec43dbcc6ac", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_sys_syslog_2.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "81d50dcefcfc9975d2e262d2477bdcb0e875224917659e4def63de24199530e1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_sys_syslog_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3bfef0886b40659e4e23526c05837c885292e57f7666d5ae086e0a73151bbf76", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/data-group-integer.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f6df874967e4c425268ecd8a4993f61a022bb2a4eb609934c110e6a3cc1f8358", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_profile_dns_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a722aa011b2de2399a768dfc6818f92975b53a916fba06655ce2df14580cc55a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_net_route_blackhole.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "41d5ce1a92a4b9ca4e3d285b16223e70ac977253e5ae10abcf302e13666ff0dc", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/cat_md5_software.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "10400debd9cda535ff71b9b68c2f68d34c594862fb2865c4211219448ae4f9d9", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_profile_clientssl.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2481fa4dca30a8d2e9f622657925a7feed486499f26ec8fd45c10bd3fdcfad17", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_2.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c16330cdedfeec5c877a2a2222494e5c7b28334f4f870b157f0661820b8dfb38", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/current_identified_devices_config_discovery.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d22ad6ba587690c0975a41da5de26018c7dd1e9e906a0a70df2aa6d4b628d9ad", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/cat_md5_hotfix.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "07998e0aa0fe91260d9aff5082e9053ea68265f9d55c7c7422ecb0325f696b03", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/list_hotfixes_remote.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8169b3d88008b6fc180091ad4ea16ce8b62f58989732b710910631d464863bd3", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_auth_partition.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fb5b7d87130153e458449703c994f953e813ba74a1dd94059d8660d0b3f0a677", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_monitor_tcp.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "da873524eda3b716dc1a0f82d9c35c35c6f6b5ee6a053802b6aa6569ee16c17c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_profile_serverssl_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7e4b6bc6b933504332fdf187df54c0ffa3a81d7334b89a68287eab33affbe047", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_log_config_publisher_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b5f5c2728aafb457da8198366cd104f71868b22a6b88166d43fa906a7f89a9c1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_cm_traffic_group_2.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "08413bb37b62e0102083e0c6eb12e9245bb2fcc612d5301959778f89d2288437", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_4.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "112fd1366a3ab79a1cc4f48c3e41c72e312c973722391db46d355c03efa574b1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_monitor_https.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "caa5ec2c624616839ec796ae9e81cefd81064eb2f95a4cb2d1a2fe64d3bd943a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_radius_config.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "06887ec05c4e8f6f89e82a99c2e4095c235dee89df5eb1c0de1e0c594b0ad08c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/md5_sum_failed_hf.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b5fbd1e418413cf11a7af80690ded30b0c034da9a32947f9ae8bdc207532b898", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_global_settings_general.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "81129d78b8e3cf143f92167f007a1cd097ddaf7c5ce016078897fbde07252313", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/cert2.key", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "92c6b291d9ba36d63a653adcdb5fe488316ee0263df81ff73b311817c3bcf2bb", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/md5_sum_ok_software.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "063613c948ea8cd1f7334d98434923576fb7591776b11ee9a311fd4082e1766e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/pool_members_subcollection.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "365a4f196cc4f9462ebc1eece6abf5b4194f3b74e645971868d6eeb94352c5ad", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_3.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c0b181ede0750f844e6fc41187ee3fa1f589bf3a9b525cd3b08be8a4b860cb36", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_collection.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6ec69feb5772f17d15b9f6224a3ec96a0be7c19d17d0387b6c805c082f734be6", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_file_data_group_string.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "851cb0486bf505b9a507e728db0f5ff5b26796a57acb5af503c494efa2c9df95", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_generic_transport_config.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3d186929cabf11b7d1d81ca67a804b0c99fc98d345c5d79ff3a9a590204cfd26", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_data_group_internal_ip.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "21c57dee18791bb4fcef26900c024619085e1d5442921e51a6945d078d878aaf", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_afm_schedule.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "be3bc6748717d81f62f09655f077c66163ede37d2bd4d9bf26ccdfe81def1f59", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_cgnat_lsn_pool.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0d498aa36b081d4b0502418ae7daa0690555c544742b0d0ca2be04817435f48f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_regkey_license_key.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e2fd1e04f5c835cfdece6b0084304fcdebe23d51b0c1e5b27f9db06a7c0517dc", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_oracle_monitor.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2f4c9fcf3d006924e6c732c08d517506188d0b71e1f33bea03fb3cd675da1e48", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_2.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "df22e9ed19f9bbf7c19e300691091d1a971ad9039a0d515392ecc28494bce6b5", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_fastl4_profile_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4e7117660d5a45c72ad2280a7cfd9d2e2c0ec60affe602733b261e6367cddcfd", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/data-group-string.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "177f72f0fbcf52997d1808201c5257cfe18846d61070a6b696266abd348bfb4f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_net_node_with_ipv4_address.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7d4ec49992101eacefda9c06f48fbf7e5735bc533a17b2da2c645f427f84796e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_vlan_interfaces.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ebb440f4f27da777819ef2c3d6295dd3d2274d3cac67dec026975ad54217a399", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_generic_parser.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4852874d1bf65f58c6e136b92c70c2185fc6f0b5329f62263b47f779e6ae0164", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_net_route_domain_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "13db91e1c93cac2bf994865c73d8fe95ef2c3004760c6310be775066e2ec2810", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_auth_tacacs_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7ed2eb3c6f3929434b553e305b0448c4a334b0cef5d826ab869deaeae886c0f5", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_identified_devices_config_discovery.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6ba517e29379d1526b2c23727e1f8d1c4a86c855cab06db106a20d54c08ab325", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_security_firewall_policy_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d744f7bddcc1ebabba43887c4eacb721279730721b15ae3c1d825f39b354ab3b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_generic_router.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d4dfc90255a61ade57cb256428355d6a2b9bb85e21ef3c8b38ab522cb3e45df1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/list_images_local.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9900edf3abe26bf1584218e567adee1f2d599e999f841adf7db33da605c9cad2", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/list_of_volumes_only_active_volume.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6578702351494af97f29b618f38d2e76d4936b5b23c9fe75806087337c25a9ca", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_monitor_tcp_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b1fd16e7b96e1cf89ad8c1b9fcaaaa2712b68a91b0bac52c926df968282074a3", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "98f225f585d20a8e6ee0ee3d74879303a375fa2e9a4fa485ecb55ed84cb36d25", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_syslog_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5105d3eb2a67662e8e05b9f7dfe47c4dd31ad63569b678a33a0b7dcb164d09f3", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_shared_system_setup_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d321bdef3cfa8e7f1e802b47a72ea3f257410f367f71897411150c66e0f7f4c0", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/fake_policy.tar.gz", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6bc896248a70420b47470ecb5a42dfc2b4059bdc0b09a90159a84469015fef2e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_example_stats.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6b467e893f79ae2a1438e9de42107f22c3ee840a2f41e84489aed215e7a735eb", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_server_virtual_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b3d86f5cdb0601118c8431d974c3f9f4dcf6a7536587fb14073179d4b1d0721d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/md5_sum_ok_hf.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5eb4778a066b7b32a49bfec8c6d48a5b14a088e4aa4246d661d499d1a0e8ecf7", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/update_iapp_service_parameters_f5_http.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "98f7abf512361ceee8924a9b4c9daf9a77f2af14ecccbe3460513c1d33f677e2", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_net_service_policy_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a51a13bed80ad8ab7a7f04fcc1e2bca3bbde69beee488cb2c2efc1b80a1be925", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_profile_persistence_universal.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "967a8f1f7840b0f39caf5ad9f826e56e09de74fe07c37058896b3ed0ca66bc58", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_profile_ftp.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "138e0273eb0e787bf0925124dddbf49c33cd0d0aa9a308ca2e3fee22980a4e2b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/list_images_remote.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4822720d3a3835b727b9f71b464872f9301003761154de21b6a4a7e689552b93", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/list_images_after_upload_local.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c71826b59ebebee2e1cb34eeb07b86add7491f6761271a186b4701acadb2e36d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_net_route_use_gateway.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d975be29d4507c05a3b65e9bb538c86c7e8695a807b9cef33442a912c2bbfca8", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_irules.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5d3dc5c15c29858a0283d094cb7e424ef4cc1e371d2e1fd3230687a7b4ab4ea2", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_monitor_snmp_dca.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e194cf29e7b20c23757fadca99a20f68a135928f09811631fdcc55bf305a0a4e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_connectors.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5f8e9a2c601e068081a179e147f5049578ebf2b2fccc1675fd7122d9db6d7823", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_http_profile_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "df6f6bc3d9cde62772f93acb776f68fb1f608485ad088b951401d97744a2c1e2", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_gtm_irules.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "21a2e271578ba1b60e76aec45e9b0c0d82be721b88c94c051928d1b3ca2da0ce", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_net_route_description.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4371eb9cb5a8aec3c9e4b9eb5d2eb82d975ed99bf74c49a2ae33387786905822", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/list_of_volumes_12_1_2_installed.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a8fd24ea4cfbb82c8c6d3dd4cf2da589049e25e70ae1f103ad049562db3aa196", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_profile_tcp_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ba11d687c343838772683489ec33dc29de5e9bae8cad78564de798def345e07c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_net_trunk_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "64b01b07987fdbbb29617f3a68f9ffe37fa00cb81782b5aefd0656bd6aa40e7c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_profile_udp_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "04676a2c489e3d6a60acf829440bfb737714b475b4fa1e74c3b589732b4796c8", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_one_action_no_conditions.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "04eb582b1cfbfa7280602034efb0a3c8b8d7914166e5c096ca75c57809476fbe", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/create_insecure_key1.key", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e4ab457958d23b8f4acfd7e81151d0a4af06e10f6b058b58f4808b81b0773ce5", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_vcmp_guest_virtual_disk_2.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a939453c0c9944e422236ba3c23a99ccca807b481f6c2191bd946e563bd6da35", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/create_iapp_template.iapp", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c7d0944df237c712e9d2ee57bac86f51b82785aacc2d5e8e8f5f5541f2271f58", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_net_tunnel_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a3bfc0586b7888ba967c4a77f8d61a50b8deb52c9759e7acbb152bf7514e0549", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_crypto_cert_validator_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "64b6306e95ccc7f0b99779381a59008260c3f5cbe2c457785548218f30167d99", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/current_setup.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e773afd99ad76ca5ab5c703d9194155c827eabca39ffb6722ab367634296b30f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_data_group_internal_string.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6fe6b0bf6aecba3f3e1633af848f0d9637e39dab9fffc7d8329e5f61a00be00e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_net_route_use_pool.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3788092c74685ae99a2b164ff4685e568345143afb66195637c3b8ba09fa72dc", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_net_timer_policy_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "afdda963d45c50048bdf5a84a1fd08631d92af3a9eed41ace05b6591191621d4", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_snat_translation_default.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b9e7df389e281ebefebd62c151fce68715baa887880851cd43f2d84d28d3eeac", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_vlan_untag_ifcs.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0d0e185e14efdd1b83b28556e08e16c99af2058ba1b4afe8be6862b58822df60", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_node_2.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "47da02537b4600ff1a12ea5868e2bcc0545c7c08b24d7730b03bbe36c5e4bc5f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_virtual_address_collection_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c021977af0b105f9457967b3309e02cdfcc59bee75dddf45fe64bed764263fee", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_afm_global_network_log_network.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0a48cbff02d9c3b9f2edd677608d92109729ee04c81ed6d34c185d9e46b8e3ad", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_apm_acl.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8bb92d3818aabc4b56d1408ac3b6e69170eaa665e7919caa3d3c5898d70b0d7b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_monitor_tcp_half_open.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b5d60f86ad7ad9f4030157cbbeea7dce9c9a4dd07695b0c2f07584cf03b681fa", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_setup.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f84dbb47b1064038a1af9b87f2a4d51b2404755b6bf001ff051145ded2cb7baa", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_net_timer_policy_2.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a70f02fe6d7131a91d23ca5f8529d52bb0d84f596a50b0653d914c4003b2c479", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_bigip_monitor_mysql.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cce99ff57bf3135299f6509a5d922baf7cc95c4880699ad19bebfdceb536af5a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f6568c13141e1b4e2f8ee058c87f4c82aa05be41b9c36f49b06c48e288d97a72", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_ltm_node_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cc499cc722b1417af887465a573c52ae1456f2e8151e7cc64b7cb9383af24192", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/fixtures/load_tm_auth_password_policy_1.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f19b946422dbbeda7836030ea52dd808fda46b39fbed8742526a607ef61861ab", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_log_publisher.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "89f95481e7e208566af52bb2913a989cf04148bc3bf4fae1bd0a895dd544cea0", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_firewall_rule.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "764b3b2bdb344fb6838efea0f889b0dd3fc33e89131e78b520275ec318560587", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_persistence_universal.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9b498628d5c6e15b2f7e210014b78aa268f3493fd62daaa0ab1dec226ed40238", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_management_route.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d440102d3a00052cca0692881ed3c239abfd5383a3ada02e244fcd7b0de4f954", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_ltm_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "11c172c7d6e809968bca5a7841df2447b2a050cd6e2643534657da87786c4304", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_sys_db.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9e28bad1f8d40e485b6826c24bb8f08c724aef19ce28543d20ceffe633428f2c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_snat_pool.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "40706c0c67ffb201ccbfaefb07231dcc69c5dbc9f367a75a26cd64b7ad4a82a3", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_ldap.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3d994370f991c9fa8ede38dc1fe1760ee63e2be0e1fe33eeebe38847b81131bb", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_monitor_firepass.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c0ec56ca569cdeedb97c3ed84925747c6c4d7232402e0d51a37d2295de337310", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_command.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ca504b7f600a2d384f9fdc8cdeb119679f340d443e64bc1fb83db2708fe72187", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_group.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3989803462732a2046569c3bed8be9e3aa10d0fd73cf2dae832b8ba2a1a8b3af", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigiq_application_fastl4_tcp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "21a38767072746d67e612105b068dfa7f38c8f2371906c74ba45ef569388e0b0", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_remote_user.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4e58eb443ad3409352a2be015af64ed482febfb07016786b240c866e774400ab", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_firewall_port_list.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5e86a5f32ddbf3050dc7e167b72c4d51dfbef36a839d38c95e575678b2411631", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_oneconnect.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a04a1c5d7cc720a51d54061b828c34850cd2c4969f91e8614dee3fe711433834", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_smtp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1de9aa3771236fe9f56da77007031667f8f3c99bbcfbf3a8ed74cfd9a6ad8f5d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_network_globals.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4fa46486bb2ba6791168ab89f575dedbad6e918009f15d180a2587b2c849de34", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_pool.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "735e710e575de1d5a4b51d002de6b12432995b5319ad2d99144145142996e0ef", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_asm_advanced_settings.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9a65b8073f1cf84587d6e55b5c34427772b5bd9ee409240595eefa10ee28ba9c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_timer_policy.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bf3f0ad587513942114efcf99d59321b81f9e81a35817fd71212d35aa634193f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigiq_application_http.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8eeffbea605e65d40b56d80e83a312af01e57820c69c963d5018320b57caadb3", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_wide_ip.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ff580abc76ace836236cec21e521d097ce036ab3fb2ac54194003682c27ffe90", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_ftp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4f824d0122f888ab80c04b9a3864d341b215b8f6048dfadd7f34c92ca545b507", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_static_route.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d0f993c0ad62154fe8d92dbc6012ddfe194c90586e7a60b0afe7e01498c8ad51", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_ucs.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dd0cd192379513f2f9e3fffae18908eb2e17b975efe338d04b489e2c54e62981", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_qkview.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1dca68d91e6d4502c64fff00f911ee1f728d7595dfea4908f6e92c65f233bcc8", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_analytics.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7fffb9e1c11851246123f717552daf8560c61779c779cdafd183e43e4e353755", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_server_ssl.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "67004537b6778f0d800a7941ae493fe5479a721d1f929818ab72034afdcb7263", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_firewall_log_profile.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9aa2cc3e19b7ff3dcc40d8c5f737ea8047c0d0ac591c346edcce2fcb22cc4f6c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_firewall_address_list.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "89ddc5dfddf98889d9855f0511a26f53b2cd6d6d7cff835d91d11c7e32806eca", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_virtual_address.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "45a2d3ac725733ff803b5fceb9023052cd428903cab29de5476a4361e7634809", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_software_install.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e06806646e6769e5b6c4714e5fb48becb77b69a5920301a7b5c33bb6b0ebf883", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigiq_utility_license_assignment.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5f9e23a983db30274f3478afeec2e7f4ef1c9f57c7f24e4023c441e7afa864a7", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_software_image.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2a8fc03e0d7336d37948d29e84f47a0bf7394f21e4c6b552d76060f769a44bb7", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_monitor_http.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2eb6ad7991c4ad85bc4e5024aa4db9432ddbb791975766025f1ce773a91601e5", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_partition.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "46317e5e22656e257386f8f1c9a516089218a72408ad86dfe820c6855b339e91", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fa898d0956ef93f5eada321d05100ab005169f21a7f1246b95e468395d7f34b1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_traffic_group.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b205e399516fe0694df77370868c38a9abbf81cdf6704f8dbefcb0062e919d03", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_mysql.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2f4d90a4a8cbc4d4efa1536ab4900406d6d7f02c6f764f9331122006d23cf36e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_http2.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "94610bdbb67fc46a7b363fb40cb1e84766c0297a7ea969264f88eacdb542f9f7", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_auth_radius.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d78ba234a6f2ba422240b8516bf7e9baa8d92c8d0b16a4bdb2b5f791da075a3d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_interface.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "31fa7f0408f8b6f4de5a14b89c26b3a84bf4f8869c47499bb72b8c396e343d29", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_ssl_csr.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c364f45b0c40f7d33be65c969886a7ddf52c2f4779cdfcd10b6410aacea0378a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_connectivity.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "831aed658136b3a5d81676c4b99d7baabfc2c715e20703d528611dcf72e7b07d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_iapp_template.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "58d51618339b17b8f8112cb2958901dead73759b181ed295b5cd0c6d094e853c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_auth_ldap.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cf5bce71a8d144d7f17ba617587d5efd5eea05d12375584860bbb1ff4a0755a5", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_vcmp_guest.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bbccd91cea519889b2867cea9fee4fc679024de3ac481363ac22d48b68ff7c21", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_lx_package.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d3e6d0ab98993c767ace257f1c04bc0fac722c633a75346309064a2c766fab2f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_log_destination.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e10ad47dab34f6e5e528b591dc509d526ffde4850eb8a571c22b73042588b0e4", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigiq_regkey_license_assignment.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "461e5f80d0abbcbe7499370d3680e9e5bef34b6a84aa2029e7a29972986ae778", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_sip.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ec474c060ecd6812c802741b28cd382d1b0cd8d5288adcd45ddb612692dc8cbd", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_tcp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "890dd615575eef308b92ac0b3ebe46ad28a608ef505c43a645bf5fe298f62869", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_persistence_cookie.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6c5002952368099ae3bff4554349a1a5c76546a9943e40c0446dad6ed7660e1f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_pool_member.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2c7fbffff55c673e2b9cb2a2d1a83db39f676460206c78c10102e95db98e0661", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_trunk.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c277defe75daa4fc806bc26e057d71035503f508f53611f32ce8847a519ab318", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_policy_rule.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f095c264f0f453bda295aed71dfd916148d34e9e048219d35211aaf1c74589a5", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_auth.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7516d7bd09666d72155ddd049d825d48c75579c0fabfc9d1fbe7bd4662cfe9c1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_imish_config.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "80972f6338be92fd4c78f3dab9b3948ba07830d115b24577ceccd0b23914c2b0", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_ha_group.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2718870a56556a947134eaa9d1695c73803f784a49b12682281f0429fe3f0525", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_dns.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fea8a9855f3c12d137c48fd5d97cd2e4115582b07259c82425d37046cde4835f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_traffic_selector.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b64884217a58d73ea03da56121980679ee525b842caa61d0c4c43018098b60d7", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_iapp_service.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ca75a057f02a2c50e67f58f94bd9b0356ccc253a7f507839d1c13450b63812f3", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_ntp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0b0bebf2da40fe9f3e90df2e780ad1ecbf8600b3b360977ddd7c0f41bddc548a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_cli_script.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d2fab403f526de677f44b187d81ad94329f571da8b17a64a58d548b5598d5d8b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_asm_dos_application.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0a2ccbfb067bbc485fb67fa9882e5fbd6a8ece6fcd88071bb0f252ac602af573", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_snmp_dca.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5bf8e9b46a50ba56fcf3b9020bd3dd5bbc5fb7e63ea4d7529427a60fabc517cf", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_firewall_rule_list.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e83f4dfeb6528591a222eb9702701b0b95536cc38de4448a8799e61cfeb74485", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_gateway_icmp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8016f7a0442e1875a3e8ca0e2ecd8959116e6b1dd61643bcd9e9cd25a0d3e13a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_license.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c24c387cb9c1ffec8510f820ef7c4da0c4fd0fc49b059ba05916828cf81fedcc", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_firewall_policy.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f84456b50d6d389063caaf1caf1a17ba48c9f98d6b5510378f1cbfba83e3e310", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_message_routing_transport_config.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6137f8ec7d3ce7404d500f59eb2b083bcd1859ceb15cba1f70d7de7491bf880b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_oracle.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ad892d40c381313ac2f13b30d1d095bb5b1873748dc7ddb814a3617692ac5397", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_vlan.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fb35aa391d0c81369852507ae2ac5b8922b458f644f8ba448ec5ad0690e82756", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_remote_syslog.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "78812b36d5f262eba91eab7e449a7b30849fa631057b41b1a78d0dc9a10f03d7", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_tcp_echo.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "094c658ec38f3a97b6414ccf7785f70bc706332373d2845d63f2f073df4842b4", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_apm_policy_fetch.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ea57521b9bb92b10834798e0e338e3520f5cf06a042c4ef18ef6be3e577db223", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_routedomain.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "447f5a37b65bf08415682582fdb3e2bcdefaa291dff60bde51477cb2a0f7bae8", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_group_member.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fd6df6bd89d2ae497c37fb844b1892574f50c083d291c39f2570fc27fb6b3b9e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_dns_nameserver.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "538a5c43232dcda4f6a2bc0d96d2732d747398abc16ace8d0d88adbbd991a710", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_provision.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9e9efac5aa589b6376dfcf7c8290b6e99f7c9d8714c109004accaca678571793", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_monitor_tcp_half_open.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ee8eea7a43b75d15f4e8be525fd80ae94a24d58fb3908c12954f8e9f21e6e5ea", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_asm_policy_signature_set.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1ff2dc7fef1121e490989894c9bac9e2328f9022c295910d25e34b943f8ac235", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_apm_acl.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "eeb2b0863c950d5fc713e011690b5362d93e04789cc63f3324a5867e67a340cb", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_external.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d1e3621a75ccb528464f0b8fe9c659c51bba8d29c508cb660454898ec7aff1e0", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_irule.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "581466f6524285a560961362486f3ad43e1c965afa21712b1f3cac9a31723d89", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_http.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1c4562cdaf88891674e6fcb050e6b9878636d26393043b7673eca22b44e6e5f8", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_user.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "85697e0d988dfbad90d2f040a3a129cf37daceaf1ae49f6bc42506aeb1d58250", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_ftp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "24486c17cade163bcbc777b6de136c40882029373e41de077fcb3cf22d24d1a1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_asm_policy_fetch.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cec361a9c18277a31866c234cc5800b1f138272d66cfca1f6a465bb5e9f4fc14", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_certificate.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ea714ee1941fa67fa4e2530139c493fc7e4099ba69db70d3385fb20920395e86", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_apm_network_access.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "177eb8f2daf9de6ed1d5bd1ab9ab788f07fc5583a0f26a959ef34a88c73a432d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigiq_utility_license.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0b558d66b13f64f127bdbff837fb621145b61bd0addf09b516813ca66a43fdab", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_udp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3198ce66326207354d27c89bdc8a53194439eddd442a72ade863d661d3f42d3c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_selfip.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "13a0fb0fda9f7ba20fbf32991443f23353bdb774d70493efcc2e025e9ad73e8e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_password_policy.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "616d6553d7e9fa2808adb7429a129521e256a91bd43347296aeb24a956d34e5a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_httpd.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f4e8e012c4f777d1ea0f5141e844fc6a3d33acbb710473635097005654665420", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_dns.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "44af5ba47766bab484b01af416fb8c370b5c8bd33906e163f9a5da622fb6c430", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_config.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f92403bda8f5027c98cef3b05d7ab8490ddb899de125dcda73e6532d7ec01cc6", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_firewall_schedule.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "928da1254e38e00b4d6af3d5421d5df80ecff81008c32198fa19d4dfa14ca8d3", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_https.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1a14896b8e582f98b716af8bee80fd85e6c18ccb55f4a49d6dfc6a7d28483aca", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigiq_device_discovery.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0d85198f7e6ffd91984bc8c926a0a0268b6d994964c779981bdf89d448649715", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_configsync_action.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "717ae93f19e59ddab62439e9407b3f12680b2a0a4b9d2b1bd65d5b9ebba0592d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_remote_role.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b3178a1ebef5cf41004020b5487b7fa037d2d45322d3106f9275662bf721df6e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_topology_record.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "896199af9e4da11d1819a212b3affd63bc2e3582d0b21eb26a4cc8fb34b16b3b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_ssl_key_cert.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e87e17043ee486da4512fd4db4ee500b0666a4d1b15eef69aa41c684da0daf89", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_http.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6e8718750a1297546066e61da0eba3b0ff3c0c1a86ecbd1b0b697d86eff41f56", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_message_routing_router.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "588826ba49cfbc36ad5eb655b04ef3c79ce6af97d42c68c7fbfb00785e518f4b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_http_compression.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2cf46698f6485ea81776149a1f1516f0a360e067fb328a6f5b88cfa0081219b3", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_tunnel.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "477d3773ffcbbd5b99174cd7e5f1172fbaea4c64eac949968bf8a6d425986f8e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_persistence_src_addr.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0e605cc29d2bdc6e6d7917ecb671b8f7eb9bd358c1267c83b0207d1ed7e5adbd", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_ssl_key.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9117e4a23d38eed40dfe5733f9359ca747251a542895608b7dba61baf236fc2c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigiq_regkey_pool.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f6561d29202d252beeca53f2c95b797f5387798b1c270a87f4da2bc579a93c77", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_client_ssl.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d143364573bf94242be21c6c27fb8ff12fd858cab23aed6d6d9cfe62060af650", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_dns_listener.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "681ff7677379e55e71a3d7e6695f96eca5dd8519173786d8b78f7aa265e03e0a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_monitor_tcp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1e0cf733c2206adc30464c2b15f1fa8562c903f8e32a0e44213475f6efa31669", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_service_policy.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bf4530f581cad1426b7da7e0392bc54cf4541c97c6b34b24809c855c99c97305", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_ike_peer.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c91abb878dc8a3c07395ece3b9ecfcd9e7edb7f395c8388bd3b9be19fdd9aa52", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4e72b4409c2ec32fea426b902e6976b7a5058175410c20379aebfa7a68869a99", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_ssl_certificate.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "18ddd7999dd3184dbfe688359469903481ca5249edb018e6472fa55a10ed32b1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_monitor_external.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9b520ae49fa983a8ee424f404f033db04149c117d630bc508a55c22690ba0500", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_message_routing_route.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "baa24be3586eaa7cd3ad1fd40bdc474afa9d7eaf2ac160176d5d19c6512107e0", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_tcp_half_open.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "98102f9c89ff9e4961f8b55475e1bc021daf2d140a11e65a848495eede642c46", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_software_update.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8e487cce9c29fd7ff43385122f549b530bbf33ed8cb93e33df1ed8ced7590c22", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_sshd.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e501dae8267296f006ac6812ad24a9f2a9a970435052c6393b006ea5d1ecb891", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_virtual_server.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2a5fe96bbca8463994a73299d7cc36bd37b7063590d31ec09c2439913946b2b6", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_pool.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a512133f7666c42d1e78cf0e9e91d18e8e28fa064ec2002c0e79d42d4561a578", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_fastl4.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "16c0bdc85569cbd1a5c16997ebea7db71ee810808f15783df2f011a17423bd10", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_provision_async.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e0c25e4fcf5847c45b5d78e2e339a1b1f99b5ee62a0202f653c521f2bbcfb642", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_cgnat_lsn_pool.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "648a439a18755651b07e7c8bda1bd133ce0767beac4e63305fd824110bb94be3", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_ucs_fetch.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3159b82a6cafc472e0d6107f2bddd7b0666e7ba2003d54d96160bc18d04d8759", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_asm_policy_import.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "de242d2b5b1e75c73e77990c1639cb7d260e59346e5e108f15dc0081e778f8e8", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_dns.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5b90124bcc866565543da5fbaa63b9ba8aa12ac663f6554e818d4759578b33eb", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigiq_application_https_waf.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e8864c98ee01272e359f73e5ed41538248d35a6f1ef3c340de0c03d10d15b38a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_monitor_icmp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d3064de1837665b94e0a8bda01b16c3f38c4140cb7ccf7fd5ec04e241f6ad252", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_file_copy.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "80aa39c4bda7c69006b388e471366c24d8c83d7c116b330bdff26a3e4ec605eb", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_hostname.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ec5169befecc40c6a27349be1c1f9dca1084dfa432a0db713d0758ad358f961a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_auth_radius_server.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3af68e1a9c3f2a75fddccffebe1b7ba7b67702f9b9d3d7042821efcbac9f29fa", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_sys_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a2eca3297e9bb63a1f0150dae1b7d2674ac030e86041d56afc2f7121d76bae0d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_asm_policy_manage.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "af2db3906c9155bc3bd1fe2e247652211e3d7ba869d1b956c776e32751dd7507", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_data_group.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9b94cac20db728d274e012eacd3df6512d32ae888becbacde596b5bfcc7e3b85", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_dns_resolver.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "409eb388bfc60ded6f3f2140b909e049de98e63d953c865b1c5ee6f43beadadf", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_snmp_trap.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "15f475bac9d3f5a326d6214ad9dcfd7b8ad3a44d3fb49f64d836cb768b9b3f53", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_pool_member.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f707f1b8111225f734cd156cc9ef36fea9d102405eb5260f796e97ca50636976", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_firewall_dos_profile.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b1dec7a8aec451511a66ca340d22cae5dbf324f98a965d1fd4a695987ca20e3e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_sys_daemon_log_tmm.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ae53c9b8c152ac9e9af7e726cd2904d9e5160c66759b7be4d5fe3f9a1552411f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_monitor_bigip.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d416a698a724fe9f0b931f76aa2c5def6a6b11e576f9ecabd1a12cdbd1baa145", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigiq_device_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d71a5573b7228ff39d9e550272b8c250276d418264be91fa5c40aa697d8134b1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_firewall_log_profile_network.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d518e2b84a9ff59eb3e81ccbad1210acd9390ed434f855239457ea773f2ce204", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_policy.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3b9299952e27a7597065c1b410e6e247800f97b0a6e94e4eb2ba504d408e943b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_message_routing_protocol.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2d3abd7296920b415c8e41f169d4716611861be1b313202e51d9aaa44db5b155", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_datacenter.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4bac651f85a3612aff886c3e5b211233d62abb3b2f6221a05e5c77ec7bb30a07", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_monitor_https.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "03e13b189865e77c2c7160b10d552ea4067d35392caf7ca65426314a9b764948", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_dns_zone.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "34be15da9f0f6eafe92cd6f9d4c79bc60cfb7970ec0702845dd3c4ae34f24ac5", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_device_trust.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2497b9c3d18ddbb3860a5a84a732e371b0084022e8c277062f3f88f484e4c123", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_snmp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8567d3dbf9bdb0f69e1bf7e00e47db8a30e6d34a3a9d2d7528e8b69cc4199ceb", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_virtual_server.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c495c7add0e0ab5d68c9219f30fe32ef3c5572c113522fbb18b208b6aa9a9776", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_profile_udp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ef7f93dde851ae98eeb7d1c99a8e8c36c4112827eba39a7a6d88f64dd6cdc690", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_dns_cache_resolver.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "af2107b32cbca147037d2b7e071c2bae709521b8e1e68175c46c7289bbde218d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_snat_translation.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "25a864450790622306c6550efda8208b095c293326e5d1066d9e6f3307af8229", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_topology_region.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a570a1ebfa8aacdc5b6e22f2fc0c49eb4de4a8456ab1e36ae1f037affe4c6795", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_firewall_dos_vector.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4da343c8ef4ac3a2f9cf1236407faa05057efbe034d63ebbbefc076fa5aaf662", - "format": 1 - }, - { - "name": "tests/unit/modules/network/f5/test_bigip_gtm_server.py", + "name": "plugins/module_utils/constants.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ab241e80c837d522a5af6cc3f3134838818a7629622c56ea96497e70feb68db", + "chksum_sha256": "91773c13ccdcdede9b230def5ff1b20bc9db1ede042f7e036f1430c748c6375e", "format": 1 }, { - "name": "tests/unit/modules/network/f5/test_bigip_asm_policy_server_technology.py", + "name": "plugins/module_utils/teem.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb01546b2122c1f48b8c0c8e4486070026f2d18fe1562f616eb10e42125298e8", + "chksum_sha256": "896f61bcd09bdc0a3bba99e90085bfda598fb0eb1a1df5722675e10751a38fa0", "format": 1 }, { - "name": "tests/unit/modules/network/f5/test_bigip_node.py", + "name": "plugins/module_utils/common.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6aa207d95dc9af18afc76395c6e39c1a3913085aa15ba9ca4306c1c47d6e8e26", + "chksum_sha256": "4c36c92d5fa539b0148466d8e9b1722bbd6af047e9b7583e6d59591efeb480e8", "format": 1 }, { - "name": "tests/unit/modules/network/f5/test_bigiq_application_fasthttp.py", + "name": "plugins/module_utils/version.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11dde1342b034b9f9258a000601198c1475c9fa925b889ea887e3189eb50b405", + "chksum_sha256": "c3024dd53ffaf52844070118044c66351eedd0339b4ae19b47fa9c3773449e6f", "format": 1 }, { - "name": "tests/unit/modules/utils.py", + "name": "plugins/module_utils/ipaddress.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24cb8d79ee7c7f60232def0b91968379b872915342fef2311ba886c532583b98", + "chksum_sha256": "ed137ab728c4bf0db553fb1ae4a0c311dbd07a919c08e0e1d564d6ce932b625b", "format": 1 }, { - "name": "tests/unit/modules/__init__.py", + "name": "plugins/module_utils/icontrol.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/compat", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "9c71d6a6fceec383fed5ee3d3c00954e7f86ecfa078f28c59af1c4b1a9c54931", "format": 1 }, { - "name": "tests/unit/compat/__init__.py", + "name": "plugins/module_utils/compare.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "92cbe2dedb92dc808900590a9cda97f9dfa8ee2f524be5956ac85367eb3779f8", "format": 1 }, { - "name": "tests/unit/compat/unittest.py", + "name": "plugins/module_utils/bigiq.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5401a046e5ce71fa19b6d905abd0f9bdf816c0c635f7bdda6730b3ef06e67096", + "chksum_sha256": "9b8b2050050443f1f9c62fecea243d81406adf8c0a71039bbf012546b63675ba", "format": 1 }, { - "name": "tests/unit/compat/builtins.py", + "name": "plugins/module_utils/urls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dbc842b2c36d233d69db284d71d0018e22882cb8e525506ecb7596e32b6204fc", + "chksum_sha256": "f436f363ea23d8fb624544adc4771e2c53a0cd595f68b19fdb924f02400a6cb8", "format": 1 }, { - "name": "tests/unit/compat/mock.py", + "name": "plugins/module_utils/bigip.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0af958450cf6de3fbafe94b1111eae8ba5a8dbe1d785ffbb9df81f26e4946d99", + "chksum_sha256": "9bf1c7eed8b58689a446f8d230d5bbec595af048dbe552ac8ba4f7c7ea4dc159", "format": 1 }, { - "name": "tests/unit/__init__.py", + "name": "plugins/module_utils/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/module_utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/unit/module_utils/network", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/unit/module_utils/network/f5", + "name": "plugins/lookup", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/module_utils/network/f5/test_teem.py", + "name": "plugins/lookup/bigiq_license.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6f65dbe6d21b186ef765c5707102f4342077534f79e5fe74d941fcbb5e71a4f", + "chksum_sha256": "b42d534b23d57843edbcd21076253478efa967c099cf38554139d83c0b372bd1", "format": 1 }, { - "name": "tests/config.yml", + "name": "plugins/lookup/license_hopper.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f82d07148ed95103a35fbb3a173dda07c3a9c180f288ba94f629f064d07c24f", + "chksum_sha256": "3b113339dc6eeba184679a2a2488aa0cfbd1f842bbe0f7854b8731ca564cfa49", "format": 1 }, { - "name": "tests/__init__.py", + "name": "plugins/lookup/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/sanity", + "name": "meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.13.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b2314c713cff63c8d5aec082ed0c03d721966eb498301aaf875b8e97fc04bcc6", - "format": 1 - }, - { - "name": "tests/sanity/ignore-2.9.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "401b141f73b8bdec5174fc327afe4ea65901606ff18441a8cd10dfdef2e15e5d", - "format": 1 - }, - { - "name": "tests/sanity/ignore-2.10.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6093bf7f826b43c2e69633e8eb0175fbf5803df5a9d6c61a3c628c42f3b3114b", - "format": 1 - }, - { - "name": "tests/sanity/ignore-2.14.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bca461a2eb3c47bdf643e4559dd5b4f73ff725970e2a1d2d233b55c01dd8ff4e", - "format": 1 - }, - { - "name": "tests/sanity/ignore-2.11.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6093bf7f826b43c2e69633e8eb0175fbf5803df5a9d6c61a3c628c42f3b3114b", - "format": 1 - }, - { - "name": "tests/sanity/ignore-2.12.txt", + "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6093bf7f826b43c2e69633e8eb0175fbf5803df5a9d6c61a3c628c42f3b3114b", + "chksum_sha256": "2a0c1ca99a05dd98a96356c9efdef79652bccb1401508a1f88b53543d9fb40bd", "format": 1 }, { - "name": "tests/sanity/ignore-2.15.txt", + "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bca461a2eb3c47bdf643e4559dd5b4f73ff725970e2a1d2d233b55c01dd8ff4e", + "chksum_sha256": "46106c71930cecbf002771e3d8d9f5ed54b9fab3ef3fa0da2f58266144b70842", "format": 1 }, { diff --git a/ansible_collections/f5networks/f5_modules/MANIFEST.json b/ansible_collections/f5networks/f5_modules/MANIFEST.json index d074c3103..6d520bfd3 100644 --- a/ansible_collections/f5networks/f5_modules/MANIFEST.json +++ b/ansible_collections/f5networks/f5_modules/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "f5networks", "name": "f5_modules", - "version": "1.25.0", + "version": "1.28.0", "authors": [ "Wojciech Wypior (@wojtek0806)" ], @@ -30,7 +30,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af2bafc5f2a75c52c1765cb206860e23ff04a93635df5a27126b1cc7e88711d7", + "chksum_sha256": "cc44c5e8bc94f8b6717d72ce34b22670695130b9efbc365339fd10cedbc56647", "format": 1 }, "format": 1 diff --git a/ansible_collections/f5networks/f5_modules/README.md b/ansible_collections/f5networks/f5_modules/README.md index 801646a60..299d0fe77 100644 --- a/ansible_collections/f5networks/f5_modules/README.md +++ b/ansible_collections/f5networks/f5_modules/README.md @@ -5,11 +5,11 @@ This collection packages and distributes modules, and plugins. ## Requirements - - ansible >= 2.9 + - ansible >= 2.14 - packaging ## Python Version Notice -Collection only supports python 3.6 and above, however F5 recommends Python 3.8 and above. +Collection only supports python 3.9 and above. ## Installation To install in ansible default or defined paths use: diff --git a/ansible_collections/f5networks/f5_modules/changelogs/.plugin-cache.yaml b/ansible_collections/f5networks/f5_modules/changelogs/.plugin-cache.yaml deleted file mode 100644 index e1a7fd19b..000000000 --- a/ansible_collections/f5networks/f5_modules/changelogs/.plugin-cache.yaml +++ /dev/null @@ -1,918 +0,0 @@ -plugins: - become: {} - cache: {} - callback: {} - cliconf: {} - connection: {} - httpapi: {} - inventory: {} - lookup: - bigiq_license: - description: Select a random license key from a pool of biqiq available licenses - name: bigiq_license - version_added: '1.0' - license_hopper: - description: Return random license from list - name: license_hopper - version_added: '1.0' - module: - bigip_apm_acl: - description: Manage user-defined APM ACLs - name: bigip_apm_acl - namespace: '' - version_added: 1.0.0 - bigip_apm_network_access: - description: Manage APM Network Access resource - name: bigip_apm_network_access - namespace: '' - version_added: 1.0.0 - bigip_apm_policy_fetch: - description: Exports the APM policy or APM access profile from remote nodes. - name: bigip_apm_policy_fetch - namespace: '' - version_added: 1.0.0 - bigip_apm_policy_import: - description: Manage BIG-IP APM policy or APM access profile imports - name: bigip_apm_policy_import - namespace: '' - version_added: 1.0.0 - bigip_asm_advanced_settings: - description: Manage BIG-IP system ASM advanced settings - name: bigip_asm_advanced_settings - namespace: '' - version_added: 1.4.0 - bigip_asm_dos_application: - description: Manage application settings for a DOS profile - name: bigip_asm_dos_application - namespace: '' - version_added: 1.0.0 - bigip_asm_policy_fetch: - description: Exports the ASM policy from remote nodes. - name: bigip_asm_policy_fetch - namespace: '' - version_added: 1.0.0 - bigip_asm_policy_import: - description: Manage BIG-IP ASM policy imports - name: bigip_asm_policy_import - namespace: '' - version_added: 1.0.0 - bigip_asm_policy_manage: - description: Manage BIG-IP ASM policies - name: bigip_asm_policy_manage - namespace: '' - version_added: 1.0.0 - bigip_asm_policy_server_technology: - description: Manages Server Technology on an ASM policy - name: bigip_asm_policy_server_technology - namespace: '' - version_added: 1.0.0 - bigip_asm_policy_signature_set: - description: Manages Signature Sets on an ASM policy - name: bigip_asm_policy_signature_set - namespace: '' - version_added: 1.0.0 - bigip_cgnat_lsn_pool: - description: Manage CGNAT LSN Pools - name: bigip_cgnat_lsn_pool - namespace: '' - version_added: 1.0.0 - bigip_cli_alias: - description: Manage CLI aliases on a BIG-IP - name: bigip_cli_alias - namespace: '' - version_added: 1.0.0 - bigip_cli_script: - description: Manage CLI scripts on a BIG-IP - name: bigip_cli_script - namespace: '' - version_added: 1.0.0 - bigip_command: - description: Run TMSH and BASH commands on F5 devices - name: bigip_command - namespace: '' - version_added: 1.0.0 - bigip_config: - description: Manage BIG-IP configuration sections - name: bigip_config - namespace: '' - version_added: 1.0.0 - bigip_configsync_action: - description: Perform different actions related to config-sync - name: bigip_configsync_action - namespace: '' - version_added: 1.0.0 - bigip_data_group: - description: Manage data groups on a BIG-IP - name: bigip_data_group - namespace: '' - version_added: 1.0.0 - bigip_device_auth: - description: Manage system authentication on a BIG-IP - name: bigip_device_auth - namespace: '' - version_added: 1.0.0 - bigip_device_auth_ldap: - description: Manage LDAP device authentication settings on BIG-IP - name: bigip_device_auth_ldap - namespace: '' - version_added: 1.0.0 - bigip_device_auth_radius: - description: Manages RADIUS auth configuration on a BIG-IP device - name: bigip_device_auth_radius - namespace: '' - version_added: 1.3.0 - bigip_device_auth_radius_server: - description: Manages the RADIUS server configuration of the device - name: bigip_device_auth_radius_server - namespace: '' - version_added: 1.3.0 - bigip_device_certificate: - description: Manage self-signed device certificates - name: bigip_device_certificate - namespace: '' - version_added: 1.0.0 - bigip_device_connectivity: - description: Manages device IP configuration settings for HA on a BIG-IP. - name: bigip_device_connectivity - namespace: '' - version_added: 1.0.0 - bigip_device_dns: - description: Manage DNS settings on a BIG-IP - name: bigip_device_dns - namespace: '' - version_added: 1.0.0 - bigip_device_group: - description: Manage device groups on a BIG-IP - name: bigip_device_group - namespace: '' - version_added: 1.0.0 - bigip_device_group_member: - description: Manages members in a device group - name: bigip_device_group_member - namespace: '' - version_added: 1.0.0 - bigip_device_ha_group: - description: Manage HA group settings on a BIG-IP system - name: bigip_device_ha_group - namespace: '' - version_added: 1.0.0 - bigip_device_httpd: - description: Manage HTTPD related settings on a BIG-IP system - name: bigip_device_httpd - namespace: '' - version_added: 1.0.0 - bigip_device_info: - description: Collect information from F5 BIG-IP devices - name: bigip_device_info - namespace: '' - version_added: 1.0.0 - bigip_device_license: - description: Manage license installation and activation on BIG-IP devices - name: bigip_device_license - namespace: '' - version_added: 1.0.0 - bigip_device_ntp: - description: Manage NTP servers on a BIG-IP - name: bigip_device_ntp - namespace: '' - version_added: 1.0.0 - bigip_device_sshd: - description: Manage the SSHD settings of a BIG-IP - name: bigip_device_sshd - namespace: '' - version_added: 1.0.0 - bigip_device_syslog: - description: Manage system-level syslog settings on BIG-IP - name: bigip_device_syslog - namespace: '' - version_added: 1.0.0 - bigip_device_traffic_group: - description: Manages traffic groups on BIG-IP - name: bigip_device_traffic_group - namespace: '' - version_added: 1.0.0 - bigip_device_trust: - description: Manage the trust relationships between BIG-IPs - name: bigip_device_trust - namespace: '' - version_added: 1.0.0 - bigip_dns_cache_resolver: - description: Manage DNS resolver cache configuration on a BIG-IP - name: bigip_dns_cache_resolver - namespace: '' - version_added: 1.0.0 - bigip_dns_nameserver: - description: Manage LTM DNS nameservers on a BIG-IP - name: bigip_dns_nameserver - namespace: '' - version_added: 1.0.0 - bigip_dns_resolver: - description: Manage DNS resolvers on a BIG-IP - name: bigip_dns_resolver - namespace: '' - version_added: 1.0.0 - bigip_dns_zone: - description: Manage DNS zones on BIG-IP - name: bigip_dns_zone - namespace: '' - version_added: 1.0.0 - bigip_file_copy: - description: Manage files in datastores on a BIG-IP - name: bigip_file_copy - namespace: '' - version_added: 1.0.0 - bigip_firewall_address_list: - description: Manage address lists on BIG-IP AFM - name: bigip_firewall_address_list - namespace: '' - version_added: 1.0.0 - bigip_firewall_dos_profile: - description: Manage AFM DoS profiles on a BIG-IP - name: bigip_firewall_dos_profile - namespace: '' - version_added: 1.0.0 - bigip_firewall_dos_vector: - description: Manage attack vector configuration in an AFM DoS profile - name: bigip_firewall_dos_vector - namespace: '' - version_added: 1.0.0 - bigip_firewall_global_rules: - description: Manage AFM global rule settings on BIG-IP - name: bigip_firewall_global_rules - namespace: '' - version_added: 1.0.0 - bigip_firewall_log_profile: - description: Manages AFM logging profiles configured in the system - name: bigip_firewall_log_profile - namespace: '' - version_added: 1.0.0 - bigip_firewall_log_profile_network: - description: Configures Network Firewall related settings of the log profile - name: bigip_firewall_log_profile_network - namespace: '' - version_added: 1.0.0 - bigip_firewall_policy: - description: Manage AFM security firewall policies on a BIG-IP - name: bigip_firewall_policy - namespace: '' - version_added: 1.0.0 - bigip_firewall_port_list: - description: Manage port lists on BIG-IP AFM - name: bigip_firewall_port_list - namespace: '' - version_added: 1.0.0 - bigip_firewall_rule: - description: Manage AFM Firewall rules - name: bigip_firewall_rule - namespace: '' - version_added: 1.0.0 - bigip_firewall_rule_list: - description: Manage AFM security firewall policies on a BIG-IP - name: bigip_firewall_rule_list - namespace: '' - version_added: 1.0.0 - bigip_firewall_schedule: - description: Manage BIG-IP AFM schedule configurations - name: bigip_firewall_schedule - namespace: '' - version_added: 1.0.0 - bigip_gtm_datacenter: - description: Manage Datacenter configuration in BIG-IP - name: bigip_gtm_datacenter - namespace: '' - version_added: 1.0.0 - bigip_gtm_dns_listener: - description: Configures the BIG-IP DNS system to answer TCP or UDP DNS requests - name: bigip_gtm_dns_listener - namespace: '' - version_added: 1.4.0 - bigip_gtm_global: - description: Manages global GTM settings - name: bigip_gtm_global - namespace: '' - version_added: 1.0.0 - bigip_gtm_monitor_bigip: - description: Manages F5 BIG-IP GTM BIG-IP monitors - name: bigip_gtm_monitor_bigip - namespace: '' - version_added: 1.0.0 - bigip_gtm_monitor_external: - description: Manages external GTM monitors on a BIG-IP - name: bigip_gtm_monitor_external - namespace: '' - version_added: 1.0.0 - bigip_gtm_monitor_firepass: - description: Manages F5 BIG-IP GTM FirePass monitors - name: bigip_gtm_monitor_firepass - namespace: '' - version_added: 1.0.0 - bigip_gtm_monitor_http: - description: Manages F5 BIG-IP GTM HTTP monitors - name: bigip_gtm_monitor_http - namespace: '' - version_added: 1.0.0 - bigip_gtm_monitor_https: - description: Manages F5 BIG-IP GTM HTTPS monitors - name: bigip_gtm_monitor_https - namespace: '' - version_added: 1.0.0 - bigip_gtm_monitor_tcp: - description: Manages F5 BIG-IP GTM TCP monitors - name: bigip_gtm_monitor_tcp - namespace: '' - version_added: 1.0.0 - bigip_gtm_monitor_tcp_half_open: - description: Manages F5 BIG-IP GTM TCP half-open monitors - name: bigip_gtm_monitor_tcp_half_open - namespace: '' - version_added: 1.0.0 - bigip_gtm_pool: - description: Manages F5 BIG-IP GTM pools - name: bigip_gtm_pool - namespace: '' - version_added: 1.0.0 - bigip_gtm_pool_member: - description: Manage GTM pool member settings - name: bigip_gtm_pool_member - namespace: '' - version_added: 1.0.0 - bigip_gtm_server: - description: Manages F5 BIG-IP GTM servers - name: bigip_gtm_server - namespace: '' - version_added: 1.0.0 - bigip_gtm_topology_record: - description: Manages GTM Topology Records - name: bigip_gtm_topology_record - namespace: '' - version_added: 1.0.0 - bigip_gtm_topology_region: - description: Manages GTM Topology Regions - name: bigip_gtm_topology_region - namespace: '' - version_added: 1.0.0 - bigip_gtm_virtual_server: - description: Manages F5 BIG-IP GTM virtual servers - name: bigip_gtm_virtual_server - namespace: '' - version_added: 1.0.0 - bigip_gtm_wide_ip: - description: Manages F5 BIG-IP GTM Wide IP - name: bigip_gtm_wide_ip - namespace: '' - version_added: 1.0.0 - bigip_hostname: - description: Manage the hostname of a BIG-IP - name: bigip_hostname - namespace: '' - version_added: 1.0.0 - bigip_iapp_service: - description: Manages TCL iApp services on a BIG-IP - name: bigip_iapp_service - namespace: '' - version_added: 1.0.0 - bigip_iapp_template: - description: Manages TCL iApp templates on a BIG-IP. - name: bigip_iapp_template - namespace: '' - version_added: 1.0.0 - bigip_ike_peer: - description: Manage IPSec IKE Peer configuration on BIG-IP - name: bigip_ike_peer - namespace: '' - version_added: 1.0.0 - bigip_imish_config: - description: Manage BIG-IP advanced routing configuration sections - name: bigip_imish_config - namespace: '' - version_added: 1.0.0 - bigip_interface: - description: Module to manage BIG-IP physical interfaces. - name: bigip_interface - namespace: '' - version_added: 1.0.0 - bigip_ipsec_policy: - description: Manage IPSec policies on a BIG-IP - name: bigip_ipsec_policy - namespace: '' - version_added: 1.0.0 - bigip_irule: - description: Manage iRules across different modules on a BIG-IP - name: bigip_irule - namespace: '' - version_added: 1.0.0 - bigip_log_destination: - description: Manages log destinations on a BIG-IP. - name: bigip_log_destination - namespace: '' - version_added: 1.0.0 - bigip_log_publisher: - description: Manages log publishers on a BIG-IP - name: bigip_log_publisher - namespace: '' - version_added: 1.0.0 - bigip_ltm_global: - description: Manages global LTM settings - name: bigip_ltm_global - namespace: '' - version_added: 1.16.0 - bigip_lx_package: - description: Manages Javascript LX packages on a BIG-IP - name: bigip_lx_package - namespace: '' - version_added: 1.0.0 - bigip_management_route: - description: Manage system management routes on a BIG-IP - name: bigip_management_route - namespace: '' - version_added: 1.0.0 - bigip_message_routing_peer: - description: Manage peers for routing generic message protocol messages - name: bigip_message_routing_peer - namespace: '' - version_added: 1.0.0 - bigip_message_routing_protocol: - description: Manage the generic message parser profile. - name: bigip_message_routing_protocol - namespace: '' - version_added: 1.0.0 - bigip_message_routing_route: - description: Manages static routes for routing message protocol messages - name: bigip_message_routing_route - namespace: '' - version_added: 1.0.0 - bigip_message_routing_router: - description: Manages router profiles for message-routing protocols - name: bigip_message_routing_router - namespace: '' - version_added: 1.0.0 - bigip_message_routing_transport_config: - description: Manages configuration for an outgoing connection - name: bigip_message_routing_transport_config - namespace: '' - version_added: 1.0.0 - bigip_monitor_dns: - description: Manage DNS monitors on a BIG-IP - name: bigip_monitor_dns - namespace: '' - version_added: 1.0.0 - bigip_monitor_external: - description: Manages external LTM monitors on a BIG-IP - name: bigip_monitor_external - namespace: '' - version_added: 1.0.0 - bigip_monitor_ftp: - description: Manage FTP monitors on a BIG-IP - name: bigip_monitor_ftp - namespace: '' - version_added: 1.1.0 - bigip_monitor_gateway_icmp: - description: Manages F5 BIG-IP LTM gateway ICMP monitors - name: bigip_monitor_gateway_icmp - namespace: '' - version_added: 1.0.0 - bigip_monitor_http: - description: Manages F5 BIG-IP LTM HTTP monitors - name: bigip_monitor_http - namespace: '' - version_added: 1.0.0 - bigip_monitor_https: - description: Manages F5 BIG-IP LTM HTTPS monitors - name: bigip_monitor_https - namespace: '' - version_added: 1.0.0 - bigip_monitor_icmp: - description: Manages F5 BIG-IP LTM ICMP monitors - name: bigip_monitor_icmp - namespace: '' - version_added: 1.1.0 - bigip_monitor_ldap: - description: Manages BIG-IP LDAP monitors - name: bigip_monitor_ldap - namespace: '' - version_added: 1.0.0 - bigip_monitor_mysql: - description: Manages BIG-IP MySQL monitors - name: bigip_monitor_mysql - namespace: '' - version_added: 1.3.0 - bigip_monitor_oracle: - description: Manages BIG-IP Oracle monitors - name: bigip_monitor_oracle - namespace: '' - version_added: 1.3.0 - bigip_monitor_smtp: - description: Manage SMTP monitors on a BIG-IP - name: bigip_monitor_smtp - namespace: '' - version_added: 1.1.0 - bigip_monitor_snmp_dca: - description: Manages BIG-IP SNMP data collecting agent (DCA) monitors - name: bigip_monitor_snmp_dca - namespace: '' - version_added: 1.0.0 - bigip_monitor_tcp: - description: Manages F5 BIG-IP LTM TCP monitors - name: bigip_monitor_tcp - namespace: '' - version_added: 1.0.0 - bigip_monitor_tcp_echo: - description: Manages F5 BIG-IP LTM TCP echo monitors - name: bigip_monitor_tcp_echo - namespace: '' - version_added: 1.0.0 - bigip_monitor_tcp_half_open: - description: Manages F5 BIG-IP LTM TCP half-open monitors - name: bigip_monitor_tcp_half_open - namespace: '' - version_added: 1.0.0 - bigip_monitor_udp: - description: Manages F5 BIG-IP LTM UDP monitors - name: bigip_monitor_udp - namespace: '' - version_added: 1.0.0 - bigip_network_globals: - description: Manage network global settings on BIG-IP - name: bigip_network_globals - namespace: '' - version_added: 1.0.0 - bigip_node: - description: Manages F5 BIG-IP LTM nodes - name: bigip_node - namespace: '' - version_added: 1.0.0 - bigip_partition: - description: Manage BIG-IP partitions - name: bigip_partition - namespace: '' - version_added: 1.0.0 - bigip_password_policy: - description: Manages the authentication password policy on a BIG-IP - name: bigip_password_policy - namespace: '' - version_added: 1.0.0 - bigip_policy: - description: Manage general policy configuration on a BIG-IP - name: bigip_policy - namespace: '' - version_added: 1.0.0 - bigip_policy_rule: - description: Manage LTM policy rules on a BIG-IP - name: bigip_policy_rule - namespace: '' - version_added: 1.0.0 - bigip_pool: - description: Manages F5 BIG-IP LTM pools - name: bigip_pool - namespace: '' - version_added: 1.0.0 - bigip_pool_member: - description: Manages F5 BIG-IP LTM pool members - name: bigip_pool_member - namespace: '' - version_added: 1.0.0 - bigip_profile_analytics: - description: Manage HTTP analytics profiles on a BIG-IP - name: bigip_profile_analytics - namespace: '' - version_added: 1.0.0 - bigip_profile_client_ssl: - description: Manages client SSL profiles on a BIG-IP - name: bigip_profile_client_ssl - namespace: '' - version_added: 1.0.0 - bigip_profile_dns: - description: Manage DNS profiles on a BIG-IP - name: bigip_profile_dns - namespace: '' - version_added: 1.0.0 - bigip_profile_fastl4: - description: Manages Fast L4 profiles - name: bigip_profile_fastl4 - namespace: '' - version_added: 1.0.0 - bigip_profile_ftp: - description: Manages FTP profiles - name: bigip_profile_ftp - namespace: '' - version_added: 1.0.0 - bigip_profile_http: - description: Manage HTTP profiles on a BIG-IP - name: bigip_profile_http - namespace: '' - version_added: 1.0.0 - bigip_profile_http2: - description: Manage HTTP2 profiles on a BIG-IP - name: bigip_profile_http2 - namespace: '' - version_added: 1.0.0 - bigip_profile_http_compression: - description: Manage HTTP compression profiles on a BIG-IP - name: bigip_profile_http_compression - namespace: '' - version_added: 1.0.0 - bigip_profile_oneconnect: - description: Manage OneConnect profiles on a BIG-IP - name: bigip_profile_oneconnect - namespace: '' - version_added: 1.0.0 - bigip_profile_persistence_cookie: - description: Manage cookie persistence profiles on BIG-IP - name: bigip_profile_persistence_cookie - namespace: '' - version_added: 1.0.0 - bigip_profile_persistence_src_addr: - description: Manage source address persistence profiles - name: bigip_profile_persistence_src_addr - namespace: '' - version_added: 1.0.0 - bigip_profile_persistence_universal: - description: Manage universal persistence profiles - name: bigip_profile_persistence_universal - namespace: '' - version_added: 1.1.0 - bigip_profile_server_ssl: - description: Manages server SSL profiles on a BIG-IP - name: bigip_profile_server_ssl - namespace: '' - version_added: 1.0.0 - bigip_profile_sip: - description: Manage SIP profiles on a BIG-IP - name: bigip_profile_sip - namespace: '' - version_added: 1.0.0 - bigip_profile_tcp: - description: Manage TCP profiles on a BIG-IP - name: bigip_profile_tcp - namespace: '' - version_added: 1.0.0 - bigip_profile_udp: - description: Manage UDP profiles on a BIG-IP - name: bigip_profile_udp - namespace: '' - version_added: 1.0.0 - bigip_provision: - description: Manage BIG-IP module provisioning - name: bigip_provision - namespace: '' - version_added: 1.0.0 - bigip_provision_async: - description: Manage BIG-IP module provisioning - name: bigip_provision_async - namespace: '' - version_added: 1.25.0 - bigip_qkview: - description: Manage QKviews on the device - name: bigip_qkview - namespace: '' - version_added: 1.0.0 - bigip_remote_role: - description: Manage remote roles on a BIG-IP - name: bigip_remote_role - namespace: '' - version_added: 1.0.0 - bigip_remote_syslog: - description: Manipulate remote syslog settings on a BIG-IP - name: bigip_remote_syslog - namespace: '' - version_added: 1.0.0 - bigip_remote_user: - description: Manages default settings for remote user accounts on a BIG-IP - name: bigip_remote_user - namespace: '' - version_added: 1.0.0 - bigip_routedomain: - description: Manage route domains on a BIG-IP - name: bigip_routedomain - namespace: '' - version_added: 1.0.0 - bigip_selfip: - description: Manage Self-IPs on a BIG-IP system - name: bigip_selfip - namespace: '' - version_added: 1.0.0 - bigip_service_policy: - description: Manages service policies on a BIG-IP. - name: bigip_service_policy - namespace: '' - version_added: 1.0.0 - bigip_smtp: - description: Manages SMTP settings on the BIG-IP - name: bigip_smtp - namespace: '' - version_added: 1.0.0 - bigip_snat_pool: - description: Manage SNAT pools on a BIG-IP - name: bigip_snat_pool - namespace: '' - version_added: 1.0.0 - bigip_snat_translation: - description: Manage SNAT translations on a BIG-IP - name: bigip_snat_translation - namespace: '' - version_added: 1.0.0 - bigip_snmp: - description: Manipulate general SNMP settings on a BIG-IP - name: bigip_snmp - namespace: '' - version_added: 1.0.0 - bigip_snmp_community: - description: Manages SNMP communities on a BIG-IP. - name: bigip_snmp_community - namespace: '' - version_added: 1.0.0 - bigip_snmp_trap: - description: Manipulate SNMP trap information on a BIG-IP - name: bigip_snmp_trap - namespace: '' - version_added: 1.0.0 - bigip_software_image: - description: Manage software images on a BIG-IP - name: bigip_software_image - namespace: '' - version_added: 1.0.0 - bigip_software_install: - description: Install software images on a BIG-IP - name: bigip_software_install - namespace: '' - version_added: 1.0.0 - bigip_software_update: - description: Manage the software update settings of a BIG-IP - name: bigip_software_update - namespace: '' - version_added: 1.0.0 - bigip_ssl_certificate: - description: Import/Delete certificates from BIG-IP - name: bigip_ssl_certificate - namespace: '' - version_added: 1.0.0 - bigip_ssl_csr: - description: Create SSL CSR files on the BIG-IP - name: bigip_ssl_csr - namespace: '' - version_added: 1.3.0 - bigip_ssl_key: - description: Import/Delete SSL keys from BIG-IP - name: bigip_ssl_key - namespace: '' - version_added: 1.0.0 - bigip_ssl_key_cert: - description: Import/Delete SSL keys and certs from BIG-IP - name: bigip_ssl_key_cert - namespace: '' - version_added: 1.6.0 - bigip_ssl_ocsp: - description: Manage OCSP configurations on BIG-IP - name: bigip_ssl_ocsp - namespace: '' - version_added: 1.0.0 - bigip_static_route: - description: Manipulate static routes on a BIG-IP - name: bigip_static_route - namespace: '' - version_added: 1.0.0 - bigip_sys_daemon_log_tmm: - description: Manage BIG-IP tmm daemon log settings - name: bigip_sys_daemon_log_tmm - namespace: '' - version_added: 1.0.0 - bigip_sys_db: - description: Manage BIG-IP system database variables - name: bigip_sys_db - namespace: '' - version_added: 1.0.0 - bigip_sys_global: - description: Manage BIG-IP global settings - name: bigip_sys_global - namespace: '' - version_added: 1.0.0 - bigip_timer_policy: - description: Manage timer policies on a BIG-IP - name: bigip_timer_policy - namespace: '' - version_added: 1.0.0 - bigip_traffic_selector: - description: Manage IPSec Traffic Selectors on BIG-IP - name: bigip_traffic_selector - namespace: '' - version_added: 1.0.0 - bigip_trunk: - description: Manage trunks on a BIG-IP - name: bigip_trunk - namespace: '' - version_added: 1.0.0 - bigip_tunnel: - description: Manage tunnels on a BIG-IP - name: bigip_tunnel - namespace: '' - version_added: 1.0.0 - bigip_ucs: - description: Manage upload, installation, and removal of UCS files - name: bigip_ucs - namespace: '' - version_added: 1.0.0 - bigip_ucs_fetch: - description: Fetches a UCS file from remote nodes - name: bigip_ucs_fetch - namespace: '' - version_added: 1.0.0 - bigip_user: - description: Manage user accounts and user attributes on a BIG-IP - name: bigip_user - namespace: '' - version_added: 1.0.0 - bigip_vcmp_guest: - description: Manages vCMP guests on a BIG-IP - name: bigip_vcmp_guest - namespace: '' - version_added: 1.0.0 - bigip_virtual_address: - description: Manage LTM virtual addresses on a BIG-IP - name: bigip_virtual_address - namespace: '' - version_added: 1.0.0 - bigip_virtual_server: - description: Manage LTM virtual servers on a BIG-IP - name: bigip_virtual_server - namespace: '' - version_added: 1.0.0 - bigip_vlan: - description: Manage VLANs on a BIG-IP system - name: bigip_vlan - namespace: '' - version_added: 1.0.0 - bigip_wait: - description: Wait for a BIG-IP condition before continuing - name: bigip_wait - namespace: '' - version_added: 1.0.0 - bigiq_application_fasthttp: - description: Manages BIG-IQ FastHTTP applications - name: bigiq_application_fasthttp - namespace: '' - version_added: 1.0.0 - bigiq_application_fastl4_tcp: - description: Manages BIG-IQ FastL4 TCP applications - name: bigiq_application_fastl4_tcp - namespace: '' - version_added: 1.0.0 - bigiq_application_fastl4_udp: - description: Manages BIG-IQ FastL4 UDP applications - name: bigiq_application_fastl4_udp - namespace: '' - version_added: 1.0.0 - bigiq_application_http: - description: Manages BIG-IQ HTTP applications - name: bigiq_application_http - namespace: '' - version_added: 1.0.0 - bigiq_application_https_offload: - description: Manages BIG-IQ HTTPS offload applications - name: bigiq_application_https_offload - namespace: '' - version_added: 1.0.0 - bigiq_application_https_waf: - description: Manages BIG-IQ HTTPS WAF applications - name: bigiq_application_https_waf - namespace: '' - version_added: 1.0.0 - bigiq_device_discovery: - description: Manage BIG-IP devices through BIG-IQ - name: bigiq_device_discovery - namespace: '' - version_added: 1.0.0 - bigiq_device_info: - description: Collect information from F5 BIG-IQ devices - name: bigiq_device_info - namespace: '' - version_added: 1.0.0 - bigiq_regkey_license: - description: Manages licenses in a BIG-IQ registration key pool - name: bigiq_regkey_license - namespace: '' - version_added: 1.0.0 - bigiq_regkey_license_assignment: - description: Manage regkey license assignment on BIG-IPs from a BIG-IQ - name: bigiq_regkey_license_assignment - namespace: '' - version_added: 1.0.0 - bigiq_regkey_pool: - description: Manages registration key pools on BIG-IQ - name: bigiq_regkey_pool - namespace: '' - version_added: 1.0.0 - bigiq_utility_license: - description: Manage utility licenses on a BIG-IQ - name: bigiq_utility_license - namespace: '' - version_added: 1.0.0 - bigiq_utility_license_assignment: - description: Manage utility license assignment on BIG-IPs from a BIG-IQ - name: bigiq_utility_license_assignment - namespace: '' - version_added: 1.0.0 - netconf: {} - shell: {} - strategy: {} - vars: {} -version: 1.25.0 diff --git a/ansible_collections/f5networks/f5_modules/changelogs/changelog.yaml b/ansible_collections/f5networks/f5_modules/changelogs/changelog.yaml index 714454949..6213c6917 100644 --- a/ansible_collections/f5networks/f5_modules/changelogs/changelog.yaml +++ b/ansible_collections/f5networks/f5_modules/changelogs/changelog.yaml @@ -1007,6 +1007,66 @@ releases: name: bigip_provision_async namespace: '' release_date: '2023-06-07' + 1.25.1: + release_date: '2023-07-19' + 1.26.0: + changes: + bugfixes: + - bigip_ssl_key_cert - fixed flaw in code to make module work with same key + and cert name when true_names set to true + - bigip_virtual_server - fixed an idempotency bug where the module send asm + policy profile for update even when not specified explicitly by the user + fragments: + - true-names-bigfixes.yaml + - virtual-server-profile-idempotency.yaml + release_date: '2023-08-30' + 1.27.0: + changes: + bugfixes: + - bigip_device_certificate - error-handling for connection error while running + exec command function to fetch certificate details + - bigip_pool - Resolved a bug in the code to allow the module to remove monitors + from the pool + minor_changes: + - bigip_policy_rule - added six more options for ssl_extension condition + fragments: + - bigip-pool-removeMonitor-bugfix.yaml + - error-handling-for-connection-error.yaml + - policy-rule-ssl-extension-options.yaml + release_date: '2023-10-12' + 1.27.1: + changes: + minor_changes: + - bigiq_device_discovery - Changes in documentation related to Provider block + fragments: + - bigiq-device-discovery-doc-changes.yaml + release_date: '2023-11-23' + 1.28.0: + changes: + bugfixes: + - bigip_gtm_monitor_bigip - fixed an issue where IP and port were not applied + correctly when creating new monitor. + - bigip_gtm_monitor_firepass - fixed an issue where IP and port were not applied + correctly when creating new monitor. + - bigip_gtm_monitor_http - fixed an issue where IP and port were not applied + correctly when creating new monitor. + - bigip_gtm_monitor_https- fixed an issue where IP and port were not applied + correctly when creating new monitor. + - bigip_gtm_monitor_tcp - fixed an issue where IP and port were not applied + correctly when creating new monitor. + - bigip_gtm_monitor_tcp_half_open - fixed an issue where IP and port were not + applied correctly when creating new monitor. + - bigip_gtm_topology_region - fixed an issue where if multiple states with spaces + in values were defined, module would throw invalid command error + - bigip_gtm_topology_region - fixed an issue where states names that contained + spaces caused the idempotency to break. + - bigip_ssl_key_cert - fixed an issue where the passphrase was not being properly + send to the BIG-IP. + fragments: + - fix-gtm-monitors.yaml + - fix-gtm-topo-region.yaml + - fix-ssl-key-cert-passphrase-bug.yaml + release_date: '2024-02-12' 1.3.0: changes: bugfixes: diff --git a/ansible_collections/f5networks/f5_modules/changelogs/config.yaml b/ansible_collections/f5networks/f5_modules/changelogs/config.yaml index 91ec7aeff..3e12a799a 100644 --- a/ansible_collections/f5networks/f5_modules/changelogs/config.yaml +++ b/ansible_collections/f5networks/f5_modules/changelogs/config.yaml @@ -11,21 +11,21 @@ notesdir: fragments prelude_section_name: release_summary prelude_section_title: Release Summary sections: -- - major_changes - - Major Changes -- - minor_changes - - Minor Changes -- - breaking_changes - - Breaking Changes / Porting Guide -- - deprecated_features - - Deprecated Features -- - removed_features - - Removed Features (previously deprecated) -- - security_fixes - - Security Fixes -- - bugfixes - - Bugfixes -- - known_issues - - Known Issues + - - major_changes + - Major Changes + - - minor_changes + - Minor Changes + - - breaking_changes + - Breaking Changes / Porting Guide + - - deprecated_features + - Deprecated Features + - - removed_features + - Removed Features (previously deprecated) + - - security_fixes + - Security Fixes + - - bugfixes + - Bugfixes + - - known_issues + - Known Issues title: F5Networks F5_Modules Collection trivial_section_name: trivial diff --git a/ansible_collections/f5networks/f5_modules/meta/runtime.yml b/ansible_collections/f5networks/f5_modules/meta/runtime.yml index 4b8316de0..ba6612bc8 100644 --- a/ansible_collections/f5networks/f5_modules/meta/runtime.yml +++ b/ansible_collections/f5networks/f5_modules/meta/runtime.yml @@ -1,5 +1,5 @@ --- -requires_ansible: '>=2.9' +requires_ansible: '>=2.14.0' plugin_routing: modules: bigip_device_facts: diff --git a/ansible_collections/f5networks/f5_modules/plugins/doc_fragments/f5.py b/ansible_collections/f5networks/f5_modules/plugins/doc_fragments/f5.py index 2fdd53d43..ca509f5f5 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/doc_fragments/f5.py +++ b/ansible_collections/f5networks/f5_modules/plugins/doc_fragments/f5.py @@ -18,14 +18,14 @@ options: suboptions: password: description: - - The password for the user account used to connect to the BIG-IP. + - The password for the user account used to connect to the BIG-IP or the BIG-IQ. - You may omit this option by setting the environment variable C(F5_PASSWORD). type: str required: true aliases: [ pass, pwd ] server: description: - - The BIG-IP host. + - The BIG-IP host or the BIG-IQ host. - You may omit this option by setting the environment variable C(F5_SERVER). type: str required: true @@ -37,7 +37,7 @@ options: default: 443 user: description: - - The username to connect to the BIG-IP with. This user must have + - The username to connect to the BIG-IP or the BIG-IQ. This user must have administrative privileges on the device. - You may omit this option by setting the environment variable C(F5_USER). type: str diff --git a/ansible_collections/f5networks/f5_modules/plugins/doc_fragments/f5_rest_cli.py b/ansible_collections/f5networks/f5_modules/plugins/doc_fragments/f5_rest_cli.py index 16f7b4f1c..f40bf3107 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/doc_fragments/f5_rest_cli.py +++ b/ansible_collections/f5networks/f5_modules/plugins/doc_fragments/f5_rest_cli.py @@ -51,6 +51,7 @@ options: default: yes timeout: description: + - Parameter in effect when C(transport) is set to C(rest) - Specifies the timeout in seconds for communicating with the network device for either connecting or sending commands. If the timeout is exceeded before the operation is completed, the module will error. @@ -83,6 +84,9 @@ options: notes: - For more information on using Ansible to manage F5 Networks devices see U(https://www.ansible.com/integrations/networks/f5). - Requires BIG-IP software version >= 12. + - To specify C(timeout) when C(transport) is set to C(cli), use the C(ANSIBLE_PERSISTENT_COMMAND_TIMEOUT) + environment variable or specify a C(command_timeout) in the ansible.cfg file, + see U(https://docs.ansible.com/ansible/latest/reference_appendices/config.html#persistent-command-timeout) - The F5 modules only manipulate the running configuration of the F5 product. To ensure that BIG-IP specific configuration persists to disk, be sure to include at least one task that uses the M(f5networks.f5_modules.bigip_config) module to save the running configuration. Refer to the module's documentation for diff --git a/ansible_collections/f5networks/f5_modules/plugins/doc_fragments/files.py b/ansible_collections/f5networks/f5_modules/plugins/doc_fragments/files.py new file mode 100644 index 000000000..2efbccbd1 --- /dev/null +++ b/ansible_collections/f5networks/f5_modules/plugins/doc_fragments/files.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- + +# Copyright: (c) 2014, Matt Martz <matt@sivel.net> +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +class ModuleDocFragment(object): + + # Standard files documentation fragment + + # Note: mode is overridden by the copy and template modules so if you change the description + # here, you should also change it there. + DOCUMENTATION = r''' +options: + mode: + description: + - The permissions the resulting filesystem object should have. + - For those used to I(/usr/bin/chmod) remember that modes are actually octal numbers. + You must give Ansible enough information to parse them correctly. + For consistent results, quote octal numbers (for example, V('644') or V('1777')) so Ansible receives + a string and can do its own conversion from string into number. + Adding a leading zero (for example, V(0755)) works sometimes, but can fail in loops and some other circumstances. + - Giving Ansible a number without following either of these rules will end up with a decimal + number which will have unexpected results. + - As of Ansible 1.8, the mode may be specified as a symbolic mode (for example, V(u+rwx) or + V(u=rw,g=r,o=r)). + - If O(mode) is not specified and the destination filesystem object B(does not) exist, the default C(umask) on the system will be used + when setting the mode for the newly created filesystem object. + - If O(mode) is not specified and the destination filesystem object B(does) exist, the mode of the existing filesystem object will be used. + - Specifying O(mode) is the best way to ensure filesystem objects are created with the correct permissions. + See CVE-2020-1736 for further details. + type: raw + owner: + description: + - Name of the user that should own the filesystem object, as would be fed to I(chown). + - When left unspecified, it uses the current user unless you are root, in which + case it can preserve the previous ownership. + - Specifying a numeric username will be assumed to be a user ID and not a username. Avoid numeric usernames to avoid this confusion. + + type: str + group: + description: + - Name of the group that should own the filesystem object, as would be fed to I(chown). + - When left unspecified, it uses the current group of the current user unless you are root, + in which case it can preserve the previous ownership. + type: str + seuser: + description: + - The user part of the SELinux filesystem object context. + - By default it uses the V(system) policy, where applicable. + - When set to V(_default), it will use the C(user) portion of the policy if available. + type: str + serole: + description: + - The role part of the SELinux filesystem object context. + - When set to V(_default), it will use the C(role) portion of the policy if available. + type: str + setype: + description: + - The type part of the SELinux filesystem object context. + - When set to V(_default), it will use the C(type) portion of the policy if available. + type: str + selevel: + description: + - The level part of the SELinux filesystem object context. + - This is the MLS/MCS attribute, sometimes known as the C(range). + - When set to V(_default), it will use the C(level) portion of the policy if available. + type: str + unsafe_writes: + description: + - Influence when to use atomic operation to prevent data corruption or inconsistent reads from the target filesystem object. + - By default this module uses atomic operations to prevent data corruption or inconsistent reads from the target filesystem objects, + but sometimes systems are configured or just broken in ways that prevent this. One example is docker mounted filesystem objects, + which cannot be updated atomically from inside the container and can only be written in an unsafe manner. + - This option allows Ansible to fall back to unsafe methods of updating filesystem objects when atomic operations fail + (however, it doesn't force Ansible to perform unsafe writes). + - IMPORTANT! Unsafe writes are subject to race conditions and can lead to data corruption. + type: bool + default: no + version_added: '2.2' + attributes: + description: + - The attributes the resulting filesystem object should have. + - To get supported flags look at the man page for I(chattr) on the target system. + - This string should contain the attributes in the same order as the one displayed by I(lsattr). + - The C(=) operator is assumed as default, otherwise C(+) or C(-) operators need to be included in the string. + type: str + aliases: [ attr ] + version_added: '2.3' +''' diff --git a/ansible_collections/f5networks/f5_modules/plugins/filter/markdev.yml b/ansible_collections/f5networks/f5_modules/plugins/filter/markdev.yml index cd727d24a..bfea3b30e 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/filter/markdev.yml +++ b/ansible_collections/f5networks/f5_modules/plugins/filter/markdev.yml @@ -19,5 +19,5 @@ EXAMPLES: | RETURN: _value: - description: The string with -devel suffix. + description: The string with -devel suffix. type: string diff --git a/ansible_collections/f5networks/f5_modules/plugins/lookup/bigiq_license.py b/ansible_collections/f5networks/f5_modules/plugins/lookup/bigiq_license.py index 74e5b07ef..b3c23bb26 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/lookup/bigiq_license.py +++ b/ansible_collections/f5networks/f5_modules/plugins/lookup/bigiq_license.py @@ -7,13 +7,14 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type DOCUMENTATION = """ - lookup: bigiq_license - author: Wojciech Wypior <w.wypior@f5.com> - version_added: "1.0" + name: bigiq_license + author: + - Wojciech Wypior (@wojtek0806) + version_added: "1.0.0" short_description: Select a random license key from a pool of biqiq available licenses description: - - Select a random license key from a pool of biqiq available licenses - ,Requires specifying BIGIQ license pool name and connection parameters + - Select a random license key from a pool of biqiq available licenses. + - Requires specifying BIGIQ license pool name and connection parameters. """ EXAMPLES = """ diff --git a/ansible_collections/f5networks/f5_modules/plugins/lookup/license_hopper.py b/ansible_collections/f5networks/f5_modules/plugins/lookup/license_hopper.py index e0899239b..fcbe71748 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/lookup/license_hopper.py +++ b/ansible_collections/f5networks/f5_modules/plugins/lookup/license_hopper.py @@ -5,13 +5,13 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type DOCUMENTATION = """ - lookup: Select a random license key from a file and remove it from future lookups - author: Tim Rupp <caphrim007@gmail.com> - version_added: "1.0" + name: license_hopper + author: Tim Rupp (@caphrim007) + version_added: "1.0.0" short_description: Return random license from list description: - - Select a random license key from a file and remove it from future lookups - - Can optionally remove the key if C(remove=True) is specified + - Select a random license key from a file and remove it from future lookups. + - Can optionally remove the key if C(remove=True) is specified. """ EXAMPLES = """ diff --git a/ansible_collections/f5networks/f5_modules/plugins/module_utils/version.py b/ansible_collections/f5networks/f5_modules/plugins/module_utils/version.py index d8df5f65e..00be178d3 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/module_utils/version.py +++ b/ansible_collections/f5networks/f5_modules/plugins/module_utils/version.py @@ -4,4 +4,4 @@ # GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # This collection version needs to be updated at each release -CURRENT_COLL_VERSION = "1.25.0" +CURRENT_COLL_VERSION = "1.28.0" diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_apm_acl.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_apm_acl.py index de437f6de..e0aa6180a 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_apm_acl.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_apm_acl.py @@ -199,7 +199,7 @@ EXAMPLES = r''' name: L7foo acl_order: 1 type: static - path_match_case: no + path_match_case: false entries: - action: allow host_name: 'foobar.com' @@ -221,7 +221,7 @@ EXAMPLES = r''' name: L7L4foo acl_order: 2 type: static - path_match_case: no + path_match_case: false entries: - action: allow host_name: 'foobar.com' diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_apm_network_access.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_apm_network_access.py index c5898da5e..5658e6e48 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_apm_network_access.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_apm_network_access.py @@ -152,7 +152,7 @@ EXAMPLES = r''' bigip_apm_network_access: name: foobar ip_version: ipv4 - split_tunnel: yes + split_tunnel: true snat_pool: "none" ipv4_lease_pool: leasefoo ipv4_address_space: @@ -174,8 +174,8 @@ EXAMPLES = r''' - subnet: 172.16.23.0/24 excluded_ipv4_adresses: - subnet: 10.10.2.0/24 - allow_local_subnet: yes - allow_local_dns: yes + allow_local_subnet: true + allow_local_dns: true provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_apm_policy_import.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_apm_policy_import.py index 3ae248757..3d9552369 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_apm_policy_import.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_apm_policy_import.py @@ -87,7 +87,7 @@ EXAMPLES = r''' bigip_asm_policy: name: new_apm_policy source: /root/apm_policy.tar.gz - force: yes + force: true provider: server: lb.mydomain.com user: admin diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_dos_application.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_dos_application.py index 30061723d..5ee49e6e9 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_dos_application.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_dos_application.py @@ -192,11 +192,11 @@ EXAMPLES = r''' whitelist: - Cuba heavy_urls: - auto_detect: yes + auto_detect: true latency_threshold: 1000 rtbh_duration: 3600 - rtbh_enable: yes - single_page_application: yes + rtbh_enable: true + single_page_application: true provider: password: secret server: lb.mydomain.com @@ -207,9 +207,9 @@ EXAMPLES = r''' bigip_asm_dos_application: profile: dos_foo mobile_detection: - enabled: yes - allow_any_ios_package: yes - allow_emulators: yes + enabled: true + allow_any_ios_package: true + allow_emulators: true provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_policy_fetch.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_policy_fetch.py index 29fa872cd..66c91cadd 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_policy_fetch.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_policy_fetch.py @@ -72,7 +72,7 @@ EXAMPLES = r''' name: foobar file: export_foo dest: /root/download - binary: yes + binary: true provider: password: secret server: lb.mydomain.com @@ -82,8 +82,8 @@ EXAMPLES = r''' - name: Export policy inline base64 encoded format bigip_asm_policy_fetch: name: foobar - inline: yes - base64: yes + inline: true + base64: true provider: password: secret server: lb.mydomain.com @@ -106,7 +106,7 @@ EXAMPLES = r''' name: foobar file: export_foo.xml dest: /root/download/ - compact: yes + compact: true provider: password: secret server: lb.mydomain.com @@ -117,7 +117,7 @@ EXAMPLES = r''' bigip_asm_policy_fetch: name: foobar dest: /root/download/ - binary: yes + binary: true provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_policy_import.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_policy_import.py index 6f5d4ec58..af3a3765b 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_policy_import.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_policy_import.py @@ -150,7 +150,7 @@ EXAMPLES = r''' bigip_asm_policy: name: new_asm_policy source: /root/asm_policy_new.xml - force: yes + force: true provider: server: lb.mydomain.com user: admin diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_policy_manage.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_policy_manage.py index 7d5ce59c9..ff21d8969 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_policy_manage.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_asm_policy_manage.py @@ -126,7 +126,7 @@ EXAMPLES = r''' - name: Create blank ASM policy and activate bigip_asm_policy_manage: name: new_blank_policy - active: yes + active: true state: present provider: server: lb.mydomain.com @@ -137,7 +137,7 @@ EXAMPLES = r''' - name: Activate ASM policy bigip_asm_policy_manage: name: inactive_policy - active: yes + active: true state: present provider: server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_config.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_config.py index 69d140ba1..7d42b7aa3 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_config.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_config.py @@ -65,7 +65,7 @@ author: EXAMPLES = r''' - name: Save the running configuration of the BIG-IP bigip_config: - save: yes + save: true provider: server: lb.mydomain.com password: secret @@ -74,8 +74,8 @@ EXAMPLES = r''' - name: Reset the BIG-IP configuration, for example, to RMA the device bigip_config: - reset: yes - save: yes + reset: true + save: true provider: server: lb.mydomain.com password: secret diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_configsync_action.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_configsync_action.py index 2acd3015f..3667d4625 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_configsync_action.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_configsync_action.py @@ -55,7 +55,7 @@ EXAMPLES = r''' - name: Sync configuration from device to group bigip_configsync_action: device_group: foo-group - sync_device_to_group: yes + sync_device_to_group: true provider: server: lb.mydomain.com user: admin @@ -65,7 +65,7 @@ EXAMPLES = r''' - name: Sync configuration from most recent device to the current host bigip_configsync_action: device_group: foo-group - sync_group_to_device: yes + sync_group_to_device: true provider: server: lb.mydomain.com user: admin @@ -75,7 +75,7 @@ EXAMPLES = r''' - name: Perform an initial sync of a device to a new device group bigip_configsync_action: device_group: new-device-group - sync_device_to_group: yes + sync_device_to_group: true provider: server: lb.mydomain.com user: admin diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_data_group.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_data_group.py index 5b7b444ee..cfd621d6c 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_data_group.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_data_group.py @@ -159,7 +159,7 @@ EXAMPLES = r''' - name: Create a data group of addresses bigip_data_group: name: foo - internal: yes + internal: true records: - key: 0.0.0.0/32 value: External_NAT @@ -175,7 +175,7 @@ EXAMPLES = r''' - name: Create a data group of strings bigip_data_group: name: foo - internal: yes + internal: true records: - key: caddy value: "" @@ -204,7 +204,7 @@ EXAMPLES = r''' - name: Update an existing internal data group of strings bigip_data_group: name: foo - internal: yes + internal: true records: - key: caddy value: "" @@ -1459,7 +1459,7 @@ class ArgumentSpec(object): type='list', elements='raw', options=dict( - key=dict(required=True), + key=dict(required=True, no_log=True), value=dict(type='raw') ) ), diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_auth.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_auth.py index b42f46271..8a089d200 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_auth.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_auth.py @@ -170,7 +170,7 @@ EXAMPLES = r''' - 10.10.10.11 service_name: ppp state: present - use_for_auth: yes + use_for_auth: true provider: password: secret server: lb.mydomain.com @@ -188,7 +188,7 @@ EXAMPLES = r''' port: 1234 - 10.10.10.11 service_name: ppp - use_for_auth: yes + use_for_auth: true state: present provider: password: secret diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_auth_ldap.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_auth_ldap.py index 8706f5315..3a638b3c1 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_auth_ldap.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_auth_ldap.py @@ -872,7 +872,7 @@ class ArgumentSpec(object): choices=['yes', 'no', 'start-tls'] ), ca_cert=dict(aliases=['ssl_ca_cert']), - client_key=dict(aliases=['ssl_client_key']), + client_key=dict(aliases=['ssl_client_key'], no_log=True), client_cert=dict(aliases=['ssl_client_cert']), validate_certs=dict(type='bool', aliases=['ssl_check_peer']), login_ldap_attr=dict(), diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_auth_radius.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_auth_radius.py index f147b7da3..2096d8ddc 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_auth_radius.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_auth_radius.py @@ -86,9 +86,9 @@ EXAMPLES = r''' - "ansible_test2" retries: 3 service_type: authenticate-only - accounting_bug: no - use_for_auth: yes - fallback_to_local: yes + accounting_bug: false + use_for_auth: true + fallback_to_local: true state: present provider: password: secret @@ -100,7 +100,7 @@ EXAMPLES = r''' bigip_device_auth_radius: retries: 5 service_type: administrative - accounting_bug: yes + accounting_bug: true state: present provider: password: secret diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_certificate.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_certificate.py index 0e2562e7a..556f5af59 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_certificate.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_certificate.py @@ -135,7 +135,7 @@ EXAMPLES = r''' - name: Force update not expired certificate bigip_device_certificate: days_valid: 365 - force: yes + force: true provider: password: secret server: lb.mydomain.com @@ -147,7 +147,7 @@ EXAMPLES = r''' - name: Create a new certificate to replace expired certificate bigip_device_certificate: days_valid: 365 - new_cert: yes + new_cert: true issuer: country: US state: WA @@ -165,8 +165,8 @@ EXAMPLES = r''' days_valid: 365 cert_name: custom.crt key_name: custom.key - new_cert: yes - force: yes + new_cert: true + force: true issuer: country: US state: WA @@ -521,6 +521,8 @@ class ModuleManager(object): result = dict() command = 'openssl x509 -in /config/httpd/conf/ssl.crt/{0} -dates -issuer -noout'.format(self.want.cert_name) rc, out, err = exec_command(self.module, command) + if rc != 0: + raise F5ModuleError(err) if rc == 0: result['epoch'] = self._parse_cert_date(out) return ApiParameters(params=result) diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_group.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_group.py index 1fc8de948..022efd3e0 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_group.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_group.py @@ -121,7 +121,7 @@ EXAMPLES = r''' - name: Create a sync-only device group with auto-sync enabled bigip_device_group: name: foo-group - auto_sync: yes + auto_sync: true provider: password: secret server: lb.mydomain.com @@ -131,8 +131,8 @@ EXAMPLES = r''' - name: Create a sync-only device group with auto-sync and asm-sync enabled bigip_device_group: name: foo-group - auto_sync: yes - asm_sync: yes + auto_sync: true + asm_sync: true provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_ha_group.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_ha_group.py index 7152612bf..11093ee77 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_ha_group.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_ha_group.py @@ -130,7 +130,7 @@ EXAMPLES = r''' name: foo_ha description: empty_foo active_bonus: 20 - enable: no + enable: false provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_httpd.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_httpd.py index 87d8c69ff..f4f4a2e11 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_httpd.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_httpd.py @@ -131,7 +131,7 @@ EXAMPLES = r''' - name: Set the validate IP settings bigip_device_httpd: - auth_pam_validate_ip: on + auth_pam_validate_ip: false provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_info.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_info.py index b897cfbcd..6753634a7 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_info.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_info.py @@ -7579,7 +7579,7 @@ vlans: - Specifies that only connections that have a return route in the routing table are accepted. returned: queried type: bool - sample: yes + sample: true true_mac_address: description: - Media access control (MAC) address for the lowest-numbered interface assigned to this VLAN. diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_license.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_license.py index 87c34de14..e34152bd7 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_license.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_license.py @@ -899,10 +899,11 @@ class ArgumentSpec(object): def __init__(self): self.supports_check_mode = True argument_spec = dict( - license_key=dict(), + license_key=dict(no_log=True), addon_keys=dict( type='list', elements='str', + no_log=True ), license_server=dict( default='activate.f5.com' diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_traffic_group.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_traffic_group.py index f884f1023..3a52e23b0 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_traffic_group.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_device_traffic_group.py @@ -121,7 +121,7 @@ EXAMPLES = r''' ha_order: - /Common/bigip1.lab.local - /Common/bigip2.lab.local - auto_failback: yes + auto_failback: true auto_failback_time: 40 provider: user: admin @@ -135,7 +135,7 @@ EXAMPLES = r''' state: present ha_group: foo_HA_grp ha_order: "" - auto_failback: no + auto_failback: false provider: user: admin password: secret diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_dns_cache_resolver.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_dns_cache_resolver.py index 8dcc6b86b..d38f9e448 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_dns_cache_resolver.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_dns_cache_resolver.py @@ -83,7 +83,7 @@ EXAMPLES = r''' - name: Create a DNS resolver cache bigip_dns_cache: name: foo - answer_default_zones: yes + answer_default_zones: true forward_zones: - name: foo.bar.com nameservers: diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_dns_nameserver.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_dns_nameserver.py index 9da3370c2..9d23146ca 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_dns_nameserver.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_dns_nameserver.py @@ -426,7 +426,7 @@ class ArgumentSpec(object): address=dict(), service_port=dict(), route_domain=dict(), - tsig_key=dict(), + tsig_key=dict(no_log=True), state=dict( default='present', choices=['present', 'absent'] diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_dns_zone.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_dns_zone.py index ab6c155fc..41eb223ff 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_dns_zone.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_dns_zone.py @@ -106,13 +106,13 @@ EXAMPLES = r''' bigip_dns_zone: name: zone.foo.com dns_express: - enabled: yes + enabled: true server: dns-lab allow_notify_from: - 192.168.39.10 notify_action: consume - verify_tsig: no - response_policy: no + verify_tsig: false + response_policy: false provider: password: secret server: lb.mydomain.com @@ -123,13 +123,13 @@ EXAMPLES = r''' bigip_dns_zone: name: zone.foo.com dns_express: - enabled: no + enabled: false server: foo1.server.com allow_notify_from: - 192.168.39.10 notify_action: bypass - verify_tsig: no - response_policy: no + verify_tsig: false + response_policy: false provider: password: secret server: lb.mydomain.com @@ -200,7 +200,6 @@ EXAMPLES = r''' server: lb.mydomain.com user: admin delegate_to: localhost - ''' RETURN = r''' @@ -662,7 +661,7 @@ class ArgumentSpec(object): type='list', elements='str', ), - tsig_server_key=dict(), + tsig_server_key=dict(no_log=True), partition=dict( default='Common', fallback=(env_fallback, ['F5_PARTITION']) diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_file_copy.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_file_copy.py index a84c54a0a..d200bfdf1 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_file_copy.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_file_copy.py @@ -91,7 +91,7 @@ EXAMPLES = r''' find: paths: /var/tmp/project patterns: "^.*?\\.(?:html|?:css|?:js)$" - use_regex: yes + use_regex: true register: f - name: Upload a directory of files as a set of iFiles diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_address_list.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_address_list.py index 5bb375f64..7f43701e9 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_address_list.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_address_list.py @@ -44,9 +44,6 @@ options: - Valid country codes can be found here https://countrycode.org/. type: str required: True - choices: - - Any valid 2 character ISO country code. - - Any valid country name. region: description: - Region name of the country to use. diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_log_profile.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_log_profile.py index 0f88c4bdc..c2a68dc92 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_log_profile.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_log_profile.py @@ -143,8 +143,8 @@ EXAMPLES = r''' name: barbaz ip_intelligence: rate_limit: 400000 - log_translation_fields: yes - log_rtbh: yes + log_translation_fields: true + log_rtbh: true log_publisher: "/foobar/non-local-db" port_misuse: log_publisher: "" diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_log_profile_network.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_log_profile_network.py index 39fc59d05..6f2fde7fb 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_log_profile_network.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_log_profile_network.py @@ -49,7 +49,7 @@ options: - This option sets rate limits for the logging of packets that match ACL rules configured with an "accept" or "accept decisively" action. - This option is effective only if logging of this message type is enabled. - type: int + type: str log_matches_drop_rule: description: - Modifies log settings for ACL rules configured with a drop action. @@ -65,7 +65,7 @@ options: - This option sets rate limits for the logging of packets that match ACL rules configured with a drop action. - This option is effective only if logging of this message type is enabled. - type: int + type: str log_matches_reject_rule: description: - Modifies log settings for ACL rules configured with a reject action. @@ -81,7 +81,7 @@ options: - This option sets rate limits for the logging of packets that match ACL rules configured with a reject action. - This option is effective only if logging of this message type is enabled. - type: int + type: str log_ip_errors: description: - Modifies log settings for logging of IP error packets. @@ -95,7 +95,7 @@ options: description: - This option sets rate limits for the logging of IP error packets. - This option is effective only if logging of this message type is enabled. - type: int + type: str log_tcp_errors: description: - Modifies log settings for the logging of TCP error packets. @@ -109,7 +109,7 @@ options: description: - This option sets rate limits for the logging of TCP error packets. - This option is effective only if logging of this message type is enabled. - type: int + type: str log_tcp_events: description: - Modifies the log settings for logging of TCP events on the client side. @@ -124,7 +124,7 @@ options: description: - This option sets rate limits for the logging of TCP events on the client side. - This option is effective only if logging of this message type is enabled. - type: int + type: str log_translation_fields: description: - This option enables or disables the logging of translated (i.e server side) fields in ACL @@ -228,14 +228,14 @@ EXAMPLES = r''' - name: Add network settings to log profile bigip_firewall_log_profile_network: profile_name: barbaz - rate_limit: 150000 + rate_limit: "150000" log_publisher: local-db-pub log_tcp_errors: - enabled: yes - rate_limit: 10000 + enabled: true + rate_limit: "10000" log_tcp_events: - enabled: yes - rate_limit: 40000 + enabled: true + rate_limit: "40000" log_storage_format: "field-list" log_message_fields: - vlan @@ -265,12 +265,12 @@ EXAMPLES = r''' profile_name: "global-network" log_publisher: "/foobar/log1" log_ip_errors: - enabled: yes - rate_limit: 60000 + enabled: true + rate_limit: "60000" log_matches_reject_rule: - enabled: yes - rate_limit: 2000 - log_translation_fields: yes + enabled: true + rate_limit: "2000" + log_translation_fields: true log_storage_format: "field-list" log_format_delimiter: '.' log_message_fields: diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_rule.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_rule.py index 92c7e89c8..e3311004b 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_rule.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_firewall_rule.py @@ -286,7 +286,7 @@ EXAMPLES = r''' - port_range: 80-443 irule: irule1 action: accept - logging: yes + logging: true provider: password: secret server: lb.mydomain.com @@ -302,7 +302,7 @@ EXAMPLES = r''' source: - country: US action: drop - logging: yes + logging: true provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_dns_listener.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_dns_listener.py index 2a24df497..f9a6d1dd0 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_dns_listener.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_dns_listener.py @@ -146,8 +146,8 @@ EXAMPLES = r''' user: admin source_port: preserve state: present - translate_address: yes - translate_port: yes + translate_address: true + translate_port: true delegate_to: localhost - name: 'Disable a DNS Listener' diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_global.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_global.py index d001b88a9..4a156469a 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_global.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_global.py @@ -43,9 +43,9 @@ author: EXAMPLES = r''' - name: Configure synchronization settings bigip_gtm_global: - synchronization: yes + synchronization: true synchronization_group_name: my-group - synchronize_zone_files: yes + synchronize_zone_files: true state: present provider: user: admin diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_bigip.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_bigip.py index 0c232f811..94d6c549a 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_bigip.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_bigip.py @@ -347,6 +347,13 @@ class Changes(Parameters): class UsableChanges(Changes): @property + def destination(self): + if self.ip is None and self.port is None: + return None + destination = '{0}:{1}'.format(self.ip, self.port) + return destination + + @property def ignore_down_response(self): if self._values['ignore_down_response']: return 'enabled' diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_firepass.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_firepass.py index 5a5047cc6..2d7c7e91c 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_firepass.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_firepass.py @@ -425,6 +425,13 @@ class Changes(Parameters): class UsableChanges(Changes): @property + def destination(self): + if self.ip is None and self.port is None: + return None + destination = '{0}:{1}'.format(self.ip, self.port) + return destination + + @property def ignore_down_response(self): if self._values['ignore_down_response'] is None: return None diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_http.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_http.py index d841705d7..a3aa61ac1 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_http.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_http.py @@ -376,7 +376,7 @@ class ModuleParameters(Parameters): return int(self._values['timeout']) @property - def ip(self): # lgtm [py/similar-function] + def ip(self): if self._values['ip'] is None: return None if self._values['ip'] in ['*', '0.0.0.0']: @@ -441,6 +441,13 @@ class Changes(Parameters): class UsableChanges(Changes): @property + def destination(self): + if self.ip is None and self.port is None: + return None + destination = '{0}:{1}'.format(self.ip, self.port) + return destination + + @property def transparent(self): if self._values['transparent'] is None: return None diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_https.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_https.py index fac85d931..393ae0b13 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_https.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_https.py @@ -528,6 +528,13 @@ class Changes(Parameters): class UsableChanges(Changes): @property + def destination(self): + if self.ip is None and self.port is None: + return None + destination = '{0}:{1}'.format(self.ip, self.port) + return destination + + @property def transparent(self): if self._values['transparent'] is None: return None @@ -934,7 +941,7 @@ class ArgumentSpec(object): cipher_list=dict(), compatibility=dict(type='bool'), client_cert=dict(), - client_key=dict(), + client_key=dict(no_log=True), update_password=dict( default='always', choices=['always', 'on_create'], diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_tcp.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_tcp.py index 05a29c52a..6dc5f15d5 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_tcp.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_tcp.py @@ -415,6 +415,13 @@ class Changes(Parameters): class UsableChanges(Changes): @property + def destination(self): + if self.ip is None and self.port is None: + return None + destination = '{0}:{1}'.format(self.ip, self.port) + return destination + + @property def transparent(self): if self._values['transparent'] is None: return None diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_tcp_half_open.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_tcp_half_open.py index b8f1384ad..ae46f13f4 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_tcp_half_open.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_monitor_tcp_half_open.py @@ -362,6 +362,13 @@ class Changes(Parameters): class UsableChanges(Changes): @property + def destination(self): + if self.ip is None and self.port is None: + return None + destination = '{0}:{1}'.format(self.ip, self.port) + return destination + + @property def transparent(self): if self._values['transparent']: return 'enabled' diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_pool_member.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_pool_member.py index 9ad3d293a..0f6bb894e 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_pool_member.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_pool_member.py @@ -20,6 +20,108 @@ description: settings. version_added: "1.0.0" options: + aggregate: + description: + - List of GTM pool member definitions to be created, modified, or removed. + - When using C(aggregates), if one of the aggregate definitions is invalid, the aggregate run will fail, + indicating the error it last encountered. + - The module will C(NOT) rollback any changes it has made prior to encountering the error. + - The module also will not indicate what changes were made prior to failure, therefore we strongly advise + you run the module in check mode to make basic validation, prior to module execution. + type: list + elements: dict + suboptions: + virtual_server: + description: + - Specifies the name of the GTM virtual server which is assigned to the specified + C(server). + type: str + server_name: + description: + - Specifies the GTM server which contains the C(virtual_server). + type: str + member_order: + description: + - Specifies the order in which the member will appear in the pool. + - The system uses this number with load balancing methods that involve prioritizing + pool members, such as the Ratio load balancing method. + type: int + monitor: + description: + - Specifies the monitor assigned to this pool member. + - Pool members only support a single monitor. + - If the C(port) of the C(gtm_virtual_server) is C(*), the accepted values of this + parameter will be affected. + - If this parameter is not specified when creating a new pool member, the default + of C(default) will be used. + - To remove the monitor from the pool member, use the value C(none). + type: str + ratio: + description: + - Specifies the weight of the pool member for load balancing purposes. + type: int + description: + description: + - The description of the pool member. + type: str + limits: + description: + - Specifies resource thresholds or limit requirements at the pool member level. + - When you enable one or more limit settings, the system then uses that data to take + members in and out of service. + - You can define limits for any or all of the limit settings. However, when a + member does not meet the resource threshold limit requirement, the system marks + the member as unavailable and directs load balancing traffic to another resource. + type: dict + suboptions: + bits_enabled: + description: + - Whether or not the bits limit is enabled. + type: bool + packets_enabled: + description: + - Whether or not the packets limit is enabled. + type: bool + connections_enabled: + description: + - Whether or not the current connections limit is enabled. + type: bool + bits_limit: + description: + - Specifies the maximum allowable data throughput rate + for the member, in bits per second. + type: int + packets_limit: + description: + - Specifies the maximum allowable data transfer rate for the member, + in packets per second. + type: int + connections_limit: + description: + - Specifies the maximum number of concurrent connections, combined, for all of + the members. + type: int + state: + description: + - Pool member state. When C(present), ensures the pool member is + created and enabled. When C(absent), ensures the pool member is + removed from the system. When C(enabled) or C(disabled), ensures + the pool member is enabled or disabled (respectively) on the remote + device. + type: str + choices: + - present + - absent + - enabled + - disabled + default: present + partition: + description: + - Device partition to manage resources on. + type: str + default: Common + aliases: + - members virtual_server: description: - Specifies the name of the GTM virtual server which is assigned to the specified @@ -29,37 +131,11 @@ options: description: - Specifies the GTM server which contains the C(virtual_server). type: str - type: - description: - - The type of GTM pool that the member is in. - type: str - required: True - choices: - - a - - aaaa - - cname - - mx - - naptr - - srv - pool: - description: - - Name of the GTM pool. - - For pools created on different partitions, you must specify partition of the pool in the full path format, - for example, C(/FooBar/pool_name). - type: str - required: True - partition: - description: - - Device partition to manage resources on. - type: str - default: Common member_order: description: - Specifies the order in which the member will appear in the pool. - The system uses this number with load balancing methods that involve prioritizing pool members, such as the Ratio load balancing method. - - When creating a new member using this module, if the C(member_order) parameter - is not specified, it will default to C(0) (first member in the pool). type: int monitor: description: @@ -70,8 +146,6 @@ options: - If this parameter is not specified when creating a new pool member, the default of C(default) will be used. - To remove the monitor from the pool member, use the value C(none). - - For pool members created on different partitions, you can also specify the full - path to the Common monitor. For example, C(/Common/tcp). type: str ratio: description: @@ -81,27 +155,6 @@ options: description: - The description of the pool member. type: str - aggregate: - description: - - List of GTM pool member definitions to be created, modified, or removed. - - When using C(aggregates), if one of the aggregate definitions is invalid, the aggregate run will fail, - indicating the error it last encountered. - - The module will C(NOT) rollback any changes it has made prior to encountering the error. - - The module also will not indicate what changes were made prior to failure, therefore we strongly advise - you run the module in check mode to make basic validation, prior to module execution. - type: list - elements: dict - aliases: - - members - replace_all_with: - description: - - Removes members not defined in the C(aggregate) parameter. - - This operation is all or none, meaning it will stop if there are some pool members - that cannot be removed. - default: false - type: bool - aliases: - - purge limits: description: - Specifies resource thresholds or limit requirements at the pool member level. @@ -110,44 +163,68 @@ options: - You can define limits for any or all of the limit settings. However, when a member does not meet the resource threshold limit requirement, the system marks the member as unavailable and directs load balancing traffic to another resource. + type: dict suboptions: bits_enabled: description: - Whether or not the bits limit is enabled. - - This parameter allows you to switch on or off the effect of the limit. type: bool packets_enabled: description: - Whether or not the packets limit is enabled. - - This parameter allows you to switch on or off the effect of the limit. type: bool connections_enabled: description: - Whether or not the current connections limit is enabled. - - This parameter allows you to switch on or off the effect of the limit. type: bool bits_limit: description: - Specifies the maximum allowable data throughput rate for the member, in bits per second. - - If the network traffic volume exceeds this limit, the system marks the - member as unavailable. type: int packets_limit: description: - Specifies the maximum allowable data transfer rate for the member, in packets per second. - - If the network traffic volume exceeds this limit, the system marks the - member as unavailable. type: int connections_limit: description: - Specifies the maximum number of concurrent connections, combined, for all of the members. - - If the connections exceed this limit, the system marks the server as - unavailable. type: int - type: dict + pool: + description: + - Name of the GTM pool. + - For pools created on different partitions, you must specify partition of the pool in the full path format, + for example, C(/FooBar/pool_name). + type: str + required: True + type: + description: + - The type of GTM pool that the member is in. + type: str + required: True + choices: + - a + - aaaa + - cname + - mx + - naptr + - srv + replace_all_with: + description: + - Removes members not defined in the C(aggregate) parameter. + - This operation is all or none, meaning it will stop if there are some pool members + that cannot be removed. + type: bool + default: false + aliases: + - purge + partition: + description: + - Device partition to manage resources on. + type: str + default: Common state: description: - Pool member state. When C(present), ensures the pool member is @@ -155,13 +232,6 @@ options: removed from the system. When C(enabled) or C(disabled), ensures the pool member is enabled or disabled (respectively) on the remote device. - - We recommend you use the C(members) parameter of the C(bigip_gtm_pool) - module when adding and removing members, as it provides an easier way of - specifying order. If this is not possible, the C(state) parameter here - should be used. - - Remember that the order of the members will be affected if you add or remove them - using this method. To some extent, this can be controlled using the C(member_order) - parameter. type: str choices: - present @@ -247,7 +317,7 @@ EXAMPLES = r''' partition: Common description: web server3 member_order: 2 - replace_all_with: yes + replace_all_with: true provider: server: lb.mydomain.com user: admin @@ -1012,6 +1082,8 @@ class ArgumentSpec(object): # remove default in aggregate spec, to handle common arguments remove_default_spec(aggregate_spec) + aggregate_spec["state"].update(default="present") + aggregate_spec["partition"].update(default="Common") self.argument_spec = dict( aggregate=dict( diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_server.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_server.py index 0a2a9d5f3..b54371670 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_server.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_server.py @@ -407,7 +407,7 @@ packets_enabled: description: Whether the packets limit is enabled. returned: changed type: bool - sample: yes + sample: true packets_limit: description: The new packets_limit limit. returned: changed diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_topology_record.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_topology_record.py index c33995381..c1bb89d40 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_topology_record.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_topology_record.py @@ -202,10 +202,10 @@ EXAMPLES = r''' bigip_gtm_topology_record: source: - region: Baz - - negate: yes + - negate: true destination: - datacenter: Baz-DC - - negate: yes + - negate: true provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_topology_region.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_topology_region.py index 4ac232f0c..bfea370e0 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_topology_region.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_topology_region.py @@ -119,7 +119,7 @@ EXAMPLES = r''' name: foobar region_members: - country: CN - negate: yes + negate: true - datacenter: baz provider: password: secret @@ -152,7 +152,6 @@ region_members: type: list sample: [{"continent": "EU"}, {"country": "PL"}] ''' - import copy from datetime import datetime @@ -195,9 +194,15 @@ class ApiParameters(Parameters): members = self._values['region_members'] if members is None: return None - result = [member['name'] for member in members] + result = [self._replace_quotes(member['name']) for member in members] return result + @staticmethod + def _replace_quotes(value): + # we need to remove the double quotes from the items on the list so that comparison engine + # does not return change + return value.replace('"', '') + class ModuleParameters(Parameters): countries = { @@ -502,13 +507,6 @@ class ModuleParameters(Parameters): result.append(item) return result - def _flatten_negate(self, item): - result = flatten_boolean(item['negate']) - item.pop('negate') - if result == 'yes': - return 'not' - return None - def _change_value(self, key, value): if key in ['region', 'pool', 'datacenter']: return key, fq_name(self.partition, value) @@ -524,7 +522,8 @@ class ModuleParameters(Parameters): return key, self._test_subnet(value) return key, value - def _test_subnet(self, item): + @staticmethod + def _test_subnet(item): if item is None: return None if is_valid_ip_network(item): @@ -533,6 +532,14 @@ class ModuleParameters(Parameters): "Specified 'subnet' is not a valid subnet." ) + @staticmethod + def _flatten_negate(item): + result = flatten_boolean(item['negate']) + item.pop('negate') + if result == 'yes': + return 'not' + return None + class Changes(Parameters): def to_return(self): @@ -554,7 +561,17 @@ class UsableChanges(Changes): return None if not members: return 'none' - return ' '.join(members) + result = [self.escape_spaces(member) for member in members] + return ' '.join(result) + + @staticmethod + def escape_spaces(item): + # this method is needed as the API has problems in handling spaces and using just double quotes causes + # api to complain about quote imbalance + if item.startswith('state ') and ' ' in item[len('state '):]: + return item[:len('state ')] + '\\"{0}\\"'.format(item[len('state '):]) + else: + return item class ReportableChanges(Changes): @@ -733,6 +750,7 @@ class ModuleManager(object): self.client.provider['server'], self.client.provider['server_port'] ) + resp = self.client.api.post(uri, json=payload) try: response = resp.json() diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_wide_ip.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_wide_ip.py index 92f03b621..73173c9a9 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_wide_ip.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_gtm_wide_ip.py @@ -222,7 +222,7 @@ EXAMPLES = r''' type: a pools: - name: pool1 - persistence: yes + persistence: true persist_cidr_ipv4: 24 persist_cidr_ipv6: 120 persistence_ttl: 3500 diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_iapp_service.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_iapp_service.py index b59d2f59e..b3d90abd3 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_iapp_service.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_iapp_service.py @@ -157,7 +157,7 @@ EXAMPLES = r''' bigip_iapp_service: name: tests template: web_frontends - force: yes + force: true state: present parameters: variables: @@ -237,9 +237,9 @@ EXAMPLES = r''' template: f5.http parameters: "{{ lookup('file', 'f5.http.parameters.json') }}" metadata: - - persist: yes + - persist: true name: data 1 - - persist: yes + - persist: true name: data 2 state: present provider: diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_iapp_template.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_iapp_template.py index fa0b03dc4..098864976 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_iapp_template.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_iapp_template.py @@ -91,7 +91,7 @@ EXAMPLES = r''' - name: Update a template in place that has existing services created from it. bigip_iapp_template: content: "{{ lookup('template', 'iapp-new.tmpl') }}" - force: yes + force: true state: present provider: user: admin diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ike_peer.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ike_peer.py index d174a92bd..ab285840b 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ike_peer.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ike_peer.py @@ -769,7 +769,7 @@ class ArgumentSpec(object): ] ), phase1_cert=dict(), - phase1_key=dict(), + phase1_key=dict(no_log=True), phase1_verify_peer_cert=dict(type='bool'), update_password=dict( default='always', diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_imish_config.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_imish_config.py index 962911d34..d728f753d 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_imish_config.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_imish_config.py @@ -20,7 +20,7 @@ options: description: - Route domain on which to manage the BGP configuration. type: str - default: 0 + default: "0" lines: description: - The ordered set of commands that should be configured in the @@ -211,7 +211,9 @@ options: version_added: "1.2.0" notes: - Abbreviated commands are NOT idempotent -extends_documentation_fragment: f5networks.f5_modules.f5 +extends_documentation_fragment: + - f5networks.f5_modules.f5 + - ansible.builtin.files author: - Tim Rupp (@caphrim007) - Wojciech Wypior (@wojtek0806) @@ -284,7 +286,7 @@ EXAMPLES = r''' - name: configurable backup path bigip_imish_config: lines: bfd slow-timer 2000 - backup: yes + backup: true provider: user: admin password: secret @@ -775,7 +777,7 @@ class ArgumentSpec(object): dir_path=dict(type='path') ) argument_spec = dict( - route_domain=dict(default=0), + route_domain=dict(default="0"), src=dict(type='path'), lines=dict( type='list', diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_interface.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_interface.py index 9f791fa65..eff449c2c 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_interface.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_interface.py @@ -266,18 +266,18 @@ EXAMPLES = r''' - name: Update Interface Settings bigip_interface: name: 1.1 - stp: yes - stp_auto_edge_port: no - stp_edge_port: yes + stp: true + stp_auto_edge_port: false + stp_edge_port: true stp_link_type: shared description: my description flow_control: tx lldp_admin: txrx lldp_tlvmap: 8 - force_gigabit_fiber: no + force_gigabit_fiber: false sflow: - poll_interval: 10 - - poll_interval_global: no + - poll_interval_global: false provider: password: secret server: lb.mydomain.com @@ -287,7 +287,7 @@ EXAMPLES = r''' - name: Disable Interface bigip_interface: name: 1.1 - enabled: no + enabled: false provider: password: secret server: lb.mydomain.com @@ -299,7 +299,7 @@ EXAMPLES = r''' name: 1.1 sflow: - poll_interval: 0 - - poll_interval_global: yes + - poll_interval_global: true provider: password: secret server: lb.mydomain.com @@ -382,7 +382,7 @@ stp_auto_edge_port: description: Sets STP automatic edge port detection for the interface. returned: changed type: bool - sample: yes + sample: true stp_edge_port: description: Specifies whether the interface connects to an end station instead of another spanning tree bridge. returned: changed diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_lx_package.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_lx_package.py index 6f58097dd..f42b0e5d0 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_lx_package.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_lx_package.py @@ -88,7 +88,7 @@ EXAMPLES = r''' - name: Install AS3 and don't delete package file bigip_lx_package: package: f5-appsvcs-3.5.0-3.noarch.rpm - retain_package_file: yes + retain_package_file: true provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_message_routing_peer.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_message_routing_peer.py index b56847daa..81cbe890f 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_message_routing_peer.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_message_routing_peer.py @@ -115,7 +115,7 @@ EXAMPLES = r''' partition: baz transport_config: foovirtual ratio: 10 - auto_init: yes + auto_init: true provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_message_routing_protocol.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_message_routing_protocol.py index 9fac0371e..a9a142fa4 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_message_routing_protocol.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_message_routing_protocol.py @@ -84,7 +84,7 @@ EXAMPLES = r''' bigip_message_routing_protocol: name: foo description: 'This is parser' - no_response: yes + no_response: true provider: password: secret server: lb.mydomain.com @@ -94,7 +94,7 @@ EXAMPLES = r''' - name: Modify a generic parser bigip_message_routing_protocol: name: foo - no_response: no + no_response: false max_egress_buffer: 10000 max_msg_size: 2000 provider: diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_message_routing_router.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_message_routing_router.py index 7dad08545..94524b0a8 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_message_routing_router.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_message_routing_router.py @@ -122,7 +122,7 @@ EXAMPLES = r''' bigip_message_routing_router: name: foo max_retries: 10 - ignore_client_port: yes + ignore_client_port: true routes: - /Common/route1 - /Common/route2 @@ -135,8 +135,8 @@ EXAMPLES = r''' - name: Modify a generic router profile bigip_message_routing_router: name: foo - ignore_client_port: no - mirror: yes + ignore_client_port: false + mirror: true mirrored_msg_sweeper_interval: 4000 traffic_group: /Common/traffic-group-2 provider: diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_monitor_dns.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_monitor_dns.py index 773825904..ff7ffa006 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_monitor_dns.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_monitor_dns.py @@ -237,7 +237,7 @@ EXAMPLES = r''' query_name: localhost query_type: aaaa up_interval: 5 - adaptive: no + adaptive: false state: present provider: user: admin diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_monitor_gateway_icmp.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_monitor_gateway_icmp.py index 7e4c2c801..e5a01e393 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_monitor_gateway_icmp.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_monitor_gateway_icmp.py @@ -167,7 +167,7 @@ EXAMPLES = r''' - name: Create a monitor bigip_monitor_gateway_icmp: name: gw1 - adaptive: no + adaptive: false interval: 1 time_until_up: 0 timeout: 3 diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_monitor_icmp.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_monitor_icmp.py index 03fa58106..4dfe1a7c2 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_monitor_icmp.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_monitor_icmp.py @@ -172,7 +172,7 @@ EXAMPLES = r''' - name: Create an ICMP monitor bigip_monitor_icmp: name: icmp1 - adaptive: no + adaptive: false interval: 1 time_until_up: 0 timeout: 3 @@ -185,7 +185,7 @@ EXAMPLES = r''' - name: Update an ICMP monitor bigip_monitor_icmp: name: icmp1 - manual_resume: yes + manual_resume: true interval: 5 provider: password: secret diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_password_policy.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_password_policy.py index a649ad9bc..d35cf0134 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_password_policy.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_password_policy.py @@ -396,7 +396,7 @@ class ArgumentSpec(object): max_login_failures=dict(type='int'), min_duration=dict(type='int'), min_length=dict(type='int'), - password_memory=dict(type='int'), + password_memory=dict(type='int', no_log=True), policy_enforcement=dict(type='bool'), required_lowercase=dict(type='int'), required_numeric=dict(type='int'), diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_policy.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_policy.py index 9e35810e5..b7f99f15f 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_policy.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_policy.py @@ -105,8 +105,8 @@ EXAMPLES = r''' path_ends_with: - baz actions: - - forward: yes - select: yes + - forward: true + select: true pool: pool-svrs provider: server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_policy_rule.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_policy_rule.py index e366e13a7..9c7ce9c2f 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_policy_rule.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_policy_rule.py @@ -24,7 +24,7 @@ options: required: True policy: description: - - The name of the policy you want to associate this rule with. + - The name of the policy with which you want to associate this rule. type: str required: True replace_with: @@ -42,7 +42,7 @@ options: - If there are rules with the same rule order number, the device uses rule names to determine how the rules are ordered. - The lower the number, the lower the rule is in the general order, with the lowest number C(0) being the - topmost one. + topmost rule. - Valid range of values is between C(0) and C(4294967295) inclusive. type: int version_added: "1.10.0" @@ -342,10 +342,10 @@ options: conditions: description: - A list of attributes that describe the condition. - - See suboptions for details on how to construct each list entry. + - See sub-options for details on how to construct each list entry. - The ordering of this list is important, the module ensures the order is kept when modifying the task. - - The suboption options below are not required for all condition types, + - The following sub-options are not required for all condition types, read the description for more details. - These conditions can be specified in any order. Despite the fact they are in a list, the order in the list does not matter to the BIG-IP. @@ -376,7 +376,7 @@ options: - tcp path_begins_with_any: description: - - A list of strings of characters the HTTP URI should start with. + - A list of strings of characters with which the HTTP URI should begin. - This parameter is only valid with the C(http_uri) type. type: list elements: str @@ -415,27 +415,27 @@ options: version_added: "1.23.0" host_begins_with_any: description: - - A list of strings of characters the HTTP Host should start with. + - A list of strings of characters with which the HTTP Host should begin. - This parameter is only valid with the C(http_host) type. type: list elements: str host_begins_not_with_any: description: - - A list of strings of characters the HTTP Host should not start with. + - A list of strings of characters with which the HTTP Host should NOT begin. - This parameter is only valid with the C(http_host) type. type: list elements: str version_added: "1.22.0" host_ends_not_with_any: description: - - A list of strings of characters the HTTP Host should not end with. + - A list of strings of characters with which the HTTP Host should NOT begin. - This parameter is only valid with the C(http_host) type. type: list elements: str version_added: "1.22.0" host_ends_with_any: description: - - A list of strings of characters the HTTP Host should end with. + - A list of strings of characters with which the HTTP Host should end. - This parameter is only valid with the C(http_host) type. type: list elements: str @@ -462,27 +462,69 @@ options: version_added: "1.10.0" server_name_is_any: description: - - A list of strings of characters the SSL Extension should match. + - A list of names that includes the server name. - This parameter is only valid with the C(ssl_extension) type. type: list elements: str + server_name_is_not_any: + description: + - A list of names that does NOT include the server name. + - This parameter is only valid with the C(ssl_extension) type. + type: list + elements: str + version_added: "1.27.0" + server_name_begins_with_any: + description: + - A list of names with which the server name should begin. + - This parameter is only valid with the C(ssl_extension) type. + type: list + elements: str + version_added: "1.27.0" + server_name_begins_not_with_any: + description: + - A list of names with which the server name should NOT begin. + - This parameter is only valid with the C(ssl_extension) type. + type: list + elements: str + version_added: "1.27.0" + server_name_ends_with_any: + description: + - A list of names with which the server name should end. + - This parameter is only valid with the C(ssl_extension) type. + type: list + elements: str + version_added: "1.27.0" + server_name_ends_not_with_any: + description: + - A list of names with which the server name should NOT end. + - This parameter is only valid with the C(ssl_extension) type. + type: list + elements: str + version_added: "1.27.0" + server_name_contains: + description: + - A list of names the server name should contain. + - This parameter is only valid with the C(ssl_extension) type. + type: list + elements: str + version_added: "1.27.0" address_matches_with_any: description: - - A list of IP Subnet address strings the IP address should match. + - A list of IP Subnet address strings that the IP address should match. - This parameter is only valid with the C(tcp) type. type: list elements: str version_added: "1.8.0" address_matches_with_datagroup: description: - - A list of internal datagroup strings the IP address should match. + - A list of internal data group strings that the IP address should match. - This parameter is only valid with the C(tcp) type. type: list elements: str version_added: "1.8.0" address_matches_with_external_datagroup: description: - - A list of external datagroup strings the IP address should match. + - A list of external data group strings that the IP address should match. - This parameter is only valid with the C(tcp) type. type: list elements: str @@ -512,7 +554,7 @@ options: default: present partition: description: - - Device partition to manage resources on. + - Device partition on which to manage resources. type: str default: Common extends_documentation_fragment: f5networks.f5_modules.f5 @@ -633,7 +675,7 @@ conditions: type: str sample: http_uri path_begins_with_any: - description: List of strings the URI begins with. + description: List of strings with which the URI begins. returned: changed type: list sample: [foo, bar] @@ -1161,8 +1203,13 @@ class ModuleParameters(Parameters): action[event] = True def _handle_ssl_extension_condition(self, action, item): + options = [ + 'server_name_is_any', 'server_name_is_not_any', 'server_name_contains', + 'server_name_begins_with_any', 'server_name_begins_not_with_any', + 'server_name_ends_with_any', 'server_name_ends_not_with_any', + ] action['type'] = 'ssl_extension' - if 'server_name_is_any' in item: + if 'server_name_is_any' in item and item['server_name_is_any'] is not None: if isinstance(item['server_name_is_any'], list): values = item['server_name_is_any'] else: @@ -1172,6 +1219,69 @@ class ModuleParameters(Parameters): serverName=True, values=values )) + if 'server_name_is_not_any' in item and item['server_name_is_not_any'] is not None: + if isinstance(item['server_name_is_not_any'], list): + values = item['server_name_is_not_any'] + else: + values = [item['server_name_is_not_any']] + action.update({ + 'equals': True, + 'serverName': True, + 'not': True, + 'values': values + }) + if 'server_name_begins_with_any' in item and item['server_name_begins_with_any'] is not None: + if isinstance(item['server_name_begins_with_any'], list): + values = item['server_name_begins_with_any'] + else: + values = [item['server_name_begins_with_any']] + action.update(dict( + serverName=True, + startsWith=True, + values=values + )) + if 'server_name_begins_not_with_any' in item and item['server_name_begins_not_with_any'] is not None: + if isinstance(item['server_name_begins_not_with_any'], list): + values = item['server_name_begins_not_with_any'] + else: + values = [item['server_name_begins_not_with_any']] + action.update({ + 'serverName': True, + 'startsWith': True, + 'not': True, + 'values': values + }) + if 'server_name_ends_with_any' in item and item['server_name_ends_with_any'] is not None: + if isinstance(item['server_name_ends_with_any'], list): + values = item['server_name_ends_with_any'] + else: + values = [item['server_name_ends_with_any']] + action.update(dict( + serverName=True, + endsWith=True, + values=values + )) + if 'server_name_ends_not_with_any' in item and item['server_name_ends_not_with_any'] is not None: + if isinstance(item['server_name_ends_not_with_any'], list): + values = item['server_name_ends_not_with_any'] + else: + values = [item['server_name_ends_not_with_any']] + action.update({ + 'serverName': True, + 'endsWith': True, + 'not': True, + 'values': values + }) + if 'server_name_contains' in item and item['server_name_contains'] is not None: + if isinstance(item['server_name_contains'], list): + values = item['server_name_contains'] + else: + values = [item['server_name_contains']] + action.update({ + 'serverName': True, + 'contains': True, + 'values': values + }) if 'event' not in item: raise F5ModuleError( "An 'event' must be specified when the 'ssl_extension' condition is used." @@ -2692,6 +2802,30 @@ class ArgumentSpec(object): type='list', elements='str', ), + server_name_is_not_any=dict( + type='list', + elements='str', + ), + server_name_begins_with_any=dict( + type='list', + elements='str', + ), + server_name_begins_not_with_any=dict( + type='list', + elements='str', + ), + server_name_ends_with_any=dict( + type='list', + elements='str', + ), + server_name_ends_not_with_any=dict( + type='list', + elements='str', + ), + server_name_contains=dict( + type='list', + elements='str', + ), address_matches_with_any=dict( type='list', elements='str', diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_pool.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_pool.py index 50d503e44..82ec9c8b2 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_pool.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_pool.py @@ -106,7 +106,7 @@ options: - reselect partition: description: - - Device partition to manage resources on. + - Device partition on which to manage resources. type: str default: Common state: @@ -185,6 +185,166 @@ options: you run the module in C(check) mode to ensure basic validation prior to executing this module. type: list elements: dict + suboptions: + description: + description: + - Specifies descriptive text that identifies the pool. + type: str + name: + description: + - Pool name + type: str + aliases: + - pool + lb_method: + description: + - Load balancing method. When creating a new pool, if this value is not + specified, the default of C(round-robin) is used. + type: str + choices: + - dynamic-ratio-member + - dynamic-ratio-node + - fastest-app-response + - fastest-node + - least-connections-member + - least-connections-node + - least-sessions + - observed-member + - observed-node + - predictive-member + - predictive-node + - ratio-least-connections-member + - ratio-least-connections-node + - ratio-member + - ratio-node + - ratio-session + - round-robin + - weighted-least-connections-member + - weighted-least-connections-node + monitor_type: + description: + - Monitor rule type when C(monitors) is specified. + - When creating a new pool, if this value is not specified, the default + of C(and_list) is used. + - When C(single), ensures all specified monitors are checked, but + additionally includes checks to make sure you only specified a single + monitor. + - When C(and_list), ensures B(all) monitors are checked. + - When C(m_of_n), ensures C(quorum) of C(monitors) are checked. C(m_of_n) + B(requires) a C(quorum) of 1 or greater be set either in the playbook, + or already exist on the device. + - Both C(single) and C(and_list) are functionally identical, as BIG-IP + considers all monitors as "a list". + type: str + aliases: + - availability_requirements_type + choices: + - and_list + - m_of_n + - single + quorum: + description: + - Monitor quorum value when C(monitor_type) is C(m_of_n). + - Quorum must be a value of 1 or greater when C(monitor_type) is C(m_of_n). + type: int + aliases: + - availability_requirements_at_least + monitors: + description: + - Monitor template name list. If the partition is not provided as part of + the monitor name, the C(partition) option is used instead. + type: list + elements: str + slow_ramp_time: + description: + - Sets the ramp-up time (in seconds) to gradually ramp up the load on + newly added or freshly detected up pool members. + type: int + reselect_tries: + description: + - Sets the number of times the system tries to contact a pool member + after a passive failure. + type: int + service_down_action: + description: + - Sets the action to take when node goes down in pool. + type: str + choices: + - none + - reset + - drop + - reselect + partition: + description: + - Device partition on which to manage resources. + type: str + default: Common + state: + description: + - When C(present), guarantees the pool exists with the provided + attributes. + - When C(absent), removes the pool from the system. + type: str + choices: + - absent + - present + default: present + metadata: + description: + - Arbitrary key/value pairs you can attach to a pool. This is useful in + situations where you might want to annotate a pool to be managed by Ansible. + - Key names are stored as strings; this includes names that are numbers. + - Values for all of the keys are stored as strings; this includes values + that are numbers. + - Data will be persisted, not ephemeral. + type: raw + priority_group_activation: + description: + - Specifies whether the system load balances traffic according to the priority + number assigned to the pool member. + - When creating a new pool, if this parameter is not specified, the default of + C(0) is used. + - To disable this setting, provide the value C(0). + - Once you enable this setting, you can specify pool member priority when you + create a new pool or on a pool member's properties screen. + - The system treats same-priority pool members as a group. + - To enable priority group activation, provide a number from C(0) to C(65535) + that represents the minimum number of members that must be available in one + priority group before the system directs traffic to members in a lower + priority group. + - When a sufficient number of members become available in the higher priority + group, the system again directs traffic to the higher priority group. + type: int + aliases: + - minimum_active_members + min_up_members: + description: + - Specifies the minimum number of pool members that must be up, + - otherwise, the system takes the action specified in the C(min-up-members-action) option. + - Use this option for gateway pools in a redundant system where a unit number is applied to the pool. + - This indicates the pool is configured only on the specified unit. + - When creating a new pool, if this parameter is not specified, the default is C(0). + type: int + min_up_members_action: + description: + - Specifies the action to take if C(min_up_members_checking) is C(enabled) and the number of active pool members + falls below the number specified in the C(min_up_members) option. + - When creating a new pool, if this parameter is not specified, the default is C(failover). + type: str + choices: + - failover + - reboot + - restart-all + min_up_members_checking: + description: + - Enables or disables the C(min_up_members) feature. + - If you enable this feature, you must also specify a value for both the C(min_up_members) and + C(min_up_members_action) options. + - When creating a new pool, if this parameter is not specified, the default is C(disabled). + type: str + choices: + - enabled + - disabled aliases: - pools replace_all_with: @@ -363,7 +523,7 @@ EXAMPLES = r''' partition: Common lb_method: round-robin slow_ramp_time: 120 - replace_all_with: yes + replace_all_with: true provider: server: lb.mydomain.com user: admin @@ -790,6 +950,8 @@ class Difference(object): "Quorum value must be specified with monitor_type 'm_of_n'." ) if self.want.monitors != self.have.monitors: + if self.want.monitors is None or not self.want.monitors_list: + return None return dict( monitors=self.want.monitors ) @@ -799,6 +961,8 @@ class Difference(object): "Quorum values have no effect when used with 'and_list'." ) if self.want.monitors != self.have.monitors: + if self.want.monitors is None or not self.want.monitors_list: + return None return dict( monitors=self.want.monitors ) @@ -822,6 +986,8 @@ class Difference(object): # "and_list plus some extra checks" self.want.update(dict(monitor_type='and_list')) if self.want.monitors != self.have.monitors: + if self.want.monitors is None or not self.want.monitors_list: + return None return dict( monitors=self.want.monitors ) @@ -836,10 +1002,17 @@ class Difference(object): @property def monitors(self): + if self.want.monitors is None: + return None + if not self.want.monitors_list and self.have.monitors is None: + # Idempotency check - removing monitors from a device where no monitors exists + return None + # when monitors_list is [], remove all the monitors + if not self.want.monitors_list: + # monitors is '' in the case of monitor_type and_list and min <quorum> of { } in case monitor_type m_of_n + return {'monitors': ''} if self.want.monitor_type is None: self.want.update(dict(monitor_type=self.have.monitor_type)) - if not self.want.monitors_list: - self.want.monitors = self.have.monitors_list if not self.want.monitors and self.want.monitor_type is not None: raise F5ModuleError( "The 'monitors' parameter cannot be empty when 'monitor_type' parameter is specified" @@ -1278,10 +1451,6 @@ class ArgumentSpec(object): ), description=dict(), metadata=dict(type='raw'), - state=dict( - default='present', - choices=['present', 'absent'] - ), priority_group_activation=dict( type='int', aliases=['minimum_active_members'] @@ -1295,6 +1464,10 @@ class ArgumentSpec(object): min_up_members_checking=dict( choices=['enabled', 'disabled'] ), + state=dict( + default='present', + choices=['present', 'absent'] + ), partition=dict( default='Common', fallback=(env_fallback, ['F5_PARTITION']) @@ -1303,8 +1476,9 @@ class ArgumentSpec(object): aggregate_spec = deepcopy(element_spec) - # remove default in aggregate spec, to handle common arguments remove_default_spec(aggregate_spec) + aggregate_spec["state"].update(default="present") + aggregate_spec["partition"].update(default="Common") argument_spec = dict( aggregate=dict( diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_pool_member.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_pool_member.py index 85a97da9b..b1ddbf61b 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_pool_member.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_pool_member.py @@ -16,35 +16,183 @@ description: - Manages F5 BIG-IP LTM pool members via the REST API. version_added: "1.0.0" options: - name: - description: - - Name of the node to create or re-use when creating a new pool member. - - While this parameter is optional, we recommend specifying this parameter - at all times to mitigate anyunexpected behavior. - - If not specified, a node name is created automatically from either the specified C(address) or C(fqdn). - - The C(enabled) state is an alias of C(present). - type: str - state: + aggregate: description: - - Pool member state. - type: str - choices: - - present - - absent - - enabled - - disabled - - forced_offline - default: present + - List of pool member definitions to be created, modified, or removed. + - When using C(aggregates), if one of the aggregate definitions is invalid, the aggregate run will fail, + indicating the error it last encountered. + - The module will B(NOT) rollback any changes it has made prior to encountering the error. + - The module also will not indicate what changes were made prior to failure. Therefore we strong advise + you run the module in C(check) mode to ensure basic validation prior to executing this module. + type: list + elements: dict + suboptions: + name: + description: + - Name of the node to create or re-use when creating a new pool member. + - While this parameter is optional, we recommend specifying this parameter + at all times to mitigate any unexpected behavior. + - If not specified, a node name is created automatically from either the specified C(address) or C(fqdn). + - The C(enabled) state is an alias of C(present). + type: str + address: + description: + - IP address of the pool member. This can be either IPv4 or IPv6. When creating a + new pool member, one of either C(address) or C(fqdn) must be provided. This + parameter cannot be updated after it is set. + type: str + aliases: + - ip + - host + fqdn: + description: + - FQDN name of the pool member. This can be any name that is a valid RFC 1123 DNS + name. Therefore, the only usable characters are "A" to "Z", + "a" to "z", "0" to "9", the hyphen ("-") and the period ("."). + - FQDN names must include at least one period; delineating the host from + the domain. For example, C(host.domain). + - FQDN names must end with a letter or a number. + - When creating a new pool member, one of either C(address) or C(fqdn) must be + provided. This parameter cannot be updated after it is set. + type: str + aliases: + - hostname + port: + description: + - Pool member port. + - This value cannot be changed after it has been set. + - Parameter must be provided when using aggregates. + type: int + connection_limit: + description: + - Pool member connection limit. Setting this to C(0) disables the limit. + type: int + description: + description: + - Pool member description. + type: str + rate_limit: + description: + - Pool member rate limit (connections-per-second). Setting this to C(0) + disables the limit. + type: int + ratio: + description: + - Pool member ratio weight. Valid values range from 1 through 100. + New pool members -- unless overridden with this value -- default + to 1. + type: int + preserve_node: + description: + - When state is C(absent), the system attempts to remove the node the pool + member references. + - The node will not be removed if it is still referenced by other pool + members. If this happens, the module will not raise an error. + - Setting this to C(true) disables this behavior. + type: bool + priority_group: + description: + - Specifies a number representing the priority group for the pool member. + - When adding a new member, the default is C(0), meaning the member has no priority. + - To specify a priority, you must activate priority group usage when you + create a new pool or when adding or removing pool members. When activated, + the system load balances traffic according to the priority group number + assigned to the pool member. + - The higher the number, the higher the priority. So a member with a priority + of 3 has higher priority than a member with a priority of 1. + type: int + fqdn_auto_populate: + description: + - Specifies whether the system automatically creates ephemeral nodes using + the IP addresses returned by the resolution of a DNS query for a node + defined by an FQDN. + - When C(true), the system generates an ephemeral node for each IP address + returned in response to a DNS query for the FQDN of the node. Additionally, + when a DNS response indicates the IP address of an ephemeral node no longer + exists, the system deletes the ephemeral node. + - When C(false), the system resolves a DNS query for the FQDN of the node + with the single IP address associated with the FQDN. + - When creating a new pool member, the default for this parameter is C(true). + - Once set this parameter cannot be changed afterwards. + - This parameter is ignored when C(reuse_nodes) is C(true). + type: bool + reuse_nodes: + description: + - Reuses node definitions if requested. + type: bool + default: true + monitors: + description: + - Specifies the health monitors the system currently uses to monitor + this resource. + type: list + elements: str + availability_requirements: + description: + - If you activate more than one health monitor, specifies the number of health + monitors that must receive successful responses in order for the link to be + considered available. + - Specifying an empty string will remove the monitors and revert to inheriting from the pool (default). + - Specifying C(none) will remove any health monitoring from the member completely. + type: dict + suboptions: + type: + description: + - Monitor rule type when C(monitors) is specified. + - When creating a new pool, if this value is not specified, the default of + C(all) will be used. + type: str + required: True + choices: + - all + - at_least + at_least: + description: + - Specifies the minimum number of active health monitors that must be successful + before the link is considered up. + - This parameter is only relevant when a C(type) of C(at_least) is used. + - This parameter will be ignored if a type of C(all) is used. + type: int + ip_encapsulation: + description: + - Specifies the IP encapsulation using either IPIP (IP encapsulation within IP, + RFC 2003) or GRE (Generic Router Encapsulation, RFC 2784) on outbound packets + (from BIG-IP system to server-pool member). + - When C(none), disables IP encapsulation. + - When C(inherit), inherits the IP encapsulation setting from the member's pool. + - When any other value, the options are None, Inherit from Pool, and Member Specific. + type: str + state: + description: + - Pool member state. + type: str + choices: + - present + - absent + - enabled + - disabled + - forced_offline + default: present + partition: + description: + - Partition to manage resources on. + type: str + default: Common + aliases: + - members pool: description: - Pool name. This pool must exist. type: str required: True - partition: + name: description: - - Partition to manage resources on. + - Name of the node to create or re-use when creating a new pool member. + - While this parameter is optional, we recommend specifying this parameter + at all times to mitigate any unexpected behavior. + - If not specified, a node name is created automatically from either the specified C(address) or C(fqdn). + - The C(enabled) state is an alias of C(present). type: str - default: Common address: description: - IP address of the pool member. This can be either IPv4 or IPv6. When creating a @@ -130,7 +278,7 @@ options: description: - Reuses node definitions if requested. type: bool - default: yes + default: true monitors: description: - Specifies the health monitors the system currently uses to monitor @@ -172,18 +320,22 @@ options: - When C(inherit), inherits the IP encapsulation setting from the member's pool. - When any other value, the options are None, Inherit from Pool, and Member Specific. type: str - aggregate: + state: description: - - List of pool member definitions to be created, modified, or removed. - - When using C(aggregates), if one of the aggregate definitions is invalid, the aggregate run will fail, - indicating the error it last encountered. - - The module will B(NOT) rollback any changes it has made prior to encountering the error. - - The module also will not indicate what changes were made prior to failure. Therefore we strong advise - you run the module in C(check) mode to ensure basic validation prior to executing this module. - type: list - elements: dict - aliases: - - members + - Pool member state. + type: str + choices: + - present + - absent + - enabled + - disabled + - forced_offline + default: present + partition: + description: + - Partition to manage resources on. + type: str + default: Common replace_all_with: description: - Removes members not defined in the C(aggregate) parameter. @@ -343,7 +495,7 @@ EXAMPLES = r''' connection_limit: 100 rate_limit: 50 ratio: 2 - replace_all_with: yes + replace_all_with: true provider: server: lb.mydomain.com user: admin @@ -1612,6 +1764,9 @@ class ArgumentSpec(object): # remove default in aggregate spec, to handle common arguments remove_default_spec(aggregate_spec) + aggregate_spec["state"].update(default="present") + aggregate_spec["partition"].update(default="Common") + aggregate_spec["reuse_nodes"].update(default=True) self.argument_spec = dict( aggregate=dict( diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_client_ssl.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_client_ssl.py index 4497edf3d..4084fba21 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_client_ssl.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_client_ssl.py @@ -1180,11 +1180,12 @@ class ArgumentSpec(object): cert_key_chain=dict( type='list', elements='dict', + no_log=True, options=dict( cert=dict(required=True), - key=dict(required=True), + key=dict(required=True, no_log=True), chain=dict(), - passphrase=dict(), + passphrase=dict(no_log=True), true_names=dict( type='bool', default='no' diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_dns.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_dns.py index 5ace57732..507b7a8fd 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_dns.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_dns.py @@ -151,12 +151,12 @@ EXAMPLES = r''' - name: Create a DNS profile bigip_profile_dns: name: foo - enable_dns_express: no - enable_dnssec: no - enable_gtm: no - process_recursion_desired: no - use_local_bind: no - enable_dns_firewall: yes + enable_dns_express: false + enable_dnssec: false + enable_gtm: false + process_recursion_desired: false + use_local_bind: false + enable_dns_firewall: true provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_ftp.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_ftp.py index 20cf05a7e..cb64094e7 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_ftp.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_ftp.py @@ -88,7 +88,7 @@ EXAMPLES = r''' name: foo parent: /Common/barfoo port: 2221 - allow_ftps: yes + allow_ftps: true provider: password: secret server: lb.mydomain.com @@ -100,7 +100,7 @@ EXAMPLES = r''' name: foo log_profile: /Common/alg_log log_publisher: /Common/foo_publisher - security: yes + security: true description: my description provider: password: secret diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_http.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_http.py index 7f56fab59..57731bd46 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_http.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_http.py @@ -377,7 +377,7 @@ EXAMPLES = r''' - name: Create HTTP profile bigip_profile_http: name: my_profile - insert_xforwarded_for: yes + insert_xforwarded_for: true redirect_rewrite: all state: present provider: diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_http2.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_http2.py index d6c5961d3..11d5c730b 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_http2.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_http2.py @@ -114,7 +114,7 @@ EXAMPLES = r''' - name: Create HTTP2 profile bigip_profile_http2: name: my_profile - insert_header: yes + insert_header: true insert_header_name: FOO state: present provider: diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_persistence_src_addr.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_persistence_src_addr.py index d0c834bb7..69e7668a5 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_persistence_src_addr.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_persistence_src_addr.py @@ -113,9 +113,9 @@ EXAMPLES = r''' name: foo state: present hash_algorithm: carp - match_across_services: yes - match_across_virtuals: yes - mirror: yes + match_across_services: true + match_across_virtuals: true + mirror: true mask: 255.255.255.255 provider: password: secret diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_persistence_universal.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_persistence_universal.py index 20355a96b..721da176c 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_persistence_universal.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_persistence_universal.py @@ -103,9 +103,9 @@ EXAMPLES = r''' bigip_profile_persistence_universal: name: foo state: present - match_across_services: yes - match_across_virtuals: yes - mirror: yes + match_across_services: true + match_across_virtuals: true + mirror: true provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_server_ssl.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_server_ssl.py index a12262eef..a33b501f9 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_server_ssl.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_server_ssl.py @@ -773,7 +773,7 @@ class ArgumentSpec(object): name=dict(required=True), certificate=dict(), chain=dict(), - key=dict(), + key=dict(no_log=True), passphrase=dict(no_log=True), parent=dict(default='/Common/serverssl'), ciphers=dict(), diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_sip.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_sip.py index 5386e9f94..dac9e4810 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_sip.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_sip.py @@ -130,7 +130,7 @@ EXAMPLES = r''' log_profile: alg_log log_publisher: foo-publisher description: this is a new profile - security: yes + security: true provider: password: secret server: lb.mydomain.com @@ -140,9 +140,9 @@ EXAMPLES = r''' - name: Update SIP profile bigip_profile_sip: name: foo - insert_record_route_header: yes - enable_sip_firewall: yes - insert_via_header: yes + insert_record_route_header: true + enable_sip_firewall: true + insert_via_header: true user_via_header: "SIP/2.0/UDP 10.10.10.10:5060" provider: password: secret diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_tcp.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_tcp.py index 44bd3ce91..c5687db9b 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_tcp.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_tcp.py @@ -156,7 +156,7 @@ EXAMPLES = r''' bigip_profile_tcp: name: foo parent: f5-tcp-progressive - time_wait_recycle: no + time_wait_recycle: false idle_timeout: 300 state: present provider: diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_udp.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_udp.py index d7aa4ab86..0aab26cc4 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_udp.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_profile_udp.py @@ -73,7 +73,7 @@ EXAMPLES = r''' name: foo parent: udp idle_timeout: 300 - datagram_load_balancing: no + datagram_load_balancing: false state: present provider: user: admin diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_provision_async.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_provision_async.py index 453fdfc8a..49c5338f2 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_provision_async.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_provision_async.py @@ -124,7 +124,7 @@ EXAMPLES = r''' - name: Check for provision progress bigip_provision_async: module: "gtm" - check_status: yes + check_status: true status_timeout: 900 provider: server: lb.mydomain.com @@ -147,7 +147,7 @@ EXAMPLES = r''' - name: Re-check for provision progress bigip_provision_async: module: "gtm" - check_status: yes + check_status: true status_timeout: 900 provider: server: lb.mydomain.com @@ -191,7 +191,7 @@ EXAMPLES = r''' bigip_provision_async: module: "vcmp" level: "dedicated" - check_status: yes + check_status: true status_timeout: 900 provider: server: lb.mydomain.com @@ -216,7 +216,7 @@ EXAMPLES = r''' bigip_provision_async: module: "vcmp" level: "dedicated" - check_status: yes + check_status: true status_timeout: 900 provider: server: lb.mydomain.com @@ -260,7 +260,7 @@ EXAMPLES = r''' bigip_provision_async: module: "vcmp" state: "absent" - check_status: yes + check_status: true status_timeout: 900 provider: server: lb.mydomain.com @@ -282,7 +282,7 @@ EXAMPLES = r''' bigip_provision_async: module: "vcmp" state: "absent" - check_status: yes + check_status: true status_timeout: 900 provider: server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_qkview.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_qkview.py index e71128c4e..e392a1c93 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_qkview.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_qkview.py @@ -63,7 +63,7 @@ options: - If C(no), the file will only be transferred if the destination does not exist. type: bool - default: yes + default: true only_create_file: description: - If C(true), the file is created on the device and not downloaded. The file will not be deleted by the @@ -87,7 +87,7 @@ author: EXAMPLES = r''' - name: Fetch a qkview from the remote device bigip_qkview: - asm_request_log: yes + asm_request_log: true exclude: - audit - secure diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_remote_role.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_remote_role.py index 1300989de..f42990134 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_remote_role.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_remote_role.py @@ -99,7 +99,7 @@ EXAMPLES = r''' name: ldap_group line_order: 1 attribute_string: memberOf=cn=ldap_group,cn=ldap.group,ou=ldap - remote_access: yes + remote_access: true assigned_role: administrator partition_access: all terminal_access: none diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_remote_user.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_remote_user.py index 053570fd6..7358f17d4 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_remote_user.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_remote_user.py @@ -60,7 +60,7 @@ EXAMPLES = r''' - name: Modify default partition and console access bigip_remote_user: default_partition: Common - console_access: yes + console_access: true provider: password: secret server: lb.mydomain.com @@ -71,7 +71,7 @@ EXAMPLES = r''' bigip_remote_user: default_partition: Common default_role: manager - console_access: yes + console_access: true description: "Changed new settings" provider: password: secret @@ -83,7 +83,7 @@ EXAMPLES = r''' bigip_remote_user: default_partition: all default_role: "no-access" - console_access: no + console_access: false description: "" provider: password: secret diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_selfip.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_selfip.py index 2ab13a1d2..afe906532 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_selfip.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_selfip.py @@ -20,6 +20,7 @@ options: - The IP addresses for the new self IP. This value is ignored upon update as addresses themselves cannot be changed after they are created. - This value is required when creating new self IPs. + - IPv4 and IPv6 are supported. type: str allow_service: description: @@ -104,6 +105,18 @@ EXAMPLES = r''' user: admin delegate_to: localhost +- name: Create Self IPv6 + bigip_selfip: + address: fe80::10 + name: self2 + netmask: "ffff:ffff:ffff:ffff::" + vlan: vlan1 + provider: + password: secret + server: lb.mydomain.com + user: admin + delegate_to: localhost + - name: Create Self IP with a Route Domain bigip_selfip: name: self1 diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_service_policy.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_service_policy.py index 432e880c0..1e4db5ffe 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_service_policy.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_service_policy.py @@ -60,8 +60,8 @@ EXAMPLES = r''' name: foo timer_policy: timer1 port_misuse_policy: misuse1 - timer_policy_enabled: yes - port_misuse_policy_enabled: yes + timer_policy_enabled: true + port_misuse_policy_enabled: true state: present provider: user: admin diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_snat_translation.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_snat_translation.py index b9b60d56a..f3826c689 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_snat_translation.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_snat_translation.py @@ -112,7 +112,7 @@ EXAMPLES = r''' name: my-snat-pool state: present address: 10.10.10.10 - arp: no + arp: false connection_limit: 300 ip_idle_timeout: 1800 tcp_idle_timeout: 1800 @@ -128,7 +128,7 @@ EXAMPLES = r''' name: my-snat-pool state: disabled address: 10.10.10.10 - arp: no + arp: false connection_limit: 300 ip_idle_timeout: 1800 tcp_idle_timeout: 1800 @@ -144,7 +144,7 @@ EXAMPLES = r''' name: my-snat-pool state: enabled address: 10.10.10.10 - arp: no + arp: false connection_limit: 300 ip_idle_timeout: 1800 tcp_idle_timeout: 1800 @@ -160,7 +160,7 @@ EXAMPLES = r''' name: my-new-snat-pool state: enabled address: 10.10.10.10 - arp: no + arp: false connection_limit: 300 ip_idle_timeout: 1800 partition: ansible @@ -177,7 +177,7 @@ EXAMPLES = r''' name: my-new-snat-pool state: enabled address: 10.10.10.10 - arp: no + arp: false connection_limit: 300 ip_idle_timeout: 1800 partition: ansible @@ -189,7 +189,6 @@ EXAMPLES = r''' user: admin password: secret delegate_to: localhost - ''' RETURN = r''' diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_software_update.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_software_update.py index 5ce7c77c8..7e9605356 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_software_update.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_software_update.py @@ -42,7 +42,7 @@ author: EXAMPLES = r''' - name: Enable automatic update checking bigip_software_update: - auto_check: yes + auto_check: true provider: password: secret server: lb.mydomain.com @@ -51,8 +51,8 @@ EXAMPLES = r''' - name: Disable automatic update checking and phoning home bigip_software_update: - auto_check: no - auto_phone_home: no + auto_check: false + auto_phone_home: false provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ssl_key_cert.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ssl_key_cert.py index df3d00e11..3b9533edb 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ssl_key_cert.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ssl_key_cert.py @@ -459,9 +459,9 @@ class ModuleManager(object): return True self.create_on_device() if self.want.key_filename: - self.remove_uploaded_file_from_device(self.want.key_filename) + self.remove_uploaded_file_from_device(self.want.key_filename + "_key") if self.want.cert_filename: - self.remove_uploaded_file_from_device(self.want.cert_filename) + self.remove_uploaded_file_from_device(self.want.cert_filename + "_cert") return True def remove_uploaded_file_from_device(self, name): @@ -585,6 +585,8 @@ class ModuleManager(object): ) key_params_dict = params_dict.copy() key_params_dict['sourcePath'] = self.want.key_source_path + if self.want.passphrase: + key_params_dict['passphrase'] = self.want.passphrase links_and_params.append({'link': key_link, 'params': key_params_dict}) if self.want.cert_name: @@ -611,7 +613,9 @@ class ModuleManager(object): ) key_params_dict = params_dict.copy() key_params_dict['name'] = self.want.key_filename - key_params_dict['sourcePath'] = self.want.key_source_path + key_params_dict['sourcePath'] = self.want.key_source_path + "_key" + if self.want.passphrase: + key_params_dict['passphrase'] = self.want.passphrase links_and_params.append({'link': key_link, 'params': key_params_dict}) if self.want.cert_name: @@ -621,7 +625,7 @@ class ModuleManager(object): ) cert_params_dict = params_dict.copy() cert_params_dict['name'] = self.want.cert_filename - cert_params_dict['sourcePath'] = self.want.cert_source_path + cert_params_dict['sourcePath'] = self.want.cert_source_path + "_cert" links_and_params.append({'link': cert_link, 'params': cert_params_dict}) @@ -637,11 +641,11 @@ class ModuleManager(object): if self.want.key_name: key_content = StringIO(self.want.key_content) - self.upload_file_to_device(key_content, self.want.key_filename) + self.upload_file_to_device(key_content, self.want.key_filename + "_key") if self.want.cert_name: cert_content = StringIO(self.want.cert_content) - self.upload_file_to_device(cert_content, self.want.cert_filename) + self.upload_file_to_device(cert_content, self.want.cert_filename + "_cert") with TransactionContextManager(self.client) as transact: for link in links_and_params: diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ssl_ocsp.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ssl_ocsp.py index ad76b55bb..7c2bb0cfb 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ssl_ocsp.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ssl_ocsp.py @@ -728,7 +728,7 @@ class ArgumentSpec(object): choices=['sha256', 'sha1'] ), certificate=dict(), - key=dict(), + key=dict(no_log=True), passphrase=dict(no_log=True), status_age=dict(type='int'), strict_responder_checking=dict(type='bool'), diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_static_route.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_static_route.py index 3e8b84929..604b3727a 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_static_route.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_static_route.py @@ -101,7 +101,7 @@ EXAMPLES = r''' password: secret server: lb.mydomain.come user: admin - validate_certs: no + validate_certs: false delegate_to: localhost ''' @@ -135,7 +135,7 @@ pool: description: Whether the banner is enabled or not. returned: changed type: str - sample: yes + sample: true partition: description: The partition that the static route was created on. returned: changed diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_sys_db.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_sys_db.py index ac9580634..376a28851 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_sys_db.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_sys_db.py @@ -366,7 +366,7 @@ class ArgumentSpec(object): def __init__(self): self.supports_check_mode = True argument_spec = dict( - key=dict(required=True), + key=dict(required=True, no_log=True), state=dict( default='present', choices=['present', 'reset'] diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_sys_global.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_sys_global.py index 37d921a4d..fb9dd1555 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_sys_global.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_sys_global.py @@ -80,7 +80,7 @@ author: EXAMPLES = r''' - name: Disable the setup utility bigip_sys_global: - gui_setup: no + gui_setup: false provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_trunk.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_trunk.py index 7dbb18cf5..90ea3c31c 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_trunk.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_trunk.py @@ -132,7 +132,7 @@ EXAMPLES = r''' - 1.2 link_selection_policy: maximum-bandwidth frame_distribution_hash: destination-mac - lacp_enabled: yes + lacp_enabled: true lacp_mode: passive lacp_timeout: short provider: diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_tunnel.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_tunnel.py index d5ce23bcf..50f690570 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_tunnel.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_tunnel.py @@ -157,7 +157,7 @@ EXAMPLES = r''' key: 0 secondary_address: 192.168.1.100 mtu: 0 - use_pmtu: yes + use_pmtu: true tos: preserve auto_last_hop: default traffic_group: traffic-group-1 @@ -570,7 +570,7 @@ class ArgumentSpec(object): name=dict(required=True), profile=dict(), description=dict(), - key=dict(type='int'), + key=dict(type='int', no_log=True), local_address=dict(), remote_address=dict(), secondary_address=dict(), diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ucs.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ucs.py index f71f936f6..e4ddfb39e 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ucs.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ucs.py @@ -128,7 +128,7 @@ EXAMPLES = r''' bigip_ucs: ucs: /root/bigip.localhost.localdomain.ucs state: installed - no_license: yes + no_license: true provider: server: lb.mydomain.com user: admin @@ -139,8 +139,8 @@ EXAMPLES = r''' bigip_ucs: ucs: /root/bigip.localhost.localdomain.ucs state: installed - no_license: yes - no_platform_check: yes + no_license: true + no_platform_check: true provider: server: lb.mydomain.com user: admin diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ucs_fetch.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ucs_fetch.py index 687828906..ef63f61fe 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ucs_fetch.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_ucs_fetch.py @@ -90,7 +90,9 @@ notes: https://clouddocs.f5.com/products/orchestration/ansible/devel/usage/module-usage-with-tower.html - Some longer running tasks might cause the REST interface on BIG-IP to time out, to avoid this adjust the timers as per this KB article https://support.f5.com/csp/article/K94602685 -extends_documentation_fragment: f5networks.f5_modules.f5 +extends_documentation_fragment: + - f5networks.f5_modules.f5 + - ansible.builtin.files author: - Tim Rupp (@caphrim007) - Wojciech Wypior (@wojtek0806) @@ -110,7 +112,7 @@ EXAMPLES = r''' - name: Only create new UCS, no download bigip_ucs_fetch: src: cs_backup.ucs - only_create_file: yes + only_create_file: true provider: server: lb.mydomain.com user: admin @@ -130,7 +132,7 @@ EXAMPLES = r''' - name: Recreate UCS file left on device - create new file bigip_ucs_fetch: src: cs_backup.ucs - only_create_file: yes + only_create_file: true provider: server: lb.mydomain.com user: admin diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_vcmp_guest.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_vcmp_guest.py index ae3a7949f..be3570840 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_vcmp_guest.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_vcmp_guest.py @@ -204,7 +204,7 @@ EXAMPLES = r''' bigip_vcmp_guest: name: guest1 state: absent - delete_virtual_disk: yes + delete_virtual_disk: true provider: password: secret server: lb.mydomain.com diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_virtual_server.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_virtual_server.py index 37b56e814..7994c15e4 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_virtual_server.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigip_virtual_server.py @@ -1626,11 +1626,14 @@ class ApiParameters(Parameters): if 'items' not in self._values['profiles']: return None result = [] + prof_path = 'https://localhost/mgmt/tm/ltm/profile/' for item in self._values['profiles']['items']: context = item['context'] name = item['name'] + path = item['nameReference']['link'] if context in ['all', 'serverside', 'clientside']: - result.append(dict(name=name, context=context, fullPath=item['fullPath'])) + if path.startswith(prof_path): + result.append(dict(name=name, context=context, fullPath=item['fullPath'])) else: raise F5ModuleError( "Unknown profile context found: '{0}'".format(context) diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_fasthttp.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_fasthttp.py index 743ba9603..18b9704d3 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_fasthttp.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_fasthttp.py @@ -44,7 +44,7 @@ options: - The port of the server. - When creating a new application and specifying a server, if this parameter is not provided, the default is C(80). - type: str + type: int default: 80 inbound_virtual: description: @@ -69,7 +69,7 @@ options: - The port on which the virtual listens for connections. - When creating a new application, if this parameter is not specified, the default value is C(80). - type: str + type: int default: 80 type: dict service_environment: @@ -113,7 +113,7 @@ author: ''' EXAMPLES = r''' -- name: Load balance an HTTP application on port 80 on BIG-IP +- name: BIG-IQ CM an HTTP application on port 80 on BIG-IP bigiq_application_fasthttp: name: my-app description: Fast HTTP @@ -130,7 +130,7 @@ EXAMPLES = r''' port: 80 provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin state: present delegate_to: localhost @@ -713,7 +713,7 @@ class ArgumentSpec(object): elements='dict', options=dict( address=dict(required=True), - port=dict(default=80) + port=dict(type='int', default=80) ) ), inbound_virtual=dict( @@ -721,7 +721,7 @@ class ArgumentSpec(object): options=dict( address=dict(required=True), netmask=dict(required=True), - port=dict(default=80) + port=dict(type='int', default=80) ) ), service_environment=dict(), diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_fastl4_tcp.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_fastl4_tcp.py index be64888e2..bbeead3a5 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_fastl4_tcp.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_fastl4_tcp.py @@ -44,7 +44,7 @@ options: - The port of the server. - When creating a new application and specifying a server, if this parameter is not provided, the default is C(8000). - type: str + type: int default: 8000 inbound_virtual: description: @@ -69,7 +69,7 @@ options: - The port on which the virtual listens for connections. - When creating a new application, if this parameter is not specified, the default value is C(8080). - type: str + type: int default: 8080 service_environment: description: @@ -114,7 +114,7 @@ author: ''' EXAMPLES = r''' -- name: Load balance a TCP-based application with a FastL4 profile +- name: BIG-IQ CM a TCP-based application with a FastL4 profile bigiq_application_fastl4_tcp: name: my-app description: My description @@ -131,7 +131,7 @@ EXAMPLES = r''' port: 443 provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin state: present delegate_to: localhost @@ -661,7 +661,7 @@ class ArgumentSpec(object): elements='dict', options=dict( address=dict(required=True), - port=dict(default=8000) + port=dict(type='int', default=8000) ) ), inbound_virtual=dict( @@ -669,7 +669,7 @@ class ArgumentSpec(object): options=dict( address=dict(required=True), netmask=dict(required=True), - port=dict(default=8080) + port=dict(type='int', default=8080) ) ), service_environment=dict(), diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_fastl4_udp.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_fastl4_udp.py index 3cc61593a..fca1cb66c 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_fastl4_udp.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_fastl4_udp.py @@ -44,7 +44,7 @@ options: - The port of the server. - When creating a new application and specifying a server, if this parameter is not provided, the default is C(8000). - type: str + type: int default: 8000 inbound_virtual: description: @@ -69,7 +69,7 @@ options: - The port on which the virtual listens for connections. - When creating a new application, if this parameter is not specified, the default value is C(53). - type: str + type: int default: 53 service_environment: description: @@ -113,7 +113,7 @@ author: ''' EXAMPLES = r''' -- name: Load balance a UDP-based application with a FastL4 profile +- name: BIG-IQ CM a UDP-based application with a FastL4 profile bigiq_application_fastl4_udp: name: my-app description: My description @@ -130,7 +130,7 @@ EXAMPLES = r''' port: 53 provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin state: present delegate_to: localhost @@ -658,7 +658,7 @@ class ArgumentSpec(object): elements='dict', options=dict( address=dict(required=True), - port=dict(default=8000) + port=dict(type='int', default=8000) ) ), inbound_virtual=dict( @@ -666,7 +666,7 @@ class ArgumentSpec(object): options=dict( address=dict(required=True), netmask=dict(required=True), - port=dict(default=53) + port=dict(type='int', default=53) ) ), service_environment=dict(), diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_http.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_http.py index 90b5ed1f8..104acd5a5 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_http.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_http.py @@ -44,7 +44,7 @@ options: - The port of the server. - When creating a new application and specifying a server, if this parameter is not provided, the default is C(80). - type: str + type: int default: 80 inbound_virtual: description: @@ -69,7 +69,7 @@ options: - The port on which the virtual listens for connections. - When creating a new application, if this parameter is not specified, the default value is C(80). - type: str + type: int default: 80 type: dict service_environment: @@ -113,7 +113,7 @@ author: ''' EXAMPLES = r''' -- name: Load balance an HTTP application on port 80 on BIG-IP +- name: BIG-IQ CM an HTTP application on port 80 on BIG-IP bigiq_application_http: name: my-app description: Redirect HTTP to HTTPS @@ -130,7 +130,7 @@ EXAMPLES = r''' port: 443 provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin state: present delegate_to: localhost @@ -711,7 +711,7 @@ class ArgumentSpec(object): elements='dict', options=dict( address=dict(required=True), - port=dict(default=80) + port=dict(type='int', default=80) ) ), inbound_virtual=dict( @@ -719,7 +719,7 @@ class ArgumentSpec(object): options=dict( address=dict(required=True), netmask=dict(required=True), - port=dict(default=80) + port=dict(type='int', default=80) ) ), service_environment=dict(), diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_https_offload.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_https_offload.py index 4657607c3..1f2503745 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_https_offload.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_https_offload.py @@ -42,7 +42,7 @@ options: port: description: - The port of the server. - type: str + type: int default: 80 inbound_virtual: description: @@ -70,7 +70,7 @@ options: - The port on which the virtual listens for connections. - When creating a new application, if this parameter is not specified, the default value is C(443). - type: str + type: int default: 443 redirect_virtual: description: @@ -100,7 +100,7 @@ options: - The port on which the virtual listens for connections. - When creating a new application, if this parameter is not specified, the default value is C(80). - type: str + type: int default: 80 client_ssl_profile: description: @@ -184,7 +184,7 @@ author: ''' EXAMPLES = r''' -- name: Load balance an HTTPS application on port 443 with SSL offloading on BIG-IP +- name: BIG-IQ CM an HTTPS application on port 443 with SSL offloading on BIG-IP bigiq_application_https_offload: name: my-app description: Redirect HTTP to HTTPS @@ -204,7 +204,7 @@ EXAMPLES = r''' port: 80 provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin state: present delegate_to: localhost @@ -948,7 +948,7 @@ class ArgumentSpec(object): elements='dict', options=dict( address=dict(required=True), - port=dict(default=80) + port=dict(type='int', default=80) ) ), inbound_virtual=dict( @@ -956,7 +956,7 @@ class ArgumentSpec(object): options=dict( address=dict(required=True), netmask=dict(required=True), - port=dict(default=443) + port=dict(type='int', default=443) ) ), redirect_virtual=dict( @@ -964,7 +964,7 @@ class ArgumentSpec(object): options=dict( address=dict(required=True), netmask=dict(required=True), - port=dict(default=80) + port=dict(type='int', default=80) ) ), service_environment=dict(), @@ -978,11 +978,12 @@ class ArgumentSpec(object): name=dict(default='clientssl'), cert_key_chain=dict( type='raw', + no_log=True, options=dict( cert=dict(), - key=dict(), + key=dict(no_log=True), chain=dict(), - passphrase=dict() + passphrase=dict(no_log=True) ) ) ) diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_https_waf.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_https_waf.py index 2524b0a29..8ca90f0ea 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_https_waf.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_application_https_waf.py @@ -42,7 +42,7 @@ options: port: description: - The port of the server. - type: str + type: int default: 80 inbound_virtual: description: @@ -70,7 +70,7 @@ options: - The port on which the virtual listens for connections. - When creating a new application, if this parameter is not specified, the default value is C(443). - type: str + type: int default: 443 redirect_virtual: description: @@ -100,7 +100,7 @@ options: - The port on which the virtual listens for connections. - When creating a new application, if this parameter is not specified, the default value of C(80) will be used. - type: str + type: int default: 80 client_ssl_profile: description: @@ -191,7 +191,7 @@ author: ''' EXAMPLES = r''' -- name: Load balance an HTTPS application on port 443 with a WAF using ASM +- name: BIG-IQ CM an HTTPS application on port 443 with a WAF using ASM bigiq_application_https_waf: name: my-app description: Redirect HTTP to HTTPS via WAF @@ -211,7 +211,7 @@ EXAMPLES = r''' port: 80 provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin state: present delegate_to: localhost @@ -973,7 +973,7 @@ class ArgumentSpec(object): elements='dict', options=dict( address=dict(required=True), - port=dict(default=80) + port=dict(type='int', default=80) ) ), inbound_virtual=dict( @@ -981,7 +981,7 @@ class ArgumentSpec(object): options=dict( address=dict(required=True), netmask=dict(required=True), - port=dict(default=443) + port=dict(type='int', default=443) ) ), redirect_virtual=dict( @@ -989,7 +989,7 @@ class ArgumentSpec(object): options=dict( address=dict(required=True), netmask=dict(required=True), - port=dict(default=80) + port=dict(type='int', default=80) ) ), service_environment=dict(), @@ -1003,11 +1003,12 @@ class ArgumentSpec(object): name=dict(default='clientssl'), cert_key_chain=dict( type='raw', + no_log=True, options=dict( cert=dict(), - key=dict(), + key=dict(no_log=True), chain=dict(), - passphrase=dict() + passphrase=dict(no_log=True) ) ) ) diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_device_discovery.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_device_discovery.py index 91b5dd6b1..7b559db52 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_device_discovery.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_device_discovery.py @@ -18,6 +18,7 @@ options: device_address: description: - The IP address of the BIG-IP device to be imported/managed. + - For this module, C(provider) block should point to C(BIG-IQ) credentials type: str required: True device_username: @@ -161,6 +162,7 @@ extends_documentation_fragment: f5networks.f5_modules.f5 notes: - BIG-IQ >= 6.1.0. - This module does not support atomic removal of discovered modules on the device. + - Provider should point to the BIG-IQ credentials author: - Wojciech Wypior (@wojtek0806) ''' @@ -177,7 +179,7 @@ EXAMPLES = r''' - shared_security provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin delegate_to: localhost @@ -190,7 +192,7 @@ EXAMPLES = r''' conflict_policy: use_bigip provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin delegate_to: localhost @@ -202,10 +204,10 @@ EXAMPLES = r''' - afm - dns - shared_security - force: yes + force: true provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin delegate_to: localhost @@ -215,7 +217,7 @@ EXAMPLES = r''' state: absent provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin delegate_to: localhost ''' diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_device_info.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_device_info.py index de593a6c4..a4f32a925 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_device_info.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_device_info.py @@ -65,7 +65,7 @@ EXAMPLES = r''' gather_subset: - all provider: - server: lb.mydomain.com + server: cm.mydomain.com user: admin password: secret delegate_to: localhost @@ -76,7 +76,7 @@ EXAMPLES = r''' - all - "!trunks" provider: - server: lb.mydomain.com + server: cm.mydomain.com user: admin password: secret delegate_to: localhost diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_regkey_license.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_regkey_license.py index 5475afa98..5b55dbdb5 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_regkey_license.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_regkey_license.py @@ -68,10 +68,10 @@ EXAMPLES = r''' bigiq_regkey_license: regkey_pool: foo-pool license_key: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX - accept_eula: yes + accept_eula: true provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin delegate_to: localhost @@ -82,10 +82,10 @@ EXAMPLES = r''' addon_keys: - YYYY-YYY-YYY - ZZZZ-ZZZ-ZZZ - accept_eula: yes + accept_eula: true provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin delegate_to: localhost @@ -96,7 +96,7 @@ EXAMPLES = r''' state: absent provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin delegate_to: localhost ''' @@ -461,7 +461,7 @@ class ArgumentSpec(object): def __init__(self): self.supports_check_mode = True argument_spec = dict( - regkey_pool=dict(required=True), + regkey_pool=dict(required=True, no_log=True), license_key=dict(required=True, no_log=True), addon_keys=dict(type='list', elements='str', no_log=True), description=dict(), diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_regkey_license_assignment.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_regkey_license_assignment.py index 9711eda8f..d10bf4404 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_regkey_license_assignment.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_regkey_license_assignment.py @@ -83,14 +83,14 @@ EXAMPLES = r''' pool: my-regkey-pool key: XXXX-XXXX-XXXX-XXXX-XXXX device: 1.1.1.1 - managed: no + managed: false device_username: admin device_password: secret state: present provider: user: admin password: secret - server: lb.mydomain.com + server: cm.mydomain.com delegate_to: localhost - name: Register a managed device, by name @@ -98,12 +98,12 @@ EXAMPLES = r''' pool: my-regkey-pool key: XXXX-XXXX-XXXX-XXXX-XXXX device: bigi1.foo.com - managed: yes + managed: true state: present provider: user: admin password: secret - server: lb.mydomain.com + server: cm.mydomain.com delegate_to: localhost - name: Register a managed device, by UUID @@ -111,12 +111,12 @@ EXAMPLES = r''' pool: my-regkey-pool key: XXXX-XXXX-XXXX-XXXX-XXXX device: 7141a063-7cf8-423f-9829-9d40599fa3e0 - managed: yes + managed: true state: present provider: user: admin password: secret - server: lb.mydomain.com + server: cm.mydomain.com delegate_to: localhost ''' diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_regkey_pool.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_regkey_pool.py index f1eb5578e..7ce51a45a 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_regkey_pool.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_regkey_pool.py @@ -56,7 +56,7 @@ EXAMPLES = r''' provider: user: admin password: secret - server: lb.mydomain.com + server: cm.mydomain.com delegate_to: localhost ''' diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_utility_license.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_utility_license.py index d72defb65..b522ff31e 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_utility_license.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_utility_license.py @@ -50,12 +50,12 @@ EXAMPLES = r''' - name: Add a utility license to the system bigiq_utility_license: license_key: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX - accept_eula: yes + accept_eula: true state: present provider: user: admin password: secret - server: lb.mydomain.com + server: cm.mydomain.com delegate_to: localhost - name: Remove a utility license from the system @@ -65,7 +65,7 @@ EXAMPLES = r''' provider: user: admin password: secret - server: lb.mydomain.com + server: cm.mydomain.com delegate_to: localhost ''' diff --git a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_utility_license_assignment.py b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_utility_license_assignment.py index 7be9af853..c9f98419c 100644 --- a/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_utility_license_assignment.py +++ b/ansible_collections/f5networks/f5_modules/plugins/modules/bigiq_utility_license_assignment.py @@ -96,13 +96,13 @@ EXAMPLES = r''' key: XXXX-XXXX-XXXX-XXXX-XXXX offering: F5-BIG-MSP-AFM-10G-LIC device: 1.1.1.1 - managed: no + managed: false device_username: admin device_password: secret state: present provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin delegate_to: localhost @@ -111,11 +111,11 @@ EXAMPLES = r''' key: XXXX-XXXX-XXXX-XXXX-XXXX offering: F5-BIG-MSP-AFM-10G-LIC device: bigi1.foo.com - managed: yes + managed: true state: present provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin delegate_to: localhost @@ -124,11 +124,11 @@ EXAMPLES = r''' key: XXXX-XXXX-XXXX-XXXX-XXXX offering: F5-BIG-MSP-AFM-10G-LIC device: 7141a063-7cf8-423f-9829-9d40599fa3e0 - managed: yes + managed: true state: present provider: password: secret - server: lb.mydomain.com + server: cm.mydomain.com user: admin delegate_to: localhost ''' diff --git a/ansible_collections/f5networks/f5_modules/tests/__init__.py b/ansible_collections/f5networks/f5_modules/tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/__init__.py +++ /dev/null diff --git a/ansible_collections/f5networks/f5_modules/tests/config.yml b/ansible_collections/f5networks/f5_modules/tests/config.yml deleted file mode 100644 index a6e52ca89..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/config.yml +++ /dev/null @@ -1,2 +0,0 @@ -modules: - python_requires: '>=3.8'
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/requirements.yml b/ansible_collections/f5networks/f5_modules/tests/requirements.yml deleted file mode 100644 index 8a46626d7..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/requirements.yml +++ /dev/null @@ -1,3 +0,0 @@ -integration_tests_dependencies: [] -unit_tests_dependencies: -- community.general diff --git a/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.10.txt b/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.10.txt deleted file mode 100644 index ebca9f061..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.10.txt +++ /dev/null @@ -1,44 +0,0 @@ -plugins/modules/bigip_firewall_address_list.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_firewall_log_profile_network.py validate-modules:implied-parameter-type-mismatch -plugins/modules/bigip_gtm_pool_member.py validate-modules:undocumented-parameter -plugins/modules/bigip_gtm_pool_member.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_gtm_pool_member.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_gtm_pool_member.py validate-modules:doc-missing-type -plugins/modules/bigip_gtm_pool_member.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool.py validate-modules:undocumented-parameter -plugins/modules/bigip_pool.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_pool.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_pool.py validate-modules:doc-missing-type -plugins/modules/bigip_pool.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool.py validate-modules:doc-elements-mismatch -plugins/modules/bigip_pool_member.py validate-modules:undocumented-parameter -plugins/modules/bigip_pool_member.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_pool_member.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_pool_member.py validate-modules:doc-missing-type -plugins/modules/bigip_pool_member.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool_member.py validate-modules:doc-required-mismatch -plugins/modules/bigip_pool_member.py validate-modules:doc-elements-mismatch -plugins/action/bigip.py action-plugin-docs # undocumented action plugin to fix, existed before sanity test was added -plugins/action/bigiq.py action-plugin-docs # undocumented action plugin to fix, existed before sanity test was added -plugins/modules/bigip_imish_config.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_imish_config.py validate-modules:undocumented-parameter -plugins/modules/bigip_ucs_fetch.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_ucs_fetch.py validate-modules:undocumented-parameter -plugins/modules/bigip_imish_config.py validate-modules:doc-default-does-not-match-spec -plugins/modules/bigip_ucs_fetch.py validate-modules:doc-default-does-not-match-spec -plugins/modules/bigip_data_group.py validate-modules:no-log-needed -plugins/modules/bigip_device_license.py validate-modules:no-log-needed -plugins/modules/bigip_device_auth_ldap.py validate-modules:no-log-needed -plugins/modules/bigip_dns_nameserver.py validate-modules:no-log-needed -plugins/modules/bigip_dns_zone.py validate-modules:no-log-needed -plugins/modules/bigip_gtm_monitor_https.py validate-modules:no-log-needed -plugins/modules/bigip_ike_peer.py validate-modules:no-log-needed -plugins/modules/bigip_password_policy.py validate-modules:no-log-needed -plugins/modules/bigip_profile_client_ssl.py validate-modules:no-log-needed -plugins/modules/bigip_profile_server_ssl.py validate-modules:no-log-needed -plugins/modules/bigip_ssl_ocsp.py validate-modules:no-log-needed -plugins/modules/bigip_sys_db.py validate-modules:no-log-needed -plugins/modules/bigip_tunnel.py validate-modules:no-log-needed -plugins/modules/bigiq_application_https_offload.py validate-modules:no-log-needed -plugins/modules/bigiq_application_https_waf.py validate-modules:no-log-needed -plugins/modules/bigiq_regkey_license.py validate-modules:no-log-needed diff --git a/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.11.txt b/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.11.txt deleted file mode 100644 index ebca9f061..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.11.txt +++ /dev/null @@ -1,44 +0,0 @@ -plugins/modules/bigip_firewall_address_list.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_firewall_log_profile_network.py validate-modules:implied-parameter-type-mismatch -plugins/modules/bigip_gtm_pool_member.py validate-modules:undocumented-parameter -plugins/modules/bigip_gtm_pool_member.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_gtm_pool_member.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_gtm_pool_member.py validate-modules:doc-missing-type -plugins/modules/bigip_gtm_pool_member.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool.py validate-modules:undocumented-parameter -plugins/modules/bigip_pool.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_pool.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_pool.py validate-modules:doc-missing-type -plugins/modules/bigip_pool.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool.py validate-modules:doc-elements-mismatch -plugins/modules/bigip_pool_member.py validate-modules:undocumented-parameter -plugins/modules/bigip_pool_member.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_pool_member.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_pool_member.py validate-modules:doc-missing-type -plugins/modules/bigip_pool_member.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool_member.py validate-modules:doc-required-mismatch -plugins/modules/bigip_pool_member.py validate-modules:doc-elements-mismatch -plugins/action/bigip.py action-plugin-docs # undocumented action plugin to fix, existed before sanity test was added -plugins/action/bigiq.py action-plugin-docs # undocumented action plugin to fix, existed before sanity test was added -plugins/modules/bigip_imish_config.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_imish_config.py validate-modules:undocumented-parameter -plugins/modules/bigip_ucs_fetch.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_ucs_fetch.py validate-modules:undocumented-parameter -plugins/modules/bigip_imish_config.py validate-modules:doc-default-does-not-match-spec -plugins/modules/bigip_ucs_fetch.py validate-modules:doc-default-does-not-match-spec -plugins/modules/bigip_data_group.py validate-modules:no-log-needed -plugins/modules/bigip_device_license.py validate-modules:no-log-needed -plugins/modules/bigip_device_auth_ldap.py validate-modules:no-log-needed -plugins/modules/bigip_dns_nameserver.py validate-modules:no-log-needed -plugins/modules/bigip_dns_zone.py validate-modules:no-log-needed -plugins/modules/bigip_gtm_monitor_https.py validate-modules:no-log-needed -plugins/modules/bigip_ike_peer.py validate-modules:no-log-needed -plugins/modules/bigip_password_policy.py validate-modules:no-log-needed -plugins/modules/bigip_profile_client_ssl.py validate-modules:no-log-needed -plugins/modules/bigip_profile_server_ssl.py validate-modules:no-log-needed -plugins/modules/bigip_ssl_ocsp.py validate-modules:no-log-needed -plugins/modules/bigip_sys_db.py validate-modules:no-log-needed -plugins/modules/bigip_tunnel.py validate-modules:no-log-needed -plugins/modules/bigiq_application_https_offload.py validate-modules:no-log-needed -plugins/modules/bigiq_application_https_waf.py validate-modules:no-log-needed -plugins/modules/bigiq_regkey_license.py validate-modules:no-log-needed diff --git a/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.12.txt b/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.12.txt deleted file mode 100644 index ebca9f061..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.12.txt +++ /dev/null @@ -1,44 +0,0 @@ -plugins/modules/bigip_firewall_address_list.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_firewall_log_profile_network.py validate-modules:implied-parameter-type-mismatch -plugins/modules/bigip_gtm_pool_member.py validate-modules:undocumented-parameter -plugins/modules/bigip_gtm_pool_member.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_gtm_pool_member.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_gtm_pool_member.py validate-modules:doc-missing-type -plugins/modules/bigip_gtm_pool_member.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool.py validate-modules:undocumented-parameter -plugins/modules/bigip_pool.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_pool.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_pool.py validate-modules:doc-missing-type -plugins/modules/bigip_pool.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool.py validate-modules:doc-elements-mismatch -plugins/modules/bigip_pool_member.py validate-modules:undocumented-parameter -plugins/modules/bigip_pool_member.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_pool_member.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_pool_member.py validate-modules:doc-missing-type -plugins/modules/bigip_pool_member.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool_member.py validate-modules:doc-required-mismatch -plugins/modules/bigip_pool_member.py validate-modules:doc-elements-mismatch -plugins/action/bigip.py action-plugin-docs # undocumented action plugin to fix, existed before sanity test was added -plugins/action/bigiq.py action-plugin-docs # undocumented action plugin to fix, existed before sanity test was added -plugins/modules/bigip_imish_config.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_imish_config.py validate-modules:undocumented-parameter -plugins/modules/bigip_ucs_fetch.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_ucs_fetch.py validate-modules:undocumented-parameter -plugins/modules/bigip_imish_config.py validate-modules:doc-default-does-not-match-spec -plugins/modules/bigip_ucs_fetch.py validate-modules:doc-default-does-not-match-spec -plugins/modules/bigip_data_group.py validate-modules:no-log-needed -plugins/modules/bigip_device_license.py validate-modules:no-log-needed -plugins/modules/bigip_device_auth_ldap.py validate-modules:no-log-needed -plugins/modules/bigip_dns_nameserver.py validate-modules:no-log-needed -plugins/modules/bigip_dns_zone.py validate-modules:no-log-needed -plugins/modules/bigip_gtm_monitor_https.py validate-modules:no-log-needed -plugins/modules/bigip_ike_peer.py validate-modules:no-log-needed -plugins/modules/bigip_password_policy.py validate-modules:no-log-needed -plugins/modules/bigip_profile_client_ssl.py validate-modules:no-log-needed -plugins/modules/bigip_profile_server_ssl.py validate-modules:no-log-needed -plugins/modules/bigip_ssl_ocsp.py validate-modules:no-log-needed -plugins/modules/bigip_sys_db.py validate-modules:no-log-needed -plugins/modules/bigip_tunnel.py validate-modules:no-log-needed -plugins/modules/bigiq_application_https_offload.py validate-modules:no-log-needed -plugins/modules/bigiq_application_https_waf.py validate-modules:no-log-needed -plugins/modules/bigiq_regkey_license.py validate-modules:no-log-needed diff --git a/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.13.txt b/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.13.txt deleted file mode 100644 index 124bdea5c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.13.txt +++ /dev/null @@ -1,53 +0,0 @@ -plugins/modules/bigip_firewall_address_list.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_firewall_log_profile_network.py validate-modules:implied-parameter-type-mismatch -plugins/modules/bigip_gtm_pool_member.py validate-modules:undocumented-parameter -plugins/modules/bigip_gtm_pool_member.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_gtm_pool_member.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_gtm_pool_member.py validate-modules:doc-missing-type -plugins/modules/bigip_gtm_pool_member.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool.py validate-modules:undocumented-parameter -plugins/modules/bigip_pool.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_pool.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_pool.py validate-modules:doc-missing-type -plugins/modules/bigip_pool.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool.py validate-modules:doc-elements-mismatch -plugins/modules/bigip_pool_member.py validate-modules:undocumented-parameter -plugins/modules/bigip_pool_member.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_pool_member.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_pool_member.py validate-modules:doc-missing-type -plugins/modules/bigip_pool_member.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool_member.py validate-modules:doc-required-mismatch -plugins/modules/bigip_pool_member.py validate-modules:doc-elements-mismatch -plugins/action/bigip.py action-plugin-docs # undocumented action plugin to fix, existed before sanity test was added -plugins/action/bigiq.py action-plugin-docs # undocumented action plugin to fix, existed before sanity test was added -plugins/modules/bigip_imish_config.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_imish_config.py validate-modules:undocumented-parameter -plugins/modules/bigip_imish_config.py validate-modules:doc-default-does-not-match-spec -plugins/modules/bigip_ucs_fetch.py validate-modules:doc-default-does-not-match-spec -plugins/modules/bigip_ucs_fetch.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_ucs_fetch.py validate-modules:undocumented-parameter -plugins/modules/bigip_data_group.py validate-modules:no-log-needed -plugins/modules/bigip_device_license.py validate-modules:no-log-needed -plugins/modules/bigip_device_auth_ldap.py validate-modules:no-log-needed -plugins/modules/bigip_dns_nameserver.py validate-modules:no-log-needed -plugins/modules/bigip_dns_zone.py validate-modules:no-log-needed -plugins/modules/bigip_gtm_monitor_https.py validate-modules:no-log-needed -plugins/modules/bigip_ike_peer.py validate-modules:no-log-needed -plugins/modules/bigip_password_policy.py validate-modules:no-log-needed -plugins/modules/bigip_profile_client_ssl.py validate-modules:no-log-needed -plugins/modules/bigip_profile_server_ssl.py validate-modules:no-log-needed -plugins/modules/bigip_ssl_ocsp.py validate-modules:no-log-needed -plugins/modules/bigip_sys_db.py validate-modules:no-log-needed -plugins/modules/bigip_tunnel.py validate-modules:no-log-needed -plugins/modules/bigiq_application_https_offload.py validate-modules:no-log-needed -plugins/modules/bigiq_application_https_waf.py validate-modules:no-log-needed -plugins/modules/bigiq_regkey_license.py validate-modules:no-log-needed -plugins/modules/bigip_imish_config.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_https_offload.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_https_waf.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_fasthttp.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_fastl4_tcp.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_fastl4_udp.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_http.py validate-modules:incompatible-default-type -plugins/lookup/bigiq_license.py validate-modules:invalid-documentation -plugins/lookup/license_hopper.py validate-modules:invalid-documentation diff --git a/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.14.txt b/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.14.txt deleted file mode 100644 index fc660532b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.14.txt +++ /dev/null @@ -1,53 +0,0 @@ -plugins/modules/bigip_firewall_address_list.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_firewall_log_profile_network.py validate-modules:implied-parameter-type-mismatch -plugins/modules/bigip_gtm_pool_member.py validate-modules:undocumented-parameter -plugins/modules/bigip_gtm_pool_member.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_gtm_pool_member.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_gtm_pool_member.py validate-modules:doc-missing-type -plugins/modules/bigip_gtm_pool_member.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool.py validate-modules:undocumented-parameter -plugins/modules/bigip_pool.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_pool.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_pool.py validate-modules:doc-missing-type -plugins/modules/bigip_pool.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool.py validate-modules:doc-elements-mismatch -plugins/modules/bigip_pool_member.py validate-modules:undocumented-parameter -plugins/modules/bigip_pool_member.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_pool_member.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_pool_member.py validate-modules:doc-missing-type -plugins/modules/bigip_pool_member.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool_member.py validate-modules:doc-required-mismatch -plugins/modules/bigip_pool_member.py validate-modules:doc-elements-mismatch -plugins/action/bigip.py action-plugin-docs # undocumented action plugin to fix, existed before sanity test was added -plugins/action/bigiq.py action-plugin-docs # undocumented action plugin to fix, existed before sanity test was added -plugins/modules/bigip_imish_config.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_imish_config.py validate-modules:undocumented-parameter -plugins/modules/bigip_ucs_fetch.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_ucs_fetch.py validate-modules:undocumented-parameter -plugins/modules/bigip_imish_config.py validate-modules:doc-default-does-not-match-spec -plugins/modules/bigip_ucs_fetch.py validate-modules:doc-default-does-not-match-spec -plugins/modules/bigip_data_group.py validate-modules:no-log-needed -plugins/modules/bigip_device_license.py validate-modules:no-log-needed -plugins/modules/bigip_device_auth_ldap.py validate-modules:no-log-needed -plugins/modules/bigip_dns_nameserver.py validate-modules:no-log-needed -plugins/modules/bigip_dns_zone.py validate-modules:no-log-needed -plugins/modules/bigip_gtm_monitor_https.py validate-modules:no-log-needed -plugins/modules/bigip_ike_peer.py validate-modules:no-log-needed -plugins/modules/bigip_password_policy.py validate-modules:no-log-needed -plugins/modules/bigip_profile_client_ssl.py validate-modules:no-log-needed -plugins/modules/bigip_profile_server_ssl.py validate-modules:no-log-needed -plugins/modules/bigip_ssl_ocsp.py validate-modules:no-log-needed -plugins/modules/bigip_sys_db.py validate-modules:no-log-needed -plugins/modules/bigip_tunnel.py validate-modules:no-log-needed -plugins/modules/bigiq_application_https_offload.py validate-modules:no-log-needed -plugins/modules/bigiq_application_https_waf.py validate-modules:no-log-needed -plugins/modules/bigiq_regkey_license.py validate-modules:no-log-needed -plugins/modules/bigip_imish_config.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_https_offload.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_https_waf.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_fasthttp.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_fastl4_tcp.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_fastl4_udp.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_http.py validate-modules:incompatible-default-type -plugins/lookup/bigiq_license.py validate-modules:invalid-documentation -plugins/lookup/license_hopper.py validate-modules:invalid-documentation diff --git a/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.15.txt b/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.15.txt deleted file mode 100644 index fc660532b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.15.txt +++ /dev/null @@ -1,53 +0,0 @@ -plugins/modules/bigip_firewall_address_list.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_firewall_log_profile_network.py validate-modules:implied-parameter-type-mismatch -plugins/modules/bigip_gtm_pool_member.py validate-modules:undocumented-parameter -plugins/modules/bigip_gtm_pool_member.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_gtm_pool_member.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_gtm_pool_member.py validate-modules:doc-missing-type -plugins/modules/bigip_gtm_pool_member.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool.py validate-modules:undocumented-parameter -plugins/modules/bigip_pool.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_pool.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_pool.py validate-modules:doc-missing-type -plugins/modules/bigip_pool.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool.py validate-modules:doc-elements-mismatch -plugins/modules/bigip_pool_member.py validate-modules:undocumented-parameter -plugins/modules/bigip_pool_member.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_pool_member.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_pool_member.py validate-modules:doc-missing-type -plugins/modules/bigip_pool_member.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool_member.py validate-modules:doc-required-mismatch -plugins/modules/bigip_pool_member.py validate-modules:doc-elements-mismatch -plugins/action/bigip.py action-plugin-docs # undocumented action plugin to fix, existed before sanity test was added -plugins/action/bigiq.py action-plugin-docs # undocumented action plugin to fix, existed before sanity test was added -plugins/modules/bigip_imish_config.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_imish_config.py validate-modules:undocumented-parameter -plugins/modules/bigip_ucs_fetch.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_ucs_fetch.py validate-modules:undocumented-parameter -plugins/modules/bigip_imish_config.py validate-modules:doc-default-does-not-match-spec -plugins/modules/bigip_ucs_fetch.py validate-modules:doc-default-does-not-match-spec -plugins/modules/bigip_data_group.py validate-modules:no-log-needed -plugins/modules/bigip_device_license.py validate-modules:no-log-needed -plugins/modules/bigip_device_auth_ldap.py validate-modules:no-log-needed -plugins/modules/bigip_dns_nameserver.py validate-modules:no-log-needed -plugins/modules/bigip_dns_zone.py validate-modules:no-log-needed -plugins/modules/bigip_gtm_monitor_https.py validate-modules:no-log-needed -plugins/modules/bigip_ike_peer.py validate-modules:no-log-needed -plugins/modules/bigip_password_policy.py validate-modules:no-log-needed -plugins/modules/bigip_profile_client_ssl.py validate-modules:no-log-needed -plugins/modules/bigip_profile_server_ssl.py validate-modules:no-log-needed -plugins/modules/bigip_ssl_ocsp.py validate-modules:no-log-needed -plugins/modules/bigip_sys_db.py validate-modules:no-log-needed -plugins/modules/bigip_tunnel.py validate-modules:no-log-needed -plugins/modules/bigiq_application_https_offload.py validate-modules:no-log-needed -plugins/modules/bigiq_application_https_waf.py validate-modules:no-log-needed -plugins/modules/bigiq_regkey_license.py validate-modules:no-log-needed -plugins/modules/bigip_imish_config.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_https_offload.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_https_waf.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_fasthttp.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_fastl4_tcp.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_fastl4_udp.py validate-modules:incompatible-default-type -plugins/modules/bigiq_application_http.py validate-modules:incompatible-default-type -plugins/lookup/bigiq_license.py validate-modules:invalid-documentation -plugins/lookup/license_hopper.py validate-modules:invalid-documentation diff --git a/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.9.txt b/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.9.txt deleted file mode 100644 index 407f95b00..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/sanity/ignore-2.9.txt +++ /dev/null @@ -1,41 +0,0 @@ -plugins/modules/bigip_firewall_address_list.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_firewall_log_profile_network.py validate-modules:implied-parameter-type-mismatch -plugins/modules/bigip_gtm_pool_member.py validate-modules:undocumented-parameter -plugins/modules/bigip_gtm_pool_member.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_gtm_pool_member.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_gtm_pool_member.py validate-modules:doc-missing-type -plugins/modules/bigip_gtm_pool_member.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool.py validate-modules:undocumented-parameter -plugins/modules/bigip_pool.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_pool.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_pool.py validate-modules:doc-missing-type -plugins/modules/bigip_pool.py validate-modules:missing-suboption-docs -plugins/modules/bigip_pool_member.py validate-modules:undocumented-parameter -plugins/modules/bigip_pool_member.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/bigip_pool_member.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_pool_member.py validate-modules:doc-missing-type -plugins/modules/bigip_pool_member.py validate-modules:missing-suboption-docs -plugins/action/bigip.py action-plugin-docs # undocumented action plugin to fix, existed before sanity test was added -plugins/action/bigiq.py action-plugin-docs # undocumented action plugin to fix, existed before sanity test was added -plugins/modules/bigip_imish_config.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_imish_config.py validate-modules:undocumented-parameter -plugins/modules/bigip_ucs_fetch.py validate-modules:parameter-type-not-in-doc -plugins/modules/bigip_ucs_fetch.py validate-modules:undocumented-parameter -plugins/modules/bigip_imish_config.py validate-modules:doc-default-does-not-match-spec -plugins/modules/bigip_ucs_fetch.py validate-modules:doc-default-does-not-match-spec -plugins/modules/bigip_data_group.py validate-modules:no-log-needed -plugins/modules/bigip_device_license.py validate-modules:no-log-needed -plugins/modules/bigip_device_auth_ldap.py validate-modules:no-log-needed -plugins/modules/bigip_dns_nameserver.py validate-modules:no-log-needed -plugins/modules/bigip_dns_zone.py validate-modules:no-log-needed -plugins/modules/bigip_gtm_monitor_https.py validate-modules:no-log-needed -plugins/modules/bigip_ike_peer.py validate-modules:no-log-needed -plugins/modules/bigip_password_policy.py validate-modules:no-log-needed -plugins/modules/bigip_profile_client_ssl.py validate-modules:no-log-needed -plugins/modules/bigip_profile_server_ssl.py validate-modules:no-log-needed -plugins/modules/bigip_ssl_ocsp.py validate-modules:no-log-needed -plugins/modules/bigip_sys_db.py validate-modules:no-log-needed -plugins/modules/bigip_tunnel.py validate-modules:no-log-needed -plugins/modules/bigiq_application_https_offload.py validate-modules:no-log-needed -plugins/modules/bigiq_application_https_waf.py validate-modules:no-log-needed -plugins/modules/bigiq_regkey_license.py validate-modules:no-log-needed diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/__init__.py b/ansible_collections/f5networks/f5_modules/tests/unit/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/__init__.py +++ /dev/null diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/compat/__init__.py b/ansible_collections/f5networks/f5_modules/tests/unit/compat/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/compat/__init__.py +++ /dev/null diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/compat/builtins.py b/ansible_collections/f5networks/f5_modules/tests/unit/compat/builtins.py deleted file mode 100644 index d25715528..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/compat/builtins.py +++ /dev/null @@ -1,20 +0,0 @@ -# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com> -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/compat/mock.py b/ansible_collections/f5networks/f5_modules/tests/unit/compat/mock.py deleted file mode 100644 index 0972cd2e8..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/compat/mock.py +++ /dev/null @@ -1,122 +0,0 @@ -# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com> -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -''' -Compat module for Python3.x's unittest.mock module -''' -import sys - -# Python 2.7 - -# Note: Could use the pypi mock library on python3.x as well as python2.x. It -# is the same as the python3 stdlib mock library - -try: - # Allow wildcard import because we really do want to import all of mock's - # symbols into this compat shim - # pylint: disable=wildcard-import,unused-wildcard-import - from unittest.mock import * -except ImportError: - # Python 2 - # pylint: disable=wildcard-import,unused-wildcard-import - try: - from mock import * - except ImportError: - print('You need the mock library installed on python2.x to run tests') - - -# Prior to 3.4.4, mock_open cannot handle binary read_data -if sys.version_info >= (3,) and sys.version_info < (3, 4, 4): - file_spec = None - - def _iterate_read_data(read_data): - # Helper for mock_open: - # Retrieve lines from read_data via a generator so that separate calls to - # readline, read, and readlines are properly interleaved - sep = b'\n' if isinstance(read_data, bytes) else '\n' - data_as_list = [l + sep for l in read_data.split(sep)] - - if data_as_list[-1] == sep: - # If the last line ended in a newline, the list comprehension will have an - # extra entry that's just a newline. Remove this. - data_as_list = data_as_list[:-1] - else: - # If there wasn't an extra newline by itself, then the file being - # emulated doesn't have a newline to end the last line remove the - # newline that our naive format() added - data_as_list[-1] = data_as_list[-1][:-1] - - for line in data_as_list: - yield line - - def mock_open(mock=None, read_data=''): - """ - A helper function to create a mock to replace the use of `open`. It works - for `open` called directly or used as a context manager. - - The `mock` argument is the mock object to configure. If `None` (the - default) then a `MagicMock` will be created for you, with the API limited - to methods or attributes available on standard file handles. - - `read_data` is a string for the `read` methoddline`, and `readlines` of the - file handle to return. This is an empty string by default. - """ - def _readlines_side_effect(*args, **kwargs): - if handle.readlines.return_value is not None: - return handle.readlines.return_value - return list(_data) - - def _read_side_effect(*args, **kwargs): - if handle.read.return_value is not None: - return handle.read.return_value - return type(read_data)().join(_data) - - def _readline_side_effect(): - if handle.readline.return_value is not None: - while True: - yield handle.readline.return_value - for line in _data: - yield line - - global file_spec - if file_spec is None: - import _io - file_spec = list(set(dir(_io.TextIOWrapper)).union(set(dir(_io.BytesIO)))) - - if mock is None: - mock = MagicMock(name='open', spec=open) - - handle = MagicMock(spec=file_spec) - handle.__enter__.return_value = handle - - _data = _iterate_read_data(read_data) - - handle.write.return_value = None - handle.read.return_value = None - handle.readline.return_value = None - handle.readlines.return_value = None - - handle.read.side_effect = _read_side_effect - handle.readline.side_effect = _readline_side_effect() - handle.readlines.side_effect = _readlines_side_effect - - mock.return_value = handle - return mock diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/compat/unittest.py b/ansible_collections/f5networks/f5_modules/tests/unit/compat/unittest.py deleted file mode 100644 index 98f08ad6a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/compat/unittest.py +++ /dev/null @@ -1,38 +0,0 @@ -# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com> -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -''' -Compat module for Python2.7's unittest module -''' - -import sys - -# Allow wildcard import because we really do want to import all of -# unittests's symbols into this compat shim -# pylint: disable=wildcard-import,unused-wildcard-import -if sys.version_info < (2, 7): - try: - # Need unittest2 on python2.6 - from unittest2 import * - except ImportError: - print('You need unittest2 installed on python2.6.x to run tests') -else: - from unittest import * diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/mock/__init__.py b/ansible_collections/f5networks/f5_modules/tests/unit/mock/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/mock/__init__.py +++ /dev/null diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/mock/loader.py b/ansible_collections/f5networks/f5_modules/tests/unit/mock/loader.py deleted file mode 100644 index e5dff78c1..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/mock/loader.py +++ /dev/null @@ -1,116 +0,0 @@ -# (c) 2012-2014, Michael DeHaan <michael.dehaan@gmail.com> -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os - -from ansible.errors import AnsibleParserError -from ansible.parsing.dataloader import DataLoader -from ansible.module_utils._text import to_bytes, to_text - - -class DictDataLoader(DataLoader): - - def __init__(self, file_mapping=None): - file_mapping = {} if file_mapping is None else file_mapping - assert type(file_mapping) == dict - - super(DictDataLoader, self).__init__() - - self._file_mapping = file_mapping - self._build_known_directories() - self._vault_secrets = None - - def load_from_file(self, path, cache=True, unsafe=False): - path = to_text(path) - if path in self._file_mapping: - return self.load(self._file_mapping[path], path) - return None - - # TODO: the real _get_file_contents returns a bytestring, so we actually convert the - # unicode/text it's created with to utf-8 - def _get_file_contents(self, file_name): - path = to_text(file_name) - if path in self._file_mapping: - return (to_bytes(self._file_mapping[path]), False) - else: - raise AnsibleParserError("file not found: %s" % path) - - def path_exists(self, path): - path = to_text(path) - return path in self._file_mapping or path in self._known_directories - - def is_file(self, path): - path = to_text(path) - return path in self._file_mapping - - def is_directory(self, path): - path = to_text(path) - return path in self._known_directories - - def list_directory(self, path): - ret = [] - path = to_text(path) - for x in (list(self._file_mapping.keys()) + self._known_directories): - if x.startswith(path): - if os.path.dirname(x) == path: - ret.append(os.path.basename(x)) - return ret - - def is_executable(self, path): - # FIXME: figure out a way to make paths return true for this - return False - - def _add_known_directory(self, directory): - if directory not in self._known_directories: - self._known_directories.append(directory) - - def _build_known_directories(self): - self._known_directories = [] - for path in self._file_mapping: - dirname = os.path.dirname(path) - while dirname not in ('/', ''): - self._add_known_directory(dirname) - dirname = os.path.dirname(dirname) - - def push(self, path, content): - rebuild_dirs = False - if path not in self._file_mapping: - rebuild_dirs = True - - self._file_mapping[path] = content - - if rebuild_dirs: - self._build_known_directories() - - def pop(self, path): - if path in self._file_mapping: - del self._file_mapping[path] - self._build_known_directories() - - def clear(self): - self._file_mapping = dict() - self._known_directories = [] - - def get_basedir(self): - return os.getcwd() - - def set_vault_secrets(self, vault_secrets): - self._vault_secrets = vault_secrets diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/mock/path.py b/ansible_collections/f5networks/f5_modules/tests/unit/mock/path.py deleted file mode 100644 index ec88f77f3..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/mock/path.py +++ /dev/null @@ -1,8 +0,0 @@ -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import MagicMock -from ansible.utils.path import unfrackpath - - -mock_unfrackpath_noop = MagicMock(spec_set=unfrackpath, side_effect=lambda x, *args, **kwargs: x) diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/mock/procenv.py b/ansible_collections/f5networks/f5_modules/tests/unit/mock/procenv.py deleted file mode 100644 index b04bfb7d7..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/mock/procenv.py +++ /dev/null @@ -1,90 +0,0 @@ -# (c) 2016, Matt Davis <mdavis@ansible.com> -# (c) 2016, Toshio Kuratomi <tkuratomi@ansible.com> -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import sys -import json - -from contextlib import contextmanager -from io import BytesIO, StringIO -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible.module_utils.six import PY3 -from ansible.module_utils._text import to_bytes - - -@contextmanager -def swap_stdin_and_argv(stdin_data='', argv_data=tuple()): - """ - context manager that temporarily masks the test runner's values for stdin and argv - """ - real_stdin = sys.stdin - real_argv = sys.argv - - if PY3: - fake_stream = StringIO(stdin_data) - fake_stream.buffer = BytesIO(to_bytes(stdin_data)) - else: - fake_stream = BytesIO(to_bytes(stdin_data)) - - try: - sys.stdin = fake_stream - sys.argv = argv_data - - yield - finally: - sys.stdin = real_stdin - sys.argv = real_argv - - -@contextmanager -def swap_stdout(): - """ - context manager that temporarily replaces stdout for tests that need to verify output - """ - old_stdout = sys.stdout - - if PY3: - fake_stream = StringIO() - else: - fake_stream = BytesIO() - - try: - sys.stdout = fake_stream - - yield fake_stream - finally: - sys.stdout = old_stdout - - -class ModuleTestCase(unittest.TestCase): - def setUp(self, module_args=None): - if module_args is None: - module_args = {'_ansible_remote_tmp': '/tmp', '_ansible_keep_remote_files': False} - - args = json.dumps(dict(ANSIBLE_MODULE_ARGS=module_args)) - - # unittest doesn't have a clean place to use a context manager, so we have to enter/exit manually - self.stdin_swap = swap_stdin_and_argv(stdin_data=args) - self.stdin_swap.__enter__() - - def tearDown(self): - # unittest doesn't have a clean place to use a context manager, so we have to enter/exit manually - self.stdin_swap.__exit__(None, None, None) diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/mock/vault_helper.py b/ansible_collections/f5networks/f5_modules/tests/unit/mock/vault_helper.py deleted file mode 100644 index dcce9c784..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/mock/vault_helper.py +++ /dev/null @@ -1,39 +0,0 @@ -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -from ansible.module_utils._text import to_bytes - -from ansible.parsing.vault import VaultSecret - - -class TextVaultSecret(VaultSecret): - '''A secret piece of text. ie, a password. Tracks text encoding. - - The text encoding of the text may not be the default text encoding so - we keep track of the encoding so we encode it to the same bytes.''' - - def __init__(self, text, encoding=None, errors=None, _bytes=None): - super(TextVaultSecret, self).__init__() - self.text = text - self.encoding = encoding or 'utf-8' - self._bytes = _bytes - self.errors = errors or 'strict' - - @property - def bytes(self): - '''The text encoded with encoding, unless we specifically set _bytes.''' - return self._bytes or to_bytes(self.text, encoding=self.encoding, errors=self.errors) diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/mock/yaml_helper.py b/ansible_collections/f5networks/f5_modules/tests/unit/mock/yaml_helper.py deleted file mode 100644 index 1ef172159..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/mock/yaml_helper.py +++ /dev/null @@ -1,124 +0,0 @@ -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import io -import yaml - -from ansible.module_utils.six import PY3 -from ansible.parsing.yaml.loader import AnsibleLoader -from ansible.parsing.yaml.dumper import AnsibleDumper - - -class YamlTestUtils(object): - """Mixin class to combine with a unittest.TestCase subclass.""" - def _loader(self, stream): - """Vault related tests will want to override this. - - Vault cases should setup a AnsibleLoader that has the vault password.""" - return AnsibleLoader(stream) - - def _dump_stream(self, obj, stream, dumper=None): - """Dump to a py2-unicode or py3-string stream.""" - if PY3: - return yaml.dump(obj, stream, Dumper=dumper) - else: - return yaml.dump(obj, stream, Dumper=dumper, encoding=None) - - def _dump_string(self, obj, dumper=None): - """Dump to a py2-unicode or py3-string""" - if PY3: - return yaml.dump(obj, Dumper=dumper) - else: - return yaml.dump(obj, Dumper=dumper, encoding=None) - - def _dump_load_cycle(self, obj): - # Each pass though a dump or load revs the 'generation' - # obj to yaml string - string_from_object_dump = self._dump_string(obj, dumper=AnsibleDumper) - - # wrap a stream/file like StringIO around that yaml - stream_from_object_dump = io.StringIO(string_from_object_dump) - loader = self._loader(stream_from_object_dump) - # load the yaml stream to create a new instance of the object (gen 2) - obj_2 = loader.get_data() - - # dump the gen 2 objects directory to strings - string_from_object_dump_2 = self._dump_string(obj_2, - dumper=AnsibleDumper) - - # The gen 1 and gen 2 yaml strings - self.assertEqual(string_from_object_dump, string_from_object_dump_2) - # the gen 1 (orig) and gen 2 py object - self.assertEqual(obj, obj_2) - - # again! gen 3... load strings into py objects - stream_3 = io.StringIO(string_from_object_dump_2) - loader_3 = self._loader(stream_3) - obj_3 = loader_3.get_data() - - string_from_object_dump_3 = self._dump_string(obj_3, dumper=AnsibleDumper) - - self.assertEqual(obj, obj_3) - # should be transitive, but... - self.assertEqual(obj_2, obj_3) - self.assertEqual(string_from_object_dump, string_from_object_dump_3) - - def _old_dump_load_cycle(self, obj): - '''Dump the passed in object to yaml, load it back up, dump again, compare.''' - stream = io.StringIO() - - yaml_string = self._dump_string(obj, dumper=AnsibleDumper) - self._dump_stream(obj, stream, dumper=AnsibleDumper) - - yaml_string_from_stream = stream.getvalue() - - # reset stream - stream.seek(0) - - loader = self._loader(stream) - # loader = AnsibleLoader(stream, vault_password=self.vault_password) - obj_from_stream = loader.get_data() - - stream_from_string = io.StringIO(yaml_string) - loader2 = self._loader(stream_from_string) - # loader2 = AnsibleLoader(stream_from_string, vault_password=self.vault_password) - obj_from_string = loader2.get_data() - - stream_obj_from_stream = io.StringIO() - stream_obj_from_string = io.StringIO() - - if PY3: - yaml.dump(obj_from_stream, stream_obj_from_stream, Dumper=AnsibleDumper) - yaml.dump(obj_from_stream, stream_obj_from_string, Dumper=AnsibleDumper) - else: - yaml.dump(obj_from_stream, stream_obj_from_stream, Dumper=AnsibleDumper, encoding=None) - yaml.dump(obj_from_stream, stream_obj_from_string, Dumper=AnsibleDumper, encoding=None) - - yaml_string_stream_obj_from_stream = stream_obj_from_stream.getvalue() - yaml_string_stream_obj_from_string = stream_obj_from_string.getvalue() - - stream_obj_from_stream.seek(0) - stream_obj_from_string.seek(0) - - if PY3: - yaml_string_obj_from_stream = yaml.dump(obj_from_stream, Dumper=AnsibleDumper) - yaml_string_obj_from_string = yaml.dump(obj_from_string, Dumper=AnsibleDumper) - else: - yaml_string_obj_from_stream = yaml.dump(obj_from_stream, Dumper=AnsibleDumper, encoding=None) - yaml_string_obj_from_string = yaml.dump(obj_from_string, Dumper=AnsibleDumper, encoding=None) - - assert yaml_string == yaml_string_obj_from_stream - assert yaml_string == yaml_string_obj_from_stream == yaml_string_obj_from_string - assert (yaml_string == yaml_string_obj_from_stream == yaml_string_obj_from_string == yaml_string_stream_obj_from_stream == - yaml_string_stream_obj_from_string) - assert obj == obj_from_stream - assert obj == obj_from_string - assert obj == yaml_string_obj_from_stream - assert obj == yaml_string_obj_from_string - assert obj == obj_from_stream == obj_from_string == yaml_string_obj_from_stream == yaml_string_obj_from_string - return {'obj': obj, - 'yaml_string': yaml_string, - 'yaml_string_from_stream': yaml_string_from_stream, - 'obj_from_stream': obj_from_stream, - 'obj_from_string': obj_from_string, - 'yaml_string_obj_from_string': yaml_string_obj_from_string} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/module_utils/network/f5/test_teem.py b/ansible_collections/f5networks/f5_modules/tests/unit/module_utils/network/f5/test_teem.py deleted file mode 100644 index 14eb3ce9a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/module_utils/network/f5/test_teem.py +++ /dev/null @@ -1,234 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2022, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import sys - -from datetime import datetime - -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import patch, Mock, mock_open -from ansible_collections.f5networks.f5_modules.plugins.module_utils.constants import TEEM_KEY -from ansible_collections.f5networks.f5_modules.plugins.module_utils.teem import ( - TeemClient, determine_environment, generate_asset_id, in_docker, in_cicd -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.version import CURRENT_COLL_VERSION - - -class FakeHTTPResponse: - def __init__(self, value): - self.value = value - - @property - def code(self): - return self.value - - -class TestTeemClient(unittest.TestCase): - def setUp(self): - self.start_time = datetime.now().isoformat() - self.fake_module = Mock() - self.fake_module.ansible_version = '2.10' - self.python_version = sys.version.split(' ', maxsplit=1)[0] - - @patch('ansible_collections.f5networks.f5_modules.plugins.module_utils.teem.in_cicd', new_callable=Mock()) - def test_teem_client_build_telemetry_no_docker_no_cicd(self, m): - m.return_value = (False, None) - self.fake_module._name = 'bigip_fake' - teem = TeemClient(self.start_time, self.fake_module, '15.1.1') - result = teem.build_telemetry() - - assert result[0]['CollectionName'] == 'F5_MODULES' - assert result[0]['CollectionVersion'] == CURRENT_COLL_VERSION - assert result[0]['CollectionModuleName'] == 'bigip_fake' - assert result[0]['f5Platform'] == 'BIG-IP' - assert result[0]['f5SoftwareVersion'] == '15.1.1' - assert result[0]['ControllerAnsibleVersion'] == '2.10' - assert result[0]['ControllerPythonVersion'] == self.python_version - assert result[0]['ControllerAsDocker'] is False - assert result[0]['DockerHostname'] == 'none' - assert result[0]['RunningInCiEnv'] is False - assert result[0]['CiEnvName'] == 'none' - - @patch('ansible_collections.f5networks.f5_modules.plugins.module_utils.teem.socket.gethostname', new_callable=Mock()) - @patch('ansible_collections.f5networks.f5_modules.plugins.module_utils.teem.in_cicd', new_callable=Mock()) - def test_teem_client_build_telemetry_with_docker_in_cicd(self, m1, m2): - m1.return_value = (True, 'FOO-CI/CD') - m2.return_value = '8fc719d06c9e' - self.fake_module._name = 'bigip_fake' - teem = TeemClient(self.start_time, self.fake_module, '15.1.1') - with patch.object(teem, 'docker', True): - result = teem.build_telemetry() - - assert result[0]['CollectionName'] == 'F5_MODULES' - assert result[0]['CollectionVersion'] == CURRENT_COLL_VERSION - assert result[0]['CollectionModuleName'] == 'bigip_fake' - assert result[0]['f5Platform'] == 'BIG-IP' - assert result[0]['f5SoftwareVersion'] == '15.1.1' - assert result[0]['ControllerAnsibleVersion'] == '2.10' - assert result[0]['ControllerPythonVersion'] == self.python_version - assert result[0]['ControllerAsDocker'] is True - assert result[0]['DockerHostname'] == '8fc719d06c9e' - assert result[0]['RunningInCiEnv'] is True - assert result[0]['CiEnvName'] == 'FOO-CI/CD' - - @patch('ansible_collections.f5networks.f5_modules.plugins.module_utils.teem.in_cicd', new_callable=Mock()) - def test_teem_client_prepare_request(self, m): - m.return_value = (False, None) - self.fake_module._name = 'bigip_fake' - teem = TeemClient(self.start_time, self.fake_module, '15.1.1') - url, headers, data = teem.prepare_request() - - assert url == 'https://product.apis.f5.com/ee/v1/telemetry' - assert len(headers) == 5 - assert headers['User-Agent'] == 'F5_MODULES/{0}'.format(CURRENT_COLL_VERSION) - assert headers['F5-ApiKey'] == TEEM_KEY - assert len(data) == 10 - assert data['digitalAssetVersion'] == CURRENT_COLL_VERSION - assert data['observationStartTime'] == self.start_time - - @patch('ansible_collections.f5networks.f5_modules.plugins.module_utils.teem.in_cicd', new_callable=Mock()) - @patch('ansible_collections.f5networks.f5_modules.plugins.module_utils.teem.open_url') - def test_teem_client_send(self, patched, m): - m.return_value = (False, None) - self.fake_module._name = 'bigip_fake' - patched.return_value = FakeHTTPResponse(200) - - teem = TeemClient(self.start_time, self.fake_module, '15.1.1') - teem.send() - - assert patched.call_args[1]['url'] == 'https://product.apis.f5.com/ee/v1/telemetry' - assert patched.call_args[1]['headers']['User-Agent'] == 'F5_MODULES/{0}'.format(CURRENT_COLL_VERSION) - assert patched.call_args[1]['headers']['F5-ApiKey'] == TEEM_KEY - assert CURRENT_COLL_VERSION in patched.call_args[1]['data'] - assert self.start_time in patched.call_args[1]['data'] - - def test_teem_get_platform_fq_name(self): - self.fake_module._name = 'f5networks.f5_modules.bigip_fake' - teem = TeemClient(self.start_time, self.fake_module, '15.1.1') - result = teem.get_platform() - - assert result == 'BIG-IP' - assert teem.module_name == 'bigip_fake' - - def test_teem_get_platform_fq_name_platform_not_found(self): - self.fake_module._name = 'f5networks.f5_modules.foobar_fake' - teem = TeemClient(self.start_time, self.fake_module, '15.1.1') - result = teem.get_platform() - - assert result == 'unknown' - assert teem.module_name == 'foobar_fake' - - def test_teem_get_platform_short_name(self): - self.fake_module._name = 'bigiq_fake' - teem = TeemClient(self.start_time, self.fake_module, '15.1.1') - result = teem.get_platform() - - assert result == 'BIG-IQ' - assert teem.module_name == 'bigiq_fake' - - def test_teem_get_platform_short_name_platform_not_found(self): - self.fake_module._name = 'foobar_fake' - teem = TeemClient(self.start_time, self.fake_module, '15.1.1') - result = teem.get_platform() - - assert result == 'unknown' - assert teem.module_name == 'foobar_fake' - - -class TestOtherFunctions(unittest.TestCase): - def test_determine_environment_drone(self): - def mock_os_env_return(value): - if value == 'DRONE': - return True - return False - - with patch('ansible_collections.f5networks.f5_modules.plugins.module_utils.teem.os.getenv') as env: - env.side_effect = mock_os_env_return - result = determine_environment() - - assert result == 'Drone CI' - - def test_determine_environment_codeship(self): - def mock_os_env_return(value): - if value == 'CI_NAME': - return 'codeship' - return False - - with patch('ansible_collections.f5networks.f5_modules.plugins.module_utils.teem.os.getenv') as env: - env.side_effect = mock_os_env_return - result = determine_environment() - - assert result == 'CodeShip CI' - - def test_determine_environment_codeship_invalid_value(self): - def mock_os_env_return(value): - if value == 'CI_NAME': - return 'otherci' - return False - - with patch('ansible_collections.f5networks.f5_modules.plugins.module_utils.teem.os.getenv') as env: - env.side_effect = mock_os_env_return - result = determine_environment() - - assert result is None - - @patch( - 'builtins.open', mock_open( - read_data='14:name=systemd:/docker/8fc719d06c9e3\n13:rdma:/\n12:pids:/docker/8fc719d06c9e3\n' - ) - ) - def test_in_docker_true(self): - result = in_docker() - - assert result is True - - @patch('builtins.open', mock_open(read_data='14:name=systemd:/8fc719d06c9e3\n13:rdma:/\n')) - def test_in_docker_false(self): - result = in_docker() - - assert result is False - - @patch('builtins.open', new_callable=mock_open) - def test_in_docker_except(self, mo): - ioerror = mo.return_value - ioerror.read.side_effect = IOError('[Errno 2] No such file or directory') - result = in_docker() - - assert result is False - - def test_in_cicd_true(self): - def mock_os_env_return(value): - if value == 'TF_BUILD': - return True - return False - - with patch('ansible_collections.f5networks.f5_modules.plugins.module_utils.teem.os.getenv') as env: - env.side_effect = mock_os_env_return - ok, env = in_cicd() - - assert ok is True - assert env == 'Azure Pipelines' - - def test_in_cicd_false(self): - def mock_os_env_return(value): - return False - - with patch('ansible_collections.f5networks.f5_modules.plugins.module_utils.teem.os.getenv') as env: - env.side_effect = mock_os_env_return - ok, env = in_cicd() - - assert ok is False - assert env is None - - def test_generate_asset_id(self): - fake_host = '8fc719d06c9e' - result1 = generate_asset_id(fake_host) - result2 = generate_asset_id(fake_host) - result3 = generate_asset_id(fake_host) - - assert result1 == result2 == result3 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/__init__.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/__init__.py +++ /dev/null diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/conftest.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/conftest.py deleted file mode 100644 index e1bde0c80..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/conftest.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (c) 2017 Ansible Project -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import json - -import pytest - -from ansible.module_utils.six import string_types -from ansible.module_utils._text import to_bytes -from ansible.module_utils.common._collections_compat import MutableMapping - - -@pytest.fixture -def patch_ansible_module(request, mocker): - if isinstance(request.param, string_types): - args = request.param - elif isinstance(request.param, MutableMapping): - if "ANSIBLE_MODULE_ARGS" not in request.param: - request.param = {"ANSIBLE_MODULE_ARGS": request.param} - if "_ansible_remote_tmp" not in request.param["ANSIBLE_MODULE_ARGS"]: - request.param["ANSIBLE_MODULE_ARGS"][ - "_ansible_remote_tmp" - ] = "/tmp" - if ( - "_ansible_keep_remote_files" - not in request.param["ANSIBLE_MODULE_ARGS"] - ): - request.param["ANSIBLE_MODULE_ARGS"][ - "_ansible_keep_remote_files" - ] = False - args = json.dumps(request.param) - else: - raise Exception( - "Malformed data to the patch_ansible_module pytest fixture" - ) - - mocker.patch("ansible.module_utils.basic._ANSIBLE_ARGS", to_bytes(args)) diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/__init__.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/__init__.py +++ /dev/null diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/__init__.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/__init__.py +++ /dev/null diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/MyApp-0.1.0-0001.noarch.rpm b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/MyApp-0.1.0-0001.noarch.rpm Binary files differdeleted file mode 100644 index 169281353..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/MyApp-0.1.0-0001.noarch.rpm +++ /dev/null diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/__init__.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/__init__.py +++ /dev/null diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/apply_asm_policy_started.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/apply_asm_policy_started.json deleted file mode 100644 index a158e98a3..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/apply_asm_policy_started.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "kind": "tm:asm:tasks:apply-policy:apply-policy-taskstate", - "selfLink": "https://localhost/mgmt/tm/asm/tasks/apply-policy/zR-4NWzKj9Zq4rdVX4Um8A?ver=12.1.2", - "policyReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw?ver=12.1.2" - }, - "status": "NEW", - "id": "zR-4NWzKj9Zq4rdVX4Um8A", - "startTime": "2017-09-24T11:03:47Z", - "lastUpdateMicros": 1.506251027e+15 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/basic-iapp.tmpl b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/basic-iapp.tmpl deleted file mode 100644 index 7f9a681b7..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/basic-iapp.tmpl +++ /dev/null @@ -1,25 +0,0 @@ -sys application template good_templ { - actions { - definition { - html-help { - # HTML Help for the template - } - implementation { - # TMSH implementation code - } - macro { - # TMSH macro code - } - presentation { - # APL presentation language - } - role-acl { admin manager resource-admin } - run-as none - } - } - description "My basic template" - partition Common - requires-modules { ltm } - ignore-verification true - requires-bigip-version-min 11.6.0 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cat_md5_hotfix.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cat_md5_hotfix.json deleted file mode 100644 index e6e05eb6c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cat_md5_hotfix.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "kind": "tm:util:bash:runstate", - "command": "run", - "utilCmdArgs": "-c 'cat /shared/images/Hotfix-12.1.2.1.0.271-HF1.iso.md5'", - "commandResult": "0389775fabf7b42f12ceceac64f3b84d Hotfix-12.1.2.1.0.271-HF1.iso\n" -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cat_md5_software.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cat_md5_software.json deleted file mode 100644 index fa823912a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cat_md5_software.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "kind": "tm:util:bash:runstate", - "command": "run", - "utilCmdArgs": "-c 'cat /shared/images/BIGIP-12.1.2.0.0.249.iso.md5'", - "commandResult": "0389775fabf7b42f12ceceac64f3b84d BIGIP-12.1.2.0.0.249.iso\n" -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cert1.crt b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cert1.crt deleted file mode 100644 index 1d22f3028..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cert1.crt +++ /dev/null @@ -1,101 +0,0 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=US, ST=New York, L=New York, O=ACME CA, OU=Coyote, CN=ourca.domain.local - Validity - Not Before: Jun 30 16:46:09 2016 GMT - Not After : Jun 25 16:46:09 2036 GMT - Subject: C=US, ST=New York, O=ACME, OU=Coyote, CN=cert1.domain.local - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:d6:0f:bd:26:ef:14:4d:09:f6:db:8b:01:f5:4e: - 6c:03:b1:35:20:16:b8:1b:7c:e6:b6:8d:97:1b:b0: - 4f:8a:b6:cb:54:7e:7a:ff:fd:af:02:db:bf:9d:cf: - 9a:4c:0d:87:93:8b:cc:61:f3:23:a9:6f:8e:d4:82: - 2c:93:b6:e2:fa:37:ed:8a:d3:23:8f:6d:b5:78:4a: - 38:ba:93:f9:4a:1c:40:06:33:d7:c0:98:20:d4:16: - ac:a4:a5:6b:41:20:4c:3a:55:7e:c7:50:e7:95:07: - 4e:86:15:86:7a:0f:6c:57:d2:07:1c:97:24:51:5b: - 4e:f5:52:3a:f8:4f:95:6b:6c:83:1f:34:4e:ee:b0: - ae:fe:46:90:38:f1:4d:85:72:8b:46:bc:d1:62:37: - 65:5a:de:bb:16:51:1e:f5:cb:a0:ef:d6:7b:11:6f: - 3b:0c:49:17:bc:4d:8c:f5:d9:f0:35:6b:f7:b6:4d: - 50:eb:47:81:e3:06:f2:bd:ec:67:4f:ab:2b:03:aa: - e2:1e:42:22:a9:c9:59:dc:0d:19:fb:c5:02:1d:d7: - 58:e4:04:53:0a:1d:79:bb:c1:33:f1:cd:b7:10:2e: - b4:6e:9b:dc:60:66:05:50:9f:20:66:a1:71:00:51: - 54:cf:0a:70:f4:7c:45:c6:f0:a7:1c:11:2f:3e:a3: - 1f:bf - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: - 2D:FB:27:C7:B4:32:FF:F7:87:DB:2D:A7:76:AE:F0:96:7E:DA:DC:17 - X509v3 Authority Key Identifier: - keyid:4F:2A:15:49:E6:CC:05:2F:2B:F4:0E:CC:BA:2E:4C:DF:13:90:F0:78 - - Signature Algorithm: sha256WithRSAEncryption - 3f:46:1c:3b:58:b4:99:f3:75:00:47:d2:fe:ba:ba:9a:04:46: - 62:b6:2d:a0:0f:8f:c0:95:2a:58:8b:61:f5:14:90:30:26:37: - 94:a1:a6:29:20:c9:b5:08:d7:f9:15:cb:9d:9c:19:ed:2f:a4: - e6:91:48:85:1a:f7:ab:17:5e:79:23:69:b8:3c:0c:48:ae:c8: - ba:90:d0:05:fb:33:7e:86:fd:12:f8:2d:0f:ff:16:15:9a:dc: - 76:48:7d:65:5b:4e:93:14:e8:be:37:d1:13:f7:a7:b1:cd:ad: - ae:4f:e1:72:b9:53:2d:cd:e6:42:76:44:93:21:28:58:c0:44: - ab:3c:da:5b:e5:55:ab:04:86:4d:9c:4c:33:f4:4e:13:98:e9: - 0f:d1:a3:70:2b:1d:11:20:47:26:f6:d8:45:7f:88:ad:f2:c1: - 81:0f:be:cd:6c:79:80:94:30:eb:8d:cc:f3:7d:a1:3e:6c:6f: - fa:8f:f3:1f:2e:76:97:3f:8a:1b:67:3b:e0:f9:b1:3c:6b:dc: - 64:1b:00:73:e9:89:81:f6:7f:51:f3:51:c8:b9:96:5f:fd:55: - f8:77:6f:88:bc:65:b3:e2:30:a4:00:7a:79:68:e0:36:8b:a9: - 1b:06:9b:20:fe:fe:98:aa:56:58:c8:08:a4:7b:12:59:ff:3d: - bd:5e:13:3b:c6:c7:8a:00:5b:cb:27:18:02:ee:cb:38:c2:b7: - a9:51:04:ef:31:ca:49:09:48:14:13:eb:91:e2:26:8c:88:5f: - 1c:78:e1:0d:90:29:d7:c1:fc:c8:89:fd:4d:53:0b:99:58:c2: - 1a:24:3d:c0:a2:4c:a3:d9:c7:95:c5:bc:72:fa:02:f1:ab:dd: - aa:2b:9e:a0:bb:1a:68:2d:09:8c:a2:99:0d:26:ec:9e:30:19: - 01:5a:41:45:63:b3:c5:db:24:32:4c:fe:7f:f3:ce:e9:4d:00: - 64:cf:bb:15:34:2d:31:6e:4f:c0:96:40:9b:32:35:65:92:01: - 29:7e:74:02:50:fd:3b:3b:3a:a3:9f:6a:c0:a5:be:3f:c3:07: - d6:8c:2a:c6:f4:0f:32:bd:3b:fc:45:90:d2:46:ee:6f:c3:2f: - 26:8c:97:0c:e8:da:9a:97:03:0b:86:17:45:a6:62:69:4e:8d: - cf:f8:bf:ea:2f:dc:ff:95:14:15:bd:92:2d:8a:08:cf:ce:8a: - b0:f6:34:0a:a2:0e:49:31:44:e1:47:fb:37:52:53:59:93:25: - 40:cc:ac:67:2d:a2:b6:9b:75:fd:13:a5:a7:93:4f:72:05:75: - cd:b1:37:f6:3b:69:3b:24:a1:1f:23:f0:cd:bb:ae:18:b3:aa: - eb:9f:d7:97:06:ba:fd:44 ------BEGIN CERTIFICATE----- -MIIExjCCAq6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJVUzER -MA8GA1UECAwITmV3IFlvcmsxETAPBgNVBAcMCE5ldyBZb3JrMRAwDgYDVQQKDAdB -Q01FIENBMQ8wDQYDVQQLDAZDb3lvdGUxGzAZBgNVBAMMEm91cmNhLmRvbWFpbi5s -b2NhbDAeFw0xNjA2MzAxNjQ2MDlaFw0zNjA2MjUxNjQ2MDlaMF0xCzAJBgNVBAYT -AlVTMREwDwYDVQQIDAhOZXcgWW9yazENMAsGA1UECgwEQUNNRTEPMA0GA1UECwwG -Q295b3RlMRswGQYDVQQDDBJjZXJ0MS5kb21haW4ubG9jYWwwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDWD70m7xRNCfbbiwH1TmwDsTUgFrgbfOa2jZcb -sE+KtstUfnr//a8C27+dz5pMDYeTi8xh8yOpb47UgiyTtuL6N+2K0yOPbbV4Sji6 -k/lKHEAGM9fAmCDUFqykpWtBIEw6VX7HUOeVB06GFYZ6D2xX0gcclyRRW071Ujr4 -T5VrbIMfNE7usK7+RpA48U2FcotGvNFiN2Va3rsWUR71y6Dv1nsRbzsMSRe8TYz1 -2fA1a/e2TVDrR4HjBvK97GdPqysDquIeQiKpyVncDRn7xQId11jkBFMKHXm7wTPx -zbcQLrRum9xgZgVQnyBmoXEAUVTPCnD0fEXG8KccES8+ox+/AgMBAAGjezB5MAkG -A1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRp -ZmljYXRlMB0GA1UdDgQWBBQt+yfHtDL/94fbLad2rvCWftrcFzAfBgNVHSMEGDAW -gBRPKhVJ5swFLyv0Dsy6LkzfE5DweDANBgkqhkiG9w0BAQsFAAOCAgEAP0YcO1i0 -mfN1AEfS/rq6mgRGYrYtoA+PwJUqWIth9RSQMCY3lKGmKSDJtQjX+RXLnZwZ7S+k -5pFIhRr3qxdeeSNpuDwMSK7IupDQBfszfob9EvgtD/8WFZrcdkh9ZVtOkxTovjfR -E/ensc2trk/hcrlTLc3mQnZEkyEoWMBEqzzaW+VVqwSGTZxMM/ROE5jpD9GjcCsd -ESBHJvbYRX+IrfLBgQ++zWx5gJQw643M832hPmxv+o/zHy52lz+KG2c74PmxPGvc -ZBsAc+mJgfZ/UfNRyLmWX/1V+HdviLxls+IwpAB6eWjgNoupGwabIP7+mKpWWMgI -pHsSWf89vV4TO8bHigBbyycYAu7LOMK3qVEE7zHKSQlIFBPrkeImjIhfHHjhDZAp -18H8yIn9TVMLmVjCGiQ9wKJMo9nHlcW8cvoC8avdqiueoLsaaC0JjKKZDSbsnjAZ -AVpBRWOzxdskMkz+f/PO6U0AZM+7FTQtMW5PwJZAmzI1ZZIBKX50AlD9Ozs6o59q -wKW+P8MH1owqxvQPMr07/EWQ0kbub8MvJoyXDOjampcDC4YXRaZiaU6Nz/i/6i/c -/5UUFb2SLYoIz86KsPY0CqIOSTFE4Uf7N1JTWZMlQMysZy2itpt1/ROlp5NPcgV1 -zbE39jtpOyShHyPwzbuuGLOq65/Xlwa6/UQ= ------END CERTIFICATE----- diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cert1.key b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cert1.key deleted file mode 100644 index 858ca122e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cert1.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA1g+9Ju8UTQn224sB9U5sA7E1IBa4G3zmto2XG7BPirbLVH56 -//2vAtu/nc+aTA2Hk4vMYfMjqW+O1IIsk7bi+jftitMjj221eEo4upP5ShxABjPX -wJgg1BaspKVrQSBMOlV+x1DnlQdOhhWGeg9sV9IHHJckUVtO9VI6+E+Va2yDHzRO -7rCu/kaQOPFNhXKLRrzRYjdlWt67FlEe9cug79Z7EW87DEkXvE2M9dnwNWv3tk1Q -60eB4wbyvexnT6srA6riHkIiqclZ3A0Z+8UCHddY5ARTCh15u8Ez8c23EC60bpvc -YGYFUJ8gZqFxAFFUzwpw9HxFxvCnHBEvPqMfvwIDAQABAoIBAQCjQ7PP+y8vpvbp -8bbXoy2ND15mkA1xoazR9WIYEzxHny2rzx//GTyfYH1gXtPfR75tEYYb+vbrJxP4 -DyTysN2jXH7HkEwh+9oZ2fo0i+Hp3WwTjvzyftUjDfw1Q5lvPbQGFekxGgrXRpBk -ggxkEllfDeiwrLJdftfVEhe6BfD/0YibwQeHN7VoC4V8wOanKtDmx74W/1f7WhwQ -nKQnCrbYqNJa2nGvWiKU5Suvfb0v7tCnQYlfnCpUfj+wcnxlgmGkcyq1L+qC1qC8 -PO5i3T3LM5Yg8CSeGhO/q6gw/fUowuBN1cluTqN97oLHiEM5tLdjeVWwa1Vp0liv -1WXGT4eBAoGBAPtumMmyVTIorvV6KGNI/Eo6jfE0HOXVdXtm4iToDDuiYwto7/Ge -/kV+11Fpu0lV+eYPfZn175Of8FnQPwczQF1OOH/aQ/ViY8j87bZUbCy25mWrfNkh -2rRlyI3/OsSfL5SkyWpYB0yhSJZV9mSQJTZolB4GQRNPKtqi7NpB4WxBAoGBANnz -VS4JBJO75yeSG5BzPp5VVKm+nu0Betlva8GsHdEic8OM9bGpVozGysAW3Xdxp7q6 -gLJGyyuzpsxldCc/IdIlF5fz7gkLl4NoYanz9PSEr2XZLh9+2yXGkPFlC3IeHAUB -E+2UO9MFpWrmfKoAnYZCR6vJDxtQBpAlTUvJEYv/AoGBAPha62K32327P+7MJl7D -9ijgI9rwjebcbbpiCtlHuOWi5lCb6/7v/NvqiYcqeEvdOAXuoTNWAbsBTel5UPis -wFQp8pcfouccs9IRPEFQrLWSSIx+0sirrxtoOq1AQe18DAS4rRd1MmiYG1ocOVBm -LcvLixsJNHh9R6hFLM3+K0vBAoGANkmJ+gF9Bl9TYGPgQcay3jVa9Tzp0RcBRo+e -Q4tfkewG8bp2qF4JlN8fOWF4oHvKz5QM4lsH2EbTUS4kFHKBNhrPGaZEsDQW9UBW -s0J0zUMPfUrvViD+7RXcnIQSqcYeLJDsKc02aYWKgmoOuzmUAxEXUQ6vmJoCSH1C -F5JpsHkCgYEArwTSzb1+/ThQhK1JN8hJ4jMjQ8E7PzLTMILrdDALn2g1T4VzL7N7 -UG6oUieMlo/UH6cv6330dwaGVklXZbyDKSDROIafFcOpVfcvDUgJCjp3CaY9A2zG -+EPkRpeHKXAIgG+QuOwVOtYWcWltnBf61slTqiY2vKX1+ZGmrMrw1Zw= ------END RSA PRIVATE KEY-----
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cert2.crt b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cert2.crt deleted file mode 100644 index 30674bc8e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cert2.crt +++ /dev/null @@ -1,101 +0,0 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 2 (0x2) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=US, ST=New York, L=New York, O=ACME CA, OU=Coyote, CN=ourca.domain.local - Validity - Not Before: Jun 30 16:49:00 2016 GMT - Not After : Jun 25 16:49:00 2036 GMT - Subject: C=US, ST=New York, O=ACME, OU=Coyote, CN=cert2.domain.local - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:c6:9e:84:99:4d:69:98:c2:42:95:ed:43:ca:24: - 05:64:9d:67:81:1c:ff:56:7b:ad:d1:cb:09:39:28: - 4f:ac:aa:1b:34:61:3a:b1:e3:57:d4:9e:15:40:77: - 91:20:2b:e8:7e:d3:91:1e:46:50:6c:2f:4b:00:c2: - f2:3a:43:89:d9:81:73:84:5f:02:db:49:ac:3b:9e: - fe:c0:77:2e:53:ea:ce:da:ff:49:98:21:1d:31:4d: - 0f:14:20:30:36:9a:23:b4:28:08:06:59:81:30:03: - 86:09:0b:5b:e1:72:63:5e:54:ac:90:b1:82:55:b8: - 12:00:d5:01:26:be:6a:eb:fc:58:5b:8a:7a:fe:46: - 23:a3:eb:5d:6c:e0:f6:79:00:5d:5b:49:82:42:62: - e2:58:e8:65:54:14:be:99:25:8b:b7:df:cf:53:26: - f2:7a:fd:b9:f9:f3:d5:af:06:d6:1e:ba:66:4d:41: - 8c:5d:aa:23:41:7f:f4:27:21:a0:30:09:86:13:c4: - 57:1b:13:45:63:6b:3b:a3:7f:d1:1a:cd:fd:07:51: - 0f:1a:e1:d9:25:3e:d2:77:e1:c7:60:db:12:df:ef: - 71:65:c8:c7:1a:42:94:6f:57:2a:d7:67:30:0f:33: - 31:ba:90:4d:d1:80:38:08:e7:90:7a:04:0e:8f:b0: - 2a:73 - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: - 43:71:A9:16:2B:DA:DC:5F:FD:82:87:78:26:48:4E:77:21:47:44:D6 - X509v3 Authority Key Identifier: - keyid:4F:2A:15:49:E6:CC:05:2F:2B:F4:0E:CC:BA:2E:4C:DF:13:90:F0:78 - - Signature Algorithm: sha256WithRSAEncryption - 15:ac:f9:cb:bc:88:c0:d3:74:83:88:cd:19:94:bb:87:7e:fd: - 4d:25:09:9b:08:84:64:c5:37:c7:99:b3:25:ee:6e:82:46:b0: - 13:f9:05:ad:4d:4a:b2:e3:29:5d:0d:55:9e:9c:62:1d:95:f2: - 19:49:5e:d3:5b:58:98:ce:e8:f5:e5:c1:ce:b5:a8:7a:b1:f8: - 14:fe:25:10:12:5b:41:53:d2:47:ab:20:e5:50:da:b6:ba:00: - 21:94:6b:dd:0b:24:15:dc:c0:4e:b8:1d:cc:9e:5f:10:5e:46: - 3f:96:c9:f8:28:bb:13:31:d6:d2:6c:48:41:bb:23:ab:23:64: - 73:d6:2b:2e:9a:77:d4:08:fb:e0:e8:50:2c:49:7f:98:9e:f6: - 37:30:2b:7c:97:c6:a7:1e:5b:dc:ce:bb:1e:58:e4:bd:05:4c: - ad:07:d6:03:c5:a9:57:a4:26:e2:10:f7:f9:63:1a:2a:6a:9c: - 52:98:33:bf:ea:70:cd:c0:86:32:80:6e:70:54:87:74:3c:41: - 53:a1:c6:53:44:c7:74:a6:11:b6:48:66:86:f9:04:ca:ec:5d: - 4f:ce:7f:64:51:34:52:53:98:a8:70:62:f7:3b:fb:39:11:9a: - e1:e2:d3:00:0b:6b:d2:33:3c:44:de:c3:6b:e1:6f:c9:be:d2: - 2c:8a:f0:b3:d3:4c:12:2f:ad:9d:6b:40:89:23:94:93:6d:12: - 6c:38:89:fa:fe:ad:02:55:55:8b:c3:86:7f:15:c4:3a:a9:70: - e9:06:6c:26:09:28:9f:6e:94:f2:a1:27:5c:89:4c:42:ac:65: - 90:92:d2:6d:09:7c:d8:a1:bf:5b:25:e4:db:ed:71:41:d7:e2: - 61:47:89:9e:46:29:9d:f9:f4:94:cf:f5:b3:e8:df:6a:47:34: - d1:ed:fc:a4:58:fe:82:e1:6e:e9:05:65:f5:d2:57:9a:d1:42: - 64:ae:0c:bb:07:14:39:a2:c0:85:e4:25:a5:c4:e6:3f:e6:da: - d0:18:4f:e0:01:ba:99:2e:1f:75:35:c3:fa:a3:e7:e1:75:1b: - 1c:19:93:cc:96:eb:3f:ce:8b:10:40:36:63:f5:66:dc:6d:75: - 31:ba:db:27:21:b4:15:00:e9:ce:d0:08:e3:b0:1c:e3:29:c9: - 63:5a:c8:5c:ca:db:ce:51:b7:87:22:c6:ba:42:d7:ab:29:b4: - 87:fa:27:9a:18:22:90:9f:da:c0:90:c4:49:64:38:38:2e:a2: - ea:87:c1:8b:4e:8b:ff:a7:53:45:4f:d8:8b:86:69:ea:87:1d: - f6:e6:44:14:1f:69:ee:2c:de:5a:a1:df:a8:57:13:65:4d:5b: - ce:6e:f2:15:2a:c5:32:08 ------BEGIN CERTIFICATE----- -MIIExjCCAq6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJVUzER -MA8GA1UECAwITmV3IFlvcmsxETAPBgNVBAcMCE5ldyBZb3JrMRAwDgYDVQQKDAdB -Q01FIENBMQ8wDQYDVQQLDAZDb3lvdGUxGzAZBgNVBAMMEm91cmNhLmRvbWFpbi5s -b2NhbDAeFw0xNjA2MzAxNjQ5MDBaFw0zNjA2MjUxNjQ5MDBaMF0xCzAJBgNVBAYT -AlVTMREwDwYDVQQIDAhOZXcgWW9yazENMAsGA1UECgwEQUNNRTEPMA0GA1UECwwG -Q295b3RlMRswGQYDVQQDDBJjZXJ0Mi5kb21haW4ubG9jYWwwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDGnoSZTWmYwkKV7UPKJAVknWeBHP9We63Rywk5 -KE+sqhs0YTqx41fUnhVAd5EgK+h+05EeRlBsL0sAwvI6Q4nZgXOEXwLbSaw7nv7A -dy5T6s7a/0mYIR0xTQ8UIDA2miO0KAgGWYEwA4YJC1vhcmNeVKyQsYJVuBIA1QEm -vmrr/Fhbinr+RiOj611s4PZ5AF1bSYJCYuJY6GVUFL6ZJYu3389TJvJ6/bn589Wv -BtYeumZNQYxdqiNBf/QnIaAwCYYTxFcbE0Vjazujf9Eazf0HUQ8a4dklPtJ34cdg -2xLf73FlyMcaQpRvVyrXZzAPMzG6kE3RgDgI55B6BA6PsCpzAgMBAAGjezB5MAkG -A1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRp -ZmljYXRlMB0GA1UdDgQWBBRDcakWK9rcX/2Ch3gmSE53IUdE1jAfBgNVHSMEGDAW -gBRPKhVJ5swFLyv0Dsy6LkzfE5DweDANBgkqhkiG9w0BAQsFAAOCAgEAFaz5y7yI -wNN0g4jNGZS7h379TSUJmwiEZMU3x5mzJe5ugkawE/kFrU1KsuMpXQ1VnpxiHZXy -GUle01tYmM7o9eXBzrWoerH4FP4lEBJbQVPSR6sg5VDatroAIZRr3QskFdzATrgd -zJ5fEF5GP5bJ+Ci7EzHW0mxIQbsjqyNkc9YrLpp31Aj74OhQLEl/mJ72NzArfJfG -px5b3M67HljkvQVMrQfWA8WpV6Qm4hD3+WMaKmqcUpgzv+pwzcCGMoBucFSHdDxB -U6HGU0THdKYRtkhmhvkEyuxdT85/ZFE0UlOYqHBi9zv7ORGa4eLTAAtr0jM8RN7D -a+Fvyb7SLIrws9NMEi+tnWtAiSOUk20SbDiJ+v6tAlVVi8OGfxXEOqlw6QZsJgko -n26U8qEnXIlMQqxlkJLSbQl82KG/WyXk2+1xQdfiYUeJnkYpnfn0lM/1s+jfakc0 -0e38pFj+guFu6QVl9dJXmtFCZK4MuwcUOaLAheQlpcTmP+ba0BhP4AG6mS4fdTXD -+qPn4XUbHBmTzJbrP86LEEA2Y/Vm3G11MbrbJyG0FQDpztAI47Ac4ynJY1rIXMrb -zlG3hyLGukLXqym0h/onmhgikJ/awJDESWQ4OC6i6ofBi06L/6dTRU/Yi4Zp6ocd -9uZEFB9p7izeWqHfqFcTZU1bzm7yFSrFMgg= ------END CERTIFICATE----- diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cert2.key b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cert2.key deleted file mode 100644 index bcb6fdff6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/cert2.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-256-CBC,C56C8101A9C8D6B9AD0975807D4793BB - -rhV1cJee3XAlY83zIXytJOlvXFrsHmzyTVoOn26eOwgza8CuE5gQQzLXiT12zK0q -YAbYyyyEXJJogVU61s1vuCQRNiezUCwT4SBj7ni4rXqu5BYUxKh0wD0gjE519yNP -nqnPUYKdLkFY7I6RJjqCqkk8xnJm64g5zCqN58aR98Mkqr1898+lZ2OHqAsAYBNH -dM/SE7B7E4Mr1sAjpsn6L4PJ93WSwmEtH3nZTnPF9qtFuJwjUcHCN/r/s3QXki95 -eFX+7qW460lBfDeRUKXKqz4gO017AXu1kccrlHhdQoJGf3D+x9zwofG/uFeAH3iN -f9IRaiR2IN6SS67QFmOkI9S95tsFb4N8bmmfGV4w8wfxvDzGJuxzIb4gByX5xov4 -S22pDpkfn5YqxgC5ItSiFYpg01HEi2l79HwZqAn1kowLsuF1JJKAYL5IMS3DlrdH -AyA9CN28G6pYEjwFBbFgpOg64UNmrkxRncHxC4FuH7iGZNJL9+HQve/J5nlrnx6M -IU2myiZZhgbsl/V45ddXBDSlEdWFLHtEhcG+ICJP3EZAXHR0e9vyrWDk7T5zKhLP -ch9PNmIw+5zzpRuPu5NYw7V0ax8UOf2AydyBHeIQWuY52bai+QMDyQauomqpPXRY -tpCcW85P9jstY/F6TV32XQu/cHWolziJXI/QzWF5+uvnLMAsb3p5mriCG4DOTWF3 -KFSytTGnDQUUCLgaYSSKXL5Z52PVYmTjoqX8M6cvqSEdjK84wILQE0JMItQjGSIM -y5qHD7Mthf9YOJy1D86qtVumbaOBLw/rGPQS5QlK/m256xZ10LUslYczMpw1orN3 -3Uv8zHKk790XduHTllR0LwQXMJXG59hgiWAu3V3rsAkVSRpC3MI6IUZ2cfJvZ0Ds -FmUhCJ34JQxD4E/sT9uGAk6VIq/fAmM7/gq0oF4oqOFg4Zy1r3rc1Kvdoy1yKUi6 -JCI5bKCkgIthx4XUKQVtFMkHBDZAHr6i5Lzy4nM6I4S4/qL3JH4Q+739D1rjGVlq -OWcaeOzkkbJrE8h+A94UQao4R50LavKgq/o2n56tHG0RhXXyV5MC/X9rbSVipihR -rwNKnogdhAjY96IrOzdiHTArg8qZBGvHPoGUl3zjWFqNbHEs4NLSrEl6oEs6F/vC -zEZmi8gxqraw4u1GJnpoMuLO45PuhcxcXgJSvTh/OKDaR1u0ggEn7TxfAygm0ahP -i6NBgoZ/upTHAWqWht2JjSmQHQW7doVkp/BgNJq13oYF7FEUEg/ZtBTPKPR3CjM0 -ZKDGvKqWRVRyrw9FSwXn6WlSFfT3vhPMoW2jq1Kq5o/ZyhcquCVE8i+xq6hilcb5 -sNiV1tPWsZOFHx4T5hBVK+QnC8t7pCj38YpyEoY4/gffMtY85jsrLMlPYd5bmJ6O -x1tKiQauK+aX6IMu38YnHjCGnCkw1fF2OMSohbG2QfaKsmfkt8YLRuf2PTtjLtke -xGt0Irjac/sEZPc4SEIqnehNfXadiuMV3+4v6ey9vf782r76KH8gInY2gDsQ4X6d -1LVNCNAd/AGlitopL4hYomaeTjTzqIy5fMlGmTrpZjokenu/ILXsljZVAX2iyOAs ------END RSA PRIVATE KEY-----
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/chain1.crt b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/chain1.crt deleted file mode 100644 index 38dd8dc9c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/chain1.crt +++ /dev/null @@ -1,68 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIJAKql/ua7JdaGMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV -BAYTAkdCMRAwDgYDVQQIDAdFbmdsYW5kMRIwEAYDVQQKDAlBbGljZSBMdGQxKDAm -BgNVBAsMH0FsaWNlIEx0ZCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxGjAYBgNVBAMM -EUFsaWNlIEx0ZCBSb290IENBMB4XDTE3MDcyNTAzMTcwNloXDTM3MDcyMDAzMTcw -NloweTELMAkGA1UEBhMCR0IxEDAOBgNVBAgMB0VuZ2xhbmQxEjAQBgNVBAoMCUFs -aWNlIEx0ZDEoMCYGA1UECwwfQWxpY2UgTHRkIENlcnRpZmljYXRlIEF1dGhvcml0 -eTEaMBgGA1UEAwwRQWxpY2UgTHRkIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQC7grIMGI9e11lKh++bhyhTAU4qsKgM52xkl4sctSkK5hyT -jY8YYfD9ERrrJov6LLCt8QiwFypoqdILTht4g6sGACoVGXigFbLNyhEhX64kIWwT -PNFFXezYJv87qxPeT0I+6oHwai3smrUsPzsK73vwWOlnAW0mxvSzWpzvc3CgCB1J -+vRhdPm0VgT5HuR20WDPvx0T+ftQRrhIHz/UZSTHo/CEcuJ9zjhEmQlZRhfxZiBW -FY8Mgs6bgAKC+KtAsFTqRAuXq++xOnIIBzXACluFxp7Fee1CZh2GPxmtzFSIJVH0 -pH6wf9Kxkr0zuiAt3nq3xQcQZVdRP3bWscxp0lYG8BjuMZppI+r+gG1k/7WsRU/A -SUiHi4EogznIuJ7o1LbcULpIKjHsHVKXYz+ff+hx7npisHIE9BoyBe9SbalJxIcS -7n9/Mw6UmKk/zxspXCwMLraaeoyy2vUoC/zXW2WQHq67IarSAVbCPEPliqydVZ9k -y1ZQKGdrpxxLdsbasNv3xnS50DBd4GsSnxdhzCXUUhvLQ8dZ/NRXvZ6wwcdeQ6PV -5+dQNgnm7yd4mxyBbqv6RBAa37uNKWNf4yAQ9j9QN8pzW+qzuusAcLxTdDbtyeMi -Dz5UHzF912m3KLlF/Aad2TbjrCR4K0CEozVT8lhFpZlNl+IdZyuSbZQ6tYrJ0wID -AQABo2MwYTAdBgNVHQ4EFgQUk2h12cau/s1k/IGR0OAUWZbf8a8wHwYDVR0jBBgw -FoAUk2h12cau/s1k/IGR0OAUWZbf8a8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B -Af8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADSBpj8O7Wrs0gpciOmJ7cmVUIoX -XTd+WgzustaUJoqpeCmzkeC7O9/a9Eat2LrmKIBoY6uzH1hnYwOxSdSdodBuUcOv -6hBl7rFCgg+ACRn7zaaInFRPdx4P+ovbfFFetKmg54XA8ZDb7YRpwj3zMtlV38Ca -WC1jP36ocn8UZ8av1ki7KNz/0PqzJ4sVs6IZrj2Lo0lDcu+29Nh5VJ7AZnOfUeas -4sQr3dPHPaMQBxz0rKr/FN4qx63kd9GmoGz4DEDnPeUl2v52i/48ym0Q7JrntD5J -qJaaoU4uxUMkmnD8wOmBBtXQ3eRpHE6W8ZcJGWkL8bRPrFnwxMk71N1guetetzoY -xX7E3/CtSV7CSJMF74hE/ULNG8XdWAYY3zojSStA8UzYzO/pCA/PcmxBzxnkch4W -3LetTSKH9mN9k2p51jGLWIbRGod5qffmtb76xRzhyhgryCV/afwfJxKeXwjDz8ty -J6qFBXclDjTWVHHOU8hGvu4Z4PD6cbQ68tLlfFoDRq6nqKufFKpxOyw9ioLcPWbz -+rJsnqE1+5QR4tisplmSQtQ5nI45Wns+UCmsEJm+gPkyp9pBQVudkEo1OSyCSSwZ -evwZgkD2YclUpxcQRQR/Sy4Kvrwv3D+6zfgovClqpI3SHvQ1v/TXa3wB/RTB1H0q -0Qn4FWp63AaOBNrC ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAweTELMAkGA1UEBhMCR0Ix -EDAOBgNVBAgMB0VuZ2xhbmQxEjAQBgNVBAoMCUFsaWNlIEx0ZDEoMCYGA1UECwwf -QWxpY2UgTHRkIENlcnRpZmljYXRlIEF1dGhvcml0eTEaMBgGA1UEAwwRQWxpY2Ug -THRkIFJvb3QgQ0EwHhcNMTcwNzI1MDMxNzE0WhcNMjcwNzIzMDMxNzE0WjCBgTEL -MAkGA1UEBhMCR0IxEDAOBgNVBAgMB0VuZ2xhbmQxEjAQBgNVBAoMCUFsaWNlIEx0 -ZDEoMCYGA1UECwwfQWxpY2UgTHRkIENlcnRpZmljYXRlIEF1dGhvcml0eTEiMCAG -A1UEAwwZQWxpY2UgTHRkIEludGVybWVkaWF0ZSBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAL1whyll1+/qWhAUdy6U5vtopX0wzJrg3dk8tIlpDChh -khTEK779aQNapRKpZmJ6hnCkg7buVOSBP2WqqGQ1s9cakBSFkDyy5hrqeSzIR93w -9n2sTc4EBD0b8QWn5D0hdoWLT3+OwFHCBf/vb+qA9Vz0P/PRPYUnKttQH6nXTj9C -+AzegfS4SbfDJ4XdhbzCewgUvr3rqP61AQuEwZq7qoVCA3bFSASUfbJgMBxJgfBG -KynueJ62L+wbZLXUDq9G3T0KIUlxgGIcPQ0tu2kW7uSeY5wZazuvNJCHM9HKsjUf -wb8GgavQRlgunE9zXAEr+iP2DQrmZXdhJkkb4EyG1vuTMK3DtGjlpXAVGsiuuZ1o -PVYZDVKhfKFN9tyop/dppxDTHyJlp2prtsudhtqwzYDqrUsMu4/LMWvxgUcTK4U7 -mPSBcvOb4fTqXirNRYsqi8BK/nxt/hUBVG0vEnoIH0ppzqWvMcsMtMi3535sErUJ -k8IVKYIGB9OKb9SzpERYT6+BH9sUURZ/xyhRd2pj7EiVAEVxrrVoedZJzLRuXH99 -qhFG2HnDAaDC9LX09GveTzgUVUfif5fJgGBkzslpM3z8t3THz9RjrqtrzKOCHcZF -cgt46oQByT0UjhIPCz3/6h04XzSszue8aTAwi1JaYhHoXEPolgJRoLeuFdsJtfyt -AgMBAAGjZjBkMB0GA1UdDgQWBBSiTrrHxly7SsSV+MqprYstABOIjDAfBgNVHSME -GDAWgBSTaHXZxq7+zWT8gZHQ4BRZlt/xrzASBgNVHRMBAf8ECDAGAQH/AgEAMA4G -A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAakyu4lsOWz2+VHI0S6xb -M/afSDgnmI+i/1lSQ7UHM1XIvuINIzAcWndU1XuHyFjT7p9ZDPZ52gcseIenrKOD -EsJWKO3u33to3YUMfBCJi9VbTCtd6rkjuFggN6EKM1esqs0kgenWmvEQSv73OOii -UCAbif4fSva6C5PhgK7X0zE+hTsPxRZnN8baRlL01IHEraG+PfYCEpjvzExzoaW6 -aLNS0DAS1escb9K5u6Cf4KIxkdqpcYIW7v7tehj5KS3E0cRv3QAaMUBkMWTWlSP3 -irzC0OB8BFuYZ1OxDYnxhSY1mfwfI8kWrvA83okS8qwfjq/rty53VG3tON9GzGXg -P1SQ3xB/6yxSvskcbN1blfHJfJRpOIxBvAydhdBCh7PO0WJzTP8kmffMhOiT5AdE -jcJVxWSjwqUetomlNiErEvo7ZmxEwQZQE5wnuGM4eAbV87zLVrnj+viRo1dP7RFN -iRUwjrxKpozUY5AGY2hZdFrWObBe1AvLDQcNDUc+oMwgnIBC2YtO1cTKJ3IFru0f -Av48lyJ88AfO2W7pEfoVqAAZszu2s0VZB5W9fBOQLizvkjK8s5YeUPdhW3epEYF9 -I1PsTSNdN+abV5qNdIjgRVtNlV63+1y0Ez7J7RvO847ZYTuqHnfaRG03p10YnxBs -WcSe5ozInV3EZ9TxFcGQR+E= ------END CERTIFICATE----- diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/chain2.crt b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/chain2.crt deleted file mode 100644 index adebb2c27..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/chain2.crt +++ /dev/null @@ -1,68 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIJAIvnWZAlr466MA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV -BAYTAkdCMRAwDgYDVQQIDAdFbmdsYW5kMRIwEAYDVQQKDAlBbGljZSBMdGQxKDAm -BgNVBAsMH0FsaWNlIEx0ZCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxGjAYBgNVBAMM -EUFsaWNlIEx0ZCBSb290IENBMB4XDTE3MDcyNTA0MzIzMloXDTM3MDcyMDA0MzIz -MloweTELMAkGA1UEBhMCR0IxEDAOBgNVBAgMB0VuZ2xhbmQxEjAQBgNVBAoMCUFs -aWNlIEx0ZDEoMCYGA1UECwwfQWxpY2UgTHRkIENlcnRpZmljYXRlIEF1dGhvcml0 -eTEaMBgGA1UEAwwRQWxpY2UgTHRkIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQCr0svStagERnhKrQdeSWh+ZyRICAVVNfw3y3cIPchqfAdw -FP7bTxAbdnJUbNcJR1//asibURcJO3iL64DN346lso+E1HQy/WFeAKf0wqc9EkDv -vQ+77mkZY6pVtLoDWrXU7jfgW6QLKWazw+ZonFAq9EQ7DWTh/EH9V9l1A/1vOCcL -UNIq/b5lk9uCm+HPJ/2bmfx9fhwv+IAQTJPvCxrOsHx1HrDPUgg3Nx9yp5VBgKX0 -Bh4Rps8OWxJRrwV0ysttV+TN+0CJqvFlQpot0LXQzmv1k+OPaDya3p2jKpljjsQn -nt6Vsp2Lv7jtnCERES4g4O8CEz/zP6Lbx2ZK2dmhych1oBKep9qFqNoZPZAaqKDV -uDukWchaTiDEHrJpWmGkTlihHQJD15sFtpyc1H3H50LPTj+er7uet1a6sPBCGOFn -VLjmrI74e7ZatBxyWX/o1F2xA8yNs5JvbyEdfQ4txeMgsFhx1X40pgJ5stWUwN8r -M3VCUAK1kXwVGOizjrqs3ACioz7lBTjCte7cwUrR+QlT3z80Mqv9lc1cF1mkwJhR -ESiH2kHaaHX+BKBvRNXV59XjGR9wV0lb4F1XOoSi3FvLxFlTBcAUnEoTF2z1CAZv -c5xfR7g4TS10mZTy3PQFsG2T9lSkpAb1lMohnkbjrUFkEejsQxsOoix47pwiCwID -AQABo2MwYTAdBgNVHQ4EFgQUQHu8d62TEViMc7Dn5RkuyKOMMpYwHwYDVR0jBBgw -FoAUQHu8d62TEViMc7Dn5RkuyKOMMpYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B -Af8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ3yAM+LufcaJDV66e+HR2dZz339 -YeYRdrM2v8c41F/NV9Tl5ydAVPS12h5ixHdGi7WKV4Sw38x9TrOLPYxyRbyewMeE -+htzg/4VzQLwCxEbOOjhMsEhojOQBtI/a0ZvxE0tw/1Kd7s2K3fvpLVFjc4+tbAr -D0ai6j1aBPIkhQMHEjeOkg02BsO8nmt3i5q3qg2RbJkpIfDGFaLnw0vfIu15uZye -ixp1vOU29RtAuBcsLhjSnBQrgb7zEE15dKMznKweCymQlTSdzrfr5u0qXu9oqJAb -Z3MvyBbR3qwcbMBejOELKP4lyruvOXEqSaBQ7periKqmxfzS5Hy3v8IvmM9PToB1 -HPX4QhRu1TI74px1/yY63dqMa6KCmv4QN6EhohJ/EQxmT/4ciXha4kLgQmGXjCnR -Gjdhzo3Y1JBsiBAqF6FTTi3+0lbI8rYcbPjBkxVC80DKMVhCYD/DABDMKlPps3Jc -ZNUhDrmdHdUeNz/986LfrWSTRI8f2xXSr3bReVdLXzGKAUGnHAfc+4KUhX/HB3QG -WXfVz9Vn6nUsALSTkOjhiHvUdyOVea6ZdwNE16FtOAdHheN44g+EPIyzuxmIoc2n -ltqBXH123OiJxxtqkVEhj4mKLJToNP31pDe+mSB9abc+9lIvx/m1OBYNXEIBNvbX -1PAp0uZNt3EQG3jk ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAweTELMAkGA1UEBhMCR0Ix -EDAOBgNVBAgMB0VuZ2xhbmQxEjAQBgNVBAoMCUFsaWNlIEx0ZDEoMCYGA1UECwwf -QWxpY2UgTHRkIENlcnRpZmljYXRlIEF1dGhvcml0eTEaMBgGA1UEAwwRQWxpY2Ug -THRkIFJvb3QgQ0EwHhcNMTcwNzI1MDQzMjM4WhcNMjcwNzIzMDQzMjM4WjCBgTEL -MAkGA1UEBhMCR0IxEDAOBgNVBAgMB0VuZ2xhbmQxEjAQBgNVBAoMCUFsaWNlIEx0 -ZDEoMCYGA1UECwwfQWxpY2UgTHRkIENlcnRpZmljYXRlIEF1dGhvcml0eTEiMCAG -A1UEAwwZQWxpY2UgTHRkIEludGVybWVkaWF0ZSBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAM7tr9f5nhWuPEDVXvfP8k33hyWxbvY7+ekZV44l+VbT -Tv17FhBWcm8lZyoS4hCG3tKOwD0l+GB8ngwZ0aRNfPL20YXg87IvTVLyx27zZWZi -uAXvx/uTMjXgOrn1Gw5MZfNyC0X3HtpgMK7isx1/kCn8sOEaqNAcLJ0BDcNw4XRc -ZAkjCAp6LDwR6okczzPPzbvr0Slq846GEWXOxfkByLFlZTbZg6nOv4kim6b4K/Wr -nboMiW3bCnn8oAkKCQh/UYwH7kgEbN9EVSQ5ZPch6eOmMriumx5qdDbTrvATgHNX -4AaM9Nsnw05/8dkQ+OxQl3BD8F1G1pq7jkm55imOzPBDXVmjwURGV/VbT886o9uP -B1nI2neE3D48MuzxA6IovRKxNp2KfCfrIu9VCmdRopsUnfBckPoWWJBQoszfGAtO -ynQHDuj/KYVGVS9qpCJtfFNx4L5oJj1TDJrm3DQOC3jATMhCs/0KmdHCYAhxZiJe -pIR7RkgmMK/J5EoKUxBpY2884Kkqn4BCrTnK+CLD4W/W3uP7aZXYtVkOqAejcwXL -DnjwBEOhBDNkeaBroKZWa/hRAsQWVbjq2oeXwuocqb/S3sd7E3Ac++tz0Gbbc8eb -Ci64/J5nsjTOmxCiG1IDVUC8QvLqZS/LxLsqOyh+Ri4GGUnfUlnbMejIffiO/TZN -AgMBAAGjZjBkMB0GA1UdDgQWBBQ1/PMUfEZESfRns/RijXSmguAWwjAfBgNVHSME -GDAWgBRAe7x3rZMRWIxzsOflGS7Io4wyljASBgNVHRMBAf8ECDAGAQH/AgEAMA4G -A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAaRCCZrvh0na2aegjkTDA -Xy82AXAyhIoR+dmNJYvawMz2LSddJSj8GNSi8kth6MkQ0x1D/xwlx5Q6Uzxd6P3B -Jm4wo+KVakYTq+V8O88H2cAn5NgiruN4ndaicAevNqNwEVD9ALot7/p/yJHLR2gc -4NqChzYEQkcme9CfTozHXG6OkXZK6MOarrj6BUu+T1AWD36z/U4TRnjcOCKmXKi8 -OngiyL5vDEfZij4imGVT2iDCuTQrylFTDvGhUl9il66UY+oICypxV1FETa2tR9qO -uyxe7TVx8JVNP1upxQEzobgqV7inLkPLC4lhbEFLzmVHUWIe4CM3Ld71VbCSMWoF -R7TEKUv4lizKlHuCbCT8w0pJIZ9hWbXrR16x7avjT5uiF7KY0W4r2XD6iIv0xbTN -l5DUF6p50xgr7SsGqWW0P3C8E9BcmkPRbxbWLVA46IVNzqDzMlr6AsJFO01IQRFE -RHcFhLOux1BT5J1iQnYlX6/u9mIINGm7e24MzBg11fznyGmyVW4qlD9A/AsFUDoK -Jd2kX828H56s6EuTRQ8yCxAHAz1nZPpWinc0M4VRGj1w08rYwnIMfZiQDEf7OOL4 -FBdZbSbYZwZs1V/jQznsbOX4sITVg3wrWe1sGA4Vg8SztWluTYGiZDavdOECWjtA -MfPJw2EzXqJkCUwsGo7byKg= ------END CERTIFICATE----- diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_gtm_irule.tcl b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_gtm_irule.tcl deleted file mode 100644 index d2283646c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_gtm_irule.tcl +++ /dev/null @@ -1,8 +0,0 @@ -when LB_SELECTED { - # Capture IP address chosen by WIP load balancing - set wipHost [LB::server addr] -} - -when LB_FAILED { - set wipHost [LB::server addr] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_iapp_service_parameters_f5_http.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_iapp_service_parameters_f5_http.json deleted file mode 100644 index 31fce52a7..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_iapp_service_parameters_f5_http.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "name": "http_example", - "partition": "Common", - "template": "/Common/f5.http", - "inheritedDevicegroup": "true", - "deviceGroup": "none", - "inheritedTrafficGroup": "true", - "trafficGroup": "/Common/traffic-group-local-only", - "lists": [ - { - "name": "irules__irules", - "encrypted": "no", - "value": [ - "/Common/lgyft" - ] - }, - { - "name": "net__client_vlan", - "encrypted": "no", - "value": [ - "/Common/net2" - ] - } - ], - "tables": [ - { - "columnNames": [ - "name" - ], - "name": "pool__hosts", - "rows": [ - { - "row": [ - "demo.example.com" - ] - } - ] - }, - { - "columnNames": [ - "addr", - "connection_limit" - ], - "name": "pool__members", - "rows": [ - { - "row": [ - "10.1.1.1", - "0" - ] - }, - { - "row": [ - "10.1.1.2", - "0" - ] - } - ] - } - ], - "variables": [ - { - "name": "afm__policy", - "value": "/#do_not_use#" - }, - { - "name": "afm__dos_security_profile", - "value": "/#do_not_use#" - }, - { - "name": "afm__protocol_security_profile", - "value": "/#do_not_use#" - }, - { - "name": "asm__use_asm", - "value": "/#do_not_use#" - }, - { - "name": "client__http_compression", - "value": "/#do_not_use#" - }, - { - "name": "client__standard_caching_without_wa", - "value": "/#do_not_use#" - }, - { - "name": "client__tcp_wan_opt", - "value": "/#create_new#" - }, - { - "name": "monitor__monitor", - "value": "/#create_new#" - }, - { - "name": "monitor__frequency", - "value": "30" - }, - { - "name": "monitor__uri", - "value": "/my/path" - }, - { - "name": "monitor__response", - "value": "" - }, - { - "name": "net__client_mode", - "value": "wan" - }, - { - "name": "net__server_mode", - "value": "lan" - }, - { - "name": "net__vlan_mode", - "value": "all" - }, - { - "name": "pool__addr", - "value": "10.10.10.10" - }, - { - "name": "pool__http", - "value": "/#create_new#" - }, - { - "name": "pool__mask", - "value": "" - }, - { - "name": "pool__persist", - "value": "/#cookie#" - }, - { - "name": "pool__lb_method", - "value": "least-connections-member" - }, - { - "name": "pool__pool_to_use", - "value": "/#create_new#" - }, - { - "name": "pool__port_secure", - "value": "443" - }, - { - "name": "pool__redirect_port", - "value": "80" - }, - { - "name": "pool__redirect_to_https", - "value": "yes" - }, - { - "name": "pool__xff", - "value": "yes" - }, - { - "name": "server__oneconnect", - "value": "/#create_new#" - }, - { - "name": "server__tcp_lan_opt", - "value": "/#create_new#" - }, - { - "name": "ssl__cert", - "value": "/Common/default.crt" - }, - { - "name": "ssl__client_ssl_profile", - "value": "/#create_new#" - }, - { - "name": "ssl__key", - "value": "/Common/default.key" - }, - { - "name": "ssl__mode", - "value": "client_ssl" - }, - { - "name": "ssl__use_chain_cert", - "value": "/#do_not_use#" - }, - { - "name": "ssl_encryption_questions__advanced", - "value": "yes" - }, - { - "name": "stats__analytics", - "value": "/#do_not_use#" - }, - { - "name": "stats__request_logging", - "value": "/#do_not_use#" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_iapp_template.iapp b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_iapp_template.iapp deleted file mode 100644 index 995bd4d63..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_iapp_template.iapp +++ /dev/null @@ -1,56 +0,0 @@ -cli admin-partitions { - update-partition Common -} - -sys application template foo.iapp { - - actions { - definition { - - implementation { - set cfg { ltm virtual forwarding-repro { - destination 0.0.0.0:any - description "something 1" - mask any - profiles { - fastL4 { } - } - source 1.1.1.1/32 - translate-address disabled - translate-port disabled - vlans { __forwarding_vlans__ } - vlans-enabled -} } - - - if {![info exists {::var__forwarding_vlans}] || (${::var__forwarding_vlans} == "")} { - set {::var__forwarding_vlans} "{}" - puts "Info: assigning empty string to variable {::var__forwarding_vlans}" - } - - - set cfg [string map "__forwarding_vlans__ ${::var__forwarding_vlans} __app_service__ $tmsh::app_name.app/$tmsh::app_name " $cfg] - set fileId [open /var/tmp/demo.repro.cfg "w"] - puts -nonewline $fileId $cfg - close $fileId - - - tmsh::load sys config merge file /var/tmp/demo.repro.cfg - } - - presentation { - - include "/Common/f5.apl_common" - section var { - string forwarding_vlans display "xxlarge" - } - - text { - var "General variables" - var.forwarding_vlans "__var__forwarding_vlans__" - } - } - role-acl { admin manager resource-admin } - } - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_insecure_cert1.crt b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_insecure_cert1.crt deleted file mode 100644 index 1d22f3028..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_insecure_cert1.crt +++ /dev/null @@ -1,101 +0,0 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=US, ST=New York, L=New York, O=ACME CA, OU=Coyote, CN=ourca.domain.local - Validity - Not Before: Jun 30 16:46:09 2016 GMT - Not After : Jun 25 16:46:09 2036 GMT - Subject: C=US, ST=New York, O=ACME, OU=Coyote, CN=cert1.domain.local - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:d6:0f:bd:26:ef:14:4d:09:f6:db:8b:01:f5:4e: - 6c:03:b1:35:20:16:b8:1b:7c:e6:b6:8d:97:1b:b0: - 4f:8a:b6:cb:54:7e:7a:ff:fd:af:02:db:bf:9d:cf: - 9a:4c:0d:87:93:8b:cc:61:f3:23:a9:6f:8e:d4:82: - 2c:93:b6:e2:fa:37:ed:8a:d3:23:8f:6d:b5:78:4a: - 38:ba:93:f9:4a:1c:40:06:33:d7:c0:98:20:d4:16: - ac:a4:a5:6b:41:20:4c:3a:55:7e:c7:50:e7:95:07: - 4e:86:15:86:7a:0f:6c:57:d2:07:1c:97:24:51:5b: - 4e:f5:52:3a:f8:4f:95:6b:6c:83:1f:34:4e:ee:b0: - ae:fe:46:90:38:f1:4d:85:72:8b:46:bc:d1:62:37: - 65:5a:de:bb:16:51:1e:f5:cb:a0:ef:d6:7b:11:6f: - 3b:0c:49:17:bc:4d:8c:f5:d9:f0:35:6b:f7:b6:4d: - 50:eb:47:81:e3:06:f2:bd:ec:67:4f:ab:2b:03:aa: - e2:1e:42:22:a9:c9:59:dc:0d:19:fb:c5:02:1d:d7: - 58:e4:04:53:0a:1d:79:bb:c1:33:f1:cd:b7:10:2e: - b4:6e:9b:dc:60:66:05:50:9f:20:66:a1:71:00:51: - 54:cf:0a:70:f4:7c:45:c6:f0:a7:1c:11:2f:3e:a3: - 1f:bf - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: - 2D:FB:27:C7:B4:32:FF:F7:87:DB:2D:A7:76:AE:F0:96:7E:DA:DC:17 - X509v3 Authority Key Identifier: - keyid:4F:2A:15:49:E6:CC:05:2F:2B:F4:0E:CC:BA:2E:4C:DF:13:90:F0:78 - - Signature Algorithm: sha256WithRSAEncryption - 3f:46:1c:3b:58:b4:99:f3:75:00:47:d2:fe:ba:ba:9a:04:46: - 62:b6:2d:a0:0f:8f:c0:95:2a:58:8b:61:f5:14:90:30:26:37: - 94:a1:a6:29:20:c9:b5:08:d7:f9:15:cb:9d:9c:19:ed:2f:a4: - e6:91:48:85:1a:f7:ab:17:5e:79:23:69:b8:3c:0c:48:ae:c8: - ba:90:d0:05:fb:33:7e:86:fd:12:f8:2d:0f:ff:16:15:9a:dc: - 76:48:7d:65:5b:4e:93:14:e8:be:37:d1:13:f7:a7:b1:cd:ad: - ae:4f:e1:72:b9:53:2d:cd:e6:42:76:44:93:21:28:58:c0:44: - ab:3c:da:5b:e5:55:ab:04:86:4d:9c:4c:33:f4:4e:13:98:e9: - 0f:d1:a3:70:2b:1d:11:20:47:26:f6:d8:45:7f:88:ad:f2:c1: - 81:0f:be:cd:6c:79:80:94:30:eb:8d:cc:f3:7d:a1:3e:6c:6f: - fa:8f:f3:1f:2e:76:97:3f:8a:1b:67:3b:e0:f9:b1:3c:6b:dc: - 64:1b:00:73:e9:89:81:f6:7f:51:f3:51:c8:b9:96:5f:fd:55: - f8:77:6f:88:bc:65:b3:e2:30:a4:00:7a:79:68:e0:36:8b:a9: - 1b:06:9b:20:fe:fe:98:aa:56:58:c8:08:a4:7b:12:59:ff:3d: - bd:5e:13:3b:c6:c7:8a:00:5b:cb:27:18:02:ee:cb:38:c2:b7: - a9:51:04:ef:31:ca:49:09:48:14:13:eb:91:e2:26:8c:88:5f: - 1c:78:e1:0d:90:29:d7:c1:fc:c8:89:fd:4d:53:0b:99:58:c2: - 1a:24:3d:c0:a2:4c:a3:d9:c7:95:c5:bc:72:fa:02:f1:ab:dd: - aa:2b:9e:a0:bb:1a:68:2d:09:8c:a2:99:0d:26:ec:9e:30:19: - 01:5a:41:45:63:b3:c5:db:24:32:4c:fe:7f:f3:ce:e9:4d:00: - 64:cf:bb:15:34:2d:31:6e:4f:c0:96:40:9b:32:35:65:92:01: - 29:7e:74:02:50:fd:3b:3b:3a:a3:9f:6a:c0:a5:be:3f:c3:07: - d6:8c:2a:c6:f4:0f:32:bd:3b:fc:45:90:d2:46:ee:6f:c3:2f: - 26:8c:97:0c:e8:da:9a:97:03:0b:86:17:45:a6:62:69:4e:8d: - cf:f8:bf:ea:2f:dc:ff:95:14:15:bd:92:2d:8a:08:cf:ce:8a: - b0:f6:34:0a:a2:0e:49:31:44:e1:47:fb:37:52:53:59:93:25: - 40:cc:ac:67:2d:a2:b6:9b:75:fd:13:a5:a7:93:4f:72:05:75: - cd:b1:37:f6:3b:69:3b:24:a1:1f:23:f0:cd:bb:ae:18:b3:aa: - eb:9f:d7:97:06:ba:fd:44 ------BEGIN CERTIFICATE----- -MIIExjCCAq6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJVUzER -MA8GA1UECAwITmV3IFlvcmsxETAPBgNVBAcMCE5ldyBZb3JrMRAwDgYDVQQKDAdB -Q01FIENBMQ8wDQYDVQQLDAZDb3lvdGUxGzAZBgNVBAMMEm91cmNhLmRvbWFpbi5s -b2NhbDAeFw0xNjA2MzAxNjQ2MDlaFw0zNjA2MjUxNjQ2MDlaMF0xCzAJBgNVBAYT -AlVTMREwDwYDVQQIDAhOZXcgWW9yazENMAsGA1UECgwEQUNNRTEPMA0GA1UECwwG -Q295b3RlMRswGQYDVQQDDBJjZXJ0MS5kb21haW4ubG9jYWwwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDWD70m7xRNCfbbiwH1TmwDsTUgFrgbfOa2jZcb -sE+KtstUfnr//a8C27+dz5pMDYeTi8xh8yOpb47UgiyTtuL6N+2K0yOPbbV4Sji6 -k/lKHEAGM9fAmCDUFqykpWtBIEw6VX7HUOeVB06GFYZ6D2xX0gcclyRRW071Ujr4 -T5VrbIMfNE7usK7+RpA48U2FcotGvNFiN2Va3rsWUR71y6Dv1nsRbzsMSRe8TYz1 -2fA1a/e2TVDrR4HjBvK97GdPqysDquIeQiKpyVncDRn7xQId11jkBFMKHXm7wTPx -zbcQLrRum9xgZgVQnyBmoXEAUVTPCnD0fEXG8KccES8+ox+/AgMBAAGjezB5MAkG -A1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRp -ZmljYXRlMB0GA1UdDgQWBBQt+yfHtDL/94fbLad2rvCWftrcFzAfBgNVHSMEGDAW -gBRPKhVJ5swFLyv0Dsy6LkzfE5DweDANBgkqhkiG9w0BAQsFAAOCAgEAP0YcO1i0 -mfN1AEfS/rq6mgRGYrYtoA+PwJUqWIth9RSQMCY3lKGmKSDJtQjX+RXLnZwZ7S+k -5pFIhRr3qxdeeSNpuDwMSK7IupDQBfszfob9EvgtD/8WFZrcdkh9ZVtOkxTovjfR -E/ensc2trk/hcrlTLc3mQnZEkyEoWMBEqzzaW+VVqwSGTZxMM/ROE5jpD9GjcCsd -ESBHJvbYRX+IrfLBgQ++zWx5gJQw643M832hPmxv+o/zHy52lz+KG2c74PmxPGvc -ZBsAc+mJgfZ/UfNRyLmWX/1V+HdviLxls+IwpAB6eWjgNoupGwabIP7+mKpWWMgI -pHsSWf89vV4TO8bHigBbyycYAu7LOMK3qVEE7zHKSQlIFBPrkeImjIhfHHjhDZAp -18H8yIn9TVMLmVjCGiQ9wKJMo9nHlcW8cvoC8avdqiueoLsaaC0JjKKZDSbsnjAZ -AVpBRWOzxdskMkz+f/PO6U0AZM+7FTQtMW5PwJZAmzI1ZZIBKX50AlD9Ozs6o59q -wKW+P8MH1owqxvQPMr07/EWQ0kbub8MvJoyXDOjampcDC4YXRaZiaU6Nz/i/6i/c -/5UUFb2SLYoIz86KsPY0CqIOSTFE4Uf7N1JTWZMlQMysZy2itpt1/ROlp5NPcgV1 -zbE39jtpOyShHyPwzbuuGLOq65/Xlwa6/UQ= ------END CERTIFICATE----- diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_insecure_key1.key b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_insecure_key1.key deleted file mode 100644 index a89a29161..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_insecure_key1.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA1g+9Ju8UTQn224sB9U5sA7E1IBa4G3zmto2XG7BPirbLVH56 -//2vAtu/nc+aTA2Hk4vMYfMjqW+O1IIsk7bi+jftitMjj221eEo4upP5ShxABjPX -wJgg1BaspKVrQSBMOlV+x1DnlQdOhhWGeg9sV9IHHJckUVtO9VI6+E+Va2yDHzRO -7rCu/kaQOPFNhXKLRrzRYjdlWt67FlEe9cug79Z7EW87DEkXvE2M9dnwNWv3tk1Q -60eB4wbyvexnT6srA6riHkIiqclZ3A0Z+8UCHddY5ARTCh15u8Ez8c23EC60bpvc -YGYFUJ8gZqFxAFFUzwpw9HxFxvCnHBEvPqMfvwIDAQABAoIBAQCjQ7PP+y8vpvbp -8bbXoy2ND15mkA1xoazR9WIYEzxHny2rzx//GTyfYH1gXtPfR75tEYYb+vbrJxP4 -DyTysN2jXH7HkEwh+9oZ2fo0i+Hp3WwTjvzyftUjDfw1Q5lvPbQGFekxGgrXRpBk -ggxkEllfDeiwrLJdftfVEhe6BfD/0YibwQeHN7VoC4V8wOanKtDmx74W/1f7WhwQ -nKQnCrbYqNJa2nGvWiKU5Suvfb0v7tCnQYlfnCpUfj+wcnxlgmGkcyq1L+qC1qC8 -PO5i3T3LM5Yg8CSeGhO/q6gw/fUowuBN1cluTqN97oLHiEM5tLdjeVWwa1Vp0liv -1WXGT4eBAoGBAPtumMmyVTIorvV6KGNI/Eo6jfE0HOXVdXtm4iToDDuiYwto7/Ge -/kV+11Fpu0lV+eYPfZn175Of8FnQPwczQF1OOH/aQ/ViY8j87bZUbCy25mWrfNkh -2rRlyI3/OsSfL5SkyWpYB0yhSJZV9mSQJTZolB4GQRNPKtqi7NpB4WxBAoGBANnz -VS4JBJO75yeSG5BzPp5VVKm+nu0Betlva8GsHdEic8OM9bGpVozGysAW3Xdxp7q6 -gLJGyyuzpsxldCc/IdIlF5fz7gkLl4NoYanz9PSEr2XZLh9+2yXGkPFlC3IeHAUB -E+2UO9MFpWrmfKoAnYZCR6vJDxtQBpAlTUvJEYv/AoGBAPha62K32327P+7MJl7D -9ijgI9rwjebcbbpiCtlHuOWi5lCb6/7v/NvqiYcqeEvdOAXuoTNWAbsBTel5UPis -wFQp8pcfouccs9IRPEFQrLWSSIx+0sirrxtoOq1AQe18DAS4rRd1MmiYG1ocOVBm -LcvLixsJNHh9R6hFLM3+K0vBAoGANkmJ+gF9Bl9TYGPgQcay3jVa9Tzp0RcBRo+e -Q4tfkewG8bp2qF4JlN8fOWF4oHvKz5QM4lsH2EbTUS4kFHKBNhrPGaZEsDQW9UBW -s0J0zUMPfUrvViD+7RXcnIQSqcYeLJDsKc02aYWKgmoOuzmUAxEXUQ6vmJoCSH1C -F5JpsHkCgYEArwTSzb1+/ThQhK1JN8hJ4jMjQ8E7PzLTMILrdDALn2g1T4VzL7N7 -UG6oUieMlo/UH6cv6330dwaGVklXZbyDKSDROIafFcOpVfcvDUgJCjp3CaY9A2zG -+EPkRpeHKXAIgG+QuOwVOtYWcWltnBf61slTqiY2vKX1+ZGmrMrw1Zw= ------END RSA PRIVATE KEY----- diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_iworkflow_service.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_iworkflow_service.json deleted file mode 100644 index 10844dc12..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_iworkflow_service.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "tables":[ - { - "name": "pool__Members", - "section": "pool", - "columnNames": [ - "IPAddress", - "Port" - ], - "rows": [ - [ - "20.0.1.11", "80" - ], - [ - "20.0.1.12" - ] - ] - } - ], - "vars":[ - { - "name":"pool__addr", - "value":"172.27.1.10" - }, - { - "name":"pool__port", - "value":"900" - }, - { - "name":"vs__ProfileClientProtocol", - "value":"tcp" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_iworkflow_service_template_appsvcs_integration.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_iworkflow_service_template_appsvcs_integration.json deleted file mode 100644 index 84f3cd56b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_iworkflow_service_template_appsvcs_integration.json +++ /dev/null @@ -1,970 +0,0 @@ -{ - "vars":[ - { - "name":"extensions__Field1", - "description":"Extensions: Field 1", - "displayName":"Field1", - "isRequired":false, - "provider":"" - }, - { - "name":"extensions__Field2", - "description":"Extensions: Field 2", - "displayName":"Field2", - "isRequired":false, - "provider":"" - }, - { - "name":"extensions__Field3", - "description":"Extensions: Field 3", - "displayName":"Field3", - "isRequired":false, - "provider":"" - }, - { - "name":"feature__easyL4Firewall", - "description":"Security: Firewall: Configure L4 Firewall Policy", - "displayName":"easyL4Firewall", - "isRequired":false, - "provider":"auto", - "choices":[ - { - "value":"auto", - "description":"auto" - }, - { - "value":"base", - "description":"base" - }, - { - "value":"base+ip_blacklist_block", - "description":"base+ip_blacklist_block" - }, - { - "value":"base+ip_blacklist_log", - "description":"base+ip_blacklist_log" - }, - { - "value":"disabled", - "description":"disabled" - } - ] - }, - { - "name":"feature__insertXForwardedFor", - "description":"HTTP: Insert X-Forwarded-For Header", - "displayName":"insertXForwardedFor", - "isRequired":false, - "provider":"auto", - "choices":[ - { - "value":"auto", - "description":"auto" - }, - { - "value":"enabled", - "description":"enabled" - }, - { - "value":"disabled", - "description":"disabled" - } - ] - }, - { - "name":"feature__redirectToHTTPS", - "description":"HTTP: Security: Create HTTP(80)->HTTPS(443) Redirect", - "displayName":"redirectToHTTPS", - "isRequired":false, - "provider":"auto", - "choices":[ - { - "value":"auto", - "description":"auto" - }, - { - "value":"enabled", - "description":"enabled" - }, - { - "value":"disabled", - "description":"disabled" - } - ] - }, - { - "name":"feature__securityEnableHSTS", - "description":"HTTP: Security: Enable HTTP Strict Transport Security (only valid if ClientSSL is configured)", - "displayName":"securityEnableHSTS", - "isRequired":false, - "provider":"disabled" - }, - { - "name":"feature__sslEasyCipher", - "description":"TLS/SSL: Easy Cipher String (overrides VS section setting)", - "displayName":"sslEasyCipher", - "isRequired":false, - "provider":"disabled", - "choices":[ - { - "value":"compatible", - "description":"compatible" - }, - { - "value":"medium", - "description":"medium" - }, - { - "value":"high", - "description":"high" - }, - { - "value":"tls_1.2", - "description":"tls_1.2" - }, - { - "value":"tls_1.1+1.2", - "description":"tls_1.1+1.2" - }, - { - "value":"disabled", - "description":"disabled" - } - ] - }, - { - "name":"feature__statsHTTP", - "description":"HTTP: Stats Reporting", - "displayName":"statsHTTP", - "isRequired":false, - "provider":"auto", - "choices":[ - { - "value":"auto", - "description":"auto" - }, - { - "value":"enabled", - "description":"enabled" - }, - { - "value":"disabled", - "description":"disabled" - } - ] - }, - { - "name":"feature__statsTLS", - "description":"TLS/SSL: Stats Reporting", - "displayName":"statsTLS", - "isRequired":false, - "provider":"auto", - "choices":[ - { - "value":"auto", - "description":"auto" - }, - { - "value":"enabled", - "description":"enabled" - }, - { - "value":"disabled", - "description":"disabled" - } - ] - }, - { - "name":"iapp__apmDeployMode", - "description":"iApp: APM: Deployment Mode", - "displayName":"apmDeployMode", - "isRequired":false, - "provider":"preserve-bypass", - "choices":[ - { - "value":"preserve-bypass", - "description":"preserve-bypass" - }, - { - "value":"preserve-block", - "description":"preserve-block" - }, - { - "value":"redeploy-bypass", - "description":"redeploy-bypass" - }, - { - "value":"redeploy-block", - "description":"redeploy-block" - } - ] - }, - { - "name":"iapp__appStats", - "description":"iApp: Statistics Handler Creation", - "displayName":"appStats", - "isRequired":false, - "provider":"enabled", - "choices":[ - { - "value":"enabled", - "description":"enabled" - }, - { - "value":"disabled", - "description":"disabled" - } - ] - }, - { - "name":"iapp__asmDeployMode", - "description":"iApp: ASM: Deployment Mode", - "displayName":"asmDeployMode", - "isRequired":false, - "provider":"preserve-bypass", - "choices":[ - { - "value":"preserve-bypass", - "description":"preserve-bypass" - }, - { - "value":"preserve-block", - "description":"preserve-block" - }, - { - "value":"redeploy-bypass", - "description":"redeploy-bypass" - }, - { - "value":"redeploy-block", - "description":"redeploy-block" - } - ] - }, - { - "name":"iapp__logLevel", - "description":"iApp: Log Level", - "displayName":"logLevel", - "isRequired":false, - "provider":"7" - }, - { - "name":"iapp__mode", - "description":"iApp: Mode", - "displayName":"mode", - "isRequired":false, - "provider":"auto" - }, - { - "name":"iapp__routeDomain", - "description":"iApp: Route Domain", - "displayName":"routeDomain", - "isRequired":false, - "provider":"auto" - }, - { - "name":"iapp__strictUpdates", - "description":"iApp: Strict Updates", - "displayName":"strictUpdates", - "isRequired":false, - "provider":"enabled", - "choices":[ - { - "value":"enabled", - "description":"enabled" - }, - { - "value":"disabled", - "description":"disabled" - } - ] - }, - { - "name":"l7policy__defaultASM", - "description":"L7 Policy: Default ASM Policy", - "displayName":"defaultASM", - "isRequired":false, - "provider":"bypass" - }, - { - "name":"l7policy__defaultL7DOS", - "description":"L7 Policy: Default L7 DoS Policy", - "displayName":"defaultL7DOS", - "isRequired":false, - "provider":"bypass" - }, - { - "name":"l7policy__strategy", - "description":"L7 Policy: Match Strategy", - "displayName":"strategy", - "isRequired":false, - "provider":"/Common/first-match" - }, - { - "name":"pool__DefaultPoolIndex", - "description":"Virtual Server: Default Pool Index", - "displayName":"DefaultPoolIndex", - "isRequired":false, - "provider":"0", - "validator":"NonNegativeNumber" - }, - { - "name":"pool__MemberDefaultPort", - "description":"Pool: Member Default Port", - "displayName":"MemberDefaultPort", - "isRequired":false, - "provider":"" - }, - { - "name":"pool__addr", - "description":"Virtual Server: Address", - "displayName":"addr", - "isRequired":true, - "provider":"", - "validator":"IpAddress", - "serverTier":"foo", - "providerType":"NODE" - }, - { - "name":"pool__mask", - "description":"Virtual Server: Mask", - "displayName":"mask", - "isRequired":true, - "provider":"255.255.255.255", - "validator":"IpAddress" - }, - { - "name":"pool__port", - "description":"Virtual Server: Port", - "displayName":"port", - "isRequired":true, - "provider":"", - "validator":"PortNumber", - "serverTier":"foo", - "providerType":"PORT" - }, - { - "name":"vs__AdvOptions", - "description":"Virtual Server: Advanced Options", - "displayName":"AdvOptions", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__AdvPolicies", - "description":"Virtual Server: Advanced Policies", - "displayName":"AdvPolicies", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__AdvProfiles", - "description":"Virtual Server: Advanced Profiles", - "displayName":"AdvProfiles", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ConnectionLimit", - "description":"Virtual Server: Virtual Server Connection Limit (0=unlimited)", - "displayName":"ConnectionLimit", - "isRequired":false, - "provider":"0" - }, - { - "name":"vs__Description", - "description":"Virtual Server: Description", - "displayName":"Description", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__IpProtocol", - "description":"Virtual Server: IP Protocol", - "displayName":"IpProtocol", - "isRequired":false, - "provider":"tcp" - }, - { - "name":"vs__Irules", - "description":"Virtual Server: iRules (to specify multiple iRules seperate with a comma ex: irule1,irule2,irule3)", - "displayName":"Irules", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__Name", - "description":"Virtual Server: Name", - "displayName":"Name", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__OptionConnectionMirroring", - "description":"Virtual Server: Connection Mirroring", - "displayName":"OptionConnectionMirroring", - "isRequired":false, - "provider":"disabled", - "choices":[ - { - "value":"enabled", - "description":"enabled" - }, - { - "value":"disabled", - "description":"disabled" - } - ] - }, - { - "name":"vs__OptionSourcePort", - "description":"Virtual Server: Source Port Behavior", - "displayName":"OptionSourcePort", - "isRequired":false, - "provider":"preserve", - "choices":[ - { - "value":"preserve", - "description":"preserve" - }, - { - "value":"preserve-strict", - "description":"preserve-strict" - }, - { - "value":"change", - "description":"change" - } - ] - }, - { - "name":"vs__ProfileAccess", - "description":"Virtual Server: Access Profile", - "displayName":"ProfileAccess", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileAnalytics", - "description":"Virtual Server: Analytics Profile", - "displayName":"ProfileAnalytics", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileClientProtocol", - "description":"Virtual Server: Client-side L4 Protocol Profile", - "displayName":"ProfileClientProtocol", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileClientSSL", - "description":"Virtual Server: Client SSL Profile", - "displayName":"ProfileClientSSL", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileClientSSLAdvOptions", - "description":"Virtual Server: Client SSL Advanced Options", - "displayName":"ProfileClientSSLAdvOptions", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileClientSSLCert", - "description":"Virtual Server: Client SSL Certificate", - "displayName":"ProfileClientSSLCert", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileClientSSLChain", - "description":"Virtual Server: Client SSL Certificate Chain", - "displayName":"ProfileClientSSLChain", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileClientSSLCipherString", - "description":"Virtual Server: Client SSL Cipher String", - "displayName":"ProfileClientSSLCipherString", - "isRequired":false, - "provider":"DEFAULT" - }, - { - "name":"vs__ProfileClientSSLKey", - "description":"Virtual Server: Client SSL Key", - "displayName":"ProfileClientSSLKey", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileCompression", - "description":"Virtual Server: Compression Profile", - "displayName":"ProfileCompression", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileConnectivity", - "description":"Virtual Server: Connectivity Profile", - "displayName":"ProfileConnectivity", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileDefaultPersist", - "description":"Virtual Server: Default Persistence Profile", - "displayName":"ProfileDefaultPersist", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileFallbackPersist", - "description":"Virtual Server: Fallback Persistence Profile", - "displayName":"ProfileFallbackPersist", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileHTTP", - "description":"Virtual Server: HTTP Profile", - "displayName":"ProfileHTTP", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileOneConnect", - "description":"Virtual Server: OneConnect Profile", - "displayName":"ProfileOneConnect", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfilePerRequest", - "description":"Virtual Server: Per-Request Profile", - "displayName":"ProfilePerRequest", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileRequestLogging", - "description":"Virtual Server: Request Logging Profile", - "displayName":"ProfileRequestLogging", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileSecurityDoS", - "description":"Virtual Server: Security: DoS Profile", - "displayName":"ProfileSecurityDoS", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileSecurityIPBlacklist", - "description":"Virtual Server: IP Blacklist Profile", - "displayName":"ProfileSecurityIPBlacklist", - "isRequired":false, - "provider":"none" - }, - { - "name":"vs__ProfileSecurityLogProfiles", - "description":"Virtual Server: Security Logging Profiles", - "displayName":"ProfileSecurityLogProfiles", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileServerProtocol", - "description":"Virtual Server: Server-side L4 Protocol Profile", - "displayName":"ProfileServerProtocol", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__ProfileServerSSL", - "description":"Virtual Server: Server SSL Profile", - "displayName":"ProfileServerSSL", - "isRequired":false, - "provider":"" - }, - { - "name":"vs__RouteAdv", - "description":"Virtual Server: Route Advertisement", - "displayName":"RouteAdv", - "isRequired":false, - "provider":"disabled", - "choices":[ - { - "value":"disabled", - "description":"disabled" - }, - { - "value":"all_vs", - "description":"all_vs" - }, - { - "value":"any_vs", - "description":"any_vs" - }, - { - "value":"always", - "description":"always" - } - ] - }, - { - "name":"vs__SNATConfig", - "description":"Virtual Server: SNAT Configuration (enter SNAT pool name, 'automap' or leave blank to disable SNAT)", - "displayName":"SNATConfig", - "isRequired":false, - "provider":"automap" - }, - { - "name":"vs__SourceAddress", - "description":"Virtual Server: Source Address", - "displayName":"SourceAddress", - "isRequired":false, - "provider":"0.0.0.0/0" - }, - { - "name":"vs__VirtualAddrAdvOptions", - "description":"Virtual Address: Advanced Options", - "displayName":"VirtualAddrAdvOptions", - "isRequired":false, - "provider":"" - } - ], - "tables":[ - { - "name":"feature__easyL4FirewallBlacklist", - "columns":[ - { - "name":"CIDRRange", - "description":"CIDR Block:", - "isRequired":false, - "provider":"" - } - ], - "description":"Security: Firewall: Static Blacklisted Addresses (CIDR Format)", - "rows":[ - [ - "" - ] - ] - }, - { - "name":"feature__easyL4FirewallSourceList", - "columns":[ - { - "name":"CIDRRange", - "description":"CIDR Block:", - "isRequired":false, - "provider":"0.0.0.0/0" - } - ], - "description":"Security: Firewall: Static Allowed Source Addresses (CIDR Format)", - "rows":[ - [ - "" - ] - ] - }, - { - "name":"l7policy__rulesAction", - "columns":[ - { - "name":"Group", - "description":"Group:", - "isRequired":false, - "provider":"" - }, - { - "name":"Parameter", - "description":"Parameter:", - "isRequired":false, - "provider":"" - }, - { - "name":"Target", - "description":"Target:", - "isRequired":false, - "provider":"" - } - ], - "description":"L7 Policy: Rules: Action", - "rows":[ - [ - "", - "", - "" - ] - ] - }, - { - "name":"l7policy__rulesMatch", - "columns":[ - { - "name":"CaseSensitive", - "description":"Case Sensitive:", - "isRequired":false, - "provider":"no" - }, - { - "name":"Condition", - "description":"Condition:", - "isRequired":false, - "provider":"" - }, - { - "name":"Group", - "description":"Group:", - "isRequired":false, - "provider":"" - }, - { - "name":"Missing", - "description":"Missing:", - "isRequired":false, - "provider":"no" - }, - { - "name":"Negate", - "description":"Negate:", - "isRequired":false, - "provider":"no" - }, - { - "name":"Operand", - "description":"Operand:", - "isRequired":false, - "provider":"" - }, - { - "name":"Value", - "description":"Value:", - "isRequired":false, - "provider":"" - } - ], - "description":"L7 Policy: Rules: Matching", - "rows":[ - [ - "", - "", - "", - "", - "", - "", - "" - ] - ] - }, - { - "name":"pool__Members", - "columns":[ - { - "name":"AdvOptions", - "description":"Adv Options:", - "isRequired":false, - "provider":"" - }, - { - "name":"ConnectionLimit", - "description":"Connection Limit:", - "isRequired":false, - "provider":"0" - }, - { - "name":"IPAddress", - "description":"IP/Node Name:", - "isRequired":false, - "provider":"", - "providerType":"NODE" - }, - { - "name":"Index", - "description":"Pool Idx:", - "isRequired":false, - "provider":"0", - "validator":"NonNegativeNumber" - }, - { - "name":"Port", - "description":"Port:", - "isRequired":false, - "provider":"80", - "providerType":"PORT" - }, - { - "name":"PriorityGroup", - "description":"Priority Group:", - "isRequired":false, - "provider":"0" - }, - { - "name":"Ratio", - "description":"Ratio:", - "isRequired":false, - "provider":"1" - }, - { - "name":"State", - "description":"State:", - "isRequired":false, - "provider":"enabled" - } - ], - "description":"Pool: Members", - "serverTier":"foo", - "rows":[ - [ - "", - "", - "", - "", - "", - "", - "", - "" - ] - ] - }, - { - "name":"pool__Pools", - "columns":[ - { - "name":"AdvOptions", - "description":"Adv Options:", - "isRequired":false, - "provider":"" - }, - { - "name":"Description", - "description":"Description:", - "isRequired":false, - "provider":"" - }, - { - "name":"Index", - "description":"Index:", - "isRequired":false, - "provider":"0", - "validator":"NonNegativeNumber" - }, - { - "name":"LbMethod", - "description":"LB Method:", - "isRequired":false, - "provider":"round-robin" - }, - { - "name":"Monitor", - "description":"Monitor(s):", - "isRequired":false, - "provider":"" - }, - { - "name":"Name", - "description":"Name:", - "isRequired":false, - "provider":"" - } - ], - "description":"Pool: Pool Table", - "rows":[ - [ - "", - "", - "", - "", - "", - "" - ] - ] - }, - { - "name":"vs__BundledItems", - "columns":[ - { - "name":"Resource", - "description":"Resource:", - "isRequired":false, - "provider":"" - } - ], - "description":"Virtual Server: Bundled Items", - "rows":[ - [ - "" - ] - ] - }, - { - "name":"vs__Listeners", - "columns":[ - { - "name":"Destination", - "description":"Destination", - "isRequired":false, - "provider":"" - }, - { - "name":"Listener", - "description":"Listener:", - "isRequired":false, - "provider":"" - } - ], - "description":"Virtual Server: Additional Listeners", - "rows":[ - [ - "", - "" - ] - ] - }, - { - "name":"monitor__Monitors", - "columns":[ - { - "name":"Index", - "description":"Index:", - "isRequired":false, - "provider":"0", - "validator":"NonNegativeNumber" - }, - { - "name":"Name", - "description":"Name:", - "isRequired":false, - "provider":"" - }, - { - "name":"Options", - "description":"Options:", - "isRequired":false, - "provider":"" - }, - { - "name":"Type", - "description":"Type:", - "isRequired":false, - "provider":"" - } - ], - "description":"Monitor: Monitor Table", - "rows":[ - [ - "", - "", - "", - "" - ] - ] - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_ltm_irule.tcl b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_ltm_irule.tcl deleted file mode 100644 index 5f7624a33..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/create_ltm_irule.tcl +++ /dev/null @@ -1,18 +0,0 @@ -when RULE_INIT { - set static::FormBaseURL "/sp-ofba-form" - set static::FormReturnURL "/sp-ofba-completed" - set static::HeadAuthReq "X-FORMS_BASED_AUTH_REQUIRED" - set static::HeadAuthRet "X-FORMS_BASED_AUTH_RETURN_URL" - set static::HeadAuthSize "X-FORMS_BASED_AUTH_DIALOG_SIZE" - set static::HeadAuthSizeVal "800x600" - set static::ckname "MRHSession_SP" - set static::Basic_Realm_Text "SharePoint Authentication" -} - -when HTTP_REQUEST { - set apmsessionid [HTTP::cookie value MRHSession] -} - -when HTTP_RESPONSE { - # Insert persistent cookie for html content type and private session -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/current_easy_setup.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/current_easy_setup.json deleted file mode 100644 index 6eefe90ae..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/current_easy_setup.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "hostname": "iworkflow1", - "managementIpAddress": "10.0.2.15/24", - "managementRouteAddress": "10.0.2.2", - "internalSelfIpAddresses": [], - "selfIpAddresses": [], - "ntpServerAddresses": [], - "dnsServerAddresses": [ - "192.168.10.1", - "192.168.11.1" - ], - "dnsSearchDomains": [ - "dns.local.org" - ], - "generation": 0, - "lastUpdateMicros": 0 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/current_identified_devices_config_discovery.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/current_identified_devices_config_discovery.json deleted file mode 100644 index cf66b118a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/current_identified_devices_config_discovery.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "machineId": "f34e87f5-0494-4707-8dcc-980c7c0cdec3", - "generation": 2, - "lastUpdateMicros": 1490032874192306, - "kind": "shared:identified-devices:config:discovery:discoveryconfigworkerstate", - "selfLink": "https://localhost/mgmt/shared/identified-devices/config/discovery" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/current_setup.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/current_setup.json deleted file mode 100644 index 36dbfb3ab..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/current_setup.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "isAdminPasswordChanged": false, - "isRootPasswordChanged": false, - "generation": 4, - "lastUpdateMicros": 1490032896796125, - "kind": "shared:system:setup:systemsetupworkerstate", - "selfLink": "https://localhost/mgmt/shared/system/setup" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/data-group-address.txt b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/data-group-address.txt deleted file mode 100644 index d2f5a1687..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/data-group-address.txt +++ /dev/null @@ -1,5 +0,0 @@ -network 10.0.0.0 prefixlen 8 := "Network1", -network 172.16.0.0 prefixlen 12 := "Network2", -network 192.168.0.0 prefixlen 16 := "Network3", -host 192.168.20.1 := "Host1", -host 172.16.1.1 := "Host2", diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/data-group-integer.txt b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/data-group-integer.txt deleted file mode 100644 index 711ac1987..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/data-group-integer.txt +++ /dev/null @@ -1,6 +0,0 @@ -1 := alpha -2 := bravo -3 := charlie -4 := x-ray -5 := yankee -6 := zulu diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/data-group-string.txt b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/data-group-string.txt deleted file mode 100644 index c30fca282..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/data-group-string.txt +++ /dev/null @@ -1,6 +0,0 @@ -a := alpha -b := bravo -c := charlie -x := x-ray -y := yankee -z := zulu diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/f5.microsoft_adfs.v1.0.0.tmpl b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/f5.microsoft_adfs.v1.0.0.tmpl deleted file mode 100644 index e7a2f69cc..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/f5.microsoft_adfs.v1.0.0.tmpl +++ /dev/null @@ -1,2379 +0,0 @@ -cli script f5.iapp.1.3.0.cli { - -# Initialization proc for all templates. -# Parameters "start" and "stop" or "end". -proc iapp_template { action } { - set lev [tmsh::get_field_value [lindex [tmsh::get_config sys scriptd \ - log-level] 0] log-level] - switch $action { - start { - set ::clock_clicks [clock clicks] - if { $lev eq {debug} } { - puts "\nStarting iApp $tmsh::app_template_name [clock format \ - [clock seconds] -format {%m/%d/%Y %T}]\n" - } - tmsh::log_level $lev - tmsh::log info "Starting iApp template $tmsh::app_template_name" - } - stop - - end { - if { $lev eq {debug} } { - if { [info exists ::substa_debug] } { - puts $::substa_debug - } - puts "\nEnding iApp $tmsh::app_template_name [clock format \ - [clock seconds] -format {%m/%d/%Y %T}]\nRun time [expr \ - { ([clock clicks] - $::clock_clicks) / 1000 }] msec\n" - } - tmsh::log info "Ending iApp template $tmsh::app_template_name" - } - } - set ::HTTP_CONTENT_TYPES { application/(css\|css-stylesheet\|doc\|excel\|javascript\|json\|lotus123\|mdb\|mpp\|msaccess\|msexcel\|ms-excel\|mspowerpoint\|ms-powerpoint\|msproject\|msword\|ms-word\|photoshop\|postscript\|powerpoint\|ps\|psd\|quarkexpress\|rtf\|txt\|visio\|vnd\\.excel\|vnd\\.msaccess\|vnd\\.ms-access\|vnd\\.msexcel\|vnd\\.ms-excel\|vnd\\.mspowerpoint\|vnd\\.ms-powerpoint\|vnd\\.ms-pps\|vnd\\.ms-project\|vnd\\.msword\|vnd\\.ms-word\|vnd\\.ms-works\|vnd\\.ms-works-db\|vnd\\.powerpoint\|vnd\\.visio\|vnd\\.wap\\.cmlscriptc\|vnd\\.wap\\.wmlc\|vnd\\.wap\\.xhtml\\+xml\|vnd\\.word\|vsd\|winword\|wks\|word\|x-excel\|xhtml\\+xml\|x-java-jnlp-file\|x-javascript\|x-json\|x-lotus123\|xls\|x-mdb\|xml\|x-mscardfile\|x-msclip\|x-msexcel\|x-ms-excel\|x-mspowerpoint\|x-msproject\|x-ms-project\|x-msword\|x-msworks-db\|x-msworks-wps\|x-photoshop\|x-postscript\|x-powerpoint\|x-ps\|x-quark-express\|x-rtf\|x-vermeer-rpc\|x-visio\|x-vsd\|x-wks\|x-word\|x-xls\|x-xml) image/(photoshop\|psd\|x-photoshop\|x-vsd) text/(css\|html\|javascript\|json\|plain\|postscript\|richtext\|rtf\|vnd\\.wap\\.wml\|vnd\\.wap\\.wmlscript\|wap\|wml\|x-component\|xml\|x-vcalendar\|x-vcard) } -} - -proc iapp_is { args } { - set up_var [lindex $args 0] - upvar $up_var var - if { [info exists var] } { - foreach val [lrange $args 1 end] { - if { [subst $var] eq $val } { - return 1 - } - } - } - return 0 -} - -proc iapp_substa { args } { - upvar substa_in argx \ - substa_out rval - set argx $args - - # check the explicit value first. - # multiple layers of variable substitution requires multiple subst. - # error occurs here if any of the substituted variables do not exist - # valid wildcard (*) array entries will fail here first. - uplevel { - append ::substa_debug "\n$substa_in" - if { [info exists [set substa_in]] } { - set substa_out [subst $$substa_in] - set substa_out [subst $substa_out] - } else { - # since explicit value did not exist, try a wildcard value. - # substitute "*" as the array key and repeat. - set substa_tmp [split $substa_in "()"] - set substa_in "[lindex $substa_tmp 0](*)" - append ::substa_debug "*" - if { [info exists [set substa_in]] } { - set substa_out [subst $$substa_in] - set substa_out [subst $substa_out] - } else { - error "substa \"$substa_in\" array value not found" - } - } - } - return $rval -} - -proc iapp_conf { args } { - - # Return value $object_name is set to the first word in $arg that - # contains an underscore, since the position of the object name in - # tmsh syntax is not consistent. - set args [join $args] - set object_name [lindex $args [lsearch -glob $args "*_*"]] - - # Global array ::tmsh_history persists between calls to iapp_conf - # in order to suppress duplicate commands. - if { ![info exists ::tmsh_history($args)] } { - set ::tmsh_history($args) 1 - iapp_debug $args - switch -exact -- [string range $args 0 5] { - create { tmsh::create [string range $args 7 end] } - modify { tmsh::modify [string range $args 7 end] } - delete { tmsh::delete [string range $args 7 end] } - default { error "iapp_conf illegal parameter" } - } - } - return $object_name -} - -proc iapp_make_safe_password { password } { - return [string map { \' \\\' \" \\\" \{ \\\{ \} \\\} \; \\\; \| \\\| \# \\\# \ \\\ \\ \\\\ } $password] -} - -proc iapp_pull { loc items_list } { - upvar $items_list items - if { [set item [lindex $items $loc]] != "" } { - set items [lreplace $items $loc $loc] - } - return $item -} - -proc iapp_process_flags { flags_array args_list } { - upvar $flags_array flags - upvar $args_list args - - if { [set dubdash [lsearch $args "--"]] != -1 } { - set args [lreplace $args $dubdash $dubdash]; - } else { - set dubdash end - } - - foreach flag [array names flags] { - while { [set ptr [lsearch [lrange $args 0 $dubdash] $flag]] != -1 } { - set args [lreplace $args $ptr $ptr]; - - # we want to run the code in the flags_array at the calling - # proc's level so that the variables that it sets up are - # available there. - set access_var [format "$%s(%s)" $flags_array $flag] - set command [subst -nocommands { set ptr $ptr ; subst $access_var }] - - uplevel 1 $command - } - } - return $args -} - -proc iapp_tmos_version { args } { - # if $::version equals "", it might just mean that it hasn't been - # initialized yet - use a global variable so that subsequent comparisons - # don't have to fetch this from the MCP - if { ![info exists ::version] || $::version eq "" } { - if { [catch { set version_blob [tmsh::show sys version] } err] } { - tmsh::log err "unable to retrieve TMOS version" - error "unable to retrieve TMOS version" - } - # the first and last few lines of this output can be skipped because - # they are either blank or don't represent key/value pairs - # TODO: this won't work for hotfixes - foreach line [string trim [lrange [split $version_blob "\n"] 3 end-2]] { - set key [lindex $line 0] - if { $key eq "Version" } { - set ::cversion [lindex $line 1] - break - } - } - } - - if { $::cversion eq "" } { - tmsh::log err "unable to determine TMOS version" - error "unable to determine TMOS version" - } - - # if no op+version was specified, just return the version - if { $args eq "" } { return $::cversion } - if { [llength $args] > 2 } { - error "Too many arguments" - } - - set op [lindex $args 0]; # operator - set NOTFOUND -1 - # constrain to valid operators - adding more is fine as long as - # they're supported by [expr] (and makes sense) - if { [lsearch -exact { < > <= >= == != } $op] == $NOTFOUND } { - tmsh::log err "illegal operator: $op" - error "illegal operator: $op" - } - - set tversion [lindex $args 1]; # target version - # one or two decimal digits, optionally followed by 0-2 complete groups of - # dots followed by one or two decimal digits with nothing before or after - set regex {^\d{1,2}(\.\d{1,2}){0,2}$} - if { ! [regexp -- $regex $tversion] } { - tmsh::log err "cannot parse version from: $tversion" - error "cannot parse version from: $tversion" - } - - set cversion $::cversion; # current version - # p=>prefix, c=>current, t=>target - foreach p { c t } { - # extract major/minor/point components - scan [set [set p]version] "%d.%d.%d" [set p]mjr [set p]mnr [set p]pnt - # ensure that these are each set to at least 0 - foreach level { mjr mnr pnt } { - if { ! [info exists [set p]${level}] } { set [set p]${level} 0 } - } - # turn them into one big number that we can compare - # leave room in-between just to be safe - set [set p]num [expr { - [set [set p]mjr]*1000000 + - [set [set p]mnr]*10000 + - [set [set p]pnt]*100 - }] - } - # a simple numeric comparison is all that is needed at this point - return [eval expr $cnum $op $tnum ] -} - -proc iapp_safe_display { args } { - # strings sent to APL must be truncated to 65535 bytes, see BZ435592 - if { [string length [set [set args]]] > 65535 } { - set last_newline [string last "\n" [set [set args]] 65500] - return "[string range [set [set args]] 0 $last_newline]Error: Too many items for display" - } else { - return [set [set args]] - } -} - -proc iapp_get_items { args } { - - # Set default values. - set error_msg "iapp_get_items $args:" - set do_binary 0 - set nocomplain 0 - set items "" - set join_char "\n" - set recursive "recursive" - set com_dir "/Common" - set loc_dir "[tmsh::pwd]" - - # Set up flag-related work. - array set flags { - -exists { [set do_binary 1] } - -nocomplain { [set nocomplain 1] } - -list { [set join_char " "] } - -norecursive { [set recursive ""] } - -local { [set com_dir ""] } - -dir { [set loc_dir [iapp_pull $ptr args]] } - -filter { [set filter_field [iapp_pull $ptr args]] \ - [set filter_op [iapp_pull $ptr args]] \ - [set filter_value [iapp_pull $ptr args]] } - } - iapp_process_flags flags args - - # Get system object names in all requested directories. - set save_dir [tmsh::pwd] - foreach dir [lsort -unique "$com_dir $loc_dir"] { - tmsh::cd $dir - set tmsh_rval [catch { - foreach obj [tmsh::get_config $args $recursive] { - - if { [info exists filter_field] } { - if { $filter_field eq "NAME" } { - set val [tmsh::get_name $obj] - } else { - # If get_field_value throws error, assume "none" value - if { [catch { - set val [tmsh::get_field_value $obj $filter_field] - # strip quotes per BZ442531 - set val [string map {\" ""} $val] - }]} { set val none } - } - # Non-Tcl operators =~ and !~ added for extra flexibility - if { $filter_op eq "=~" } { - set filter "\[regexp \"$filter_value\" \"$val\"\]" - } elseif { $filter_op eq "!~" } { - set filter "!\[regexp \"$filter_value\" \"$val\"\]" - } else { - set filter "\\\"$val\\\" $filter_op \\\"$filter_value\\\"" - } - # If filter fails, skip to next object - if { ![eval expr $filter] } { - continue - } - } - # string map catches /Common added by ltm profile ntlm, - # which is unlike all other ltm profile return values. - lappend items $dir/[string map {/Common/ ""} [tmsh::get_name $obj]] - } - } err ] - } - tmsh::cd $save_dir - - # array keys: $do_binary,$tmsh_rval,$nocomplain. Do not insert whitespace. - array set rval { - 0,0,0 {[join $items $join_char]} - 0,0,1 {[join $items $join_char]} - 0,1,0 {[error "$error_msg $err"]} - 0,1,1 {} - 1,0,0 {[llength $items]} - 1,0,1 {[llength $items]} - 1,1,0 {0} - 1,1,1 {0} - } - - return [subst $rval($do_binary,$tmsh_rval,$nocomplain)] -} - -proc iapp_get_provisioned { args } { - - array set lnum { - none 0 - minimum 1 - nominal 2 - dedicated 3 - } - - # Set defaults. - set required minimum - set do_binary 1 - - # Set up flag-related work. - array set flags { - -is { [set required [iapp_pull $ptr args]] } - -level { [set do_binary 0] } - } - iapp_process_flags flags args - if { [llength $args] > 1 } { - error "Too many arguments" - } - - # If checking for AM provisioning on TMOS < 11.4, - # check for WAM provisioning instead. - if { $args eq "am" && [iapp_tmos_version < 11.4] } { - set args "wam" - } - - # Get the provisioning level. If blank, assume none. - # Proc only checks 1 module at a time, so only 1 object is returned. - if { [catch { - set obj [tmsh::get_config sys provision $args] - set level [tmsh::get_field_value [lindex $obj 0] level] - }]} { set level none } - - if { $do_binary } { - return [expr { $lnum($level) >= $lnum($required) }] - } else { - return $level - } -} - -proc iapp_get_user { args } { - - # Set defaults. - set do_role 0 - set do_binary 0 - - # Set up flag-related work. - array set flags { - -is_admin { [set do_binary 1] } - } - iapp_process_flags flags args - if { [llength $args] > 1 } { - error "Too many arguments" - } - - # Show user auth was introduced in v11.6 - set user "unknown" - catch { - set user [tmsh::show auth user field-fmt] - } err - if { $do_binary } { - return [expr { $user == "unknown" - || [string first "role " $user] == -1 - || [string first "role admin" $user] != -1 - || [string first "role resource-admin" $user] != -1 }] - } else { - return $user - } -} - -proc iapp_destination { args } { - # Set defaults. Flag actions may overwrite defaults later. - set route_domain 0 - set do_mask 0 - set port 0 - - # Set up flag-based actions. - array set flags { - -route_domain { [set route_domain [iapp_pull $ptr args]] } - -mask { [set do_mask 1] } - -length { [set cidr_bits [iapp_pull $ptr args]] } - } - - if { [llength [set non_switches [iapp_process_flags flags args]]] > 2 } { - error "Too many arguments" - } - if { [llength $non_switches] == 2 } { set port [lindex $non_switches 1] } - set addr [lindex $non_switches 0] - - # Pull the route-domain off the addr string, but only use it as the - # route domain if it wasn't overridden by -route_domain flag. - if { [string first "%" $addr] != -1 } { - if { $route_domain == 0 } { - # route-domain is still default, so use value from addr string - set route_domain [lindex [split $addr "%"] 1] - } - set addr [lindex [split $addr "%"] 0] - } - - if { $do_mask } { ;# calculate a mask - - # Define the delta between ipv4 and ipv6. - # length: ipv4 mask is 32 bits, ipv6 is 128 bits. - # group: ipv4 is grouped in octets, ipv6 as 16 bit words. - # format: ipv4 is decimal notation, ipv6 is hex. - # format1 also has the delimiter, format2 does not. - array set v { - 0,length 32 - 0,group 8 - 0,format1 d. - 0,format2 d - 1,length 128 - 1,group 16 - 1,format1 .4x: - 1,format2 .4x - } - - # Detect a node name and convert it to an ip address, then detect IPv6. - if { [string first / $addr] != -1 } { - set node [lindex [tmsh::get_config ltm node $addr] 0] - set addr [tmsh::get_field_value $node address] - } - set is_ipv6 [string match "*:*:*" $addr] - - # Soften result of an illegal -length parameter. - if { ![info exists cidr_bits] || $cidr_bits > $v($is_ipv6,length) } { - set cidr_bits $v($is_ipv6,length) - } elseif { $cidr_bits < 0 } { - set cidr_bits 0 - } - - # Loop on the full length of the mask: 32 bits for ipv4, 128 for ipv6 - for { set octet 0; set i 0 } { $i < $v($is_ipv6,length) } { incr i } { - - # Take a break at intervals to save the grouping and add delimiter. - # Interval is 8 bits for ipv4 and 16 bits for ipv6. - if { $i && ![expr {$i % $v($is_ipv6,group)}] } { - - # Add the grouping and delimiter to the mask, then reset. - append mask [format %$v($is_ipv6,format1) $octet] - set octet 0 - } - # Shift the prior bits left by multiplying by 2. - # Then add the current bit, which is 1 if part of the mask, 0 if not. - # Current bit is part of the mask if $i < number of bits in the mask. - set octet [expr { 2 * $octet + ($i < $cidr_bits) }] - } - # Add the final grouping, then return the finished mask. - set ret_val [format $mask%$v($is_ipv6,format2) $octet] - - } else { ;# calculate a destination - # the route domain might be a name and we need a number. - if { ![string is integer $route_domain] } { - set route_domains [tmsh::get_config "/ net route-domain $route_domain"] - if { [llength $route_domains] != 1 } { - error "no such route domain: $route_domain" - } - # since we have already determined that the list is 1 long, - # this explicit reference to element 0 is safe - set route_domain [tmsh::get_field_value [lindex $route_domains 0] "id"] - } - - set route_domain [expr { $route_domain == 0 ? "" : "%$route_domain" }] - - # 0 and * represent wildcard port assignments in the GUI, - # but TMSH requires the string 'any' to specify a wildcard. - if { $port == 0 || $port == "*" } { - set port any - } - - # Build the final destination. Use ":" for node names even if ipv6. - set is_ipv6_literal [string match "*:*:*" $addr] - set addr_delimiter [expr { $is_ipv6_literal ? "." : ":" }] - set ret_val ${addr}${route_domain}${addr_delimiter}${port} - } - return $ret_val -} - -proc iapp_pool_members { args } { - - # Set defaults. - array set fields { - address addr - port port - port-secure port_secure - connection-limit connection_limit - priority-group priority - ratio ratio - } - set route_domain "" - set port_override -1 - set aaa_domain 0 - set aaa_priority -1 - - # Set up flag-related work. - array set flags { - -fields { [array set fields [iapp_pull $ptr args]] } - -route_domain { [set route_domain [iapp_pull $ptr args]] } - -port { [set port_override [iapp_pull $ptr args]] } - -aaa_domain { [set aaa_domain 1] } - -aaa_pool { [set aaa_priority 0] } - } - iapp_process_flags flags args - - # Identify the non-address/non-port fields. These go inside braces in tmsh. - set nonport_fields [lsearch -all -not -inline -regexp \ - [array names fields] {address|port|port-secure}] - - set members "" - foreach row [join $args] { - - # Skip invalid table rows. - if { [llength [join $row]] %2 == 1 } { - continue - } - - # Import APL table into an array for processing. - array unset columns - array set columns [join $row] - set addr $columns($fields(address)) - - # Identify the port number, either from table columns or by -port flag. - if { $port_override != -1 } { - set port $port_override - } elseif { [info exists columns($fields(port))] } { - set port $columns($fields(port)) - } elseif { [info exists columns($fields(port-secure))] } { - set port $columns($fields(port-secure)) - } else { - set port 80 - } - - # If specified, strip entered route domain and append the flag value. - if { $route_domain != "" } { - set addr [lindex [split $addr "%"] 0] - set addr "$addr%$route_domain" - } - - # If -aaa_domain, use domain controller format, otherwise use pool format - if { $aaa_domain } { - append members " $columns($fields(host)) \{ ip $addr \}" - } else { - append members " [iapp_destination $addr $port] \{" - - # Transfer non-port fields from the table to the tmsh string. - foreach name $nonport_fields { - if { [info exists columns($fields($name))] } { - append members " $name $columns($fields($name))" - } - } - - # If -aaa_pool, add priority field with incrementing value. - # This is required by APM. - if { $aaa_priority >= 0 } { - append members " priority-group [incr aaa_priority]" - } - append members " \}" - } - } - - return "[expr { $aaa_domain ? "" : "members " }][expr { $members eq "" \ - ? "none" : "replace-all-with \{ $members \}" }]" -} - -proc iapp_debug { args } { - - # Passwords should be obscured in all logs. Fields shown here are handled - # in this proc, but the global variable may be overwritten if alternate - # fields should be obscured. - if { ![info exists ::SENSITIVES] } { - set ::SENSITIVES { - account-password - admin-encrypted-password - password - passwd - secret - } - } - - # look for any of the sensitive words, and replace the word that follows it - set regex "(\\m([join $::SENSITIVES |])\\M)\\s+\[^\\s\]*" - regsub -all $regex [join $args] {\1 -OBSCURED-} args - regsub -all "(<Password.*>).*(</Password>)" $args {\1-OBSCURED-\2} args - - set lev [tmsh::get_field_value [lindex [tmsh::get_config sys scriptd \ - log-level] 0] log-level] - if { $lev eq {debug} } { - puts $args - } -} - -# The apm_config proc provides a tmsh pre-processor for APM -# configuration, which in most cases will drastically reduce -# implementation code. To configure APM with this proc, pass -# it an array of object names and associated meta-tag substitutions. -# Each object must be categorized as a profile, a resource, or -# a policy-item. APM agents and customization-groups are derived -# from these 3 categories as needed. -# -# apm_config's return value is a list of the APM profiles defined -# in the argument and instantiated by the proc. This allows the -# procedure call to be embedded directly into a virtual server -# definition. -# -# These universal meta-tags may be placed anywhere in the array: -# <ITEM> The object name, eg. apm_access -# <PREFIX> The app name, including folder, eg. /Common/my_app.app/my_app -# -# Profile objects require the following meta-tags: -# <PROFILE_TYPE> The tmsh object type, eg. "apm profile access" -# <PROFILE_DEF> The body of the object, eg.: -# "access-policy <PREFIX> -# defaults-from /Common/access -# eps-group <PREFIX>_eps -# errormap-group <PREFIX>_errormap -# general-ui-group <PREFIX>_general_ui" -# -# apm_config will automatically create default customization-groups -# for the "-group" lines specified in access profile definitions. -# In the above example, there is no need to additionally specify a -# customization-group for errormap and general-ui. -# -# <PROFILE_TYPE> is a catch-all for other APM types, eg: -# apm_sso { -# <PROFILE_TYPE> {apm sso kerberos} -# <PROFILE_DEF> "account-name <USER> -# account-password <PASS> -# realm <REALM>" } -# -# In the example above, <PROFILE_TYPE> and <PROFILE_DEF> are -# apm_config meta-tags, while <USER>, <PASS>, and <REALM> must -# be substituted before calling apm_config, eg. if these tags are -# defined in $pre_proc_map, they may be substituted with: -# array set apm_map [string map [subst $pre_proc_map] [array get apm_map]] -# -# Resource objects require the following meta-tags: -# <RESOURCE_TYPE> The apm resource object type, eg. "webtop" -# <RESOURCE_DEF> The body of the object, eg.: -# "customization-group <ITEM> -# minimize-to-tray false -# webtop-type full" -# -# In the above example, a customization-group is specified. Any -# customization-group is assumed to be blank unless further defined by the -# <GROUP_DEF> meta-tag, eg. <GROUP_DEF> {type webtop} -# -# Policy-item objects are defined by the following meta-tags: -# <AGENT_TYPE> default "resource-assign" -# <AGENT_DEF> default "customization-group <ITEM>" -# <ITEM_AGENT> default "agents { <ITEM>_ag { type <AGENT_TYPE> }}" -# <ITEM_CAPTION> default "<ITEM>" -# <ITEM_COLOR> default "1" -# <ITEM_TYPE> default "action" -# <ITEM_RULES> defaults to a set of expressions/next-items where specified -# <RULE_CAPTION_0> default "fallback" -# <RULE_CAPTION_1> default "Successful" -# <RULE_CAPTION_2> default "successful" -# -# apm_config generates the APM agent and customization-group definitions -# as required for each policy-item, but specific objects may be defined -# by using the <AGENT_DEF> and <GROUP_DEF> meta-tags. -# To suppress the formation of an APM agent, specify <ITEM_AGENT> {}. - -proc iapp_apm_config { map_array_name } { - upvar $map_array_name map_array - - # Pull $prefix from the array - set prefix $map_array(prefix) - unset map_array(prefix) - - # Stencils for creating apm objects - set access_form \ - "<TMSH_CREATE> apm policy access-policy <ITEM> {\n \ - caption general\n \ - start-item <ACCESS_START_ITEM>\n \ - default-ending <ACCESS_ENDING>\n \ - items replace-all-with {\n<ACCESS_ITEMS> }\n}" - - set profile_form "<TMSH_CREATE> <PROFILE_TYPE> <ITEM> {\n \ - <PROFILE_DEF>\n}" - - set resource_form "<TMSH_CREATE> apm resource <RESOURCE_TYPE> <ITEM> {\n \ - <RESOURCE_DEF>\n}" - - set agent_form "<TMSH_CREATE> apm policy agent <AGENT_TYPE> <ITEM>_ag {\n \ - <AGENT_DEF>\n}" - - set group_form "<TMSH_CREATE> apm policy customization-group <ITEM> {\ - <GROUP_DEF>}" - - set agent_group_form "<TMSH_CREATE> apm policy customization-group <ITEM>_ag {\ - <GROUP_DEF>}" - - set policy_item_form "<TMSH_CREATE> apm policy policy-item <ITEM> { - <ITEM_AGENT>caption <ITEM_CAPTION> - color <ITEM_COLOR> - <ITEM_TYPE> - <ITEM_RULES>\n}" - - # 1st round apm string map - set default_map_1 { - <ACCESS_ITEM> {} - <AGENT_DEF> "customization-group <ITEM>_ag" - <ITEM_AGENT> "agents replace-all-with { - <ITEM>_ag { type <AGENT_TYPE> }}\n " - <ITEM_CAPTION> <ITEM> - <ITEM_COLOR> {1} - <ITEM_TYPE> "item-type action" - <ITEM_RULES> "rules - {[expr {[string first <RULE_NEXT_2> $map_array($item)] != -1 ? "{ - caption <RULE_CAPTION_2> - expression <RULE_EXPR_2> - next-item ${prefix}_<RULE_NEXT_2> - }":""}][expr {[string first <RULE_NEXT_1> $map_array($item)] != -1 ? "{ - caption <RULE_CAPTION_1> - expression <RULE_EXPR_1> - next-item ${prefix}_<RULE_NEXT_1> - }":""}]{ - caption <RULE_CAPTION_0> - next-item ${prefix}_<RULE_NEXT_0> - }}" - } - - # 2nd round apm string map - set default_map_2 { - <ITEM> [expr { $item eq {default} ? "$prefix" : "${prefix}_$item" }] - <PREFIX> $prefix - <LOCAL_PATH> [string map {/ :} $prefix] - <GROUP_DEF> "" - <AGENT_TYPE> "resource-assign" - <RULE_CAPTION_2> "successful" - <RULE_CAPTION_1> "Successful" - <RULE_CAPTION_0> "fallback" - } - - # Build APM access profile and access-policy from the access_form. - # Tags <ACCESS_ITEM> and <ACCESS_ENDING> are picked up from - # $map_array items. <ITEM> and <GROUP_DEF> are picked up from - # $default_map_2. - foreach item [lsort [array names map_array]] { - - # Pick up the <ACCESS_ENDING> tag. There should be just 1. - set access_form [string map $map_array($item) $access_form] - - # Filter out items that do not belong in the access-policy. - # Anything with an ITEM_xxx tag belongs - if { [string first <ITEM_ $map_array($item)] == -1 } { - continue - } - - # Add to the items list for the access-policy, e.g. priority - append access_items " ${prefix}_$item {<ACCESS_ITEM>}\n" - set access_items [string map $map_array($item) $access_items] - set access_items [string map [subst $default_map_1] $access_items] - } - - # Build APM resources, policy-items, agents, and customization-groups from - # the policy_item_form and resource_form. - foreach item [lsort [array names map_array]] { - - # Each item starts as a profile, a resource, or a policy-item. - # Profiles are free-form, so other apm objects can use the profile form. - # In most cases, a policy-item spawns an agent. - # Any definition specifying a customization-group will spawn that group. - if { [string first "<PROFILE_DEF>" $map_array($item)] != -1 } { - - # Collect profile names for attachment to the virtual server - if { [string first "apm profile " $map_array($item)] != -1 } { - lappend profiles [expr { $item eq {default} - ? "$prefix" : "${prefix}_$item" }] - # When an access profile is found, built a policy of the same name - if { [string first "apm profile access" $map_array($item)] != -1 } { - set def [string map "<ACCESS_ITEMS> {$access_items}" $access_form] - append cmds "[string map [subst $default_map_2] $def]\n" - } - } - set def $profile_form - } elseif { [string first "<RESOURCE_DEF>" $map_array($item)] != -1 } { - set def $resource_form - } else { - set def $policy_item_form - if { [string first "<ITEM_AGENT> {}" $map_array($item)] == -1 } { - append def $agent_form - } - } - - # Apply 1st pass of string maps - set def [string map $map_array($item) $def] - set def [string map [subst $default_map_1] $def] - - # If a customization-group is specified, add its definition - if { [string first "customization-group" $def] != -1 } { - if { [string first "apm policy agent" $def] != -1 } { - append def $agent_group_form - } elseif { [string first "apm profile access" $def] == -1 } { - append def $group_form - } - } - - # Apply 2nd pass of string maps - set def [string map $map_array($item) $def] - append cmds [string map [subst $default_map_2] $def] - } - - # Divide and execute tmsh commands - set tag "<TMSH_CREATE>" - set tag_length [string length $tag] - set last [expr { [string first $tag $cmds] + $tag_length }] - while { [set pos [string first $tag $cmds $last]] != -1 } { - incr pos -1 - iapp_conf create [string range $cmds $last $pos] - set last [expr { $pos + $tag_length + 1 }] - } - iapp_conf create [string range $cmds $last end] - return $profiles -} - -proc iapp_upgrade_template { upgrade_var upgrade_trans } { - upvar $upgrade_var upgrade_var_arr - upvar $upgrade_trans upgrade_trans_arr - - # create the new variables from the old - foreach { var } [array names upgrade_var_arr] { - - # substitute old variable name for abbreviation "##" - regsub -all {##} $upgrade_var_arr($var) \$$var map_cmd - - # run the mapping command from inside the array - if { [catch { subst $map_cmd } err] } { - if { [string first "no such variable" $err] == -1 } { - puts "ERROR $err" - } - } - } - - # move variables over and apply translations - set var_mods "" - set var_adds "" - foreach var [array names vx] { - - # if the APL variable name is in the translation array, - # then use the custom translation built for that variable. - if { [info exists upgrade_trans_arr($var)] } { - array set sub_arr [subst $upgrade_trans_arr($var)] - if { [info exists sub_arr($vx($var))] } { - set vx($var) $sub_arr($vx($var)) - } - array unset sub_arr - # else, if the APL variable value is in the translation array, - # then use the generic translation of that value. - } elseif { [info exists upgrade_trans_arr($vx($var))] } { - set vx($var) [subst $upgrade_trans_arr($vx($var))] - } - - # add to tmsh command string - if { [info exists ::$var] } { - append var_mods "\n $var \{ value \"$vx($var)\" \} " - } else { - append var_adds "\n $var \{ value \"$vx($var)\" \} " - } - } - - # move tables over - set tbl_mods "" - set tbl_adds "" - foreach tbl [array names tx] { - - # convert table from APL format to TMSH format - if { ![llength $tx($tbl)] } { - set tbl_def "column-names none" - } else { - set rows_def "" - foreach apl_row $tx($tbl) { - array set row_arr [join $apl_row] - append rows_def "\n \{ row \{ " - foreach apl_col [array names row_arr] { - append rows_def "$row_arr($apl_col) " - } - append rows_def "\}\}" - } - set tbl_def \ - "\n column-names \{ [array names row_arr] \} rows \{ $rows_def \}" - array unset row_arr - } - - # add to tmsh command string - if { [info exists ::$tbl] } { - append tbl_mods "\n $tbl \{ $tbl_def \} " - } else { - append tbl_adds "\n $tbl \{ $tbl_def \} " - } - } - - # construct the "tmsh modify" command - set cmd "sys application service $tmsh::app_name " - if { [llength $var_mods] } { - append cmd "\nvariables modify { $var_mods }" - } - if { [llength $var_adds] } { - append cmd "\nvariables add { $var_adds }" - } - if { [llength $tbl_mods] } { - append cmd "\ntables modify { $tbl_mods }" - } - if { [llength $tbl_adds] } { - append cmd "\ntables add { $tbl_adds }" - } - - # Execute with debug output. This conversion takes place within the - # existing ASO, so tmsh modify is used instead of tmsh create. - iapp_debug "TEMPLATE UPGRADE" - iapp_conf modify $cmd - return -} - -proc iapp_downgrade_template { pivot_var upgrade_var downgrade_table } { - upvar $downgrade_table downgrade_tbl_arr - - # The ASO variable "offload_history" is used to recover the legacy - # choice a user made about SSL offload. It should be present in all cases. - # This conditional only handles the case where a user has deliberately - # deleted it by manipulating the ASO directly from tmsh. - if { ![info exists ::offload_history] } { - set ::offload_history "No" - } - - # BIG-IP erases table contents when the APL optional hides the table. - # Since the prior data is not available, this downgrade must back-convert - # existing table data. Unlike tables, variables remain intact from the - # legacy ASO. - set tbl_def "" - foreach tbl [array names downgrade_tbl_arr] { - # Check for existence of each table in the current context. - # If not, skip to next. - if { ![info exists [set tbl]] } { - continue - } - # Check for existence of each table in the legacy context. - # If not, add an empty table so "tmsh tables modify" does not fail. - if { ![info exists ::$downgrade_tbl_arr($tbl)] } { - iapp_conf modify sys app ser $tmsh::app_name tables add \{ $downgrade_tbl_arr($tbl) \} - } - append tbl_def "$downgrade_tbl_arr($tbl) \{ " - if { [llength [subst $$tbl]] } { - set rows_def "" - foreach apl_row [subst $$tbl] { - array set row_arr [join $apl_row] - append rows_def "\n \{ row \{ " - foreach apl_col [array names row_arr] { - append rows_def "$row_arr($apl_col) " - } - append rows_def "\}\}" - } - append tbl_def \ - "column-names \{ [array names row_arr] \} rows \{ $rows_def \}" - array unset row_arr - } else { - append tbl_def "rows none" - } - append tbl_def " \} " - } - regsub -all "\n" $tbl_def {} tbl_def - set cmd "sys app ser $tmsh::app_name \ - variables modify \{ \ - $pivot_var \{ value $::offload_history \} \ - $upgrade_var \{ value No \} \ - \} \ - tables modify \{ $tbl_def \}" - iapp_debug "TEMPLATE DOWNGRADE" - iapp_conf modify $cmd - return -} -} -sys application template f5.microsoft_adfs.v1.0.0 { - actions { - definition { - html-help { - } - implementation { - -tmsh::include f5.iapp.1.3.0.cli -iapp_template start - -#constants -set DEFAULT_ANSWER /#default# -set DO_NOT_USE_ANSWER /#do_not_use# -set CREATE_NEW_ANSWER /#create_new# - -proc arrange_tcp_profiles { client_profile server_profile } { - if { $client_profile == $server_profile } { - set profile_list "$client_profile \{ context all \} " - } else { - set profile_list "$client_profile \{ context clientside \} \ - $server_profile \{ context serverside \} " - } - return $profile_list -} - -array set forms { - adfs_monitor_eav_script {#!/bin/sh -# These arguments supplied automatically for all external monitors: -# $1 = IP (nnn.nnn.nnn.nnn notation) -# $2 = port (decimal, host byte order) -# -# This script expects the following Name/Value pairs: -# HOST = the host name of the SNI-enabled site -# URI = the URI to request -# RECV = the expected response -# -# Remove IPv6/IPv4 compatibility prefix (LTM passes addresses in IPv6 format) -NODE=`echo ${1} | sed 's/::ffff://'` -if [[ $NODE =~ ^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$ ]]; then -NODE=${NODE} -else -NODE=[${NODE}] -fi -PORT=${2} -PIDFILE="/var/run/`basename ${0}`.sni_monitor_${HOST}_${PORT}_${NODE}.pid" -if [ -f $PIDFILE ] -then -echo "EAV exceeded runtime needed to kill ${HOST}:${PORT}:${NODE}" | logger -p local0.error -kill -9 `cat $PIDFILE` > /dev/null 2>&1 -fi -echo "$$" > $PIDFILE -<CURL> -k -i --resolve $HOST:$PORT:$NODE https://$HOST$URI | grep -i "${RECV}" > /dev/null 2>&1 -STATUS=$? -rm -f $PIDFILE -if [ $STATUS -eq 0 ] -then -echo "UP" -fi -exit - } -} -# Writes the external monitor for the autodiscover service. -proc create_eav_script { script_name } { - set app $tmsh::app_name - set eav_script_name /config/monitors/${app}_$script_name - set map "microsoft_adfs $app - <CURL> [expr { [file exists /usr/bin/curl-apd] ? "curl-apd" : "curl" }]" - set fn [open "$eav_script_name" "w" "0755"] - # This string map pulls the static bash script out of the forms array and - # customizes it for http or https based on the user's SSL selections. - puts $fn [string map $map $::forms($script_name)] - close $fn - return $eav_script_name -} - -proc configure_apm { } { - tmsh::include f5.iapp.1.3.0.cli - set is_120 [iapp_tmos_version >= 12.0] - set app $tmsh::app_name - set advanced [expr { [iapp_is ::basic__advanced "yes"] }] - # APM - # AAA config - # array keys: $advanced,$::apm__ad_secure - array set aaa_port { - 1,ssl {$::apm__ad_port_ssl} - 1,tls {$::apm__ad_port_not_ssl} - 1,none {$::apm__ad_port_not_ssl} - 0,ssl {636} - 0,tls {389} - 0,none {389} - } - - # array key: $::apm__ad_monitor - array set aaa_monitor { - /#create_new# { [iapp_conf create ltm monitor ldap ${app}_ldap \ - base \"$::apm__ad_tree\" \ - chase-referrals yes \ - debug no \ - defaults-from ldap \ - destination *:[subst $aaa_port($advanced,$::apm__ad_secure)] \ - filter \"cn=$::apm__ad_user\" \ - interval [expr { $advanced ? $::apm__ad_interval : "10" }] \ - timeout [expr {$advanced ? ($::apm__ad_interval * 3 + 1):"31"}] \ - mandatory-attributes no \ - password [iapp_make_safe_password $::apm__ad_password] \ - security $::apm__ad_secure \ - time-until-up 0 \ - username \"cn=${::apm__ad_user},${::apm__ad_tree}\"] } - /#use_icmp# { [iapp_conf create ltm monitor gateway-icmp ${app}_icmp \ - defaults-from gateway_icmp \ - interval 5 \ - timeout 16] } - /#do_not_use# { none } - } - - # array key: $multiple_ad - array set aaa_pool { - 1 { domain-controllers [iapp_pool_members -aaa_domain -fields { host fqdn } $::apm__active_directory_servers] \ - pool [iapp_conf create ltm pool ${app}_aaa [iapp_pool_members $::apm__active_directory_servers -port any -aaa_pool] \ - load-balancing-mode "round-robin" \ - monitor [expr { [iapp_is ::apm__ad_monitor "/#create_new#"] \ - || [iapp_is ::apm__ad_monitor "/#use_icmp#"] \ - || [iapp_is ::apm__ad_monitor "/#do_not_use#"] \ - ? [subst $aaa_monitor($::apm__ad_monitor)] \ - : $::apm__ad_monitor } ] \ - min-active-members 1] } - 0 { domain-controller $::apm__active_directory_server } - } - - set do_new_aaa [iapp_is ::apm__aaa_profile "/#create_new#"] - set credentials [iapp_is ::apm__credentials "yes"] - set multiple_ad 1 - - # array key: $do_new_aaa - array set aaa_server { - 1 {[iapp_conf create apm aaa active-directory ${app}_apm_aaa \ - \{ admin-encrypted-password [expr { $credentials ? "[iapp_make_safe_password $::apm__active_directory_password]" : "none" }] \ - admin-name [expr { $credentials ? "$::apm__active_directory_username" : "none" }] \ - domain "$::apm__login_domain" [subst $aaa_pool($multiple_ad)] \}] } - 0 { $::apm__aaa_profile } - } - - set ad_aaa [iapp_substa aaa_server($do_new_aaa)] - - # APM config - set pre_proc_map " - <NTLM_DOMAIN> $::apm__login_domain - <AAA> $ad_aaa" - - if { $is_120 } { - if { $::apm__log_settings == "/#do_not_use#" } { - append pre_proc_map { <LOG_SETTINGS> "log-settings none" } - } else { - append pre_proc_map { <LOG_SETTINGS> "log-settings replace-all-with \{ $::apm__log_settings \}" } - } - } else { - append pre_proc_map { <LOG_SETTINGS> "" } - } - - array set apm_map { - apm_ntlm_sso { - <PROFILE_TYPE> {apm sso ntlmv1} - <PROFILE_DEF> "ntlm-domain <NTLM_DOMAIN>" } - default { - <PROFILE_TYPE> {apm profile access} - <GROUP_DEF> {type logout } - <PROFILE_DEF> "accept-languages replace-all-with { en } - access-policy <PREFIX> - defaults-from /Common/access - generation-action increment - domain-mode single-domain - domain-cookie none - persistent-cookie false - secure-cookie true - logout-uri-include none - logout-uri-timeout 5 - customization-group <PREFIX>_logout - eps-group <PREFIX>_eps - errormap-group <PREFIX>_errormap - framework-installation-group <PREFIX>_frameworkinstallation - general-ui-group <PREFIX>_general_ui - sso-name <PREFIX>_apm_ntlm_sso - <LOG_SETTINGS>" } - apm_ent { - <ITEM_AGENT> {} - <ITEM_CAPTION> {"Start"} - <ITEM_TYPE> {} - <RULE_NEXT_0> apm_logon } - apm_logon { - <ACCESS_ITEM> { priority 2 } - <AGENT_TYPE> logon-page - <ITEM_CAPTION> {"Logon Page"} - <RULE_NEXT_0> apm_auth } - apm_auth { - <ACCESS_ITEM> { priority 3 } - <AGENT_TYPE> aaa-active-directory - <AGENT_DEF> "server <AAA>\n type auth" - <ITEM_CAPTION> {"AD Auth"} - <RULE_EXPR_1> {"expr {[mcget {session.ad.last.authresult}] == \"1\"}"} - <RULE_NEXT_1> apm_credentials - <RULE_NEXT_0> apm_deny } - apm_credentials { - <ACCESS_ITEM> { priority 4 } - <AGENT_TYPE> variable-assign - <AGENT_DEF> "type sso-cred-mapping - variables {{ - expression \"mcget {session.logon.last.username}\" - varname session.sso.token.last.username }{ - expression \"mcget {session.logon.last.password}\" - varname session.sso.token.last.password }}" - <ITEM_CAPTION> {"SSO Credential Mapping"} - <RULE_NEXT_0> apm_allow } - apm_allow { - <ACCESS_ITEM> { priority 7 } - <AGENT_DEF> {} - <AGENT_TYPE> ending-allow - <ITEM_CAPTION> {"Allow"} - <ITEM_TYPE> {item-type ending} - <ITEM_RULES> {} } - apm_deny { - <ACCESS_ITEM> { priority 8 } - <ACCESS_START_ITEM> <PREFIX>_apm_ent - <ACCESS_ENDING> <PREFIX>_apm_deny - <AGENT_TYPE> ending-deny - <GROUP_DEF> {type logout } - <ITEM_CAPTION> {"Deny"} - <ITEM_TYPE> {item-type ending} - <ITEM_COLOR> {2} - <ITEM_RULES> {} } - } - - set apm_map(prefix) [tmsh::pwd]/$app - - # Instantiate the APM configuration (plus websso and rba) - array set apm_map [string map [subst $pre_proc_map] [array get apm_map]] - set apm_profiles "[iapp_apm_config apm_map] /Common/websso /Common/rba" - - # APM policies do not commit in a reliable manner when configured via iApp. - # This time-bomb script insures that the policy gets committed. - set dir [tmsh::pwd] - set fn "/var/tmp/iapp_${app}.sh" - set fh [open $fn w] - puts $fh "sleep 5" - puts $fh "tmsh modify apm profile access ${dir}/${app} generation-action increment" - close $fh - exec chmod 777 $fn - exec $fn & - - return $apm_profiles -} - -proc configure_adfs_deployment { } { - tmsh::include f5.iapp.1.3.0.cli - set app $tmsh::app_name - set lb_lcm_licensed [expr {[string first ltm_lb_least_conn [tmsh::show sys license detail]] != -1}] - set advanced [expr { [iapp_is ::basic__advanced "yes"] }] - set adfs_version $::basic__version - set do_fastl4 [expr { ( ![info exists ::apm__use_apm] || \ - [iapp_is ::apm__use_apm "no"] ) && \ - [iapp_is ::ssl__mode "passthru"]}] - - # MONITOR - set need_monitor [expr { $::vs_pool__pool_to_use == "/#create_new#" }] - - set new_monitor [iapp_is ::app_health__monitor "/#create_new#"] - # array keys: $need_monitor,$new_monitor, $adfs_version - array set monitor_arr { - 1,1,v2 { monitor [iapp_conf create ltm monitor https ${app}_adfs_https \ - defaults-from https \ - interval $::app_health__frequency \ - timeout [ expr {( $::app_health__frequency * 3 ) + 1} ] \ - send $::app_health__send\ - recv \"$::app_health__recv\"] } - 1,1,v3 { monitor [iapp_conf create ltm monitor external ${app}_adfs_eav \ - run [iapp_conf create sys file external-monitor adfs_eav \ - source-path file:[create_eav_script adfs_monitor_eav_script]] \ - user-defined HOST $::vs_pool__fqdn \ - user-defined URI $::app_health__send \ - user-defined RECV \"$::app_health__recv\" \ - interval $::app_health__frequency \ - timeout [ expr {( $::app_health__frequency * 3 ) + 1} ] ] } - 1,0,v2 { monitor $::app_health__monitor } - 1,0,v3 { monitor $::app_health__monitor } - * { monitor none } - } - - # POOL - set use_slow_ramp [iapp_is ::vs_pool__use_slow_ramp yes] - # array keys: $advanced,$use_slow_ramp - array set pool_slow_ramp { - * { slow-ramp-time 300 } - 1,0 { slow-ramp-time 10 } - 1,1 { slow-ramp-time $::vs_pool__slow_ramp_setvalue } - } - - set use_pga [iapp_is ::vs_pool__use_pga yes] - # array keys: $advanced,$use_pga - array set pool_pga { - 1,1 { min-active-members $::vs_pool__min_active_members } - * { min-active-members 0 } - } - - set tcp_queuing [expr { $advanced && !$do_fastl4 && [iapp_is ::vs_pool__tcp_req_queuing "yes"] }] - # array keys: $advanced,$tcp_queuing - array set tcp_req_queuing { - 1,1 { queue-on-connection-limit enabled \ - queue-depth-limit $::vs_pool__tcp_queue_length \ - queue-time-limit $::vs_pool__tcp_queue_timeout } - * { queue-on-connection-limit disabled queue-depth-limit 0 queue-time-limit 0 } - } - - # array keys: $advanced,$lb_lcm_licensed - array set pool_lb_method { - 0,0 { load-balancing-mode round-robin } - 0,1 { load-balancing-mode least-connections-member } - * { load-balancing-mode $::vs_pool__lb_method_choice } - } - - set new_pool [iapp_is ::vs_pool__pool_to_use "/#create_new#"] - # array keys: $new_pool - array set pool { - 1 { pool [iapp_conf create ltm pool ${app}_adfs_pool \ - [iapp_substa pool_lb_method($advanced,$lb_lcm_licensed)] \ - [iapp_pool_members $::vs_pool__members \ - -fields {connection-limit conn_limit}] \ - [iapp_substa monitor_arr($need_monitor,$new_monitor,$adfs_version)] \ - [iapp_substa pool_slow_ramp($advanced,$use_slow_ramp)] \ - [iapp_substa tcp_req_queuing($advanced,$tcp_queuing)] \ - [iapp_substa pool_pga($advanced,$use_pga)] ] } - 0 { pool $::vs_pool__pool_to_use } - } - - # PROFILES - # CLIENT TCP OPTIMIZATION PROFILE - # In order to show the correct recommendation per the chosen topology, - # the presentation of client tcp optimization has a split presentation. - # Only one of tcp_lan_opt or tcp_wan_opt contains the user's selection. - # This statement identifies whether the user has selected the recommended - # option from this split presentation. - set new_client_tcp [expr { !$advanced || ( \ - [iapp_is ::net__client_mode lan] ? \ - [iapp_is ::client_opt__tcp_lan_opt "/#create_new#"] : \ - [iapp_is ::client_opt__tcp_wan_opt "/#create_new#"] )}] - - # array keys: $new_client_tcp,$::net__client_mode - array set client_tcp { - 0,lan { $::client_opt__tcp_lan_opt } - 0,wan { $::client_opt__tcp_wan_opt } - 1,lan { [iapp_conf create ltm profile tcp ${app}_lan-optimized-tcp \ - defaults-from tcp-lan-optimized idle-timeout 1200] } - * { [iapp_conf create ltm profile tcp ${app}_wan-optimized-tcp \ - defaults-from tcp-wan-optimized idle-timeout 1200] } - } - - # SERVER TCP OPTIMIZATION PROFILE - # See above comments regarding the client tcp optimization array. - set new_server_tcp [expr { !$advanced || ( \ - [iapp_is ::net__server_mode lan] ? \ - [iapp_is ::server_opt__tcp_lan_opt "/#create_new#"] : \ - [iapp_is ::server_opt__tcp_wan_opt "/#create_new#"] )}] - - # array keys: $new_server_tcp,$::net__server_mode - array set server_tcp { - 0,lan { $::server_opt__tcp_lan_opt } - 0,wan { $::server_opt__tcp_wan_opt } - 1,lan { [iapp_conf create ltm profile tcp ${app}_lan-optimized-tcp \ - defaults-from tcp-lan-optimized] } - * { [iapp_conf create ltm profile tcp ${app}_wan-optimized-tcp \ - defaults-from tcp-wan-optimized] } - } - - set client_mode [expr { $advanced ? $::net__client_mode : "wan" }] - set server_mode [expr { $advanced ? $::net__server_mode : "lan" }] - - # array keys: type = tcp - array set profiles { - tcp { profiles add \{ \ - [arrange_tcp_profiles \ - [iapp_substa client_tcp($new_client_tcp,$client_mode)] \ - [iapp_substa server_tcp($new_server_tcp,$server_mode)] ] \} } - } - - # HTTP PROFILE - set new_http [expr { !$advanced || \ - [iapp_is ::vs_pool__http "/#create_new#"] }] - - set xff_action [expr { !$advanced || \ - [iapp_is ::vs_pool__xff "yes"] ? "insert-xforwarded-for enabled" : "" }] - - #array keys: $advanced, $new_http - array set http_arr { - 1,0 { $::vs_pool__http } - 1,1 { [iapp_conf create ltm profile http ${app}_http \ - defaults-from http \ - $xff_action] } - * { [iapp_conf create ltm profile http ${app}_http \ - defaults-from http \ - $xff_action] } - } - - # SSL PROFILES - # Client SSL - set new_client_ssl [expr {[iapp_is ::ssl__client_ssl_profile "/#create_new#"]}] - - set do_chain_cert [expr { $advanced && \ - [info exists ::ssl__use_chain_cert] && \ - ![iapp_is ::ssl__use_chain_cert "/#do_not_use#"] }] - - set cssl_cmd \ - "ltm profile client-ssl ${app}_client-ssl defaults-from clientssl" - - # array keys: $new_client_ssl,$do_chain_cert - array set client_ssl_arr { - 1,1 { [iapp_conf create $cssl_cmd key $::ssl__key cert $::ssl__cert \ - chain $::ssl__use_chain_cert] \{ context clientside \} } - 1,0 { [iapp_conf create $cssl_cmd key $::ssl__key cert $::ssl__cert \ - chain none] \{ context clientside \} } - * { $::ssl__client_ssl_profile \{ context clientside \} } - } - - # Server SSL - set new_server_ssl [expr {[iapp_is ::ssl__server_ssl_profile "/#create_new#"]}] - - set sssl_cmd [expr {[iapp_is adfs_version "v3"] ? "ltm profile server-ssl ${app}_server-ssl defaults-from serverssl server-name $::vs_pool__fqdn" : "ltm profile server-ssl ${app}_server-ssl defaults-from serverssl server-name none"}] - - # array keys:$new_server_ssl - array set server_ssl_arr { - 1 { [iapp_conf create $sssl_cmd] \{ context serverside \} } - 0 { $::ssl__server_ssl_profile \{ context serverside \} } - * {} - } - - # SNAT - set do_snat [expr { [iapp_is ::net__same_subnet yes] \ - || ![iapp_is ::net__route_to_bigip yes] }] - set do_automap [expr { [iapp_is ::net__snat_type automap] }] - set new_snatpool [iapp_is ::net__snatpool "/#create_new#"] - - # array keys: $do_snat,$do_automap,$new_snatpool - array set snat { - 1,1,1 { snat automap } - 1,1,0 { snat automap } - 1,0,1 { snatpool [iapp_conf create ltm snatpool ${app}_snatpool \ - members replace-all-with \{ \ - [string map {"addr " "" \{ "" \} ""} $::net__snatpool_members] \ - \}] } - 1,0,0 { snatpool $::net__snatpool } - * { snat none } - } - - # VLANS - # array keys: $advanced - array set vlans { - 1 { vlans-enabled \ - vlans replace-all-with \{ $::net__client_vlan \} } - * { vlans-disabled vlans none } - } - - # RULES - set have_rules [expr { ![iapp_is ::irules__irules ""] }] - # array keys $advanced,$have_rules - array set irules { - 1,1 { rules \{ $::irules__irules \} } - * { rules none } - } - - # FIREWALL POLICY - # beware: syntactically correct AFM commands fail when AFM is not provisioned - # extra info exists test benefits BIG-IQ apps that bypass presentation - - set afm_provisioned [expr { [iapp_get_provisioned afm] && [iapp_tmos_version >= 11.4] }] - - set do_firewall [expr { $afm_provisioned && \ - [info exists ::afm__policy] && \ - ![iapp_is ::afm__policy $::DO_NOT_USE_ANSWER] }] - - set new_firewall [iapp_is ::afm__policy $::DEFAULT_ANSWER] - - set allow_by_reputation [iapp_is ::afm__restrict_by_reputation "accept"] - - set staging_policy [expr { $do_firewall && \ - ![iapp_is ::afm__staging_policy $::DO_NOT_USE_ANSWER] \ - ? "$::afm__staging_policy" : "none" }] - - set security_logging [expr { $do_firewall && \ - ![iapp_is ::afm__security_logging $::DO_NOT_USE_ANSWER] \ - ? "\"$::afm__security_logging\"" : "" }] - - # array key: $afm_provisioned,$do_firewall,$new_firewall - array set firewall_arr { - 1,1,1 { fw-enforced-policy \ - [iapp_conf create security firewall policy ${app}_firewall \ - rules replace-all-with \{ \ - acceptPackets \{ \ - action accept \ - log no \ - ip-protocol tcp \ - status enabled \ - source \{ [iapp_substa afm_restrict($::afm__restrict_by_addr)] \}\} \ - dropPackets \{ \ - action drop \ - log yes \ - ip-protocol tcp \ - status enabled \ - source \{ addresses replace-all-with \{ any/any \}\} \ - \}\}] \ - fw-staged-policy [subst $staging_policy] } - 1,1,0 { fw-enforced-policy $::afm__policy \ - fw-staged-policy [subst $staging_policy] } - 1,0,1 { fw-enforced-policy none \ - fw-staged-policy none } - 1,0,0 { fw-enforced-policy none \ - fw-staged-policy none } - * { } - } - - # array key: $::afm__restrict_by_addr - array set afm_restrict { - /#create_new# {addresses replace-all-with \{ $::afm__allowed_addr \}} - /#do_not_use# {addresses replace-all-with \{ any/any \}} - * {address-lists replace-all-with \{ $::afm__restrict_by_addr \}} - } - - # ip-intelligence was a profile in 11.4, is a policy in 11.5 - set is_v11_5 [iapp_tmos_version >= 11.5] - - # array keys: - # $afm_provisioned,$do_firewall,$allow_by_reputation,$is_v11_5 - array set ip_intelligence_arr { - 1,1,0,0 { profiles add \{ [iapp_conf create security ip-intelligence profile ${app}_ip_intelligence defaults-from ip-intelligence botnets $::afm__restrict_by_reputation denial-of-service $::afm__restrict_by_reputation infected-sources $::afm__restrict_by_reputation phishing $::afm__restrict_by_reputation proxy $::afm__restrict_by_reputation scanners $::afm__restrict_by_reputation spam-sources $::afm__restrict_by_reputation web-attacks $::afm__restrict_by_reputation windows-exploits $::afm__restrict_by_reputation] \} } - 1,1,1,0 { profiles add \{ [iapp_conf create security ip-intelligence profile ${app}_ip_intelligence defaults-from ip-intelligence botnets $::afm__restrict_by_reputation denial-of-service $::afm__restrict_by_reputation infected-sources $::afm__restrict_by_reputation phishing $::afm__restrict_by_reputation proxy $::afm__restrict_by_reputation scanners $::afm__restrict_by_reputation spam-sources $::afm__restrict_by_reputation web-attacks $::afm__restrict_by_reputation windows-exploits $::afm__restrict_by_reputation] \} } - 1,1,0,1 { ip-intelligence-policy [iapp_conf create security ip-intelligence policy ${app}_ip_intelligence default-action $action($::afm__restrict_by_reputation) blacklist-categories replace-all-with \{ botnets \{ action use-policy-setting \} cloud_provider_networks \{ action use-policy-setting \} denial_of_service \{ action use-policy-setting \} illegal_websites \{ action use-policy-setting \} infected_sources \{ action use-policy-setting \} phishing \{ action use-policy-setting \} proxy \{ action use-policy-setting \} scanners \{ action use-policy-setting \} spam_sources \{ action use-policy-setting \} web_attacks \{ action use-policy-setting \} windows_exploits \{ action use-policy-setting \}\}] } - 1,0,0,1 { ip-intelligence-policy none } - 1,0,1,1 { ip-intelligence-policy none } - 1,1,1,1 { ip-intelligence-policy none } - * { } - } - - # array key: $::afm__restrict_by_reputation - array set action { - accept { accept default-log-blacklist-hit-only no } - reject { drop default-log-blacklist-hit-only yes } - warn { accept default-log-blacklist-hit-only yes } - } - - # VIRTUAL SERVER - set destination [iapp_destination $::vs_pool__vs_addr $::vs_pool__vs_port] - set mask_action "mask [iapp_destination -mask $::vs_pool__vs_addr]" - set apm_profiles [expr { [info exists ::apm__use_apm] && [iapp_is ::apm__use_apm "yes"] ? [configure_apm] : "" }] - - # array key: $do_fastl4 - array set vs_arr { - 0 {[iapp_conf create ltm virtual ${app}_adfs_vs \ - destination $destination \ - $mask_action \ - ip-protocol tcp \ - [iapp_substa pool($new_pool)] \ - [iapp_substa firewall_arr($afm_provisioned,$do_firewall,$new_firewall)] \ - [iapp_substa \ - ip_intelligence_arr($afm_provisioned,$do_firewall,$allow_by_reputation,$is_v11_5)] \ - security-log-profiles replace-all-with \{ $security_logging \} \ - [iapp_substa profiles(tcp)] \ - profiles add \{ [iapp_substa client_ssl_arr($new_client_ssl,$do_chain_cert)] \ - [iapp_substa server_ssl_arr($new_server_ssl)] \} \ - profiles add \{ $apm_profiles \ - [iapp_substa http_arr($advanced,$new_http)] \} \ - [iapp_substa snat($do_snat,$do_automap,$new_snatpool)] \ - [iapp_substa vlans($advanced)] \ - [iapp_substa irules($advanced,$have_rules)] \ - persist replace-all-with \{ [iapp_conf create ltm persistence source-addr ${app}_source_addr defaults-from source_addr] \}]} - - 1 {[iapp_conf create ltm virtual ${app}_adfs_vs \ - destination $destination \ - $mask_action \ - ip-protocol tcp \ - profiles add \{ fastL4 \} \ - [iapp_substa pool($new_pool)] \ - [iapp_substa firewall_arr($afm_provisioned,$do_firewall,$new_firewall)] \ - [iapp_substa \ - ip_intelligence_arr($afm_provisioned,$do_firewall,$allow_by_reputation,$is_v11_5)] \ - security-log-profiles replace-all-with \{ $security_logging \} \ - [iapp_substa snat($do_snat,$do_automap,$new_snatpool)] \ - [iapp_substa vlans($advanced)] \ - [iapp_substa irules($advanced,$have_rules)] \ - persist replace-all-with \{ [iapp_conf create ltm persistence source-addr ${app}_source_addr defaults-from source_addr] \}]} - } - - iapp_substa vs_arr($do_fastl4) -} - -# MAIN -configure_adfs_deployment -iapp_template stop - } - presentation { - -define choice lb_method display "xxlarge" tcl { - if { [string first ltm_lb_least_conn [tmsh::show sys license detail]] != -1 } { - set choices "Least Connections (member)\tleast-connections-member\nLeast Connections (node)\tleast-connections-node\nLeast Sessions\tleast-sessions\nDynamic Ratio (member)\tdynamic-ratio-member\nDynamic Ratio (node)\tdynamic-ratio-node\nFastest (application)\tfastest-app-response\nFastest (node)\tfastest-node\nObserved (member)\tobserved-member\nObserved (node)\tobserved-node\nPredictive (member)\tpredictive-member\nPredictive (node)\tpredictive-node\nRound Robin\tround-robin\nRatio (member)\tratio-member\nRatio (node)\tratio-node\nRatio (session)\tratio-session\nRatio Least Connections (member)\tratio-least-connections-member\nRatio Least Connections (node)\tratio-least-connections-node\nWeighted Least Connections (member)\tweighted-least-connections-member" - } else { - set choices "Round Robin\tround-robin\nRatio (member)\tratio-member\nRatio (node)\tratio-node" - } - return $choices -} - -section intro { - - message intro "Configure high availability and acceleration for AD FS implementations. For detailed information and configuration assistance, see http://www.f5.com/pdf/deployment-guides/microsoft-adfs-dg.pdf" - message check_for_updates "Check for new versions of this template on DevCentral (https://devcentral.f5.com/wiki/iApp.Microsoft-Applications.ashx)." - - optional ( intro == "NEVER_SHOW_THIS" ) { - choice ltm_provisioned tcl { - return [expr {[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_provisioned ltm] ? "yes" : "no"}] - } - choice apm_provisioned tcl { - return [expr {[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_provisioned apm] ? "yes" : "no"}] - } - choice afm_provisioned tcl { - return [expr {[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_provisioned afm] && [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_tmos_version >= 11.4] ? "yes" : "no"}] - } - choice is_120 tcl { - return [expr {[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_tmos_version >= 12.0] ? "yes" : "no"}] - } - } - optional ( ltm_provisioned == "no" ) { - message sorry "You must license and provision the Local Traffic Manager (LTM) module to use this template." - } -} -optional ( intro.ltm_provisioned == "yes" ) { - section basic { - choice display_help display "xxlarge" default "hide" { - "Yes, show inline help" => "max" , - "No, do not show inline help" => "hide" - } - optional ( basic.display_help == "max" ) { - message display_help_max "Inline help is available to provide contextual descriptions to aid in the completion of this configuration. Select to show or hide the inline help in this template. Important notes and warnings are always visible, no matter which selection you make here." - } - choice advanced display "xxlarge" default "no" { - "Basic - Use F5's recommended settings" => "no" , - "Advanced - Configure advanced options" => "yes" - } - optional ( basic.display_help == "max" ) { - message advanced_max "This template supports two configurations modes. Basic mode exposes the most commonly used settings, and automatically configures the rest of the options. Advanced mode allows you to review and change all settings." - } - choice version display "xxlarge" default "v2" { - "AD FS 2.0" => "v2" , - "AD FS 3.0" => "v3" - } - optional ( basic.display_help == "max" ) { - message version_max "Select the version of Active Directory Federation Services you are using." - } - choice scenario display "xxlarge" default "adfs" { - "AD FS" => "adfs" , - "AD FS Proxy" =>"adfs_proxy" - } - optional ( basic.display_help == "max" ) { - message scenario_max "Select the Active Directory Federation Services role you are deploying. You can deploy AD FS Proxy, or AD FS with optional Access Policy configuration, to protect your AD FS servers." - } - } - - section net { - optional ( basic.advanced == "yes" ) { - choice client_mode display "xxlarge" default "wan" { - "Local area network ( LAN ) " => "lan" , - "Wide area network ( WAN ) " => "wan" - } - } - optional ( basic.display_help == "max" && basic.advanced == "yes" ) { - message client_mode_max "Select the type of network that connects the clients to the BIG-IP system. This is used to determine the client-side TCP optimizations the system uses." - } - optional ( basic.advanced == "yes" ) { - multichoice client_vlan default tcl { - - set ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items net vlan] - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } tcl { - - set ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items net vlan] - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max" && basic.advanced == "yes" ) { - message client_vlan_max "You can optionally configure the BIG-IP system to accept client traffic from specific VLANs you have configured. By default, the BIG-IP system accepts traffic from all VLANs configured on the system. The VLAN objects must already be configured on this BIG-IP system before you can select them. If you do not move any VLANs to the Selected box, the BIG-IP system accepts traffic from all VLANs" - } - } - optional ( basic.advanced == "yes" ) { - choice server_mode display "xxlarge" default "lan" { - "Local area network ( LAN ) " => "lan" , - "Wide area network ( WAN ) " => "wan" - } - } - optional ( basic.display_help == "max" && basic.advanced == "yes" ) { - message server_mode_max "Select the type of network that connects the servers to the BIG-IP system. This is used to determine the server-side TCP optimizations the system uses." - } - choice same_subnet display "xxlarge" default "no" { - "BIG-IP virtual server IP and AD FS servers are on different subnets" => "no" , - "BIG-IP virtual server IP and AD FS servers are on the same subnet" => "yes" - } - optional ( basic.display_help == "max" ) { - message subnet_1_max "It is important to ensure that responses to client requests made using the BIG-IP virtual server address are returned through the BIG-IP system. If the client receives a response directly from the AD FS server, the connection is dropped. The way the BIG-IP system handles this depends on your network topology." - message subnet_2_max "For environments in which the virtual server IP address is on a subnet different from the AD FS servers, select BIG-IP virtual server IP and the AD FS servers are on different subnets." - message subnet_3_max "For environments in which the virtual server IP address provided is on the same subnet as the AD FS servers in the associated pool, select BIG-IP virtual server IP and the AD FS servers are on the same subnet. This enables Secure Network Address Translation (SNAT Auto Map). This configuration results in the BIG-IP system replacing the client IP address of an incoming connection with its local floating self IP address, ensuring the server response returns through the BIG-IP system." - } - optional ( same_subnet == "no" ) { - choice route_to_bigip display "xxlarge" default "no" { - "AD FS servers have a route to clients through the BIG-IP" => "yes" , - "AD FS servers do not have a route to clients through the BIG-IP" => "no" - } - } - optional ( basic.display_help == "max" ) { - message def_rt_1_max "For environments in which the virtual server IP is on a subnet different from the AD FS servers, information regarding the IP setting of the AD FS servers is required to ensure the correct BIG-IP system configuration." - message def_rt_2_max "If the AD FS servers use the BIG-IP system as their default gateway, select AD FS servers have a route for clients through the BIG-IP. In this scenario, no configuration is needed to support your environment to ensure correct server response handling." - message def_rt_3_max "If the AD FS servers do not have a route through the BIG-IP system, select AD FS servers do not have a route for clients through the BIG-IP. This enables Secure Network Address Translation (SNAT Auto Map). This configuration results in the BIG-IP system replacing the client IP address of an incoming connection with its local floating self IP address ensuring the server response returns through the BIG-IP system." - } - optional ( same_subnet == "yes" - || ( same_subnet == "no" - && route_to_bigip == "no" )) { - choice snat_type display "xxlarge" default "automap" { - "Fewer than 64,000 concurrent connections per server" => "automap" , - "More than 64,000 concurrent connections per server" => "snatpool" - } - optional ( basic.display_help == "max" ) { - message snat_max "For environments with fewer than 64,000 concurrent connections per server, the BIG-IP system enables SNAT Auto Map, which uses a unique IP:port combination for each client request it sends to the AD FS server. For environments with more than 64,000 concurrent connections per AD FS server, the BIG-IP system enables a SNAT pool, and additional IP addresses are reserved to ensure the system has enough unique combinations. If the system exhausts all combinations, new client connections are refused until one is available." - } - optional ( snat_type == "snatpool" ) { - choice snatpool display "xxlarge" default "/#create_new#" tcl { - set ::choices "Create a new SNAT pool\t/#create_new#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items ltm snatpool]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max" ) { - message snatpool_max "Choose whether you want the iApp template to create a new SNAT Pool for this implementation. If you have already created a custom SNAT Pool, you can select it from the list." - } - optional ( snatpool == "/#create_new#" ) { - table snatpool_members { - string addr required validator "IpAddress" display "xlarge" - } - optional ( basic.display_help == "max" ) { - message snatpool_members_max "SNAT Pool addresses should be available IP addresses, not the self-IP address(es) of the BIG-IP system" - } - } - } - - } - } - optional ( intro.apm_provisioned == "yes" && basic.scenario == "adfs" ) { - section apm { - choice use_apm display "xxlarge" default "no" { - "Yes, provide secure authentication using APM" => "yes" , - "No, do not provide secure authentication using APM" => "no" - } - optional ( basic.display_help == "max") { - message use_apm_max "If you have fully licensed and provisioned the BIG-IP Access Policy Manager, you have the option of using it to provide proxy authentication and secure remote access for AD FS." - } - optional ( use_apm == "yes" ) { - choice aaa_profile display "xxlarge" default "/#create_new#" tcl { - set ::choices "Create a new AAA Server\t/#create_new#\n" - append ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -nocomplain -filter use-pool !~ "disabled" apm aaa active-directory] - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max") { - message aaa_profile_max "Choose whether you want the template to create a new BIG-IP APM AAA Server object for your implementation or use an existing one. The AAA Server contains information about your Active Directory deployment. Unless you have created a custom AAA server specifically for this implementation, we recommend allowing the iApp to create a new one." - } - optional ( aaa_profile != "/#create_new#" ) { - message aaa_warning "You have selected an existing AAA server. For correct functionality, you must use an AAA server configured to use a pool of Domain Controllers." - } - optional ( aaa_profile == "/#create_new#" ) { - table active_directory_servers { - string fqdn display "large" required validator "FQDN" - string addr display "large" required validator "IpAddress" - } - optional ( basic.display_help == "max") { - message active_directory_servers_help "Specify each of your Active Directory domain controllers, both FQDN and associated IP address, used for this environment. Click the Add button for additional rows." - } - choice credentials display "xxlarge" default "no" { - "Anonymous binding is allowed" => "no" , - "Require credentials for authentication" => "yes" - } - optional ( basic.display_help == "max") { - message credentials_help "Choose whether your Active Directory implementation allows anonymous binding or not. If it does not, you must provide a user name and password with administrative permissions." - } - optional ( credentials == "yes" ) { - string active_directory_username display "xxlarge" required - optional ( basic.display_help == "max") { - message active_directory_username_help "You must type the user name of an Active Directory account that has administrative permissions." - } - password active_directory_password display "xxlarge" required - optional ( basic.display_help == "max") { - message active_directory_password_help "Type the associated password." - } - } - choice ad_monitor display "xxlarge" default "/#create_new#" tcl { - set ::choices "Yes, create a new Active Directory monitor\t/#create_new#\nYes, create a simple ICMP monitor\t/#use_icmp#\nNo, do not monitor Active Directory\t/#do_not_use#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -filter NAME != \"ldap\" ltm monitor ldap]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max") { - message active_directory_monitor_help "This monitor is for the Active Directory servers you entered in the APM Authentication section, and is attached to the Active Directory pool the template will create. Specify whether you want to create a new Active Directory monitor, use a simple ICMP/ping monitor, or choose an existing monitor. The remaining questions in this section are all related to the Active Directory monitor." - } - optional ( ad_monitor == "/#create_new#" ) { - string ad_user required display "xxlarge" - message ad_user_critical "The Active Directory service account you specify here must be set to never expire. A deleted or locked account will cause the BIG-IP system to mark your Active Directory pool members as unavailable, which takes them offline." - password ad_password required display "xxlarge" - message ad_password_important "Credentials are stored in plaintext on your BIG-IP system." - string ad_tree required display "xxlarge" - optional ( basic.display_help == "max") { - message ad_tree_info "Specify the LDAP tree for the user name you provided. ADSI editor, an administration tool for Active Directory LDAP administration, is useful for determining the correct LDAP tree value. For example, if the user name is 'user1' which is in the organizational unit 'F5 Users' and is in the domain 'f5.example.com', the LDAP tree would be: ou=F5 Users, dc=f5, dc=example, dc=com." - } - choice ad_secure display "xxlarge" { - "No, a secure protocol is not required" => "none" , - "Yes, SSL communication is required" => "ssl" , - "Yes, TLS communication is required" => "tls" - } - optional ( basic.display_help == "max") { - message ad_secure_info "Select whether your Active Directory implementation requires a secure protocol (SSL or TLS) for communication, or if it does not use a secure protocol." - } - optional ( basic.advanced == "yes" ) { - string ad_interval default "10" validator "NonNegativeNumber" - optional ( basic.display_help == "max") { - message ad_interval_info "Specify the number of seconds to use between each health monitor attempt. Members of this pool are marked down after four incorrect responses, and marked available after one correct response. " - } - optional ( ad_secure == "ssl" ) { - string ad_port_ssl default "636" required - } - optional ( ad_secure != "ssl" ) { - string ad_port_not_ssl default "389" required - } - optional ( basic.display_help == "max") { - message ad_port_info "Specify the port being used by your Active Directory deployment. The default port when using the TLS security protocol, or no security, is port 389. The default port used when using the SSL security protocol is 636." - } - } - } - } - string login_domain display "xxlarge" required - optional ( basic.display_help == "max") { - message login_domain_help "Specify the FQDN of the Active Directory deployment for your AD FS users. This is the FQDN for your domain, such as example.com, rather than the FQDN for any specific host." - } - optional ( intro.is_120 == "yes") { - choice log_settings display "xxlarge" default "/Common/default-log-setting" tcl { - set log "" - catch { - set log [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items apm log-setting] - } err - set ::choices "Do not specify a logging profile for the APM profile\t/#do_not_use#\n$log" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max" ) { - message log_settings_help "Select APM logging profile to use for the Access Policy created for this iApp deployment. You must have previously created the profile before it will appear in the list." - } - } - } - } - } - optional ( intro.afm_provisioned == "yes" ) { - section afm { - choice policy default "/#do_not_use#" display "xxlarge" tcl { - set ::choices "Yes, use F5's recommended AFM configuration\t/#default#\nNo, do not use AFM to secure your application\t/#do_not_use#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -nocomplain security firewall policy]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max" ) { - message policy_max "BIG-IP Advanced Firewall Manager (AFM) is a high-performance, stateful, full-proxy network firewall designed to guard data centers against incoming threats that enter the network on the most widely deployed protocols. BIG-IP AFM must be fully licensed and provisioned to use this functionality." - } - optional ( policy == "/#default#" ) { - choice restrict_by_addr default "/#do_not_use#" display "xxlarge" tcl { - set ::choices "No, do not restrict source addresses (allow all sources)\t/#do_not_use#\nRestrict source addresses\t/#create_new#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -nocomplain security firewall address-list]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max" ) { - message restrict_max "You can use the BIG-IP AFM to restrict access to your application by either IP address or network address. If enabled, the system will only allow access to the virtual server from the address(es) you specify." - } - optional ( restrict_by_addr == "/#create_new#" ) { - string allowed_addr display "xxlarge" required - optional ( basic.display_help == "max" ) { - message allowed_addr_max "Specify the IP or network address that should have access to the application. You can use a single IP address, a list of IP addresses separated by spaces, a range of IP addresses separated by a dash (for example 192.0.2.10-192.0.2.100), a single network address, such as 192.0.2.200/24, or any combination of these." - } - } - } - optional ( policy != "/#do_not_use#" ) { - choice restrict_by_reputation default "accept" display "xxlarge" { - "Allow all sources regardless of reputation" => "accept" , - "Reject access from sources with a low reputation" => "reject" , - "Allow but log access from sources with a low reputation" => "warn" - } - optional ( basic.display_help == "max" ) { - message restrict_by_reputation_max "The BIG-IP AFM uses an IP intelligence database to categorize IP addresses coming into the system. Select the way you want the system to handle IP addresses with a low reputation score." - } - optional ( basic.display_help == "max" && restrict_by_reputation != "accept" ) { - message restrict_by_reputation_log "By default, IP Intelligence events are logged to Security > Event Logs > Network > IP Intelligence. For the best performance, F5 recommends creating a remote logging profile to log IP Intelligence events." - } - message restrict_by_reputation_warn "You must have an active IP Intelligence license for IP reputation-based access control to function correctly." - - choice staging_policy default "/#do_not_use#" display "xxlarge" tcl { - set ::choices "Do not apply a staging policy\t/#do_not_use#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -nocomplain security firewall policy]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - message staging_policy1_max "A policy in Staging mode does not block any traffic, and only logs what would be blocked if the policy were placed into production." - - optional ( basic.display_help == "max" ) { - message staging_policy_max "A staged policy allows you to evaluate the effect a policy has on traffic by analyzing the system logs, without actually modifying traffic based on the firewall rules. You must already have a policy on the system in order to select it from the list. For specific information on creating a staging policy, see the AFM documentation." - } - choice security_logging default "/#do_not_use#" display "xxlarge" tcl { - # Menu should display all log profiles with "network none". - # tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items will not filter security log profiles, - # so the filter has been written inline here. - set ::choices "Do not use a logging profile\t/#do_not_use#\n" - if { [catch { - set profile_list [tmsh::list security log profile all-properties recursive] - } err] } { - set profile_list " " - } - array set profiles \ - [string map {"security log profile" ""} $profile_list] - foreach name [array names profiles] { - array set subprofile $profiles($name) - if { [info exists subprofile(network)] && \ - $subprofile(network) != "none" } { - append ::choices "$name\n" - } - } - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max" ) { - message security_logging_max "The logging profile enables you to log detailed information about BIG-IP system Network Firewall events and store those logs on the BIG-IP system or a remote logging server (syslog or Splunk). If you want to use a logging profile, we recommend creating one outside this template. Only logging profiles with Network Firewall enabled appear in the list." - message security_logging1_max "If you are also using BIG-IP ASM, and the logging profile you created has both Application Security and Network Firewall enabled in the same profile, you must also select that profile here. See the BIG-IP AFM documentation for specific information on Logging profiles." - } - } - } - } - section ssl { - optional ( basic.scenario == "adfs_proxy" || ( basic.scenario == "adfs" && ( intro.apm_provisioned == "no" || ( intro.apm_provisioned == "yes" && apm.use_apm == "no" ) ) ) ) { - choice mode display "xxlarge" default "bridging" { - "Terminate SSL from clients, re-encrypt to servers (SSL bridging)" => "bridging" , - "Encrypted traffic is forwarded without decryption (SSL pass-through)" => "passthru" - } - optional ( basic.display_help == "max" ) { - message mode_max "Select how BIG-IP should handle encrypted traffic from AD FS clients. SSL bridging is mandatory when protecting AD FS server(s) with F5 Access Policy Manager (APM)." - message mode_bridging_max "Select SSL bridging if you need to inspect or optimize encrypted client traffic before forwarding it to AD FS server(s). A standard BIG-IP virtual server is created." - message mode_passthru_max "Select SSL pass-through for best performance, or when SSL decryption is disallowed. A Performance (Layer 4) BIG-IP virtual server is created." - } - } - optional ( intro.apm_provisioned == "yes" && apm.use_apm == "yes" || ( mode == "bridging" ) ) { - choice client_ssl_profile display "xxlarge" - default "/#create_new#" tcl { - set ::choices "Create a new Client SSL profile\t/#create_new#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items ltm profile client-ssl]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max" ) { - message client_ssl_profile_max "If you have already created an Client SSL profile that includes the appropriate certificate and key, you can select it from the list. Otherwise, the iApp creates a new Client SSL profile. " - } - optional (client_ssl_profile == "/#create_new#" ) { - choice cert default "/Common/default.crt" - display "xxlarge" tcl { - set ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -norecursive -filter NAME !~ ca-bundle.crt|f5-irule.crt sys file ssl-cert] - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max" ) { - message cert_max "To establish encrypted communication, a client and server negotiate security parameters that are used for the session. As part of this handshake, a certificate is provided by the server to the client to identify itself. The client can then validate the certificate with an authority for authenticity before sending data. When the BIG-IP system is decrypting communication between the client and server, an SSL certificate and key pair for each fully-qualified DNS name related to this application instance must be configured on the system." - message cert1_max "Select the SSL certificate you imported for this deployment. Importing certificates and keys is not a part of this template, see System > File Management > SSL Certificate List. To select any new certificates and keys you import, you need to restart or reconfigure this template." - } - choice key default "/Common/default.key" - display "xxlarge" tcl { - set ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -norecursive sys file ssl-key] - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max" ) { - message key_max "Select the associated SSL key you imported." - } - optional ( cert == "/Common/default.crt" - || key == "/Common/default.key" ) { - message ssl_warn_1 "The BIG-IP system's default certificate and key are not secure. For proper security, acquire a certificate and key from a trusted certificate authority, and then import it onto the BIG-IP system." - } - optional ( basic.advanced == "yes" ) { - choice use_chain_cert display "xxlarge" - default "/#do_not_use#" tcl { - set ::choices "Do not use an intermediate certificate\t/#do_not_use#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -norecursive sys file ssl-cert]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max" ) { - message use_chain_cert_1_max "Intermediate certificates, also called intermediate certificate chains or chain certificates, are used to help systems which depend on SSL certificates for peer identification. These certificates are intended to create a chain of trust between the CA that signed the certificate and the CA that is already trusted by the recipient of the certificate. This allows the recipient to verify the validity of the certificates presented, even when the signing CA is unknown." - message use_chain_cert_2_max "Intermediate certificates must be created or imported onto this BIG-IP system prior to running this iApp. See http://support.f5.com/kb/en-us/solutions/public/13000/300/sol13302.html for help on creating an intermediate certificate chain." - } - } - } - choice server_ssl_profile display "xxlarge" - default "/#create_new#" tcl { - set ::choices "Create a new Server SSL profile based on serverssl (recommended)\t/#create_new#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items ltm profile server-ssl]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max" ) { - message server_ssl_profile_max "If you have already created an Server SSL profile on this BIG-IP system, you can select it from the list. Otherwise, the iApp creates a new Server SSL profile." - } - } - } - section vs_pool { - string vs_addr display "xxlarge" validator "IPAddress" required - optional ( basic.display_help == "max" ) { - message vs_addr_max "This IP and port combination become the BIG-IP virtual server address and port, which clients use to access the application. The system intercepts requests to this IP:Port and distributes them to the AD FS servers." - } - string vs_port display "medium" validator "PortNumber" default "443" required - optional ( basic.display_help == "max" ) { - message vs_port_max "Specify the service port you want to use for the virtual server. The default port for AD FS is 443." - } - string fqdn display "xxlarge" validator "Fqdn" required - optional ( basic.display_help == "max" ) { - message fqdn_max "Specify the FQDN (Fully Qualified Domain Name) clients will use to access the AD FS implementation." - } - optional ( basic.advanced == "yes" ) { - optional ( intro.apm_provisioned == "yes" && apm.use_apm == "yes" || ( ssl.mode == "bridging" ) ) { - choice http display "xxlarge" default "/#create_new#" tcl { - set ::choices "Create a new HTTP profile (recommended)\t/#create_new#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items ltm profile http]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max" ) { - message http_max "The HTTP profile contains settings that tell the BIG-IP system how to handle the HTTP protocol. If you have created a custom HTTP profile for this application, you can select it from the list." - } - optional ( http == "/#create_new#" ) { - choice xff display "xxlarge" default "yes" { - "Insert X-Forwarded-For HTTP header" => "yes" , - "Do not insert X-Forwarded-For HTTP header" => "no" - } - optional ( basic.display_help == "max" ) { - message xff_max "If you choose to insert the X-Forwarded-For header, the BIG-IP system inserts the original client IP address in the HTTP header for logging purposes. Additional configuration may be required on the server to log the value of the X-Forwarded-For header." - } - } - } - } - choice pool_to_use display "xxlarge" default "/#create_new#" tcl { - - set ::choices "Create a new pool\t/#create_new#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items ltm pool]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max" ) { - message pool_max "A load balancing pool is a logical set of devices, such as AD FS servers, grouped together to receive and process traffic. When clients attempt to access the application via the BIG-IP virtual server, the BIG-IP system distributes requests to any of the servers that are members of that pool." - } - optional ( pool_to_use == "/#create_new#" ) { - optional ( basic.advanced == "yes" ) { - lb_method lb_method_choice - optional ( basic.display_help == "max" ) { - message lb_method_max "A load balancing method is an algorithm that the BIG-IP system uses to select a pool member for processing a request. F5 recommends the Least Connections load balancing method, where new connections are routed to the node that has the least number of current connections. This is ideal for environments in which pool members have similar performance and capacity capabilities." - } - optional ( ssl.mode == "bridging" ) { - choice tcp_req_queuing display "xxlarge" default "no" { - "Enable TCP request queuing" => "yes" , - "Do not enable TCP request queuing" => "no" - } - optional ( basic.display_help == "max" ) { - message tcp_request_queue_2_max "TCP request queuing provides the ability to queue connection requests that exceed the capacity of connections for a pool, pool member, or node, as determined by the connection limit. If you enable TCP request queuing, you must specify a queue length and timeout for queued requests based on server capability, load, and need for shared resources." - } - optional ( tcp_req_queuing == "yes" ) { - message tcp_request_queue_1_max "Improper use or misconfiguration of TCP Request Queuing/Connection Limits can result in unwanted application behavior and poor performance of your BIG-IP system. For this reason we recommended you verify these settings impact prior to deployment in a production environment. You MUST add a Connection Limit to your pool members for TCP Request Queuing." - string tcp_queue_length display "medium" - default "0" required - validator "NonNegativeNumber" - optional ( basic.display_help == "max" ) { - message tcp_queue_length_max "Specify a number for the length of the queue. You should not use a value of '0', which indicates an unlimited queue length, and is only constrained by available memory." - } - string tcp_queue_timeout display "medium" - default "0" required - validator "NonNegativeNumber" - optional ( basic.display_help == "max" ) { - message tcp_queue_timeout_max "Specify a number of milliseconds that requests should remain in the queue before timing out." - } - } - } - choice use_slow_ramp default "yes" display "xxlarge" { - "Use Slow Ramp" => "yes" , - "Do not use Slow Ramp" => "no" - } - optional ( basic.display_help == "max" ) { - message slow_ramp_max "With Slow Ramp, the BIG-IP system gradually adds connections to a newly-enabled or newly-added AD FS server over a time period you specify, rather than sending a full proportion of the traffic immediately. Slow Ramp is essential when using load balancing methods like Least Connections, as the BIG-IP system would otherwise send all new connections to a new server immediately, potentially overwhelming that server. The time period you select for Slow Ramp is highly dependent on the speed of your server hardware and the behavior of your AD FS services. " - } - optional ( use_slow_ramp == "yes" ) { - string slow_ramp_setvalue display "medium" - default "300" required - validator "NonNegativeNumber" - } - optional ( basic.display_help == "max" ) { - message slow_ramp_setvalue_max "Specify the duration (in seconds) for Slow Ramp time (the amount of time the system sends less traffic to a newly-enabled pool member). The default setting of 300 seconds (5 minutes) is very conservative in most cases." - } - choice use_pga default "no" display "xxlarge" { - "Do not use Priority Group Activation" => "no" , - "Use Priority Group Activation" => "yes" - } - optional ( basic.display_help == "max" ) { - message pga_max "Priority Group Activation allows you to segment your servers into priority groups. With Priority Group Activation, the BIG-IP system load balances traffic according to the priority number you assign to the pool members. A higher number indicates higher priority. Traffic is only sent to the servers with the highest priority, unless the number of available servers in that priority group falls below the value you specify as the minimum. The BIG-IP system then sends traffic to the group of servers with the next highest priority, and so on. See the BIG-IP documentation for more details." - } - optional ( use_pga == "yes" ) { - string min_active_members display "medium" - default "0" required - validator "NonNegativeNumber" - optional ( basic.display_help == "max" ) { - message min_active_members_max "Specify the minimum number of servers which must be available before the system sends traffic to servers with a lower priority." - } - } - } - table members { - editchoice addr display "large" tcl { - - set ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items ltm node] - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - string port display "small" required - default "443" validator "PortNumber" - string conn_limit display "small" required - default "0" validator "NonNegativeNumber" - optional ( lb_method_choice == "ratio-member" - || lb_method_choice == "ratio-node" - || lb_method_choice == "ratio-session" - || lb_method_choice == "ratio-least-connections-member" - || lb_method_choice == "ratio-least-connections-node" - || lb_method_choice == "dynamic-ratio-member" - || lb_method_choice == "dynamic-ratio-node") { - string ratio default "1" validator "NonNegativeNumber" - display "small" - } - optional ( use_pga == "yes" ) { - string priority default "0" required - validator "NonNegativeNumber" display "small" - } - } - optional ( basic.display_help == "max" ) { - message members_max "Specify the IP address(es) of your AD FS servers. If you have existing nodes on this BIG-IP system, you can select them from the list, otherwise type the addresses. Click Add to include additional servers." - } - } - } - - optional ( vs_pool.pool_to_use == "/#create_new#" ) { - section app_health { - choice monitor display "xxlarge" default "/#create_new#" tcl { - set ::choices "Create a new monitor\t/#create_new#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -filter NAME != "https" \ - ltm monitor https]\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -filter NAME != "external" \ - ltm monitor external]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - optional ( basic.display_help == "max" ) { - message monitor_max "Monitors are used to determine the health of the endpoint on each AD FS server. If an endpoint does not respond or responds incorrectly the system will cease to send client requests to that AD FS server. The system will continue to monitor the instance and will begin sending requests once the endpoint responds correctly." - } - optional ( monitor == "/#create_new#" ) { - string frequency display "medium" required default "30" - optional ( basic.display_help == "max" ) { - message freq_max "This is the duration, in seconds, of a single monitor cycle. At this interval, the system checks the health of the endpoint on each AD FS server configured in the AD FS server pool." - } - string send required display "xxlarge" default "/adfs/fs/federationserverservice.asmx" - optional ( basic.display_help == "max" ) { - message send_max "The HTTP URI is used to specify the resource on the AD FS server for a given request. This parameter can be customized to request a specific federation endpoint." - } - string recv required display "xxlarge" default "200 OK" - optional ( basic.display_help == "max" ) { - message recv_max "When the HTTP response arrives for a monitor request, its contents are searched for the value specified here. If it is not found, the monitoring attempt fails." - } - } - } - } - optional ( basic.advanced == "yes" ) { - optional ( intro.apm_provisioned == "yes" && apm.use_apm == "yes" || ( ssl.mode == "bridging" ) ) { - section client_opt { - optional ( net.client_mode == "lan" ) { - choice tcp_lan_opt display "xxlarge" - default "/#create_new#" tcl { - - set ::choices "New profile based on tcp-lan-optimized ( recommended )\t/#create_new#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items ltm profile tcp]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - } - optional ( net.client_mode != "lan" ) { - choice tcp_wan_opt display "xxlarge" - default "/#create_new#" tcl { - - set ::choices "New profile based on tcp-wan-optimized ( recommended )\t/#create_new#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items ltm profile tcp]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - } - optional ( basic.display_help == "max" ) { - message tcp_max "The client-side TCP profile optimizes the communication between the BIG-IP system and the client by controlling the behavior of the traffic which results in higher transfer rates, improved connection reliability and increased bandwidth efficiency." - } - } - section server_opt { - optional ( net.server_mode == "lan" ) { - choice tcp_lan_opt display "xxlarge" - default "/#create_new#" tcl { - - set ::choices "New profile based on tcp-lan-optimized ( recommended )\t/#create_new#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items ltm profile tcp]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - } - optional ( net.server_mode != "lan" ) { - choice tcp_wan_opt display "xxlarge" - default "/#create_new#" tcl { - - set ::choices "New profile based on tcp-wan-optimized ( recommended )\t/#create_new#\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items ltm profile tcp]" - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - } - optional ( basic.display_help == "max" ) { - message tcp_max "The server-side TCP profile optimizes the communication between the BIG-IP system and the server by controlling the behavior of the traffic which results in higher transfer rates, improved connection reliability and increased bandwidth efficiency." - } - } - } - section irules { - message irule_1_max "Improper use or misconfigurations of an iRule can result in unwanted application behavior and poor performance of your BIG-IP system. For this reason we recommended you verify the impact of an iRule prior to deployment in a production environment." - optional ( basic.display_help == "max" ) { - message irule_2_max "The BIG-IP system supports a scripting language to allow an administrator to instruct the system to intercept, inspect, transform, direct and track inbound or outbound application traffic. An iRule contains the set of instructions the system uses to process data flowing through it, either in the header or payload of a packet." - message irule_3_max "Correct event priority is critical when assigning multiple iRules. For more information about iRule event priority, see https://devcentral.f5.com/wiki/iRules.priority.ashx." - } - multichoice irules display "xlarge" tcl { - set ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -filter NAME !~ "^_sys_" ltm rule] - return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices] - } - } - } - optional ( basic.display_help == "max" ) { - section addl_steps { - message dns "You must configure a DNS entry for each fully qualified host name that the clients use to access the AD FS servers. Each DNS record must resolve to the IP address you configured for the BIG-IP virtual server defined in the High Availability section." - } - } -} - -text { - intro "Welcome to the iApp template for Microsoft Active Directory Federation Services" - - intro.intro "Introduction" - intro.check_for_updates "Check for Updates" - intro.sorry "We're sorry" - - - basic "Template Options" - basic.display_help "Do you want to see inline help?" - basic.display_help_max "" - basic.advanced "Which configuration mode do you want to use?" - basic.advanced_max "" - basic.version "Which version of AD FS are you deploying?" - basic.version_max "" - basic.scenario "Which AD FS server role are you deploying?" - basic.scenario_max "" - - net "Network" - net.client_vlan "Which VLANs transport client traffic?" - net.client_vlan_max "" - net.client_mode "What type of network connects clients to the BIG-IP?" - net.client_mode_max "" - net.server_mode "What type of network connects servers to the BIG-IP?" - net.server_mode_max "" - net.same_subnet "Where will the virtual servers be in relation to the AD FS servers?" - net.subnet_1_max "" - net.subnet_2_max "" - net.subnet_3_max "" - net.route_to_bigip "How have you configured routing on your AD FS servers?" - net.def_rt_1_max "" - net.def_rt_2_max "" - net.def_rt_3_max "" - net.snat_type "How many connections per server do you expect?" - net.snatpool "Create a new SNAT pool or use an existing one?" - net.snatpool_max "" - net.snatpool_members "What are the IP addresses you want to use for the SNAT pool?" - net.snatpool_members.addr "IP" - net.snatpool_members_max "" - net.snat_max "" - - apm "Access Policy Manager (BIG-IP APM)" - apm.use_apm "Do you want to provide secure authentication with BIG-IP APM?" - apm.use_apm_max "" - apm.aaa_profile "Which AAA Server object do you want to use?" - apm.aaa_profile_max "" - apm.aaa_warning "IMPORTANT" - apm.active_directory_servers "Which Active Directory server IP address in your domain can this BIG-IP system contact?" - apm.active_directory_servers_help "" - apm.active_directory_servers.fqdn "FQDN" - apm.active_directory_servers.addr "IP" - apm.login_domain "What is the FQDN of the Active Directory implementation for your AD FS users?" - apm.login_domain_help "" - apm.credentials "Does your Active Directory domain allow anonymous binding?" - apm.credentials_help "" - apm.active_directory_username "Which Active Directory user with administrative permissions do you want to use?" - apm.active_directory_username_help "" - apm.active_directory_password "What is the password associated with that account?" - apm.active_directory_password_help "" - apm.ad_monitor "Create a new monitor for the Active Directory servers?" - apm.active_directory_monitor_help "" - apm.ad_user "Which Active Directory user name should the monitor use?" - apm.ad_user_critical "CRITICAL" - apm.ad_password "What is the associated password?" - apm.ad_password_important "IMPORTANT" - apm.ad_tree "What is the LDAP tree for this user account?" - apm.ad_tree_info "" - apm.ad_secure "Does your Active Directory domain require a secure protocol for communication?" - apm.ad_secure_info "" - apm.ad_interval "How many seconds between Active Directory health checks?" - apm.ad_interval_info "" - apm.ad_port_ssl "Which port is used for Active Directory communication?" - apm.ad_port_not_ssl "Which port is used for Active Directory communication?" - apm.ad_port_info "" - apm.log_settings "Which log settings would you like to use to log APM events?" - apm.log_settings_help "" - - afm "Advanced Firewall Manager (BIG-IP AFM)" - afm.policy "Do you want to use BIG-IP AFM to protect your application?" - afm.policy_max "" - afm.restrict_by_addr "Do you want to restrict access to your application by network or IP address?" - afm.restrict_max "" - afm.allowed_addr "What IP or network addresses should be allowed to access your application?" - afm.allowed_addr_max "" - afm.security_logging "Which logging profile would you like to use?" - afm.security_logging_max "" - afm.security_logging1_max "" - afm.restrict_by_reputation "How do you want to control access to your application from sources with a low reputation score?" - afm.restrict_by_reputation_max "" - afm.restrict_by_reputation_log "" - afm.restrict_by_reputation_warn "IMPORTANT" - afm.staging_policy "Would you like to stage a policy for testing purposes?" - afm.staging_policy_max "" - afm.staging_policy1_max "CRITICAL" - - ssl "SSL Encryption" - ssl.mode "How should the BIG-IP system handle SSL traffic?" - ssl.mode_max "" - ssl.mode_bridging_max "" - ssl.mode_passthru_max "" - ssl.cert "Which SSL certificate do you want to use?" - ssl.cert_max "" - ssl.cert1_max "" - ssl.key "Which SSL private key do you want to use?" - ssl.key_max "" - ssl.use_chain_cert "Which intermediate certificate do you want to use?" - ssl.use_chain_cert_1_max "" - ssl.use_chain_cert_2_max "" - ssl.ssl_warn_1 "WARNING:" - ssl.client_ssl_profile "Which Client SSL profile do you want to use?" - ssl.client_ssl_profile_max "" - ssl.server_ssl_profile "Which Server SSL profile do you want to use?" - ssl.server_ssl_profile_max "" - - vs_pool "High Availability" - vs_pool.vs_addr "What IP address do you want to use for the virtual server?" - vs_pool.vs_addr_max "" - vs_pool.vs_port "What service port do you want to use for the virtual server?" - vs_pool.vs_port_max "" - vs_pool.fqdn "Which FQDN will clients use to access AD FS?" - vs_pool.fqdn_max "" - vs_pool.http "Which HTTP profile do you want to use?" - vs_pool.http_max "" - vs_pool.xff "Should the BIG-IP system insert the X-Forwarded-For header?" - vs_pool.xff_max "" - vs_pool.pool_to_use "Do you want to create a new pool or use an existing one?" - vs_pool.pool_max "" - vs_pool.members "Which servers should be included in this pool?" - vs_pool.members_max "" - vs_pool.members.addr "IP Address" - vs_pool.members.port "Port" - vs_pool.members.conn_limit "Connection limit" - vs_pool.members.ratio "Ratio" - vs_pool.members.priority "Priority" - vs_pool.lb_method_choice "Which load balancing method do you want to use?" - vs_pool.lb_method_max "" - vs_pool.tcp_req_queuing "Should the BIG-IP system queue TCP requests?" - vs_pool.tcp_queue_length "What is the maximum number of queued TCP requests?" - vs_pool.tcp_queue_length_max "" - vs_pool.tcp_queue_timeout "How many milliseconds should requests stay in the queue?" - vs_pool.tcp_queue_timeout_max "" - vs_pool.tcp_request_queue_1_max "WARNING" - vs_pool.tcp_request_queue_2_max "" - vs_pool.use_slow_ramp "Use a Slow Ramp time for newly added servers?" - vs_pool.slow_ramp_max "" - vs_pool.slow_ramp_setvalue "How many seconds should Slow Ramp time last?" - vs_pool.slow_ramp_setvalue_max "" - vs_pool.use_pga "Do you want to give priority to specific groups of servers?" - vs_pool.pga_max "" - vs_pool.min_active_members "What is the minimum number of active members in a group?" - vs_pool.min_active_members_max "" - - app_health "Application Health" - app_health.monitor "Create a new health monitor or use an existing one?" - app_health.monitor_max "" - app_health.send "What HTTP URI should be sent to the server(s)" - app_health.send_max "" - app_health.recv "What is the expected response to the HTTP request?" - app_health.recv_max "" - app_health.frequency "How many seconds between each health check?" - app_health.freq_max "" - - client_opt "Client Optimization" - client_opt.tcp_lan_opt "How do you want to optimize client-side connections?" - client_opt.tcp_wan_opt "How do you want to optimize client-side connections?" - client_opt.tcp_max "" - - server_opt "Server Optimization" - server_opt.tcp_lan_opt "How do you want to optimize server-side connections?" - server_opt.tcp_wan_opt "How do you want to optimize server-side connections?" - server_opt.tcp_max "" - - irules "iRules" - irules.irules "Do you want to add any custom iRules to the AD FS virtual server?" - irules.irule_1_max "WARNING" - irules.irule_2_max "" - irules.irule_3_max "" - - addl_steps "Additional Steps" - addl_steps.dns "AD FS" -} - } - role-acl { admin manager resource-admin } - run-as none - } - } - requires-bigip-version-max none - requires-bigip-version-min 11.3.0 - requires-modules { ltm } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/fake_policy.tar.gz b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/fake_policy.tar.gz Binary files differdeleted file mode 100644 index cdc620277..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/fake_policy.tar.gz +++ /dev/null diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/fake_policy.xml b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/fake_policy.xml deleted file mode 100644 index 590944a48..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/fake_policy.xml +++ /dev/null @@ -1,12174 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<policy bigip_version="11.5.4" integrity_check="d7ed8cbd2414d6ab935e5f837ef0f93e" name="/Common/fake_policy"> - <policy_version> - <timestamp>2017-04-11T08:05:22Z</timestamp> - <device_name>ltm4restlab.lab.local</device_name> - <policy_name>/Common/fake_policy</policy_name> - <last_change>Allowed Response Code 503 [add]: Response Code was set to 503.</last_change> - </policy_version> - <encoding>utf-8</encoding> - <maximum_http_length>8192</maximum_http_length> - <maximum_cookie_length>8192</maximum_cookie_length> - <description></description> - <trigger_asm_irule_event>Disabled</trigger_asm_irule_event> - <case_insensitive>false</case_insensitive> - <whitehat>false</whitehat> - <owa>false</owa> - <inspect_http_uploads>false</inspect_http_uploads> - <protocol_free>false</protocol_free> - <path_parameter_handling>as parameters</path_parameter_handling> - <mask_sensitive>true</mask_sensitive> - <trust_xff>false</trust_xff> - <learning> - <learning_type>policy based</learning_type> - </learning> - <csrf> - <enabled>false</enabled> - <ssl_only>false</ssl_only> - <enforcement_mode>enforcing</enforcement_mode> - <expiration_time_in_seconds>0</expiration_time_in_seconds> - </csrf> - <allowed_response_code>400</allowed_response_code> - <allowed_response_code>401</allowed_response_code> - <allowed_response_code>404</allowed_response_code> - <allowed_response_code>407</allowed_response_code> - <allowed_response_code>417</allowed_response_code> - <allowed_response_code>503</allowed_response_code> - <web_scraping> - <grace_threshold>100</grace_threshold> - <session_prevention_threshold>100</session_prevention_threshold> - <revalidation_threshold>2000</revalidation_threshold> - <rapid_surf_max_time_duration>1000</rapid_surf_max_time_duration> - <rapid_surf_max_page_changes>5</rapid_surf_max_page_changes> - <web_scraping_alarm>false</web_scraping_alarm> - <web_scraping_block>false</web_scraping_block> - <session_opening_anomaly_block>false</session_opening_anomaly_block> - <session_opening_anomaly_alarm>false</session_opening_anomaly_alarm> - <session_transactions_anomaly_alarm>false</session_transactions_anomaly_alarm> - <session_transactions_anomaly_block>false</session_transactions_anomaly_block> - <opening_client_side_integrity_defense>false</opening_client_side_integrity_defense> - <opening_rate_limiting>false</opening_rate_limiting> - <sessions_opened_per_second_increase_rate>500</sessions_opened_per_second_increase_rate> - <sessions_opened_per_second_maximum>50</sessions_opened_per_second_maximum> - <sessions_opened_per_second_minimum>25</sessions_opened_per_second_minimum> - <opening_max_prevention_duration>1800</opening_max_prevention_duration> - <opening_drop_ip_with_reputation>false</opening_drop_ip_with_reputation> - <transactions_tps_increase_rate>500</transactions_tps_increase_rate> - <transactions_per_second_maximum>400</transactions_per_second_maximum> - <transactions_per_second_minimum>200</transactions_per_second_minimum> - <transactions_max_prevention_duration>1800</transactions_max_prevention_duration> - <opening_persistent_storage_inconsistency>true</opening_persistent_storage_inconsistency> - <opening_persistent_storage_resets>true</opening_persistent_storage_resets> - <opening_persistent_storage_inconsistency_events_maximum>3</opening_persistent_storage_inconsistency_events_maximum> - <opening_persistent_storage_inconsistency_events_duration>600</opening_persistent_storage_inconsistency_events_duration> - <opening_persistent_storage_resets_maximum>2</opening_persistent_storage_resets_maximum> - <opening_persistent_storage_resets_duration>600</opening_persistent_storage_resets_duration> - <persistent_storage_max_prevention_duration>1800</persistent_storage_max_prevention_duration> - <use_persistent_storage>false</use_persistent_storage> - <persistent_data_validity_period>120</persistent_data_validity_period> - <session_opening_anomaly_enable>true</session_opening_anomaly_enable> - <suspicious_clients_alarm>false</suspicious_clients_alarm> - <suspicious_clients_block>false</suspicious_clients_block> - <fingerprinting_enable>false</fingerprinting_enable> - <fingerprint_resets_enabled>false</fingerprint_resets_enabled> - <fingerprint_resets_threshold>5</fingerprint_resets_threshold> - <fingerprint_resets_time_window>600</fingerprint_resets_time_window> - <detect_plugins>false</detect_plugins> - <suspicious_clients_prevention_duration>300</suspicious_clients_prevention_duration> - </web_scraping> - <blocking> - <enforcement_mode>transparent</enforcement_mode> - <maximum_decoding_passes>2</maximum_decoding_passes> - <maximum_headers>20</maximum_headers> - <maximum_parameters>500</maximum_parameters> - <response_page cause="default"> - <response_type>default</response_type> - <response_header>HTTP/1.1 200 OK -Cache-Control: no-cache -Pragma: no-cache -Connection: close</response_header> - <response_html_code><html><head><title>Request Rejected</title></head><body>The requested URL was rejected. Please consult with your administrator.<br><br>Your support ID is: <%TS.request.ID()%></body></html></response_html_code> - </response_page> - <response_page cause="XML"> - <response_type>soap fault</response_type> - <response_header>HTTP/1.1 200 OK -Cache-Control: no-cache -Pragma: no-cache -Content-type: text/xml -Connection: close</response_header> - <response_html_code><?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>The requested operation was rejected. Please consult with your administrator.Your support ID is: <%TS.request.ID()%></faultstring><detail/></soap:Fault></soap:Body></soap:Envelope></response_html_code> - </response_page> - <response_page cause="Ajax"> - <response_type>default</response_type> - <response_header>HTTP/1.1 200 OK -Cache-Control: no-cache -Pragma: no-cache -Connection: close</response_header> - <response_html_code><html><head><title>Request Rejected</title></head><body>The requested URL was rejected. Please consult with your administrator.<br><br>Your support ID is: <%TS.request.ID()%></body></html></response_html_code> - <ajax_action_type>alert_popup</ajax_action_type> - <ajax_popup_message>The requested URL was rejected. Please consult with your administrator. Your support ID is: <%TS.request.ID()%></ajax_popup_message> - </response_page> - <response_page cause="Ajax_login"> - <response_type>default</response_type> - <response_header>HTTP/1.1 200 OK -Cache-Control: no-cache -Pragma: no-cache -Connection: close</response_header> - <response_html_code><html><head><title>Request Rejected</title></head><body>The requested URL was rejected. Please consult with your administrator.<br><br>Your support ID is: <%TS.request.ID()%></body></html></response_html_code> - <ajax_action_type>alert_popup</ajax_action_type> - <ajax_popup_message>The requested URL was rejected. Please consult with your administrator. Your support ID is: <%TS.request.ID()%></ajax_popup_message> - </response_page> - <response_page_settings> - <flg_ajax_enabled>disabled</flg_ajax_enabled> - </response_page_settings> - </blocking> - <session_awareness> - <enabled>false</enabled> - <use_apm_username>false</use_apm_username> - <lifetime_window>900</lifetime_window> - <violation_actions_enabled>false</violation_actions_enabled> - <session> - <track_all_threshold>5</track_all_threshold> - <block_illegal_threshold>5</block_illegal_threshold> - <block_all_threshold>20</block_all_threshold> - <track_all_threshold_enabled>true</track_all_threshold_enabled> - <block_illegal_threshold_enabled>false</block_illegal_threshold_enabled> - <block_all_threshold_enabled>true</block_all_threshold_enabled> - </session> - <ip_address> - <track_all_threshold>15</track_all_threshold> - <block_illegal_threshold>15</block_illegal_threshold> - <block_all_threshold>60</block_all_threshold> - <track_all_threshold_enabled>false</track_all_threshold_enabled> - <block_illegal_threshold_enabled>false</block_illegal_threshold_enabled> - <block_all_threshold_enabled>false</block_all_threshold_enabled> - </ip_address> - <user> - <track_all_threshold>5</track_all_threshold> - <block_illegal_threshold>5</block_illegal_threshold> - <block_all_threshold>20</block_all_threshold> - <track_all_threshold_enabled>true</track_all_threshold_enabled> - <block_illegal_threshold_enabled>false</block_illegal_threshold_enabled> - <block_all_threshold_enabled>true</block_all_threshold_enabled> - </user> - <track_all_period>600</track_all_period> - <block_illegal_period>600</block_illegal_period> - <block_all_period>600</block_all_period> - <block_all_period_enabled>false</block_all_period_enabled> - <block_only_autheticated>false</block_only_autheticated> - </session_awareness> - <gwt_profiles> - <character_set/> - </gwt_profiles> - <json_profiles> - <character_set/> - </json_profiles> - <xml_profiles> - <character_set/> - </xml_profiles> - <file_types> - <file_type name="*" type="wildcard"> - <learning_mode>Always</learning_mode> - <url_length>100</url_length> - <request_length>5000</request_length> - <query_string_length>1000</query_string_length> - <post_data_length>1000</post_data_length> - <check_response>false</check_response> - <in_staging>false</in_staging> - <last_updated>2017-04-11T08:05:13Z</last_updated> - <check_url_length>false</check_url_length> - <check_request_length>false</check_request_length> - <check_query_string_length>false</check_query_string_length> - <check_post_data_length>false</check_post_data_length> - </file_type> - </file_types> - <urls> - <url name="*" protocol="HTTPS" type="wildcard"> - <learning_mode>Never</learning_mode> - <check_flows>false</check_flows> - <is_entry_point>false</is_entry_point> - <is_referrer>false</is_referrer> - <can_change_domain_cookie>false</can_change_domain_cookie> - <user_config_level>basic</user_config_level> - <check_metachars>true</check_metachars> - <in_staging>true</in_staging> - <last_updated>2017-04-11T08:05:13Z</last_updated> - <clickjacking_protection> - <enabled>false</enabled> - <allow_rendering_in_frames>N/A</allow_rendering_in_frames> - </clickjacking_protection> - <cors_enforcement_enable>false</cors_enforcement_enable> - <allow_cors>true</allow_cors> - <cors_allow_credentials_handling>unmodified</cors_allow_credentials_handling> - <cors_allow_credentials>allow</cors_allow_credentials> - <cors_check_maximum_age>false</cors_check_maximum_age> - <cors_maximum_age>1800</cors_maximum_age> - <cors_allowed_origins_handling>unmodified</cors_allowed_origins_handling> - <cors_allowed_methods_handling>unmodified</cors_allowed_methods_handling> - <cors_allowed_headers_handling>unmodified</cors_allowed_headers_handling> - <cors_exposed_headers_handling>unmodified</cors_exposed_headers_handling> - <flg_wildcard_includes_slash>true</flg_wildcard_includes_slash> - <parameter/> - <content_profile> - <header_name>*</header_name> - <header_value>*</header_value> - <header_order>0</header_order> - <enforcement_type>http</enforcement_type> - <in_classification>false</in_classification> - </content_profile> - </url> - <url name="*" protocol="HTTP" type="wildcard"> - <learning_mode>Never</learning_mode> - <check_flows>false</check_flows> - <is_entry_point>false</is_entry_point> - <is_referrer>false</is_referrer> - <can_change_domain_cookie>false</can_change_domain_cookie> - <user_config_level>basic</user_config_level> - <check_metachars>true</check_metachars> - <in_staging>true</in_staging> - <last_updated>2017-04-11T08:05:13Z</last_updated> - <clickjacking_protection> - <enabled>false</enabled> - <allow_rendering_in_frames>N/A</allow_rendering_in_frames> - </clickjacking_protection> - <cors_enforcement_enable>false</cors_enforcement_enable> - <allow_cors>true</allow_cors> - <cors_allow_credentials_handling>unmodified</cors_allow_credentials_handling> - <cors_allow_credentials>allow</cors_allow_credentials> - <cors_check_maximum_age>false</cors_check_maximum_age> - <cors_maximum_age>1800</cors_maximum_age> - <cors_allowed_origins_handling>unmodified</cors_allowed_origins_handling> - <cors_allowed_methods_handling>unmodified</cors_allowed_methods_handling> - <cors_allowed_headers_handling>unmodified</cors_allowed_headers_handling> - <cors_exposed_headers_handling>unmodified</cors_exposed_headers_handling> - <flg_wildcard_includes_slash>true</flg_wildcard_includes_slash> - <parameter/> - <content_profile> - <header_name>*</header_name> - <header_value>*</header_value> - <header_order>0</header_order> - <enforcement_type>http</enforcement_type> - <in_classification>false</in_classification> - </content_profile> - </url> - <character_set/> - </urls> - <parameters> - <parameter name="*" type="wildcard"> - <learning_mode>When Violation Detected</learning_mode> - <is_mandatory>false</is_mandatory> - <allow_empty_value>true</allow_empty_value> - <value_type>user input</value_type> - <user_input_format></user_input_format> - <match_regular_expression></match_regular_expression> - <is_sensitive>false</is_sensitive> - <in_staging>true</in_staging> - <last_updated>2017-04-11T08:05:13Z</last_updated> - <parameter_name_metachars> - <check_metachars>true</check_metachars> - </parameter_name_metachars> - <check_maximum_length>false</check_maximum_length> - <check_metachars>true</check_metachars> - <check_attack_signatures>true</check_attack_signatures> - <allow_repeated_parameter_name>false</allow_repeated_parameter_name> - <in_classification>false</in_classification> - <disallow_file_upload_of_executables>true</disallow_file_upload_of_executables> - <is_base64>false</is_base64> - </parameter> - <character_set/> - <parameter_name_metachars> - <character_set/> - </parameter_name_metachars> - </parameters> - <sensitive_parameters> - <parameter_name>password</parameter_name> - </sensitive_parameters> - <flows> - <flow_access> - <expiration_period>0</expiration_period> - <response_page> - <response_type>default</response_type> - <response_header>HTTP/1.1 200 OK -Cache-Control: no-cache -Pragma: no-cache -Connection: close</response_header> - <response_html_code><html><head><title>Request Rejected</title></head><body>The requested URL was rejected. Please consult with your administrator.<br><br>Your support ID is: <%TS.request.ID()%></body></html></response_html_code> - </response_page> - </flow_access> - </flows> - <methods> - <method name="GET"> - <act_as>GET</act_as> - <user_config_level>basic</user_config_level> - </method> - <method name="POST"> - <act_as>POST</act_as> - <user_config_level>basic</user_config_level> - </method> - <method name="HEAD"> - <act_as>GET</act_as> - <user_config_level>basic</user_config_level> - </method> - </methods> - <headers> - <allowed_modified_cookie name="*" type="wildcard"> - <learning_mode>When Violation Detected</learning_mode> - <in_staging>true</in_staging> - <enforcement_mode>allow</enforcement_mode> - <http_only>false</http_only> - <secure>false</secure> - <check_signatures>true</check_signatures> - <is_base64>false</is_base64> - </allowed_modified_cookie> - <character_set/> - </headers> - <attack_signatures> - <signature_set> - <set id="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></set> - <alarm>true</alarm> - <block>true</block> - <learn>true</learn> - </signature_set> - <enable_staging>true</enable_staging> - <staging_period_in_days>7</staging_period_in_days> - <signature signature_id="200000001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000068"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000070"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000096"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000097"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000098"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000099"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000102"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000103"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000104"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000105"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000109"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000110"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000112"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000132"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000136"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000137"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000138"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000139"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000140"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000141"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000145"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000146"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000147"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000151"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000152"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000153"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000156"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000157"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000158"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000159"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000160"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000161"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000162"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000163"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000164"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000165"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000167"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000168"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000169"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000170"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000171"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000172"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000173"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000174"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000175"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000176"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000177"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000178"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000179"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000180"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000181"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000182"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000183"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000187"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000188"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000190"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001070"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001087"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001088"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001092"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001096"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001097"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001098"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001099"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001100"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001112"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001132"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001136"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001137"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001138"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001139"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001140"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001141"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001142"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001143"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001144"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001145"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001146"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001147"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001148"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001149"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001150"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001151"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001152"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001153"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001154"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001155"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001156"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001157"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001158"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001159"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001160"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001161"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001162"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001163"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001164"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001165"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001166"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001167"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001168"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001169"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001170"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001171"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001172"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001173"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001174"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001175"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001176"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001177"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001178"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001179"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001180"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001181"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001182"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001183"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001184"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001185"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001186"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001187"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001188"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001189"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001190"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001191"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001192"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001193"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001194"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001195"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001196"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001197"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001198"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001199"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001200"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001201"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001202"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001203"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001204"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001205"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001206"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001207"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001208"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001209"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001210"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001211"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001212"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001213"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001214"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001215"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001216"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001217"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001218"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001219"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001220"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001221"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001222"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001223"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001224"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001225"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001226"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001227"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001228"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001229"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001230"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001231"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001232"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001233"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001234"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001235"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001236"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001237"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001238"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001239"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001240"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001241"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001242"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001243"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001244"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001245"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001246"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001247"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001248"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001249"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001250"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001251"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001252"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001253"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001254"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001255"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001256"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001257"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001258"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001259"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001260"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001261"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001262"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001263"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001264"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001265"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001266"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001267"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001268"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001269"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001270"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001271"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001272"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001273"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001274"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001275"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001276"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001277"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001278"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001279"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001280"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001281"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001282"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001283"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001284"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001285"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001286"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001287"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001288"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001289"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001290"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001291"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001292"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001293"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001294"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001295"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001296"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001297"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001298"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001299"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001300"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001301"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001302"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001303"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001304"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001305"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001306"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001307"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001308"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001309"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001310"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001311"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001312"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001313"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001314"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001315"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001316"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001317"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001318"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001319"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001320"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001321"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001322"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001323"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001324"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001325"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001326"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001327"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001328"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001329"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001330"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001331"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001332"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001333"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001334"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001335"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001336"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001337"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001338"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001339"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001340"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001341"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001342"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001343"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001344"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001345"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001346"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001347"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001348"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001349"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001350"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001351"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001352"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001353"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001354"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001355"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001356"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001357"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001358"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001359"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001360"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001361"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001362"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001363"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001364"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001365"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001366"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001367"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001368"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001369"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001370"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001371"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001372"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001373"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001374"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001375"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001376"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001377"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001378"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001379"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001380"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001381"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001382"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001383"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001384"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001385"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001386"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001387"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001388"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001389"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001391"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001392"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001393"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001394"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001395"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001396"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001397"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001398"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001399"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001400"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001401"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001402"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001403"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001404"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001405"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001406"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001407"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001408"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001409"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001410"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001411"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001412"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001413"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001414"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001415"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001416"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001417"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001418"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001419"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001420"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001421"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001422"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001423"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001424"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001425"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001426"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001427"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001428"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001429"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001430"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001431"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001432"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001433"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001434"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001435"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001436"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001437"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001438"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001439"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001440"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001441"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001442"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001443"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001444"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001445"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001446"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001447"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001448"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001449"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001450"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001451"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001452"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001453"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001454"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001455"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001456"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001457"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001458"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001459"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001460"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001461"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001462"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001463"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001464"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001465"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001466"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001467"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001468"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001469"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001470"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001471"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001474"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001475"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001476"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001477"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001478"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001480"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001481"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001482"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001483"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001484"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001485"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001486"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001487"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001488"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001489"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001490"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001491"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001492"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001493"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001494"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001496"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001497"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001498"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001499"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001500"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001504"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001505"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001506"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001507"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001508"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001509"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001510"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001511"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001512"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001513"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001514"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001515"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001516"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001517"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001518"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001519"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001520"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001521"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001522"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001523"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001524"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001525"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001526"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001527"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001528"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001529"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001530"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001531"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001532"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001533"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001534"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001535"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001536"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001537"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001538"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001539"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001540"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001541"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001542"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001543"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001544"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001545"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001546"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001547"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001548"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001549"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001550"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001551"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001552"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001553"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001554"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001555"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001556"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001557"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001558"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001559"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001560"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001561"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001562"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001563"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001564"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001565"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001566"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001567"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001568"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001569"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001570"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001571"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001572"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001573"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001574"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001575"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001576"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001577"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001578"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001579"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001580"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001581"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001582"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001583"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001584"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001585"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001586"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001587"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001588"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001589"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001590"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001591"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001592"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001593"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001594"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001595"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001596"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001597"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001598"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001599"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001600"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001601"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001602"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001603"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001604"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001605"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001606"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001607"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001608"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001609"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001610"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001611"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001612"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001613"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001614"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001615"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001616"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001617"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001618"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001619"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001620"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001621"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001622"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001623"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001624"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001625"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001626"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001627"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001628"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001629"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001630"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001631"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001632"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001633"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001634"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001635"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001636"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001637"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001638"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001639"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001640"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001641"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001642"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001643"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001644"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001645"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001646"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001647"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001648"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001649"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001650"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001651"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001652"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001653"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001654"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001655"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001657"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001658"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001659"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001660"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001661"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001662"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001663"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001664"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001665"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001666"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001667"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001668"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001669"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001670"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001671"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001672"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001673"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001674"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001675"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001676"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001677"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001678"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001679"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001680"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001681"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001682"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001683"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001684"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001685"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001686"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001687"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001688"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001689"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001690"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001691"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001692"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001693"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001694"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001695"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001696"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001697"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001698"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001699"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001715"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001716"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001717"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002068"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002070"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002087"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002088"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002092"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002102"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002103"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002104"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002105"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002110"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002137"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002138"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002139"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002140"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002141"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002142"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002143"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002145"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002147"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002149"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002151"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002153"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002154"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002155"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002156"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002157"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002158"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002160"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002161"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002162"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002163"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002164"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002165"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002166"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002167"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002168"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002169"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002170"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002171"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002172"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002173"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002174"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002175"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002176"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002177"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002178"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002179"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002180"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002181"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002182"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002183"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002184"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002185"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002186"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002187"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002188"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002189"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002190"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002191"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002192"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002193"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002195"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002196"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002197"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002198"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002199"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002200"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002201"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002202"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002203"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002204"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002206"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002207"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002208"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002210"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002213"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002214"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002225"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002226"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002227"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002228"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002229"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002230"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002231"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002232"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002234"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002236"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002237"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002240"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002241"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002242"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002243"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002244"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002247"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002248"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002249"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002251"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002252"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002253"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002254"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002255"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002256"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002257"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002258"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002259"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002260"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002261"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002262"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002263"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002264"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002265"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002266"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002267"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002268"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002269"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002270"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002271"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002272"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002273"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002274"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002275"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002276"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002277"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002278"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002279"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002280"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002282"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002283"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002284"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002285"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002286"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002287"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002288"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002289"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002290"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002291"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002292"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002293"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002294"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002295"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002296"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002297"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002298"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002299"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002300"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002301"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002302"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002303"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002305"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002306"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002307"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002308"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002309"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002310"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002311"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002312"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002313"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002314"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002315"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002316"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002317"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002318"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002319"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002320"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002321"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002322"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002323"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002324"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002325"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002326"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002327"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002328"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002329"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002330"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002331"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002332"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002333"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002334"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002335"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002336"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002337"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002338"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002339"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002340"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002341"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002342"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002343"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002344"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002345"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002346"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002347"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002348"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002349"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002350"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002351"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002352"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002353"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002354"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002355"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002356"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002357"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002358"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002359"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002360"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002361"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002362"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002363"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002364"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002365"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002366"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002367"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002368"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002369"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002370"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002371"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002372"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002373"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002374"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002375"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002376"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002377"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002378"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002379"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002380"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002381"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002382"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002383"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002384"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002385"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002386"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002387"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002388"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002389"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002390"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002391"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002392"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002393"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002394"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002395"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002396"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002397"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002398"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002399"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002400"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002401"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002402"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002403"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002404"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002405"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002406"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002408"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002409"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002410"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002411"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002412"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002413"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002414"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002415"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002416"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002419"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002420"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002421"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002422"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002423"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002424"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002425"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002426"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002427"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002428"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002429"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002430"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002431"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002432"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002433"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002434"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002435"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002436"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002437"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002438"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002439"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002440"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002441"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002442"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002443"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002444"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002446"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002447"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002448"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002449"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002450"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002451"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002452"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002453"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002454"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002455"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002456"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002457"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002458"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002459"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002460"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002461"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002462"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002463"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002464"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002465"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002466"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002467"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002468"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002469"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002470"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002471"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002472"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002473"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002474"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002475"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002476"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002477"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002478"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002479"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002480"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002481"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002482"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002483"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002484"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002485"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002486"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002487"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002488"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002489"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002490"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002491"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002492"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002493"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002494"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002495"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002496"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002497"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002498"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002499"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002500"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002501"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002502"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002503"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002504"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002505"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002506"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002507"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002508"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002509"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002510"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002511"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002512"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002513"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002514"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002515"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002516"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002517"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002518"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002519"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002520"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002521"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002522"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002523"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002524"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002525"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002526"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002527"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002528"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002529"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002530"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002531"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002532"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002533"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002534"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002535"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002536"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002537"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002538"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002539"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002540"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002541"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002542"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002543"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002544"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002545"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002546"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002547"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002548"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002549"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002550"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002551"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002552"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002553"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002554"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002555"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002556"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002557"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002558"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002559"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002560"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002561"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002562"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002563"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002564"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002565"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002566"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002567"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002568"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002569"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002570"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002571"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002572"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002573"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002574"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002575"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002576"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002577"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002578"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002579"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002580"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002581"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002582"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002583"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002584"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002585"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002586"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002587"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002588"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002589"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002590"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002591"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002592"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002593"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002594"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002595"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002596"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002597"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002598"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002599"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002600"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002601"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002602"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002603"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002604"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002605"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002606"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003068"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003087"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003088"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003092"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003096"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003097"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003098"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003099"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003100"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003102"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003103"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003104"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003105"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003109"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003110"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003112"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003132"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003136"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003137"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003138"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003139"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003140"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003141"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003142"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003143"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003144"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003145"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003146"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003147"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003148"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003149"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003150"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003151"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003152"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003153"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003154"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003155"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003156"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003157"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003158"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003159"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003160"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003161"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003162"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003163"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003164"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003165"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003166"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003167"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003168"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003169"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003170"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003171"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003172"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003174"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003175"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003176"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003177"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003178"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003180"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003182"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003183"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003184"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003185"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003186"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003187"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003188"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003189"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003190"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003191"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003192"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003193"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003194"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003195"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003196"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003197"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003198"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003199"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003200"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003202"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003203"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003204"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003205"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003206"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003207"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003208"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003209"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003210"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003212"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003213"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003214"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003215"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003216"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003217"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003218"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003219"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003220"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003221"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003222"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003223"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003224"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003225"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003226"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003228"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003229"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003230"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003231"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003232"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003233"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003234"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003235"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003236"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003237"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003238"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003239"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003240"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003241"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003242"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003243"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003244"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003245"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003246"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003247"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003248"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003249"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003250"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003251"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003252"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003253"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003254"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003255"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003256"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003257"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003258"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003259"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003261"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003262"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003264"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003266"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003267"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003268"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003269"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003270"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003271"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003272"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003273"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003274"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003275"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003276"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003277"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003278"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003279"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003280"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003281"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003282"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003284"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003285"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003286"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003287"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003288"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003289"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003290"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003291"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003292"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003293"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003294"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003295"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003296"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003297"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003298"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003299"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003300"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003301"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003302"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003303"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003304"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003305"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003306"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003307"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003308"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003309"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003310"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003311"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003312"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003313"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003314"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003315"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003316"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003317"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003318"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003319"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003320"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003321"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003322"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003323"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003324"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003325"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003326"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003327"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003328"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003329"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003330"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003332"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003333"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003334"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003335"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003336"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003337"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003338"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003339"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003340"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003341"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003342"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003343"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003344"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003345"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003346"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003347"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003348"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003349"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003350"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003351"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003352"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003353"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003354"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003355"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003356"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003357"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003358"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003359"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003360"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003361"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003362"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003363"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003364"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003365"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003366"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003367"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003368"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003369"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003370"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003371"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003372"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003373"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003374"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003375"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003376"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003377"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003378"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003379"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003380"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003381"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003382"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003384"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003385"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003386"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003387"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003388"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003389"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003390"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003391"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003392"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003394"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003396"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003397"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003398"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003399"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003400"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003401"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003402"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003403"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003404"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003405"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003406"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003407"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003408"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003410"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003411"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003412"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003414"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003415"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003416"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003417"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003418"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003419"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003420"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003421"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003422"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003423"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003424"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003425"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003426"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003427"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003428"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003429"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003430"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003431"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003432"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003433"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003434"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003435"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003436"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003437"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003438"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003439"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003440"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003441"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003442"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003443"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003444"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003445"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003446"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003447"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003448"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003449"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003450"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003451"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003452"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003453"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003454"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003455"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003456"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003457"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003458"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003459"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003460"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003461"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003462"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003463"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003464"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003465"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003466"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003467"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003468"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003469"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003470"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003471"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003472"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003473"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003474"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003475"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003476"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004109"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004110"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004112"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004132"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004136"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004137"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004138"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004139"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004140"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004141"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004142"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004143"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004144"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004145"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004146"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004147"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004148"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004149"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004150"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004151"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004152"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004153"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004154"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004155"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004156"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004157"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004158"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004159"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004160"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004161"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004162"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004163"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004165"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004166"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004167"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004168"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004169"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004170"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004171"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004172"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004174"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004175"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004176"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004177"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004178"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004179"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004180"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004181"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004182"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004183"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004184"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004185"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004186"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004187"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004188"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004189"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004190"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004191"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004198"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200008000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200008001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200008002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200008003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009068"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009070"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009087"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009088"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009092"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009096"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009097"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009098"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009099"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009100"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009102"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009103"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009104"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009105"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009109"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009110"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009112"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009132"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009136"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009137"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009138"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009139"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009140"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009141"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009142"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009143"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009144"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009145"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009146"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009147"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009148"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009149"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009150"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009151"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009152"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009153"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009154"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009155"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009156"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009157"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009158"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009159"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009160"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009161"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009162"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009163"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009164"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009165"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009166"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009167"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009168"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009169"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009170"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009171"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009172"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009173"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009174"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009175"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009176"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009177"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009178"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009179"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009180"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009181"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009182"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009183"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009184"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009185"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009186"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009187"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009188"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009189"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009190"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009191"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009192"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009193"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009194"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009195"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009196"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009197"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009198"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009199"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009200"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009201"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009202"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009203"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009204"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009205"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009206"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009207"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009208"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009209"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009210"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009211"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009212"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009213"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009214"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009215"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009216"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009217"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009218"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009219"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009220"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009221"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009222"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009223"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009224"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009225"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009226"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009227"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009228"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009229"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009230"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009231"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009232"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009233"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009234"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009235"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009236"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009237"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009238"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009239"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009240"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009241"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009242"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009243"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009244"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009245"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009246"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009247"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009248"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009249"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009250"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009251"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009252"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009253"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009254"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009255"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009256"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010068"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200013001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200014000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200014001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200014002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200014003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015068"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015070"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019068"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019070"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019087"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019088"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019092"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019096"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019097"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019098"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019099"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019100"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019102"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019103"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019104"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019105"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019109"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019110"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019112"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019132"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019136"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021070"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021087"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021088"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021092"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021096"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021097"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021098"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021099"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021100"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021102"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021103"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021104"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021105"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021109"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021112"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021132"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021136"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021137"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021138"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021139"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021140"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021141"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021142"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021143"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200023001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200023002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200023003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200023004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100087"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100088"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100092"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100096"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100097"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100098"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100099"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100100"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100102"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100103"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100104"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100105"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100109"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100110"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100300"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100304"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100305"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100306"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100307"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100308"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100309"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100310"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100311"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100312"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100313"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100314"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100315"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100316"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100317"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100318"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100319"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100320"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100321"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100322"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100323"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100324"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100330"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100332"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200200001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200200002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="299999999"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - </attack_signatures> - <data_guard> - <enabled>false</enabled> - <credit_card_numbers>false</credit_card_numbers> - <social_security_numbers>false</social_security_numbers> - <file_content>false</file_content> - <mask_data>false</mask_data> - <check_custom_patterns>false</check_custom_patterns> - <check_exception_patterns>false</check_exception_patterns> - <enforcement_mode>enforce_all_except_url_list</enforcement_mode> - </data_guard> - <policy_builder> - <enabled>false</enabled> - <http_protocol_compliance>true</http_protocol_compliance> - <evasion_techniques_detected>true</evasion_techniques_detected> - <learn_file_types>Always</learn_file_types> - <file_types_lengths>true</file_types_lengths> - <attack_signatures>true</attack_signatures> - <learn_urls>Never</learn_urls> - <urls_metachars>false</urls_metachars> - <learn_parameters>When Violation Detected</learn_parameters> - <learn_cookies>When Violation Detected</learn_cookies> - <learn_redirection_domains>Always</learn_redirection_domains> - <maximum_redirection_domains>100</maximum_redirection_domains> - <parameters_value_lengths>false</parameters_value_lengths> - <parameters_name_meta_characters>false</parameters_name_meta_characters> - <parameters_value_meta_characters>false</parameters_value_meta_characters> - <parameters_integer_value>true</parameters_integer_value> - <allowed_methods>false</allowed_methods> - <request_length_exceeds_buffer_size>true</request_length_exceeds_buffer_size> - <client_side_policy_building>false</client_side_policy_building> - <maximum_file_types>250</maximum_file_types> - <maximum_urls>10000</maximum_urls> - <maximum_parameters>10000</maximum_parameters> - <maximum_allowed_modified_cookies>100</maximum_allowed_modified_cookies> - <content_profiles>false</content_profiles> - <content_profile_classification>false</content_profile_classification> - <track_site_changes> - <untrusted> - <enabled>true</enabled> - <distinct_sessions>10</distinct_sessions> - <distinct_ips>10</distinct_ips> - <minimum_interval>300</minimum_interval> - <maximum_interval>604800</maximum_interval> - </untrusted> - <trusted> - <enabled>true</enabled> - <distinct_sessions>1</distinct_sessions> - <distinct_ips>1</distinct_ips> - <minimum_interval>0</minimum_interval> - <maximum_interval>604800</maximum_interval> - </trusted> - </track_site_changes> - <loosen_rule> - <untrusted> - <distinct_sessions>20</distinct_sessions> - <distinct_ips>20</distinct_ips> - <minimum_interval>3600</minimum_interval> - <maximum_interval>604800</maximum_interval> - </untrusted> - <trusted> - <distinct_sessions>1</distinct_sessions> - <distinct_ips>1</distinct_ips> - <minimum_interval>0</minimum_interval> - <maximum_interval>604800</maximum_interval> - </trusted> - </loosen_rule> - <tighten_rule> - <untrusted> - <distinct_sessions>500</distinct_sessions> - <distinct_ips>500</distinct_ips> - <total_requests>5000</total_requests> - <minimum_interval>86400</minimum_interval> - </untrusted> - <trusted> - <distinct_sessions>500</distinct_sessions> - <distinct_ips>500</distinct_ips> - <total_requests>5000</total_requests> - <minimum_interval>86400</minimum_interval> - </trusted> - </tighten_rule> - <dynamic_parameters> - <unique_value_sets>10</unique_value_sets> - <hidden_fields>false</hidden_fields> - <use_statistics_forms>false</use_statistics_forms> - <use_statistics_links>false</use_statistics_links> - </dynamic_parameters> - <parameter_level>global</parameter_level> - <collapse_to_global_occurrences>10</collapse_to_global_occurrences> - <all_trusted_ips>list</all_trusted_ips> - <valid_host_names>true</valid_host_names> - <csrf_urls>false</csrf_urls> - <learn_from_responses>true</learn_from_responses> - <encoding_failed_to_convert>false</encoding_failed_to_convert> - <check_max_cookie_header_length>false</check_max_cookie_header_length> - <check_max_http_header_length>false</check_max_http_header_length> - <collapse_urls>true</collapse_urls> - <collapse_urls_occurrences>500</collapse_urls_occurrences> - <collapse_urls_depth>2</collapse_urls_depth> - <response_code>1xx</response_code> - <response_code>2xx</response_code> - <response_code>3xx</response_code> - <filetype>bmp</filetype> - <filetype>gif</filetype> - <filetype>ico</filetype> - <filetype>jpeg</filetype> - <filetype>jpg</filetype> - <filetype>pcx</filetype> - <filetype>pdf</filetype> - <filetype>png</filetype> - <filetype>swf</filetype> - <filetype>wav</filetype> - </policy_builder> - <geolocation> - <enforcement_mode> - <mode>disallow</mode> - </enforcement_mode> - </geolocation> - <ip_reputation> - <enabled>false</enabled> - </ip_reputation> - <database_protection> - <enabled>false</enabled> - <user_source>APM Usernames and Session ID</user_source> - </database_protection> - <header name="*" type="wildcard"> - <is_mandatory>false</is_mandatory> - <check_signatures>true</check_signatures> - <is_base64>false</is_base64> - <percent_normalization>false</percent_normalization> - <uri_normalization>false</uri_normalization> - <html_normalization>false</html_normalization> - <enable_normalization_violation>false</enable_normalization_violation> - <is_default>true</is_default> - </header> - <header name="referer" type="explicit"> - <is_mandatory>false</is_mandatory> - <check_signatures>true</check_signatures> - <is_base64>false</is_base64> - <percent_normalization>false</percent_normalization> - <uri_normalization>true</uri_normalization> - <html_normalization>false</html_normalization> - <enable_normalization_violation>true</enable_normalization_violation> - <is_default>true</is_default> - </header> - <header name="cookie" type="explicit"> - <is_mandatory>false</is_mandatory> - <check_signatures>false</check_signatures> - <is_base64>false</is_base64> - <percent_normalization>false</percent_normalization> - <uri_normalization>false</uri_normalization> - <html_normalization>false</html_normalization> - <enable_normalization_violation>false</enable_normalization_violation> - <is_default>true</is_default> - </header> - <header name="authorization" type="explicit"> - <is_mandatory>false</is_mandatory> - <check_signatures>true</check_signatures> - <is_base64>false</is_base64> - <percent_normalization>false</percent_normalization> - <uri_normalization>false</uri_normalization> - <html_normalization>false</html_normalization> - <enable_normalization_violation>false</enable_normalization_violation> - <is_default>true</is_default> - </header> - <redirection_domain name="*" type="wildcard"> - <include_subdomains>false</include_subdomains> - <learning_mode>Always</learning_mode> - </redirection_domain> - <redirection_protection> - <enabled>true</enabled> - </redirection_protection> -</policy> diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/fw_addr_rd.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/fw_addr_rd.json deleted file mode 100644 index c5d091c74..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/fw_addr_rd.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "kind": "tm:security:firewall:address-list:address-liststate", - "name": "test", - "partition": "Common", - "fullPath": "/Common/test", - "generation": 6309, - "selfLink": "https://localhost/mgmt/tm/security/firewall/address-list/~Common~test?ver=15.1.1", - "addresses": [ - { - "name": "1.2.3.4" - }, - { - "name": "1.2.3.4%124" - }, - { - "name": "2700:bc00:1f10:101::6" - }, - { - "name": "2700:bc00:1f10:101::6%123" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/import_policy_from_template_task_started.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/import_policy_from_template_task_started.json deleted file mode 100644 index 419d56936..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/import_policy_from_template_task_started.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "isBase64": false, - "policyTemplateReference": { - "link": "https://localhost/mgmt/tm/asm/policy-templates/jmHjN-Fpm-SGwYQsrZp57A?ver=12.1.2" - }, - "status": "NEW", - "name": "fake_policy", - "lastUpdateMicros": 1.506252942e+15, - "selfLink": "https://localhost/mgmt/tm/asm/tasks/import-policy/h3j_hAXx9fG3FTvtr6XcNA?ver=12.1.2", - "kind": "tm:asm:tasks:import-policy:import-policy-taskstate", - "id": "h3j_hAXx9fG3FTvtr6XcNA", - "startTime": "2017-09-24T11:35:42Z" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/import_policy_task_started.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/import_policy_task_started.json deleted file mode 100644 index 328777d2c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/import_policy_task_started.json +++ /dev/null @@ -1,11 +0,0 @@ - { - "isBase64": false, - "status": "STARTED", - "name": "fake_policy", - "lastUpdateMicros": 1.505994744e+15, - "selfLink": "https://localhost/mgmt/tm/asm/tasks/import-policy/9LRgS43RjnaDRorMS9rSEg?ver=12.1.2", - "kind": "tm:asm:tasks:import-policy:import-policy-taskstate", - "filename": "fake_policy.xml", - "id": "9LRgS43RjnaDRorMS9rSEg", - "startTime": "2017-09-21T11:52:24Z" - } diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_hotfixes_after_upload_remote.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_hotfixes_after_upload_remote.json deleted file mode 100644 index 6ecfa8fac..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_hotfixes_after_upload_remote.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "kind": "tm:sys:software:hotfix:hotfixstate", - "name": "Hotfix-BIGIP-12.1.2.1.0.271-HF1.iso", - "fullPath": "Hotfix-BIGIP-12.1.2.1.0.271-HF1.iso", - "generation": 5792, - "selfLink": "https://localhost/mgmt/tm/sys/software/hotfix/Hotfix-BIGIP-12.1.2.1.0.271-HF1.iso?ver=12.1.0", - "build": "1.0.271", - "checksum": "b5055fa2619f725ab97137fe5de3b3b9", - "id": "HF1", - "product": "BIG-IP", - "title": "Hotfix Version 1.0.271", - "verified": "yes", - "version": "12.1.2" - }, - { - "kind": "tm:sys:software:hotfix:hotfixstate", - "name": "Hotfix-BIGIP-12.1.0.1.0.1447-HF1.iso", - "fullPath": "Hotfix-BIGIP-12.1.0.1.0.1447-HF1.iso", - "generation": 14018, - "selfLink": "https://localhost/mgmt/tm/sys/software/hotfix/Hotfix-BIGIP-12.1.0.1.0.1447-HF1.iso?ver=12.1.0", - "build": "1.0.1447", - "checksum": "c727a20957d5cbce287f99c0ba3fe83f", - "id": "HF1", - "product": "BIG-IP", - "title": "Hotfix Version 1.0.1447", - "verified": "yes", - "version": "12.1.0" - } - ] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_hotfixes_local.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_hotfixes_local.json deleted file mode 100644 index 7dcad37c4..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_hotfixes_local.json +++ /dev/null @@ -1,72 +0,0 @@ -[ - { - "kind": "tm:sys:software:hotfix:hotfixstate", - "name": "11.5.3-hf2", - "fullPath": "11.5.3-hf2", - "generation": 14011, - "selfLink": "https://localhost/mgmt/tm/sys/software/hotfix/11.5.3-hf2?ver=12.1.0", - "build": "2.0.196", - "checksum": "58d36d4c9bedd4592399ee6f7dc9e7fd", - "id": "HF2", - "product": "BIG-IP", - "title": "Hotfix Version 2.0.196", - "verified": "yes", - "version": "11.5.3" - }, - { - "kind": "tm:sys:software:hotfix:hotfixstate", - "name": "11.6.0-hf6.iso", - "fullPath": "11.6.0-hf6.iso", - "generation": 14084, - "selfLink": "https://localhost/mgmt/tm/sys/software/hotfix/11.6.0-hf6.iso?ver=12.1.0", - "build": "6.0.442", - "checksum": "d41bb9e70720790cbe97771309b914b6", - "id": "HF6", - "product": "BIG-IP", - "title": "Hotfix Version 6.0.442", - "verified": "yes", - "version": "11.6.0" - }, - { - "kind": "tm:sys:software:hotfix:hotfixstate", - "name": "11.6.1-hf1.iso", - "fullPath": "11.6.1-hf1.iso", - "generation": 14012, - "selfLink": "https://localhost/mgmt/tm/sys/software/hotfix/11.6.1-hf1.iso?ver=12.1.0", - "build": "1.0.326", - "checksum": "20eb2cf44950cd5491569d48fb5b2031", - "id": "HF1", - "product": "BIG-IP", - "title": "Hotfix Version 1.0.326", - "verified": "yes", - "version": "11.6.1" - }, - { - "kind": "tm:sys:software:hotfix:hotfixstate", - "name": "Hotfix-BIGIP-11.6.0.6.347.442-HF6-ENG.iso", - "fullPath": "Hotfix-BIGIP-11.6.0.6.347.442-HF6-ENG.iso", - "generation": 14086, - "selfLink": "https://localhost/mgmt/tm/sys/software/hotfix/Hotfix-BIGIP-11.6.0.6.347.442-HF6-ENG.iso?ver=12.1.0", - "build": "6.347.442", - "checksum": "53173873db2081ed1cac05e9817e7318", - "id": "HF6-ENG347", - "product": "BIG-IP", - "title": "Engineering Hotfix Version 6.347.442", - "verified": "yes", - "version": "11.6.0" - }, - { - "kind": "tm:sys:software:hotfix:hotfixstate", - "name": "Hotfix-BIGIP-12.1.0.1.0.1447-HF1.iso", - "fullPath": "Hotfix-BIGIP-12.1.0.1.0.1447-HF1.iso", - "generation": 14018, - "selfLink": "https://localhost/mgmt/tm/sys/software/hotfix/Hotfix-BIGIP-12.1.0.1.0.1447-HF1.iso?ver=12.1.0", - "build": "1.0.1447", - "checksum": "c727a20957d5cbce287f99c0ba3fe83f", - "id": "HF1", - "product": "BIG-IP", - "title": "Hotfix Version 1.0.1447", - "verified": "yes", - "version": "12.1.0" - } - ]
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_hotfixes_remote.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_hotfixes_remote.json deleted file mode 100644 index 89e1d1694..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_hotfixes_remote.json +++ /dev/null @@ -1,16 +0,0 @@ -[ - { - "kind": "tm:sys:software:hotfix:hotfixstate", - "name": "Hotfix-BIGIP-12.1.0.1.0.1447-HF1.iso", - "fullPath": "Hotfix-BIGIP-12.1.0.1.0.1447-HF1.iso", - "generation": 14018, - "selfLink": "https://localhost/mgmt/tm/sys/software/hotfix/Hotfix-BIGIP-12.1.0.1.0.1447-HF1.iso?ver=12.1.0", - "build": "1.0.1447", - "checksum": "c727a20957d5cbce287f99c0ba3fe83f", - "id": "HF1", - "product": "BIG-IP", - "title": "Hotfix Version 1.0.1447", - "verified": "yes", - "version": "12.1.0" - } - ] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_images_after_upload_local.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_images_after_upload_local.json deleted file mode 100644 index 13a528827..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_images_after_upload_local.json +++ /dev/null @@ -1,122 +0,0 @@ -[ - { - "kind": "tm:sys:software:image:imagestate", - "name": "11.5.3", - "fullPath": "11.5.3", - "generation": 14087, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/11.5.3?ver=12.1.0", - "build": "0.0.163", - "buildDate": "Wed Apr 22 16 32 47 PDT 2015", - "checksum": "912c5862570bfdcd13bbc5f308e2e9b3", - "fileSize": "1786 MB", - "lastModified": "Tue Apr 18 14:09:02 2017", - "product": "BIG-IP", - "verified": "yes", - "version": "11.5.3" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "11.6.1.iso", - "fullPath": "11.6.1.iso", - "generation": 14083, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/11.6.1.iso?ver=12.1.0", - "build": "0.0.317", - "buildDate": "Wed May 4 17 48 47 PDT 2016", - "checksum": "d7139e97b76e88440f1eaec8bdb0f3b1", - "fileSize": "1860 MB", - "lastModified": "Fri Sep 30 14:07:50 2016", - "product": "BIG-IP", - "verified": "yes", - "version": "11.6.1" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-11.5.1.0.0.110.iso", - "fullPath": "BIGIP-11.5.1.0.0.110.iso", - "generation": 14082, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-11.5.1.0.0.110.iso?ver=12.1.0", - "build": "0.0.110", - "buildDate": "Wed Mar 12 15 44 53 PDT 2014", - "checksum": "5163a32088e6e5f304ecbf86cc390eae", - "fileSize": "1753 MB", - "lastModified": "Thu Oct 30 18:22:57 2014", - "product": "BIG-IP", - "verified": "yes", - "version": "11.5.1" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-11.5.3.0.0.163.iso", - "fullPath": "BIGIP-11.5.3.0.0.163.iso", - "generation": 14085, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-11.5.3.0.0.163.iso?ver=12.1.0", - "build": "0.0.163", - "buildDate": "Wed Apr 22 16 32 47 PDT 2015", - "checksum": "912c5862570bfdcd13bbc5f308e2e9b3", - "fileSize": "1786 MB", - "lastModified": "Mon Jul 27 03:23:42 2015", - "product": "BIG-IP", - "verified": "yes", - "version": "11.5.3" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-12.1.0.0.0.1434.iso", - "fullPath": "BIGIP-12.1.0.0.0.1434.iso", - "generation": 14014, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-12.1.0.0.0.1434.iso?ver=12.1.0", - "build": "0.0.1434", - "buildDate": "Wed May 11 11 45 11 PDT 2016", - "checksum": "c2300ca7b630a0b46a9047a1bafe4922", - "fileSize": "1946 MB", - "lastModified": "Thu Sep 22 02:46:26 2016", - "product": "BIG-IP", - "verified": "yes", - "version": "12.1.0" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-12.1.1.0.0.184.iso", - "fullPath": "BIGIP-12.1.1.0.0.184.iso", - "generation": 14000, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-12.1.1.0.0.184.iso?ver=12.1.0", - "build": "0.0.184", - "buildDate": "Thu Aug 11 17 09 01 PDT 2016", - "checksum": "2f89a4667b8651e2e1f28a569e5c0742", - "fileSize": "1997 MB", - "lastModified": "Sun Oct 2 20:50:04 2016", - "product": "BIG-IP", - "verified": "yes", - "version": "12.1.1" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-12.1.2.0.0.249.iso", - "fullPath": "BIGIP-12.1.2.0.0.249.iso", - "generation": 13991, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-12.1.2.0.0.249.iso?ver=12.1.0", - "build": "0.0.249", - "buildDate": "Wed Nov 30 16 04 00 PST 2016", - "checksum": "1b2bd1b0ae5e41e225b4ceea705f74e7", - "fileSize": "2012 MB", - "lastModified": "Mon Feb 6 07:05:55 2017", - "product": "BIG-IP", - "verified": "yes", - "version": "12.1.2" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-12.0.0.0.0.606", - "fullPath": "BIGIP-12.0.0.0.0.606", - "generation": 14087, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/11.5.3?ver=12.1.0", - "build": "0.0.606", - "buildDate": "Mon Aug 8 16 32 47 PDT 2015", - "checksum": "912c5862570bfdcd13bbc5f308e2e9b3", - "fileSize": "1786 MB", - "lastModified": "Tue Apr 18 14:09:02 2017", - "product": "BIG-IP", - "verified": "yes", - "version": "12.0.0" - } - ]
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_images_after_upload_remote.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_images_after_upload_remote.json deleted file mode 100644 index b3db05847..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_images_after_upload_remote.json +++ /dev/null @@ -1,47 +0,0 @@ -[ - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-12.1.2.0.0.249.iso", - "fullPath": "BIGIP-12.1.2.0.0.249.iso", - "generation": 5780, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-12.1.2.0.0.249.iso?ver=12.1.0", - "build": "0.0.249", - "buildDate": "Wed Nov 30 16 04 00 PST 2016", - "checksum": "1b2bd1b0ae5e41e225b4ceea705f74e7", - "fileSize": "2012 MB", - "lastModified": "Thu Jun 22 09:13:07 2017", - "product": "BIG-IP", - "verified": "yes", - "version": "12.1.2" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-12.1.0.0.0.1434.iso", - "fullPath": "BIGIP-12.1.0.0.0.1434.iso", - "generation": 14014, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-12.1.0.0.0.1434.iso?ver=12.1.0", - "build": "0.0.1434", - "buildDate": "Wed May 11 11 45 11 PDT 2016", - "checksum": "c2300ca7b630a0b46a9047a1bafe4922", - "fileSize": "1946 MB", - "lastModified": "Thu Sep 22 02:46:26 2016", - "product": "BIG-IP", - "verified": "yes", - "version": "12.1.0" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-12.1.1.0.0.184.iso", - "fullPath": "BIGIP-12.1.1.0.0.184.iso", - "generation": 14000, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-12.1.1.0.0.184.iso?ver=12.1.0", - "build": "0.0.184", - "buildDate": "Thu Aug 11 17 09 01 PDT 2016", - "checksum": "2f89a4667b8651e2e1f28a569e5c0742", - "fileSize": "1997 MB", - "lastModified": "Sun Oct 2 20:50:04 2016", - "product": "BIG-IP", - "verified": "yes", - "version": "12.1.1" - } - ] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_images_local.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_images_local.json deleted file mode 100644 index 1b134479c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_images_local.json +++ /dev/null @@ -1,107 +0,0 @@ -[ - { - "kind": "tm:sys:software:image:imagestate", - "name": "11.5.3", - "fullPath": "11.5.3", - "generation": 14087, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/11.5.3?ver=12.1.0", - "build": "0.0.163", - "buildDate": "Wed Apr 22 16 32 47 PDT 2015", - "checksum": "912c5862570bfdcd13bbc5f308e2e9b3", - "fileSize": "1786 MB", - "lastModified": "Tue Apr 18 14:09:02 2017", - "product": "BIG-IP", - "verified": "yes", - "version": "11.5.3" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "11.6.1.iso", - "fullPath": "11.6.1.iso", - "generation": 14083, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/11.6.1.iso?ver=12.1.0", - "build": "0.0.317", - "buildDate": "Wed May 4 17 48 47 PDT 2016", - "checksum": "d7139e97b76e88440f1eaec8bdb0f3b1", - "fileSize": "1860 MB", - "lastModified": "Fri Sep 30 14:07:50 2016", - "product": "BIG-IP", - "verified": "yes", - "version": "11.6.1" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-11.5.1.0.0.110.iso", - "fullPath": "BIGIP-11.5.1.0.0.110.iso", - "generation": 14082, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-11.5.1.0.0.110.iso?ver=12.1.0", - "build": "0.0.110", - "buildDate": "Wed Mar 12 15 44 53 PDT 2014", - "checksum": "5163a32088e6e5f304ecbf86cc390eae", - "fileSize": "1753 MB", - "lastModified": "Thu Oct 30 18:22:57 2014", - "product": "BIG-IP", - "verified": "yes", - "version": "11.5.1" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-11.5.3.0.0.163.iso", - "fullPath": "BIGIP-11.5.3.0.0.163.iso", - "generation": 14085, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-11.5.3.0.0.163.iso?ver=12.1.0", - "build": "0.0.163", - "buildDate": "Wed Apr 22 16 32 47 PDT 2015", - "checksum": "912c5862570bfdcd13bbc5f308e2e9b3", - "fileSize": "1786 MB", - "lastModified": "Mon Jul 27 03:23:42 2015", - "product": "BIG-IP", - "verified": "yes", - "version": "11.5.3" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-12.1.0.0.0.1434.iso", - "fullPath": "BIGIP-12.1.0.0.0.1434.iso", - "generation": 14014, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-12.1.0.0.0.1434.iso?ver=12.1.0", - "build": "0.0.1434", - "buildDate": "Wed May 11 11 45 11 PDT 2016", - "checksum": "c2300ca7b630a0b46a9047a1bafe4922", - "fileSize": "1946 MB", - "lastModified": "Thu Sep 22 02:46:26 2016", - "product": "BIG-IP", - "verified": "yes", - "version": "12.1.0" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-12.1.1.0.0.184.iso", - "fullPath": "BIGIP-12.1.1.0.0.184.iso", - "generation": 14000, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-12.1.1.0.0.184.iso?ver=12.1.0", - "build": "0.0.184", - "buildDate": "Thu Aug 11 17 09 01 PDT 2016", - "checksum": "2f89a4667b8651e2e1f28a569e5c0742", - "fileSize": "1997 MB", - "lastModified": "Sun Oct 2 20:50:04 2016", - "product": "BIG-IP", - "verified": "yes", - "version": "12.1.1" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-12.1.2.0.0.249.iso", - "fullPath": "BIGIP-12.1.2.0.0.249.iso", - "generation": 13991, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-12.1.2.0.0.249.iso?ver=12.1.0", - "build": "0.0.249", - "buildDate": "Wed Nov 30 16 04 00 PST 2016", - "checksum": "1b2bd1b0ae5e41e225b4ceea705f74e7", - "fileSize": "2012 MB", - "lastModified": "Mon Feb 6 07:05:55 2017", - "product": "BIG-IP", - "verified": "yes", - "version": "12.1.2" - } - ]
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_images_remote.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_images_remote.json deleted file mode 100644 index 90a27c468..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_images_remote.json +++ /dev/null @@ -1,32 +0,0 @@ -[ - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-12.1.0.0.0.1434.iso", - "fullPath": "BIGIP-12.1.0.0.0.1434.iso", - "generation": 14014, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-12.1.0.0.0.1434.iso?ver=12.1.0", - "build": "0.0.1434", - "buildDate": "Wed May 11 11 45 11 PDT 2016", - "checksum": "c2300ca7b630a0b46a9047a1bafe4922", - "fileSize": "1946 MB", - "lastModified": "Thu Sep 22 02:46:26 2016", - "product": "BIG-IP", - "verified": "yes", - "version": "12.1.0" - }, - { - "kind": "tm:sys:software:image:imagestate", - "name": "BIGIP-12.1.1.0.0.184.iso", - "fullPath": "BIGIP-12.1.1.0.0.184.iso", - "generation": 14000, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/BIGIP-12.1.1.0.0.184.iso?ver=12.1.0", - "build": "0.0.184", - "buildDate": "Thu Aug 11 17 09 01 PDT 2016", - "checksum": "2f89a4667b8651e2e1f28a569e5c0742", - "fileSize": "1997 MB", - "lastModified": "Sun Oct 2 20:50:04 2016", - "product": "BIG-IP", - "verified": "yes", - "version": "12.1.1" - } - ] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_of_volumes_12_1_2_installed.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_of_volumes_12_1_2_installed.json deleted file mode 100644 index 8d6b74314..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_of_volumes_12_1_2_installed.json +++ /dev/null @@ -1,92 +0,0 @@ -[ - { - "kind": "tm:sys:software:volume:volumestate", - "name": "HD1.1", - "fullPath": "HD1.1", - "generation": 13982, - "selfLink": "https://localhost/mgmt/tm/sys/software/volume/HD1.1?ver=12.1.0", - "active": true, - "apiRawValues": {}, - "basebuild": "0.0.1434", - "build": "1.0.1447", - "product": "BIG-IP", - "status": "complete", - "version": "12.1.0", - "media": [ - { - "name": "HD1.1", - "defaultBootLocation": true, - "media": "hd", - "size": "default", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/software/volume/HD1.1?ver=12.1.0" - } - } - ] - }, - { - "kind": "tm:sys:software:volume:volumestate", - "name": "HD1.2", - "fullPath": "HD1.2", - "generation": 305, - "selfLink": "https://localhost/mgmt/tm/sys/software/volume/HD1.2?ver=12.1.0", - "basebuild": "0.0.184", - "build": "1.0.196", - "product": "BIG-IP", - "status": "complete", - "version": "12.1.1", - "media": [ - { - "name": "HD1.2", - "media": "hd", - "size": "default", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/software/volume/HD1.2?ver=12.1.0" - } - } - ] - }, - { - "kind": "tm:sys:software:volume:volumestate", - "name": "HD1.3", - "fullPath": "HD1.3", - "generation": 13983, - "selfLink": "https://localhost/mgmt/tm/sys/software/volume/HD1.3?ver=12.1.0", - "build": "0.0.249", - "product": "BIG-IP", - "status": "complete", - "version": "12.1.2", - "media": [ - { - "name": "HD1.3", - "media": "hd", - "size": "default", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/software/volume/HD1.3?ver=12.1.0" - } - } - ] - }, - { - "kind": "tm:sys:software:volume:volumestate", - "name": "HD1.4", - "fullPath": "HD1.4", - "generation": 5996, - "selfLink": "https://localhost/mgmt/tm/sys/software/volume/HD1.4?ver=12.1.0", - "basebuild": "0.0.249", - "build": "1.0.271", - "product": "BIG-IP", - "status": "complete", - "version": "12.1.2", - "media": [ - { - "name": "HD1.4", - "media": "hd", - "size": "default", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/software/volume/HD1.4?ver=12.1.0" - } - } - ] - } - ] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_of_volumes_12_1_2_not_installed.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_of_volumes_12_1_2_not_installed.json deleted file mode 100644 index 1d7578b03..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_of_volumes_12_1_2_not_installed.json +++ /dev/null @@ -1,71 +0,0 @@ -[ - { - "kind": "tm:sys:software:volume:volumestate", - "name": "HD1.1", - "fullPath": "HD1.1", - "generation": 13982, - "selfLink": "https://localhost/mgmt/tm/sys/software/volume/HD1.1?ver=12.1.0", - "active": true, - "apiRawValues": {}, - "basebuild": "0.0.1434", - "build": "1.0.1447", - "product": "BIG-IP", - "status": "complete", - "version": "12.1.0", - "media": [ - { - "name": "HD1.1", - "defaultBootLocation": true, - "media": "hd", - "size": "default", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/software/volume/HD1.1?ver=12.1.0" - } - } - ] - }, - { - "kind": "tm:sys:software:volume:volumestate", - "name": "HD1.2", - "fullPath": "HD1.2", - "generation": 305, - "selfLink": "https://localhost/mgmt/tm/sys/software/volume/HD1.2?ver=12.1.0", - "basebuild": "0.0.317", - "build": "0.0.317", - "product": "BIG-IP", - "status": "complete", - "version": "11.6.1", - "media": [ - { - "name": "HD1.2", - "media": "hd", - "size": "default", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/software/volume/HD1.2?ver=12.1.0" - } - } - ] - }, - { - "kind": "tm:sys:software:volume:volumestate", - "name": "HD1.3", - "fullPath": "HD1.3", - "generation": 13983, - "selfLink": "https://localhost/mgmt/tm/sys/software/volume/HD1.3?ver=12.1.0", - "basebuild": "0.0.163", - "build": "2.0.196", - "product": "BIG-IP", - "status": "complete", - "version": "11.5.3", - "media": [ - { - "name": "HD1.3", - "media": "hd", - "size": "default", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/software/volume/HD1.3?ver=12.1.0" - } - } - ] - } - ] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_of_volumes_only_active_volume.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_of_volumes_only_active_volume.json deleted file mode 100644 index 0c1bace46..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/list_of_volumes_only_active_volume.json +++ /dev/null @@ -1,27 +0,0 @@ -[ - { - "kind": "tm:sys:software:volume:volumestate", - "name": "HD1.active", - "fullPath": "HD1.active", - "generation": 13982, - "selfLink": "https://localhost/mgmt/tm/sys/software/volume/HD1.active?ver=12.1.0", - "active": true, - "apiRawValues": {}, - "basebuild": "0.0.1434", - "build": "1.0.1447", - "product": "BIG-IP", - "status": "complete", - "version": "12.1.0", - "media": [ - { - "name": "HD1.active", - "defaultBootLocation": true, - "media": "hd", - "size": "default", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/software/volume/HD1.active?ver=12.1.0" - } - } - ] - } - ]
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_active_volume.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_active_volume.json deleted file mode 100644 index d4ba574a3..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_active_volume.json +++ /dev/null @@ -1,25 +0,0 @@ - { - "kind": "tm:sys:software:volume:volumestate", - "name": "HD1.1", - "fullPath": "HD1.1", - "generation": 13982, - "selfLink": "https://localhost/mgmt/tm/sys/software/volume/HD1.1?ver=12.1.0", - "active": true, - "apiRawValues": {}, - "basebuild": "0.0.1434", - "build": "1.0.1447", - "product": "BIG-IP", - "status": "complete", - "version": "12.1.0", - "media": [ - { - "name": "HD1.1", - "defaultBootLocation": true, - "media": "hd", - "size": "default", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/software/volume/HD1.1?ver=12.1.0" - } - } - ] - }
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_afm_global_network_log_network.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_afm_global_network_log_network.json deleted file mode 100644 index cc4ef0d39..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_afm_global_network_log_network.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "kind": "tm:security:log:profile:network:networkstate", - "name": "global-network", - "fullPath": "global-network", - "generation": 839, - "selfLink": "https://localhost/mgmt/tm/security/log/profile/~Common~global-network/network/global-network?ver=12.1.4", - "filter": { - "logAclMatchAccept": "disabled", - "logAclMatchDrop": "disabled", - "logAclMatchReject": "disabled", - "logAclToBoxDeny": "disabled", - "logGeoAlways": "disabled", - "logIpErrors": "disabled", - "logTcpErrors": "disabled", - "logTcpEvents": "disabled", - "logTranslationFields": "disabled" - }, - "format": { - "fieldListDelimiter": ",", - "type": "none" - }, - "rateLimit": { - "aclMatchAccept": 4294967295, - "aclMatchDrop": 4294967295, - "aclMatchReject": 4294967295, - "aggregateRate": 4294967295, - "ipErrors": 4294967295, - "tcpErrors": 4294967295, - "tcpEvents": 4294967295 - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_afm_log_global_network_profile.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_afm_log_global_network_profile.json deleted file mode 100644 index 205af5b8c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_afm_log_global_network_profile.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "kind": "tm:security:log:profile:profilestate", - "name": "global-network", - "partition": "Common", - "fullPath": "/Common/global-network", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/security/log/profile/~Common~global-network?ver=12.1.4", - "description": "Default logging profile for network events", - "ipIntelligence": { - "aggregateRate": 4294967295, - "logRtbh": "disabled", - "logShun": "disabled", - "logTranslationFields": "disabled" - }, - "nat": { - "endInboundSession": "disabled", - "endOutboundSession": { - "action": "disabled" - }, - "errors": "disabled", - "lsnLegacyMode": "disabled", - "quotaExceeded": "disabled", - "startInboundSession": "disabled", - "startOutboundSession": { - "action": "disabled" - } - }, - "portMisuse": { - "aggregateRate": 4294967295 - }, - "trafficStatistics": { - "activeFlows": "disabled", - "missedFlows": "disabled", - "reapedFlows": "disabled", - "syncookies": "disabled", - "syncookiesWhitelist": "disabled" - }, - "networkReference": { - "link": "https://localhost/mgmt/tm/security/log/profile/~Common~global-network/network?ver=12.1.4", - "isSubcollection": true - }, - "protocolDnsReference": { - "link": "https://localhost/mgmt/tm/security/log/profile/~Common~global-network/protocol-dns?ver=12.1.4", - "isSubcollection": true - }, - "protocolSipReference": { - "link": "https://localhost/mgmt/tm/security/log/profile/~Common~global-network/protocol-sip?ver=12.1.4", - "isSubcollection": true - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_afm_schedule.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_afm_schedule.json deleted file mode 100644 index c9d51ebff..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_afm_schedule.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:security:firewall:schedule:schedulestate", - "name": "foobar", - "partition": "Common", - "fullPath": "/Common/foobar", - "generation": 1835, - "selfLink": "https://localhost/mgmt/tm/security/firewall/schedule/~Common~foobar?ver=12.1.4", - "dailyHourEnd": "12:00", - "dailyHourStart": "6:00", - "dateValidEnd": "2019-06-13T16:00:00Z", - "dateValidStart": "2019-05-31T07:00:00Z", - "daysOfWeek": [ - "sunday", - "monday", - "friday", - "saturday" - ], - "description": "some description" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_apm_acl.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_apm_acl.json deleted file mode 100644 index 564784dbf..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_apm_acl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "kind": "tm:apm:acl:aclstate", - "name": "lastone", - "partition": "Common", - "fullPath": "/Common/lastone", - "generation": 495, - "selfLink": "https://localhost/mgmt/tm/apm/acl/~Common~lastone?ver=12.1.4", - "aclOrder": 2, - "description": "foobar", - "locationSpecific": "true", - "pathMatchCase": "false", - "type": "static", - "entries": [ - { - "action": "discard", - "dstEndPort": 0, - "dstStartPort": 0, - "dstSubnet": "0.0.0.0/0", - "log": "none", - "protocol": 1, - "scheme": "any", - "srcEndPort": 0, - "srcStartPort": 0, - "srcSubnet": "0.0.0.0/0" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_apm_network_access.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_apm_network_access.json deleted file mode 100644 index 9c8b897f7..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_apm_network_access.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "kind": "tm:apm:resource:network-access:network-accessstate", - "name": "test", - "partition": "Common", - "fullPath": "/Common/test", - "generation": 1140, - "selfLink": "https://localhost/mgmt/tm/apm/resource/network-access/~Common~test?ver=12.1.4", - "addressSpaceDhcpRequestsExcluded": "true", - "addressSpaceExcludeDnsName": [ - "baz.com", - "bazfoo.com" - ], - "addressSpaceIncludeDnsName": [ - "foo.com", - "bar.com" - ], - "addressSpaceLocDnsServersExcluded": "true", - "addressSpaceLocalSubnetsExcluded": "true", - "addressSpaceProtect": "false", - "applicationLaunchWarning": "true", - "autoLaunch": "false", - "clientInterfaceSpeed": 100000000, - "clientIpFilterEngine": "false", - "clientPowerManagement": "ignore", - "clientProxy": "false", - "clientProxyAddress": "any6", - "clientProxyEnforceSubnets": "true", - "clientProxyIgnoreAutoConfigError": "false", - "clientProxyLocalBypass": "false", - "clientProxyPort": 0, - "clientProxyUseHttpPac": "false", - "clientProxyUseLocalProxy": "false", - "clientTrayIcon": "true", - "compression": "none", - "customizationGroup": "/Common/test_resource_network_access_customization", - "customizationGroupReference": { - "link": "https://localhost/mgmt/tm/apm/policy/customization-group/~Common~test_resource_network_access_customization?ver=12.1.4" - }, - "dnsEnforceSearchOrder": "true", - "dnsPrimary": "any6", - "dnsRegisterConnection": "false", - "dnsSecondary": "any6", - "dnsUseDnsSuffixForRegistration": "false", - "dtls": "false", - "dtlsPort": 4433, - "executeLogoffScripts": "false", - "idleTimeoutThreshold": 0, - "idleTimeoutWindow": 0, - "ipv6DnsPrimary": "any6", - "ipv6DnsSecondary": "any6", - "ipv6LeasepoolName": "/Common/ipv6lease", - "ipv6LeasepoolNameReference": { - "link": "https://localhost/mgmt/tm/apm/resource/ipv6-leasepool/~Common~ipv6lease?ver=12.1.4" - }, - "leasepoolName": "/Common/ipv4lease", - "leasepoolNameReference": { - "link": "https://localhost/mgmt/tm/apm/resource/leasepool/~Common~ipv4lease?ver=12.1.4" - }, - "locationSpecific": "true", - "microsoftNetworkClient": "true", - "microsoftNetworkServer": "false", - "networkTunnel": "enabled", - "preserveSourcePortStrict": "none", - "provideClientCert": "true", - "proxyArp": "false", - "snat": "automap", - "splitTunneling": "true", - "supportedIpVersion": "ipv4-ipv6", - "syncWithActiveDirectory": "false", - "type": "network-access", - "winsPrimary": "any6", - "winsSecondary": "any6", - "addressSpaceExcludeSubnet": [ - { - "subnet": "192.168.1.0/24" - }, - { - "subnet": "192.168.2.1/32" - } - ], - "addressSpaceIncludeSubnet": [ - { - "subnet": "10.10.10.1/32" - }, - { - "subnet": "10.11.11.0/24" - } - ], - "ipv6AddressSpaceIncludeSubnet": [ - { - "subnet": "2607:f0d0:1002:51::4/128" - } - ], - "optimizedAppReference": { - "link": "https://localhost/mgmt/tm/apm/resource/network-access/~Common~test/optimized-app?ver=12.1.4", - "isSubcollection": true - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_asm_dos.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_asm_dos.json deleted file mode 100644 index cab7b71ff..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_asm_dos.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "kind": "tm:security:dos:profile:application:applicationstate", - "name": "test", - "fullPath": "test", - "generation": 1442, - "selfLink": "https://localhost/mgmt/tm/security/dos/profile/~Common~test/application/test?ver=13.1.1.4", - "botDefense": { - "browserLegitCaptcha": "enabled", - "browserLegitEnabled": "enabled", - "crossDomainRequests": "allow-all", - "gracePeriod": 300, - "mode": "disabled" - }, - "botSignatures": { - "check": "disabled", - "categories": [ - { - "name": "DOS Tool", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~DOS%20Tool?ver=13.1.1.4" - } - }, - { - "name": "E-Mail Collector", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~E-Mail%20Collector?ver=13.1.1.4" - } - }, - { - "name": "Exploit Tool", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Exploit%20Tool?ver=13.1.1.4" - } - }, - { - "name": "Network Scanner", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Network%20Scanner?ver=13.1.1.4" - } - }, - { - "name": "Search Engine", - "partition": "Common", - "action": "report", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Search%20Engine?ver=13.1.1.4" - } - }, - { - "name": "Spam Bot", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Spam%20Bot?ver=13.1.1.4" - } - }, - { - "name": "Spyware", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Spyware?ver=13.1.1.4" - } - }, - { - "name": "Vulnerability Scanner", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Vulnerability%20Scanner?ver=13.1.1.4" - } - }, - { - "name": "Web Spider", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Web%20Spider?ver=13.1.1.4" - } - }, - { - "name": "Webserver Stress Tool", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Webserver%20Stress%20Tool?ver=13.1.1.4" - } - } - ] - }, - "captchaResponse": { - "failure": { - "body": "You have entered an invalid answer for the question. Please, try again.\n<br>\n%DOSL7.captcha.image% %DOSL7.captcha.change%\n<br>\n<b>What code is in the image\\?</b>\n%DOSL7.captcha.solution%\n<br>\n%DOSL7.captcha.submit%\n<br>\n<br>\nYour support ID is: %DOSL7.captcha.support_id%.", - "type": "default" - }, - "first": { - "body": "This question is for testing whether you are a human visitor and to prevent automated spam submission.\n<br>\n%DOSL7.captcha.image% %DOSL7.captcha.change%\n<br>\n<b>What code is in the image\\?</b>\n%DOSL7.captcha.solution%\n<br>\n%DOSL7.captcha.submit%\n<br>\n<br>\nYour support ID is: %DOSL7.captcha.support_id%.", - "type": "default" - } - }, - "heavyUrls": { - "automaticDetection": "enabled", - "exclude": [ - "/exclude.html" - ], - "latencyThreshold": 1000, - "protection": "disabled", - "includeList": [ - { - "name": "URL/test.htm", - "threshold": "auto", - "url": "/test.htm" - }, - { - "name": "URL/testy.htm", - "threshold": "auto", - "url": "/testy.htm" - } - ] - }, - "mobileDetection": { - "allowAndroidRootedDevice": "false", - "allowAnyAndroidPackage": "false", - "allowAnyIosPackage": "false", - "allowEmulators": "true", - "allowJailbrokenDevices": "true", - "clientSideChallengeMode": "pass", - "enabled": "disabled", - "iosAllowedPackageNames": [ - "foobarapp" - ], - "androidPublishers": [ - { - "name": "ca-bundle.crt", - "partition": "Common", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~ca-bundle.crt?ver=13.1.1.4" - } - } - ] - }, - "rtbhDurationSec": 300, - "rtbhEnable": "enabled", - "scrubbingDurationSec": 60, - "scrubbingEnable": "enabled", - "singlePageApplication": "enabled", - "stressBased": { - "behavioral": { - "dosDetection": "disabled", - "mitigationMode": "none", - "signatures": "disabled", - "signaturesApprovedOnly": "disabled" - }, - "deEscalationPeriod": 7200, - "deviceCaptchaChallenge": "disabled", - "deviceClientSideDefense": "disabled", - "deviceMaximumAutoTps": 5000, - "deviceMaximumTps": 200, - "deviceMinimumAutoTps": 5, - "deviceMinimumTps": 40, - "deviceRateLimiting": "disabled", - "deviceRequestBlockingMode": "rate-limit", - "deviceTpsIncreaseRate": 500, - "escalationPeriod": 120, - "geoCaptchaChallenge": "disabled", - "geoClientSideDefense": "disabled", - "geoMaximumAutoTps": 20000, - "geoMinimumAutoTps": 50, - "geoMinimumShare": 10, - "geoRateLimiting": "disabled", - "geoRequestBlockingMode": "rate-limit", - "geoShareIncreaseRate": 500, - "ipCaptchaChallenge": "disabled", - "ipClientSideDefense": "disabled", - "ipMaximumAutoTps": 5000, - "ipMaximumTps": 200, - "ipMinimumAutoTps": 5, - "ipMinimumTps": 40, - "ipRateLimiting": "enabled", - "ipRequestBlockingMode": "rate-limit", - "ipTpsIncreaseRate": 500, - "mode": "off", - "siteCaptchaChallenge": "disabled", - "siteClientSideDefense": "disabled", - "siteMaximumAutoTps": 20000, - "siteMaximumTps": 10000, - "siteMinimumAutoTps": 50, - "siteMinimumTps": 2000, - "siteRateLimiting": "disabled", - "siteTpsIncreaseRate": 500, - "thresholdsMode": "manual", - "urlCaptchaChallenge": "disabled", - "urlClientSideDefense": "disabled", - "urlEnableHeavy": "enabled", - "urlMaximumAutoTps": 5000, - "urlMaximumTps": 1000, - "urlMinimumAutoTps": 50, - "urlMinimumTps": 200, - "urlRateLimiting": "enabled", - "urlTpsIncreaseRate": 500 - }, - "tcpDump": { - "maximumDuration": 30, - "maximumSize": 10, - "recordTraffic": "disabled", - "repetitionInterval": "120" - }, - "tpsBased": { - "deEscalationPeriod": 7200, - "deviceCaptchaChallenge": "disabled", - "deviceClientSideDefense": "disabled", - "deviceMaximumAutoTps": 5000, - "deviceMaximumTps": 200, - "deviceMinimumAutoTps": 5, - "deviceMinimumTps": 40, - "deviceRateLimiting": "disabled", - "deviceRequestBlockingMode": "rate-limit", - "deviceTpsIncreaseRate": 500, - "escalationPeriod": 120, - "geoCaptchaChallenge": "disabled", - "geoClientSideDefense": "disabled", - "geoMaximumAutoTps": 20000, - "geoMinimumAutoTps": 50, - "geoMinimumShare": 10, - "geoRateLimiting": "disabled", - "geoRequestBlockingMode": "rate-limit", - "geoShareIncreaseRate": 500, - "ipCaptchaChallenge": "disabled", - "ipClientSideDefense": "disabled", - "ipMaximumAutoTps": 5000, - "ipMaximumTps": 200, - "ipMinimumAutoTps": 5, - "ipMinimumTps": 40, - "ipRateLimiting": "enabled", - "ipRequestBlockingMode": "rate-limit", - "ipTpsIncreaseRate": 500, - "mode": "off", - "siteCaptchaChallenge": "disabled", - "siteClientSideDefense": "disabled", - "siteMaximumAutoTps": 20000, - "siteMaximumTps": 10000, - "siteMinimumAutoTps": 50, - "siteMinimumTps": 2000, - "siteRateLimiting": "disabled", - "siteTpsIncreaseRate": 500, - "thresholdsMode": "manual", - "urlCaptchaChallenge": "disabled", - "urlClientSideDefense": "disabled", - "urlEnableHeavy": "enabled", - "urlMaximumAutoTps": 5000, - "urlMaximumTps": 1000, - "urlMinimumAutoTps": 50, - "urlMinimumTps": 200, - "urlRateLimiting": "enabled", - "urlTpsIncreaseRate": 500 - }, - "triggerIrule": "enabled", - "geolocations": [ - { - "name": "Afghanistan", - "blackListed": true - }, - { - "name": "Aland Islands", - "whiteListed": true - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_asm_policy_active.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_asm_policy_active.json deleted file mode 100644 index 001daa757..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_asm_policy_active.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "plainTextProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/plain-text-profiles?ver=12.1.2", - "isSubCollection": true - }, - "learningMode": "manual", - "dataGuardReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/data-guard?ver=12.1.2" - }, - "stagingSettings": { - "signatureStaging": true, - "placeSignaturesInStaging": false, - "enforcementReadinessPeriod": 7 - }, - "createdDatetime": "2017-09-21T11:52:24Z", - "geolocationEnforcementReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/geolocation-enforcement?ver=12.1.2" - }, - "versionLastChange": "Allowed Response Code 503 [add]: Response Code was set to 503.", - "name": "fake_policy", - "caseInsensitive": false, - "loginPageReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/login-pages?ver=12.1.2", - "isSubCollection": true - }, - "fullPath": "/Common/fake_policy", - "description": "", - "attributes": { - "pathParameterHandling": "as-parameters", - "triggerAsmIruleEvent": "disabled", - "inspectHttpUploads": false, - "maskCreditCardNumbersInRequest": true, - "maximumHttpHeaderLength": "8192", - "useDynamicSessionIdInUrl": false, - "maximumCookieHeaderLength": "8192" - }, - "partition": "Common", - "webScrapingReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/web-scraping?ver=12.1.2" - }, - "csrfProtectionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/csrf-protection?ver=12.1.2" - }, - "customXffHeaders": [], - "kind": "tm:asm:policies:policystate", - "virtualServers": [], - "ipIntelligenceReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/ip-intelligence?ver=12.1.2" - }, - "protocolIndependent": false, - "sessionAwarenessSettingsReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/session-tracking?ver=12.1.2" - }, - "signatureSetReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/signature-sets?ver=12.1.2", - "isSubCollection": true - }, - "parameterReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/parameters?ver=12.1.2", - "isSubCollection": true - }, - "allowedResponseCodes": [ - 400, - 401, - 404, - 407, - 417, - 503 - ], - "applicationLanguage": "utf-8", - "enforcementMode": "transparent", - "loginEnforcementReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/login-enforcement?ver=12.1.2" - }, - "navigationParameterReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/navigation-parameters?ver=12.1.2", - "isSubCollection": true - }, - "gwtProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/gwt-profiles?ver=12.1.2", - "isSubCollection": true - }, - "whitelistIpReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/whitelist-ips?ver=12.1.2", - "isSubCollection": true - }, - "historyRevisionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/history-revisions?ver=12.1.2", - "isSubCollection": true - }, - "policyBuilderReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/policy-builder?ver=12.1.2" - }, - "responsePageReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/response-pages?ver=12.1.2", - "isSubCollection": true - }, - "vulnerabilityAssessmentReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/vulnerability-assessment?ver=12.1.2" - }, - "blockingSettingReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/blocking-settings?ver=12.1.2", - "isSubCollection": true - }, - "cookieReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/cookies?ver=12.1.2", - "isSubCollection": true - }, - "hostNameReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/host-names?ver=12.1.2", - "isSubCollection": true - }, - "versionDeviceName": "ltm4restlab.lab.local", - "selfLink": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw?ver=12.1.2", - "signatureReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/signatures?ver=12.1.2", - "isSubCollection": true - }, - "filetypeReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/filetypes?ver=12.1.2", - "isSubCollection": true - }, - "id": "0EHlYeS5noAOZLY3YsJjEw", - "manualVirtualServers": [], - "modifierName": "admin", - "versionDatetime": "2017-04-11T08:05:22Z", - "subPath": "/Common", - "sessionTrackingStatusReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/session-tracking-statuses?ver=12.1.2", - "isSubCollection": true - }, - "active": true, - "auditLogReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/audit-logs?ver=12.1.2", - "isSubCollection": true - }, - "trustXff": false, - "websocketUrlReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/websocket-urls?ver=12.1.2", - "isSubCollection": true - }, - "xmlProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/xml-profiles?ver=12.1.2", - "isSubCollection": true - }, - "methodReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/methods?ver=12.1.2", - "isSubCollection": true - }, - "redirectionProtectionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/redirection-protection?ver=12.1.2" - }, - "vulnerabilityReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/vulnerabilities?ver=12.1.2", - "isSubCollection": true - }, - "creatorName": "SYSTEM", - "urlReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/urls?ver=12.1.2", - "isSubCollection": true - }, - "headerReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/headers?ver=12.1.2", - "isSubCollection": true - }, - "xmlValidationFileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/xml-validation-files?ver=12.1.2", - "isSubCollection": true - }, - "lastUpdateMicros": 1.506250903e+15, - "jsonProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/json-profiles?ver=12.1.2", - "isSubCollection": true - }, - "bruteForceAttackPreventionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/brute-force-attack-preventions?ver=12.1.2", - "isSubCollection": true - }, - "extractionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/extractions?ver=12.1.2", - "isSubCollection": true - }, - "characterSetReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/character-sets?ver=12.1.2", - "isSubCollection": true - }, - "isModified": false, - "suggestionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/suggestions?ver=12.1.2", - "isSubCollection": true - }, - "sensitiveParameterReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/sensitive-parameters?ver=12.1.2", - "isSubCollection": true - }, - "versionPolicyName": "/Common/fake_policy" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_asm_policy_inactive.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_asm_policy_inactive.json deleted file mode 100644 index 519888814..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_asm_policy_inactive.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "plainTextProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/plain-text-profiles?ver=12.1.2", - "isSubCollection": true - }, - "learningMode": "manual", - "dataGuardReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/data-guard?ver=12.1.2" - }, - "stagingSettings": { - "signatureStaging": true, - "placeSignaturesInStaging": false, - "enforcementReadinessPeriod": 7 - }, - "createdDatetime": "2017-09-21T11:52:24Z", - "geolocationEnforcementReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/geolocation-enforcement?ver=12.1.2" - }, - "versionLastChange": "Allowed Response Code 503 [add]: Response Code was set to 503.", - "name": "fake_policy", - "caseInsensitive": false, - "loginPageReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/login-pages?ver=12.1.2", - "isSubCollection": true - }, - "fullPath": "/Common/fake_policy", - "description": "", - "attributes": { - "pathParameterHandling": "as-parameters", - "triggerAsmIruleEvent": "disabled", - "inspectHttpUploads": false, - "maskCreditCardNumbersInRequest": true, - "maximumHttpHeaderLength": "8192", - "useDynamicSessionIdInUrl": false, - "maximumCookieHeaderLength": "8192" - }, - "partition": "Common", - "webScrapingReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/web-scraping?ver=12.1.2" - }, - "csrfProtectionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/csrf-protection?ver=12.1.2" - }, - "customXffHeaders": [], - "kind": "tm:asm:policies:policystate", - "virtualServers": [], - "ipIntelligenceReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/ip-intelligence?ver=12.1.2" - }, - "protocolIndependent": false, - "sessionAwarenessSettingsReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/session-tracking?ver=12.1.2" - }, - "signatureSetReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/signature-sets?ver=12.1.2", - "isSubCollection": true - }, - "parameterReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/parameters?ver=12.1.2", - "isSubCollection": true - }, - "allowedResponseCodes": [ - 400, - 401, - 404, - 407, - 417, - 503 - ], - "applicationLanguage": "utf-8", - "enforcementMode": "transparent", - "loginEnforcementReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/login-enforcement?ver=12.1.2" - }, - "navigationParameterReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/navigation-parameters?ver=12.1.2", - "isSubCollection": true - }, - "gwtProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/gwt-profiles?ver=12.1.2", - "isSubCollection": true - }, - "whitelistIpReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/whitelist-ips?ver=12.1.2", - "isSubCollection": true - }, - "historyRevisionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/history-revisions?ver=12.1.2", - "isSubCollection": true - }, - "policyBuilderReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/policy-builder?ver=12.1.2" - }, - "responsePageReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/response-pages?ver=12.1.2", - "isSubCollection": true - }, - "vulnerabilityAssessmentReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/vulnerability-assessment?ver=12.1.2" - }, - "blockingSettingReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/blocking-settings?ver=12.1.2", - "isSubCollection": true - }, - "cookieReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/cookies?ver=12.1.2", - "isSubCollection": true - }, - "hostNameReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/host-names?ver=12.1.2", - "isSubCollection": true - }, - "versionDeviceName": "ltm4restlab.lab.local", - "selfLink": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw?ver=12.1.2", - "signatureReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/signatures?ver=12.1.2", - "isSubCollection": true - }, - "filetypeReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/filetypes?ver=12.1.2", - "isSubCollection": true - }, - "id": "0EHlYeS5noAOZLY3YsJjEw", - "manualVirtualServers": [], - "modifierName": "", - "versionDatetime": "2017-04-11T08:05:22Z", - "subPath": "/Common", - "sessionTrackingStatusReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/session-tracking-statuses?ver=12.1.2", - "isSubCollection": true - }, - "active": false, - "auditLogReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/audit-logs?ver=12.1.2", - "isSubCollection": true - }, - "trustXff": false, - "websocketUrlReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/websocket-urls?ver=12.1.2", - "isSubCollection": true - }, - "xmlProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/xml-profiles?ver=12.1.2", - "isSubCollection": true - }, - "methodReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/methods?ver=12.1.2", - "isSubCollection": true - }, - "redirectionProtectionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/redirection-protection?ver=12.1.2" - }, - "vulnerabilityReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/vulnerabilities?ver=12.1.2", - "isSubCollection": true - }, - "creatorName": "SYSTEM", - "urlReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/urls?ver=12.1.2", - "isSubCollection": true - }, - "headerReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/headers?ver=12.1.2", - "isSubCollection": true - }, - "xmlValidationFileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/xml-validation-files?ver=12.1.2", - "isSubCollection": true - }, - "lastUpdateMicros": 0, - "jsonProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/json-profiles?ver=12.1.2", - "isSubCollection": true - }, - "bruteForceAttackPreventionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/brute-force-attack-preventions?ver=12.1.2", - "isSubCollection": true - }, - "extractionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/extractions?ver=12.1.2", - "isSubCollection": true - }, - "characterSetReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/character-sets?ver=12.1.2", - "isSubCollection": true - }, - "isModified": false, - "suggestionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/suggestions?ver=12.1.2", - "isSubCollection": true - }, - "sensitiveParameterReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/sensitive-parameters?ver=12.1.2", - "isSubCollection": true - }, - "versionPolicyName": "/Common/fake_policy" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_asm_settings.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_asm_settings.json deleted file mode 100644 index 62b0ffba6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_asm_settings.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "value": 10000000, - "isUserDefined": false, - "maxValue": 30000000, - "name": "long_request_buffer_size", - "lastUpdateMicros": 1.585074628e+15, - "kind": "tm:asm:advanced-settings:advanced-settingstate", - "selfLink": "https://localhost/mgmt/tm/asm/advanced-settings/UGv8BV7NbLZZP4hgvBkk7g?ver=13.1.1", - "minValue": 0, - "format": "integer", - "id": "UGv8BV7NbLZZP4hgvBkk7g", - "defaultValue": 10000000, - "units": "Bytes" -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_auth_remote_role_role_info_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_auth_remote_role_role_info_1.json deleted file mode 100644 index b4d6038ef..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_auth_remote_role_role_info_1.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:auth:remote-role:role-info:role-infostate", - "name": "/Common/ldap_group", - "fullPath": "/Common/ldap_group", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/auth/remote-role/role-info/~Common~ldap_group?ver=13.1.0.7", - "attribute": "memberOf=cn=ldap_group,cn=ldap.group,ou=ldap", - "console": "disable", - "deny": "enabled", - "lineOrder": 1, - "role": "firewallmanager", - "userPartition": "All", - "userPartitionReference": { - "link": "https://localhost/mgmt/tm/auth/partition/All?ver=13.1.0.7" - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_auth_user_no_pass.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_auth_user_no_pass.json deleted file mode 100644 index 79a51a79d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_auth_user_no_pass.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "kind": "tm:auth:user:userstate", - "name": "someuser", - "fullPath": "someuser", - "generation": 76, - "selfLink": "https://localhost/mgmt/tm/auth/user/someuser?ver=13.0.0", - "description": "someuser", - "encryptedPassword": "!!", - "partitionAccess": [ - { - "name": "Common", - "role": "guest", - "nameReference": { - "link": "https://localhost/mgmt/tm/auth/partition/Common?ver=13.0.0" - } - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_auth_user_with_pass.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_auth_user_with_pass.json deleted file mode 100644 index 8c8256c2e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_auth_user_with_pass.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:auth:user:userstate", - "name": "someuser", - "fullPath": "someuser", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/auth/user/someuser?ver=13.0.0", - "description": "someuser", - "encryptedPassword": "$6$PiA0g2.L$M02nqo3eVvj22PbEUONdzFQq4tXp930FsBB0sZ94OJTDruobY/BhyEN1rHfw2udVKKlGtom1rNiCP/3nIVfde1", - "shell": "bash", - "partitionAccess": [ - { - "name": "all-partitions", - "role": "admin", - "nameReference": { - "link": "https://localhost/mgmt/tm/auth/partition/all-partitions?ver=13.0.0" - } - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_bigip_monitor_mysql.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_bigip_monitor_mysql.json deleted file mode 100644 index 7ce76d7c6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_bigip_monitor_mysql.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "kind": "tm:ltm:monitor:mysql:mysqlstate", - "name": "test-monitor", - "partition": "Common", - "fullPath": "/Common/test-monitor", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/mysql/~Common~test-monitor?ver=15.1.0.1", - "count": "0", - "debug": "no", - "defaultsFrom": "/Common/mysql", - "destination": "1.1.1.1:30025", - "interval": 10, - "manualResume": "disabled", - "timeUntilUp": 0, - "timeout": 60, - "upInterval": 0, - "recv": "this is recv string", - "recvColumn": "1", - "recvRow": "2", - "send": "this is send string", - "username": "some_user" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_cgnat_lsn_pool.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_cgnat_lsn_pool.json deleted file mode 100644 index 7498b27b6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_cgnat_lsn_pool.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "kind": "tm:ltm:lsn-pool:lsn-poolstate", - "name": "test_pool", - "partition": "Common", - "fullPath": "/Common/test_pool", - "generation": 217, - "selfLink": "https://localhost/mgmt/tm/ltm/lsn-pool/~Common~test_pool?ver=12.1.4", - "clientConnectionLimit": 0, - "egressInterfacesDisabled": true, - "hairpinMode": "disabled", - "icmpEcho": "disabled", - "inboundConnections": "disabled", - "logProfile": "/Common/lsn_log_profile", - "logProfileReference": { - "link": "https://localhost/mgmt/tm/ltm/lsn-log-profile/~Common~lsn_log_profile?ver=12.1.4" - }, - "logPublisher": "/Common/default-ipsec-log-publisher", - "logPublisherReference": { - "link": "https://localhost/mgmt/tm/sys/log-config/publisher/~Common~default-ipsec-log-publisher?ver=12.1.4" - }, - "mode": "deterministic", - "pcp": {}, - "persistence": { - "mode": "address", - "timeout": 300 - }, - "portBlockAllocation": { - "blockIdleTimeout": 3600, - "blockLifetime": 0, - "blockSize": 64, - "clientBlockLimit": 1, - "zombieTimeout": 0 - }, - "routeAdvertisement": "disabled", - "translationPortRange": "1025-6954", - "backupMembers": [ - "11.11.11.1/32" - ], - "egressInterfaces": [ - "/Common/http-tunnel" - ], - "egressInterfacesReference": [ - { - "link": "https://localhost/mgmt/tm/net/tunnels/tunnel/~Common~http-tunnel?ver=12.1.4" - } - ], - "members": [ - "101.10.10.0/24" - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_cm_cloud_managed_devices.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_cm_cloud_managed_devices.json deleted file mode 100644 index 34287d60f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_cm_cloud_managed_devices.json +++ /dev/null @@ -1,58 +0,0 @@ -[ - { - "uuid": "d13074df-4f0c-4ed3-baf6-0050fe74695f", - "deviceUri": "https://10.2.2.3:443", - "machineId": "d13074df-4f0c-4ed3-baf6-0050fe74695f", - "state": "ACTIVE", - "address": "10.2.2.3", - "httpsPort": 443, - "hostname": "bigip1", - "version": "12.1.2", - "product": "BIG-IP", - "edition": "Final", - "build": "0.0.249", - "restFrameworkVersion": "13.1.0-0.0.5711", - "managementAddress": "10.0.2.15", - "mcpDeviceName": "/Common/bigip1", - "trustDomainGuid": "5c9e2e37-e8c4-4556-881b080027277482", - "properties": { - "dmaConfigPathScope": "basic", - "isSoapProxyEnabled": true, - "isTmshProxyEnabled": false, - "shared:resolver:device-groups:discoverer": "f34e87f5-0494-4707-8dcc-980c7c0cdec3", - "isRestProxyEnabled": true, - "dmaFinished": true - }, - "isClustered": false, - "isVirtual": true, - "groupName": "cm-cloud-managed-devices", - "generation": 5, - "lastUpdateMicros": 1489787182051700, - "kind": "shared:resolver:device-groups:restdeviceresolverdevicestate", - "selfLink": "https://localhost/mgmt/shared/resolver/device-groups/cm-cloud-managed-devices/devices/d13074df-4f0c-4ed3-baf6-0050fe74695f" - }, - { - "uuid": "f34e87f5-0494-4707-8dcc-980c7c0cdec3", - "deviceUri": "https://10.2.2.2:443", - "machineId": "f34e87f5-0494-4707-8dcc-980c7c0cdec3", - "state": "ACTIVE", - "address": "10.2.2.2", - "httpsPort": 443, - "hostname": "iworkflow1", - "version": "2.1.0", - "product": "iWorkflow", - "edition": "Final", - "build": "0.0.10285", - "restFrameworkVersion": "13.1.0-0.0.5711", - "managementAddress": "10.0.2.15", - "mcpDeviceName": "/Common/iworkflow1", - "trustDomainGuid": "d1a69249-a8d6-4e1a-8bcd080027b29e2d", - "isClustered": false, - "isVirtual": true, - "groupName": "cm-cloud-managed-devices", - "generation": 2, - "lastUpdateMicros": 1489783461448004, - "kind": "shared:resolver:device-groups:restdeviceresolverdevicestate", - "selfLink": "https://localhost/mgmt/shared/resolver/device-groups/cm-cloud-managed-devices/devices/f34e87f5-0494-4707-8dcc-980c7c0cdec3" - } -] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_connectors.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_connectors.json deleted file mode 100644 index aa53ec80f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_connectors.json +++ /dev/null @@ -1,128 +0,0 @@ -[ - { - "ownerMachineId": "f34e87f5-0494-4707-8dcc-980c7c0cdec3", - "cloudConnectorReference": { - "link": "https://localhost/mgmt/cm/cloud/connectors/local" - }, - "displayName": "BIG-IP", - "connectorId": "212301e6-6d01-4509-bfe3-8e372e792fb0", - "name": "foo", - "deviceGroupReference": { - "link": "https://localhost/mgmt/shared/resolver/device-groups/connector-212301e6-6d01-4509-bfe3-8e372e792fb0" - }, - "supportsServerProvisioning": false, - "supportsDeviceProvisioning": false, - "supportsVirtualServerProvisioning": false, - "supportsDeviceDiscovery": false, - "supportsMultipleNetworks": false, - "requiresCallbacks": false, - "requiresOutboundHttps": false, - "parameters": [ - { - "id": "eventAggregator", - "displayName": "Event Aggregator", - "isRequired": false, - "value": "https://localhost/mgmt/shared/analytics/event-aggregation-tasks/0fb436ae-c19c-498b-93c0-b6c83352d109" - } - ], - "generation": 1, - "lastUpdateMicros": 1489448364826907, - "kind": "cm:cloud:connectors:cloudconnectorstate", - "selfLink": "https://localhost/mgmt/cm/cloud/connectors/local/212301e6-6d01-4509-bfe3-8e372e792fb0" - }, - { - "ownerMachineId": "f34e87f5-0494-4707-8dcc-980c7c0cdec3", - "cloudConnectorReference": { - "link": "https://localhost/mgmt/cm/cloud/connectors/local" - }, - "displayName": "BIG-IP", - "connectorId": "6ff15eda-2f1e-449e-b7fb-f945dee207ae", - "name": "dwa", - "description": "adwa", - "deviceGroupReference": { - "link": "https://localhost/mgmt/shared/resolver/device-groups/connector-6ff15eda-2f1e-449e-b7fb-f945dee207ae" - }, - "supportsServerProvisioning": false, - "supportsDeviceProvisioning": false, - "supportsVirtualServerProvisioning": false, - "supportsDeviceDiscovery": false, - "supportsMultipleNetworks": false, - "requiresCallbacks": false, - "requiresOutboundHttps": false, - "parameters": [ - { - "id": "eventAggregator", - "displayName": "Event Aggregator", - "isRequired": false, - "value": "https://localhost/mgmt/shared/analytics/event-aggregation-tasks/911fe71c-5846-4492-97c2-ed5da5d8eebb" - } - ], - "generation": 1, - "lastUpdateMicros": 1489442750268921, - "kind": "cm:cloud:connectors:cloudconnectorstate", - "selfLink": "https://localhost/mgmt/cm/cloud/connectors/local/6ff15eda-2f1e-449e-b7fb-f945dee207ae" - }, - { - "ownerMachineId": "f34e87f5-0494-4707-8dcc-980c7c0cdec3", - "cloudConnectorReference": { - "link": "https://localhost/mgmt/cm/cloud/connectors/local" - }, - "displayName": "BIG-IP", - "connectorId": "ccf0c60f-1fb4-4b83-8719-dc9cd6b6d109", - "name": "bar", - "deviceGroupReference": { - "link": "https://localhost/mgmt/shared/resolver/device-groups/connector-ccf0c60f-1fb4-4b83-8719-dc9cd6b6d109" - }, - "supportsServerProvisioning": false, - "supportsDeviceProvisioning": false, - "supportsVirtualServerProvisioning": false, - "supportsDeviceDiscovery": false, - "supportsMultipleNetworks": false, - "requiresCallbacks": false, - "requiresOutboundHttps": false, - "parameters": [ - { - "id": "eventAggregator", - "displayName": "Event Aggregator", - "isRequired": false, - "value": "https://localhost/mgmt/shared/analytics/event-aggregation-tasks/c1a2ad84-8cfc-4fde-bad9-1221d8e564a7" - } - ], - "generation": 1, - "lastUpdateMicros": 1489448365968990, - "kind": "cm:cloud:connectors:cloudconnectorstate", - "selfLink": "https://localhost/mgmt/cm/cloud/connectors/local/ccf0c60f-1fb4-4b83-8719-dc9cd6b6d109" - }, - { - "ownerMachineId": "f34e87f5-0494-4707-8dcc-980c7c0cdec3", - "cloudConnectorReference": { - "link": "https://localhost/mgmt/cm/cloud/connectors/local" - }, - "displayName": "BIG-IP", - "connectorId": "f5532a36-2401-4daa-b796-0176f4972730", - "name": "asd", - "description": "asd", - "deviceGroupReference": { - "link": "https://localhost/mgmt/shared/resolver/device-groups/connector-f5532a36-2401-4daa-b796-0176f4972730" - }, - "supportsServerProvisioning": false, - "supportsDeviceProvisioning": false, - "supportsVirtualServerProvisioning": false, - "supportsDeviceDiscovery": false, - "supportsMultipleNetworks": false, - "requiresCallbacks": false, - "requiresOutboundHttps": false, - "parameters": [ - { - "id": "eventAggregator", - "displayName": "Event Aggregator", - "isRequired": false, - "value": "https://localhost/mgmt/shared/analytics/event-aggregation-tasks/e007819b-6cc4-4c9b-81b4-5d893fb5095f" - } - ], - "generation": 1, - "lastUpdateMicros": 1489442742069263, - "kind": "cm:cloud:connectors:cloudconnectorstate", - "selfLink": "https://localhost/mgmt/cm/cloud/connectors/local/f5532a36-2401-4daa-b796-0176f4972730" - } -] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_dag_globals.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_dag_globals.json deleted file mode 100644 index 2beb94682..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_dag_globals.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "kind": "tm:net:dag-globals:dag-globalsstate", - "selfLink": "https://localhost/mgmt/tm/net/dag-globals?ver=13.1.1.4", - "dagIpv6PrefixLen": 128, - "icmpHash": "icmp", - "roundRobinMode": "global" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_device_group.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_device_group.json deleted file mode 100644 index 2a8c6653e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_device_group.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:cm:device-group:device-groupstate", - "name": "datasync-device-sslo.ansible.lab.local-dg", - "partition": "Common", - "fullPath": "/Common/datasync-device-sslo.ansible.lab.local-dg", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/cm/device-group/~Common~datasync-device-sslo.ansible.lab.local-dg?ver=16.0.0", - "asmSync": "disabled", - "autoSync": "enabled", - "fullLoadOnSync": "true", - "incrementalConfigSyncSizeMax": 1024, - "networkFailover": "disabled", - "saveOnAutoSync": "false", - "type": "sync-only", - "devicesReference": { - "link": "https://localhost/mgmt/tm/cm/device-group/~Common~datasync-device-sslo.ansible.lab.local-dg/devices?ver=16.0.0", - "isSubcollection": true - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_easy_setup.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_easy_setup.json deleted file mode 100644 index 93459a865..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_easy_setup.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "hostname": "iworkflow1.local", - "managementIpAddress": "10.0.2.15/24", - "managementRouteAddress": "10.0.2.2", - "internalSelfIpAddresses": [], - "selfIpAddresses": [ - { - "address": "10.2.2.2/24", - "vlan": "net1", - "iface": "1.1" - } - ], - "ntpServerAddresses": [ - "pool.ntp.org" - ], - "dnsServerAddresses": [ - "10.0.2.3" - ], - "dnsSearchDomains": [ - "dns.local.org" - ], - "generation": 0, - "lastUpdateMicros": 0 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_f5.microsoft_adfs.v1.0.0.tmpl b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_f5.microsoft_adfs.v1.0.0.tmpl deleted file mode 100644 index 2b7680687..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_f5.microsoft_adfs.v1.0.0.tmpl +++ /dev/null @@ -1 +0,0 @@ -cli script f5.iapp.1.3.0.cli {\n \n# Initialization proc for all templates.\n# Parameters \"start\" and \"stop\" or \"end\".\nproc iapp_template { action } {\n set lev [tmsh::get_field_value [lindex [tmsh::get_config sys scriptd \\\n log-level] 0] log-level]\n switch $action {\n start {\n set ::clock_clicks [clock clicks]\n if { $lev eq {debug} } {\n puts \"\\nStarting iApp $tmsh::app_template_name [clock format \\\n [clock seconds] -format {%m/%d/%Y %T}]\\n\"\n }\n tmsh::log_level $lev\n tmsh::log info \"Starting iApp template $tmsh::app_template_name\"\n }\n stop -\n end {\n if { $lev eq {debug} } {\n if { [info exists ::substa_debug] } {\n puts $::substa_debug\n }\n puts \"\\nEnding iApp $tmsh::app_template_name [clock format \\\n [clock seconds] -format {%m/%d/%Y %T}]\\nRun time [expr \\\n { ([clock clicks] - $::clock_clicks) / 1000 }] msec\\n\"\n }\n tmsh::log info \"Ending iApp template $tmsh::app_template_name\"\n }\n }\n set ::HTTP_CONTENT_TYPES { application/(css\\|css-stylesheet\\|doc\\|excel\\|javascript\\|json\\|lotus123\\|mdb\\|mpp\\|msaccess\\|msexcel\\|ms-excel\\|mspowerpoint\\|ms-powerpoint\\|msproject\\|msword\\|ms-word\\|photoshop\\|postscript\\|powerpoint\\|ps\\|psd\\|quarkexpress\\|rtf\\|txt\\|visio\\|vnd\\\\.excel\\|vnd\\\\.msaccess\\|vnd\\\\.ms-access\\|vnd\\\\.msexcel\\|vnd\\\\.ms-excel\\|vnd\\\\.mspowerpoint\\|vnd\\\\.ms-powerpoint\\|vnd\\\\.ms-pps\\|vnd\\\\.ms-project\\|vnd\\\\.msword\\|vnd\\\\.ms-word\\|vnd\\\\.ms-works\\|vnd\\\\.ms-works-db\\|vnd\\\\.powerpoint\\|vnd\\\\.visio\\|vnd\\\\.wap\\\\.cmlscriptc\\|vnd\\\\.wap\\\\.wmlc\\|vnd\\\\.wap\\\\.xhtml\\\\+xml\\|vnd\\\\.word\\|vsd\\|winword\\|wks\\|word\\|x-excel\\|xhtml\\\\+xml\\|x-java-jnlp-file\\|x-javascript\\|x-json\\|x-lotus123\\|xls\\|x-mdb\\|xml\\|x-mscardfile\\|x-msclip\\|x-msexcel\\|x-ms-excel\\|x-mspowerpoint\\|x-msproject\\|x-ms-project\\|x-msword\\|x-msworks-db\\|x-msworks-wps\\|x-photoshop\\|x-postscript\\|x-powerpoint\\|x-ps\\|x-quark-express\\|x-rtf\\|x-vermeer-rpc\\|x-visio\\|x-vsd\\|x-wks\\|x-word\\|x-xls\\|x-xml) image/(photoshop\\|psd\\|x-photoshop\\|x-vsd) text/(css\\|html\\|javascript\\|json\\|plain\\|postscript\\|richtext\\|rtf\\|vnd\\\\.wap\\\\.wml\\|vnd\\\\.wap\\\\.wmlscript\\|wap\\|wml\\|x-component\\|xml\\|x-vcalendar\\|x-vcard) }\n}\n\nproc iapp_is { args } {\n set up_var [lindex $args 0]\n upvar $up_var var\n if { [info exists var] } {\n foreach val [lrange $args 1 end] {\n if { [subst $var] eq $val } {\n return 1\n }\n }\n }\n return 0\n}\n\nproc iapp_substa { args } {\n upvar substa_in argx \\\n substa_out rval\n set argx $args\n\n # check the explicit value first.\n # multiple layers of variable substitution requires multiple subst.\n # error occurs here if any of the substituted variables do not exist\n # valid wildcard (*) array entries will fail here first.\n uplevel {\n append ::substa_debug \"\\n$substa_in\"\n if { [info exists [set substa_in]] } {\n set substa_out [subst $$substa_in]\n set substa_out [subst $substa_out]\n } else {\n # since explicit value did not exist, try a wildcard value.\n # substitute \"*\" as the array key and repeat.\n set substa_tmp [split $substa_in \"()\"]\n set substa_in \"[lindex $substa_tmp 0](*)\"\n append ::substa_debug \"*\"\n if { [info exists [set substa_in]] } {\n set substa_out [subst $$substa_in]\n set substa_out [subst $substa_out]\n } else {\n error \"substa \\\"$substa_in\\\" array value not found\"\n }\n }\n }\n return $rval\n}\n\nproc iapp_conf { args } {\n\n # Return value $object_name is set to the first word in $arg that\n # contains an underscore, since the position of the object name in\n # tmsh syntax is not consistent.\n set args [join $args]\n set object_name [lindex $args [lsearch -glob $args \"*_*\"]]\n\n # Global array ::tmsh_history persists between calls to iapp_conf\n # in order to suppress duplicate commands.\n if { ![info exists ::tmsh_history($args)] } {\n set ::tmsh_history($args) 1\n iapp_debug $args\n switch -exact -- [string range $args 0 5] {\n create { tmsh::create [string range $args 7 end] }\n modify { tmsh::modify [string range $args 7 end] }\n delete { tmsh::delete [string range $args 7 end] }\n default { error \"iapp_conf illegal parameter\" }\n }\n }\n return $object_name\n}\n\nproc iapp_make_safe_password { password } {\n return [string map { \\' \\\\\\' \\\" \\\\\\\" \\{ \\\\\\{ \\} \\\\\\} \\; \\\\\\; \\| \\\\\\| \\# \\\\\\# \\ \\\\\\ \\\\ \\\\\\\\ } $password]\n}\n\nproc iapp_pull { loc items_list } {\n upvar $items_list items\n if { [set item [lindex $items $loc]] != \"\" } {\n set items [lreplace $items $loc $loc]\n }\n return $item\n}\n\nproc iapp_process_flags { flags_array args_list } {\n upvar $flags_array flags\n upvar $args_list args\n\n if { [set dubdash [lsearch $args \"--\"]] != -1 } {\n set args [lreplace $args $dubdash $dubdash];\n } else {\n set dubdash end\n }\n\n foreach flag [array names flags] {\n while { [set ptr [lsearch [lrange $args 0 $dubdash] $flag]] != -1 } {\n set args [lreplace $args $ptr $ptr];\n\n # we want to run the code in the flags_array at the calling\n # proc's level so that the variables that it sets up are\n # available there.\n set access_var [format \"$%s(%s)\" $flags_array $flag]\n set command [subst -nocommands { set ptr $ptr ; subst $access_var }]\n\n uplevel 1 $command\n }\n }\n return $args\n}\n\nproc iapp_tmos_version { args } {\n # if $::version equals \"\", it might just mean that it hasn't been\n # initialized yet - use a global variable so that subsequent comparisons\n # don't have to fetch this from the MCP\n if { ![info exists ::version] || $::version eq \"\" } {\n if { [catch { set version_blob [tmsh::show sys version] } err] } {\n tmsh::log err \"unable to retrieve TMOS version\"\n error \"unable to retrieve TMOS version\"\n }\n # the first and last few lines of this output can be skipped because\n # they are either blank or don't represent key/value pairs\n # TODO: this won't work for hotfixes\n foreach line [string trim [lrange [split $version_blob \"\\n\"] 3 end-2]] {\n set key [lindex $line 0]\n if { $key eq \"Version\" } {\n set ::cversion [lindex $line 1]\n break\n }\n }\n }\n\n if { $::cversion eq \"\" } {\n tmsh::log err \"unable to determine TMOS version\"\n error \"unable to determine TMOS version\"\n }\n\n # if no op+version was specified, just return the version\n if { $args eq \"\" } { return $::cversion }\n if { [llength $args] > 2 } {\n error \"Too many arguments\"\n }\n\n set op [lindex $args 0]; # operator\n set NOTFOUND -1\n # constrain to valid operators - adding more is fine as long as\n # they're supported by [expr] (and makes sense)\n if { [lsearch -exact { < > <= >= == != } $op] == $NOTFOUND } {\n tmsh::log err \"illegal operator: $op\"\n error \"illegal operator: $op\"\n }\n\n set tversion [lindex $args 1]; # target version\n # one or two decimal digits, optionally followed by 0-2 complete groups of\n # dots followed by one or two decimal digits with nothing before or after\n set regex {^\\d{1,2}(\\.\\d{1,2}){0,2}$}\n if { ! [regexp -- $regex $tversion] } {\n tmsh::log err \"cannot parse version from: $tversion\"\n error \"cannot parse version from: $tversion\"\n }\n\n set cversion $::cversion; # current version\n # p=>prefix, c=>current, t=>target\n foreach p { c t } {\n # extract major/minor/point components\n scan [set [set p]version] \"%d.%d.%d\" [set p]mjr [set p]mnr [set p]pnt\n # ensure that these are each set to at least 0\n foreach level { mjr mnr pnt } {\n if { ! [info exists [set p]${level}] } { set [set p]${level} 0 }\n }\n # turn them into one big number that we can compare\n # leave room in-between just to be safe\n set [set p]num [expr {\n [set [set p]mjr]*1000000 +\n [set [set p]mnr]*10000 +\n [set [set p]pnt]*100\n }]\n }\n # a simple numeric comparison is all that is needed at this point\n return [eval expr $cnum $op $tnum ]\n}\n\nproc iapp_safe_display { args } {\n # strings sent to APL must be truncated to 65535 bytes, see BZ435592\n if { [string length [set [set args]]] > 65535 } {\n set last_newline [string last \"\\n\" [set [set args]] 65500]\n return \"[string range [set [set args]] 0 $last_newline]Error: Too many items for display\"\n } else {\n return [set [set args]]\n }\n}\n\nproc iapp_get_items { args } {\n\n # Set default values.\n set error_msg \"iapp_get_items $args:\"\n set do_binary 0\n set nocomplain 0\n set items \"\"\n set join_char \"\\n\"\n set recursive \"recursive\"\n set com_dir \"/Common\"\n set loc_dir \"[tmsh::pwd]\"\n\n # Set up flag-related work.\n array set flags {\n -exists { [set do_binary 1] }\n -nocomplain { [set nocomplain 1] }\n -list { [set join_char \" \"] }\n -norecursive { [set recursive \"\"] }\n -local { [set com_dir \"\"] }\n -dir { [set loc_dir [iapp_pull $ptr args]] }\n -filter { [set filter_field [iapp_pull $ptr args]] \\\n [set filter_op [iapp_pull $ptr args]] \\\n [set filter_value [iapp_pull $ptr args]] }\n }\n iapp_process_flags flags args\n\n # Get system object names in all requested directories.\n set save_dir [tmsh::pwd]\n foreach dir [lsort -unique \"$com_dir $loc_dir\"] {\n tmsh::cd $dir\n set tmsh_rval [catch {\n foreach obj [tmsh::get_config $args $recursive] {\n\n if { [info exists filter_field] } {\n if { $filter_field eq \"NAME\" } {\n set val [tmsh::get_name $obj]\n } else {\n # If get_field_value throws error, assume \"none\" value\n if { [catch {\n set val [tmsh::get_field_value $obj $filter_field]\n # strip quotes per BZ442531\n set val [string map {\\\" \"\"} $val]\n }]} { set val none }\n }\n # Non-Tcl operators =~ and !~ added for extra flexibility\n if { $filter_op eq \"=~\" } {\n set filter \"\\[regexp \\\"$filter_value\\\" \\\"$val\\\"\\]\"\n } elseif { $filter_op eq \"!~\" } {\n set filter \"!\\[regexp \\\"$filter_value\\\" \\\"$val\\\"\\]\"\n } else {\n set filter \"\\\\\\\"$val\\\\\\\" $filter_op \\\\\\\"$filter_value\\\\\\\"\"\n }\n # If filter fails, skip to next object\n if { ![eval expr $filter] } {\n continue\n }\n }\n # string map catches /Common added by ltm profile ntlm,\n # which is unlike all other ltm profile return values.\n lappend items $dir/[string map {/Common/ \"\"} [tmsh::get_name $obj]]\n }\n } err ]\n }\n tmsh::cd $save_dir\n\n # array keys: $do_binary,$tmsh_rval,$nocomplain. Do not insert whitespace.\n array set rval {\n 0,0,0 {[join $items $join_char]}\n 0,0,1 {[join $items $join_char]}\n 0,1,0 {[error \"$error_msg $err\"]}\n 0,1,1 {}\n 1,0,0 {[llength $items]}\n 1,0,1 {[llength $items]}\n 1,1,0 {0}\n 1,1,1 {0}\n }\n\n return [subst $rval($do_binary,$tmsh_rval,$nocomplain)]\n}\n\nproc iapp_get_provisioned { args } {\n\n array set lnum {\n none 0\n minimum 1\n nominal 2\n dedicated 3\n }\n\n # Set defaults.\n set required minimum\n set do_binary 1\n\n # Set up flag-related work.\n array set flags {\n -is { [set required [iapp_pull $ptr args]] }\n -level { [set do_binary 0] }\n }\n iapp_process_flags flags args\n if { [llength $args] > 1 } {\n error \"Too many arguments\"\n }\n\n # If checking for AM provisioning on TMOS < 11.4,\n # check for WAM provisioning instead.\n if { $args eq \"am\" && [iapp_tmos_version < 11.4] } {\n set args \"wam\"\n }\n\n # Get the provisioning level. If blank, assume none.\n # Proc only checks 1 module at a time, so only 1 object is returned.\n if { [catch {\n set obj [tmsh::get_config sys provision $args]\n set level [tmsh::get_field_value [lindex $obj 0] level]\n }]} { set level none }\n\n if { $do_binary } {\n return [expr { $lnum($level) >= $lnum($required) }]\n } else {\n return $level\n }\n}\n\nproc iapp_get_user { args } {\n\n # Set defaults.\n set do_role 0\n set do_binary 0\n\n # Set up flag-related work.\n array set flags {\n -is_admin { [set do_binary 1] }\n }\n iapp_process_flags flags args\n if { [llength $args] > 1 } {\n error \"Too many arguments\"\n }\n\n # Show user auth was introduced in v11.6\n set user \"unknown\"\n catch {\n set user [tmsh::show auth user field-fmt]\n } err\n if { $do_binary } {\n return [expr { $user == \"unknown\"\n || [string first \"role \" $user] == -1\n || [string first \"role admin\" $user] != -1\n || [string first \"role resource-admin\" $user] != -1 }]\n } else {\n return $user\n }\n}\n\nproc iapp_destination { args } {\n # Set defaults. Flag actions may overwrite defaults later.\n set route_domain 0\n set do_mask 0\n set port 0\n\n # Set up flag-based actions.\n array set flags {\n -route_domain { [set route_domain [iapp_pull $ptr args]] }\n -mask { [set do_mask 1] }\n -length { [set cidr_bits [iapp_pull $ptr args]] }\n }\n\n if { [llength [set non_switches [iapp_process_flags flags args]]] > 2 } {\n error \"Too many arguments\"\n }\n if { [llength $non_switches] == 2 } { set port [lindex $non_switches 1] }\n set addr [lindex $non_switches 0]\n\n # Pull the route-domain off the addr string, but only use it as the\n # route domain if it wasn't overridden by -route_domain flag.\n if { [string first \"%\" $addr] != -1 } {\n if { $route_domain == 0 } {\n # route-domain is still default, so use value from addr string\n set route_domain [lindex [split $addr \"%\"] 1]\n }\n set addr [lindex [split $addr \"%\"] 0]\n }\n\n if { $do_mask } { ;# calculate a mask\n\n # Define the delta between ipv4 and ipv6.\n # length: ipv4 mask is 32 bits, ipv6 is 128 bits.\n # group: ipv4 is grouped in octets, ipv6 as 16 bit words.\n # format: ipv4 is decimal notation, ipv6 is hex.\n # format1 also has the delimiter, format2 does not.\n array set v {\n 0,length 32\n 0,group 8\n 0,format1 d.\n 0,format2 d\n 1,length 128\n 1,group 16\n 1,format1 .4x:\n 1,format2 .4x\n }\n\n # Detect a node name and convert it to an ip address, then detect IPv6.\n if { [string first / $addr] != -1 } {\n set node [lindex [tmsh::get_config ltm node $addr] 0]\n set addr [tmsh::get_field_value $node address]\n }\n set is_ipv6 [string match \"*:*:*\" $addr]\n\n # Soften result of an illegal -length parameter.\n if { ![info exists cidr_bits] || $cidr_bits > $v($is_ipv6,length) } {\n set cidr_bits $v($is_ipv6,length)\n } elseif { $cidr_bits < 0 } {\n set cidr_bits 0\n }\n\n # Loop on the full length of the mask: 32 bits for ipv4, 128 for ipv6\n for { set octet 0; set i 0 } { $i < $v($is_ipv6,length) } { incr i } {\n\n # Take a break at intervals to save the grouping and add delimiter.\n # Interval is 8 bits for ipv4 and 16 bits for ipv6.\n if { $i && ![expr {$i % $v($is_ipv6,group)}] } {\n\n # Add the grouping and delimiter to the mask, then reset.\n append mask [format %$v($is_ipv6,format1) $octet]\n set octet 0\n }\n # Shift the prior bits left by multiplying by 2.\n # Then add the current bit, which is 1 if part of the mask, 0 if not.\n # Current bit is part of the mask if $i < number of bits in the mask.\n set octet [expr { 2 * $octet + ($i < $cidr_bits) }]\n }\n # Add the final grouping, then return the finished mask.\n set ret_val [format $mask%$v($is_ipv6,format2) $octet]\n\n } else { ;# calculate a destination\n # the route domain might be a name and we need a number.\n if { ![string is integer $route_domain] } {\n set route_domains [tmsh::get_config \"/ net route-domain $route_domain\"]\n if { [llength $route_domains] != 1 } {\n error \"no such route domain: $route_domain\"\n }\n # since we have already determined that the list is 1 long,\n # this explicit reference to element 0 is safe\n set route_domain [tmsh::get_field_value [lindex $route_domains 0] \"id\"]\n }\n\n set route_domain [expr { $route_domain == 0 ? \"\" : \"%$route_domain\" }]\n\n # 0 and * represent wildcard port assignments in the GUI,\n # but TMSH requires the string 'any' to specify a wildcard.\n if { $port == 0 || $port == \"*\" } {\n set port any\n }\n\n # Build the final destination. Use \":\" for node names even if ipv6.\n set is_ipv6_literal [string match \"*:*:*\" $addr]\n set addr_delimiter [expr { $is_ipv6_literal ? \".\" : \":\" }]\n set ret_val ${addr}${route_domain}${addr_delimiter}${port}\n }\n return $ret_val\n}\n\nproc iapp_pool_members { args } {\n\n # Set defaults.\n array set fields {\n address addr\n port port\n port-secure port_secure\n connection-limit connection_limit\n priority-group priority\n ratio ratio\n }\n set route_domain \"\"\n set port_override -1\n set aaa_domain 0\n set aaa_priority -1\n\n # Set up flag-related work.\n array set flags {\n -fields { [array set fields [iapp_pull $ptr args]] }\n -route_domain { [set route_domain [iapp_pull $ptr args]] }\n -port { [set port_override [iapp_pull $ptr args]] }\n -aaa_domain { [set aaa_domain 1] }\n -aaa_pool { [set aaa_priority 0] }\n }\n iapp_process_flags flags args\n\n # Identify the non-address/non-port fields. These go inside braces in tmsh.\n set nonport_fields [lsearch -all -not -inline -regexp \\\n [array names fields] {address|port|port-secure}]\n\n set members \"\"\n foreach row [join $args] {\n\n # Skip invalid table rows.\n if { [llength [join $row]] %2 == 1 } {\n continue\n }\n\n # Import APL table into an array for processing.\n array unset columns\n array set columns [join $row]\n set addr $columns($fields(address))\n\n # Identify the port number, either from table columns or by -port flag.\n if { $port_override != -1 } {\n set port $port_override\n } elseif { [info exists columns($fields(port))] } {\n set port $columns($fields(port))\n } elseif { [info exists columns($fields(port-secure))] } {\n set port $columns($fields(port-secure))\n } else {\n set port 80\n }\n\n # If specified, strip entered route domain and append the flag value.\n if { $route_domain != \"\" } {\n set addr [lindex [split $addr \"%\"] 0]\n set addr \"$addr%$route_domain\"\n }\n\n # If -aaa_domain, use domain controller format, otherwise use pool format\n if { $aaa_domain } {\n append members \" $columns($fields(host)) \\{ ip $addr \\}\"\n } else {\n append members \" [iapp_destination $addr $port] \\{\"\n\n # Transfer non-port fields from the table to the tmsh string.\n foreach name $nonport_fields {\n if { [info exists columns($fields($name))] } {\n append members \" $name $columns($fields($name))\"\n }\n }\n\n # If -aaa_pool, add priority field with incrementing value.\n # This is required by APM.\n if { $aaa_priority >= 0 } {\n append members \" priority-group [incr aaa_priority]\"\n }\n append members \" \\}\"\n }\n }\n\n return \"[expr { $aaa_domain ? \"\" : \"members \" }][expr { $members eq \"\" \\\n ? \"none\" : \"replace-all-with \\{ $members \\}\" }]\"\n}\n\nproc iapp_debug { args } {\n\n # Passwords should be obscured in all logs. Fields shown here are handled\n # in this proc, but the global variable may be overwritten if alternate\n # fields should be obscured.\n if { ![info exists ::SENSITIVES] } {\n set ::SENSITIVES {\n account-password\n admin-encrypted-password\n password\n passwd\n secret\n }\n }\n\n # look for any of the sensitive words, and replace the word that follows it\n set regex \"(\\\\m([join $::SENSITIVES |])\\\\M)\\\\s+\\[^\\\\s\\]*\"\n regsub -all $regex [join $args] {\\1 -OBSCURED-} args\n regsub -all \"(<Password.*>).*(</Password>)\" $args {\\1-OBSCURED-\\2} args\n\n set lev [tmsh::get_field_value [lindex [tmsh::get_config sys scriptd \\\n log-level] 0] log-level]\n if { $lev eq {debug} } {\n puts $args\n }\n}\n\n# The apm_config proc provides a tmsh pre-processor for APM\n# configuration, which in most cases will drastically reduce\n# implementation code. To configure APM with this proc, pass\n# it an array of object names and associated meta-tag substitutions.\n# Each object must be categorized as a profile, a resource, or\n# a policy-item. APM agents and customization-groups are derived\n# from these 3 categories as needed.\n#\n# apm_config's return value is a list of the APM profiles defined\n# in the argument and instantiated by the proc. This allows the\n# procedure call to be embedded directly into a virtual server\n# definition.\n#\n# These universal meta-tags may be placed anywhere in the array:\n# <ITEM> The object name, eg. apm_access\n# <PREFIX> The app name, including folder, eg. /Common/my_app.app/my_app\n#\n# Profile objects require the following meta-tags:\n# <PROFILE_TYPE> The tmsh object type, eg. \"apm profile access\"\n# <PROFILE_DEF> The body of the object, eg.:\n# \"access-policy <PREFIX>\n# defaults-from /Common/access\n# eps-group <PREFIX>_eps\n# errormap-group <PREFIX>_errormap\n# general-ui-group <PREFIX>_general_ui\"\n#\n# apm_config will automatically create default customization-groups\n# for the \"-group\" lines specified in access profile definitions.\n# In the above example, there is no need to additionally specify a\n# customization-group for errormap and general-ui.\n#\n# <PROFILE_TYPE> is a catch-all for other APM types, eg:\n# apm_sso {\n# <PROFILE_TYPE> {apm sso kerberos}\n# <PROFILE_DEF> \"account-name <USER>\n# account-password <PASS>\n# realm <REALM>\" }\n#\n# In the example above, <PROFILE_TYPE> and <PROFILE_DEF> are\n# apm_config meta-tags, while <USER>, <PASS>, and <REALM> must\n# be substituted before calling apm_config, eg. if these tags are\n# defined in $pre_proc_map, they may be substituted with:\n# array set apm_map [string map [subst $pre_proc_map] [array get apm_map]]\n#\n# Resource objects require the following meta-tags:\n# <RESOURCE_TYPE> The apm resource object type, eg. \"webtop\"\n# <RESOURCE_DEF> The body of the object, eg.:\n# \"customization-group <ITEM>\n# minimize-to-tray false\n# webtop-type full\"\n#\n# In the above example, a customization-group is specified. Any\n# customization-group is assumed to be blank unless further defined by the\n# <GROUP_DEF> meta-tag, eg. <GROUP_DEF> {type webtop}\n#\n# Policy-item objects are defined by the following meta-tags:\n# <AGENT_TYPE> default \"resource-assign\"\n# <AGENT_DEF> default \"customization-group <ITEM>\"\n# <ITEM_AGENT> default \"agents { <ITEM>_ag { type <AGENT_TYPE> }}\"\n# <ITEM_CAPTION> default \"<ITEM>\"\n# <ITEM_COLOR> default \"1\"\n# <ITEM_TYPE> default \"action\"\n# <ITEM_RULES> defaults to a set of expressions/next-items where specified\n# <RULE_CAPTION_0> default \"fallback\"\n# <RULE_CAPTION_1> default \"Successful\"\n# <RULE_CAPTION_2> default \"successful\"\n#\n# apm_config generates the APM agent and customization-group definitions\n# as required for each policy-item, but specific objects may be defined\n# by using the <AGENT_DEF> and <GROUP_DEF> meta-tags.\n# To suppress the formation of an APM agent, specify <ITEM_AGENT> {}.\n\nproc iapp_apm_config { map_array_name } {\n upvar $map_array_name map_array\n\n # Pull $prefix from the array\n set prefix $map_array(prefix)\n unset map_array(prefix)\n\n # Stencils for creating apm objects\n set access_form \\\n \"<TMSH_CREATE> apm policy access-policy <ITEM> {\\n \\\n caption general\\n \\\n start-item <ACCESS_START_ITEM>\\n \\\n default-ending <ACCESS_ENDING>\\n \\\n items replace-all-with {\\n<ACCESS_ITEMS> }\\n}\"\n\n set profile_form \"<TMSH_CREATE> <PROFILE_TYPE> <ITEM> {\\n \\\n <PROFILE_DEF>\\n}\"\n\n set resource_form \"<TMSH_CREATE> apm resource <RESOURCE_TYPE> <ITEM> {\\n \\\n <RESOURCE_DEF>\\n}\"\n\n set agent_form \"<TMSH_CREATE> apm policy agent <AGENT_TYPE> <ITEM>_ag {\\n \\\n <AGENT_DEF>\\n}\"\n\n set group_form \"<TMSH_CREATE> apm policy customization-group <ITEM> {\\\n <GROUP_DEF>}\"\n\n set agent_group_form \"<TMSH_CREATE> apm policy customization-group <ITEM>_ag {\\\n <GROUP_DEF>}\"\n\n set policy_item_form \"<TMSH_CREATE> apm policy policy-item <ITEM> {\n <ITEM_AGENT>caption <ITEM_CAPTION>\n color <ITEM_COLOR>\n <ITEM_TYPE>\n <ITEM_RULES>\\n}\"\n\n # 1st round apm string map\n set default_map_1 {\n <ACCESS_ITEM> {}\n <AGENT_DEF> \"customization-group <ITEM>_ag\"\n <ITEM_AGENT> \"agents replace-all-with {\n <ITEM>_ag { type <AGENT_TYPE> }}\\n \"\n <ITEM_CAPTION> <ITEM>\n <ITEM_COLOR> {1}\n <ITEM_TYPE> \"item-type action\"\n <ITEM_RULES> \"rules\n {[expr {[string first <RULE_NEXT_2> $map_array($item)] != -1 ? \"{\n caption <RULE_CAPTION_2>\n expression <RULE_EXPR_2>\n next-item ${prefix}_<RULE_NEXT_2>\n }\":\"\"}][expr {[string first <RULE_NEXT_1> $map_array($item)] != -1 ? \"{\n caption <RULE_CAPTION_1>\n expression <RULE_EXPR_1>\n next-item ${prefix}_<RULE_NEXT_1>\n }\":\"\"}]{\n caption <RULE_CAPTION_0>\n next-item ${prefix}_<RULE_NEXT_0>\n }}\"\n }\n\n # 2nd round apm string map\n set default_map_2 {\n <ITEM> [expr { $item eq {default} ? \"$prefix\" : \"${prefix}_$item\" }]\n <PREFIX> $prefix\n <LOCAL_PATH> [string map {/ :} $prefix]\n <GROUP_DEF> \"\"\n <AGENT_TYPE> \"resource-assign\"\n <RULE_CAPTION_2> \"successful\"\n <RULE_CAPTION_1> \"Successful\"\n <RULE_CAPTION_0> \"fallback\"\n }\n\n # Build APM access profile and access-policy from the access_form.\n # Tags <ACCESS_ITEM> and <ACCESS_ENDING> are picked up from\n # $map_array items. <ITEM> and <GROUP_DEF> are picked up from\n # $default_map_2.\n foreach item [lsort [array names map_array]] {\n\n # Pick up the <ACCESS_ENDING> tag. There should be just 1.\n set access_form [string map $map_array($item) $access_form]\n\n # Filter out items that do not belong in the access-policy.\n # Anything with an ITEM_xxx tag belongs\n if { [string first <ITEM_ $map_array($item)] == -1 } {\n continue\n }\n\n # Add to the items list for the access-policy, e.g. priority\n append access_items \" ${prefix}_$item {<ACCESS_ITEM>}\\n\"\n set access_items [string map $map_array($item) $access_items]\n set access_items [string map [subst $default_map_1] $access_items]\n }\n\n # Build APM resources, policy-items, agents, and customization-groups from\n # the policy_item_form and resource_form.\n foreach item [lsort [array names map_array]] {\n\n # Each item starts as a profile, a resource, or a policy-item.\n # Profiles are free-form, so other apm objects can use the profile form.\n # In most cases, a policy-item spawns an agent.\n # Any definition specifying a customization-group will spawn that group.\n if { [string first \"<PROFILE_DEF>\" $map_array($item)] != -1 } {\n\n # Collect profile names for attachment to the virtual server\n if { [string first \"apm profile \" $map_array($item)] != -1 } {\n lappend profiles [expr { $item eq {default}\n ? \"$prefix\" : \"${prefix}_$item\" }]\n # When an access profile is found, built a policy of the same name\n if { [string first \"apm profile access\" $map_array($item)] != -1 } {\n set def [string map \"<ACCESS_ITEMS> {$access_items}\" $access_form]\n append cmds \"[string map [subst $default_map_2] $def]\\n\"\n }\n }\n set def $profile_form\n } elseif { [string first \"<RESOURCE_DEF>\" $map_array($item)] != -1 } {\n set def $resource_form\n } else {\n set def $policy_item_form\n if { [string first \"<ITEM_AGENT> {}\" $map_array($item)] == -1 } {\n append def $agent_form\n }\n }\n\n # Apply 1st pass of string maps\n set def [string map $map_array($item) $def]\n set def [string map [subst $default_map_1] $def]\n\n # If a customization-group is specified, add its definition\n if { [string first \"customization-group\" $def] != -1 } {\n if { [string first \"apm policy agent\" $def] != -1 } {\n append def $agent_group_form\n } elseif { [string first \"apm profile access\" $def] == -1 } {\n append def $group_form\n }\n }\n\n # Apply 2nd pass of string maps\n set def [string map $map_array($item) $def]\n append cmds [string map [subst $default_map_2] $def]\n }\n\n # Divide and execute tmsh commands\n set tag \"<TMSH_CREATE>\"\n set tag_length [string length $tag]\n set last [expr { [string first $tag $cmds] + $tag_length }]\n while { [set pos [string first $tag $cmds $last]] != -1 } {\n incr pos -1\n iapp_conf create [string range $cmds $last $pos]\n set last [expr { $pos + $tag_length + 1 }]\n }\n iapp_conf create [string range $cmds $last end]\n return $profiles\n}\n\nproc iapp_upgrade_template { upgrade_var upgrade_trans } {\n upvar $upgrade_var upgrade_var_arr\n upvar $upgrade_trans upgrade_trans_arr\n\n # create the new variables from the old\n foreach { var } [array names upgrade_var_arr] {\n\n # substitute old variable name for abbreviation \"##\"\n regsub -all {##} $upgrade_var_arr($var) \\$$var map_cmd\n\n # run the mapping command from inside the array\n if { [catch { subst $map_cmd } err] } {\n if { [string first \"no such variable\" $err] == -1 } {\n puts \"ERROR $err\"\n }\n }\n }\n\n # move variables over and apply translations\n set var_mods \"\"\n set var_adds \"\"\n foreach var [array names vx] {\n\n # if the APL variable name is in the translation array,\n # then use the custom translation built for that variable.\n if { [info exists upgrade_trans_arr($var)] } {\n array set sub_arr [subst $upgrade_trans_arr($var)]\n if { [info exists sub_arr($vx($var))] } {\n set vx($var) $sub_arr($vx($var))\n }\n array unset sub_arr\n # else, if the APL variable value is in the translation array,\n # then use the generic translation of that value.\n } elseif { [info exists upgrade_trans_arr($vx($var))] } {\n set vx($var) [subst $upgrade_trans_arr($vx($var))]\n }\n\n # add to tmsh command string\n if { [info exists ::$var] } {\n append var_mods \"\\n $var \\{ value \\\"$vx($var)\\\" \\} \"\n } else {\n append var_adds \"\\n $var \\{ value \\\"$vx($var)\\\" \\} \"\n }\n }\n\n # move tables over\n set tbl_mods \"\"\n set tbl_adds \"\"\n foreach tbl [array names tx] {\n\n # convert table from APL format to TMSH format\n if { ![llength $tx($tbl)] } {\n set tbl_def \"column-names none\"\n } else {\n set rows_def \"\"\n foreach apl_row $tx($tbl) {\n array set row_arr [join $apl_row]\n append rows_def \"\\n \\{ row \\{ \"\n foreach apl_col [array names row_arr] {\n append rows_def \"$row_arr($apl_col) \"\n }\n append rows_def \"\\}\\}\"\n }\n set tbl_def \\\n \"\\n column-names \\{ [array names row_arr] \\} rows \\{ $rows_def \\}\"\n array unset row_arr\n }\n\n # add to tmsh command string\n if { [info exists ::$tbl] } {\n append tbl_mods \"\\n $tbl \\{ $tbl_def \\} \"\n } else {\n append tbl_adds \"\\n $tbl \\{ $tbl_def \\} \"\n }\n }\n\n # construct the \"tmsh modify\" command\n set cmd \"sys application service $tmsh::app_name \"\n if { [llength $var_mods] } {\n append cmd \"\\nvariables modify { $var_mods }\"\n }\n if { [llength $var_adds] } {\n append cmd \"\\nvariables add { $var_adds }\"\n }\n if { [llength $tbl_mods] } {\n append cmd \"\\ntables modify { $tbl_mods }\"\n }\n if { [llength $tbl_adds] } {\n append cmd \"\\ntables add { $tbl_adds }\"\n }\n\n # Execute with debug output. This conversion takes place within the\n # existing ASO, so tmsh modify is used instead of tmsh create.\n iapp_debug \"TEMPLATE UPGRADE\"\n iapp_conf modify $cmd\n return\n}\n\nproc iapp_downgrade_template { pivot_var upgrade_var downgrade_table } {\n upvar $downgrade_table downgrade_tbl_arr\n\n # The ASO variable \"offload_history\" is used to recover the legacy\n # choice a user made about SSL offload. It should be present in all cases.\n # This conditional only handles the case where a user has deliberately\n # deleted it by manipulating the ASO directly from tmsh.\n if { ![info exists ::offload_history] } {\n set ::offload_history \"No\"\n }\n\n # BIG-IP erases table contents when the APL optional hides the table.\n # Since the prior data is not available, this downgrade must back-convert\n # existing table data. Unlike tables, variables remain intact from the\n # legacy ASO.\n set tbl_def \"\"\n foreach tbl [array names downgrade_tbl_arr] {\n # Check for existence of each table in the current context.\n # If not, skip to next.\n if { ![info exists [set tbl]] } {\n continue\n }\n # Check for existence of each table in the legacy context.\n # If not, add an empty table so \"tmsh tables modify\" does not fail.\n if { ![info exists ::$downgrade_tbl_arr($tbl)] } {\n iapp_conf modify sys app ser $tmsh::app_name tables add \\{ $downgrade_tbl_arr($tbl) \\}\n }\n append tbl_def \"$downgrade_tbl_arr($tbl) \\{ \"\n if { [llength [subst $$tbl]] } {\n set rows_def \"\"\n foreach apl_row [subst $$tbl] {\n array set row_arr [join $apl_row]\n append rows_def \"\\n \\{ row \\{ \"\n foreach apl_col [array names row_arr] {\n append rows_def \"$row_arr($apl_col) \"\n }\n append rows_def \"\\}\\}\"\n }\n append tbl_def \\\n \"column-names \\{ [array names row_arr] \\} rows \\{ $rows_def \\}\"\n array unset row_arr\n } else {\n append tbl_def \"rows none\"\n }\n append tbl_def \" \\} \"\n }\n regsub -all \"\\n\" $tbl_def {} tbl_def\n set cmd \"sys app ser $tmsh::app_name \\\n variables modify \\{ \\\n $pivot_var \\{ value $::offload_history \\} \\\n $upgrade_var \\{ value No \\} \\\n \\} \\\n tables modify \\{ $tbl_def \\}\"\n iapp_debug \"TEMPLATE DOWNGRADE\"\n iapp_conf modify $cmd\n return\n}\n}\nsys application template f5.microsoft_office_365_idp.v1.1.0 {\n actions {\n definition {\n html-help {\n }\n implementation {\n tmsh::include f5.iapp.1.3.0.cli\n iapp_template start\n\n set YES_ANSWER \"yes\"\n set DEFAULT_ANSWER /#default#\n set DO_NOT_USE_ANSWER /#do_not_use#\n set CREATE_NEW_ANSWER /#create_new#\n\n proc configure_o365_deployment {} {\n tmsh::include f5.iapp.1.3.0.cli\n set app $tmsh::app_name\n set is_113 [iapp_tmos_version >= 11.3]\n set is_v12_0 [iapp_tmos_version >= 12.0]\n set advanced [expr { [iapp_is ::general__config_mode advanced] }]\n\n # HTTPS iRules\n set irule_names \"_sys_APM_Office365_SAML_BasicAuth \"\n\n append irule_names [iapp_conf create ltm rule ${app}_encode_ObjectGUID_irule {\nwhen ACCESS_POLICY_AGENT_EVENT {\n if {[ACCESS::policy agent_id] eq \"encode\"} {\n set tmpVar [binary format H* [substr \"[ACCESS::session data get session.ad.last.attr.objectGUID]\" 2]]\n ACCESS::session data set session.ad.last.attr.objectGUIDencoded [b64encode $tmpVar]\n }\n}\n}]\n\n append irule_names [expr { $advanced && [info exists ::irules__irules] \\\n ? \" $::irules__irules\" : \"\" }]\n\n # array key: $advanced, [llength $irule_names]\n array set irule_arr {\n 1,1 { rules \\{ $irule_names \\} }\n * { rules none }\n }\n\n # APM\n # AAA config\n # array keys: $advanced,$::apm__ad_secure\n array set aaa_port {\n 1,ssl {$::apm__ad_port_ssl}\n 1,tls {$::apm__ad_port_not_ssl}\n 1,none {$::apm__ad_port_not_ssl}\n 0,ssl {636}\n 0,tls {389}\n 0,none {389}\n }\n\n # array key: $::apm__ad_monitor\n array set aaa_monitor {\n ad_create { monitor [iapp_conf create ltm monitor ldap ${app}_ldap base \\\"$::apm__ad_tree\\\" chase-referrals yes debug no defaults-from ldap destination *:[subst $aaa_port($advanced,$::apm__ad_secure)] filter \\\"cn=$::apm__ad_user\\\" interval [expr { $advanced ? $::apm__ad_interval : \"10\" }] timeout [expr {$advanced ? ($::apm__ad_interval * 3 + 1):\"31\"}] mandatory-attributes no password [iapp_make_safe_password $::apm__ad_password] security $::apm__ad_secure time-until-up 0 username \\\"cn=${::apm__ad_user},${::apm__ad_tree}\\\"] }\n ad_select { monitor $::apm__ad_monitor_choice }\n ad_icmp { monitor [iapp_conf create ltm monitor gateway-icmp ${app}_icmp defaults-from gateway_icmp interval 5 timeout 16] }\n }\n\n # array key: $multiple_ad\n array set aaa_pool {\n 1 { domain-controllers [iapp_pool_members -aaa_domain -fields { host fqdn } $::apm__active_directory_servers] pool [iapp_conf create ltm pool ${app}_aaa [iapp_pool_members $::apm__active_directory_servers -port any -aaa_pool] load-balancing-mode \"round-robin\" [subst $aaa_monitor($::apm__ad_monitor)] min-active-members 1] }\n 0 { domain-controller $::apm__active_directory_server }\n }\n\n set do_new_aaa [iapp_is ::apm__aaa_profile \"/#create_new#\"]\n set credentials [iapp_is ::apm__credentials \"yes\"]\n set multiple_ad 1\n\n # array key: $do_new_aaa\n array set aaa_server {\n 1 {[iapp_conf create apm aaa active-directory ${app}_apm_aaa \\{ admin-encrypted-password [expr { $credentials ? \"[iapp_make_safe_password $::apm__active_directory_password]\" : \"none\" }] admin-name [expr { $credentials ? \"$::apm__active_directory_username\" : \"none\" }] domain \"$::apm__login_domain\" [subst $aaa_pool($multiple_ad)] \\}] }\n 0 { $::apm__aaa_profile }\n }\n\n set ad_aaa [iapp_substa aaa_server($do_new_aaa)]\n\n # APM config\n set entityid_urn [expr { $is_v12_0 && [iapp_is ::apm__saml_entity_id_format \"URN\"] }]\n\n # array keys: $is_v12_0,$entityid_urn\n array set saml_sso_arr {\n 0,0 { { \"entity-id $::apm__saml_entity_id \\\n subject-value \\\\\\\\\\\"%{session.ad.last.attr.objectGUIDencoded}\\\\\\\\\\\" \\\n subject-type persistent \\\n attributes { { name IDPEmail value \\\\\\\\\\\"%{session.ad.last.attr.userPrincipalName}\\\\\\\\\\\" } } \\\n sp-connectors add { saml_office365 } \\\n idp-certificate $::idp_encryption__cert \\\n idp-signkey $::idp_encryption__key\" } }\n 1,0 { { \"entity-id $::apm__saml_entity_id \\\n subject-value \\\\\\\\\\\"%{session.ad.last.attr.objectGUIDencoded}\\\\\\\\\\\" \\\n subject-type persistent \\\n attributes { { name IDPEmail multi-values { \\\\\\\\\\\"%{session.ad.last.attr.userPrincipalName}\\\\\\\\\\\" } } } \\\n sp-connectors add { saml_office365 } \\\n idp-certificate $::idp_encryption__cert \\\n idp-signkey $::idp_encryption__key \\\n saml-profiles replace-all-with { web-browser-sso ecp }\" } }\n 1,1 { { \"entity-id $::apm__saml_entity_id \\\n subject-value \\\\\\\\\\\"%{session.ad.last.attr.objectGUIDencoded}\\\\\\\\\\\" \\\n subject-type persistent \\\n attributes { { name IDPEmail multi-values { \\\\\\\\\\\"%{session.ad.last.attr.userPrincipalName}\\\\\\\\\\\" } } } \\\n sp-connectors add { saml_office365 } \\\n idp-certificate $::idp_encryption__cert \\\n idp-signkey $::idp_encryption__key \\\n saml-profiles replace-all-with { web-browser-sso ecp } \\\n idp-host $::apm__saml_idp_host \\\n idp-scheme $::apm__saml_idp_scheme\" } }\n * { }\n }\n\n set pre_proc_map \"\n <SAML_SSO_PARAMS> [iapp_substa saml_sso_arr($is_v12_0,$entityid_urn)]\n <AAA> $ad_aaa\"\n \n if { $is_v12_0 && $do_new_aaa } {\n if { [iapp_is ::apm__log_settings \"/#do_not_use#\"] } {\n append pre_proc_map { <LOG_SETTINGS> \"log-settings none\" }\n } else {\n append pre_proc_map { <LOG_SETTINGS> \"log-settings replace-all-with \\{ $::apm__log_settings \\}\" }\n }\n } else {\n append pre_proc_map { <LOG_SETTINGS> \"\" }\n }\n\n array set apm_map {\n default {\n <PROFILE_TYPE> {apm profile access}\n <GROUP_DEF> {type logout }\n <PROFILE_DEF> \"accept-languages replace-all-with { en }\n access-policy <PREFIX>\n defaults-from /Common/access\n generation-action increment\n domain-mode single-domain\n domain-cookie none\n persistent-cookie false\n secure-cookie true\n logout-uri-include none\n logout-uri-timeout 5\n customization-group <PREFIX>_logout\n eps-group <PREFIX>_eps\n errormap-group <PREFIX>_errormap\n framework-installation-group <PREFIX>_frameworkinstallation\n general-ui-group <PREFIX>_general_ui\n sso-name none\n <LOG_SETTINGS>\" }\n apm_ent {\n <ITEM_AGENT> {}\n <ITEM_CAPTION> {\"Start\"}\n <ITEM_TYPE> {}\n <RULE_NEXT_0> apm_logon }\n apm_logon {\n <ACCESS_ITEM> { priority 2 }\n <AGENT_TYPE> logon-page\n <ITEM_CAPTION> {\"Logon Page\"}\n <RULE_NEXT_0> apm_auth }\n apm_auth {\n <ACCESS_ITEM> { priority 3 }\n <AGENT_TYPE> aaa-active-directory\n <AGENT_DEF> \"server <AAA>\\n type auth\"\n <ITEM_CAPTION> {\"AD Auth\"}\n <RULE_EXPR_1> {\"expr {[mcget {session.ad.last.authresult}] == \\\"1\\\"}\"}\n <RULE_NEXT_1> apm_ad_query\n <RULE_NEXT_0> apm_deny }\n apm_ad_query {\n <ACCESS_ITEM> { priority 4 }\n <AGENT_TYPE> aaa-active-directory\n <AGENT_DEF> \"server <AAA> type query query-filter \\\"samAccountName=%{session.logon.last.username}\\\"\"\n <ITEM_CAPTION> {\"AD Query\"}\n <RULE_EXPR_1> {\"expr {[mcget {session.ad.last.queryresult}] == 1}\"}\n <RULE_NEXT_1> apm_irule_event\n <RULE_NEXT_0> apm_deny }\n apm_irule_event {\n <ACCESS_ITEM> { priority 5 }\n <AGENT_TYPE> irule-event\n <AGENT_DEF> \"id encode\"\n <ITEM_CAPTION> {\"iRule Event\"}\n <RULE_NEXT_0> apm_resource_assign}\n apm_saml_sso {\n <PROFILE_TYPE> {apm sso saml}\n <GROUP_DEF> {type webtop}\n <PROFILE_DEF> <SAML_SSO_PARAMS> }\n apm_saml_resource_sso {\n <PROFILE_TYPE> {apm sso saml-resource}\n <GROUP_DEF> {}\n <PROFILE_DEF> \"sso-config-saml <PREFIX>_apm_saml_sso\" }\n apm_webtop {\n <RESOURCE_TYPE> \"webtop\"\n <RESOURCE_DEF> \"minimize-to-tray false webtop-type full\" }\n apm_resource_assign {\n <ACCESS_ITEM> { priority 6 }\n <AGENT_TYPE> resource-assign\n <AGENT_DEF> \"rules { { saml-resources replace-all-with { <PREFIX>_apm_saml_resource_sso } webtop <PREFIX>_apm_webtop } }\"\n <ITEM_CAPTION> {\"Full Resource Assign\"}\n <RULE_NEXT_0> apm_allow}\n apm_allow {\n <ACCESS_ITEM> { priority 7 }\n <AGENT_DEF> {}\n <AGENT_TYPE> ending-allow\n <ITEM_CAPTION> {\"Allow\"}\n <ITEM_TYPE> {item-type ending}\n <ITEM_RULES> {} }\n apm_deny {\n <ACCESS_ITEM> { priority 8 }\n <ACCESS_START_ITEM> <PREFIX>_apm_ent\n <ACCESS_ENDING> <PREFIX>_apm_deny\n <AGENT_TYPE> ending-deny\n <GROUP_DEF> {type logout }\n <ITEM_CAPTION> {\"Deny\"}\n <ITEM_TYPE> {item-type ending}\n <ITEM_COLOR> {2}\n <ITEM_RULES> {} }\n apm_connectivity {\n <PROFILE_TYPE> {apm profile connectivity}\n <GROUP_DEF> {}\n <PROFILE_DEF> \"defaults-from /Common/connectivity\" }\n }\n\n set apm_map(prefix) [tmsh::pwd]/$app\n\n # Instantiate the APM configuration (plus websso and rba)\n\n array set apm_map [string map [subst $pre_proc_map] [array get apm_map]]\n set apm_profiles \"[iapp_apm_config apm_map] /Common/websso /Common/rba /Common/ppp\"\n\n # APM policies do not commit in a reliable manner when configured via iApp.\n # This time-bomb script insures that the policy gets committed.\n # See subcase SR1-315233635 for details.\n set dir [tmsh::pwd]\n set fn \"/var/tmp/iapp_${app}.sh\"\n set fh [open $fn w]\n puts $fh \"sleep 5\"\n puts $fh \"tmsh modify apm profile access ${dir}/${app} generation-action increment\"\n close $fh\n exec chmod 777 $fn\n exec $fn &\n\n # CLIENT-SIDE VLAN SELECTION\n set select_vlans [iapp_is ::webui_virtual__vlan_mode enabled disabled]\n\n # array keys: $advanced,$select_vlans\n array set vlans {\n 1,1 { vlans-$::webui_virtual__vlan_mode vlans replace-all-with \\{ $::webui_virtual__client_vlan \\} }\n * { vlans-disabled vlans none }\n }\n\n # Client TCP Profile\n set client_mode [expr { $advanced ? $::webui_virtual__lan_or_wan : \"WAN\" }]\n\n set new_client_tcp [expr { !$advanced || \\\n ( ( [info exists ::webui_virtual__tcp_wan_opt ] && [iapp_is ::webui_virtual__tcp_wan_opt \"/#create_new#\"] ) || \\\n ( [info exists ::webui_virtual__tcp_lan_opt ] && [iapp_is ::webui_virtual__tcp_lan_opt \"/#create_new#\"] ) ) }]\n\n # array keys: $new_client_tcp,$client_mode\n array set client_tcp {\n 0,LAN { $::webui_virtual__tcp_lan_opt }\n 0,WAN { $::webui_virtual__tcp_wan_opt }\n 1,LAN { [iapp_conf create ltm profile tcp ${app}_lan-optimized-tcp \\\n defaults-from tcp-lan-optimized idle-timeout 1800] }\n 1,WAN { [iapp_conf create ltm profile tcp ${app}_wan-optimized-tcp \\\n defaults-from tcp-wan-optimized idle-timeout 1800] }\n }\n\n # HTTP profile\n set new_http [expr { !$advanced || \\\n [iapp_is ::webui_virtual__http $::CREATE_NEW_ANSWER] }]\n\n #array keys: $advanced, $new_http\n array set http_arr {\n 1,0 { $::webui_virtual__http }\n * { [iapp_conf create ltm profile http ${app}_http \\\n defaults-from http \\\n insert-xforwarded-for enabled] }\n }\n\n # Client SSL Profile\n set new_client_ssl [expr { !$advanced || [iapp_is \\\n ::webui_virtual__clientssl \"/#create_new#\"] }]\n\n set do_chain_cert [expr { $advanced && \\\n [info exists ::webui_virtual__chainssl] && \\\n ![iapp_is ::webui_virtual__chainssl \"/#do_not_use#\"] }]\n\n set cssl_cmd \\\n \"ltm profile client-ssl ${app}_client-ssl defaults-from clientssl\"\n\n # array keys: $new_client_ssl,$do_chain_cert\n array set client_ssl_arr {\n 1,1 { [iapp_conf create $cssl_cmd key $::webui_virtual__key cert $::webui_virtual__cert \\\n chain $::webui_virtual__chainssl] \\{ context clientside \\} }\n 1,0 { [iapp_conf create $cssl_cmd key $::webui_virtual__key cert $::webui_virtual__cert \\\n chain none] \\{ context clientside \\} }\n 0,1 { $::webui_virtual__clientssl \\{ context clientside \\} }\n 0,0 { $::webui_virtual__clientssl \\{ context clientside \\} }\n * {}\n }\n\n # Virtual Server\n set do_redirect [expr { !$is_v12_0 && ( !$advanced || [iapp_is ::webui_virtual__create_redir_vs \"yes\"] ) }]\n\n set redirect_port [expr { $do_redirect && $advanced ? $::webui_virtual__redir_port : \"80\" }]\n\n set http_profile \"[iapp_substa http_arr($advanced,$new_http)]\"\n\n set tcp_profile \"[iapp_substa client_tcp($new_client_tcp,$client_mode)]\"\n\n set ssl_profile \"[iapp_substa client_ssl_arr($new_client_ssl,$do_chain_cert)]\"\n\n # array keys: $do_redirect\n array set vs_array {\n 1 { [iapp_conf create ltm virtual ${app}_vs \\\n destination [iapp_destination $::webui_virtual__addr $::webui_virtual__port] \\\n mask [iapp_destination -mask $::webui_virtual__addr] \\\n ip-protocol tcp \\\n profiles replace-all-with \\{ $ssl_profile $tcp_profile \\}\\\n profiles add \\{ $http_profile $apm_profiles \\} \\\n rules \\{ $irule_names \\} \\\n [iapp_substa vlans($advanced,$select_vlans)]] \\\n \\\n [iapp_conf create ltm virtual ${app}_redir_vs \\\n destination [iapp_destination $::webui_virtual__addr $redirect_port] \\\n mask [iapp_destination -mask $::webui_virtual__addr] \\\n ip-protocol tcp \\\n profiles replace-all-with \\{ $tcp_profile \\} \\\n profiles add \\{ $http_profile \\} \\\n [iapp_substa vlans($advanced,$select_vlans)] \\\n rules \\{ _sys_https_redirect \\}]}\n 0 { [iapp_conf create ltm virtual ${app}_vs \\\n destination [iapp_destination $::webui_virtual__addr $::webui_virtual__port] \\\n mask [iapp_destination -mask $::webui_virtual__addr] \\\n ip-protocol tcp \\\n profiles replace-all-with \\{ $ssl_profile $tcp_profile \\} \\\n profiles add \\{ $http_profile $apm_profiles \\} \\\n rules \\{ $irule_names \\}\\\n [iapp_substa vlans($advanced,$select_vlans)]]}\n * { [iapp_conf create ltm virtual ${app}_vs \\\n destination [iapp_destination $::webui_virtual__addr $::webui_virtual__port] \\\n mask [iapp_destination -mask $::webui_virtual__addr] \\\n ip-protocol tcp \\\n profiles replace-all-with \\{ $ssl_profile $tcp_profile \\} \\\n profiles add \\{ $http_profile $apm_profiles \\} \\\n rules \\{ $irule_names \\} \\\n [iapp_substa vlans($advanced,$select_vlans)]]}\n }\n\n iapp_substa vs_array($do_redirect)\n\n }\n\n # MAIN\n configure_o365_deployment\n iapp_template stop\n\n }\n presentation {\n section intro {\n optional ( \"HIDE\" == \"THIS\" ) {\n choice is_113 tcl {\n return [expr {[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_tmos_version >= 11.3] ? \"yes\" : \"no\"}]\n }\n choice ltm_provisioned tcl {\n return [expr {[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_provisioned ltm] ? \"yes\" : \"no\" }]\n }\n choice apm_provisioned tcl {\n return [expr {[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_provisioned apm] ? \"yes\" : \"no\" }]\n }\n choice is_v12_0 tcl {\n return [expr {[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_tmos_version >= 12.0] ? \"yes\" : \"no\"}]\n }\n choice afm_provisioned tcl {\n return [expr {[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_provisioned afm] && [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_tmos_version >= 11.4] ? \"yes\" : \"no\" }]\n }\n }\n \n message hello_supported \"This iApp supports configuring BIG-IP APM 11.3.0 or later with Microsoft Office 365.\"\n message hello \"Use this template to configure BIG-IP to act as SAML Identity Provider(IdP) to Microsoft Office 365 applications, such as Exchange and SharePoint.\"\n message check_for_updates \"Ensure you are using the most recent template before continuing. This template is v1.1.0. Check for newer community versions online at DevCentral (https://devcentral.f5.com/wiki/iApp.CodeShare.ashx) and newer supported versions at the main F5 download site (https://downloads.f5.com/esd/), with instructions at the AskF5 Knowledge Base (http://support.f5.com/kb/en-us/solutions/public/13000/400/sol13422.html).\"\n optional ( is_113 == \"no\" ) {\n message version_sorry \"You must be running version 11.3.0 or later to use this template.\"\n }\n optional ( ltm_provisioned == \"no\" ) {\n message sorry \"You must license and provision the Local Traffic Manager (LTM) module to use this template.\"\n }\n optional ( apm_provisioned == \"no\" ) {\n message apm_opportunity \"Provisioning Access Policy Manager (APM) will enable additional options in this template.\"\n }\n message prereqs_1 \"To process encrypted traffic on this BIG-IP system, you need to import an SSL certificate and key that correspond to all fully-qualified DNS names that you are using for the traffic. Importing SSL certificates and keys is not a part of this template; see Local Traffic >> SSL Certificate List. This template can make use of existing route domains. Creating route domains is not part of this template; see Network >> Route Domains.\"\n message prereqs_2 \"To ensure a successful deployment, F5 strongly recommends following the instructions in the Deployment Guide at http://www.f5.com/pdf/deployment-guides/microsoft-office-365-saml-idp-dg.pdf.\"\n }\n optional ( intro.is_113 == \"yes\" && intro.ltm_provisioned == \"yes\" && intro.apm_provisioned == \"yes\" ) {\n section general {\n choice assistance_options display \"xxlarge\" default \"full\" {\n \"Yes, show inline help\" => \"full\" ,\n \"No, do not show inline help\" => \"minimal\"\n }\n message assistance_options_about \"This template offers extensive inline assistance, notes, and configuration tips. We strongly recommend reading all information presented in the template until you are familiar with the functionality and implications of the deployment options. Important notes and warnings are always visible, no matter which selection you make here.\"\n choice config_mode display \"xxlarge\" default \"basic\" {\n \"Basic - Use F5's recommended settings\" => \"basic\" ,\n \"Advanced - Configure advanced options\" => \"advanced\"\n }\n optional ( general.assistance_options == \"full\" ) {\n message config_mode_info \"This template supports two configuration modes. Basic mode automatically configures the BIG-IP system with F5 recommended settings without user intervention. Advanced mode allows you to review and edit the F5 recommended settings before configuring the system.\"\n }\n }\n section apm {\n optional ( intro.is_v12_0 == \"yes\" ) {\n choice saml_entity_id_format display \"xxlarge\" default \"URL\" {\n \"My EntityID is a URL\" => \"URL\" ,\n \"My EntityID is a URN\" => \"URN\"\n }\n\t\t\t\t\t\t\toptional ( general.assistance_options == \"full\" ) {\n\t\t\t\t\t\t\t\tmessage saml_entity_id_format_help \"The BIG-IP system needs to know whether the EntityID is formatted as a URL or URN. This choice determines settings in the APM SSO Configuration object. If you select URN, additional questions appear.\"\n\t\t\t\t\t\t\t}\n }\n string saml_entity_id required display \"xxlarge\"\n optional ( general.assistance_options == \"full\" ) {\n message saml_entity_id_help \"Specify the globally unique, persistent URL or URN that will be used to identify this Identity Provider to SAML federation partners. Examples of EntityID are https://login.example.com/idp/f5/ or idp:example:com:my_idp_name.\"\n }\n optional ( intro.is_v12_0 == \"yes\" && saml_entity_id_format == \"URN\" ) {\n string saml_idp_host required display \"xxlarge\"\n\t\t\t\t\t\t\toptional ( general.assistance_options == \"full\" ) {\n\t\t\t\t\t\t\t\tmessage saml_idp_host_help \"Because you selected that your EntityID is a URN, the BIG-IP system requires the hostname of your IdP deployment. Type the hostname of your IdP deployment in this field.\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n choice saml_idp_scheme display \"xxlarge\" default \"https\" {\n \"HTTPS\" => \"https\" ,\n \"HTTP\" => \"http\"\n }\n\t\t\t\t\t\t\toptional ( general.assistance_options == \"full\" ) {\n\t\t\t\t\t\t\t\tmessage saml_idp_scheme_help \"Because you selected that your EntityID is a URN, the BIG-IP system needs to know if your IdP scheme is HTTP or HTTPS. Select the appropriate value from the list.\"\n\t\t\t\t\t\t\t}\n }\n choice aaa_profile display \"xxlarge\" default \"/#create_new#\" tcl {\n\n set ::choices \"Create a new AAA Server\\t/#create_new#\\n\"\n append ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -nocomplain \\\n apm aaa active-directory]\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n }\n optional ( general.assistance_options == \"full\" ) {\n message aaa_profile_help \"Choose whether you want the iApp template to create a new AAA server object, or select the custom AAA server you created for this deployment. The BIG-IP APM AAA server configuration object contains information about the external AAA servers. Unless you have specific requirements, we recommend allowing the iApp to create a new AAA server for the deployment. \"\n }\n optional ( aaa_profile == \"/#create_new#\" ) {\n table active_directory_servers {\n string fqdn display \"large\" required validator \"FQDN\"\n string addr display \"large\" required validator \"IpAddress\"\n }\n optional ( general.assistance_options == \"full\" ) {\n message active_directory_servers_help \"Specify each of your Active Directory domain controllers, both FQDN and associated IP address, used for this environment. Click the Add button for additional rows.\"\n }\n string login_domain display \"xxlarge\" required\n optional ( general.assistance_options == \"full\" ) {\n message login_domain_help \"Specify the FQDN of the Active Directory deployment for your Office 365 users. This is the FQDN for your domain, such as example.com, rather than the FQDN for any specific host.\"\n }\n choice credentials display \"xxlarge\" default \"no\" {\n \"Anonymous binding is allowed\" => \"no\" ,\n \"Require credentials for authentication\" => \"yes\"\n }\n optional ( general.assistance_options == \"full\" ) {\n message credentials_help \"Choose whether your Active Directory implementation allows anonymous binding or not. If it does not, you must provide a user name and password with administrative permissions.\"\n }\n optional ( credentials == \"yes\" ) {\n string active_directory_username display \"xxlarge\" required\n optional ( general.assistance_options == \"full\" ) {\n message active_directory_username_help \"You must type the user name of an Active Directory account that has administrative permissions.\"\n }\n password active_directory_password display \"xxlarge\" required\n optional ( general.assistance_options == \"full\" ) {\n message active_directory_password_help \"Type the associated password.\"\n }\n }\n choice ad_monitor display \"xxlarge\" default \"ad_icmp\" {\n \"Create a new LDAP monitor for the Active Directory pool \" => \"ad_create\" ,\n \"Select an existing monitor for the Active Directory pool\" => \"ad_select\" ,\n \"Use a simple ICMP monitor for the Active Directory pool\" => \"ad_icmp\"\n }\n optional ( general.assistance_options == \"full\" ) {\n message active_directory_monitor_help \"Choose whether you want the template to create a new LDAP monitor for your Active Directory servers, use a simple ICMP/ping monitor, or you can choose an existing monitor you created for the servers.\"\n }\n optional ( ad_monitor == \"ad_create\" ) {\n string ad_user required display \"xxlarge\"\n message ad_user_critical \"The Active Directory service account you specify here must be set to never expire. A deleted or locked account will cause the BIG-IP system to mark your Active Directory pool members as unavailable, which takes them offline.\"\n password ad_password required display \"xxlarge\"\n message ad_password_important \"Credentials are stored in plaintext on your BIG-IP system.\"\n string ad_tree required display \"xxlarge\"\n optional ( general.assistance_options == \"full\" ) {\n message ad_tree_info \"Specify the LDAP tree for the user name you provided. ADSI editor, an administration tool for Active Directory LDAP administration, is useful for determining the correct LDAP tree value. For example, if the user name is 'user1' which is in the organizational unit 'F5 Users' and is in the domain 'f5.example.com', the LDAP tree would be: ou=F5 Users, dc=f5, dc=example, dc=com.\"\n }\n choice ad_secure display \"xxlarge\" {\n \"No, a secure protocol is not required\" => \"none\" ,\n \"Yes, SSL communication is required\" => \"ssl\" ,\n \"Yes, TLS communication is required\" => \"tls\"\n }\n optional ( general.assistance_options == \"full\" ) {\n message ad_secure_info \"Select whether your Active Directory implementation requires a secure protocol (SSL or TLS) for communication, or if it does not use a secure protocol.\"\n }\n optional ( general.config_mode == \"advanced\" ) {\n string ad_interval default \"10\" validator \"NonNegativeNumber\"\n optional ( general.assistance_options == \"full\" ) {\n message ad_interval_info \"Specify the number of seconds to use between each health monitor attempt. Members of this pool are marked down after four incorrect responses, and marked available after one correct response. \"\n }\n optional ( ad_secure == \"ssl\" ) {\n string ad_port_ssl default \"636\" required\n }\n optional ( ad_secure != \"ssl\" ) {\n string ad_port_not_ssl default \"389\" required\n }\n optional ( general.assistance_options == \"full\" ) {\n message ad_port_info \"Specify the port being used by your Active Directory deployment. The default port when using the TLS security protocol, or no security, is port 389. The default port used when using the SSL security protocol is 636.\"\n }\n }\n }\n optional ( ad_monitor == \"ad_select\" ) {\n choice ad_monitor_choice display \"xxlarge\" tcl {\n\n set ::choices \"[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -filter NAME != \"ldap\" ltm monitor ldap]\\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -filter NAME != \"external\" ltm monitor external]\"\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n }\n optional ( general.assistance_options == \"full\" ) {\n message ad_monitor_choice_help \"Select the existing LDAP health monitor you created for this deployment. Only health monitors with a Type of LDAP appear in this list.\"\n }\n }\n optional ( intro.is_v12_0 == \"yes\") {\n choice log_settings display \"xxlarge\" default \"/Common/default-log-setting\" tcl {\n set log \"\"\n catch {\n set log [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items apm log-setting]\n } err\n set ::choices \"Do not specify a logging profile for the APM profile\\t/#do_not_use#\\n$log\"\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n }\n optional ( general.assistance_options == \"full\" ) {\n message log_settings_help \"Select APM logging profile to use for the Access Policy created for this iApp deployment. You must have previously created the profile before it will appear in the list.\"\n }\n }\n }\n }\n section webui_virtual {\n string addr required validator \"IpAddress\" display \"xxlarge\"\n optional ( general.assistance_options == \"full\" ) {\n message addr_webui_help \"Specify the IP address for the BIG-IP virtual server. Clients will resolve the FQDN of the Identity Provider to this IP address.\"\n }\n string port required default \"443\" validator \"PortNumber\"\n optional ( general.assistance_options == \"full\" ) {\n message port_help \"Specify the associated service port. The default port is 443.\"\n }\n optional ( general.config_mode == \"advanced\" ) {\n optional ( intro.is_v12_0 == \"no\" ) {\n choice create_redir_vs default \"yes\" display \"xxlarge\" {\n \"Yes, redirect users to HTTPS\" => \"yes\" ,\n \"No, do not redirect users to HTTPS\" => \"no\"\n }\n optional ( general.assistance_options == \"full\" ) {\n message create_redir_vs_help \"It is common for users to mistakenly attempt insecure access (HTTP) to a secure application (HTTPS). The BIG-IP system can automatically redirect these connections to use an encrypted connection.\"\n }\n optional (create_redir_vs == \"yes\") {\n string redir_port default \"80\" required validator \"PortNumber\"\n }\n optional ( general.assistance_options == \"full\" ) {\n message redir_port_help \"Specify the port from which you want users redirected. The most common port for HTTP is 80.\"\n }\n }\n choice vlan_mode display \"xxlarge\" default \"enabled\" {\n \"Enable traffic on all VLANs and Tunnels\" => \"all\" ,\n \"Yes, enable traffic only on the VLANs I specify\" => \"enabled\" ,\n \"Yes, disable traffic only on the VLANs I specify\" => \"disabled\"\n }\n optional ( general.assistance_options == \"full\" ) {\n message vlan_help \"You can optionally configure the BIG-IP system to accept or deny client traffic from specific VLANs you have configured. If you leave the default, the BIG-IP system accepts traffic from all VLANs configured on the system. If you select to enable or disable traffic on specific VLANs, you must specify the VLANs in the next question. The VLAN objects must already be configured on this BIG-IP system before you can select them.\"\n }\n optional ( vlan_mode != \"all\" ) {\n multichoice client_vlan default tcl {\n\n set ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items net vlan]\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n } tcl {\n\n set ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items net vlan]\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n }\n optional ( vlan_mode == \"disabled\" ) {\n message disabled_vlan_help \"By default, all VLANs on the box are in the Selected list. Because you selected to disable client traffic from specific VLANs, if you do not move any of the VLANs to the Options list, traffic will be denied from ALL VLANs, and this configuration will not pass any traffic.\"\n }\n optional ( general.assistance_options == \"full\") {\n message client_vlan_help \"Because you selected you want to enable or disable traffic on specific VLANs in the previous question, use this section to specify the VLANs. By default, all VLANs on the BIG-IP system appear in the Selected box. Click any applicable VLANs and then use the Move buttons (<<) and (>>) to adjust list membership. The Selected box lists the VLANs and tunnels that are specifically enabled or disabled.\"\n }\n }\n choice lan_or_wan default \"WAN\" display \"xxlarge\" {\n \"Most clients connect over a WAN\" => \"WAN\" ,\n \"Most clients connect over a LAN\" => \"LAN\"\n }\n\n optional ( general.assistance_options == \"full\" ) {\n message lan_or_wan_help \"In order to configure the proper TCP optimization settings, you must specify whether the majority of your clients will be connecting to the BIG-IP system over a WAN or a LAN.\"\n }\n optional ( webui_virtual.lan_or_wan == \"WAN\" ) {\n choice tcp_wan_opt display \"xxlarge\"\n default \"/#create_new#\" tcl {\n\n set ::choices \"Create a new tcp-wan-optimized profile (recommended)\\t/#create_new#\\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items ltm profile tcp]\"\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n }\n }\n optional ( webui_virtual.lan_or_wan == \"LAN\" ) {\n choice tcp_lan_opt display \"xxlarge\"\n default \"/#create_new#\" tcl {\n\n set ::choices \"Create a new tcp-lan-optimized profile (recommended)\\t/#create_new#\\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items ltm profile tcp]\"\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n }\n }\n message lan_or_wan_note \"To select a network optimization profile from the following list, it must already be present on the BIG-IP system. Creating a custom profile is not a part of this template; see Local Traffic >> Profiles : Protocol : TCP to create a network profile. To select any new profiles you create, you need to restart or reconfigure this template.\"\n\n choice http display \"xxlarge\" default \"/#create_new#\" tcl {\n\n set ::choices \"Create a new HTTP profile (recommended)\\t/#create_new#\\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items ltm profile http]\"\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n }\n optional ( general.assistance_options == \"full\" ) {\n message http_help \" Choose whether you want the iApp template to create a new HTTP profile, or select the custom HTTP profile you created for this deployment. Unless you have specific requirements, we recommend allowing the iApp to create a new HTTP profile for the deployment.\"\n }\n }\n optional ( general.config_mode == \"advanced\" ) {\n choice clientssl display \"xxlarge\"\n default \"/#create_new#\" tcl {\n\n set ::choices \"Create a new Client SSL profile\\t/#create_new#\\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items ltm profile client-ssl]\"\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n }\n optional ( general.assistance_options == \"full\" ) {\n message clientssl_help \"If you have already created an Client SSL profile that includes the appropriate certificate and key, you can select it from the list. Otherwise, the iApp creates a new Client SSL profile and asks for the appropriate certificate and key in the following questions. Note that \"\n }\n }\n optional ( general.config_mode == \"basic\" || ( general.config_mode == \"advanced\" && clientssl == \"/#create_new#\" ) ) {\n choice cert default \"/Common/default.crt\" display \"xxlarge\" tcl {\n\n set ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -norecursive -filter NAME !~ ca-bundle.crt|f5-irule.crt sys file ssl-cert]\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n }\n optional ( general.assistance_options == \"full\" ) {\n message cert_webui_help \"Select the name of the certificate the system uses for client-side SSL processing. The certificate must already be present on the BIG-IP system in order to select it. To select any new certificates and keys you import, you need to restart or reconfigure this template.\"\n }\n choice key default \"/Common/default.key\" display \"xxlarge\" tcl {\n\n set ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -norecursive sys file ssl-key]\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n }\n optional ( general.assistance_options == \"full\" ) {\n message key_webui_help \"Select the name of the associated SSL key.\"\n }\n optional (cert == \"/Common/ca-bundle.crt\"\n || cert == \"/Common/f5-irule.crt\"\n || cert == \"/Common/default.crt\"\n || key == \"/Common/default.key\" ) {\n message key_cert_critical \"You have selected a default BIG-IP certificate and/or key. This application service configuration is incomplete and will not be secure until you import and assign a trusted certificate and key that are valid for all fully qualified domain names used to access the application. See Local Traffic >> SSL Certificate List for importing certificates and keys. To select any new certificates and keys you import, you need to restart or reconfigure this template.\"\n }\n optional ( general.config_mode == \"advanced\" && clientssl == \"/#create_new#\" ) {\n choice chainssl display \"xxlarge\"\n default \"/#do_not_use#\" tcl {\n\n set ::choices \"Do not use an intermediate certificate\\t/#do_not_use#\\n[tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -norecursive sys file ssl-cert]\"\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n }\n optional ( general.assistance_options == \"full\" ) {\n message cert_chain_webui_help \"Intermediate certificates or intermediate certificate chains are used to help systems which depend on SSL certificates for peer identification. The chain certificate is intended to create a chain of trust between the CA that signed the certificate and the CA that is already trusted by the recipient of the certificate. This allows the recipient to verify the validity of the certificates presented, even when the signing CA is unknown. Chain certificates must be created or imported onto this BIG-IP system prior to running this iApp. See SOL13302 on http://support.f5.com for help on creating an intermediate certificate chain.\"\n }\n }\n }\n }\n section idp_encryption {\n choice cert default \"/Common/default.crt\" display \"xxlarge\" tcl {\n\n set ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -norecursive -filter NAME !~ ca-bundle.crt|f5-irule.crt sys file ssl-cert]\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n }\n optional ( general.assistance_options == \"full\" ) {\n message cert_help \"Select the name of the certificate you imported to use to encrypt your SAML Assertion. The certificate must already be present on the BIG-IP system in order to select it. To select any new certificates and keys you import, you need to restart or reconfigure this template.\"\n }\n message client_ssl_important \"The certificate can be either self-signed certificate generated by the BIG-IP system, or you can import a certificate for this purpose. The only restriction is you cannot use a wildcard certificate to sign SAML assertions to Office 365.\"\n\n choice key default \"/Common/default.key\" display \"xxlarge\" tcl {\n\n set ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -norecursive sys file ssl-key]\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n }\n optional ( general.assistance_options == \"full\" ) {\n message key_help \"Select the name of the associated SSL key.\"\n }\n }\n optional ( general.config_mode == \"advanced\" ) {\n\n section irules {\n message irule_1_help \"Improper use or misconfiguration of an iRule can result in unwanted application behavior and poor performance of your BIG-IP system. For this reason we recommended you verify the impact of an iRule prior to deployment in a production environment.\"\n optional ( general.assistance_options == \"full\" ) {\n message irule_2_help \"The BIG-IP system supports a scripting language to allow an administrator to instruct the system to intercept, inspect, transform, direct and track inbound or outbound application traffic. An iRule contains the set of instructions the system uses to process data flowing through it, either in the header or payload of a packet.\"\n message irule_3_help \"Correct event priority is critical when assigning multiple iRules. For more information about iRule event priority, see https://devcentral.f5.com/wiki/iRules.priority.ashx.\"\n }\n multichoice irules display \"xlarge\" tcl {\n\n set ::choices [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_get_items -filter NAME !~ \"^_sys_\" ltm rule]\n return [tmsh::run_proc f5.iapp.1.3.0.cli:iapp_safe_display ::choices]\n }\n }\n }\n }\n\n text {\n\n intro \"Welcome to the iApp template for Microsoft Office 365 SAML Identity Provider\"\n \n intro.hello_supported \"Supported Software:\"\n intro.hello \"Introduction\"\n intro.check_for_updates \"Check for updates\"\n intro.version_sorry \"We're sorry\"\n intro.sorry \"We're sorry\"\n intro.apm_opportunity \"Additional features available\"\n intro.prereqs_1 \"Prerequisites\"\n intro.prereqs_2 \"\"\n\n general \"Template Options\"\n general.assistance_options \"Do you want to see inline help?\"\n general.assistance_options_about \"\"\n general.config_mode \"Which configuration mode do you want to use?\"\n general.config_mode_info \"\"\n\n apm \"BIG-IP APM Configuration\"\n apm.aaa_profile \"Should the iApp create a new AAA server or use an existing one?\"\n apm.aaa_profile_help \"\"\n apm.active_directory_servers \"Which Active Directory server IP address in your domain can this BIG-IP system contact?\"\n apm.active_directory_servers_help \"\"\n apm.active_directory_servers.fqdn \"FQDN\"\n apm.active_directory_servers.addr \"IP\"\n apm.login_domain \"What is the FQDN of the Active Directory implementation for your Office 365 users?\"\n apm.login_domain_help \"\"\n apm.credentials \"Does your Active Directory domain allow anonymous binding?\"\n apm.credentials_help \"\"\n apm.active_directory_username \"Which Active Directory user with administrative permissions do you want to use?\"\n apm.active_directory_username_help \"\"\n apm.active_directory_password \"What is the password associated with that account?\"\n apm.active_directory_password_help \"\"\n apm.ad_monitor \"How do you want to handle health monitoring for this pool?\"\n apm.active_directory_monitor_help \"\"\n apm.ad_user \"Which Active Directory user name should the monitor use?\"\n apm.ad_user_critical \"CRITICAL\"\n apm.ad_password \"What is the associated password?\"\n apm.ad_password_important \"IMPORTANT\"\n apm.ad_tree \"What is the LDAP tree for this user account?\"\n apm.ad_tree_info \"\"\n apm.ad_secure \"Does your Active Directory domain require a secure protocol for communication?\"\n apm.ad_secure_info \"\"\n apm.ad_interval \"How many seconds between Active Directory health checks?\"\n apm.ad_interval_info \"\"\n apm.ad_port_ssl \"Which port is used for Active Directory communication?\"\n apm.ad_port_not_ssl \"Which port is used for Active Directory communication?\"\n apm.ad_port_info \"\"\n apm.ad_monitor_choice \"Which health monitor do you want to use?\"\n apm.ad_monitor_choice_help \"\"\n apm.saml_entity_id_format \"How is your EntityID formatted?\"\n\t\t\t\t\t\tapm.saml_entity_id_format_help \"\"\n apm.saml_entity_id \"What EntityID do you want to use for your Office 365 IdP?\"\n apm.saml_entity_id_help \"\"\n apm.saml_idp_host \"What is the hostname of your IdP deployment?\"\n\t\t\t\t\t\tapm.saml_idp_host_help \"\"\n apm.saml_idp_scheme \"What is the IdP scheme?\"\n\t\t\t\t\t\tapm.saml_idp_scheme_help \"\"\n apm.log_settings \"Which log settings would you like to use to log APM events?\"\n apm.log_settings_help \"\"\n\n webui_virtual \"BIG-IP IdP Virtual Server\"\n webui_virtual.addr \"What is the IP address clients will use to access the BIG-IP IdP Service?\"\n webui_virtual.addr_webui_help \"\"\n webui_virtual.port \"What port do you want to use for the virtual server?\"\n webui_virtual.port_help \"\"\n webui_virtual.create_redir_vs \"Do you want to redirect inbound HTTP traffic to HTTPS?\"\n webui_virtual.create_redir_vs_help \"\"\n webui_virtual.redir_port \"From which port should HTTP traffic be redirected?\"\n webui_virtual.redir_port_help \"\"\n webui_virtual.vlan_mode \"Do you want to restrict client traffic to specific VLANs?\"\n webui_virtual.vlan_help \"\"\n webui_virtual.client_vlan \"On which VLANs should traffic be enabled or disabled?\"\n webui_virtual.client_vlan_help \"\"\n webui_virtual.disabled_vlan_help \"WARNING\"\n webui_virtual.clientssl \"Do you want to create a new client SSL profile or use an existing one?\"\n webui_virtual.clientssl_help \"\"\n webui_virtual.cert \"Which certificate do you want this BIG-IP system to use for client authentication?\"\n webui_virtual.key_cert_critical \"WARNING:\"\n webui_virtual.cert_webui_help \"\"\n webui_virtual.key \"What is the associated private key?\"\n webui_virtual.key_webui_help \"\"\n webui_virtual.chainssl \"Do you need to use an intermediate certificate?\"\n webui_virtual.cert_chain_webui_help \"\"\n webui_virtual.lan_or_wan \"Will clients be connecting to this BIG-IP LTM virtual server primarily over a LAN or a WAN?\"\n webui_virtual.lan_or_wan_help \"\"\n webui_virtual.tcp_lan_opt \"How do you want to optimize client-side connections?\"\n webui_virtual.tcp_wan_opt \"How do you want to optimize client-side connections?\"\n webui_virtual.lan_or_wan_note \"\"\n webui_virtual.http \"Which HTTP profile do you want to use?\"\n webui_virtual.http_help \"\"\n\n idp_encryption \"IDP Encryption Certificate and key\"\n idp_encryption.cert \"Which certificate do you want to use to encrypt your SAML Assertion?\"\n idp_encryption.cert_help \"\"\n idp_encryption.client_ssl_important \"IMPORTANT\"\n idp_encryption.key \"What is the associated private key?\"\n idp_encryption.key_help \"\"\n\n\n irules \"iRules\"\n irules.irules \"Do you want to add any custom iRules to the TCP virtual server?\"\n irules.irule_1_help \"WARNING\"\n irules.irule_2_help \"\"\n irules.irule_3_help \"\"\n\n }\n }\n role-acl { admin manager resource-admin }\n run-as none\n }\n }\n requires-bigip-version-max none\n requires-bigip-version-min 11.3.0\n requires-modules { apm }\n}\n" diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_parser.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_parser.json deleted file mode 100644 index c7bdc5fba..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_parser.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:ltm:message-routing:generic:protocol:protocolstate", - "name": "foobar", - "partition": "Common", - "fullPath": "/Common/foobar", - "generation": 534, - "selfLink": "https://localhost/mgmt/tm/ltm/message-routing/generic/protocol/~Common~foobar?ver=14.1.0.3", - "defaultsFrom": "/Common/genericmsg", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/message-routing/generic/protocol/~Common~genericmsg?ver=14.1.0.3" - }, - "disableParser": "no", - "maxEgressBuffer": 32768, - "maxMessageSize": 32768, - "noResponse": "no" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_peer.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_peer.json deleted file mode 100644 index bda5b8e58..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_peer.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "kind": "tm:ltm:message-routing:generic:peer:peerstate", - "name": "test", - "partition": "Common", - "fullPath": "/Common/test", - "generation": 177, - "selfLink": "https://localhost/mgmt/tm/ltm/message-routing/generic/peer/~Common~test?ver=14.1.0.3", - "autoInitialization": "disabled", - "autoInitializationInterval": 5000, - "connectionMode": "per-peer", - "description": "foobar", - "numberConnections": 1, - "pool": "/Common/example", - "poolReference": { - "link": "https://localhost/mgmt/tm/ltm/pool/~Common~example?ver=14.1.0.3" - }, - "ratio": 1, - "transportConfig": "/Common/test_tranport", - "transportConfigReference": { - "link": "https://localhost/mgmt/tm/ltm/message-routing/generic/transport-config/~Common~test_tranport?ver=14.1.0.3" - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_route.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_route.json deleted file mode 100644 index f8299f029..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_route.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:ltm:message-routing:generic:route:routestate", - "name": "some", - "partition": "Common", - "fullPath": "/Common/some", - "generation": 228, - "selfLink": "https://localhost/mgmt/tm/ltm/message-routing/generic/route/~Common~some?ver=14.1.0.3", - "destinationAddress": "annoying_user", - "peerSelectionMode": "sequential", - "sourceAddress": "99.99.99.99", - "peers": [ - "/Common/testy" - ], - "peersReference": [ - { - "link": "https://localhost/mgmt/tm/ltm/message-routing/generic/peer/~Common~testy?ver=14.1.0.3" - } - ] - } diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_router.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_router.json deleted file mode 100644 index 45c672224..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_router.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "kind": "tm:ltm:message-routing:generic:router:routerstate", - "name": "messagerouter", - "partition": "Common", - "fullPath": "/Common/messagerouter", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/message-routing/generic/router/~Common~messagerouter?ver=14.1.0.3", - "ignoreClientPort": "no", - "inheritedTrafficGroup": "true", - "iruleScopeMessage": "no", - "maxPayloadPendingBytes": 32768, - "maxPendingBytes": 23768, - "maxPendingMessages": 64, - "maxRetries": 1, - "mirror": "disabled", - "mirroredMessageSweeperInterval": 1000, - "trafficGroup": "/Common/traffic-group-1", - "trafficGroupReference": { - "link": "https://localhost/mgmt/tm/cm/traffic-group/~Common~traffic-group-1?ver=14.1.0.3" - }, - "useLocalConnection": "yes" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_transport_config.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_transport_config.json deleted file mode 100644 index 15121910c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_generic_transport_config.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "kind": "tm:ltm:message-routing:generic:transport-config:transport-configstate", - "name": "gen1", - "partition": "Common", - "fullPath": "/Common/gen1", - "generation": 643, - "selfLink": "https://localhost/mgmt/tm/ltm/message-routing/generic/transport-config/~Common~gen1?expandSubcollections=true&ver=14.1.0.3", - "ipProtocol": "tcp", - "sourceAddressTranslation": { - "pool": "/Common/test_snat", - "poolReference": { - "link": "https://localhost/mgmt/tm/ltm/snatpool/~Common~test_snat?ver=14.1.0.3" - }, - "type": "snat" - }, - "sourcePort": 0, - "rules": [ - "/Common/test" - ], - "rulesReference": [ - { - "link": "https://localhost/mgmt/tm/ltm/rule/~Common~test?ver=14.1.0.3" - } - ], - "profilesReference": { - "link": "https://localhost/mgmt/tm/ltm/message-routing/generic/transport-config/~Common~gen1/profiles?ver=14.1.0.3", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:message-routing:generic:transport-config:profiles:profilesstate", - "name": "diametersession", - "partition": "Common", - "fullPath": "/Common/diametersession", - "generation": 626, - "selfLink": "https://localhost/mgmt/tm/ltm/message-routing/generic/transport-config/~Common~gen1/profiles/~Common~diametersession?ver=14.1.0.3", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/message-routing/diameter/profile/session/~Common~diametersession?ver=14.1.0.3" - } - }, - { - "kind": "tm:ltm:message-routing:generic:transport-config:profiles:profilesstate", - "name": "tcp", - "partition": "Common", - "fullPath": "/Common/tcp", - "generation": 626, - "selfLink": "https://localhost/mgmt/tm/ltm/message-routing/generic/transport-config/~Common~gen1/profiles/~Common~tcp?ver=14.1.0.3", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/tcp/~Common~tcp?ver=14.1.0.3" - } - } - ] - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_datacenter_default.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_datacenter_default.json deleted file mode 100644 index 9e1f3b8d0..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_datacenter_default.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "kind": "tm:gtm:datacenter:datacenterstate", - "name": "asd", - "partition": "Common", - "fullPath": "/Common/asd", - "generation": 278, - "selfLink": "https://localhost/mgmt/tm/gtm/datacenter/~Common~asd?ver=12.1.2", - "enabled": true -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_datacenter_disabled.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_datacenter_disabled.json deleted file mode 100644 index 8373ac823..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_datacenter_disabled.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "kind": "tm:gtm:datacenter:datacenterstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 303, - "selfLink": "https://localhost/mgmt/tm/gtm/datacenter/~Common~foo?ver=12.1.2", - "contact": "admin@root.local", - "description": "This is a foo description", - "disabled": true, - "location": "New York" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_global_settings_general_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_global_settings_general_1.json deleted file mode 100644 index 680328762..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_global_settings_general_1.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:gtm:global-settings:general:generalstate", - "selfLink": "https://localhost/mgmt/tm/gtm/global-settings/general?ver=13.1.0.4", - "autoDiscovery": "yes", - "autoDiscoveryInterval": 30, - "automaticConfigurationSaveTimeout": 15, - "cacheLdnsServers": "yes", - "domainNameCheck": "allow-underscore", - "drainPersistentRequests": "yes", - "forwardStatus": "disabled", - "gtmSetsRecursion": "no", - "heartbeatInterval": 10, - "monitorDisabledObjects": "no", - "nethsmTimeout": 20, - "sendWildcardRrs": "disabled", - "staticPersistCidrIpv4": 32, - "staticPersistCidrIpv6": 128, - "synchronization": "no", - "synchronizationGroupName": "default", - "synchronizationTimeTolerance": 10, - "synchronizationTimeout": 180, - "synchronizeZoneFiles": "no", - "synchronizeZoneFilesTimeout": 300, - "virtualsDependOnServerState": "yes" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_irules.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_irules.json deleted file mode 100644 index 7ca9da1bf..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_irules.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "kind": "tm:gtm:rule:rulestate", - "name": "asdf", - "partition": "Common", - "fullPath": "/Common/asdf", - "generation": 92, - "selfLink": "https://localhost/mgmt/tm/gtm/rule/~Common~asdf?ver=12.1.2", - "apiAnonymous": "when DNS_REQUEST {\n if { [IP::addr [IP::remote_addr] equals 10.254.254.0/24] } {\n cname test.affilate.example.com\n\n } elseif { [IP::addr [IP::remote_addr] equals 10.0.0.0/8] } {\n cname test.internal.example.com\n\n }\n #everything else will be handled by the default pools in the main WIP\n}" - }, - { - "kind": "tm:gtm:rule:rulestate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 93, - "selfLink": "https://localhost/mgmt/tm/gtm/rule/~Common~foo?ver=12.1.2", - "apiAnonymous": "when LB_SELECTED {\n # Capture IP address chosen by WIP load balancing\n set wipHost [LB::server addr]\n}\n\nwhen LB_FAILED {\n set wipHost [LB::server addr]\n}" - } - ] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_monitor_firepass_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_monitor_firepass_1.json deleted file mode 100644 index 4b0f8f720..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_monitor_firepass_1.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:gtm:monitor:firepass:firepassstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/gtm/monitor/firepass/~Common~foo?ver=13.1.0.4", - "cipherlist": "HIGH:!ADH", - "concurrencyLimit": 95, - "defaultsFrom": "/Common/firepass_gtm", - "destination": "1.1.1.1:80", - "ignoreDownResponse": "enabled", - "interval": 30, - "maxLoadAverage": 12, - "password": "secret", - "probeTimeout": 5, - "timeout": 90, - "username": "gtmuser" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_monitor_http_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_monitor_http_1.json deleted file mode 100644 index 98151e51f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_monitor_http_1.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "kind": "tm:gtm:monitor:http:httpstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/gtm/monitor/http/~Common~foo?ver=13.1.0.4", - "defaultsFrom": "/Common/http", - "description": "my description", - "destination": "3.3.3.3:8080", - "ignoreDownResponse": "disabled", - "interval": 30, - "password": "secret", - "probeTimeout": 5, - "recv": "the receive string", - "reverse": "enabled", - "send": "GET /", - "timeout": 120, - "transparent": "enabled", - "username": "user1" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_monitor_tcp_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_monitor_tcp_1.json deleted file mode 100644 index d0d90152c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_monitor_tcp_1.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "kind": "tm:gtm:monitor:tcp:tcpstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/gtm/monitor/tcp/~Common~foo?ver=13.1.0.4", - "defaultsFrom": "/Common/tcp", - "destination": "1.1.1.1:80", - "ignoreDownResponse": "disabled", - "interval": 30, - "probeTimeout": 5, - "recv": "the receive string", - "reverse": "enabled", - "send": "the send string", - "timeout": 120, - "transparent": "enabled" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_collection.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_collection.json deleted file mode 100644 index 7ed534450..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_collection.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "kind": "tm:gtm:pool:a:acollectionstate", - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a?expandSubcollections=true&ver=13.0.0", - "items": [ - { - "kind": "tm:gtm:pool:a:astate", - "name": "foo.pool", - "partition": "Common", - "fullPath": "/Common/foo.pool", - "generation": 216, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo.pool?ver=13.0.0", - "alternateMode": "round-robin", - "dynamicRatio": "disabled", - "enabled": true, - "fallbackIp": "any", - "fallbackMode": "return-to-dns", - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "loadBalancingMode": "round-robin", - "manualResume": "disabled", - "maxAnswersReturned": 1, - "monitor": "default", - "qosHitRatio": 5, - "qosHops": 0, - "qosKilobytesSecond": 3, - "qosLcs": 30, - "qosPacketRate": 1, - "qosRtt": 50, - "qosTopology": 0, - "qosVsCapacity": 0, - "qosVsScore": 0, - "ttl": 30, - "verifyMemberAvailability": "enabled", - "membersReference": { - "link": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo.pool/members?ver=13.0.0", - "isSubcollection": true - } - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_default.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_default.json deleted file mode 100644 index f90a84b21..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_default.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "kind": "tm:gtm:pool:a:astate", - "name": "asdf", - "partition": "Common", - "fullPath": "/Common/asdf", - "generation": 94, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~asdf?ver=12.1.2", - "alternateMode": "round-robin", - "dynamicRatio": "disabled", - "enabled": true, - "fallbackIp": "any", - "fallbackMode": "return-to-dns", - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "loadBalancingMode": "round-robin", - "manualResume": "disabled", - "maxAnswersReturned": 1, - "monitor": "default", - "qosHitRatio": 5, - "qosHops": 0, - "qosKilobytesSecond": 3, - "qosLcs": 30, - "qosPacketRate": 1, - "qosRtt": 50, - "qosTopology": 0, - "qosVsCapacity": 0, - "qosVsScore": 0, - "ttl": 30, - "verifyMemberAvailability": "enabled", - "membersReference": { - "link": "https://localhost/mgmt/tm/gtm/pool/a/~Common~asdf/members?ver=12.1.2", - "isSubcollection": true - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_example_stats.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_example_stats.json deleted file mode 100644 index 70388c914..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_example_stats.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "kind": "tm:gtm:pool:a:astats", - "generation": 216, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo.pool/stats?ver=13.0.0", - "entries": { - "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo.pool/~Common~foo.pool:A/stats": { - "nestedStats": { - "kind": "tm:gtm:pool:a:astats", - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo.pool/~Common~foo.pool:A/stats?ver=13.0.0", - "entries": { - "alternate": { - "value": 0 - }, - "dropped": { - "value": 0 - }, - "fallback": { - "value": 0 - }, - "tmName": { - "description": "/Common/foo.pool" - }, - "poolType": { - "description": "A" - }, - "preferred": { - "value": 0 - }, - "returnFromDns": { - "value": 0 - }, - "returnToDns": { - "value": 0 - }, - "status.availabilityState": { - "description": "offline" - }, - "status.enabledState": { - "description": "enabled" - }, - "status.statusReason": { - "description": "No enabled pool members available" - } - } - } - } - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_member_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_member_1.json deleted file mode 100644 index 44ae64a66..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_member_1.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "kind": "tm:gtm:pool:a:members:membersstate", - "name": "foo_gtm_server:bar", - "partition": "Common", - "fullPath": "/Common/foo_gtm_server:bar", - "generation": 398, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo-pool/members/~Common~foo_gtm_server:bar?ver=13.0.0", - "enabled": true, - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "memberOrder": 1, - "monitor": "default", - "ratio": 1 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_with_members_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_with_members_1.json deleted file mode 100644 index ba2ac716f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_pool_a_with_members_1.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "kind": "tm:gtm:pool:a:astate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 142, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo?expandSubcollections=true&ver=12.0.0", - "alternateMode": "round-robin", - "dynamicRatio": "disabled", - "enabled": true, - "fallbackIp": "any", - "fallbackMode": "return-to-dns", - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "loadBalancingMode": "round-robin", - "manualResume": "disabled", - "maxAnswersReturned": 1, - "monitor": "default", - "qosHitRatio": 5, - "qosHops": 0, - "qosKilobytesSecond": 3, - "qosLcs": 30, - "qosPacketRate": 1, - "qosRtt": 50, - "qosTopology": 0, - "qosVsCapacity": 0, - "qosVsScore": 0, - "ttl": 30, - "verifyMemberAvailability": "enabled", - "membersReference": { - "link": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo/members?ver=12.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:gtm:pool:a:members:membersstate", - "name": "server1:vs1", - "partition": "Common", - "fullPath": "/Common/server1:vs1", - "generation": 141, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo/members/~Common~server1:vs1?ver=12.0.0", - "enabled": true, - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "memberOrder": 0, - "monitor": "default", - "ratio": 1 - }, - { - "kind": "tm:gtm:pool:a:members:membersstate", - "name": "server1:vs2", - "partition": "Common", - "fullPath": "/Common/server1:vs2", - "generation": 142, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo/members/~Common~server1:vs1?ver=12.0.0", - "enabled": true, - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "memberOrder": 1, - "monitor": "/Common/tcp ", - "ratio": 1 - }, - { - "kind": "tm:gtm:pool:a:members:membersstate", - "name": "server1:vs3", - "partition": "Common", - "fullPath": "/Common/server1:vs3", - "generation": 141, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo/members/~Common~server1:vs3?ver=12.0.0", - "enabled": true, - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "memberOrder": 2, - "monitor": "default", - "ratio": 1 - } - ] - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_server_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_server_1.json deleted file mode 100644 index 4a14d9f27..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_server_1.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "kind": "tm:gtm:server:serverstate", - "name": "baz", - "partition": "Common", - "fullPath": "/Common/baz", - "generation": 270, - "selfLink": "https://localhost/mgmt/tm/gtm/server/~Common~baz?ver=13.0.0", - "datacenter": "/Common/foo", - "datacenterReference": { - "link": "https://localhost/mgmt/tm/gtm/datacenter/~Common~foo?ver=13.0.0" - }, - "enabled": true, - "exposeRouteDomains": "no", - "iqAllowPath": "yes", - "iqAllowServiceCheck": "yes", - "iqAllowSnmp": "yes", - "limitCpuUsage": 0, - "limitCpuUsageStatus": "disabled", - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "limitMemAvail": 0, - "limitMemAvailStatus": "disabled", - "linkDiscovery": "disabled", - "monitor": "/Common/bigip ", - "proberFallback": "inherit", - "proberPreference": "inherit", - "product": "bigip", - "virtualServerDiscovery": "disabled", - "addresses": [ - { - "name": "1.1.1.1", - "deviceName": "bigip1", - "translation": "10.10.10.10" - }, - { - "name": "2.2.2.2", - "deviceName": "bigip2", - "translation": "20.20.20.20" - }, - { - "name": "3.3.3.3", - "deviceName": "bigip2", - "translation": "20.20.20.20" - }, - { - "name": "4.4.4.4", - "deviceName": "bigip3", - "translation": "none" - }, - { - "name": "5.5.5.5", - "deviceName": "bigip3", - "translation": "none" - } - ], - "devicesReference": { - "link": "https://localhost/mgmt/tm/gtm/server/~Common~baz/devices?ver=13.0.0", - "isSubcollection": true - }, - "virtualServersReference": { - "link": "https://localhost/mgmt/tm/gtm/server/~Common~baz/virtual-servers?ver=13.0.0", - "isSubcollection": true - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_server_virtual_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_server_virtual_1.json deleted file mode 100644 index 566e942b6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_server_virtual_1.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "kind": "tm:gtm:server:virtual-servers:virtual-serversstate", - "name": "vs1", - "fullPath": "vs1", - "generation": 127, - "selfLink": "https://localhost/mgmt/tm/gtm/server/~Common~server1/virtual-servers/vs1?ver=13.0.0", - "destination": "4.4.4.4:0", - "enabled": true, - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "translationAddress": "none", - "translationPort": 0 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_server_virtual_2.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_server_virtual_2.json deleted file mode 100644 index 336c391b1..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_gtm_server_virtual_2.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "kind": "tm:gtm:server:virtual-servers:virtual-serversstate", - "name": "vs2", - "fullPath": "vs2", - "generation": 129, - "selfLink": "https://localhost/mgmt/tm/gtm/server/~Common~server1/virtual-servers/vs2?ver=13.0.0", - "destination": "6.6.6.6:8080", - "enabled": true, - "limitMaxBps": 100, - "limitMaxBpsStatus": "enabled", - "limitMaxConnections": 300, - "limitMaxConnectionsStatus": "enabled", - "limitMaxPps": 200, - "limitMaxPpsStatus": "enabled", - "monitor": "/Common/gtp ", - "translationAddress": "none", - "translationPort": 0 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_identified_devices_config_discovery.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_identified_devices_config_discovery.json deleted file mode 100644 index 7732dafaf..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_identified_devices_config_discovery.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "machineId": "f34e87f5-0494-4707-8dcc-980c7c0cdec3", - "discoveryAddress": "10.2.2.2", - "generation": 3, - "lastUpdateMicros": 1490030910437621, - "kind": "shared:identified-devices:config:discovery:discoveryconfigworkerstate", - "selfLink": "https://localhost/mgmt/shared/identified-devices/config/discovery" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_imish_output_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_imish_output_1.json deleted file mode 100644 index a2b72a2a7..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_imish_output_1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "kind": "tm:util:bash:runstate", - "command": "run", - "utilCmdArgs": "-c 'imish -r 0 -e \"show running-config\"'", - "commandResult": "!\nno service password-encryption\n!\nline con 0\n login\nline vty 0 39\n login\n!\nend\n\n" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_interface.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_interface.json deleted file mode 100644 index df3891d52..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_interface.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "kind": "tm:net:interface:interfacestate", - "name": "1.1", - "fullPath": "1.1", - "generation": 1710, - "selfLink": "https://localhost/mgmt/tm/net/interface/1.1?ver=13.1.1.4", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 48, - "lldpAdmin": "txonly", - "lldpTlvmap": 114680, - "macAddress": "fa:16:3e:7d:29:78", - "mediaActive": "none", - "mediaFixed": "10000T-FD", - "mediaMax": "auto", - "mediaSfp": "auto", - "mtu": 9198, - "portFwdMode": "l3", - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "no" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_license_pool.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_license_pool.json deleted file mode 100644 index 8e3785ad8..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_license_pool.json +++ /dev/null @@ -1,398 +0,0 @@ -{ - "uuid": "d0da1b92-0254-4df1-89af-54338d3c7231", - "baseRegKey": "11111-22222-33333-44444-5555555", - "method": "AUTOMATIC", - "name": "asdf", - "licenseText": "#\nAuth vers : 5b\n#\n# iWorkflow Product License File\n# DO NOT EDIT THIS FILE!!\n#\n# Technical Support:\n# Web tech.f5.com\n# Phone (206) 272.6888\n# Fax (206) 272.6802\n# Email (support) support@f5.com\n# AskF5 askf5@f5.com\n# #\n# Only the specific use referenced above is allowed. Any other uses are prohibited.\n#\n#\n# Warning: Changing the system time while this system is running\n# with a time-limited license may make the system unusable.\n#\nUsage : F5 Internal Product Development\n#\n#\n# Only the specific use referenced above is allowed. Any other uses are prohibited.\n#\nVendor : F5 Networks, Inc.\n#\n# Module List \n#\nactive module : APM, Base, VE GBB (500 CCU)|V93...356|Anti-Virus Checks|Base Endpoint Security Checks|Firewall Checks|Machine Certificate Checks|Network Access|Protected Workspace|Secure Virtual Keyboard|APM, Web Application|App Tunnel|Remote Desktop\nactive module : VEP3, Best, 1G, 25 Instances|S71...929|IPV6 Gateway|Rate Shaping|Ram Cache|SDN Services, VE|DENY-VER-V11.4.X|Max Compression, VE|Acceleration Manager, VE|Recycle, BIG-IP, VE|DNS-GTM, Base, 1Gbps|SSL, VE|VEP3, Best, 1G, Add 25 Instances|Routing Bundle, VE|AFM, VE|ASM, VE|DNSSEC|CGN, BIG-IP VE, AFM ONLY|DNS Rate Limit, 1000 QPS|GTM Rate, 1000|PSM, VE\noptional module : Concurrent Users\noptional module : Concurrent Users and Access Sessions, VE\noptional module : VEP3, Best, 1G, Add 4 Instances\n#\n# Accumulated Tokens for Module\n# DNS-GTM, Base, 1Gbps gtm_rate_fallback 1000 key S71...929\n#\n# Accumulated Tokens for Module\n# DNS-GTM, Base, 1Gbps gtm_rate_limit 1000 key S71...929\n#\n# Accumulated Tokens for Module\n# DNS-GTM, Base, 1Gbps ltm_dns_rate_fallback 1000 key S71...929\n#\n# Accumulated Tokens for Module\n# DNS-GTM, Base, 1Gbps ltm_dns_rate_limit 1000 key S71...929\n#\ngtm_rate_fallback : 1000\ngtm_rate_limit : 1000\nltm_dns_rate_fallback : 1000\nltm_dns_rate_limit : 1000\n#\n# Accumulated Tokens for Modules\n# VEP3, Best, 1G, 25 Instances purchased_license_pool_count 25 key S71...929\n# VEP3, Best, 1G, Add 25 Instances purchased_license_pool_count 25 key S71...929\n#\npurchased_license_pool_count : 50\n#\n# Accumulated Tokens for Module\n# CGN, BIG-IP VE, AFM ONLY perf_VE_mem_Mb 1 key S71...929\n#\nperf_VE_mem_Mb : 1\n#\n# Accumulated Tokens for Module\n# VEP3, Best, 1G, 25 Instances perf_VE_cores 8 key S71...929\n#\n# Accumulated Tokens for Module\n# VEP3, Best, 1G, 25 Instances perf_VE_throughput_Mbps 1000 key S71...929\n#\nperf_VE_cores : 8\nperf_VE_throughput_Mbps : 1000\n#\n# Accumulated Tokens for Module\n# APM, Base, VE GBB (500 CCU) apm_access_sessions 2500 key V93...356\n#\n# Accumulated Tokens for Module\n# APM, Base, VE GBB (500 CCU) apm_sessions 500 key V93...356\n#\n# Accumulated Tokens for Module\n# APM, Base, VE GBB (500 CCU) apm_urlf_limited_sessions 2500 key V93...356\n#\napm_access_sessions : 2500\napm_sessions : 500\napm_urlf_limited_sessions : 2500\n#\n# License Tokens for Module VEP3, Best, 1G, 25 Instances key S71...929\n#\npurchased_license_pool : enabled\nmod_ltm : enabled\nmod_ilx : enabled\nExclusive_Platform : BIG-IQ Pool\n#\n# License Tokens for Module SSL, VE key S71...929\n#\nperf_SSL_total_TPS : UNLIMITED\nperf_SSL_per_core : enabled\nperf_SSL_Mbps : 2000\nperf_SSL_cmp : enabled\n#\n# License Tokens for Module APM, Base, VE GBB (500 CCU) key V93...356\n#\nperf_http_compression_Mbps : UNLIMITED\nperf_compression_per_core : enabled\nmod_aml : enabled\nltm_isession : enabled\naam_bandwidth_control : enabled\n#\n# License Tokens for Module Routing Bundle, VE key S71...929\n#\nnw_routing_rip : enabled\nnw_routing_ospf : enabled\nnw_routing_isis : enabled\nnw_routing_bgp : enabled\nnw_routing_bfd : enabled\n#\n# License Tokens for Module IPV6 Gateway key S71...929\n#\nnw_ipv6 : enabled\n#\n# License Tokens for Module DNS-GTM, Base, 1Gbps key S71...929\n#\nmod_dnsgtm : enabled\nltm_dns_v13 : enabled\nltm_dns_lite : enabled\nltm_dns_licensed_objects : UNLIMITED\ngtm_licensed_objects : UNLIMITED\n#\n# License Tokens for Module CGN, BIG-IP VE, AFM ONLY key S71...929\n#\nmod_cgnat : enabled\nltm_monitor_udp : enabled\nltm_monitor_tcp_ho : enabled\nltm_monitor_tcp : enabled\nltm_monitor_radius : enabled\nltm_monitor_icmp : enabled\nltm_monitor_gateway_icmp : enabled\ndslite : enabled\ncgnat : enabled\n#\n# License Tokens for Module ASM, VE key S71...929\n#\nmod_asm : enabled\nltm_proxy_content : enabled\nltm_ha_vlan_failsafe : enabled\nltm_conn_one_connect_pool : enabled\n#\n# License Tokens for Module APM, Base, VE GBB (500 CCU) key V93...356\n#\nmod_apm : enabled\napm_pingaccess : enabled\n#\n# License Tokens for Module Acceleration Manager, VE key S71...929\n#\nmod_am : enabled\n#\n# License Tokens for Module PSM, VE key S71...929\n#\nmod_afw : enabled\n#\n# License Tokens for Module AFM, VE key S71...929\n#\nmod_afm : enabled\nltm_monitor_rule : enabled\n#\n# License Tokens for Module Ram Cache key S71...929\n#\nltm_ram_cache : enabled\n#\n# License Tokens for Module SDN Services, VE key S71...929\n#\nltm_network_virtualization : enabled\n#\n# License Tokens for Module DNSSEC key S71...929\n#\nltm_dnssec : enabled\n#\n# License Tokens for Module Rate Shaping key S71...929\n#\nltm_bandw_rate_tosque : enabled\nltm_bandw_rate_fairque : enabled\nltm_bandw_rate_classl7 : enabled\nltm_bandw_rate_classl4 : enabled\nltm_bandw_rate_classes : enabled\n#\n# License Tokens for Module Recycle, BIG-IP, VE key S71...929\n#\nlicense_recycle : enabled\nExclusive_Platform : Z100\nExclusive_Platform : Z100H\nExclusive_Platform : Z100K\nExclusive_Platform : Z100x\n#\n# License Tokens for Module DENY-VER-V11.4.X key S71...929\n#\nDeny_version : 10.*.*\nDeny_version : 11.0.*\nDeny_version : 11.1.*\nDeny_version : 11.2.*\nDeny_version : 11.3.*\nDeny_version : 11.4.*\nDeny_version : 9.*.*\n#\n# License Tokens for Module APM, Web Application key V93...356\n#\napm_web_applications : enabled\n#\n# License Tokens for Module Remote Desktop key V93...356\n#\napm_remote_desktop : enabled\n#\n# License Tokens for Module Network Access key V93...356\n#\napm_na : enabled\n#\n# License Tokens for Module Secure Virtual Keyboard key V93...356\n#\napm_ep_svk : enabled\n#\n# License Tokens for Module Protected Workspace key V93...356\n#\napm_ep_pws : enabled\n#\n# License Tokens for Module Machine Certificate Checks key V93...356\n#\napm_ep_machinecert : enabled\n#\n# License Tokens for Module Firewall Checks key V93...356\n#\napm_ep_fwcheck : enabled\n#\n# License Tokens for Module Anti-Virus Checks key V93...356\n#\napm_ep_avcheck : enabled\n#\n# License Tokens for Module Base Endpoint Security Checks key V93...356\n#\napm_ep : enabled\n#\n# License Tokens for Module App Tunnel key V93...356\n#\napm_app_tunnel : enabled\n#\nlicense_manager_key : LS0tLS1CRUdJTi...VZLS0tLS0K\n#\n# Debug Msg - Is sol18346625 affected; Usage, \"2017-02-28 00.00.00\", started after requirement date \"2016-04-15 00.00.00\"\n#\n# LC disabled in accordance with https://support.f5.com/kb/en-us/solutions/public/k/18/sol18346625.html\n#\ngtm_lc : disabled\n#\n# Licensing Information \n#\nLicensed date : 20170310\nLicense start : 20170309\nLicense end : 20170410\nService check date : 20170310\n#\n# Platform Information \n#\nRegistration Key : 11111-22222-33333-44444-5555555\nLicensed version : 2.1.0\nPlatform ID : BIG-IQ Pool\n#\n# Outbound License Dossier Validation\n#\nDossier : 1aa727...47ba\n#\n# Outbound License Authorization Signature\n#\nAuthorization : 31e567c802...80ce1a4\n#\n#-----------------------------------------\n# Copyright 1996-2017, F5 Networks, Inc.\n# All rights reserved. \n#-----------------------------------------\n", - "isInternal": true, - "licenseState": { - "vendor": "F5 Networks, Inc.", - "licensedDateTime": "2017-03-10T00:00:00-08:00", - "licensedVersion": "2.1.0", - "licenseEndDateTime": "2017-04-10T00:00:00-07:00", - "licenseStartDateTime": "2017-03-09T00:00:00-08:00", - "registrationKey": "11111-22222-33333-44444-5555555", - "dossier": "1aa727ff0...302a47ba", - "authorization": "31e567c8...0ce1a4", - "usage": "F5 Internal Product Development", - "platformId": "BIG-IQ Pool", - "authVers": "5b", - "serviceCheckDateTime": "2017-03-10T00:00:00-08:00", - "exclusivePlatform": [ - "BIG-IQ Pool", - "Z100", - "Z100H", - "Z100K", - "Z100x" - ], - "activeModules": [ - "APM, Base, VE GBB (500 CCU)|V93...356|Anti-Virus Checks|Base Endpoint Security Checks|Firewall Checks|Machine Certificate Checks|Network Access|Protected Workspace|Secure Virtual Keyboard|APM, Web Application|App Tunnel|Remote Desktop", - "VEP3, Best, 1G, 25 Instances|S71...929|IPV6 Gateway|Rate Shaping|Ram Cache|SDN Services, VE|DENY-VER-V11.4.X|Max Compression, VE|Acceleration Manager, VE|Recycle, BIG-IP, VE|DNS-GTM, Base, 1Gbps|SSL, VE|VEP3, Best, 1G, Add 25 Instances|Routing Bundle, VE|AFM, VE|ASM, VE|DNSSEC|CGN, BIG-IP VE, AFM ONLY|DNS Rate Limit, 1000 QPS|GTM Rate, 1000|PSM, VE" - ], - "optionalModules": [ - "Concurrent Users", - "Concurrent Users and Access Sessions, VE", - "VEP3, Best, 1G, Add 4 Instances" - ], - "featureFlags": [ - { - "featureName": "gtm_rate_fallback", - "featureValue": "1000" - }, - { - "featureName": "gtm_rate_limit", - "featureValue": "1000" - }, - { - "featureName": "ltm_dns_rate_fallback", - "featureValue": "1000" - }, - { - "featureName": "ltm_dns_rate_limit", - "featureValue": "1000" - }, - { - "featureName": "purchased_license_pool_count", - "featureValue": "50" - }, - { - "featureName": "perf_VE_mem_Mb", - "featureValue": "1" - }, - { - "featureName": "perf_VE_cores", - "featureValue": "8" - }, - { - "featureName": "perf_VE_throughput_Mbps", - "featureValue": "1000" - }, - { - "featureName": "apm_access_sessions", - "featureValue": "2500" - }, - { - "featureName": "apm_sessions", - "featureValue": "500" - }, - { - "featureName": "apm_urlf_limited_sessions", - "featureValue": "2500" - }, - { - "featureName": "purchased_license_pool", - "featureValue": "enabled" - }, - { - "featureName": "mod_ltm", - "featureValue": "enabled" - }, - { - "featureName": "mod_ilx", - "featureValue": "enabled" - }, - { - "featureName": "perf_SSL_total_TPS", - "featureValue": "UNLIMITED" - }, - { - "featureName": "perf_SSL_per_core", - "featureValue": "enabled" - }, - { - "featureName": "perf_SSL_Mbps", - "featureValue": "2000" - }, - { - "featureName": "perf_SSL_cmp", - "featureValue": "enabled" - }, - { - "featureName": "perf_http_compression_Mbps", - "featureValue": "UNLIMITED" - }, - { - "featureName": "perf_compression_per_core", - "featureValue": "enabled" - }, - { - "featureName": "mod_aml", - "featureValue": "enabled" - }, - { - "featureName": "ltm_isession", - "featureValue": "enabled" - }, - { - "featureName": "aam_bandwidth_control", - "featureValue": "enabled" - }, - { - "featureName": "nw_routing_rip", - "featureValue": "enabled" - }, - { - "featureName": "nw_routing_ospf", - "featureValue": "enabled" - }, - { - "featureName": "nw_routing_isis", - "featureValue": "enabled" - }, - { - "featureName": "nw_routing_bgp", - "featureValue": "enabled" - }, - { - "featureName": "nw_routing_bfd", - "featureValue": "enabled" - }, - { - "featureName": "nw_ipv6", - "featureValue": "enabled" - }, - { - "featureName": "mod_dnsgtm", - "featureValue": "enabled" - }, - { - "featureName": "ltm_dns_v13", - "featureValue": "enabled" - }, - { - "featureName": "ltm_dns_lite", - "featureValue": "enabled" - }, - { - "featureName": "ltm_dns_licensed_objects", - "featureValue": "UNLIMITED" - }, - { - "featureName": "gtm_licensed_objects", - "featureValue": "UNLIMITED" - }, - { - "featureName": "mod_cgnat", - "featureValue": "enabled" - }, - { - "featureName": "ltm_monitor_udp", - "featureValue": "enabled" - }, - { - "featureName": "ltm_monitor_tcp_ho", - "featureValue": "enabled" - }, - { - "featureName": "ltm_monitor_tcp", - "featureValue": "enabled" - }, - { - "featureName": "ltm_monitor_radius", - "featureValue": "enabled" - }, - { - "featureName": "ltm_monitor_icmp", - "featureValue": "enabled" - }, - { - "featureName": "ltm_monitor_gateway_icmp", - "featureValue": "enabled" - }, - { - "featureName": "dslite", - "featureValue": "enabled" - }, - { - "featureName": "cgnat", - "featureValue": "enabled" - }, - { - "featureName": "mod_asm", - "featureValue": "enabled" - }, - { - "featureName": "ltm_proxy_content", - "featureValue": "enabled" - }, - { - "featureName": "ltm_ha_vlan_failsafe", - "featureValue": "enabled" - }, - { - "featureName": "ltm_conn_one_connect_pool", - "featureValue": "enabled" - }, - { - "featureName": "mod_apm", - "featureValue": "enabled" - }, - { - "featureName": "apm_pingaccess", - "featureValue": "enabled" - }, - { - "featureName": "mod_am", - "featureValue": "enabled" - }, - { - "featureName": "mod_afw", - "featureValue": "enabled" - }, - { - "featureName": "mod_afm", - "featureValue": "enabled" - }, - { - "featureName": "ltm_monitor_rule", - "featureValue": "enabled" - }, - { - "featureName": "ltm_ram_cache", - "featureValue": "enabled" - }, - { - "featureName": "ltm_network_virtualization", - "featureValue": "enabled" - }, - { - "featureName": "ltm_dnssec", - "featureValue": "enabled" - }, - { - "featureName": "ltm_bandw_rate_tosque", - "featureValue": "enabled" - }, - { - "featureName": "ltm_bandw_rate_fairque", - "featureValue": "enabled" - }, - { - "featureName": "ltm_bandw_rate_classl7", - "featureValue": "enabled" - }, - { - "featureName": "ltm_bandw_rate_classl4", - "featureValue": "enabled" - }, - { - "featureName": "ltm_bandw_rate_classes", - "featureValue": "enabled" - }, - { - "featureName": "license_recycle", - "featureValue": "enabled" - }, - { - "featureName": "Deny_version", - "featureValue": "10.*.*" - }, - { - "featureName": "Deny_version", - "featureValue": "11.0.*" - }, - { - "featureName": "Deny_version", - "featureValue": "11.1.*" - }, - { - "featureName": "Deny_version", - "featureValue": "11.2.*" - }, - { - "featureName": "Deny_version", - "featureValue": "11.3.*" - }, - { - "featureName": "Deny_version", - "featureValue": "11.4.*" - }, - { - "featureName": "Deny_version", - "featureValue": "9.*.*" - }, - { - "featureName": "apm_web_applications", - "featureValue": "enabled" - }, - { - "featureName": "apm_remote_desktop", - "featureValue": "enabled" - }, - { - "featureName": "apm_na", - "featureValue": "enabled" - }, - { - "featureName": "apm_ep_svk", - "featureValue": "enabled" - }, - { - "featureName": "apm_ep_pws", - "featureValue": "enabled" - }, - { - "featureName": "apm_ep_machinecert", - "featureValue": "enabled" - }, - { - "featureName": "apm_ep_fwcheck", - "featureValue": "enabled" - }, - { - "featureName": "apm_ep_avcheck", - "featureValue": "enabled" - }, - { - "featureName": "apm_ep", - "featureValue": "enabled" - }, - { - "featureName": "apm_app_tunnel", - "featureValue": "enabled" - }, - { - "featureName": "license_manager_key", - "featureValue": "LS0tLS1CRUdJTi...S0VZLS0tLS0K" - }, - { - "featureName": "gtm_lc", - "featureValue": "disabled" - } - ], - "generation": 0, - "lastUpdateMicros": 0 - }, - "totalDeviceLicenses": 50, - "freeDeviceLicenses": 50, - "state": "LICENSED", - "publicKey": [ - 48, - -126, - 1, - 2, - 3, - 1, - 0, - 1 - ], - "privateKey": "QWqHCYILgiey...3BAwT1lwDuGfs", - "registeredKey": [ - 49, - -65, - 8, - -39, - -123, - -15, - 33, - 33, - -9, - 111, - 111, - -64, - 69, - -114, - 52, - 78 - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_license_pool_members.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_license_pool_members.json deleted file mode 100644 index 9bfe2ffd3..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_license_pool_members.json +++ /dev/null @@ -1,43 +0,0 @@ -[ - { - "uuid": "25033c1a-8eaa-4de1-ac12-563228961177", - "deviceReference": { - "link": "https://localhost/mgmt/shared/resolver/device-groups/cm-cloud-managed-devices/devices/d13074df-4f0c-4ed3-baf6-0050fe74695f", - "uuid": "d13074df-4f0c-4ed3-baf6-0050fe74695f", - "deviceUri": "https://10.2.2.3:443", - "machineId": "d13074df-4f0c-4ed3-baf6-0050fe74695f", - "state": "ACTIVE", - "address": "10.2.2.3", - "httpsPort": 443, - "hostname": "bigip1", - "version": "12.1.2", - "product": "BIG-IP", - "edition": "Final", - "build": "0.0.249", - "restFrameworkVersion": "13.1.0-0.0.5711", - "managementAddress": "10.0.2.15", - "mcpDeviceName": "/Common/bigip1", - "trustDomainGuid": "5c9e2e37-e8c4-4556-881b080027277482", - "properties": { - "dmaConfigPathScope": "basic", - "isSoapProxyEnabled": true, - "isTmshProxyEnabled": false, - "shared:resolver:device-groups:discoverer": "f34e87f5-0494-4707-8dcc-980c7c0cdec3", - "isRestProxyEnabled": true, - "dmaFinished": true - }, - "isClustered": false, - "isVirtual": true, - "groupName": "cm-cloud-managed-devices", - "generation": 5, - "lastUpdateMicros": 1489787182051700, - "kind": "shared:resolver:device-groups:restdeviceresolverdevicestate", - "selfLink": "https://localhost/mgmt/shared/resolver/device-groups/cm-cloud-managed-devices/devices/d13074df-4f0c-4ed3-baf6-0050fe74695f" - }, - "state": "LICENSED", - "generation": 3, - "lastUpdateMicros": 1489802531940108, - "kind": "cm:shared:licensing:pools:licensepoolmemberstate", - "selfLink": "https://localhost/mgmt/cm/shared/licensing/pools/7e67927c-e3ac-4669-a031-6f6de7ddfabe/members/25033c1a-8eaa-4de1-ac12-563228961177" - } -] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_lldp_globals.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_lldp_globals.json deleted file mode 100644 index 2da4a7904..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_lldp_globals.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "kind": "tm:net:lldp-globals:lldp-globalsstate", - "selfLink": "https://localhost/mgmt/tm/net/lldp-globals?ver=13.1.1.4", - "disabled": true, - "maxNeighborsPerPort": 10, - "reinitDelay": 2, - "txDelay": 0, - "txHold": 5, - "txInterval": 0 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_data_group_internal_ip.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_data_group_internal_ip.json deleted file mode 100644 index f1ae67529..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_data_group_internal_ip.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:ltm:data-group:internal:internalstate", - "name": "aol", - "partition": "Common", - "fullPath": "/Common/aol", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/data-group/internal/~Common~aol?ver=13.1.0", - "type": "ip", - "records": [ - { - "name": "64.12.96.0/19", - "data": "" - }, - { - "name": "195.93.16.0/20", - "data": "" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_data_group_internal_string.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_data_group_internal_string.json deleted file mode 100644 index bcfa66044..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_data_group_internal_string.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "kind": "tm:ltm:data-group:internal:internalstate", - "name": "images", - "partition": "Common", - "fullPath": "/Common/images", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/data-group/internal/~Common~images?ver=13.1.0", - "type": "string", - "records": [ - { - "name": ".bmp", - "data": "" - }, - { - "name": ".gif", - "data": "" - }, - { - "name": ".jpg", - "data": "" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_dns_cache_resolver_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_dns_cache_resolver_1.json deleted file mode 100644 index 5a0e9b75c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_dns_cache_resolver_1.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "kind": "tm:ltm:dns:cache:resolver:resolverstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 666, - "selfLink": "https://localhost/mgmt/tm/ltm/dns/cache/resolver/~Common~foo?ver=13.1.0.7", - "allowedQueryTime": 200, - "answerDefaultZones": "no", - "maxConcurrentQueries": 1024, - "maxConcurrentTcp": 20, - "maxConcurrentUdp": 8192, - "msgCacheSize": 1048576, - "nameserverCacheCount": 16536, - "randomizeQueryNameCase": "yes", - "routeDomain": "/Common/0", - "routeDomainReference": { - "link": "https://localhost/mgmt/tm/net/route-domain/~Common~0?ver=13.1.0.7" - }, - "rrsetCacheSize": 10485760, - "rrsetRotate": "none", - "unwantedQueryReplyThreshold": 0, - "useIpv4": "yes", - "useIpv6": "yes", - "useTcp": "yes", - "useUdp": "yes", - "forwardZones": [ - { - "name": "foo1", - "nameservers": [ - { - "name": "1.1.1.1:53" - }, - { - "name": "2.2.2.2:53" - } - ] - }, - { - "name": "foo2" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_dns_nameserver_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_dns_nameserver_1.json deleted file mode 100644 index e012103b0..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_dns_nameserver_1.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "kind": "tm:ltm:dns:nameserver:nameserverstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 8076, - "selfLink": "https://localhost/mgmt/tm/ltm/dns/nameserver/~Common~foo?ver=13.1.0.7", - "address": "127.0.0.1", - "port": 53, - "routeDomain": "/Common/0", - "routeDomainReference": { - "link": "https://localhost/mgmt/tm/net/route-domain/~Common~0?ver=13.1.0.7" - }, - "tsigKey": "/Common/key1", - "tsigKeyReference": { - "link": "https://localhost/mgmt/tm/ltm/dns/tsig-key/~Common~key1?ver=13.1.0.7" - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_dns_zone_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_dns_zone_1.json deleted file mode 100644 index 686de99bc..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_dns_zone_1.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "kind": "tm:ltm:dns:zone:zonestate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 812, - "selfLink": "https://localhost/mgmt/tm/ltm/dns/zone/~Common~foo?ver=13.1.0.8", - "dnsExpressAllowNotify": [ - "1.1.1.1" - ], - "dnsExpressEnabled": "yes", - "dnsExpressNotifyAction": "consume", - "dnsExpressNotifyTsigVerify": "yes", - "dnsExpressServer": "/Common/asd", - "dnsExpressServerReference": { - "link": "https://localhost/mgmt/tm/ltm/dns/nameserver/~Common~asd?ver=13.1.0.8" - }, - "responsePolicy": "no", - "serverTsigKey": "/Common/asd", - "serverTsigKeyReference": { - "link": "https://localhost/mgmt/tm/ltm/dns/tsig-key/~Common~asd?ver=13.1.0.8" - }, - "transferClients": [ - "/Common/asd" - ], - "transferClientsReference": [ - { - "link": "https://localhost/mgmt/tm/ltm/dns/nameserver/~Common~asd?ver=13.1.0.8" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_fastl4_profile_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_fastl4_profile_1.json deleted file mode 100644 index 2667968c5..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_fastl4_profile_1.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "kind": "tm:ltm:profile:fastl4:fastl4state", - "name": "fastL4", - "partition": "Common", - "fullPath": "/Common/fastL4", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/fastl4/~Common~fastL4?ver=13.1.0.8", - "appService": "none", - "clientTimeout": 30, - "defaultsFrom": "none", - "description": "none", - "explicitFlowMigration": "disabled", - "hardwareSynCookie": "disabled", - "idleTimeout": "300", - "ipDfMode": "preserve", - "ipTosToClient": "pass-through", - "ipTosToServer": "pass-through", - "ipTtlMode": "decrement", - "ipTtlV4": 255, - "ipTtlV6": 64, - "keepAliveInterval": "disabled", - "lateBinding": "disabled", - "linkQosToClient": "pass-through", - "linkQosToServer": "pass-through", - "looseClose": "disabled", - "looseInitialization": "disabled", - "mssOverride": 0, - "priorityToClient": "pass-through", - "priorityToServer": "pass-through", - "pvaAcceleration": "full", - "pvaDynamicClientPackets": 1, - "pvaDynamicServerPackets": 0, - "pvaFlowAging": "enabled", - "pvaFlowEvict": "enabled", - "pvaOffloadDynamic": "enabled", - "pvaOffloadState": "embryonic", - "reassembleFragments": "disabled", - "receiveWindowSize": 0, - "resetOnTimeout": "enabled", - "rttFromClient": "disabled", - "rttFromServer": "disabled", - "serverSack": "disabled", - "serverTimestamp": "disabled", - "softwareSynCookie": "disabled", - "synCookieEnable": "enabled", - "synCookieMss": 0, - "synCookieWhitelist": "disabled", - "tcpCloseTimeout": "5", - "tcpGenerateIsn": "disabled", - "tcpHandshakeTimeout": "5", - "tcpStripSack": "disabled", - "tcpTimeWaitTimeout": 0, - "tcpTimestampMode": "preserve", - "tcpWscaleMode": "preserve", - "timeoutRecovery": "disconnect" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_global_settings_general.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_global_settings_general.json deleted file mode 100644 index a73a15bd7..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_global_settings_general.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:ltm:global-settings:connection:connectionstate", - "selfLink": "https://localhost/mgmt/tm/ltm/global-settings/connection?ver=15.1.1", - "adaptiveReaperHiwater": 95, - "adaptiveReaperLowater": 85, - "autoLastHop": "enabled", - "defaultVsSynChallengeThreshold": "infinite", - "globalFlowEvictionPolicy": "/Common/default-eviction-policy", - "globalFlowEvictionPolicyReference": { - "link": "https://localhost/mgmt/tm/ltm/eviction-policy/~Common~default-eviction-policy?ver=15.1.1" - }, - "globalSynChallengeThreshold": "64000", - "syncookiesThreshold": 16384, - "vlanKeyedConn": "enabled", - "vlanSynCookie": "enabled" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_http2_profile.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_http2_profile.json deleted file mode 100644 index 3d8c9bce3..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_http2_profile.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "kind": "tm:ltm:profile:http2:http2state", - "name": "test", - "partition": "Common", - "fullPath": "/Common/test", - "generation": 5852, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/http2/~Common~test?ver=13.1.0.8", - "activationModes": [ - "always" - ], - "appService": "none", - "concurrentStreamsPerConnection": 10, - "connectionIdleTimeout": 300, - "defaultsFrom": "/Common/http2", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/http2/~Common~http2?ver=13.1.0.8" - }, - "description": "this is awful documentation", - "enforceTlsRequirements": "enabled", - "frameSize": 2048, - "headerTableSize": 4096, - "includeContentLength": "disabled", - "insertHeader": "disabled", - "insertHeaderName": "X-HTTP2", - "receiveWindow": 32, - "writeSize": 16384 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_http_profile_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_http_profile_1.json deleted file mode 100644 index 0d8f83c70..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_http_profile_1.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "kind": "tm:ltm:profile:http:httpstate", - "name": "http", - "partition": "Common", - "fullPath": "/Common/http", - "generation": 1405, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/http/~Common~http?ver=13.1.0.6", - "acceptXff": "disabled", - "appService": "none", - "basicAuthRealm": "none", - "defaultsFrom": "none", - "description": "none", - "encryptCookies": [], - "enforcement": { - "excessClientHeaders": "reject", - "excessServerHeaders": "reject", - "knownMethods": [ - "CONNECT", - "DELETE", - "GET", - "HEAD", - "LOCK", - "OPTIONS", - "POST", - "PROPFIND", - "PUT", - "TRACE", - "UNLOCK" - ], - "maxHeaderCount": 64, - "maxHeaderSize": 32768, - "maxRequests": 0, - "oversizeClientHeaders": "reject", - "oversizeServerHeaders": "reject", - "pipeline": "allow", - "truncatedRedirects": "disabled", - "unknownMethod": "allow" - }, - "explicitProxy": { - "badRequestMessage": "none", - "badResponseMessage": "none", - "connectErrorMessage": "none", - "defaultConnectHandling": "deny", - "dnsErrorMessage": "none", - "dnsResolver": "none", - "hostNames": [], - "ipv6": "no", - "routeDomain": "none", - "tunnelName": "none" - }, - "fallbackHost": "none", - "fallbackStatusCodes": [], - "headerErase": "none", - "headerInsert": "none", - "hsts": { - "includeSubdomains": "enabled", - "maximumAge": 16070400, - "mode": "disabled", - "preload": "disabled" - }, - "insertXforwardedFor": "disabled", - "lwsSeparator": "none", - "lwsWidth": 80, - "oneconnectTransformations": "enabled", - "proxyType": "reverse", - "redirectRewrite": "none", - "requestChunking": "preserve", - "responseChunking": "selective", - "responseHeadersPermitted": [], - "serverAgentName": "BigIP", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes", - "samplingRate": 0, - "samplingRateGlobal": "yes" - }, - "viaHostName": "none", - "viaRequest": "preserve", - "viaResponse": "preserve", - "xffAlternativeNames": [] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_irules.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_irules.json deleted file mode 100644 index b3e026a12..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_irules.json +++ /dev/null @@ -1,179 +0,0 @@ -[ - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_APM_ExchangeSupport_OA_BasicAuth", - "partition": "Common", - "fullPath": "/Common/_sys_APM_ExchangeSupport_OA_BasicAuth", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_APM_ExchangeSupport_OA_BasicAuth?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \n # Global variables\n # static::POLICY_RESULT_CACHE_AUTHFAILED\n # Administrator can set this into 1, when there is a necessity to cache failed policy result.\n # This may be needed to avoid account locked caused by the Active Sync device when it uses wrong passwords.\n # One possible scenario, is that when the user changes the password in Active Directory, but missed to changed in their devices.\n # Responses\n # On denied result\n # Administrator can customize the responses to the device depends on more complex conditions when necessary.\n # In those cases, please use ACCESS::respond command.\n # The following is the syntax of ACCESS::respond\n # ACCESS::respond <status code> [ content <body> ] [ <Additional Header> <Additional Header value>* ]\n # e.g. ACCESS::respond 401 content \"Error: Denied\" WWW-Authenticate \"basic realm=\\\"f5.com\\\"\" Connection close\n when RULE_INIT {\n # Please set the following global variables for customized responses.\n set static::actsync_401_http_body \"<html><title>Authentication Failured</title><body>Error: Authentication Failure</body></html>\"\n set static::actsync_503_http_body \"<html><title>Service is not available</title><body>Error: Service is not available</body></html>\"\n set static::ACCESS_LOG_PREFIX \"01490000:7:\"\n\n # Second Virtual Server name for 401 NTLM responder\n set static::ACCESS_SECOND_VIRTUAL_NAME \"_ACCESS_401_NTLM_responder_HTTPS\"\n\n set static::POLICY_INPROGRESS \"policy_inprogress\"\n set static::POLICY_AUTHFAILED \"policy_authfailed\"\n # The request with huge content length can not be used for starting ACCESS session.\n # This kind of request will be put on hold, and this iRule will try to use another\n # request to start the session. The following value is used for Outlook Anywhere.\n set static::OA_MAGIC_CONTENT_LEN 1073741824\n\n # Similar with OutlookAnywhere case, ACCESS can not use the request which is\n # larger then following size. This becomes an issue with application that using\n # Exchange Web Service as its main protocol such as Mac OS X applications\n # (e.g. Mail app, Microsoft Entourage, etc)\n # This kind of request will be put on hold, and this iRule will try to use another\n # request to start the session.\n set static::FIRST_BIG_POST_CONTENT_LEN 640000\n\n # Set it into 1 if the backend EWS handler accepts HTTP Basic Authentication.\n set static::EWS_BKEND_BASIC_AUTH 0\n # The following variable controls the polling mechanism.\n set static::POLICY_RESULT_POLL_INTERVAL 250\n set static::POLICY_RESULT_POLL_MAXRETRYCYCLE 600\n\n # Set this global variable to 1 for caching authentication failure\n # Useful for avoiding account locked out.\n set static::POLICY_RESULT_CACHE_AUTHFAILED 0\n\n # set this global variable to set alternative timeout for particular session\n set static::POLICY_ALT_INACTIVITY_TIMEOUT 120\n\n set static::ACCESS_USERKEY_TBLNAME \"_access_userkey\"\n\n\n set static::ACCESS_DEL_COOKIE_HDR_VAL \"MRHSession=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/\"\n\n log -noname accesscontrol.local1.debug \"01490000:7: EWS_BKEND_BASIC_AUTH = $static::EWS_BKEND_BASIC_AUTH\"\n }\n when ACCESS_ACL_ALLOWED {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX [HTTP::method] [HTTP::uri] [HTTP::header Content-Length]\"\n\n # MSFT Exchange's EWS request handler always requesting NTLM even the connection has been\n # already authenticated if there is a HTTP Basic Auth in the request.\n if { [ info exists f_exchange_web_service ] && $f_exchange_web_service == 1 } {\n if { $static::EWS_BKEND_BASIC_AUTH == 0 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Removing HTTP Basic Authorization header\"\n HTTP::header remove Authorization\n }\n }\n }\n\n when HTTP_REQUEST {\n set http_path [ string tolower [HTTP::path] ]\n set f_clientless_mode 0\n set f_alt_inactivity_timeout 0\n set f_rpc_over_http 0\n set f_exchange_web_service 0\n set f_auto_discover 0\n set f_activesync 0\n set f_offline_address_book 0\n set f_availability_service 0\n\n # Here put appropriate pool when necessary.\n switch -glob $http_path {\n \"/rpc/rpcproxy.dll\" {\n # Supports for RPC over HTTP. (Outlook Anywhere)\n set f_rpc_over_http 1\n }\n \"/autodiscover/autodiscover.xml\" {\n # Supports for Auto Discover protocol.\n set f_auto_discover 1\n # This request does not require long inactivity timeout.\n # Don't use this for now\n set f_alt_inactivity_timeout 0\n }\n \"/microsoft-server-activesync\" {\n # Supports for ActiveSync\n set f_activesync 1\n }\n \"/oab/*\" {\n # Supports for Offline Address Book\n set f_offline_address_book 1\n # Don't use this for now\n set f_alt_inactivity_timeout 0\n }\n \"/ews/*\" {\n # Support for Exchange Web Service\n # Outlook's Availability Service borrows this protocol.\n set f_exchange_web_service 1\n }\n \"/as/*\" {\n # Support for Availability Service.\n # do nothing for now. (Untested)\n set f_availability_service 1\n }\n default {\n return\n }\n }\n\n set f_reqside_set_sess_id 0\n set http_method [HTTP::method]\n set http_hdr_host [HTTP::host]\n set http_hdr_uagent [HTTP::header User-Agent]\n set http_uri [HTTP::uri]\n set http_content_len [HTTP::header Content-Length]\n set MRHSession_cookie [HTTP::cookie value MRHSession]\n set auth_info_b64enc \"\"\n\n if { ! [ info exists src_ip ] } {\n set src_ip [IP::remote_addr]\n }\n if { ! [ info exists PROFILE_POLICY_TIMEOUT ] } {\n set PROFILE_POLICY_TIMEOUT [PROFILE::access access_policy_timeout]\n }\n if { ! [ info exists PROFILE_MAX_SESS_TIMEOUT ] } {\n set PROFILE_MAX_SESS_TIMEOUT [PROFILE::access max_session_timeout]\n }\n if { ! [ info exists PROFILE_RESTRICT_SINGLE_IP ] } {\n set PROFILE_RESTRICT_SINGLE_IP 1\n }\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX method: $http_method\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Src IP: $src_ip\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX User-Agent: $http_hdr_uagent\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP uri: $http_uri\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP len: $http_content_len\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Restrict-to-single-client-ip: $PROFILE_RESTRICT_SINGLE_IP\"\n\n # First, do we have valid MRHSession cookie.\n if { $MRHSession_cookie != \"\" } {\n if { [ACCESS::session exists -state_allow -sid $MRHSession_cookie] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *VALID* MRHSession cookie: $MRHSession_cookie\"\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *INVALID* MRHSession cookie: $MRHSession_cookie\"\n set MRHSession_cookie \"\"\n HTTP::cookie remove MRHSession\n }\n }\n\n set http_hdr_auth [HTTP::header Authorization]\n if { [ string match -nocase {basic *} $http_hdr_auth ] != 1 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Not basic authentication. Ignore received auth header\"\n set http_hdr_auth \"\"\n }\n\n if { $http_hdr_auth == \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX No/Empty Auth header\"\n # clean up the cookie\n if { $MRHSession_cookie == \"\" } {\n HTTP::respond 401 content $static::actsync_401_http_body WWW-Authenticate \"Basic realm=\\\"[HTTP::header Host]\\\"\" Set-Cookie $static::ACCESS_DEL_COOKIE_HDR_VAL Connection Close\n return\n }\n # Do nothing if we have a valid MRHSession cookie.\n }\n\n set f_release_request 0\n # Optimization for clients which support cookie\n if { $MRHSession_cookie != \"\" } {\n # Default profile access setting is false\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n set f_release_request 1\n }\n elseif { [ IP::addr $src_ip equals [ ACCESS::session data get -sid $MRHSession_cookie \"session.user.clientip\" ] ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP matched\"\n set f_release_request 1\n }\n else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP does not matched\"\n set MRHSession_cookie \"\"\n HTTP::cookie remove MRHSession\n }\n }\n\n if { $f_release_request == 0 } {\n set apm_username [string tolower [HTTP::username]]\n set apm_password [HTTP::password]\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n binary scan [md5 \"$apm_password\"] H* user_hash\n }\n else {\n binary scan [md5 \"$apm_password$src_ip\"] H* user_hash\n }\n set user_key \"$apm_username.$user_hash\"\n unset user_hash\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP Hdr Auth: $http_hdr_auth\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX apm_username: $apm_username\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX user_key = $user_key\"\n set apm_cookie_list [ ACCESS::user getsid $user_key ]\n if { [ llength $apm_cookie_list ] != 0 } {\n set apm_cookie [ ACCESS::user getkey [ lindex $apm_cookie_list 0 ] ]\n if { $apm_cookie != \"\" } {\n HTTP::cookie insert name MRHSession value $apm_cookie\n set f_release_request 1\n }\n }\n }\n\n if { $http_content_len == $static::OA_MAGIC_CONTENT_LEN } {\n set f_oa_magic_content_len 1\n }\n\n set f_sleep_here 0\n set retry 1\n\n while { $f_release_request == 0 && $retry <= $static::POLICY_RESULT_POLL_MAXRETRYCYCLE } {\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Trying #$retry for $http_method $http_uri $http_content_len\"\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Reading $user_key from table $static::ACCESS_USERKEY_TBLNAME\"\n\n set apm_cookie [table lookup -subtable $static::ACCESS_USERKEY_TBLNAME -notouch $user_key]\n if { $apm_cookie != \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Verifying table cookie = $apm_cookie\"\n\n # Accessing SessionDB is not that cheap. Here we are trying to check known value.\n if { $apm_cookie == \"policy_authfailed\" || $apm_cookie == \"policy_inprogress\"} {\n # Do nothing\n } elseif { ! [ ACCESS::session exists $apm_cookie ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX table cookie = $apm_cookie is out-of-sync\"\n # Table value is out of sync. Ignores it.\n set apm_cookie \"\"\n }\n }\n\n switch $apm_cookie {\n \"\" {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX NO APM Cookie found\"\n\n if { [ info exists f_oa_magic_content_len ] && $f_oa_magic_content_len == 1 } {\n # Outlook Anywhere request comes in pair. The one with 1G payload is not usable\n # for creating new session since 1G content-length is intended for client to upload\n # the data when needed.\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Start to wait $static::POLICY_RESULT_POLL_INTERVAL ms for request with magic content-len\"\n set f_sleep_here 1\n } elseif { [ info exists f_exchange_web_service ] && $f_exchange_web_service == 1 && $http_content_len > $static::FIRST_BIG_POST_CONTENT_LEN } {\n # Here we are getting large EWS request, which can't be used for starting new session\n # in clientless-mode. Have it here waiting for next smaller one.\n # We are holding the request here in HTTP filter, and HTTP filter automatically\n # clamping down the TCP window when necessary.\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Start to wait $static::POLICY_RESULT_POLL_INTERVAL ms for big EWS request\"\n set f_sleep_here 1\n } else {\n set apm_cookie \"policy_inprogress\"\n set f_reqside_set_sess_id 1\n set f_release_request 1\n }\n }\n \"policy_authfailed\" {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Found $user_key with AUTH_FAILED\"\n HTTP::respond 401 content $static::actsync_401_http_body\n set f_release_request 1\n }\n \"policy_inprogress\" {\n if { [ info exists f_activesync ] && ($f_activesync == 1) } {\n # For ActiveSync requests, aggressively starts new session.\n set f_reqside_set_sess_id 1\n set f_release_request 1\n } else {\n set f_sleep_here 1\n }\n }\n default {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Using MRHSession = $apm_cookie\"\n HTTP::header insert Cookie \"MRHSession=$apm_cookie\"\n set f_release_request 1\n }\n }\n\n if { $f_reqside_set_sess_id == 1 } {\n set f_reqside_set_sess_id 0\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Setting $user_key=$apm_cookie $PROFILE_POLICY_TIMEOUT $PROFILE_POLICY_TIMEOUT\"\n set f_clientless_mode 1\n HTTP::cookie remove MRHSession\n HTTP::header insert \"clientless-mode\" 1\n HTTP::header insert \"username\" $apm_username\n HTTP::header insert \"password\" $apm_password\n table set -subtable $static::ACCESS_USERKEY_TBLNAME $user_key $apm_cookie $PROFILE_POLICY_TIMEOUT $PROFILE_POLICY_TIMEOUT\n }\n\n if { $f_sleep_here == 1 } {\n set f_sleep_here 0\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Waiting $static::POLICY_RESULT_POLL_INTERVAL ms for $http_method $http_uri\"\n after $static::POLICY_RESULT_POLL_INTERVAL\n }\n\n incr retry\n }\n\n if { ($f_release_request == 0) && ($retry >= $static::POLICY_RESULT_POLL_MAXRETRYCYCLE) } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Policy did not finish in [expr { $static::POLICY_RESULT_POLL_MAXRETRYCYCLE * $static::POLICY_RESULT_POLL_INTERVAL } ] ms. Close connection for $http_method $http_uri\"\n\n table delete -subtable $static::ACCESS_USERKEY_TBLNAME $user_key\n ACCESS::disable\n TCP::close\n return\n }\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Releasing request $http_method $http_uri\"\n }\n\n when ACCESS_SESSION_STARTED {\n if { [ info exists user_key ] } {\n\n ACCESS::session data set \"session.user.uuid\" $user_key\n ACCESS::session data set \"session.user.microsoft-exchange-client\" 1\n\n if { [ info exists f_activesync ] && $f_activesync == 1 } {\n ACCESS::session data set \"session.user.microsoft-activesync\" 1\n }\n elseif { [ info exists f_auto_discover ] && $f_auto_discover == 1 } {\n ACCESS::session data set \"session.user.microsoft-autodiscover\" 1\n }\n elseif { [ info exists f_availability_service ] && $f_availability_service == 1 } {\n ACCESS::session data set \"session.user.microsoft-availabilityservice\" 1\n }\n elseif { [ info exists f_rpc_over_http ] && $f_rpc_over_http == 1 } {\n ACCESS::session data set \"session.user.microsoft-rpcoverhttp\" 1\n }\n elseif { [ info exists f_offline_address_book ] && $f_offline_address_book == 1 } {\n ACCESS::session data set \"session.user.microsoft-offlineaddressbook\" 1\n }\n elseif { [ info exists f_exchange_web_service ] && $f_exchange_web_service == 1 } {\n ACCESS::session data set \"session.user.microsoft-exchangewebservice\" 1\n }\n }\n if { [ info exists f_alt_inactivity_timeout ] && $f_alt_inactivity_timeout == 1 } {\n ACCESS::session data set \"session.inactivity_timeout\" $static::POLICY_ALT_INACTIVITY_TIMEOUT\n }\n }\n\n when ACCESS_POLICY_COMPLETED {\n if { ! [ info exists user_key ] } {\n return\n }\n\n set user_key_value \"\"\n set f_delete_session 0\n set policy_result [ACCESS::policy result]\n set sid [ ACCESS::session sid ]\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX ACCESS_POLICY_COMPLETED: policy_result = \\\"$policy_result\\\" user_key = \\\"$user_key\\\" sid = \\\"$sid\\\"\"\n\n set inactivity_timeout [ACCESS::session data get \"session.inactivity_timeout\"]\n set max_sess_timeout [ACCESS::session data get \"session.max_session_timeout\"]\n if { $max_sess_timeout == \"\" } {\n set max_sess_timeout $PROFILE_MAX_SESS_TIMEOUT\n }\n\n switch $policy_result {\n \"allow\" {\n # We depends on this table record self-cleanup capability in order to\n # indirectly sync with session DB.\n set user_key_value $sid\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Result: Allow: $user_key => $sid $inactivity_timeout $max_sess_timeout\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX user_key_value = $user_key_value\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX sid = $sid\"\n }\n \"deny\" {\n # When necessary the admin here can check appropriate session variable\n # and decide what response more appropriate then this default response.\n ACCESS::respond 401 content $static::actsync_401_http_body Set-Cookie $static::ACCESS_DEL_COOKIE_HDR_VAL Connection Close\n if { $static::POLICY_RESULT_CACHE_AUTHFAILED == 1 } {\n set user_key_value $static::POLICY_AUTHFAILED\n } else {\n set f_delete_session 1\n }\n }\n default {\n ACCESS::respond 503 content $static::actsync_503_http_body Connection Close\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Got unsupported policy result for $user_key ($sid)\"\n set f_delete_session 1\n }\n }\n if { $user_key_value != \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Setting $user_key => $user_key_value $inactivity_timeout $max_sess_timeout in table $static::ACCESS_USERKEY_TBLNAME\"\n\n table set -subtable $static::ACCESS_USERKEY_TBLNAME $user_key $user_key_value $inactivity_timeout $max_sess_timeout\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Deleting $user_key in table $static::ACCESS_USERKEY_TBLNAME\"\n\n table delete -subtable $static::ACCESS_USERKEY_TBLNAME $user_key\n }\n\n if { $f_delete_session == 1 } {\n ACCESS::session remove\n set f_delete_session 0\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Removing the session for $user_key.\"\n }\n }\ndefinition-signature CZnUb3niz9wZPWvOmjDB0Dy4ixqjBEhIZrAVGt8VYe7+wZkhcBUFTADz3S1y5uomVwhRkGL20PLH7tfanDlpr3+IppgAGQlp98sPUl5ndEoWA4Rr90QiRGNRl/V7jWK58SOdJCQOirnutVMoeYjBWLwuprXGts08PO0WML5s0xJNOY7WPuGNeG+7Ht2pIB0vu80CgnCNGZJGZH0QR3kMVOx3yUN0ro5bAOmQ/XWel4qkj0F5DN9ufvsmKtTvb+Lc3y+5PHGbbFAQIrZ7lntZUJl/F8e/d26HE3spmZzQpPzi16qYWaMOxbvT6oedxpyhwbmJLiRNGyZmnT6kHj93FA==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_APM_ExchangeSupport_OA_NtlmAuth", - "partition": "Common", - "fullPath": "/Common/_sys_APM_ExchangeSupport_OA_NtlmAuth", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_APM_ExchangeSupport_OA_NtlmAuth?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen RULE_INIT {\n set static::POLICY_INPROGRESS \"policy_inprogress\"\n set static::POLICY_FAILED \"policy_failed\"\n set static::POLICY_SUCCEED \"policy_succeed\"\n set static::POLICY_DONE_WAIT_SEC 5\n\n set static::FIRST_BIG_POST_CONTENT_LEN 640000\n set static::POLICY_RESULT_POLL_INTERVAL 100\n set static::POLICY_RESULT_POLL_MAXRETRYCYCLE 100\n set static::ACCESS_USERKEY_TBLNAME \"_access_userkey\"\n set static::ACCESS_LOG_PREFIX \"01490000:7:\"\n\n set static::USE_NTLM_AUTH 0\n set static::USE_BASIC_AUTH 1\n set static::USE_NTLM_BASIC_AUTH 2\n\n set static::URL_DEFAULT 0\n set static::URL_RPC_OVER_HTTP 1\n set static::URL_AUTODISCOVER 2\n set static::URL_ACTIVE_SYNC 3\n set static::URL_OFFLINEADDRESSBOOK 4\n set static::URL_EXCHANGEWEBSERVICE 5\n\n set static::RECVD_AUTH_NONE 0\n set static::RECVD_AUTH_NTLM 1\n set static::RECVD_AUTH_BASIC 2\n\n set static::ACCESS_DEL_COOKIE_HDR_VAL \"MRHSession=deleted; \\\n expires=Thu, 01-Jan-1970 00:00:01 GMT;\\\n path=/\"\n\n }\n\n when HTTP_REQUEST {\n set http_path [string tolower [HTTP::path]]\n set url_path $static::URL_DEFAULT\n set use_auth $static::USE_NTLM_AUTH\n set f_disable_sso 0\n\n switch -glob $http_path {\n \"/rpc/rpcproxy.dll\" {\n set url_path $static::URL_RPC_OVER_HTTP\n }\n \"/autodiscover/autodiscover.xml\" {\n set url_path $static::URL_ACTIVE_SYNC\n # Need to support both NTLM and Basic authentication for this URL\n set use_auth $static::USE_NTLM_BASIC_AUTH\n }\n \"/microsoft-server-activesync*\" {\n set url_path $static::URL_ACTIVE_SYNC\n # Use only Basic authentication for this URL\n set use_auth $static::USE_BASIC_AUTH\n set f_disable_sso 1\n }\n \"/oab*\" {\n set url_path $static::URL_OFFLINEADDRESSBOOK\n }\n \"/ews*\" {\n set url_path $static::URL_EXCHANGEWEBSERVICE\n }\n default {\n ECA::disable\n return\n }\n }\n\n if { ! [ info exists f_ntlm_auth_succeed ] } {\n set f_ntlm_auth_succeed 0\n }\n if { ! [ info exists sid_cache ] } {\n set sid_cache \"\"\n }\n if { ! [ info exists PROFILE_POLICY_TIMEOUT ] } { \n set PROFILE_POLICY_TIMEOUT [PROFILE::access access_policy_timeout]\n }\n if { ! [ info exists PROFILE_MAX_SESS_TIMEOUT ] } {\n set PROFILE_MAX_SESS_TIMEOUT [PROFILE::access max_session_timeout]\n }\n if { ! [ info exists src_ip ] } {\n set src_ip [IP::remote_addr]\n }\n if { ! [ info exists PROFILE_RESTRICT_SINGLE_IP ] } {\n set PROFILE_RESTRICT_SINGLE_IP 1\n }\n\n set http_method [HTTP::method]\n set http_hdr_host [HTTP::host]\n set http_hdr_uagent [HTTP::header User-Agent]\n set http_uri [HTTP::uri]\n set http_content_len [HTTP::header Content-Length]\n set MRHSession_cookie [HTTP::cookie value MRHSession]\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX method: $http_method\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Src IP: $src_ip\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX User-Agent: $http_hdr_uagent\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP uri: $http_uri\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP len: $http_content_len\"\n\n if { ! [ info exists ECA_METADATA_ARG ] } {\n # Generating argument for ECA::metadata\n # The NTLM configuration name is derived from assigned virtual name with the algorithm as follows:\n # <virtual-fullpath> ::= <folder-path>\"/\"<virtual-basename> as \"/\" is the last \"/\" char.\n # <config-fullpath> ::= <folder-path>\"/\" \"exch_ntlm\" \"_\" <virtual-basename>\n # e.g. Let us say the virtual name is \"/prod/exch/vs1\", The folder path is \"/prod/exch/\",\n # then object name will be \"/prod/exch/exch_ntlm_vs1\".\n set vs_name [virtual name]\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX virtual: $vs_name\"\n set slash_index [ string last / $vs_name ]\n if { $slash_index == -1 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Error: the virtual name does not contain folder information\"\n ACCESS::disable\n TCP::close\n return\n }\n set ECA_METADATA_ARG \"select_ntlm:\"\n append ECA_METADATA_ARG [ string range $vs_name 0 $slash_index ]\n append ECA_METADATA_ARG \"exch_ntlm_\"\n append ECA_METADATA_ARG [ string range $vs_name [ expr { $slash_index + 1 } ] end ]\n unset slash_index\n unset vs_name\n }\n\n if { $use_auth == $static::USE_NTLM_AUTH } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Enable ECA: $ECA_METADATA_ARG\"\n ECA::enable\n ECA::select $ECA_METADATA_ARG\n return\n } else {\n set recvd_auth $static::RECVD_AUTH_NONE\n set http_hdr_auth [HTTP::header Authorization]\n set auth_data [split $http_hdr_auth \" \"]\n if { $http_hdr_auth != \"\" } {\n if { [ llength $auth_data ] == 2 } {\n set auth_scheme [ lindex $auth_data 0]\n if { [string equal -nocase $auth_scheme \"ntlm\" ] == 1 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Recv'd HTTP NTLM Authentication\"\n set recvd_auth $static::RECVD_AUTH_NTLM\n } elseif { [ string equal -nocase [ lindex $auth_data 0] \"basic\" ] == 1 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Recv'd HTTP Basic Authentication\"\n set recvd_auth $static::RECVD_AUTH_BASIC\n set user [string tolower [HTTP::username]]\n set password [HTTP::password]\n }\n }\n }\n if { $use_auth == $static::USE_BASIC_AUTH } {\n if { $recvd_auth == $static::RECVD_AUTH_BASIC } {\n # Defer the process until later\n } else {\n HTTP::respond 401 -version 1.1 noserver WWW-Authenticate \"Basic realm=\\\"$http_hdr_host\\\"\" \\\n Set-Cookie $static::ACCESS_DEL_COOKIE_HDR_VAL Connection Close\n return\n }\n } elseif { $use_auth == $static::USE_NTLM_BASIC_AUTH } {\n if { ($recvd_auth == $static::RECVD_AUTH_NTLM) || ($f_ntlm_auth_succeed == 1) } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Enable ECA: $ECA_METADATA_ARG\"\n ECA::enable\n ECA::select $ECA_METADATA_ARG\n return\n } elseif { $recvd_auth == $static::RECVD_AUTH_BASIC } {\n # Defer the process until later\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Request Authorization: NTLM + Basic\"\n HTTP::respond 401 -version 1.1 noserver WWW-Authenticate \"Basic realm=\\\"$http_hdr_host\\\"\" \\\n WWW-Authenticate \"NTLM\" Set-Cookie $static::ACCESS_DEL_COOKIE_HDR_VAL Connection Close\n return\n }\n }\n\n # Disable NTLM auth\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Disable ECA\"\n ECA::disable\n # Disable KCD sso\n set f_disable_sso 1\n\n if { $MRHSession_cookie != \"\" } {\n if { [ACCESS::session exists -state_allow -sid $MRHSession_cookie] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *VALID* MRHSession cookie: $MRHSession_cookie\"\n # Default profile access setting is false\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Release the request\"\n return\n }\n elseif { [ IP::addr $src_ip equals [ ACCESS::session data get -sid $MRHSession_cookie \"session.user.clientip\" ] ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP matched. Release the request\"\n return\n }\n else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP does not matched\"\n }\n }\n else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *INVALID* MRHSession cookie: $MRHSession_cookie\"\n }\n\n set MRHSession_cookie \"\"\n HTTP::cookie remove MRHSession\n }\n\n set user_key {}\n if { $PROFILE_RESTRICT_SINGLE_IP == 1 } {\n append user_key $src_ip\n }\n append user_key $password\n binary scan [md5 $user_key ] H* user_key\n set user_key \"$user.$user_key\"\n\n set apm_cookie_list [ ACCESS::user getsid $user_key ]\n if { [ llength $apm_cookie_list ] != 0 } {\n set MRHSession_cookie [ ACCESS::user getkey [ lindex $apm_cookie_list 0 ] ]\n if { $MRHSession_cookie != \"\" } {\n HTTP::cookie remove MRHSession \n HTTP::cookie insert name MRHSession value $MRHSession_cookie\n return\n }\n }\n\n HTTP::cookie remove MRHSession\n HTTP::header insert \"clientless-mode\" 1\n HTTP::header insert \"username\" $user\n HTTP::header insert \"password\" $password\n return\n }\n }\n\n when ECA_REQUEST_ALLOWED {\n set f_ntlm_auth_succeed 1\n\n if { $MRHSession_cookie == \"\" } {\n # Retrieve from SID cache\n set MRHSession_cookie $sid_cache\n HTTP::cookie insert name MRHSession value $sid_cache\n }\n\n if { $MRHSession_cookie != \"\" } {\n # Destroy session ID cache. This client should not need session ID cache \n if { ($sid_cache != \"\") && ($sid_cache != $MRHSession_cookie) } {\n set sid_cache \"\"\n }\n if { [ ACCESS::session exists -state_allow $MRHSession_cookie ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *VALID* MRHSession cookie: $MRHSession_cookie\"\n # Default profile access setting is false\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Release the request\"\n return\n }\n elseif { [ IP::addr $src_ip equals [ ACCESS::session data get -sid $MRHSession_cookie \"session.user.clientip\" ] ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP matched. Release the request\"\n return\n }\n else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP does not matched\"\n }\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *INVALID* MRHSession cookie: $MRHSession_cookie\"\n }\n }\n\n set MRHSession \"\"\n set sid_cache \"\"\n HTTP::cookie remove MRHSession\n\n # Build user_key\n set user_key {}\n append user_key [string tolower [ECA::username]] \"@\" [ string tolower [ECA::domainname] ]\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n append user_key \":\" $src_ip\n }\n append user_key \":\" [ECA::client_machine_name]\n\n set apm_cookie_list [ ACCESS::user getsid $user_key ]\n if { [ llength $apm_cookie_list ] != 0 } {\n set MRHSession_cookie [ ACCESS::user getkey [ lindex $apm_cookie_list 0 ] ]\n if { $MRHSession_cookie != \"\" } {\n set sid_cache $MRHSession_cookie\n HTTP::cookie insert name MRHSession value $MRHSession_cookie\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX APM Cookie found: $sid_cache\"\n return\n }\n }\n unset apm_cookie_list\n\n set try 1\n set start_policy_str $src_ip\n append start_policy_str [TCP::client_port]\n\n while { $try <= $static::POLICY_RESULT_POLL_MAXRETRYCYCLE } {\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX NO APM Cookie found\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Trying #$try for $http_method $http_uri $http_content_len\"\n\n if { $http_content_len > $static::FIRST_BIG_POST_CONTENT_LEN } {\n # Wait at below\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX EXEC: table set -notouch -subtable $static::ACCESS_USERKEY_TBLNAME -excl $user_key $start_policy_str $PROFILE_POLICY_TIMEOUT $PROFILE_MAX_SESS_TIMEOUT\"\n set policy_status [table set -notouch -subtable $static::ACCESS_USERKEY_TBLNAME -excl $user_key $start_policy_str $PROFILE_POLICY_TIMEOUT $PROFILE_MAX_SESS_TIMEOUT]\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX DONE: table set -notouch -subtable $static::ACCESS_USERKEY_TBLNAME -excl $user_key $start_policy_str $PROFILE_POLICY_TIMEOUT $PROFILE_MAX_SESS_TIMEOUT\"\n if { $policy_status == $start_policy_str } {\n # ACCESS Policy has not started. Start one\n HTTP::header insert \"clientless-mode\" 1\n break\n } elseif { $policy_status == $static::POLICY_SUCCEED } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX table is out-of-sync retry\"\n table delete -subtable $static::ACCESS_USERKEY_TBLNAME $user_key\n continue\n } elseif { $policy_status == $static::POLICY_FAILED } {\n ACCESS::disable\n TCP::close\n return\n }\n # Wait at below\n }\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Waiting $static::POLICY_RESULT_POLL_INTERVAL ms for $http_method $http_uri\"\n # Touch the entry table\n table lookup -subtable $static::ACCESS_USERKEY_TBLNAME $user_key\n after $static::POLICY_RESULT_POLL_INTERVAL\n\n set apm_cookie_list [ ACCESS::user getsid $user_key ]\n if { [ llength $apm_cookie_list ] != 0 } {\n set MRHSession_cookie [ ACCESS::user getkey [ lindex $apm_cookie_list 0 ] ]\n if { $MRHSession_cookie != \"\" } {\n set sid_cache $MRHSession_cookie\n HTTP::cookie insert name MRHSession value $MRHSession_cookie\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX APM Cookie found: $sid_cache\"\n return\n }\n }\n\n incr try\n }\n\n if { $try > $static::POLICY_RESULT_POLL_MAXRETRYCYCLE } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Policy did not finish in [ expr { $static::POLICY_RESULT_POLL_MAXRETRYCYCLE * $static::POLICY_RESULT_POLL_INTERVAL } ] ms. Close connection for $http_method $http_uri\"\n table delete -subtable $static::ACCESS_USERKEY_TBLNAME $user_key\n ACCESS::disable\n TCP::close\n return\n }\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Releasing request $http_method $http_uri\"\n\n unset try\n unset start_policy_str\n }\n\n when ECA_REQUEST_DENIED {\n set f_ntlm_auth_succeed 0\n }\n\n when HTTP_RESPONSE_RELEASE {\n if { ! [info exists user_key] } {\n return\n }\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP response: status: [HTTP::status]\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP response: Server: [HTTP::header Server]\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP response: Content-Length: [HTTP::header Content-Length]\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP response: WWW-Authenticate: [HTTP::header WWW-Authenticate]\"\n }\n\n when ACCESS_SESSION_STARTED {\n if { [ info exists user_key ] } {\n ACCESS::session data set \"session.user.uuid\" $user_key\n ACCESS::session data set \"session.user.microsoft-exchange-client\" 1\n }\n }\n\n when ACCESS_ACL_ALLOWED {\n if { [ info exists f_disable_sso ] && $f_disable_sso == 1 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Disable WEBSSO\"\n WEBSSO::disable\n }\n }\n\n when ACCESS_POLICY_COMPLETED {\n if { ! [ info exists user_key ] } {\n return\n }\n\n set user_key_value \"\"\n set f_delete_session 0\n set policy_result [ACCESS::policy result]\n set sid [ ACCESS::session sid ]\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX ACCESS_POLICY_COMPLETED: policy_result = \\\"$policy_result\\\" user_key = \\\"$user_key\\\" sid = \\\"$sid\\\"\"\n\n switch $policy_result {\n \"allow\" {\n set user_key_value $sid\n set sid_cache $user_key_value\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Result: Allow: $user_key\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX sid = $sid\"\n\n }\n \"deny\" {\n ACCESS::respond 401 content $static::actsync_401_http_body Set-Cookie $static::ACCESS_DEL_COOKIE_HDR_VAL Connection Close\n set f_delete_session 1\n }\n default {\n ACCESS::respond 503 content $static::actsync_503_http_body Connection Close\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Got unsupported policy result for $user_key ($sid)\"\n set f_delete_session 1\n }\n }\n\n if { $f_ntlm_auth_succeed == 1 } {\n if { $user_key_value != \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Setting $user_key => $static::POLICY_SUCCEED\"\n table set -subtable $static::ACCESS_USERKEY_TBLNAME $user_key $static::POLICY_SUCCEED\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Setting $user_key => $static::POLICY_FAILED $static::POLICY_DONE_WAIT_SEC $static::POLICY_DONE_WAIT_SEC_in table $static::ACCESS_USERKEY_TBLNAME\"\n table set -subtable $static::ACCESS_USERKEY_TBLNAME $user_key $static::POLICY_FAILED $static::POLICY_DONE_WAIT_SEC $static::POLICY_DONE_WAIT_SEC\n }\n }\n\n if { $f_delete_session == 1 } {\n ACCESS::session remove\n set f_delete_session 0\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Removing the session for $user_key.\"\n }\n }\ndefinition-signature d/SlmwsO4YeDlh3eJpLqam9ytq0/EkWnAce1XTQ5bxOyla0x/VHjkr9dvoo3awaxp7lEjAenIgwGpS2jL5R1hq48WGZN2nu9LDKVjTosrq7j1MHbeKiIW8yXc3IEUtbbkhkAGNnMmfDYMD8Vg7l+iBx6B/WvRTZLr+tmppFf0BIr2Z7FWWU6c9OVl8YH1VuqqFX/lKICn2EXDhebRDRVvuXobLvbjZQxj+tqdUU2vuLzXYot/RUgClXHrg6Z2ZC6/WuAq4pp/XA2kvzWotQiY9gEceQdMC7/BxPSR8xo4VPNqkFkEPjh5hehZP0tFONTZaMaH1klVg4QbvHH5MRiBQ==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_APM_ExchangeSupport_helper", - "partition": "Common", - "fullPath": "/Common/_sys_APM_ExchangeSupport_helper", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_APM_ExchangeSupport_helper?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \n # The purpose of this iRule is for help the main virtual for the timing of the HTTP request retry\n # during the SSO process for OutlookAnywhere protocol request which has a Content-Length value of 1GB.\n\n when HTTP_REQUEST {\n # Waiting for the first chunk of data.\n HTTP::collect 1\n }\n\n when HTTP_REQUEST_DATA {\n # Respond 401 and close the connection once we received the data.\n HTTP::respond 401 WWW-Authenticate NTLM Connection close\n }\ndefinition-signature fnJWcC75FIDV4savxGjyZ5sTdRTen+3mItejhseH06qn+qBXjOl/j7wYRSLDv1IcFezF8BunbDftMHXrW7QRuPuxhjMIc4vaALE2CCGkO0xcs258F+nkPeeJKoR5mTHY/E5BWpOAISinUBUSA3/nUm8blXkMwVg/Q95360jcCOoi6csgJa97OSKIF9h9OQCylh1qGBsDRHEXCR3ycw5Eb4T2QQSdBn09vr8Hgdpi/9fUER97nzJe8T/RuoG+nQ7bc8F9yzG6nFa/CQtRYDybDrcNgllCfVloXZAHZS3dCpq6FnS/FaEWfSIujmV+lXkxY23Xz9Wf6i1h/feW9fEUiQ==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_APM_ExchangeSupport_main", - "partition": "Common", - "fullPath": "/Common/_sys_APM_ExchangeSupport_main", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_APM_ExchangeSupport_main?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \n # Global variables\n # static::POLICY_RESULT_CACHE_AUTHFAILED\n # Administrator can set this into 1, when there is a necessity to cache failed policy result.\n # This may be needed to avoid account locked caused by the Active Sync device when it uses wrong passwords.\n # One possible scenario, is that when the user changes the password in Active Directory, but missed to changed in their devices.\n # Responses\n # On denied result\n # Administrator can customize the responses to the device depends on more complex conditions when necessary.\n # In those cases, please use ACCESS::respond command.\n # The following is the syntax of ACCESS::respond\n # ACCESS::respond <status code> [ content <body> ] [ <Additional Header> <Additional Header value>* ]\n # e.g. ACCESS::respond 401 content \"Error: Denied\" WWW-Authenticate \"basic realm=\\\"f5.com\\\"\" Connection close\n when RULE_INIT {\n # Please set the following global variables for customized responses.\n set static::actsync_401_http_body \"<html><title>Authentication Failured</title><body>Error: Authentication Failure</body></html>\"\n set static::actsync_503_http_body \"<html><title>Service is not available</title><body>Error: Service is not available</body></html>\"\n set static::ACCESS_LOG_PREFIX \"01490000:7:\"\n\n # Second Virtual Server name for 401 NTLM responder\n set static::ACCESS_SECOND_VIRTUAL_NAME \"_ACCESS_401_NTLM_responder_HTTPS\"\n\n set static::POLICY_INPROGRESS \"policy_inprogress\"\n set static::POLICY_AUTHFAILED \"policy_authfailed\"\n # The request with huge content length can not be used for starting ACCESS session.\n # This kind of request will be put on hold, and this iRule will try to use another\n # request to start the session. The following value is used for Outlook Anywhere.\n set static::OA_MAGIC_CONTENT_LEN 1073741824\n\n # Similar with OutlookAnywhere case, ACCESS can not use the request which is\n # larger then following size. This becomes an issue with application that using\n # Exchange Web Service as its main protocol such as Mac OS X applications\n # (e.g. Mail app, Microsoft Entourage, etc)\n # This kind of request will be put on hold, and this iRule will try to use another\n # request to start the session.\n set static::FIRST_BIG_POST_CONTENT_LEN 640000\n\n # Set it into 1 if the backend EWS handler accepts HTTP Basic Authentication.\n set static::EWS_BKEND_BASIC_AUTH 0\n # Set it into 1 if the backend RPC-over-HTTP handler accepts HTTP Basic Authentication.\n set static::RPC_OVER_HTTP_BKEND_BASIC_AUTH 0\n # The following variable controls the polling mechanism.\n set static::POLICY_RESULT_POLL_INTERVAL 250\n set static::POLICY_RESULT_POLL_MAXRETRYCYCLE 600\n\n # Set this global variable to 1 for caching authentication failure\n # Useful for avoiding account locked out.\n set static::POLICY_RESULT_CACHE_AUTHFAILED 0\n\n # set this global variable to set alternative timeout for particular session\n set static::POLICY_ALT_INACTIVITY_TIMEOUT 120\n\n set static::ACCESS_USERKEY_TBLNAME \"_access_userkey\"\n\n\n set static::ACCESS_DEL_COOKIE_HDR_VAL \"MRHSession=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/\"\n\n log -noname accesscontrol.local1.debug \"01490000:7: RPC_OVER_HTTP_BKEND_BASIC_AUTH = $static::RPC_OVER_HTTP_BKEND_BASIC_AUTH\"\n log -noname accesscontrol.local1.debug \"01490000:7: EWS_BKEND_BASIC_AUTH = $static::EWS_BKEND_BASIC_AUTH\"\n }\n when ACCESS_ACL_ALLOWED {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX [HTTP::method] [HTTP::uri] [HTTP::header Content-Length]\"\n\n if { [ info exists f_rpc_over_http ] && $f_rpc_over_http == 1 } {\n if { $static::RPC_OVER_HTTP_BKEND_BASIC_AUTH == 0 } {\n if { [ info exists f_oa_magic_content_len ] && $f_oa_magic_content_len == 1 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Use this virtual $static::ACCESS_SECOND_VIRTUAL_NAME just once. Will be reset back after disconnection.\"\n use virtual $static::ACCESS_SECOND_VIRTUAL_NAME\n }\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Remove HTTP Auth header\"\n HTTP::header remove Authorization\n }\n }\n # MSFT Exchange's EWS request handler always requesting NTLM even the connection has been\n # already authenticated if there is a HTTP Basic Auth in the request.\n if { [ info exists f_exchange_web_service ] && $f_exchange_web_service == 1 } {\n if { $static::EWS_BKEND_BASIC_AUTH == 0 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Removing HTTP Basic Authorization header\"\n HTTP::header remove Authorization\n }\n }\n }\n\n when HTTP_REQUEST {\n set http_path [ string tolower [HTTP::path] ]\n set f_clientless_mode 0\n set f_alt_inactivity_timeout 0\n set f_rpc_over_http 0\n set f_exchange_web_service 0\n set f_auto_discover 0\n set f_activesync 0\n set f_offline_address_book 0\n set f_availability_service 0\n\n # Here put appropriate pool when necessary.\n switch -glob $http_path {\n \"/rpc/rpcproxy.dll\" {\n # Supports for RPC over HTTP. (Outlook Anywhere)\n set f_rpc_over_http 1\n }\n \"/autodiscover/autodiscover.xml\" {\n # Supports for Auto Discover protocol.\n set f_auto_discover 1\n # This request does not require long inactivity timeout.\n # Don't use this for now\n set f_alt_inactivity_timeout 0\n }\n \"/microsoft-server-activesync\" {\n # Supports for ActiveSync\n set f_activesync 1\n }\n \"/oab/*\" {\n # Supports for Offline Address Book\n set f_offline_address_book 1\n }\n \"/ews/*\" {\n # Support for Exchange Web Service\n # Outlook's Availability Service borrows this protocol.\n set f_exchange_web_service 1\n }\n \"/as/*\" {\n # Support for Availability Service.\n # do nothing for now. (Untested)\n set f_availability_service 1\n }\n default {\n return\n }\n }\n\n set f_reqside_set_sess_id 0\n set http_method [HTTP::method]\n set http_hdr_host [HTTP::host]\n set http_hdr_uagent [HTTP::header User-Agent]\n set src_ip [IP::remote_addr]\n set http_uri [HTTP::uri]\n set http_content_len [HTTP::header Content-Length]\n set MRHSession_cookie [HTTP::cookie value MRHSession]\n set auth_info_b64enc \"\"\n\n if { ! [ info exists PROFILE_POLICY_TIMEOUT ] } {\n set PROFILE_POLICY_TIMEOUT [PROFILE::access access_policy_timeout]\n }\n if { ! [ info exists PROFILE_MAX_SESS_TIMEOUT ] } {\n set PROFILE_MAX_SESS_TIMEOUT [PROFILE::access max_session_timeout]\n }\n if { ! [ info exists PROFILE_RESTRICT_SINGLE_IP ] } {\n set PROFILE_RESTRICT_SINGLE_IP 1\n }\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX method: $http_method\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Src IP: $src_ip\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX User-Agent: $http_hdr_uagent\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP uri: $http_uri\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP len: $http_content_len\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Restrict-to-single-client-ip: $PROFILE_RESTRICT_SINGLE_IP\"\n\n # First, do we have valid MRHSession cookie.\n if { $MRHSession_cookie != \"\" } {\n if { [ACCESS::session exists -state_allow -sid $MRHSession_cookie] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *VALID* MRHSession cookie: $MRHSession_cookie\"\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *INVALID* MRHSession cookie: $MRHSession_cookie\"\n set MRHSession_cookie \"\"\n HTTP::cookie remove MRHSession\n }\n }\n\n set http_hdr_auth [HTTP::header Authorization]\n if { [ string match -nocase {basic *} $http_hdr_auth ] != 1 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Not basic authentication. Ignore received auth header\"\n set http_hdr_auth \"\"\n }\n\n if { $http_hdr_auth == \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX No/Empty Auth header\"\n # clean up the cookie\n if { $MRHSession_cookie == \"\" } {\n HTTP::respond 401 content $static::actsync_401_http_body WWW-Authenticate \"Basic realm=\\\"[HTTP::header Host]\\\"\" Set-Cookie $static::ACCESS_DEL_COOKIE_HDR_VAL Connection close\n return\n }\n # Do nothing if we have a valid MRHSession cookie.\n }\n\n set f_release_request 0\n # Optimization for clients which support cookie\n if { $MRHSession_cookie != \"\" } {\n # Default profile access setting is false\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n set f_release_request 1\n }\n elseif { [ IP::addr $src_ip equals [ ACCESS::session data get -sid $MRHSession_cookie \"session.user.clientip\" ] ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP matched\"\n set f_release_request 1\n }\n else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP does not matched\"\n set MRHSession_cookie \"\"\n HTTP::cookie remove MRHSession\n }\n }\n\n if { $f_release_request == 0 } {\n set apm_username [ string tolower [HTTP::username]]\n set apm_password [HTTP::password]\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n binary scan [md5 \"$apm_password\"] H* user_hash\n } else {\n binary scan [md5 \"$apm_password$src_ip\"] H* user_hash\n }\n\n set user_key {}\n append user_key $apm_username \".\" $user_hash\n unset user_hash\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP Hdr Auth: $http_hdr_auth\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX apm_username: $apm_username\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX user_key = $user_key\"\n set apm_cookie_list [ ACCESS::user getsid $user_key ]\n if { [ llength $apm_cookie_list ] != 0 } {\n set apm_cookie [ ACCESS::user getkey [ lindex $apm_cookie_list 0 ] ]\n if { $apm_cookie != \"\" } {\n HTTP::cookie insert name MRHSession value $apm_cookie\n set f_release_request 1\n }\n }\n }\n\n if { $http_content_len == $static::OA_MAGIC_CONTENT_LEN } {\n set f_oa_magic_content_len 1\n }\n\n set f_sleep_here 0\n set retry 1\n\n while { $f_release_request == 0 && $retry <= $static::POLICY_RESULT_POLL_MAXRETRYCYCLE } {\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Trying #$retry for $http_method $http_uri $http_content_len\"\n\n # This is also going to touch the table entry timer.\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Reading $user_key from table $static::ACCESS_USERKEY_TBLNAME\"\n\n set apm_cookie [table lookup -subtable $static::ACCESS_USERKEY_TBLNAME -notouch $user_key]\n if { $apm_cookie != \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Verifying table cookie = $apm_cookie\"\n\n # Accessing SessionDB is not that cheap. Here we are trying to check known value.\n if { $apm_cookie == \"policy_authfailed\" || $apm_cookie == \"policy_inprogress\"} {\n # Do nothing\n } elseif { ! [ ACCESS::session exists $apm_cookie ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX table cookie = $apm_cookie is out-of-sync\"\n # Table value is out of sync. Ignores it.\n set apm_cookie \"\"\n }\n }\n\n switch $apm_cookie {\n \"\" {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX NO APM Cookie found\"\n\n if { [ info exists f_oa_magic_content_len ] && $f_oa_magic_content_len == 1 } {\n # Outlook Anywhere request comes in pair. The one with 1G payload is not usable\n # for creating new session since 1G content-length is intended for client to upload\n # the data when needed.\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Start to wait $static::POLICY_RESULT_POLL_INTERVAL ms for request with magic content-len\"\n set f_sleep_here 1\n } elseif { [ info exists f_exchange_web_service ] && $f_exchange_web_service == 1 && $http_content_len > $static::FIRST_BIG_POST_CONTENT_LEN } {\n # Here we are getting large EWS request, which can't be used for starting new session\n # in clientless-mode. Have it here waiting for next smaller one.\n # We are holding the request here in HTTP filter, and HTTP filter automatically\n # clamping down the TCP window when necessary.\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Start to wait $static::POLICY_RESULT_POLL_INTERVAL ms for big EWS request\"\n set f_sleep_here 1\n } else {\n set apm_cookie \"policy_inprogress\"\n set f_reqside_set_sess_id 1\n set f_release_request 1\n }\n }\n \"policy_authfailed\" {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Found $user_key with AUTH_FAILED\"\n HTTP::respond 401 content $static::actsync_401_http_body\n set f_release_request 1\n }\n \"policy_inprogress\" {\n if { [ info exists f_activesync ] && ($f_activesync == 1) } {\n # For ActiveSync requests, aggressively starts new session.\n set f_reqside_set_sess_id 1\n set f_release_request 1\n } else {\n set f_sleep_here 1\n }\n }\n default {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Using MRHSession = $apm_cookie\"\n HTTP::header insert Cookie \"MRHSession=$apm_cookie\"\n set f_release_request 1\n }\n }\n\n if { $f_reqside_set_sess_id == 1 } {\n set f_reqside_set_sess_id 0\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Setting $user_key=$apm_cookie $PROFILE_POLICY_TIMEOUT $PROFILE_MAX_SESS_TIMEOUT\"\n set f_clientless_mode 1\n HTTP::cookie remove MRHSession\n HTTP::header insert \"clientless-mode\" 1\n HTTP::header insert \"username\" $apm_username\n HTTP::header insert \"password\" $apm_password\n table set -subtable $static::ACCESS_USERKEY_TBLNAME $user_key $apm_cookie $PROFILE_POLICY_TIMEOUT $PROFILE_MAX_SESS_TIMEOUT\n }\n\n if { $f_sleep_here == 1 } {\n set f_sleep_here 0\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Waiting $static::POLICY_RESULT_POLL_INTERVAL ms for $http_method $http_uri\"\n after $static::POLICY_RESULT_POLL_INTERVAL\n }\n\n incr retry\n }\n\n if { $f_release_request == 0 && $retry >= $static::POLICY_RESULT_POLL_MAXRETRYCYCLE } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Policy did not finish in [expr { $static::POLICY_RESULT_POLL_MAXRETRYCYCLE * $static::POLICY_RESULT_POLL_INTERVAL } ] ms. Close connection for $http_method $http_uri\"\n\n table delete -subtable $static::ACCESS_USERKEY_TBLNAME $user_key\n ACCESS::disable\n TCP::close\n return\n }\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Releasing request $http_method $http_uri\"\n }\n\n when ACCESS_SESSION_STARTED {\n if { [ info exists user_key ] } {\n ACCESS::session data set \"session.user.uuid\" $user_key\n ACCESS::session data set \"session.user.microsoft-exchange-client\" 1\n\n if { [ info exists f_activesync ] && $f_activesync == 1 } {\n ACCESS::session data set \"session.user.microsoft-activesync\" 1\n }\n elseif { [ info exists f_auto_discover ] && $f_auto_discover == 1 } {\n ACCESS::session data set \"session.user.microsoft-autodiscover\" 1\n }\n elseif { [ info exists f_availability_service ] && $f_availability_service == 1 } {\n ACCESS::session data set \"session.user.microsoft-availabilityservice\" 1\n }\n elseif { [ info exists f_rpc_over_http ] && $f_rpc_over_http == 1 } {\n ACCESS::session data set \"session.user.microsoft-rpcoverhttp\" 1\n }\n elseif { [ info exists f_offline_address_book ] && $f_offline_address_book == 1 } {\n ACCESS::session data set \"session.user.microsoft-offlineaddressbook\" 1\n }\n elseif { [ info exists f_exchange_web_service ] && $f_exchange_web_service == 1 } {\n ACCESS::session data set \"session.user.microsoft-exchangewebservice\" 1\n }\n }\n if { [ info exists f_alt_inactivity_timeout ] && $f_alt_inactivity_timeout == 1 } {\n ACCESS::session data set \"session.inactivity_timeout\" $static::POLICY_ALT_INACTIVITY_TIMEOUT\n }\n }\n\n when HTTP_RESPONSE {\n if { [ info exists f_auto_discover ] && $f_auto_discover == 1 } {\n set content_len [ HTTP::header Content-Length ]\n if { $content_len > 0 } {\n HTTP::collect $content_len\n }\n }\n }\n when HTTP_RESPONSE_DATA {\n if { [ info exists f_auto_discover ] && $f_auto_discover == 1 } {\n if { [ regsub -line {<AuthPackage>Ntlm</AuthPackage>} [ HTTP::payload ] {<AuthPackage>Basic</AuthPackage>} payload ] != 0 } {\n HTTP::payload replace 0 $content_len $payload\n }\n }\n }\n when ACCESS_POLICY_COMPLETED {\n if { ! [ info exists user_key ] } {\n return\n }\n\n set user_key_value \"\"\n set f_delete_session 0\n set policy_result [ACCESS::policy result]\n set sid [ ACCESS::session sid ]\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX ACCESS_POLICY_COMPLETED: policy_result = \\\"$policy_result\\\" user_key = \\\"$user_key\\\" sid = \\\"$sid\\\"\"\n\n set inactivity_timeout [ACCESS::session data get \"session.inactivity_timeout\"]\n set max_sess_timeout [ACCESS::session data get \"session.max_session_timeout\"]\n if { $max_sess_timeout == \"\" } {\n set max_sess_timeout $PROFILE_MAX_SESS_TIMEOUT\n }\n\n switch $policy_result {\n \"allow\" {\n # We depends on this table record self-cleanup capability in order to\n # indirectly sync with session DB.\n set user_key_value $sid\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Result: Allow: $user_key => $sid $inactivity_timeout $max_sess_timeout\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX user_key_value = $user_key_value\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX sid = $sid\"\n }\n \"deny\" {\n # When necessary the admin here can check appropriate session variable\n # and decide what response more appropriate then this default response.\n ACCESS::respond 401 content $static::actsync_401_http_body Set-Cookie $static::ACCESS_DEL_COOKIE_HDR_VAL Connection close\n if { $static::POLICY_RESULT_CACHE_AUTHFAILED == 1 } {\n set user_key_value $static::POLICY_AUTHFAILED\n } else {\n set f_delete_session 1\n }\n }\n default {\n ACCESS::respond 503 content $static::actsync_503_http_body Connection close\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Got unsupported policy result for $user_key ($sid)\"\n set f_delete_session 1\n }\n }\n if { $user_key_value != \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Setting $user_key => $user_key_value $inactivity_timeout $max_sess_timeout in table $static::ACCESS_USERKEY_TBLNAME\"\n\n table set -subtable $static::ACCESS_USERKEY_TBLNAME $user_key $user_key_value $inactivity_timeout $max_sess_timeout\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Deleting $user_key in table $static::ACCESS_USERKEY_TBLNAME\"\n\n table delete -subtable $static::ACCESS_USERKEY_TBLNAME $user_key\n }\n\n if { $f_delete_session == 1 } {\n ACCESS::session remove\n set f_delete_session 0\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Removing the session for $user_key.\"\n }\n }\ndefinition-signature feX9LM+vB6YOEdVF+EA1JtNyVkPaB7gwdW0JzaB083MXl4yPP2nZnjm+WAx3YQhsmLttq5UkPl1zHpr5H9cwJX1bu9BNMi/+n0bIqWOipDHhhSYQ+TH+a5jQUSeftISr52BSQxh0cQKZkzM3rFU/qRZn9D9Dbf0kDGiDC1KWwVosrdjp5tVHOiQXWx8zybbGPFfgBcIBE6IvOvGbh5ohebVL2ADZm0URRj2NM4ZvZ2T3C14k2rHGXnDdRsvhmf5USZ+FH1hoKtWRxqtFjkWIaqw8leenXeot1j2bdKy92/AVTC9oZj1HJN1ePuQo5v414zlUhMEtkVy/gaxvj1+vPQ==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_APM_Office365_SAML_BasicAuth", - "partition": "Common", - "fullPath": "/Common/_sys_APM_Office365_SAML_BasicAuth", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_APM_Office365_SAML_BasicAuth?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen RULE_INIT {\n set static::ACCESS_LOG_ECP_PREFIX \"014d0002:7: ECP client\"\n }\n when HTTP_REQUEST {\n set http_path [string tolower [HTTP::path]]\n set http_hdr_auth [HTTP::header Authorization]\n set http_hdr_client_app [HTTP::header X-MS-Client-Application]\n set http_hdr_client_ip [HTTP::header X-MS-Forwarded-Client-IP]\n set MRHSession_cookie [HTTP::cookie value MRHSession]\n\n if { ($http_path == \"/saml/idp/profile/redirectorpost/sso\") &&\n ($http_hdr_client_app != \"\") &&\n ($http_hdr_client_app contains \"Microsoft.Exchange\") } {\n HTTP::uri \"/saml/idp/profile/ecp/sso\"\n } elseif { ($http_path != \"/saml/idp/profile/ecp/sso\") } {\n return\n }\n set f_saml_ecp_request 1\n unset http_path\n\n # If MRHSession cookie from client is present, skip further processing.\n if { $MRHSession_cookie != \"\" } {\n if { [ACCESS::session exists -state_allow -sid $MRHSession_cookie] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_ECP_PREFIX HTTP *VALID* MRHSession cookie: $MRHSession_cookie\"\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_ECP_PREFIX HTTP *INVALID* MRHSession cookie: $MRHSession_cookie\"\n }\n return\n }\n\n if { ($http_hdr_client_app != \"\") &&\n ($http_hdr_client_app contains \"Microsoft.Exchange\") &&\n ($http_hdr_client_ip != \"\") } {\n\t set src_ip $http_hdr_client_ip\n\t}\n unset http_hdr_client_app\n unset http_hdr_client_ip\n\n if { ! [ info exists src_ip ] } {\n set src_ip [IP::remote_addr]\n }\n\n # Only allow HTTP Basic Authentication.\n if { ($http_hdr_auth == \"\") || ([ string match -nocase {basic *} $http_hdr_auth ] != 1 ) } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_ECP_PREFIX ECP request does not contain HTTP Basic Authorization header.\"\n unset http_hdr_auth\n return\n }\n\n set apm_username [ string tolower [HTTP::username] ]\n set apm_password [HTTP::password]\n\n binary scan [md5 \"$apm_password$src_ip\"] H* user_hash\n set user_key {}\n append user_key $apm_username \".\" $user_hash\n unset user_hash\n\n set apm_cookie_list [ ACCESS::user getsid $user_key ]\n if { [ llength $apm_cookie_list ] != 0 } {\n set apm_cookie [ ACCESS::user getkey [ lindex $apm_cookie_list 0 ] ]\n if { $apm_cookie != \"\" } {\n HTTP::cookie insert name MRHSession value $apm_cookie\n }\n }\n\n HTTP::header insert \"clientless-mode\" 1\n HTTP::header insert \"username\" $apm_username\n HTTP::header insert \"password\" $apm_password\n unset apm_username\n unset apm_password\n unset http_hdr_auth\n }\n\n when ACCESS_SESSION_STARTED {\n if { [ info exists f_saml_ecp_request ] && $f_saml_ecp_request == 1 } {\n if { [ info exists user_key ] } {\n ACCESS::session data set \"session.user.uuid\" $user_key\n }\n if { [ info exists src_ip ] } {\n ACCESS::session data set \"session.user.clientip\" $src_ip\n }\n }\n }\n\n when HTTP_RESPONSE {\n if { [ info exists f_saml_ecp_request ] && $f_saml_ecp_request == 1 } {\n unset f_saml_ecp_request\n unset apm_cookie\n }\n }\ndefinition-signature hbkbqtFWuaW9oegh6SzMveAg8WY7+tJBg32EgZs3djEixBoxjXoktrb/mcfl3FmsQXRgE6LgrZCeIvjqLdk/8/wq/4wnd4naYm2VALVoBPeETuCpWdmiyiwuvFC5G4VlYhqhYhRsx9mQhbRWm8/YvoBpvNnCCSdyx/wL+KcYQGU7Zv4woZrtruq4RiLCm6ohutAWdS2NbeIQHG37NFXT6wV6pR9EIqrkNetbXAdi6OZGuuthSXMSXMz64+CwkzpptxP3bhOsFvM/gq8FfWR8rsRJfxaHg+njkkgKSkH3TL7vhDnL3pXcHhH1/9P6qDU++YAyiXzppOlLHib33Rv0yw==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_APM_activesync", - "partition": "Common", - "fullPath": "/Common/_sys_APM_activesync", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_APM_activesync?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen RULE_INIT {\n set static::actsync_401_http_body \"<html><title>Authentication Failed</title><body>Error: Authentication Failure</body></html>\"\n set static::actsync_503_http_body \"<html><title>Service is not available</title><body>Error: Service is not available</body></html>\"\n set static::ACCESS_LOG_PREFIX \"01490000:7:\"\n }\n when HTTP_REQUEST {\n set http_path [string tolower [HTTP::path]]\n set f_clientless_mode 0\n\n if { $http_path == \"/microsoft-server-activesync\" } {\n }\n elseif { $http_path == \"/autodiscover/autodiscover.xml\" } {\n set f_auto_discover 1\n }\n else return\n\n if { ! [ info exists src_ip ] } {\n set src_ip [IP::remote_addr]\n }\n if { ! [ info exists PROFILE_RESTRICT_SINGLE_IP ] } {\n set PROFILE_RESTRICT_SINGLE_IP \t 1\n }\n # Only allow HTTP Basic Authentication.\n set auth_info_b64enc \"\"\n set http_hdr_auth [HTTP::header Authorization]\n regexp -nocase {Basic (.*)} $http_hdr_auth match auth_info_b64enc\n if { $auth_info_b64enc == \"\" } {\n set http_hdr_auth \"\"\n }\n\n if { $http_hdr_auth == \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Empty/invalid HTTP Basic Authorization header\"\n HTTP::respond 401 content $static::actsync_401_http_body Connection close\n return\n }\n\n set MRHSession_cookie [HTTP::cookie value MRHSession]\n # Do we have valid MRHSession cookie.\n if { $MRHSession_cookie != \"\" } {\n if { [ACCESS::session exists -state_allow -sid $MRHSession_cookie] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *VALID* MRHSession cookie: $MRHSession_cookie\"\n # Default profile access setting is false\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n return\n }\n elseif { [ IP::addr $src_ip equals [ ACCESS::session data get -sid $MRHSession_cookie \"session.user.clientip\" ] ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP matched\"\n return\n }\n else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP does not matched\"\n }\n }\n else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *INVALID* MRHSession cookie: $MRHSession_cookie\"\n }\n set MRHSession_cookie \"\"\n HTTP::cookie remove MRHSession\n }\n\n set apm_username [ string tolower [HTTP::username] ]\n set apm_password [HTTP::password]\n\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n binary scan [md5 \"$apm_password$\"] H* user_hash\n } else {\n binary scan [md5 \"$apm_password$src_ip\"] H* user_hash\n }\n set user_key {}\n append user_key $apm_username \".\" $user_hash\n unset user_hash\n\n set f_insert_clientless_mode 0\n set apm_cookie_list [ ACCESS::user getsid $user_key ]\n if { [ llength $apm_cookie_list ] != 0 } {\n set apm_cookie [ ACCESS::user getkey [ lindex $apm_cookie_list 0 ] ]\n if { $apm_cookie != \"\" } {\n HTTP::cookie insert name MRHSession value $apm_cookie\n } else {\n set f_insert_clientless_mode 1\n }\n } else {\n set f_insert_clientless_mode 1\n }\n\n if { $f_insert_clientless_mode == 1 } {\n HTTP::header insert \"clientless-mode\" 1\n HTTP::header insert \"username\" $apm_username\n HTTP::header insert \"password\" $apm_password\n }\n unset f_insert_clientless_mode\n }\n when ACCESS_SESSION_STARTED {\n if { [ info exists user_key ] } {\n ACCESS::session data set \"session.user.uuid\" $user_key\n ACCESS::session data set \"session.user.microsoft-exchange-client\" 1\n ACCESS::session data set \"session.user.activesync\" 1\n if { [ info exists f_auto_discover ] && $f_auto_discover == 1 } {\n set f_auto_discover 0\n ACCESS::session data set \"session.user.microsoft-autodiscover\" 1\n }\n }\n }\n when ACCESS_POLICY_COMPLETED {\n if { ! [ info exists user_key ] } {\n return\n }\n\n set policy_result [ACCESS::policy result]\n switch $policy_result {\n \"allow\" {\n }\n \"deny\" {\n ACCESS::respond 401 content $static::actsync_401_http_body Connection close\n ACCESS::session remove\n }\n default {\n ACCESS::respond 503 content $static::actsync_503_http_body Connection close\n ACCESS::session remove\n }\n }\n\n unset user_key\n }\ndefinition-signature jaSGZiyISQHfZu1LLt3cmS5U/vOKRUOkQZ6ZHyc0fdnKtv+VsbRUIgzQwpV1dsN+wzuFhWxEsvSzleGZSrRmlBRbO63jjeBg9jzCqj8/hfOHhPCMSP59w3/opbCnAlqt+TyCFDY1cJ6/b/SWS+irPeAt6gAl0kmw2TIBlJvxm93zTu8aWyBgQV+205oBEPjYVHjaFPGFPk5+5LnZWrBO1fC0jBqpkCT+LWxBGeVHRTC8sGup0SuhXFPfWu3oB1uTTo5SKr8ZxRUFUrLTHNj/W8RKWg2C34958TFngZNQhpxg+XGWEFJXpCkeM2fVJXN3mymRWxuanYLU26ZKXuNNxw==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_auth_krbdelegate", - "partition": "Common", - "fullPath": "/Common/_sys_auth_krbdelegate", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_auth_krbdelegate?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen HTTP_REQUEST {\n set thecert \"\"\n set ckname F5KRBAUTH\n set ckpass abc123\n set authprofiles [PROFILE::list auth]\n # Search the auth profiles for the krbdelegate(7) and grab cookie info\n foreach profname $authprofiles {\n if { [PROFILE::auth $profname type] == 7 } {\n set tmpckname [PROFILE::auth $profname cookie_name]\n set tmpckpass [PROFILE::auth $profname cookie_key]\n if {[PROFILE::auth $profname cookie_name] != \"\" } {\n set ckname $tmpckname\n set ckpass $tmpckpass\n break\n }\n }\n }\n set seecookie 0\n set insertcookie 0\n # check for the cookie\n if {not [info exists tmm_auth_http_sids(krbdelegate)]} {\n set tmm_auth_sid [AUTH::start pam default_krbdelegate]\n set tmm_auth_http_sids(krbdelegate) $tmm_auth_sid\n AUTH::subscribe $tmm_auth_sid\n } else {\n set tmm_auth_sid $tmm_auth_http_sids(krbdelegate)\n }\n if { [PROFILE::exists clientssl] } {\n set certcmd \"SSL::cert 0\"\n set thecert [ eval $certcmd ]\n }\n if { $thecert == \"\" } {\n # if no cert, assume old kerb delegation\n # if there is no Authorization header and no cookie, get one.\n if { ([HTTP::header Authorization] == \"\") and\n (not [HTTP::cookie exists $ckname])} {\n HTTP::respond 401 WWW-Authenticate Negotiate\n return\n }\n }\n if {[HTTP::cookie exists $ckname]} {\n set ckval [HTTP::cookie decrypt $ckname $ckpass]\n AUTH::username_credential $tmm_auth_sid \"cookie\"\n AUTH::password_credential $tmm_auth_sid $ckval\n set seecookie 1\n } else {\n if { $thecert == \"\" } {\n # Kerberos Delegation - set username\n # Strip off the Negotiate before the base64d goodness\n AUTH::username_credential $tmm_auth_sid [lindex [HTTP::header Authorization] 1]\n }\n else {\n # Protocol Transition - set ttm_auth_sid\n AUTH::username_credential $tmm_auth_sid \"krpprottran\"\n AUTH::cert_credential $tmm_auth_sid $thecert\n }\n AUTH::password_credential $tmm_auth_sid \"xxxx\"\n }\n AUTH::authenticate $tmm_auth_sid\n\n if {not [info exists tmm_auth_http_collect_count]} {\n HTTP::collect\n set tmm_auth_http_successes 0\n set tmm_auth_http_collect_count 1\n } else {\n incr tmm_auth_http_collect_count\n }\n }\n when AUTH_RESULT {\n if {not [info exists tmm_auth_http_sids(krbdelegate)] or \\\n ($tmm_auth_http_sids(krbdelegate) != [AUTH::last_event_session_id]) or \\\n (not [info exists tmm_auth_http_collect_count])} {\n return\n }\n if {[AUTH::status] == 0} {\n incr tmm_auth_http_successes\n }\n # If multiple auth sessions are pending and\n # one failure results in termination and this is a failure\n # or enough successes have now occurred\n if {([array size tmm_auth_http_sids] > 1) and \\\n ((not [info exists tmm_auth_http_sufficient_successes] or \\\n ($tmm_auth_http_successes >= $tmm_auth_http_sufficient_successes)))} {\n # Abort the other auth sessions\n foreach {type sid} [array get tmm_auth_http_sids] {\n unset tmm_auth_http_sids($type)\n if {($type ne \"krbdelegate\") and ($sid != -1)} {\n AUTH::abort $sid\n incr tmm_auth_http_collect_count -1\n }\n }\n }\n # If this is the last outstanding auth then either\n # release or respond to this session\n incr tmm_auth_http_collect_count -1\n if {$tmm_auth_http_collect_count == 0} {\n unset tmm_auth_http_collect_count\n if { [AUTH::status] == 0 } {\n array set pamout [AUTH::response_data]\n HTTP::header replace Authorization \"Negotiate $pamout(krbdelegate:attr:SPNEGO)\"\n if {$seecookie == 0} {\n set insertcookie $pamout(krbdelegate:attr:KRB5CCNAME)\n }\n HTTP::release\n } else {\n HTTP::respond 401 WWW-Authenticate Negotiate \"Set-Cookie\" \"$ckname= ; expires=Wed Dec 31 16:00:00 1969\"\n }\n }\n }\n # When the response goes out, if we need to insert a cookie, do it.\n when HTTP_RESPONSE {\n if {$insertcookie != 0} {\n HTTP::cookie insert name $ckname value $insertcookie\n HTTP::cookie encrypt $ckname $ckpass\n }\n }\ndefinition-signature mILi/VF69pqpNg+XJ4nClBl8+zq4v9FsiBYnKjX3zLZOChRWKt5CwkwpsbCRzx5DnvHglp9uXDYrjqcAFvM5aRA2R5LAhKQSq6pVPwHdZUJluYv0t3n6af/vSyc7KYsx6gga1jLuiFZaEzmG8c+r4igxwEee874iQBjYaWhHyKYGhlhly/Ez2FE9DNRpRepz2sq/jaKzEmmMod3CCXurXVGlC/Pk8qnbNid1yC15DGosrAKW1d8lhYbVBaXVQ1ahrr/UPYnDdHB1BiWUzRSS4uOKuUyUmT/xPI14/Nwv8zdFvlu+AnnD543zH6KhdSHhJ3zCVy2HSZ5wPuN3YswcBA==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_auth_ldap", - "partition": "Common", - "fullPath": "/Common/_sys_auth_ldap", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_auth_ldap?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen HTTP_REQUEST {\n if {not [info exists tmm_auth_http_sids(ldap)]} {\n set tmm_auth_sid [AUTH::start pam default_ldap]\n set tmm_auth_http_sids(ldap) $tmm_auth_sid\n if {[info exists tmm_auth_subscription]} {\n AUTH::subscribe $tmm_auth_sid\n }\n } else {\n set tmm_auth_sid $tmm_auth_http_sids(ldap)\n }\n AUTH::username_credential $tmm_auth_sid [HTTP::username]\n AUTH::password_credential $tmm_auth_sid [HTTP::password]\n AUTH::authenticate $tmm_auth_sid\n\n if {not [info exists tmm_auth_http_collect_count]} {\n HTTP::collect\n set tmm_auth_http_successes 0\n set tmm_auth_http_collect_count 1\n } else {\n incr tmm_auth_http_collect_count\n }\n }\n when AUTH_RESULT {\n if {not [info exists tmm_auth_http_sids(ldap)] or \\\n ($tmm_auth_http_sids(ldap) != [AUTH::last_event_session_id]) or \\\n (not [info exists tmm_auth_http_collect_count])} {\n return\n }\n if {[AUTH::status] == 0} {\n incr tmm_auth_http_successes\n }\n # If multiple auth sessions are pending and\n # one failure results in termination and this is a failure\n # or enough successes have now occurred\n if {([array size tmm_auth_http_sids] > 1) and \\\n ((not [info exists tmm_auth_http_sufficient_successes] or \\\n ($tmm_auth_http_successes >= $tmm_auth_http_sufficient_successes)))} {\n # Abort the other auth sessions\n foreach {type sid} [array get tmm_auth_http_sids] {\n unset tmm_auth_http_sids($type)\n if {($type ne \"ldap\") and ($sid != -1)} {\n AUTH::abort $sid\n incr tmm_auth_http_collect_count -1\n }\n }\n }\n\n # If this is the last outstanding auth then either\n # release or respond to this session\n incr tmm_auth_http_collect_count -1\n if {$tmm_auth_http_collect_count == 0} {\n unset tmm_auth_http_collect_count\n if {[AUTH::status] == 0} {\n HTTP::release\n } else {\n HTTP::respond 401\n }\n }\n }\ndefinition-signature d+BwFQlDUIY7Jf5jfpCFuEkwn/jJ+3ZjEQLQej71v7TxzQpxJps4rDaU2YxBNyM9CTAIWT3DRdLqYZAnIHqVpOIRIE/ALk0v0o79IxJIES4nUTE9UTHKM8GN13VBkihf1I8O9DmwOHgB1s0HV+A/dy5mDiyBFpbamyv6rJCASItyPp2Y7iKfcMHEFe+qgvZFA2B131QVAosIn6pFribwU5LSvArIul5pIgX1tcuI+BLPkaJy6xoN9AQcah/ufgUCOmAvkc/K5LteBkxG3ItldFNaxOtAPXDt5IDhrBuMxsvRs7P+vMbfNiGb+QSakipxML2EmwCRiacxQTZn/0DDrw==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_auth_radius", - "partition": "Common", - "fullPath": "/Common/_sys_auth_radius", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_auth_radius?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen HTTP_REQUEST {\n if {not [info exists tmm_auth_http_sids(radius)]} {\n set tmm_auth_sid [AUTH::start pam default_radius]\n set tmm_auth_http_sids(radius) $tmm_auth_sid\n if {[info exists tmm_auth_subscription]} {\n AUTH::subscribe $tmm_auth_sid\n }\n } else {\n set tmm_auth_sid $tmm_auth_http_sids(radius)\n }\n AUTH::username_credential $tmm_auth_sid [HTTP::username]\n AUTH::password_credential $tmm_auth_sid [HTTP::password]\n AUTH::authenticate $tmm_auth_sid\n\n if {not [info exists tmm_auth_http_collect_count]} {\n HTTP::collect\n set tmm_auth_http_successes 0\n set tmm_auth_http_collect_count 1\n } else {\n incr tmm_auth_http_collect_count\n }\n }\n when AUTH_RESULT {\n if {not [info exists tmm_auth_http_sids(radius)] or \\\n ($tmm_auth_http_sids(radius) != [AUTH::last_event_session_id]) or \\\n (not [info exists tmm_auth_http_collect_count])} {\n return\n }\n if {[AUTH::status] == 0} {\n incr tmm_auth_http_successes\n }\n # If multiple auth sessions are pending and\n # one failure results in termination and this is a failure\n # or enough successes have now occurred\n if {([array size tmm_auth_http_sids] > 1) and \\\n ((not [info exists tmm_auth_http_sufficient_successes] or \\\n ($tmm_auth_http_successes >= $tmm_auth_http_sufficient_successes)))} {\n # Abort the other auth sessions\n foreach {type sid} [array get tmm_auth_http_sids] {\n unset tmm_auth_http_sids($type)\n if {($type ne \"radius\") and ($sid != -1)} {\n AUTH::abort $sid\n incr tmm_auth_http_collect_count -1\n }\n }\n }\n # If this is the last outstanding auth then either\n # release or respond to this session\n incr tmm_auth_http_collect_count -1\n if {$tmm_auth_http_collect_count == 0} {\n unset tmm_auth_http_collect_count\n if { [AUTH::status] == 0 } {\n HTTP::release\n } else {\n HTTP::respond 401\n }\n }\n }\ndefinition-signature m0ZhOZjHe7lvErKAbir601WnOlWEPfEh/Qc5wayIKc6B16E4IF4F+Jh8QGdYRgNOrk3Qc3Gid6zQZcCcbIzfR3NKOxfVX+tl0KfiEN1lqBQMLu3/AooE+/YTC5oCPuvV6TK/JHRLiMiexYgRx6G+AFU7xg/w/YzgvV0bjsd9OxdIUB3WO5JOUweCG6q24zhVgN+3QIIiBnuKaMeHtRSw29xVpuQqgNKVG7RaPu15loA0xp8s4fxMF0YHDYPuQuu0PLfvYTqsSP0cI3Kdbsg5JgAIAcdHlFIW3NaUJBPMGRLOAvSGibIMVhFmUfC52LNQ4iORtokInaHyYUtPQ/yHIw==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_auth_ssl_cc_ldap", - "partition": "Common", - "fullPath": "/Common/_sys_auth_ssl_cc_ldap", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_auth_ssl_cc_ldap?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen CLIENT_ACCEPTED {\n set tmm_auth_ssl_cc_ldap_sid 0\n set tmm_auth_ssl_cc_ldap_done 0\n }\n when CLIENTSSL_CLIENTCERT {\n if {[SSL::cert count] == 0} {\n return\n }\n set tmm_auth_ssl_cc_ldap_done 0\n if {$tmm_auth_ssl_cc_ldap_sid == 0} {\n set tmm_auth_ssl_cc_ldap_sid [AUTH::start pam default_ssl_cc_ldap]\n if {[info exists tmm_auth_subscription]} {\n AUTH::subscribe $tmm_auth_ssl_cc_ldap_sid\n }\n }\n AUTH::cert_credential $tmm_auth_ssl_cc_ldap_sid [SSL::cert 0]\n AUTH::authenticate $tmm_auth_ssl_cc_ldap_sid\n SSL::handshake hold\n }\n when CLIENTSSL_HANDSHAKE {\n set tmm_auth_ssl_cc_ldap_done 1\n }\n when AUTH_RESULT {\n if {[info exists tmm_auth_ssl_cc_ldap_sid] and \\\n ($tmm_auth_ssl_cc_ldap_sid == [AUTH::last_event_session_id])} {\n set tmm_auth_status [AUTH::status]\n if {$tmm_auth_status == 0} {\n set tmm_auth_ssl_cc_ldap_done 1\n SSL::handshake resume\n } elseif {$tmm_auth_status != -1 || $tmm_auth_ssl_cc_ldap_done == 0} {\n reject\n }\n }\n }\ndefinition-signature O2ctQteahGXIbb4l9/vERvtwKeyl51hGNNGgccddtwme/6opsgPJu5gaiVGUXYYDkbcjFdfgDTU9oDPkLl5JmZ3VcExnlnvxLpVDuM/fKqxbgoRQZ6nl0mEceHmWxRY9AlhrODtJZxNRbQBu4OOCYS+yWioKgKkrBwQaEoIFBPSSUmeIPZHTXdNnLXwxxkY75O5Sc4sTkYQ3BvTrlu/frnwweed6qw9bWatN865CIzP3Spq0ELY0Q4bvxo+0JdLheFv2BfKUethrjEXcxiD9Ros0fnvQ83qaCHqt18xEyhakdKAf4gKZJt9UApkRn+1ZTPNJFzgQyPPYQGvU/y9JAQ==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_auth_ssl_crldp", - "partition": "Common", - "fullPath": "/Common/_sys_auth_ssl_crldp", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_auth_ssl_crldp?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen CLIENT_ACCEPTED {\n set tmm_auth_ssl_crldp_sid 0\n set tmm_auth_ssl_crldp_done 0\n }\n when CLIENTSSL_CLIENTCERT {\n if {[SSL::cert count] == 0} {\n return\n }\n set tmm_auth_ssl_crldp_done 0\n if {$tmm_auth_ssl_crldp_sid == 0} {\n set tmm_auth_ssl_crldp_sid [AUTH::start pam default_ssl_crldp]\n if {[info exists tmm_auth_subscription]} {\n AUTH::subscribe $tmm_auth_ssl_crldp_sid\n }\n }\n AUTH::cert_credential $tmm_auth_ssl_crldp_sid [SSL::cert 0]\n AUTH::cert_issuer_credential $tmm_auth_ssl_crldp_sid [SSL::cert issuer 0]\n AUTH::authenticate $tmm_auth_ssl_crldp_sid\n SSL::handshake hold\n }\n when CLIENTSSL_HANDSHAKE {\n set tmm_auth_ssl_crldp_done 1\n }\n when AUTH_RESULT {\n if {[info exists tmm_auth_ssl_crldp_sid] and \\\n ($tmm_auth_ssl_crldp_sid == [AUTH::last_event_session_id])} {\n set tmm_auth_status [AUTH::status]\n if {$tmm_auth_status == 0} {\n set tmm_auth_ssl_crldp_done 1\n SSL::handshake resume\n } elseif {$tmm_auth_status != -1 || $tmm_auth_ssl_crldp_done == 0} {\n reject\n }\n }\n }\ndefinition-signature PhTy24ctbtx0d4kFIFO6+Fr9W3a/7OetZ7nlh18mpH6BB9t1dB2LNayATLZ3q4iT4wLLdyyxA+g4jdrNBeuZVpM2JOBlhwcyIcTBFLQN4H/mkWErH4Vz9ZMxVduUxHN6fIh8zDQuJJYoRVlz087/vIVvk6ygbPwS9KqTdYBa3Nn79YmIVn1NXKyVoCg/40EZ3iNklwIfKctwqGU5ELKbhwk8CGCvexDbJcwRqv8nAETC4B/nc61jpGcihpOJchJFb3buTiAKwfxSYkx90UG4EnwsyA4GqUNIfS02Dj5rYSMH403CNNBKG2AA+ZGy9by2O3bb9lq/VNGPDmsnMEff1g==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_auth_ssl_ocsp", - "partition": "Common", - "fullPath": "/Common/_sys_auth_ssl_ocsp", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_auth_ssl_ocsp?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen CLIENT_ACCEPTED {\n set tmm_auth_ssl_ocsp_sid 0\n set tmm_auth_ssl_ocsp_done 0\n }\n when CLIENTSSL_CLIENTCERT {\n if {[SSL::cert count] == 0} {\n return\n }\n set tmm_auth_ssl_ocsp_done 0\n if {$tmm_auth_ssl_ocsp_sid == 0} {\n set tmm_auth_ssl_ocsp_sid [AUTH::start pam default_ssl_ocsp]\n if {[info exists tmm_auth_subscription]} {\n AUTH::subscribe $tmm_auth_ssl_ocsp_sid\n }\n }\n AUTH::cert_credential $tmm_auth_ssl_ocsp_sid [SSL::cert 0]\n AUTH::cert_issuer_credential $tmm_auth_ssl_ocsp_sid [SSL::cert issuer 0]\n AUTH::authenticate $tmm_auth_ssl_ocsp_sid\n SSL::handshake hold\n }\n when CLIENTSSL_HANDSHAKE {\n set tmm_auth_ssl_ocsp_done 1\n }\n when AUTH_RESULT {\n if {[info exists tmm_auth_ssl_ocsp_sid] and \\\n ($tmm_auth_ssl_ocsp_sid == [AUTH::last_event_session_id])} {\n set tmm_auth_status [AUTH::status]\n if {$tmm_auth_status == 0} {\n set tmm_auth_ssl_ocsp_done 1\n SSL::handshake resume\n } elseif {$tmm_auth_status != -1 || $tmm_auth_ssl_ocsp_done == 0} {\n reject\n }\n }\n }\ndefinition-signature mHRNmZiszQh85wPdt5PxM2ASLXyW47LE3CM5tS11M1lTe9ttjlWDc6yBdy5VFjC6H2O2DJ+fyrBmeMen16RVWPhUoq8YOJC9ZiuuLc6T/rW9GsopSHFPBLRjL/EPulNkuGB/DtxYvwXfXOyBuVRw+E/TYkKVi6cIrk4+e9mOnCo9biWycrRfemWwYyDCqouEaDK2huYnQ1rKyYAvIWxfd3rXXw6+jdpuvL/6RFXJjaLTJ/f1pVMHP5kuI2K/dkeojqDDgr1d1GnjIFFX2Azh5qZpaL1urPfn/M6C/7sXzew1PU0ow10MQtKKqAno5IpEpn+cPZlCs3d2Y1khtMqUug==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_auth_tacacs", - "partition": "Common", - "fullPath": "/Common/_sys_auth_tacacs", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_auth_tacacs?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen HTTP_REQUEST {\n if {not [info exists tmm_auth_http_sids(tacacs)]} {\n set tmm_auth_sid [AUTH::start pam default_tacacs]\n set tmm_auth_http_sids(tacacs) $tmm_auth_sid\n if {[info exists tmm_auth_subscription]} {\n AUTH::subscribe $tmm_auth_sid\n }\n } else {\n set tmm_auth_sid $tmm_auth_http_sids(tacacs)\n }\n AUTH::username_credential $tmm_auth_sid [HTTP::username]\n AUTH::password_credential $tmm_auth_sid [HTTP::password]\n AUTH::authenticate $tmm_auth_sid\n\n if {not [info exists tmm_auth_http_collect_count]} {\n HTTP::collect\n set tmm_auth_http_successes 0\n set tmm_auth_http_collect_count 1\n } else {\n incr tmm_auth_http_collect_count\n }\n }\n when AUTH_RESULT {\n if {not [info exists tmm_auth_http_sids(tacacs)] or \\\n ($tmm_auth_http_sids(tacacs) != [AUTH::last_event_session_id]) or \\\n (not [info exists tmm_auth_http_collect_count])} {\n return\n }\n if {[AUTH::status] == 0} {\n incr tmm_auth_http_successes\n }\n # If multiple auth sessions are pending and\n # one failure results in termination and this is a failure\n # or enough successes have now occurred\n if {([array size tmm_auth_http_sids] > 1) and \\\n ((not [info exists tmm_auth_http_sufficient_successes] or \\\n ($tmm_auth_http_successes >= $tmm_auth_http_sufficient_successes)))} {\n # Abort the other auth sessions\n foreach {type sid} [array get tmm_auth_http_sids] {\n unset tmm_auth_http_sids($type)\n if {($type ne \"tacacs\") and ($sid != -1)} {\n AUTH::abort $sid\n incr tmm_auth_http_collect_count -1\n }\n }\n }\n # If this is the last outstanding auth then either\n # release or respond to this session\n incr tmm_auth_http_collect_count -1\n if {$tmm_auth_http_collect_count == 0} {\n unset tmm_auth_http_collect_count\n if { [AUTH::status] == 0 } {\n HTTP::release\n } else {\n HTTP::respond 401\n }\n }\n }\ndefinition-signature GHNO23blFC/AnIkRk9DSySYK2LiesD7h2DliAMIsVIjBk/RFL8XvZ+8WuKMVibuCiAhPWWvUu6nKsTnk9pX5/kc4yV6qRHcaaO+UaqT1/KQZsVXShCf0YCzqjRQIduJhUFFn0MUDhDmo/8ti0Upo6loKBxW3TODx5y8Jf3dTKmX2oRMfrkiMEyVtv38O7MDwJ1H5/xF2z1r2+nWGUJThZq/ILpfzcdnI7X5j/PxnAGuL1zciRIZ/0RIyMvYch0GaoXaKLVaONzDm0nHEJ+hZ7Vp8mQZiRitc8MGs1Ku9yLamxosUFAdRVnNQOLXGrlvEm94oU6XR3mq0oeqx9+dnOQ==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_https_redirect", - "partition": "Common", - "fullPath": "/Common/_sys_https_redirect", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_https_redirect?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen HTTP_REQUEST {\n HTTP::redirect https://[getfield [HTTP::host] \":\" 1][HTTP::uri]\n }\ndefinition-signature mwyl4XlRKRMQc0prWs7RtpgPcNfocOKb+MaFwAnQgAuUZZyG68OaGZsOCN3poUOFdHOc6fk2XAdGRmTRiP/7BCT7thsOX5zLFzA1N1wcr57KWVzEZt3ezxVXn2Z974OmbWm7P5Lclcr7N3adrLJMWfyfPPVF1tUYn0IQPD2QNMmfbcbr1oCuO93n/5dn0s6/EacHZGG53hVibW7xQuJXdMtoQ6ArSZ4U3n4vCDTb6NLYbAj6PirVzKY2pcsWFHFUSVrphSFwERc8+0XGHUE6Cb3ihzygoZc2cQ5jk3frFY70MkDluPTShFRbHd7PlMPRezrfkVZVeUHA/iBPcYcD+w==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 94, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~foo?ver=12.1.2", - "apiAnonymous": "when RULE_INIT {\n set static::FormBaseURL \"/sp-ofba-form\"\n set static::FormReturnURL \"/sp-ofba-completed\"\n set static::HeadAuthReq \"X-FORMS_BASED_AUTH_REQUIRED\"\n set static::HeadAuthRet \"X-FORMS_BASED_AUTH_RETURN_URL\"\n set static::HeadAuthSize \"X-FORMS_BASED_AUTH_DIALOG_SIZE\"\n set static::HeadAuthSizeVal \"800x600\"\n set static::ckname \"MRHSession_SP\"\n set static::Basic_Realm_Text \"SharePoint Authentication\"\n}\n\nwhen HTTP_REQUEST {\n set apmsessionid [HTTP::cookie value MRHSession]\n}\n\nwhen HTTP_RESPONSE {\n # Insert persistent cookie for html content type and private session\n}" - } -] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_ftp.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_ftp.json deleted file mode 100644 index 8e3c25256..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_ftp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "kind": "tm:ltm:monitor:ftp:ftpstate", - "name": "foo_ftp", - "partition": "Common", - "fullPath": "/Common/foo_ftp", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/ftp/~Common~foo_ftp?ver=14.1.0.3", - "debug": "no", - "defaultsFrom": "/Common/ftp", - "destination": "*:*", - "interval": 10, - "manualResume": "disabled", - "mode": "passive", - "timeUntilUp": 0, - "timeout": 31, - "upInterval": 16 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_http.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_http.json deleted file mode 100644 index 79121b2b9..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_http.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "kind": "tm:ltm:monitor:http:httpstate", - "name": "asdf", - "partition": "Common", - "fullPath": "/Common/asdf", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/http/~Common~asdf?ver=13.0.0", - "adaptive": "disabled", - "adaptiveDivergenceType": "relative", - "adaptiveDivergenceValue": 25, - "adaptiveLimit": 200, - "adaptiveSamplingTimespan": 300, - "defaultsFrom": "/Common/http", - "description": "this is a description", - "destination": "1.1.1.1:389", - "interval": 5, - "ipDscp": 0, - "manualResume": "disabled", - "password": "$M$7T$DpzEUVHt5rKkAfqrBh1PTA==", - "recv": "hello world", - "reverse": "enabled", - "send": "GET /\\r\\n", - "timeUntilUp": 0, - "timeout": 16, - "transparent": "disabled", - "upInterval": 0, - "username": "john" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_https.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_https.json deleted file mode 100644 index ff4f53f27..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_https.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "kind": "tm:ltm:monitor:https:httpsstate", - "name": "asdf", - "partition": "Common", - "fullPath": "/Common/asdf", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/https/~Common~asdf?ver=13.0.0", - "adaptive": "disabled", - "adaptiveDivergenceType": "relative", - "adaptiveDivergenceValue": 25, - "adaptiveLimit": 200, - "adaptiveSamplingTimespan": 300, - "cipherlist": "DEFAULT:+SHA:+3DES:+kEDH", - "compatibility": "enabled", - "defaultsFrom": "/Common/https", - "description": "this is a description", - "destination": "1.1.1.1:389", - "interval": 5, - "ipDscp": 0, - "manualResume": "disabled", - "password": "$M$7F$+F0VTCeKM4LbGkpC/u8pwg==", - "recv": "hello world", - "reverse": "disabled", - "send": "GET /\\r\\n", - "timeUntilUp": 0, - "timeout": 16, - "transparent": "disabled", - "upInterval": 0, - "username": "john" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_smtp.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_smtp.json deleted file mode 100644 index 4609ca4ed..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_smtp.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "kind": "tm:ltm:monitor:smtp:smtpstate", - "name": "foo_smtp", - "partition": "Common", - "fullPath": "/Common/foo_smtp", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/smtp/~Common~foo_smtp?ver=14.1.0.3", - "debug": "no", - "defaultsFrom": "/Common/smtp", - "description": "this is a text", - "destination": "11.2.2.1:554", - "domain": "fake.local", - "interval": 5, - "manualResume": "disabled", - "timeUntilUp": 0, - "timeout": 16, - "upInterval": 0, - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/monitor/smtp/~Common~smtp?ver=14.1.0.3" - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_snmp_dca.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_snmp_dca.json deleted file mode 100644 index ba9a360f6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_snmp_dca.json +++ /dev/null @@ -1,49 +0,0 @@ -[ - { - "kind": "tm:ltm:monitor:snmp-dca:snmp-dcastate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/snmp-dca/~Common~foo?ver=13.0.0", - "agentType": "UCD", - "community": "public", - "cpuCoefficient": "1.5", - "cpuThreshold": "80", - "defaultsFrom": "/Common/snmp_dca", - "diskCoefficient": "2.0", - "diskThreshold": "90", - "interval": 10, - "memoryCoefficient": "1.0", - "memoryThreshold": "70", - "timeUntilUp": 0, - "timeout": 30, - "apiRawValues": { - "userDefined asdasd": "{ foo }", - "userDefined bar": "tim rupp", - "user-defined baz-": "nia", - "userDefined userDefined": "23234" - }, - "version": "v1" - }, - { - "kind": "tm:ltm:monitor:snmp-dca:snmp-dcastate", - "name": "snmp_dca", - "partition": "Common", - "fullPath": "/Common/snmp_dca", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/snmp-dca/~Common~snmp_dca?ver=13.0.0", - "agentType": "UCD", - "community": "public", - "cpuCoefficient": "1.5", - "cpuThreshold": "80", - "diskCoefficient": "2.0", - "diskThreshold": "90", - "interval": 10, - "memoryCoefficient": "1.0", - "memoryThreshold": "70", - "timeUntilUp": 0, - "timeout": 30, - "version": "v1" - } -] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_tcp.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_tcp.json deleted file mode 100644 index fb9572f7e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_tcp.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:ltm:monitor:tcp:tcpstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/tcp/~Common~foo?ver=12.1.0", - "adaptive": "disabled", - "adaptiveDivergenceType": "relative", - "adaptiveDivergenceValue": 25, - "adaptiveLimit": 200, - "adaptiveSamplingTimespan": 300, - "defaultsFrom": "/Common/tcp", - "destination": "10.10.10.10:80", - "interval": 20, - "ipDscp": 0, - "manualResume": "disabled", - "recv": "this is a receive string", - "reverse": "disabled", - "send": "this is a send string", - "timeUntilUp": 60, - "timeout": 30, - "transparent": "disabled", - "upInterval": 0 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_tcp_echo.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_tcp_echo.json deleted file mode 100644 index 1a5183466..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_tcp_echo.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "kind": "tm:ltm:monitor:tcp-echo:tcp-echostate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/tcp-echo/~Common~foo?ver=13.0.0", - "adaptive": "disabled", - "adaptiveDivergenceType": "relative", - "adaptiveDivergenceValue": 25, - "adaptiveLimit": 200, - "adaptiveSamplingTimespan": 300, - "defaultsFrom": "/Common/tcp_echo", - "destination": "10.10.10.10", - "interval": 20, - "manualResume": "disabled", - "timeUntilUp": 60, - "timeout": 30, - "transparent": "disabled", - "upInterval": 0 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_tcp_half_open.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_tcp_half_open.json deleted file mode 100644 index ff99c31e6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_tcp_half_open.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:ltm:monitor:tcp-half-open:tcp-half-openstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/tcp-half-open/~Common~foo?ver=13.0.0", - "defaultsFrom": "/Common/tcp_half_open", - "destination": "10.10.10.10:80", - "interval": 20, - "manualResume": "disabled", - "timeUntilUp": 60, - "timeout": 30, - "transparent": "disabled", - "upInterval": 0 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_udp.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_udp.json deleted file mode 100644 index 636619a25..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_monitor_udp.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:ltm:monitor:udp:udpstate", - "name": "asdf", - "partition": "Common", - "fullPath": "/Common/asdf", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/udp/~Common~asdf?ver=13.0.0", - "adaptive": "disabled", - "adaptiveDivergenceType": "relative", - "adaptiveDivergenceValue": 25, - "adaptiveLimit": 200, - "adaptiveSamplingTimespan": 300, - "debug": "no", - "defaultsFrom": "/Common/udp", - "destination": "1.1.1.1:389", - "interval": 5, - "manualResume": "disabled", - "recv": "hello world", - "reverse": "disabled", - "send": "default send string", - "timeUntilUp": 0, - "timeout": 16, - "transparent": "disabled", - "upInterval": 0 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_node_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_node_1.json deleted file mode 100644 index 96d25b03d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_node_1.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:ltm:node:nodestate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 158, - "selfLink": "https://localhost/mgmt/tm/ltm/node/~Common~foo?ver=13.0.0", - "address": "1.2.3.4", - "connectionLimit": 0, - "description": "my description of node", - "dynamicRatio": 1, - "ephemeral": "false", - "fqdn": { - "addressFamily": "ipv4", - "autopopulate": "disabled", - "downInterval": 5, - "interval": "3600" - }, - "logging": "disabled", - "monitor": "default", - "rateLimit": "disabled", - "ratio": 1, - "session": "user-enabled", - "state": "unchecked" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_node_2.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_node_2.json deleted file mode 100644 index f23f6b5f4..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_node_2.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "kind": "tm:ltm:node:nodestate", - "name": "fqdn-foo", - "partition": "Common", - "fullPath": "/Common/fqdn-foo", - "generation": 161, - "selfLink": "https://localhost/mgmt/tm/ltm/node/~Common~fqdn-foo?ver=13.0.0", - "address": "any6", - "connectionLimit": 0, - "description": "another node but with fqdn", - "dynamicRatio": 1, - "ephemeral": "false", - "fqdn": { - "addressFamily": "ipv4", - "autopopulate": "disabled", - "downInterval": 5, - "interval": "3600", - "tmName": "google.com" - }, - "logging": "disabled", - "monitor": "/Common/icmp and /Common/tcp_echo ", - "rateLimit": "disabled", - "ratio": 1, - "session": "user-enabled", - "state": "fqdn-up" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_node_3.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_node_3.json deleted file mode 100644 index c6e30cf32..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_node_3.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "kind": "tm:ltm:node:nodestate", - "name": "mytestserver", - "partition": "Common", - "fullPath": "/Common/mytestserver", - "generation": 2286, - "selfLink": "https://localhost/mgmt/tm/ltm/node/~Common~mytestserver?ver=13.0.0", - "address": "10.20.30.40", - "connectionLimit": 0, - "dynamicRatio": 1, - "ephemeral": "false", - "fqdn": { - "addressFamily": "ipv4", - "autopopulate": "disabled", - "downInterval": 5, - "interval": "3600" - }, - "logging": "disabled", - "monitor": "/Common/icmp ", - "rateLimit": "disabled", - "ratio": 1, - "session": "monitor-enabled", - "state": "down" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_draft_rule_http-uri_forward.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_draft_rule_http-uri_forward.json deleted file mode 100644 index 53aa0c34e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_draft_rule_http-uri_forward.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "kind": "tm:ltm:policy:rules:rulesstate", - "name": "foo", - "fullPath": "foo", - "generation": 739, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~Drafts~Bondticker-DRN/rules/foo?expandSubcollections=true&ver=13.0.0", - "ordinal": 0, - "actionsReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~Drafts~Bondticker-DRN/rules/foo/actions?ver=13.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:policy:rules:actions:actionsstate", - "name": "0", - "fullPath": "0", - "generation": 739, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~Drafts~Bondticker-DRN/rules/foo/actions/0?ver=13.0.0", - "code": 0, - "expirySecs": 0, - "forward": true, - "length": 0, - "node": "1.1.1.1", - "offset": 0, - "port": 0, - "request": true, - "select": true, - "snat": "disable", - "status": 0, - "timeout": 0, - "vlan": "/Common/net1", - "vlanId": 0 - } - ] - }, - "conditionsReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~Drafts~Bondticker-DRN/rules/foo/conditions?ver=13.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:policy:rules:conditions:conditionsstate", - "name": "0", - "fullPath": "0", - "generation": 739, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~Drafts~Bondticker-DRN/rules/foo/conditions/0?ver=13.0.0", - "caseInsensitive": true, - "external": true, - "httpUri": true, - "index": 0, - "path": true, - "present": true, - "remote": true, - "request": true, - "startsWith": true, - "values": [ - "foo" - ] - } - ] - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_http-uri_forward.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_http-uri_forward.json deleted file mode 100644 index 2300e3ccb..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_http-uri_forward.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "kind": "tm:ltm:policy:rules:rulesstate", - "name": "bar", - "fullPath": "bar", - "generation": 746, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar?expandSubcollections=true&ver=13.0.0", - "ordinal": 0, - "actionsReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/actions?ver=13.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:policy:rules:actions:actionsstate", - "name": "0", - "fullPath": "0", - "generation": 739, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/actions/0?ver=13.0.0", - "code": 0, - "expirySecs": 0, - "forward": true, - "length": 0, - "node": "1.1.1.1", - "offset": 0, - "port": 0, - "request": true, - "select": true, - "snat": "disable", - "status": 0, - "timeout": 0, - "vlan": "/Common/net1", - "vlanId": 0 - } - ] - }, - "conditionsReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/conditions?ver=13.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:policy:rules:conditions:conditionsstate", - "name": "0", - "fullPath": "0", - "generation": 739, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/conditions/0?ver=13.0.0", - "caseInsensitive": true, - "external": true, - "httpUri": true, - "index": 0, - "path": true, - "present": true, - "remote": true, - "request": true, - "startsWith": true, - "values": [ - "foo" - ] - } - ] - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_many_actions_many_conditions.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_many_actions_many_conditions.json deleted file mode 100644 index 869895270..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_many_actions_many_conditions.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "kind": "tm:ltm:policy:rules:rulesstate", - "name": "bar", - "fullPath": "bar", - "generation": 758, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar?expandSubcollections=true&ver=13.0.0", - "ordinal": 2, - "actionsReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/actions?ver=13.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:policy:rules:actions:actionsstate", - "name": "0", - "fullPath": "0", - "generation": 756, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/actions/0?ver=13.0.0", - "code": 0, - "expirySecs": 0, - "forward": true, - "length": 0, - "offset": 0, - "pool": "/Common/servers", - "poolReference": { - "link": "https://localhost/mgmt/tm/ltm/pool/~Common~servers?ver=13.0.0" - }, - "port": 0, - "request": true, - "select": true, - "status": 0, - "timeout": 0, - "vlanId": 0 - }, - { - "kind": "tm:ltm:policy:rules:actions:actionsstate", - "name": "1", - "fullPath": "1", - "generation": 756, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/actions/1?ver=13.0.0", - "code": 0, - "expirySecs": 0, - "forward": true, - "length": 0, - "offset": 0, - "pool": "/Common/more-servers", - "poolReference": { - "link": "https://localhost/mgmt/tm/ltm/pool/~Common~more-servers?ver=13.0.0" - }, - "port": 0, - "request": true, - "select": true, - "status": 0, - "timeout": 0, - "vlanId": 0 - } - ] - }, - "conditionsReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/conditions?ver=13.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:policy:rules:conditions:conditionsstate", - "name": "0", - "fullPath": "0", - "generation": 756, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/conditions/0?ver=13.0.0", - "caseInsensitive": true, - "external": true, - "httpUri": true, - "index": 0, - "path": true, - "present": true, - "remote": true, - "request": true, - "startsWith": true, - "values": [ - "bar", - "dfg" - ] - }, - { - "kind": "tm:ltm:policy:rules:conditions:conditionsstate", - "name": "1", - "fullPath": "1", - "generation": 756, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/conditions/1?ver=13.0.0", - "caseInsensitive": true, - "equals": true, - "external": true, - "httpUri": true, - "index": 0, - "path": true, - "present": true, - "remote": true, - "request": true, - "values": [ - "wer", - "ert" - ] - } - ] - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_no_actions_no_conditions.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_no_actions_no_conditions.json deleted file mode 100644 index 55c283519..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_no_actions_no_conditions.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:ltm:policy:rules:rulesstate", - "name": "bar", - "fullPath": "bar", - "generation": 747, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar?expandSubcollections=true&ver=13.0.0", - "ordinal": 1, - "actionsReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/actions?ver=13.0.0", - "isSubcollection": true - }, - "conditionsReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/conditions?ver=13.0.0", - "isSubcollection": true - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_no_actions_one_condition.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_no_actions_one_condition.json deleted file mode 100644 index bf01abd95..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_no_actions_one_condition.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "kind": "tm:ltm:policy:rules:rulesstate", - "name": "bar", - "fullPath": "bar", - "generation": 750, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar?expandSubcollections=true&ver=13.0.0", - "ordinal": 2, - "actionsReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/actions?ver=13.0.0", - "isSubcollection": true - }, - "conditionsReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/conditions?ver=13.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:policy:rules:conditions:conditionsstate", - "name": "0", - "fullPath": "0", - "generation": 748, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/conditions/0?ver=13.0.0", - "caseInsensitive": true, - "external": true, - "httpUri": true, - "index": 0, - "path": true, - "present": true, - "remote": true, - "request": true, - "startsWith": true, - "values": [ - "/smith" - ] - } - ] - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_one_action_no_conditions.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_one_action_no_conditions.json deleted file mode 100644 index 0c1917ddc..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_policy_rule_one_action_no_conditions.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "kind": "tm:ltm:policy:rules:rulesstate", - "name": "bar", - "fullPath": "bar", - "generation": 754, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar?expandSubcollections=true&ver=13.0.0", - "ordinal": 2, - "actionsReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/actions?ver=13.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:policy:rules:actions:actionsstate", - "name": "0", - "fullPath": "0", - "generation": 752, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/actions/0?ver=13.0.0", - "code": 0, - "expirySecs": 0, - "forward": true, - "length": 0, - "offset": 0, - "pool": "/Common/servers", - "poolReference": { - "link": "https://localhost/mgmt/tm/ltm/pool/~Common~servers?ver=13.0.0" - }, - "port": 0, - "request": true, - "select": true, - "status": 0, - "timeout": 0, - "vlanId": 0 - } - ] - }, - "conditionsReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~foo/rules/bar/conditions?ver=13.0.0", - "isSubcollection": true - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_pool.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_pool.json deleted file mode 100644 index cd5be5e1a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_pool.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "kind": "tm:ltm:pool:poolstate", - "name": "test_pool", - "partition": "Common", - "fullPath": "/Common/test_pool", - "generation": 1452, - "selfLink": "https://localhost/mgmt/tm/ltm/pool/~Common~test_pool?ver=11.5.4", - "allowNat": "yes", - "allowSnat": "yes", - "description": "test", - "ignorePersistedWeight": "disabled", - "ipTosToClient": "pass-through", - "ipTosToServer": "pass-through", - "linkQosToClient": "pass-through", - "linkQosToServer": "pass-through", - "loadBalancingMode": "round-robin", - "minActiveMembers": 0, - "minUpMembers": 0, - "minUpMembersAction": "failover", - "minUpMembersChecking": "disabled", - "monitor": "min 1 of { /Common/http /Common/inband }", - "queueDepthLimit": 0, - "queueOnConnectionLimit": "disabled", - "queueTimeLimit": 0, - "reselectTries": 0, - "serviceDownAction": "reselect", - "slowRampTime": 10, - "membersReference": { - "link": "https://localhost/mgmt/tm/ltm/pool/~Common~test_pool/members?ver=11.5.4", - "isSubcollection": true - } -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_pool_with_metadata.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_pool_with_metadata.json deleted file mode 100644 index 25bf04af9..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_pool_with_metadata.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "kind": "tm:ltm:pool:poolstate", - "name": "asdasd", - "partition": "Common", - "fullPath": "/Common/asdasd", - "generation": 1382, - "selfLink": "https://localhost/mgmt/tm/ltm/pool/~Common~asdasd?ver=12.0.0", - "allowNat": "yes", - "allowSnat": "yes", - "ignorePersistedWeight": "disabled", - "ipTosToClient": "pass-through", - "ipTosToServer": "pass-through", - "linkQosToClient": "pass-through", - "linkQosToServer": "pass-through", - "loadBalancingMode": "round-robin", - "minActiveMembers": 0, - "minUpMembers": 0, - "minUpMembersAction": "failover", - "minUpMembersChecking": "disabled", - "monitor": "/Common/http and /Common/https ", - "queueDepthLimit": 0, - "queueOnConnectionLimit": "disabled", - "queueTimeLimit": 0, - "reselectTries": 0, - "serviceDownAction": "none", - "slowRampTime": 10, - "membersReference": { - "link": "https://localhost/mgmt/tm/ltm/pool/~Common~asdasd/members?ver=12.0.0", - "isSubcollection": true - }, - "metadata": [ - { - "name": "ansible", - "persist": "true", - "value": "2.4" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_analytics_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_analytics_1.json deleted file mode 100644 index 3e3fa2c06..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_analytics_1.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "kind": "tm:ltm:profile:analytics:analyticsstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 339, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/analytics/~Common~foo?ver=13.1.1", - "appService": "none", - "capturedTrafficExternalLogging": "disabled", - "capturedTrafficInternalLogging": "disabled", - "collectGeo": "disabled", - "collectHttpTimingMetrics": "disabled", - "collectIp": "disabled", - "collectMaxTpsAndThroughput": "disabled", - "collectMethods": "enabled", - "collectOsAndBrowser": "enabled", - "collectPageLoadTime": "disabled", - "collectResponseCodes": "enabled", - "collectSubnets": "disabled", - "collectUrl": "disabled", - "collectUserAgent": "disabled", - "collectUserSessions": "disabled", - "collectedStatsExternalLogging": "disabled", - "collectedStatsInternalLogging": "enabled", - "countriesForStatCollection": [], - "defaultsFrom": "/Common/analytics", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/analytics/~Common~analytics?ver=13.1.1" - }, - "description": "none", - "externalLoggingPublisher": "none", - "ipsForStatCollection": [], - "notificationByEmail": "disabled", - "notificationBySnmp": "disabled", - "notificationBySyslog": "disabled", - "notificationEmailAddresses": [], - "publishIruleStatistics": "disabled", - "sampling": "enabled", - "sessionCookieSecurity": "ssl-only", - "sessionTimeoutMinutes": "5", - "smtpConfig": "none", - "subnetsForStatCollection": [], - "urlsForStatCollection": [], - "alertsReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/analytics/~Common~foo/alerts?ver=13.1.1", - "isSubcollection": true - }, - "trafficCaptureReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/analytics/~Common~foo/traffic-capture?ver=13.1.1", - "isSubcollection": true - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_clientssl.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_clientssl.json deleted file mode 100644 index 923f6f72b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_clientssl.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "kind": "tm:ltm:profile:client-ssl:client-sslstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 351, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/client-ssl/~Common~foo?ver=13.0.0", - "alertTimeout": "indefinite", - "allowDynamicRecordSizing": "disabled", - "allowExpiredCrl": "disabled", - "allowNonSsl": "disabled", - "appService": "none", - "authenticate": "once", - "authenticateDepth": 9, - "bypassOnClientCertFail": "disabled", - "bypassOnHandshakeAlert": "disabled", - "caFile": "none", - "cacheSize": 262144, - "cacheTimeout": 3600, - "cert": "/Common/default.crt", - "certReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~default.crt?ver=13.0.0" - }, - "certExtensionIncludes": [ - "basic-constraints", - "subject-alternative-name" - ], - "certLifespan": 30, - "certLookupByIpaddrPort": "disabled", - "chain": "none", - "cipherGroup": "none", - "ciphers": "DEFAULT", - "clientCertCa": "none", - "crlFile": "none", - "defaultsFrom": "/Common/clientssl", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/client-ssl/~Common~clientssl?ver=13.0.0" - }, - "description": "none", - "destinationIpBlacklist": "none", - "destinationIpWhitelist": "none", - "forwardProxyBypassDefaultAction": "intercept", - "genericAlert": "enabled", - "handshakeTimeout": "10", - "hostnameBlacklist": "none", - "hostnameWhitelist": "none", - "inheritCertkeychain": "true", - "key": "/Common/default.key", - "keyReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-key/~Common~default.key?ver=13.0.0" - }, - "maxActiveHandshakes": "indefinite", - "maxAggregateRenegotiationPerMinute": "indefinite", - "maxRenegotiationsPerMinute": 5, - "maximumRecordSize": 16384, - "modSslMethods": "disabled", - "mode": "enabled", - "notifyCertStatusToVirtualServer": "disabled", - "ocspStapling": "disabled", - "tmOptions": [ - "dont-insert-empty-fragments" - ], - "peerCertMode": "ignore", - "peerNoRenegotiateTimeout": "10", - "proxyCaCert": "none", - "proxyCaKey": "none", - "proxySsl": "disabled", - "proxySslPassthrough": "disabled", - "renegotiateMaxRecordDelay": "indefinite", - "renegotiatePeriod": "indefinite", - "renegotiateSize": "indefinite", - "renegotiation": "enabled", - "retainCertificate": "true", - "secureRenegotiation": "require", - "serverName": "none", - "sessionMirroring": "disabled", - "sessionTicket": "disabled", - "sessionTicketTimeout": 0, - "sniDefault": "false", - "sniRequire": "false", - "sourceIpBlacklist": "none", - "sourceIpWhitelist": "none", - "sslForwardProxy": "disabled", - "sslForwardProxyBypass": "disabled", - "sslSignHash": "any", - "strictResume": "disabled", - "uncleanShutdown": "enabled", - "certKeyChain": [ - { - "name": "default", - "appService": "none", - "cert": "/Common/default.crt", - "certReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~default.crt?ver=13.0.0" - }, - "chain": "none", - "key": "/Common/default.key", - "keyReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-key/~Common~default.key?ver=13.0.0" - } - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_dns_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_dns_1.json deleted file mode 100644 index 41736147e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_dns_1.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "kind": "tm:ltm:profile:dns:dnsstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 1211, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/dns/~Common~foo?ver=13.1.0.4", - "appService": "none", - "avrDnsstatSampleRate": 0, - "cache": "none", - "defaultsFrom": "/Common/dns", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/dns/~Common~dns?ver=13.1.0.4" - }, - "description": "none", - "dnsSecurity": "none", - "dns64": "disabled", - "dns64AdditionalSectionRewrite": "disabled", - "dns64Prefix": "any6", - "enableCache": "no", - "enableDnsExpress": "no", - "enableDnsFirewall": "yes", - "enableDnssec": "no", - "enableGtm": "no", - "enableHardwareQueryValidation": "no", - "enableHardwareResponseCache": "no", - "enableLogging": "no", - "enableRapidResponse": "no", - "logProfile": "none", - "processRd": "yes", - "processXfr": "yes", - "rapidResponseLastAction": "drop", - "unhandledQueryAction": "allow", - "useLocalBind": "no" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_ftp.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_ftp.json deleted file mode 100644 index 626d3c883..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_ftp.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:ltm:profile:ftp:ftpstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 986, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/ftp/~Common~foo?ver=12.1.4", - "allowFtps": "enabled", - "defaultsFrom": "/Common/ftp", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/ftp/~Common~ftp?ver=12.1.4" - }, - "inheritParentProfile": "enabled", - "logProfile": "/Common/alg_log_profile", - "logProfileReference": { - "link": "https://localhost/mgmt/tm/ltm/alg-log-profile/~Common~alg_log_profile?ver=12.1.4" - }, - "logPublisher": "/Common/default-ipsec-log-publisher", - "logPublisherReference": { - "link": "https://localhost/mgmt/tm/sys/log-config/publisher/~Common~default-ipsec-log-publisher?ver=12.1.4" - }, - "port": 20, - "security": "enabled", - "translateExtended": "enabled" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_http_compression_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_http_compression_1.json deleted file mode 100644 index a9873f20a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_http_compression_1.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "kind": "tm:ltm:profile:http-compression:http-compressionstate", - "name": "profile1", - "partition": "Common", - "fullPath": "/Common/profile1", - "generation": 132, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/http-compression/~Common~profile1?ver=13.1.0.4", - "allowHttp_10": "disabled", - "appService": "none", - "browserWorkarounds": "disabled", - "bufferSize": 4096, - "contentTypeExclude": [], - "contentTypeInclude": [ - "text/", - "application/(xml|x-javascript)" - ], - "cpuSaver": "enabled", - "cpuSaverHigh": 90, - "cpuSaverLow": 75, - "defaultsFrom": "/Common/httpcompression", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/http-compression/~Common~httpcompression?ver=13.1.0.4" - }, - "description": "my profile", - "gzipLevel": 1, - "gzipMemoryLevel": 8192, - "gzipWindowSize": 16384, - "keepAcceptEncoding": "disabled", - "methodPrefer": "gzip", - "minSize": 1024, - "selective": "disabled", - "uriExclude": [], - "uriInclude": [ - ".*" - ], - "varyHeader": "enabled" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_oneconnect_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_oneconnect_1.json deleted file mode 100644 index d2b05acfe..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_oneconnect_1.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "kind": "tm:ltm:profile:one-connect:one-connectstate", - "name": "oneconnect", - "partition": "Common", - "fullPath": "/Common/oneconnect", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/one-connect/~Common~oneconnect?ver=13.1.0.4", - "appService": "none", - "defaultsFrom": "none", - "description": "none", - "idleTimeoutOverride": "disabled", - "limitType": "none", - "maxAge": 86400, - "maxReuse": 1000, - "maxSize": 10000, - "sharePools": "disabled", - "sourceMask": "any" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_persistence_cookie_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_persistence_cookie_1.json deleted file mode 100644 index 771a26e91..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_persistence_cookie_1.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "kind": "tm:ltm:persistence:cookie:cookiestate", - "name": "cookie", - "partition": "Common", - "fullPath": "/Common/cookie", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/persistence/cookie/~Common~cookie?ver=13.1.0.7", - "alwaysSend": "disabled", - "appService": "none", - "cookieEncryption": "disabled", - "cookieName": "none", - "defaultsFrom": "none", - "description": "none", - "encryptCookiePoolname": "disabled", - "expiration": "0", - "hashLength": 0, - "hashOffset": 0, - "httponly": "enabled", - "matchAcrossPools": "disabled", - "matchAcrossServices": "disabled", - "matchAcrossVirtuals": "disabled", - "method": "insert", - "mirror": "disabled", - "overrideConnectionLimit": "disabled", - "secure": "enabled", - "timeout": "180" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_persistence_src_addr_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_persistence_src_addr_1.json deleted file mode 100644 index 2ee6df9b3..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_persistence_src_addr_1.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "kind": "tm:ltm:persistence:source-addr:source-addrstate", - "name": "source_addr", - "partition": "Common", - "fullPath": "/Common/source_addr", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/persistence/source-addr/~Common~source_addr?ver=13.1.0.7", - "appService": "none", - "defaultsFrom": "none", - "description": "none", - "hashAlgorithm": "default", - "mapProxies": "enabled", - "mapProxyAddress": "none", - "mapProxyClass": "none", - "mask": "none", - "matchAcrossPools": "disabled", - "matchAcrossServices": "disabled", - "matchAcrossVirtuals": "disabled", - "mirror": "disabled", - "overrideConnectionLimit": "disabled", - "timeout": "180" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_persistence_universal.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_persistence_universal.json deleted file mode 100644 index 092bfde6c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_persistence_universal.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "kind": "tm:ltm:persistence:universal:universalcollectionstate", - "name": "universal", - "partition": "Common", - "fullPath": "/Common/universal", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/persistence/universal/~Common~universal?ver=13.1.0.7", - "appService": "none", - "defaultsFrom": "none", - "description": "none", - "matchAcrossPools": "disabled", - "matchAcrossServices": "disabled", - "matchAcrossVirtuals": "disabled", - "mirror": "disabled", - "overrideConnectionLimit": "disabled", - "rule": "none", - "timeout": "180" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_serverssl_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_serverssl_1.json deleted file mode 100644 index 94e6019fb..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_serverssl_1.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "kind": "tm:ltm:profile:server-ssl:server-sslstate", - "name": "asda", - "partition": "Common", - "fullPath": "/Common/asda", - "generation": 160, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/server-ssl/~Common~asda?ver=13.1.0.8", - "alertTimeout": "indefinite", - "allowExpiredCrl": "disabled", - "appService": "none", - "authenticate": "once", - "authenticateDepth": 9, - "authenticateName": "none", - "bypassOnClientCertFail": "disabled", - "bypassOnHandshakeAlert": "disabled", - "c3dCaCert": "none", - "c3dCaKey": "none", - "c3dCertExtensionCustomOids": [], - "c3dCertExtensionIncludes": [ - "basic-constraints", - "extended-key-usage", - "key-usage", - "subject-alternative-name" - ], - "c3dCertLifespan": 24, - "caFile": "none", - "cacheSize": 262144, - "cacheTimeout": 3600, - "cert": "none", - "chain": "/Common/default.crt", - "chainReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~default.crt?ver=13.1.0.8" - }, - "cipherGroup": "none", - "ciphers": "DEFAULT", - "crlFile": "none", - "defaultsFrom": "/Common/serverssl", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/server-ssl/~Common~serverssl?ver=13.1.0.8" - }, - "description": "none", - "expireCertResponseControl": "drop", - "genericAlert": "enabled", - "handshakeTimeout": "10", - "key": "none", - "maxActiveHandshakes": "indefinite", - "modSslMethods": "disabled", - "mode": "enabled", - "ocsp": "none", - "tmOptions": [ - "dont-insert-empty-fragments" - ], - "peerCertMode": "ignore", - "proxySsl": "disabled", - "proxySslPassthrough": "disabled", - "renegotiatePeriod": "indefinite", - "renegotiateSize": "indefinite", - "renegotiation": "enabled", - "retainCertificate": "true", - "secureRenegotiation": "require-strict", - "serverName": "none", - "sessionMirroring": "disabled", - "sessionTicket": "disabled", - "sniDefault": "false", - "sniRequire": "false", - "sslC3d": "disabled", - "sslForwardProxy": "disabled", - "sslForwardProxyBypass": "disabled", - "sslSignHash": "any", - "strictResume": "disabled", - "uncleanShutdown": "enabled", - "untrustedCertResponseControl": "drop" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_tcp_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_tcp_1.json deleted file mode 100644 index 03ada3cbd..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_tcp_1.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "kind": "tm:ltm:profile:tcp:tcpstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 92, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/tcp/~Common~foo?ver=13.1.0.4", - "abc": "enabled", - "ackOnPush": "enabled", - "appService": "none", - "autoProxyBufferSize": "disabled", - "autoReceiveWindowSize": "disabled", - "autoSendBufferSize": "disabled", - "closeWaitTimeout": 5, - "cmetricsCache": "enabled", - "cmetricsCacheTimeout": 0, - "congestionControl": "high-speed", - "defaultsFrom": "/Common/tcp", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/tcp/~Common~tcp?ver=13.1.0.4" - }, - "deferredAccept": "disabled", - "delayWindowControl": "disabled", - "delayedAcks": "enabled", - "description": "none", - "dsack": "disabled", - "earlyRetransmit": "enabled", - "ecn": "enabled", - "enhancedLossRecovery": "disabled", - "fastOpen": "disabled", - "fastOpenCookieExpiration": 21600, - "finWait_2Timeout": 300, - "finWaitTimeout": 5, - "hardwareSynCookie": "enabled", - "idleTimeout": 300, - "initCwnd": 3, - "initRwnd": 3, - "ipDfMode": "pmtu", - "ipTosToClient": "0", - "ipTtlMode": "proxy", - "ipTtlV4": 255, - "ipTtlV6": 64, - "keepAliveInterval": 1800, - "limitedTransmit": "enabled", - "linkQosToClient": "0", - "maxRetrans": 8, - "maxSegmentSize": 1460, - "md5Signature": "disabled", - "minimumRto": 1000, - "mptcp": "disabled", - "mptcpCsum": "disabled", - "mptcpCsumVerify": "disabled", - "mptcpDebug": "disabled", - "mptcpFallback": "reset", - "mptcpFastjoin": "disabled", - "mptcpIdleTimeout": 300, - "mptcpJoinMax": 5, - "mptcpMakeafterbreak": "disabled", - "mptcpNojoindssack": "disabled", - "mptcpRtomax": 5, - "mptcpRxmitmin": 1000, - "mptcpSubflowmax": 6, - "mptcpTimeout": 3600, - "nagle": "disabled", - "pktLossIgnoreBurst": 0, - "pktLossIgnoreRate": 0, - "proxyBufferHigh": 49152, - "proxyBufferLow": 32768, - "proxyMss": "enabled", - "proxyOptions": "disabled", - "pushFlag": "default", - "ratePace": "disabled", - "ratePaceMaxRate": 0, - "receiveWindowSize": 65535, - "resetOnTimeout": "enabled", - "rexmtThresh": 3, - "selectiveAcks": "enabled", - "selectiveNack": "disabled", - "sendBufferSize": 65535, - "slowStart": "enabled", - "synCookieEnable": "enabled", - "synCookieWhitelist": "disabled", - "synMaxRetrans": 3, - "synRtoBase": 3000, - "tailLossProbe": "disabled", - "tcpOptions": "none", - "timeWaitRecycle": "enabled", - "timeWaitTimeout": "2000", - "timestamps": "enabled", - "verifiedAccept": "disabled", - "zeroWindowTimeout": 20000 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_udp_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_udp_1.json deleted file mode 100644 index a07307a0d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_profile_udp_1.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "kind": "tm:ltm:profile:udp:udpstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 107, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/udp/~Common~foo?ver=13.1.0.4", - "allowNoPayload": "disabled", - "appService": "none", - "bufferMaxBytes": 655350, - "bufferMaxPackets": 0, - "datagramLoadBalancing": "disabled", - "defaultsFrom": "/Common/udp", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/udp/~Common~udp?ver=13.1.0.4" - }, - "description": "none", - "idleTimeout": "60", - "ipDfMode": "pmtu", - "ipTosToClient": "0", - "ipTtlMode": "proxy", - "ipTtlV4": 255, - "ipTtlV6": 64, - "linkQosToClient": "0", - "noChecksum": "disabled", - "proxyMss": "disabled" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_snat_translation_default.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_snat_translation_default.json deleted file mode 100644 index 836866a17..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_snat_translation_default.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "address": "1.1.1.1", - "arp": "no", - "connectionLimit": 0, - "description": "My description", - "ip_idle_timeout":"50", - "kind": "tm:ltm:snat-translation:snat-translationstate", - "name": "my-snat-translation", - "partition": "Common", - "state":"present", - "enabled":"true", - "tcp_idle_timeout":"20", - "trafficGroup": "/Common/test", - "udp_idle_timeout":"100" -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_snatpool.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_snatpool.json deleted file mode 100644 index fcea1dd21..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_snatpool.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "kind": "tm:ltm:snatpool:snatpoolstate", - "name": "asdasd", - "partition": "Common", - "fullPath": "/Common/asdasd", - "generation": 40, - "selfLink": "https://localhost/mgmt/tm/ltm/snatpool/~Common~asdasd?ver=12.1.2", - "members": [ - "/Common/1.1.1.1", - "/Common/2.2.2.2" - ], - "membersReference": [ - { - "link": "https://localhost/mgmt/tm/ltm/snat-translation/~Common~1.1.1.1?ver=12.1.2" - }, - { - "link": "https://localhost/mgmt/tm/ltm/snat-translation/~Common~2.2.2.2?ver=12.1.2" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_1.json deleted file mode 100644 index aaf48ab87..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_1.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "kind": "tm:ltm:virtual:virtualstate", - "name": "my-virtual-server", - "partition": "Common", - "fullPath": "/Common/my-virtual-server", - "generation": 65, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server?ver=12.1.2", - "addressStatus": "yes", - "autoLasthop": "default", - "cmpEnabled": "yes", - "connectionLimit": 0, - "destination": "/Common/10.10.10.10:443", - "enabled": true, - "gtmScore": 0, - "ipProtocol": "any", - "mask": "255.255.255.255", - "mirror": "disabled", - "mobileAppTunnel": "disabled", - "nat64": "disabled", - "rateLimit": "disabled", - "rateLimitDstMask": 0, - "rateLimitMode": "object", - "rateLimitSrcMask": 0, - "serviceDownImmediateAction": "none", - "source": "0.0.0.0/0", - "sourceAddressTranslation": { - "type": "automap" - }, - "sourcePort": "preserve", - "synCookieStatus": "not-activated", - "translateAddress": "enabled", - "translatePort": "enabled", - "vlansDisabled": true, - "vsIndex": 2, - "policiesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/policies?ver=12.1.2", - "isSubcollection": true - }, - "profilesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles?ver=12.1.2", - "isSubcollection": true - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_1_address.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_1_address.json deleted file mode 100644 index 297afc918..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_1_address.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:ltm:virtual-address:virtual-addressstate", - "name": "10.10.10.10", - "partition": "Common", - "fullPath": "/Common/10.10.10.10", - "generation": 116, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual-address/~Common~10.10.10.10?ver=12.1.2", - "address": "10.10.10.10", - "arp": "enabled", - "autoDelete": "true", - "connectionLimit": 0, - "enabled": "yes", - "floating": "enabled", - "icmpEcho": "enabled", - "inheritedTrafficGroup": "false", - "mask": "255.255.255.255", - "routeAdvertisement": "enabled", - "serverScope": "any", - "spanning": "disabled", - "trafficGroup": "/Common/traffic-group-1", - "trafficGroupReference": { - "link": "https://localhost/mgmt/tm/cm/traffic-group/~Common~traffic-group-1?ver=12.1.2" - }, - "unit": 1 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_2.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_2.json deleted file mode 100644 index 712b19e3d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_2.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "kind": "tm:ltm:virtual:virtualstate", - "name": "my-virtual-server", - "partition": "Common", - "fullPath": "/Common/my-virtual-server", - "generation": 152, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server?ver=12.1.2", - "addressStatus": "yes", - "autoLasthop": "default", - "cmpEnabled": "yes", - "connectionLimit": 0, - "destination": "/Common/10.10.10.10:443", - "enabled": true, - "gtmScore": 0, - "ipProtocol": "any", - "mask": "255.255.255.255", - "mirror": "disabled", - "mobileAppTunnel": "disabled", - "nat64": "disabled", - "rateLimit": "disabled", - "rateLimitDstMask": 0, - "rateLimitMode": "object", - "rateLimitSrcMask": 0, - "serviceDownImmediateAction": "none", - "source": "0.0.0.0/0", - "sourceAddressTranslation": { - "type": "automap" - }, - "sourcePort": "preserve", - "synCookieStatus": "not-activated", - "translateAddress": "enabled", - "translatePort": "enabled", - "vlansDisabled": true, - "vsIndex": 19, - "vlans": [ - "/Common/net1" - ], - "vlansReference": [ - { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~net1?ver=12.1.2" - } - ], - "policiesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/policies?ver=12.1.2", - "isSubcollection": true - }, - "profilesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles?ver=12.1.2", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "fastL4", - "partition": "Common", - "fullPath": "/Common/fastL4", - "generation": 148, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~fastL4?ver=12.1.2", - "context": "all", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/fastl4/~Common~fastL4?ver=12.1.2" - } - } - ] - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_3.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_3.json deleted file mode 100644 index e1b0c7c27..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_3.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "kind": "tm:ltm:virtual:virtualstate", - "name": "my-virtual-server", - "partition": "Common", - "fullPath": "/Common/my-virtual-server", - "generation": 340, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server?expandSubcollections=true&ver=12.0.0", - "addressStatus": "yes", - "autoLasthop": "default", - "cmpEnabled": "yes", - "connectionLimit": 0, - "description": "Test Virtual Server", - "destination": "/Common/10.10.10.10:443", - "enabled": true, - "gtmScore": 0, - "ipProtocol": "tcp", - "mask": "255.255.255.255", - "mirror": "disabled", - "mobileAppTunnel": "disabled", - "nat64": "disabled", - "rateLimit": "disabled", - "rateLimitDstMask": 0, - "rateLimitMode": "object", - "rateLimitSrcMask": 0, - "serviceDownImmediateAction": "none", - "source": "0.0.0.0/0", - "sourceAddressTranslation": { - "type": "automap" - }, - "sourcePort": "preserve", - "synCookieStatus": "not-activated", - "translateAddress": "enabled", - "translatePort": "enabled", - "vlansDisabled": true, - "vsIndex": 38, - "rules": [ - "/Common/web_logging" - ], - "rulesReference": [ - { - "link": "https://localhost/mgmt/tm/ltm/rule/~Common~web_logging?ver=12.0.0" - } - ], - "policiesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/policies?ver=12.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:virtual:policies:policiesstate", - "name": "policy1", - "partition": "Common", - "fullPath": "/Common/policy1", - "generation": 340, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/policies/~Common~policy1?ver=12.0.0", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~policy1?ver=12.0.0" - } - } - ] - }, - "profilesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles?ver=12.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "clientssl", - "partition": "Common", - "fullPath": "/Common/clientssl", - "generation": 338, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~clientssl?ver=12.0.0", - "context": "clientside", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/client-ssl/~Common~clientssl?ver=12.0.0" - } - }, - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "http", - "partition": "Common", - "fullPath": "/Common/http", - "generation": 338, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~http?ver=12.0.0", - "context": "all", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/http/~Common~http?ver=12.0.0" - } - }, - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "tcp", - "partition": "Common", - "fullPath": "/Common/tcp", - "generation": 338, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~tcp?ver=12.0.0", - "context": "clientside", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/tcp/~Common~tcp?ver=12.0.0" - } - }, - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "tcp-legacy", - "partition": "Common", - "fullPath": "/Common/tcp-legacy", - "generation": 338, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~tcp-legacy?ver=12.0.0", - "context": "serverside", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/tcp/~Common~tcp-legacy?ver=12.0.0" - } - } - ] - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_address_collection_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_address_collection_1.json deleted file mode 100644 index 810e659ff..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_address_collection_1.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "kind": "tm:ltm:virtual-address:virtual-addresscollectionstate", - "selfLink": "https://localhost/mgmt/tm/ltm/virtual-address?ver=13.1.0.4", - "items": [ - { - "kind": "tm:ltm:virtual-address:virtual-addressstate", - "name": "2.3.4.5", - "partition": "Common", - "fullPath": "/Common/2.3.4.5", - "generation": 1074, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual-address/~Common~2.3.4.5?ver=13.1.0.4", - "address": "2.3.4.5", - "arp": "enabled", - "autoDelete": "true", - "connectionLimit": 0, - "enabled": "yes", - "floating": "enabled", - "icmpEcho": "enabled", - "inheritedTrafficGroup": "false", - "mask": "255.255.255.255", - "routeAdvertisement": "disabled", - "serverScope": "any", - "spanning": "disabled", - "trafficGroup": "/Common/traffic-group-1", - "trafficGroupReference": { - "link": "https://localhost/mgmt/tm/cm/traffic-group/~Common~traffic-group-1?ver=13.1.0.4" - }, - "unit": 1 - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_address_default.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_address_default.json deleted file mode 100644 index a2b87012a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ltm_virtual_address_default.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:ltm:virtual-address:virtual-addressstate", - "name": "1.1.1.1", - "partition": "Common", - "fullPath": "/Common/1.1.1.1", - "generation": 116, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual-address/~Common~1.1.1.1?ver=12.1.2", - "address": "1.1.1.1", - "arp": "enabled", - "autoDelete": "true", - "connectionLimit": 0, - "enabled": "yes", - "floating": "enabled", - "icmpEcho": "enabled", - "inheritedTrafficGroup": "false", - "mask": "255.255.255.255", - "routeAdvertisement": "disabled", - "serverScope": "any", - "spanning": "disabled", - "trafficGroup": "/Common/traffic-group-1", - "trafficGroupReference": { - "link": "https://localhost/mgmt/tm/cm/traffic-group/~Common~traffic-group-1?ver=12.1.2" - }, - "unit": 1 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_machine_resolver.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_machine_resolver.json deleted file mode 100644 index 2422ca6db..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_machine_resolver.json +++ /dev/null @@ -1,187 +0,0 @@ - { - "uuid": "4dd9f559-c1b9-4e05-8d17-2345a6a3d459", - "deviceUri": "https://10.144.74.229:443", - "machineId": "4dd9f559-c1b9-4e05-8d17-2345a6a3d459", - "state": "ACTIVE", - "address": "10.144.74.229", - "httpsPort": 443, - "hostname": "ansible_test_lab12.lab.local", - "version": "12.1.3", - "product": "BIG-IP", - "edition": "Final", - "build": "0.0.378", - "restFrameworkVersion": "12.1.3-0.0.378", - "managementAddress": "10.144.74.229", - "mcpDeviceName": "/Common/ansible_test_lab12.lab.local", - "trustDomainGuid": "44135337-f809-480d-ab6ffa163edc9ff6", - "properties": { - "cm:gui:module": [ - "asmsecurity", - "adc", - "BigIPDevice", - "sharedsecurity" - ], - "modules": [ - "Web Application Security Group", - "Security" - ], - "cm-bigip-allBigIpDevices": { - "cm:gui:module": [ - "asmsecurity", - "adc", - "BigIPDevice", - "sharedsecurity" - ], - "shared:resolver:device-groups:discoverer": "13446925-efb3-47f4-b32c-ed705d29e878", - "modules": [ - "Web Application Security Group", - "Security" - ] - }, - "cm-asm-allDevices": { - "cm:gui:module": [], - "modules": [] - }, - "cm-bigip-allDevices": { - "shared:resolver:device-groups:discoverer": "13446925-efb3-47f4-b32c-ed705d29e878", - "cm:gui:module": [], - "modules": [] - }, - "cm-adccore-allDevices": { - "cm:gui:module": [], - "modules": [] - }, - "cm-security-shared-allSharedDevices": { - "discovered": true, - "imported": true, - "supportsAlpineDosDeviceConfig": true, - "supports_14_0_Enhs": false, - "supportsRest": true, - "supportsAlpineDosProfileEnhs": true, - "requiresDhcpProfileInDhcpVirtualServer": true, - "supportsAfmSubscribers": false, - "supportsAlpineEnhs": true, - "supports_13_0_Enhs": false, - "supportsFirewallRuleIdentifiers": false, - "supportsBadgerEnhs": true, - "supportsAlpineDosDeviceWhitelistIpProcotol": true, - "supportsSshProfile": true, - "supportsPortMisusePolicy": true, - "supportsAlpineLogProfileEnhs": true, - "supportsCascadeEnhs": true, - "supportUdpPortList": true, - "supports_13_1_Enhs": false, - "supportsIncrementalDiscovery": false, - "lastDiscoveredDateTime": "2019-02-12T13:53:06.541Z", - "lastUserDiscoveredDateTime": "2019-02-12T13:53:06.541Z", - "importedDateTime": "2019-02-12T13:53:24.885Z", - "discoveryStatus": "FINISHED", - "importStatus": "FINISHED", - "cm:gui:module": [ - "sharedsecurity" - ], - "modules": [ - "Security" - ] - }, - "cm-adccore-allbigipDevices": { - "discovered": true, - "imported": true, - "supportsRest": true, - "requiresDhcpProfileInDhcpVirtualServer": true, - "supportsAlpineEnhs": true, - "supports_13_0_Enhs": false, - "supportsFirewallRuleIdentifiers": false, - "supportsBadgerEnhs": true, - "restrictsPortTranslationStatelessVirtual": true, - "supportsClassification": true, - "supports_13_1_Enhs": false, - "supportsIncrementalDiscovery": false, - "supports_12_1_2_Enhs": true, - "lastDiscoveredDateTime": "2019-02-12T13:53:03.963Z", - "lastUserDiscoveredDateTime": "2019-02-12T13:53:03.963Z", - "importedDateTime": "2019-02-12T13:53:18.975Z", - "discoveryStatus": "FINISHED", - "importStatus": "FINISHED", - "cm:gui:module": [ - "adc" - ], - "modules": [] - }, - "cm-security-shared-allDevices": { - "cm:gui:module": [], - "modules": [] - }, - "cm-asm-allAsmDevices": { - "discovered": true, - "imported": true, - "supportsHostNameEnforcementMode": false, - "supportsRest": true, - "supportsServerTechnologies": false, - "supportsCpb": false, - "supportsUrlCascadeFeatures": true, - "supportsSessionTrackingAllLoginPagesUsernameSource": true, - "supportsLoginEnforcementCascadeFeatures": true, - "suppportsXmlValidationFiles": true, - "supportsExtractions": true, - "supportsWebSocketSecurity": true, - "supportsWhitelistIpBlockRequestAlways": false, - "supportsSessionTrackingSessionHijackingByDeviceId": true, - "supportsLoginPagesHeaderOmits": false, - "supportsBruteForceAttackPreventionsCascadeFeatures": true, - "supportsPlainTextProfile": true, - "supportsIncrementalDiscovery": false, - "supportsRedirectionProtection": true, - "supportsHeaderSignaturesOverride": false, - "supportsIpIntelligence": true, - "supports_13_0_Enhs": false, - "supportsFirewallRuleIdentifiers": false, - "supportsSessionTrackingDeviceIdThresholds": true, - "supportsLoginEnforcement": true, - "supportsCsrfProtection": true, - "supportsSessionTracking": true, - "supportsJsonProfiles": true, - "supportsBruteForceAttackPreventions": true, - "supportsWebScraping": true, - "supportsLoginPagesCascadeFeatures": true, - "supportsGwtProfiles": true, - "supportsXmlProfiles": true, - "supportsAsmDisallowedGeolocation": true, - "supportsCsrfUrls": false, - "supportsDataProtection": false, - "supportsLoginPages": true, - "supportsBruteForceAttackPreventionsBadgerFeatures": true, - "supportsUrlSignaturesOverride": false, - "signatureAutoUpdateState": true, - "signatureFileVersion": 1.450112674E12, - "signatureFilename": "Attack Signature Database packaged with version 12.1.3", - "lastDiscoveredDateTime": "2019-02-12T13:53:09.188Z", - "lastUserDiscoveredDateTime": "2019-02-12T13:53:09.188Z", - "importedDateTime": "2019-02-12T13:53:29.730Z", - "discoveryStatus": "FINISHED", - "importStatus": "FINISHED", - "cm:gui:module": [ - "asmsecurity" - ], - "modules": [ - "Web Application Security Group" - ] - } - }, - "isClustered": false, - "isVirtual": true, - "isLicenseExpired": false, - "slots": [ - { - "volume": "HD1.1", - "product": "BIG-IP", - "version": "12.1.3", - "build": "0.0.378", - "isActive": true - } - ], - "generation": 4, - "lastUpdateMicros": 1549979318078796, - "kind": "shared:resolver:device-groups:restdeviceresolverdevicestate", - "selfLink": "https://localhost/mgmt/cm/system/machineid-resolver/4dd9f559-c1b9-4e05-8d17-2345a6a3d459" - } diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_mcast_globals.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_mcast_globals.json deleted file mode 100644 index 7faf0cb48..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_mcast_globals.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "kind": "tm:net:multicast-globals:multicast-globalsstate", - "selfLink": "https://localhost/mgmt/tm/net/multicast-globals?ver=13.1.1.4", - "maxPendingPackets": 16, - "maxPendingRoutes": 256, - "rateLimit": "enabled", - "routeLookupTimeout": 2 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_dns_resolver_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_dns_resolver_1.json deleted file mode 100644 index bdf3f7559..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_dns_resolver_1.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:net:dns-resolver:dns-resolverstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 173, - "selfLink": "https://localhost/mgmt/tm/net/dns-resolver/~Common~foo?ver=13.1.0.8", - "answerDefaultZones": "no", - "cacheSize": 5767168, - "randomizeQueryNameCase": "yes", - "routeDomain": "/Common/0", - "routeDomainReference": { - "link": "https://localhost/mgmt/tm/net/route-domain/~Common~0?ver=13.1.0.8" - }, - "useIpv4": "no", - "useIpv6": "yes", - "useTcp": "yes", - "useUdp": "yes" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_interfaces.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_interfaces.json deleted file mode 100644 index 2cc3032fc..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_interfaces.json +++ /dev/null @@ -1,424 +0,0 @@ -[ - { - "kind": "tm:net:interface:interfacestate", - "name": "1.1", - "fullPath": "1.1", - "generation": 7767, - "selfLink": "https://localhost/mgmt/tm/net/interface/1.1?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 176, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:02", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "1000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "1.2", - "fullPath": "1.2", - "generation": 7770, - "selfLink": "https://localhost/mgmt/tm/net/interface/1.2?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 192, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:03", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "1000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "1.3", - "fullPath": "1.3", - "generation": 7773, - "selfLink": "https://localhost/mgmt/tm/net/interface/1.3?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 208, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:04", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "1000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "1.4", - "fullPath": "1.4", - "generation": 7776, - "selfLink": "https://localhost/mgmt/tm/net/interface/1.4?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 224, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:05", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "1000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.1", - "fullPath": "2.1", - "generation": 7859, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.1?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 240, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:06", - "mediaActive": "10000SR-FD", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "moduleDescription": "F5 compatible optics", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "serial": "ARP2LGU", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto", - "vendor": "F5 NETWORKS INC.", - "vendorOui": "009065", - "vendorPartnum": "OPT-0016", - "vendorRevision": "A0" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.2", - "fullPath": "2.2", - "generation": 7746, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.2?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 256, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:07", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.3", - "fullPath": "2.3", - "generation": 7749, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.3?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 272, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:08", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.4", - "fullPath": "2.4", - "generation": 7752, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.4?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 288, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:09", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.5", - "fullPath": "2.5", - "generation": 7755, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.5?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 304, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:0a", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.6", - "fullPath": "2.6", - "generation": 7758, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.6?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 320, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:0b", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.7", - "fullPath": "2.7", - "generation": 7761, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.7?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 336, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:0c", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.8", - "fullPath": "2.8", - "generation": 7764, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.8?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 352, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:0d", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "mgmt", - "fullPath": "mgmt", - "generation": 7651, - "selfLink": "https://localhost/mgmt/tm/net/interface/mgmt?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 96, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:01", - "mediaActive": "1000T-FD", - "mediaFixed": "auto", - "mediaMax": "1000T-FD", - "mediaSfp": "auto", - "mtu": 1500, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - } - ] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_node_with_fqdn.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_node_with_fqdn.json deleted file mode 100644 index 67c02568d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_node_with_fqdn.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:ltm:node:nodestate", - "name": "foo.bar.com", - "partition": "Common", - "fullPath": "/Common/foo.bar.com", - "generation": 157, - "selfLink": "https://localhost/mgmt/tm/ltm/node/~Common~foo.bar.com?ver=12.0.0", - "address": "any6", - "connectionLimit": 0, - "dynamicRatio": 1, - "ephemeral": "false", - "fqdn": { - "addressFamily": "ipv4", - "autopopulate": "enabled", - "downInterval": 5, - "interval": "3600", - "tmName": "foo.bar.com" - }, - "logging": "disabled", - "monitor": "default", - "rateLimit": "disabled", - "ratio": 1, - "session": "user-enabled", - "state": "fqdn-up-no-addr" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_node_with_ipv4_address.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_node_with_ipv4_address.json deleted file mode 100644 index 9e3be8892..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_node_with_ipv4_address.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "kind": "tm:ltm:node:nodestate", - "name": "7.3.67.8", - "partition": "Common", - "fullPath": "/Common/7.3.67.8", - "generation": 162, - "selfLink": "https://localhost/mgmt/tm/ltm/node/~Common~7.3.67.8?ver=12.0.0", - "address": "7.3.67.8", - "connectionLimit": 0, - "dynamicRatio": 1, - "ephemeral": "false", - "fqdn": { - "addressFamily": "ipv4", - "autopopulate": "disabled", - "downInterval": 5, - "interval": "3600" - }, - "logging": "disabled", - "monitor": "default", - "rateLimit": "disabled", - "ratio": 1, - "session": "user-enabled", - "state": "unchecked" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_blackhole.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_blackhole.json deleted file mode 100644 index c7d3f24da..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_blackhole.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "kind": "tm:net:route:routestate", - "name": "bad", - "partition": "Common", - "fullPath": "/Common/bad", - "generation": 93, - "selfLink": "https://localhost/mgmt/tm/net/route/~Common~bad?ver=12.1.0", - "blackhole": true, - "mtu": 0, - "network": "1.2.3.4/30" -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_description.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_description.json deleted file mode 100644 index a7c47bc8f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_description.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "kind": "tm:net:route:routestate", - "name": "asdasd", - "partition": "Common", - "fullPath": "/Common/asdasd", - "generation": 113, - "selfLink": "https://localhost/mgmt/tm/net/route/~Common~asdasd?ver=12.1.0", - "description": "asdasd", - "mtu": 0, - "network": "2.2.2.2/32", - "pool": "/Common/adsasd", - "poolReference": { - "link": "https://localhost/mgmt/tm/ltm/pool/~Common~adsasd?ver=12.1.0" - } -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_domain_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_domain_1.json deleted file mode 100644 index 6ff8c5dfc..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_domain_1.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "kind": "tm:net:route-domain:route-domainstate", - "name": "0", - "partition": "Common", - "fullPath": "/Common/0", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/net/route-domain/~Common~0?ver=13.1.0", - "connectionLimit": 0, - "id": 0, - "strict": "enabled", - "throughputCapacity": 0, - "vlans": [ - "/Common/net1", - "/Common/internal", - "/Common/net2", - "/Common/socks-tunnel", - "/Common/http-tunnel" - ], - "vlansReference": [ - { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~net1?ver=13.1.0" - }, - { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~internal?ver=13.1.0" - }, - { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~net2?ver=13.1.0" - }, - { - "link": "https://localhost/mgmt/tm/net/tunnels/tunnel/~Common~socks-tunnel?ver=13.1.0" - }, - { - "link": "https://localhost/mgmt/tm/net/tunnels/tunnel/~Common~http-tunnel?ver=13.1.0" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_use_gateway.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_use_gateway.json deleted file mode 100644 index 39f56b76c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_use_gateway.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "kind": "tm:net:route:routestate", - "name": "asd", - "partition": "Common", - "fullPath": "/Common/asd", - "generation": 89, - "selfLink": "https://localhost/mgmt/tm/net/route/~Common~asd?ver=12.1.0", - "gw": "10.2.2.5", - "mtu": 0, - "network": "10.2.2.0/30" -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_use_pool.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_use_pool.json deleted file mode 100644 index ab0cbce36..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_route_use_pool.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "kind": "tm:net:route:routestate", - "name": "sddfg", - "partition": "Common", - "fullPath": "/Common/sddfg", - "generation": 90, - "selfLink": "https://localhost/mgmt/tm/net/route/~Common~sddfg?ver=12.1.0", - "mtu": 0, - "network": "11.11.11.0/30", - "pool": "/Common/adsasd", - "poolReference": { - "link": "https://localhost/mgmt/tm/ltm/pool/~Common~adsasd?ver=12.1.0" - } -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_service_policy_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_service_policy_1.json deleted file mode 100644 index a89ca59ff..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_service_policy_1.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "kind": "tm:net:service-policy:service-policystate", - "name": "baz", - "partition": "Common", - "fullPath": "/Common/baz", - "generation": 581, - "selfLink": "https://localhost/mgmt/tm/net/service-policy/~Common~baz?ver=13.1.0.4", - "description": "my description", - "portMisusePolicy": "/Common/bar", - "portMisusePolicyReference": { - "link": "https://localhost/mgmt/tm/security/firewall/port-misuse-policy/~Common~bar?ver=13.1.0.4" - }, - "timerPolicy": "/Common/foo", - "timerPolicyReference": { - "link": "https://localhost/mgmt/tm/net/timer-policy/~Common~foo?ver=13.1.0.4" - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_timer_policy_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_timer_policy_1.json deleted file mode 100644 index 4b6f550a5..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_timer_policy_1.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "kind": "tm:net:timer-policy:timer-policystate", - "name": "timer1", - "partition": "Common", - "fullPath": "/Common/timer1", - "generation": 148, - "selfLink": "https://localhost/mgmt/tm/net/timer-policy/~Common~timer1?ver=13.1.0.4", - "description": "my description" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_timer_policy_2.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_timer_policy_2.json deleted file mode 100644 index 3833ae4bf..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_timer_policy_2.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "kind": "tm:net:timer-policy:timer-policystate", - "name": "timer1", - "partition": "Common", - "fullPath": "/Common/timer1", - "generation": 156, - "selfLink": "https://localhost/mgmt/tm/net/timer-policy/~Common~timer1?ver=13.1.0.4", - "description": "another description", - "rules": [ - { - "name": "rule1", - "ipProtocol": "ax.25", - "timers": [ - { - "name": "flow-idle-timeout", - "value": "unspecified" - } - ] - }, - { - "name": "rule2", - "ipProtocol": "tcp", - "destinationPorts": [ - { - "name": "21" - }, - { - "name": "23" - }, - { - "name": "100-200" - } - ], - "timers": [ - { - "name": "flow-idle-timeout", - "value": "immediate" - } - ] - }, - { - "name": "rule3", - "description": "a description", - "ipProtocol": "udp", - "destinationPorts": [ - { - "name": "162" - }, - { - "name": "500" - }, - { - "name": "8883" - } - ], - "timers": [ - { - "name": "flow-idle-timeout", - "value": "indefinite" - } - ] - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_tunnel_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_tunnel_1.json deleted file mode 100644 index dd0e48426..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_net_tunnel_1.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:net:tunnels:tunnel:tunnelstate", - "name": "tunnel1", - "partition": "Common", - "fullPath": "/Common/tunnel1", - "generation": 3713, - "selfLink": "https://localhost/mgmt/tm/net/tunnels/tunnel/~Common~tunnel1?ver=13.1.0.7", - "autoLasthop": "default", - "description": "my other tunnel", - "idleTimeout": 300, - "ifIndex": 736, - "key": 0, - "localAddress": "3.3.3.3", - "mode": "bidirectional", - "mtu": 1000, - "profile": "/Common/ipip", - "profileReference": { - "link": "https://localhost/mgmt/tm/net/tunnels/ipip/~Common~ipip?ver=13.1.0.7" - }, - "remoteAddress": "4.4.4.4", - "secondaryAddress": "any6", - "tos": "preserve", - "transparent": "disabled", - "usePmtu": "enabled" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ntp.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ntp.json deleted file mode 100644 index 3b55b4870..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_ntp.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "kind": "tm:sys:ntp:ntpstate", - "selfLink": "https://localhost/mgmt/tm/sys/ntp?ver=12.1.0", - "servers": [ - "192.168.1.1", - "192.168.1.2" - ], - "timezone": "America/Los_Angeles", - "restrictReference": { - "link": "https://localhost/mgmt/tm/sys/ntp/restrict?ver=12.1.0", - "isSubcollection": true - } -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_oracle_monitor.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_oracle_monitor.json deleted file mode 100644 index 29f2815ab..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_oracle_monitor.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:ltm:monitor:oracle:oraclestate", - "name": "testy", - "partition": "Common", - "fullPath": "/Common/testy", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/oracle/~Common~testy?ver=15.1.0.1", - "count": "1", - "database": "%node_ip%:%node_port%:", - "debug": "no", - "defaultsFrom": "/Common/oracle", - "description": "my monitor", - "destination": "*.*", - "interval": 30, - "manualResume": "disabled", - "password": "$M$x3$4nhtNi1InNHjU9DSuoPI2Q==", - "recv": "bar", - "recvColumn": "3", - "recvRow": "2", - "send": "foo", - "timeUntilUp": 0, - "timeout": 91, - "upInterval": 0, - "username": "user" -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_profile_sip.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_profile_sip.json deleted file mode 100644 index 4c9b1ea6e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_profile_sip.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "kind": "tm:ltm:profile:sip:sipstate", - "name": "foobar", - "partition": "Common", - "fullPath": "/Common/foobar", - "generation": 663, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/sip/~Common~foobar?ver=14.1.0.3", - "algEnable": "disabled", - "appService": "none", - "community": "none", - "defaultsFrom": "/Common/sip", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/sip/~Common~sip?ver=14.1.0.3" - }, - "description": "none", - "dialogAware": "enabled", - "dialogEstablishmentTimeout": 10, - "enableSipFirewall": "no", - "insertRecordRouteHeader": "disabled", - "insertViaHeader": "disabled", - "logProfile": "none", - "logPublisher": "none", - "maxMediaSessions": 6, - "maxRegistrations": 100, - "maxSessionsPerRegistration": 50, - "maxSize": 65535, - "registrationTimeout": 3600, - "rtpProxyStyle": "symmetric", - "secureViaHeader": "disabled", - "security": "enabled", - "sipSessionTimeout": 300, - "terminateOnBye": "enabled", - "userViaHeader": "none" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_radius_config.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_radius_config.json deleted file mode 100644 index 4ef8e6658..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_radius_config.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "kind": "tm:auth:radius:radiusstate", - "name": "system-auth", - "partition": "Common", - "fullPath": "/Common/system-auth", - "generation": 1166, - "selfLink": "https://localhost/mgmt/tm/auth/radius/~Common~system-auth?ver=15.1.0.1", - "accountingBug": "disabled", - "debug": "disabled", - "retries": 3, - "serviceType": "authenticate-only", - "servers": [ - "/Common/system_auth_name1" - ], - "serversReference": [ - { - "link": "https://localhost/mgmt/tm/auth/radius-server/~Common~system_auth_name1?ver=15.1.0.1" - }, - { - "link": "https://localhost/mgmt/tm/auth/radius-server/~Common~system_auth_name2?ver=15.1.0.1" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_radius_server.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_radius_server.json deleted file mode 100644 index b5007e7f5..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_radius_server.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "kind": "tm:auth:radius-server:radius-serverstate", - "name": "test", - "partition": "Common", - "fullPath": "/Common/test", - "generation": 4137, - "selfLink": "https://localhost/mgmt/tm/auth/radius-server/~Common~test?ver=15.1.0.1", - "port": 1812, - "secret": "$M$A2$Xz77j9je8AqssLOscS+F+g==", - "server": "1.1.1.1", - "timeout": 3 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_regkey_license_key.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_regkey_license_key.json deleted file mode 100644 index 8a781d1da..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_regkey_license_key.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "description": "foo bar baz", - "dossier": "5d54d976", - "encryptedPrivateKey": [ - 27, - -10, - 12, - 58, - 75 - ], - "generation": 2, - "internalPrivateKey": "sKpXEU7", - "kind": "cm:device:licensing:pool:regkey:licenses:item:offerings:regkeypoollicenseofferingstate", - "lastUpdateMicros": 1513107721123304, - "licenseState": { - "vendor": "F5 Networks, Inc.", - "licensedDateTime": "2017-12-12T00:00:00-08:00", - "licensedVersion": "5.3.0", - "evaluationStartDateTime": "2017-12-11T00:00:00-08:00", - "evaluationEndDateTime": "2018-01-12T00:00:00-08:00", - "licenseEndDateTime": "2018-01-12T00:00:00-08:00", - "licenseStartDateTime": "2017-12-11T00:00:00-08:00", - "registrationKey": "XXXX-XXXX-XXXX-XXXX-XXXX", - "dossier": "1a44262799bc", - "authorization": "03fc41d1e8666", - "usage": "F5 Internal Product Development", - "platformId": "Z100", - "authVers": "5b", - "serviceCheckDateTime": "2017-12-12T00:00:00-08:00", - "serviceStatus": "As of 2017-12-12 there is no active service contract. This may inhibit your ability to upgrade your software.", - "exclusivePlatform": [ - "Z100", - "Z100A", - "Z100AzureCloud", - "Z100GoogleCloud", - "Z100K", - "Z100x", - "Z100H" - ], - "activeModules": [ - "APM, Max, VE (2500 CCU, 10000 Access Sessions)|P961057-1761515|Anti-Virus Checks", - "LTM, 10 Gbps, VE|T487107-2453693|, VE|DNSSEC", - "PEM, VE|X895364-1851682" - ], - "optionalModules": [ - "APM, Base, VE (50 CCU / 200 AS)", - "App Mode (TMSH Only, No Root/Bash)", - "Concurrent Users", - "Concurrent Users and Access Sessions, VE", - "FIPS 140-2 Level 1, BIG-IP VE-1G to 10G", - "IP Intelligence, 1Yr, VE", - "IP Intelligence, 1Yr, VE-10G", - "IP Intelligence, 3Yr, VE-10G", - "LTM to Better Bundle Upgrade, 10Gbps", - "PEM URL Filtering, 1Yr, HIGH PERF", - "PEM URL Filtering, 3Yr, HIGH PERF", - "Routing Bundle", - "Secure Web Gateway, 1Yr, VE", - "URL Filtering, 1Yr, VE" - ], - "moduleEvaluations": [ - { - "moduleName": "IP Intelligence, 3Yr, VE|SUBSCRIPTION", - "endDate": "soon" - }, - { - "moduleName": "Secure Web Gateway, 3Yr, VE|SUBSCRIPTION", - "endDate": "soon" - }, - { - "moduleName": "URL Filtering, 3Yr, VE|SUBSCRIPTION", - "endDate": "soon" - } - ], - "featureFlags": [ - { - "featureName": "gtm_rate_limit", - "featureValue": "12345" - } - ], - "generation": 0, - "lastUpdateMicros": 0 - }, - "licenseText": "#Auth vers : BIG-IQ Product License File#", - "message": "License XXXX-XXXX-XXXX-XXXX-XXXX ready", - "name": "License for XXXX-XXXX-XXXX-XXXX-XXXX", - "publicKey": [ - 48, - 0, - 1 - ], - "regKey": "XXXX-XXXX-XXXX-XXXX-XXXX", - "selfLink": "https://localhost/mgmt/cm/device/licensing/pool/regkey/licenses/452f8628-1e56-4b4d-946c-0e68f5780aa1/offerings/XXXX-XXXX-XXXX-XXXX-XXXX", - "sortName": "Registration Key Pool Item", - "status": "READY" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_regkey_license_pool.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_regkey_license_pool.json deleted file mode 100644 index f711817f7..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_regkey_license_pool.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "description": "this is a description", - "generation": 2, - "id": "452f8628-1e56-4b4d-946c-0e68f5780aa1", - "kind": "cm:device:licensing:pool:regkey:licenses:regkeypoollicensestate", - "lastUpdateMicros": 1513371645532221, - "name": "asd", - "selfLink": "https://localhost/mgmt/cm/device/licensing/pool/regkey/licenses/452f8628-1e56-4b4d-946c-0e68f5780aa1", - "sortName": "Registration Key Pool" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_remote_user_settings.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_remote_user_settings.json deleted file mode 100644 index 296f462f9..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_remote_user_settings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "kind": "tm:auth:remote-user:remote-userstate", - "selfLink": "https://localhost/mgmt/tm/auth/remote-user?ver=12.1.4", - "defaultPartition": "all", - "defaultPartitionReference": { - "link": "https://localhost/mgmt/tm/auth/partition/all?ver=12.1.4" - }, - "defaultRole": "no-access", - "remoteConsoleAccess": "disabled" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_security_address_list_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_security_address_list_1.json deleted file mode 100644 index 45aca1e3c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_security_address_list_1.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "kind": "tm:security:firewall:address-list:address-liststate", - "name": "bar", - "partition": "Common", - "fullPath": "/Common/bar", - "generation": 135, - "selfLink": "https://localhost/mgmt/tm/security/firewall/address-list/~Common~bar?ver=12.1.2", - "addressLists": [ - { - "name": "foo", - "partition": "Common", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/firewall/address-list/~Common~foo?ver=12.1.2" - } - } - ], - "addresses": [ - { - "name": "1.1.1.1" - }, - { - "name": "2.2.2.2-3.3.3.3" - }, - { - "name": "5.5.5.5-6.6.6.6" - }, - { - "name": "2700:bc00:1f10:101::6" - } - ], - "fqdns": [ - { - "name": "google.com" - } - ], - "geo": [ - { - "name": "AF:Baghlan" - }, - { - "name": "AF:Helmand" - }, - { - "name": "BS" - }, - { - "name": "EU" - }, - { - "name": "GE:Marneulis Raioni" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_security_firewall_global_rules_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_security_firewall_global_rules_1.json deleted file mode 100644 index 80f475eb4..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_security_firewall_global_rules_1.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:security:firewall:global-rules:global-rulesstate", - "selfLink": "https://localhost/mgmt/tm/security/firewall/global-rules?ver=13.1.0.7", - "enforcedPolicy": "/Common/foo", - "enforcedPolicyReference": { - "link": "https://localhost/mgmt/tm/security/firewall/policy/~Common~foo?ver=13.1.0.7" - }, - "servicePolicy": "/Common/bar", - "servicePolicyReference": { - "link": "https://localhost/mgmt/tm/net/service-policy/~Common~bar?ver=13.1.0.7" - }, - "stagedPolicy": "/Common/baz", - "stagedPolicyReference": { - "link": "https://localhost/mgmt/tm/security/firewall/policy/~Common~baz?ver=13.1.0.7" - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_security_firewall_policy_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_security_firewall_policy_1.json deleted file mode 100644 index 9c2460588..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_security_firewall_policy_1.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "kind": "tm:security:firewall:policy:policystate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 2075, - "selfLink": "https://localhost/mgmt/tm/security/firewall/policy/~Common~foo?expandSubcollections=true&ver=13.1.0.7", - "description": "my description", - "rulesReference": { - "link": "https://localhost/mgmt/tm/security/firewall/policy/~Common~foo/rules?ver=13.1.0.7", - "isSubcollection": true, - "items": [ - { - "kind": "tm:security:firewall:policy:rules:rulesstate", - "name": "rule1", - "fullPath": "rule1", - "generation": 2075, - "selfLink": "https://localhost/mgmt/tm/security/firewall/policy/~Common~foo/rules/rule1?ver=13.1.0.7", - "action": "accept", - "ipProtocol": "any", - "iruleSampleRate": 1, - "log": "no", - "status": "enabled" - }, - { - "kind": "tm:security:firewall:policy:rules:rulesstate", - "name": "rule2", - "fullPath": "rule2", - "generation": 2075, - "selfLink": "https://localhost/mgmt/tm/security/firewall/policy/~Common~foo/rules/rule2?ver=13.1.0.7", - "action": "accept", - "ipProtocol": "any", - "iruleSampleRate": 1, - "log": "no", - "status": "enabled" - }, - { - "kind": "tm:security:firewall:policy:rules:rulesstate", - "name": "rule3", - "fullPath": "rule3", - "generation": 2074, - "selfLink": "https://localhost/mgmt/tm/security/firewall/policy/~Common~foo/rules/rule3?ver=13.1.0.7", - "action": "accept", - "ipProtocol": "any", - "iruleSampleRate": 1, - "log": "no", - "status": "enabled" - } - ] - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_security_port_list_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_security_port_list_1.json deleted file mode 100644 index ec639dacf..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_security_port_list_1.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "kind": "tm:security:firewall:port-list:port-liststate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 119, - "description": "this is a description", - "selfLink": "https://localhost/mgmt/tm/security/firewall/port-list/~Common~foo?ver=12.1.0", - "portLists": [ - { - "name": "_sys_self_allow_tcp_defaults", - "partition": "Common", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/firewall/port-list/~Common~_sys_self_allow_tcp_defaults?ver=12.1.0" - } - } - ], - "ports": [ - { - "name": "1" - }, - { - "name": "2" - }, - { - "name": "3" - }, - { - "name": "4" - }, - { - "name": "10-20" - }, - { - "name": "30-40" - }, - { - "name": "50-60" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_setup.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_setup.json deleted file mode 100644 index ba1538114..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_setup.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "isSystemSetup": true, - "isAdminPasswordChanged": false, - "isRootPasswordChanged": false, - "generation": 5, - "lastUpdateMicros": 1490030910772165, - "kind": "shared:system:setup:systemsetupworkerstate", - "selfLink": "https://localhost/mgmt/shared/system/setup" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_shared_system_setup_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_shared_system_setup_1.json deleted file mode 100644 index 8f886e145..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_shared_system_setup_1.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "isSystemSetup": true, - "isAdminPasswordChanged": false, - "isRootPasswordChanged": true, - "generation": 7, - "lastUpdateMicros": 1536357209120972, - "kind": "shared:system:setup:systemsetupworkerstate", - "selfLink": "https://localhost/mgmt/shared/system/setup" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_stp_globals.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_stp_globals.json deleted file mode 100644 index f66b6872a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_stp_globals.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "kind": "tm:net:stp-globals:stp-globalsstate", - "selfLink": "https://localhost/mgmt/tm/net/stp-globals?ver=13.1.1.4", - "configRevision": 0, - "fwdDelay": 15, - "helloTime": 2, - "maxAge": 20, - "maxHops": 20, - "mode": "passthru", - "transmitHold": 6 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_application_template_w_new_checksum.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_application_template_w_new_checksum.json deleted file mode 100644 index 57f3c3755..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_application_template_w_new_checksum.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "kind": "tm:sys:application:template:templatestate", - "name": "good_templ", - "partition": "Common", - "fullPath": "/Common/good_templ", - "generation": 410, - "selfLink": "https://localhost/mgmt/tm/sys/application/template/~Common~good_templ?ver=13.0.0", - "description": "My basic template", - "ignoreVerification": "false", - "requiresBigipVersionMin": "11.6.0", - "requiresModules": [ - "ltm" - ], - "tmplChecksum": "90c46acee5ca08e300da0bcdb9130745", - "totalSigningStatus": "checksum", - "verificationStatus": "checksum-verified", - "actionsReference": { - "link": "https://localhost/mgmt/tm/sys/application/template/~Common~good_templ/actions?ver=13.0.0", - "isSubcollection": true - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_application_template_w_old_checksum.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_application_template_w_old_checksum.json deleted file mode 100644 index da477515b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_application_template_w_old_checksum.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "kind": "tm:sys:application:template:templatestate", - "name": "good_templ", - "partition": "Common", - "fullPath": "/Common/good_templ", - "generation": 410, - "selfLink": "https://localhost/mgmt/tm/sys/application/template/~Common~good_templ?ver=13.0.0", - "description": "My basic foo bar", - "ignoreVerification": "false", - "requiresBigipVersionMin": "12.0.0", - "requiresModules": [ - "ltm" - ], - "tmplChecksum": "eee01710dbe330d380d1a4fa30eeabdb", - "totalSigningStatus": "checksum", - "verificationStatus": "checksum-verified", - "actionsReference": { - "link": "https://localhost/mgmt/tm/sys/application/template/~Common~good_templ/actions?ver=13.0.0", - "isSubcollection": true - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_crypto_cert_validator_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_crypto_cert_validator_1.json deleted file mode 100644 index 59da203a5..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_crypto_cert_validator_1.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "kind": "tm:sys:crypto:cert-validator:ocsp:ocspstate", - "name": "asd", - "partition": "Common", - "fullPath": "/Common/asd", - "generation": 151, - "selfLink": "https://localhost/mgmt/tm/sys/crypto/cert-validator/ocsp/~Common~asd?ver=13.1.0.8", - "cacheErrorTimeout": 3600, - "cacheTimeout": "indefinite", - "clockSkew": 300, - "concurrentConnectionsLimit": 500, - "dnsResolver": "/Common/foo", - "dnsResolverReference": { - "link": "https://localhost/mgmt/tm/net/dns-resolver/~Common~foo?ver=13.1.0.8" - }, - "routeDomain": "/Common/0", - "routeDomainReference": { - "link": "https://localhost/mgmt/tm/net/route-domain/~Common~0?ver=13.1.0.8" - }, - "signHash": "sha256", - "signerCert": "/Common/default.crt", - "signerCertReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~default.crt?ver=13.1.0.8" - }, - "signerKey": "/Common/default.key", - "signerKeyReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-key/~Common~default.key?ver=13.1.0.8" - }, - "signerKeyPassphrase": "secret", - "statusAge": 0, - "strictRespCertCheck": "enabled", - "timeout": 8 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_crypto_csr.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_crypto_csr.json deleted file mode 100644 index c2c7be1e5..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_crypto_csr.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "kind": "tm:sys:crypto:csr:csrstate", - "name": "ssl_csr_1", - "fullPath": "ssl_csr_1", - "generation": 346, - "selfLink": "https://localhost/mgmt/tm/sys/crypto/csr/ssl_csr_1?ver=14.1.2.2", - "commonName": "ssl_csr_1", - "country": "US", - "apiRawValues": { - "keySize": "2048", - "publicKeyType": "RSA" - } -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_file_data_group_string.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_file_data_group_string.json deleted file mode 100644 index 9d09740ee..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_file_data_group_string.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "kind": "tm:sys:file:data-group:data-groupstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 75, - "selfLink": "https://localhost/mgmt/tm/sys/file/data-group/~Common~foo?ver=13.1.0", - "checksum": "SHA1:18:aba04bb67707bd5fad2a7fffd5509d1c9594d1ba", - "createTime": "2018-01-12T05:13:59Z", - "createdBy": "admin", - "lastUpdateTime": "2018-01-12T05:13:59Z", - "mode": 33188, - "revision": 1, - "separator": ":=", - "size": 18, - "type": "string", - "updatedBy": "admin" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_file_external-monitor_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_file_external-monitor_1.json deleted file mode 100644 index 70dcbc23f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_file_external-monitor_1.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "kind": "tm:sys:file:external-monitor:external-monitorstate", - "name": "arg_example", - "partition": "Common", - "fullPath": "/Common/arg_example", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/sys/file/external-monitor/~Common~arg_example?ver=13.1.0.8", - "checksum": "SHA1:3159:0c78e6641632e47d11802b29cfd119d2233cb80a", - "createTime": "2018-06-16T06:49:11Z", - "createdBy": "root", - "lastUpdateTime": "2018-06-16T06:49:11Z", - "mode": 33261, - "revision": 1, - "size": 3159, - "systemPath": "/config/monitors/arg_example", - "updatedBy": "root" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_file_ssl_cert_with_issuer_cert.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_file_ssl_cert_with_issuer_cert.json deleted file mode 100644 index bb77ca33e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_file_ssl_cert_with_issuer_cert.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "kind": "tm:sys:file:ssl-cert:ssl-certstate", - "name": "ocsp.example.com.crt", - "partition": "Common", - "fullPath": "/Common/ocsp.example.com.crt", - "generation": 548, - "selfLink": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~ocsp.example.com.crt?ver=13.0.0", - "certValidationOptions": [ - "ocsp" - ], - "certificateKeyCurveName": "none", - "certificateKeySize": 4096, - "checksum": "SHA1:2113:b84ae5ed7e236b35206b2ff61289df9547d5afa3", - "createTime": "2017-10-25T20:56:09Z", - "createdBy": "admin", - "expirationDate": 1545199767, - "expirationString": "Dec 19 06:09:27 2018 GMT", - "isBundle": "false", - "issuer": "CN=Alice Ltd Intermediate CA,OU=Alice Ltd Certificate Authority,O=Alice Ltd,ST=England,C=GB", - "issuerCert": "/Common/intermediate.crt", - "issuerCertReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~intermediate.crt?ver=13.0.0" - }, - "keyType": "rsa-public", - "lastUpdateTime": "2017-10-25T20:56:09Z", - "mode": 33188, - "revision": 1, - "serialNumber": "4096", - "size": 2113, - "sourcePath": "file:///var/config/rest/downloads/ocsp.example.com.crt", - "subject": "CN=ocsp.example.com,OU=Alice Ltd Certificate Authority,O=Alice Ltd,ST=England,C=GB", - "updatedBy": "admin", - "version": 3, - "bundleCertificatesReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~ocsp.example.com.crt/bundle-certificates?ver=13.0.0", - "isSubcollection": true - }, - "certValidatorsReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~ocsp.example.com.crt/cert-validators?ver=13.0.0", - "isSubcollection": true - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_global_settings.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_global_settings.json deleted file mode 100644 index 191d8178a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_global_settings.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "kind": "tm:sys:global-settings:global-settingsstate", - "selfLink": "https://localhost/mgmt/tm/sys/global-settings?ver=13.0.0", - "awsApiMaxConcurrency": 1, - "consoleInactivityTimeout": 0, - "customAddr": "none", - "failsafeAction": "go-offline-restart-tm", - "fileBlacklistPathPrefix": "{/shared/3dns/} {/shared/bin/} {/shared/core/} {/shared/datasync/} {/shared/em/} {/shared/GeoIP/} {/shared/images/} {/shared/lib/} {/shared/lib64/} {/shared/log/} {/shared/lost+found/} {/shared/mgmt/} {/shared/nfb/} {/shared/ssh/} {/shared/statsd/} {/shared/tmstat/} {/shared/vadc/} {/config/aaa/} {/config/big3d/} {/config/bigip/} {/config/filestore/} {/config/gtm/} {/config/httpd/} {/config/ntp.conf} {/config/rndc.key} {/config/ssh/} {/config/ssl/}", - "fileBlacklistReadOnlyPathPrefix": "{/etc/shadow}", - "fileLocalPathPrefix": "{/shared/} {/tmp/}", - "fileWhitelistPathPrefix": "{/var/local/scf} {/tmp/} {/shared/} {/config/} {/usr/share/aws/}", - "guiSecurityBanner": "enabled", - "guiSecurityBannerText": "Welcome to the BIG-IP Configuration Utility.\n\nLog in with your username and password using the fields on the left.", - "guiSetup": "disabled", - "hostAddrMode": "management", - "hostname": "bigip1", - "lcdDisplay": "enabled", - "ledLocator": "disabled", - "mgmtDhcp": "enabled", - "netReboot": "disabled", - "passwordPrompt": "Password", - "quietBoot": "enabled", - "usernamePrompt": "Username" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_httpd.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_httpd.json deleted file mode 100644 index 38d761681..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_httpd.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "kind": "tm:sys:httpd:httpdstate", - "selfLink": "https://localhost/mgmt/tm/sys/httpd?ver=12.1.2", - "allow": [ - "All" - ], - "authName": "BIG-IP", - "authPamDashboardTimeout": "off", - "authPamIdleTimeout": 1200, - "authPamValidateIp": "on", - "fastcgiTimeout": 300, - "fipsCipherVersion": 0, - "hostnameLookup": "off", - "logLevel": "warn", - "maxClients": 10, - "redirectHttpToHttps": "disabled", - "requestBodyMaxTimeout": 0, - "requestBodyMinRate": 500, - "requestBodyTimeout": 60, - "requestHeaderMaxTimeout": 40, - "requestHeaderMinRate": 500, - "requestHeaderTimeout": 20, - "sslCertfile": "/etc/httpd/conf/ssl.crt/server.crt", - "sslCertkeyfile": "/etc/httpd/conf/ssl.key/server.key", - "sslCiphersuite": "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES128-SHA256:AES256-SHA256:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:DES-CBC3-SHA", - "sslOcspDefaultResponder": "http://127.0.0.1", - "sslOcspEnable": "off", - "sslOcspOverrideResponder": "off", - "sslOcspResponderTimeout": 300, - "sslOcspResponseMaxAge": -1, - "sslOcspResponseTimeSkew": 300, - "sslPort": 443, - "sslProtocol": "all -SSLv2 -SSLv3", - "sslVerifyClient": "no", - "sslVerifyDepth": 10 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_httpd_non_default.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_httpd_non_default.json deleted file mode 100644 index 05051b9c0..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_httpd_non_default.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "kind": "tm:sys:httpd:httpdstate", - "selfLink": "https://localhost/mgmt/tm/sys/httpd?ver=12.1.2", - "allow": [ - "All" - ], - "authName": "BIG-IP", - "authPamDashboardTimeout": "off", - "authPamIdleTimeout": 1200, - "authPamValidateIp": "on", - "fastcgiTimeout": 300, - "fipsCipherVersion": 0, - "hostnameLookup": "off", - "logLevel": "warn", - "maxClients": 10, - "redirectHttpToHttps": "disabled", - "requestBodyMaxTimeout": 0, - "requestBodyMinRate": 500, - "requestBodyTimeout": 60, - "requestHeaderMaxTimeout": 40, - "requestHeaderMinRate": 500, - "requestHeaderTimeout": 20, - "sslCertfile": "/etc/httpd/conf/ssl.crt/server.crt", - "sslCertkeyfile": "/etc/httpd/conf/ssl.key/server.key", - "sslCiphersuite": "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384", - "sslOcspDefaultResponder": "http://127.0.0.1", - "sslOcspEnable": "off", - "sslOcspOverrideResponder": "off", - "sslOcspResponderTimeout": 300, - "sslOcspResponseMaxAge": -1, - "sslOcspResponseTimeSkew": 300, - "sslPort": 443, - "sslProtocol": "all -SSLv2", - "sslVerifyClient": "no", - "sslVerifyDepth": 10 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_log_config_destination_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_log_config_destination_1.json deleted file mode 100644 index 5288ed250..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_log_config_destination_1.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "kind": "tm:sys:log-config:destination:remote-syslog:remote-syslogstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 1767, - "selfLink": "https://localhost/mgmt/tm/sys/log-config/destination/remote-syslog/~Common~foo?ver=13.1.0.4", - "defaultFacility": "local0", - "defaultSeverity": "info", - "format": "rfc5424", - "remoteHighSpeedLog": "/Common/pool1", - "remoteHighSpeedLogReference": { - "link": "https://localhost/mgmt/tm/sys/log-config/destination/remote-high-speed-log/~Common~pool1?ver=13.1.0.4" - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_log_config_publisher_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_log_config_publisher_1.json deleted file mode 100644 index 54dd88911..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_log_config_publisher_1.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "kind": "tm:sys:log-config:publisher:publisherstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 5400, - "selfLink": "https://localhost/mgmt/tm/sys/log-config/publisher/~Common~foo?ver=13.1.0.4", - "description": "my description", - "destinations": [ - { - "name": "SECURITYLOGSERVERS-LOGGING", - "partition": "Common", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/log-config/destination/remote-high-speed-log/~Common~SECURITYLOGSERVERS-LOGGING?ver=13.1.0.4" - } - }, - { - "name": "local-db", - "partition": "Common", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/log-config/destination/local-database/~Common~local-db?ver=13.1.0.4" - } - }, - { - "name": "local-syslog", - "partition": "Common", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/log-config/destination/local-syslog/~Common~local-syslog?ver=13.1.0.4" - } - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_management_route_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_management_route_1.json deleted file mode 100644 index da3f5fcd1..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_management_route_1.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "kind": "tm:sys:management-route:management-routestate", - "name": "default", - "partition": "Common", - "fullPath": "/Common/default", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/sys/management-route/~Common~default?ver=13.1.0.4", - "description": "configured-by-dhcp", - "gateway": "10.0.2.2", - "mtu": 0, - "network": "default" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_provision_default.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_provision_default.json deleted file mode 100644 index 7be868a3e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_provision_default.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "level": "dedicated", - "memory": "medium", - "module": "urldb" -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_smtp_server.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_smtp_server.json deleted file mode 100644 index 9ed191eab..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_smtp_server.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:sys:smtp-server:smtp-serverstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 54, - "selfLink": "https://localhost/mgmt/tm/sys/smtp-server/~Common~foo?ver=13.0.0", - "authenticationEnabled": true, - "encryptedConnection": "ssl", - "fromAddress": "no-reply@foo.bar", - "localHostName": "mail-host.foo.bar", - "passwordEncrypted": "$M$Ch$this-is-encrypted==", - "smtpServerHostName": "mail.foo.bar", - "smtpServerPort": 465, - "username": "admin" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_1.json deleted file mode 100644 index f45c34651..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_1.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "kind": "tm:sys:snmp:communities:communitiesstate", - "name": "/Common/foo", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/sys/snmp/communities/~Common~foo?ver=13.0.0", - "access": "ro", - "communityName": "foo", - "ipv6": "disabled" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_2.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_2.json deleted file mode 100644 index 32c29325e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_2.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "kind": "tm:sys:snmp:communities:communitiesstate", - "name": "/Common/foo", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/sys/snmp/communities/~Common~foo?ver=13.0.0", - "access": "rw", - "communityName": "foo", - "ipv6": "disabled", - "oidSubset": ".1", - "source": "1.1.1.1" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_3.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_3.json deleted file mode 100644 index d9a9ef121..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_3.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "kind": "tm:sys:snmp:communities:communitiesstate", - "name": "/Common/foo", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/sys/snmp/communities/~Common~foo?ver=13.0.0", - "access": "ro", - "communityName": "foo", - "ipv6": "enabled", - "oidSubset": ".1", - "source": "2001:0db8:85a3:0000:0000:8a2e:0370:7334" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_4.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_4.json deleted file mode 100644 index 38bf487de..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_communities_4.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "kind": "tm:sys:snmp:communities:communitiesstate", - "name": "/Common/foo", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/sys/snmp/communities/~Common~foo?ver=13.0.0", - "access": "ro", - "communityName": "foo", - "ipv6": "enabled" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_1.json deleted file mode 100644 index 4b0aac8f2..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_1.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "kind": "tm:sys:snmp:users:usersstate", - "name": "/Common/foo", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/sys/snmp/users/~Common~foo?ver=13.0.0", - "access": "ro", - "authPasswordEncrypted": "secret", - "authProtocol": "sha", - "oidSubset": ".1", - "privacyPasswordEncrypted": "secret", - "privacyProtocol": "aes", - "securityLevel": "auth-privacy", - "username": "foo" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_2.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_2.json deleted file mode 100644 index f6b63f966..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_2.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "kind": "tm:sys:snmp:users:usersstate", - "name": "/Common/foo", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/sys/snmp/users/~Common~foo?ver=13.0.0", - "access": "rw", - "authPasswordEncrypted": "secret", - "authProtocol": "sha", - "oidSubset": ".1", - "privacyPasswordEncrypted": "secret", - "privacyProtocol": "aes", - "securityLevel": "auth-privacy", - "username": "foo1" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_3.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_3.json deleted file mode 100644 index 5ebe0d50a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_3.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "kind": "tm:sys:snmp:users:usersstate", - "name": "/Common/foo", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/sys/snmp/users/~Common~foo?ver=13.0.0", - "access": "ro", - "oidSubset": ".1", - "securityLevel": "no-auth-no-privacy", - "username": "foo" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_4.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_4.json deleted file mode 100644 index b9b936e47..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_snmp_users_4.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "kind": "tm:sys:snmp:users:usersstate", - "name": "/Common/foo", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/sys/snmp/users/~Common~foo?ver=13.0.0", - "access": "ro", - "authPasswordEncrypted": "secret", - "authProtocol": "md5", - "oidSubset": ".1", - "privacyPasswordEncrypted": "secret", - "privacyProtocol": "des", - "securityLevel": "auth-privacy", - "username": "foo" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_software_image_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_software_image_1.json deleted file mode 100644 index 32a9afe07..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_software_image_1.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "kind": "tm:sys:software:image:imagestate", - "name": "foo.iso", - "fullPath": "foo.iso", - "generation": 113, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/foo.iso?ver=13.1.0.4", - "build": "0.0.3", - "buildDate": "Sat Jun 16 00 03 03 PDT 2018", - "checksum": "8cdbd094195fab4b2b47ff4285577b70", - "fileSize": "1948 MB", - "lastModified": "Thu May 17 16:19:34 2018", - "product": "BIG-IP", - "verified": "yes", - "version": "13.1.0.8" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_software_update.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_software_update.json deleted file mode 100644 index f1617ff2b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_software_update.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "kind": "tm:sys:software:update:updatestate", - "selfLink": "https://localhost/mgmt/tm/sys/software/update?ver=13.0.0", - "autoCheck": "enabled", - "autoPhonehome": "enabled", - "checkStatus": "none", - "errors": 0, - "frequency": "weekly" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_syslog_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_syslog_1.json deleted file mode 100644 index 3e4d25763..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_sys_syslog_1.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "kind": "tm:sys:syslog:syslogstate", - "selfLink": "https://localhost/mgmt/tm/sys/syslog?ver=13.1.0.7", - "authPrivFrom": "notice", - "authPrivTo": "emerg", - "clusteredHostSlot": "enabled", - "clusteredMessageSlot": "disabled", - "consoleLog": "enabled", - "cronFrom": "warning", - "cronTo": "emerg", - "daemonFrom": "notice", - "daemonTo": "emerg", - "isoDate": "disabled", - "kernFrom": "debug", - "kernTo": "emerg", - "local6From": "notice", - "local6To": "emerg", - "mailFrom": "notice", - "mailTo": "emerg", - "messagesFrom": "notice", - "messagesTo": "warning", - "userLogFrom": "notice", - "userLogTo": "emerg" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tenant.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tenant.json deleted file mode 100644 index 01978fce4..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tenant.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "items": [ - { - "name": "tenant-foo", - "roleReference": { - "link": "https://localhost/mgmt/shared/authz/roles/CloudTenantAdministrator_tenant-foo" - }, - "cloudConnectorReferences": [ - { - "link": "https://localhost/mgmt/cm/cloud/connectors/local/212301e6-6d01-4509-bfe3-8e372e792fb0" - }, - { - "link": "https://localhost/mgmt/cm/cloud/connectors/local/ccf0c60f-1fb4-4b83-8719-dc9cd6b6d109" - } - ], - "generation": 103, - "lastUpdateMicros": 1489448651359525, - "kind": "cm:cloud:tenants:tenantworkerstate", - "selfLink": "https://localhost/mgmt/cm/cloud/tenants/tenant-foo" - } - ], - "generation": 103, - "kind": "cm:cloud:tenants:tenantcollectionworkerstate", - "lastUpdateMicros": 1489448651360348, - "selfLink": "https://localhost/mgmt/cm/cloud/tenants" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tg_ha_order.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tg_ha_order.json deleted file mode 100644 index a1ff91c85..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tg_ha_order.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "kind": "tm:cm:traffic-group:traffic-groupstate", - "name": "traffic-group-2", - "partition": "Common", - "fullPath": "/Common/traffic-group-2", - "generation": 227, - "selfLink": "https://localhost/mgmt/tm/cm/traffic-group/~Common~traffic-group-2?ver=12.1.4", - "autoFailbackEnabled": "true", - "autoFailbackTime": 60, - "haLoadFactor": 1, - "isFloating": "true", - "mac": "none", - "unitId": 1, - "haOrder": [ - "/Common/v12-1.ansible.local" - ], - "haOrderReference": [ - { - "link": "https://localhost/mgmt/tm/cm/device/~Common~v12-1.ansible.local?ver=12.1.4" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_auth_partition.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_auth_partition.json deleted file mode 100644 index 386c30f7e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_auth_partition.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "kind": "tm:auth:partition:partitionstate", - "name": "foo", - "fullPath": "foo", - "generation": 212, - "selfLink": "https://localhost/mgmt/tm/auth/partition/foo?ver=13.0.0", - "defaultRouteDomain": 0, - "description": "my description" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_auth_password_policy_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_auth_password_policy_1.json deleted file mode 100644 index 7d5aac7b6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_auth_password_policy_1.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "kind": "tm:auth:password-policy:password-policystate", - "selfLink": "https://localhost/mgmt/tm/auth/password-policy?ver=13.1.0.7", - "expirationWarning": 7, - "maxDuration": 99999, - "maxLoginFailures": 0, - "minDuration": 0, - "minimumLength": 6, - "passwordMemory": 0, - "policyEnforcement": "disabled", - "requiredLowercase": 0, - "requiredNumeric": 0, - "requiredSpecial": 0, - "requiredUppercase": 0 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_auth_tacacs_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_auth_tacacs_1.json deleted file mode 100644 index 43e720064..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_auth_tacacs_1.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "kind": "tm:auth:tacacs:tacacsstate", - "name": "system-auth", - "partition": "Common", - "fullPath": "/Common/system-auth", - "generation": 484, - "selfLink": "https://localhost/mgmt/tm/auth/tacacs/~Common~system-auth?ver=13.1.0.1", - "accounting": "send-to-first-server", - "authentication": "use-first-server", - "accounting": "send-to-first-server", - "debug": "disabled", - "encryption": "enabled", - "protocol": "ftp", - "secret": "secret", - "servers": [ - "11.11.11.11" - ], - "service": "ppp", - "timeout": 10 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cli_alias_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cli_alias_1.json deleted file mode 100644 index bb9b0e901..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cli_alias_1.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "kind": "tm:cli:alias:shared:sharedstate", - "name": "bash", - "partition": "Common", - "fullPath": "/Common/bash", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/cli/alias/shared/~Common~bash?ver=13.1.0.7", - "tmCommand": "run /util bash", - "description": "Run the bash shell" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cli_script_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cli_script_1.json deleted file mode 100644 index dd1beb55e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cli_script_1.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "kind": "tm:cli:script:scriptstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 62, - "selfLink": "https://localhost/mgmt/tm/cli/script/~Common~foo?ver=12.1.3", - "apiAnonymous": "proc script::run {} {}\n", - "ignoreVerification": "false", - "scriptChecksum": "2a7a57176f8d6ef585ea3cd0db787718", - "totalSigningStatus": "checksum", - "verificationStatus": "checksum-verified" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_device.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_device.json deleted file mode 100644 index c99890d31..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_device.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "kind": "tm:cm:device:devicestate", - "name": "bigip1", - "partition": "Common", - "fullPath": "/Common/bigip1", - "generation": 65, - "selfLink": "https://localhost/mgmt/tm/cm/device/~Common~bigip1?ver=12.1.2", - "activeModules": [ - "APM, Max, VE (2500 CCU, 10000 Access Sessions)|P961057-1761515|Anti-Virus Checks|Base Endpoint Security Checks|Firewall Checks|Machine Certificate Checks|Network Access|Protected Workspace|Secure Virtual Keyboard|APM, Web Application|App Tunnel|Remote Desktop", - "LTM, 10 Gbps, VE|T487107-2453693|IPV6 Gateway|Rate Shaping|Ram Cache|External Interface and Network HSM, VE|SSL, Forward Proxy, VE|DENY-VER-GBB|Application Acceleration Manager, Core|PEM, Quota Management, VE|BIG-IP, iAppsLX (Node.js)|Max Compression, VE|BIG-IP VE, Multicast Routing|Recycle, BIG-IP, VE|APM, Limited|LTM to Best Bundle Upgrade, 10Gbps|BIG-IP, iRulesLX (Node.js)|SSL, VE|Anti-Virus Checks|Base Endpoint Security Checks|Firewall Checks|Machine Certificate Checks|Network Access|Protected Workspace|Secure Virtual Keyboard|APM, Web Application|App Tunnel|Remote Desktop|SDN Services, VE|Acceleration Manager, VE|AFM, VE|APM, Base, VE GBB (500 CCU)|ASM, VE|DNS-GTM, Base, 10Gbps|DNS Licensed Objects, Unlimited|GTM Licensed Objects, Unlimited|GTM Rate, 250K|DNS Rate Fallback, 250K|DNS Rate Limit, 250K QPS|GTM Rate Fallback, 250K|CGN, BIG-IP VE, AFM ONLY|PSM, VE|Routing Bundle, VE|DNSSEC", - "PEM, VE|X895364-1851682" - ], - "baseMac": "08:00:27:27:74:82", - "build": "0.0.249", - "cert": "/Common/dtdi.crt", - "certReference": { - "link": "https://localhost/mgmt/tm/cm/cert/~Common~dtdi.crt?ver=12.1.2" - }, - "chassisId": "2d37dfa6-c0e8-4e4a-ae983c67356d", - "chassisType": "individual", - "configsyncIp": "10.2.2.2", - "edition": "Final", - "failoverState": "active", - "haCapacity": 0, - "hostname": "bigip1", - "key": "/Common/dtdi.key", - "keyReference": { - "link": "https://localhost/mgmt/tm/cm/key/~Common~dtdi.key?ver=12.1.2" - }, - "managementIp": "10.0.2.15", - "marketingName": "BIG-IP Virtual Edition", - "mirrorIp": "10.2.2.2", - "mirrorSecondaryIp": "10.2.3.2", - "multicastInterface": "eth0", - "multicastIp": "224.0.0.245", - "multicastPort": 62960, - "optionalModules": [ - "APM, Base, VE (50 CCU / 200 Access Sessions)", - "App Mode (TMSH Only, No Root/Bash)", - "Concurrent Users", - "Concurrent Users and Access Sessions, VE", - "IPI Subscription, 1Yr, VE", - "IPI Subscription, 1Yr, VE-10G", - "IPI Subscription, 3Yr, VE-10G", - "LTM to Better Bundle Upgrade, 10Gbps", - "PEM URL Filtering, 1Yr, HIGH PERF", - "PEM URL Filtering, 3Yr, HIGH PERF", - "Routing Bundle", - "SWG Subscription, 1Yr, VE", - "URL Filtering Subscription, 1Yr, VE" - ], - "platformId": "Z100", - "product": "BIG-IP", - "selfDevice": "true", - "timeLimitedModules": [ - "IPI Subscription, 3Yr, VE|E430735-0717882|20170429|20170511|SUBSCRIPTION", - "SWG Subscription, 3Yr, VE|W797718-6984294|20170429|20170511|SUBSCRIPTION", - "URL Filtering Subscription, 3Yr, VE|G132953-9613041|20170429|20170511|SUBSCRIPTION" - ], - "timeZone": "America/Los_Angeles", - "version": "12.1.2", - "unicastAddress": [ - { - "effectiveIp": "management-ip", - "effectivePort": 1026, - "ip": "management-ip", - "port": 1026 - }, - { - "effectiveIp": "10.2.2.2", - "effectivePort": 1026, - "ip": "10.2.2.2", - "port": 1026 - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_device_default.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_device_default.json deleted file mode 100644 index 13d77f75d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_device_default.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "kind": "tm:cm:device:devicestate", - "name": "bigip1", - "partition": "Common", - "fullPath": "/Common/bigip1", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/cm/device/~Common~bigip1?ver=12.1.2", - "activeModules": [ - "APM, Max, VE (2500 CCU, 10000 Access Sessions)|P961057-1761515|Anti-Virus Checks|Base Endpoint Security Checks|Firewall Checks|Machine Certificate Checks|Network Access|Protected Workspace|Secure Virtual Keyboard|APM, Web Application|App Tunnel|Remote Desktop", - "LTM, 10 Gbps, VE|T487107-2453693|IPV6 Gateway|Rate Shaping|Ram Cache|External Interface and Network HSM, VE|SSL, Forward Proxy, VE|DENY-VER-GBB|Application Acceleration Manager, Core|PEM, Quota Management, VE|BIG-IP, iAppsLX (Node.js)|Max Compression, VE|BIG-IP VE, Multicast Routing|Recycle, BIG-IP, VE|APM, Limited|LTM to Best Bundle Upgrade, 10Gbps|BIG-IP, iRulesLX (Node.js)|SSL, VE|Anti-Virus Checks|Base Endpoint Security Checks|Firewall Checks|Machine Certificate Checks|Network Access|Protected Workspace|Secure Virtual Keyboard|APM, Web Application|App Tunnel|Remote Desktop|SDN Services, VE|Acceleration Manager, VE|AFM, VE|APM, Base, VE GBB (500 CCU)|ASM, VE|DNS-GTM, Base, 10Gbps|DNS Licensed Objects, Unlimited|GTM Licensed Objects, Unlimited|GTM Rate, 250K|DNS Rate Fallback, 250K|DNS Rate Limit, 250K QPS|GTM Rate Fallback, 250K|CGN, BIG-IP VE, AFM ONLY|PSM, VE|Routing Bundle, VE|DNSSEC", - "PEM, VE|X895364-1851682" - ], - "baseMac": "08:00:27:27:74:82", - "build": "0.0.249", - "cert": "/Common/dtdi.crt", - "certReference": { - "link": "https://localhost/mgmt/tm/cm/cert/~Common~dtdi.crt?ver=12.1.2" - }, - "chassisId": "42d93eba-35bb-4f01-4663fb03951a", - "chassisType": "individual", - "configsyncIp": "none", - "edition": "Final", - "failoverState": "active", - "haCapacity": 0, - "hostname": "bigip1", - "key": "/Common/dtdi.key", - "keyReference": { - "link": "https://localhost/mgmt/tm/cm/key/~Common~dtdi.key?ver=12.1.2" - }, - "managementIp": "10.0.2.15", - "marketingName": "BIG-IP Virtual Edition", - "mirrorIp": "any6", - "mirrorSecondaryIp": "any6", - "multicastIp": "any6", - "multicastPort": 0, - "optionalModules": [ - "APM, Base, VE (50 CCU / 200 Access Sessions)", - "App Mode (TMSH Only, No Root/Bash)", - "Concurrent Users", - "Concurrent Users and Access Sessions, VE", - "IPI Subscription, 1Yr, VE", - "IPI Subscription, 1Yr, VE-10G", - "IPI Subscription, 3Yr, VE-10G", - "LTM to Better Bundle Upgrade, 10Gbps", - "PEM URL Filtering, 1Yr, HIGH PERF", - "PEM URL Filtering, 3Yr, HIGH PERF", - "Routing Bundle", - "SWG Subscription, 1Yr, VE", - "URL Filtering Subscription, 1Yr, VE" - ], - "platformId": "Z100", - "product": "BIG-IP", - "selfDevice": "true", - "timeLimitedModules": [ - "IPI Subscription, 3Yr, VE|E430735-0717882|20170502|20170511|SUBSCRIPTION", - "SWG Subscription, 3Yr, VE|W797718-6984294|20170502|20170511|SUBSCRIPTION", - "URL Filtering Subscription, 3Yr, VE|G132953-9613041|20170502|20170511|SUBSCRIPTION" - ], - "timeZone": "America/Los_Angeles", - "version": "12.1.2" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_device_group.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_device_group.json deleted file mode 100644 index 666023415..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_device_group.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:cm:device-group:device-groupstate", - "name": "device_trust_group", - "partition": "Common", - "fullPath": "/Common/device_trust_group", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/cm/device-group/~Common~device_trust_group?ver=13.0.0", - "asmSync": "disabled", - "autoSync": "enabled", - "fullLoadOnSync": "false", - "incrementalConfigSyncSizeMax": 1024, - "networkFailover": "disabled", - "saveOnAutoSync": "false", - "type": "sync-only", - "devicesReference": { - "link": "https://localhost/mgmt/tm/cm/device-group/~Common~device_trust_group/devices?ver=13.0.0", - "isSubcollection": true - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_traffic_group_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_traffic_group_1.json deleted file mode 100644 index dbbb19072..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_traffic_group_1.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:cm:traffic-group:traffic-groupstate", - "name": "traffic-group-1", - "partition": "Common", - "fullPath": "/Common/traffic-group-1", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/cm/traffic-group/~Common~traffic-group-1?ver=13.0.0", - "autoFailbackEnabled": "false", - "autoFailbackTime": 60, - "failoverMethod": "ha-order", - "haLoadFactor": 1, - "isFloating": "true", - "mac": "none", - "monitor": {}, - "unitId": 1 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_traffic_group_2.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_traffic_group_2.json deleted file mode 100644 index 3b93cdae9..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_cm_traffic_group_2.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:cm:traffic-group:traffic-groupstate", - "name": "asd", - "partition": "Common", - "fullPath": "/Common/asd", - "generation": 176, - "selfLink": "https://localhost/mgmt/tm/cm/traffic-group/~Common~asd?ver=13.0.0", - "autoFailbackEnabled": "false", - "autoFailbackTime": 60, - "failoverMethod": "ha-order", - "haLoadFactor": 1, - "isFloating": "true", - "mac": "00:00:00:00:00:02", - "monitor": {}, - "unitId": 2 -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_net_self.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_net_self.json deleted file mode 100644 index 9bf4f2345..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_net_self.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "kind": "tm:net:self:selfstate", - "name": "net1", - "partition": "Common", - "fullPath": "/Common/net1", - "generation": 7, - "selfLink": "https://localhost/mgmt/tm/net/self/~Common~net1?ver=13.0.0", - "address": "10.10.10.10%1/24", - "addressSource": "from-user", - "floating": "disabled", - "inheritedTrafficGroup": "false", - "trafficGroup": "/Common/traffic-group-local-only", - "trafficGroupReference": { - "link": "https://localhost/mgmt/tm/cm/traffic-group/~Common~traffic-group-local-only?ver=13.0.0" - }, - "unit": 0, - "vlan": "/Common/net1", - "vlanReference": { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~net1?ver=13.0.0" - }, - "allowService": [ - "tcp:80", - "udp:53", - "gre:0" - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_net_trunk_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_net_trunk_1.json deleted file mode 100644 index af312d49f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_net_trunk_1.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "kind": "tm:net:trunk:trunkstate", - "name": "foo", - "fullPath": "foo", - "generation": 79, - "selfLink": "https://localhost/mgmt/tm/net/trunk/foo?ver=13.1.0.4", - "bandwidth": 10000, - "cfgMbrCount": 1, - "distributionHash": "dst-mac", - "id": 0, - "lacp": "disabled", - "lacpMode": "active", - "lacpTimeout": "long", - "linkSelectPolicy": "maximum-bandwidth", - "macAddress": "08:00:27:ea:18:52", - "media": "10000", - "qinqEthertype": "0x8100", - "stp": "enabled", - "type": "normal", - "workingMbrCount": 1, - "interfaces": [ - "1.3" - ], - "interfacesReference": [ - { - "link": "https://localhost/mgmt/tm/net/interface/1.3?ver=13.1.0.4" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_file_ssl_cert_no_password.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_file_ssl_cert_no_password.json deleted file mode 100644 index 2ecbf837a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_file_ssl_cert_no_password.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "kind": "tm:sys:file:ssl-cert:ssl-certstate", - "name": "cert1.crt", - "partition": "Common", - "fullPath": "/Common/cert1.crt", - "generation": 159, - "selfLink": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~cert1.crt?ver=13.0.0", - "certificateKeyCurveName": "none", - "certificateKeySize": 2048, - "checksum": "SHA1:5752:b390c93c0e34c618b7559d9cf510ade6c062c6f3", - "createTime": "2017-06-04T00:57:47Z", - "createdBy": "admin", - "expirationDate": 2098025169, - "expirationString": "Jun 25 16:46:09 2036 GMT", - "isBundle": "false", - "issuer": "CN=ourca.domain.local,OU=Coyote,O=ACME CA,L=New York,ST=New York,C=US", - "keyType": "rsa-public", - "lastUpdateTime": "2017-06-04T00:57:47Z", - "mode": 33188, - "revision": 1, - "serialNumber": "1", - "size": 5752, - "sourcePath": "file:///var/config/rest/downloads/cert1.crt", - "subject": "CN=cert1.domain.local,OU=Coyote,O=ACME,ST=New York,C=US", - "updatedBy": "admin", - "version": 3, - "bundleCertificatesReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~cert1.crt/bundle-certificates?ver=13.0.0", - "isSubcollection": true - }, - "certValidatorsReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~cert1.crt/cert-validators?ver=13.0.0", - "isSubcollection": true - } -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_file_ssl_key_no_password.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_file_ssl_key_no_password.json deleted file mode 100644 index 82bb954d1..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_file_ssl_key_no_password.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "kind": "tm:sys:file:ssl-key:ssl-keystate", - "name": "cert1.key", - "partition": "Common", - "fullPath": "/Common/cert1.key", - "generation": 160, - "selfLink": "https://localhost/mgmt/tm/sys/file/ssl-key/~Common~cert1.key?ver=13.0.0", - "checksum": "SHA1:1678:a1120c27fb1b89f6756a2f8fdc5a3b9fc403540c", - "createTime": "2017-06-04T00:57:47Z", - "createdBy": "admin", - "curveName": "none", - "keySize": 2048, - "keyType": "rsa-private", - "lastUpdateTime": "2017-06-04T00:57:47Z", - "mode": 33184, - "revision": 1, - "securityType": "normal", - "size": 1678, - "sourcePath": "file:///var/config/rest/downloads/cert1.key", - "updatedBy": "admin" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_syslog_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_syslog_1.json deleted file mode 100644 index 47d762820..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_syslog_1.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "kind": "tm:sys:syslog:syslogstate", - "selfLink": "https://localhost/mgmt/tm/sys/syslog?ver=13.0.0", - "authPrivFrom": "notice", - "authPrivTo": "emerg", - "clusteredHostSlot": "enabled", - "clusteredMessageSlot": "disabled", - "consoleLog": "enabled", - "cronFrom": "warning", - "cronTo": "emerg", - "daemonFrom": "notice", - "daemonTo": "emerg", - "isoDate": "disabled", - "kernFrom": "debug", - "kernTo": "emerg", - "local6From": "notice", - "local6To": "emerg", - "mailFrom": "notice", - "mailTo": "emerg", - "messagesFrom": "notice", - "messagesTo": "warning", - "userLogFrom": "notice", - "userLogTo": "emerg", - "remoteServers": [ - { - "name": "/Common/remotesyslog1", - "host": "10.10.10.10", - "localIp": "none", - "remotePort": 514 - }, - { - "name": "/Common/remotesyslog2", - "host": "20.20.20.20", - "localIp": "1.1.1.1", - "remotePort": 8000 - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_syslog_2.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_syslog_2.json deleted file mode 100644 index d1eb8929d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_syslog_2.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "kind": "tm:sys:syslog:syslogstate", - "selfLink": "https://localhost/mgmt/tm/sys/syslog?ver=13.0.0", - "authPrivFrom": "notice", - "authPrivTo": "emerg", - "clusteredHostSlot": "enabled", - "clusteredMessageSlot": "disabled", - "consoleLog": "enabled", - "cronFrom": "warning", - "cronTo": "emerg", - "daemonFrom": "notice", - "daemonTo": "emerg", - "isoDate": "disabled", - "kernFrom": "debug", - "kernTo": "emerg", - "local6From": "notice", - "local6To": "emerg", - "mailFrom": "notice", - "mailTo": "emerg", - "messagesFrom": "notice", - "messagesTo": "warning", - "userLogFrom": "notice", - "userLogTo": "emerg", - "remoteServers": [ - { - "name": "/Common/remotesyslog1", - "host": "10.10.10.10", - "localIp": "none", - "remotePort": 514 - }, - { - "name": "/Common/remotesyslog2", - "host": "10.10.10.10", - "localIp": "1.1.1.1", - "remotePort": 8000 - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_ucs.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_ucs.json deleted file mode 100644 index 7f7c89c5f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tm_sys_ucs.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "kind": "tm:sys:ucs:ucscollectionstate", - "selfLink": "https://localhost/mgmt/tm/sys/ucs?ver=13.0.0", - "items": [ - { - "kind": "tm:sys:ucs:ucsstate", - "generation": 0, - "apiRawValues": { - "base_build": "0.0.1645", - "build": "0.0.1645", - "built": "170131165950", - "changelist": "2100458", - "edition": "Final", - "encrypted": "no", - "file_created_date": "2018-01-05T00:00:29Z", - "file_size": "7848575 (in bytes)", - "filename": "/var/local/ucs/remote.ucs", - "install_date": "Tue Jan 31 16:59:50 PST 2017", - "job_id": "786643", - "product": "BIG-IP", - "sequence": "13.0.0.0.0.1645.0", - "version": "13.0.0" - } - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tmm_log.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tmm_log.json deleted file mode 100644 index 5d634183b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_tmm_log.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "kind": "tm:sys:daemon-log-settings:tmm:tmmstate", - "selfLink": "https://localhost/mgmt/tm/sys/daemon-log-settings/tmm?ver=12.1.3.6", - "arpLogLevel": "warning", - "httpCompressionLogLevel": "error", - "httpLogLevel": "error", - "ipLogLevel": "warning", - "iruleLogLevel": "informational", - "layer4LogLevel": "notice", - "netLogLevel": "warning", - "osLogLevel": "notice", - "pvaLogLevel": "informational", - "sslLogLevel": "warning" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vcmp_guest.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vcmp_guest.json deleted file mode 100644 index 990c774fb..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vcmp_guest.json +++ /dev/null @@ -1,44 +0,0 @@ - { - "kind": "tm:vcmp:guest:gueststate", - "name": "vcmp02_s1m1c4", - "fullPath": "vcmp02_s1m1c4", - "generation": 396, - "selfLink": "https://localhost/mgmt/tm/vcmp/guest/vcmp02_s1m1c4?ver=13.1.0", - "allowedSlots": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8 - ], - "assignedSlots": [ - 2 - ], - "bootPriority": 65535, - "coresPerSlot": 2, - "hostname": "localhost.localdomain", - "initialImage": "BIGIP-tmos-tier2-13.1.0.0.0.931.iso", - "managementGw": "10.144.3.254", - "managementIp": "10.144.3.97/24", - "managementNetwork": "bridged", - "minSlots": 1, - "slots": 1, - "sslMode": "shared", - "state": "deployed", - "virtualDisk": "vcmp02_s1m1c4.img", - "vlans": [ - "/Common/tim", - "/Common/vt" - ], - "vlansReference": [ - { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~tim?ver=13.1.0" - }, - { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~vt?ver=13.1.0" - } - ] - } diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vcmp_guest_virtual_disk_1.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vcmp_guest_virtual_disk_1.json deleted file mode 100644 index e5fd714f3..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vcmp_guest_virtual_disk_1.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "kind": "tm:vcmp:virtual-disk:virtual-diskstate", - "name": "guest1.img/1", - "fullPath": "guest1.img/1", - "generation": 172, - "selfLink": "https://localhost/mgmt/tm/vcmp/virtual-disk/guest1.img~1?ver=13.1.0.1", - "operatingSystem": "unknown" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vcmp_guest_virtual_disk_2.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vcmp_guest_virtual_disk_2.json deleted file mode 100644 index 709cc32ca..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vcmp_guest_virtual_disk_2.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "kind": "tm:vcmp:virtual-disk:virtual-diskstate", - "name": "guest1.img", - "fullPath": "guest1.img", - "generation": 172, - "selfLink": "https://localhost/mgmt/tm/vcmp/virtual-disk/guest1.img?ver=13.1.0.1", - "operatingSystem": "unknown" -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vlan.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vlan.json deleted file mode 100644 index 85d7fbb22..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vlan.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "kind": "tm:net:vlan:vlanstate", - "name": "somevlan", - "partition": "Common", - "fullPath": "/Common/somevlan", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/net/vlan/~Common~somevlan?ver=12.1.0", - "autoLasthop": "default", - "cmpHash": "default", - "dagRoundRobin": "disabled", - "dagTunnel": "outer", - "failsafe": "disabled", - "failsafeAction": "failover-restart-tm", - "failsafeTimeout": 90, - "ifIndex": 480, - "learning": "enable-forward", - "mtu": 1500, - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes", - "samplingRate": 0, - "samplingRateGlobal": "yes" - }, - "sourceChecking": "disabled", - "tag": 4094, - "interfacesReference": { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~somevlan/interfaces?ver=12.1.0", - "isSubcollection": true - } -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vlan_interfaces.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vlan_interfaces.json deleted file mode 100644 index 9fa16f76b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vlan_interfaces.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "kind": "tm:net:vlan:interfaces:interfacescollectionstate", - "selfLink": "https://localhost/mgmt/tm/net/vlan/~Common~vlan1/interfaces?ver=13.0.0", - "items": [ - { - "kind": "tm:net:vlan:interfaces:interfacesstate", - "name": "1.2", - "fullPath": "1.2", - "generation": 105, - "selfLink": "https://localhost/mgmt/tm/net/vlan/~Common~vlan1/interfaces/1.2?ver=13.0.0", - "tagMode": "none", - "tagged": true - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vlan_tagged_ifcs.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vlan_tagged_ifcs.json deleted file mode 100644 index 96b3150f7..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vlan_tagged_ifcs.json +++ /dev/null @@ -1,12 +0,0 @@ -[ - { - "kind": "tm:net:vlan:interfaces:interfacesstate", - "name": "1.2", - "fullPath": "1.2", - "generation": 2, - "selfLink": "https://localhost/mgmt/tm/net/vlan/~Common~internal/interfaces/1.2?ver=12.1.0", - "tagMode": "none", - "tagged": true - } - - ]
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vlan_untag_ifcs.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vlan_untag_ifcs.json deleted file mode 100644 index ebc530e74..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/load_vlan_untag_ifcs.json +++ /dev/null @@ -1,11 +0,0 @@ -[ - { - "kind": "tm:net:vlan:interfaces:interfacesstate", - "name": "1.1", - "fullPath": "1.1", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/net/vlan/~Common~internal/interfaces/1.1?ver=12.1.0", - "tagMode": "none", - "untagged": true - } - ]
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/md5_sum_failed_hf.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/md5_sum_failed_hf.json deleted file mode 100644 index d19f14f26..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/md5_sum_failed_hf.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "kind": "tm:util:bash:runstate", - "command": "run", - "utilCmdArgs": "-c 'cd /shared/images; md5sum -c /shared/images/Hotfix-12.1.2.1.0.271-HF1.iso'", - "commandResult": "Hotfix-12.1.2.1.0.271-HF1.iso: FAILED open or read\nmd5sum: Hotfix-12.1.2.1.0.271-HF1.iso: No such file or directory\nmd5sum: WARNING: 1 of 1 listed file could not be read\n" -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/md5_sum_failed_software.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/md5_sum_failed_software.json deleted file mode 100644 index 34902694f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/md5_sum_failed_software.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "kind": "tm:util:bash:runstate", - "command": "run", - "utilCmdArgs": "-c 'cd /shared/images; md5sum -c /shared/images/BIGIP-12.1.2.0.0.249.iso.md5'", - "commandResult": "BIGIP-12.1.2.0.0.249.iso: FAILED open or read\nmd5sum: BIGIP-12.1.2.0.0.249.iso: No such file or directory\nmd5sum: WARNING: 1 of 1 listed file could not be read\n" -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/md5_sum_ok_hf.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/md5_sum_ok_hf.json deleted file mode 100644 index 16625c66a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/md5_sum_ok_hf.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "kind": "tm:util:bash:runstate", - "command": "run", - "utilCmdArgs": "-c 'cd /shared/images; md5sum -c /shared/images/Hotfix-12.1.2.1.0.271-HF1.iso.md5'", - "commandResult": "Hotfix-12.1.2.1.0.271-HF1.iso: OK\n" -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/md5_sum_ok_software.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/md5_sum_ok_software.json deleted file mode 100644 index 3220a74f6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/md5_sum_ok_software.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "kind": "tm:util:bash:runstate", - "command": "run", - "utilCmdArgs": "-c 'cd /shared/images; md5sum -c /shared/images/BIGIP-12.1.2.0.0.249.iso.md5'", - "commandResult": "BIGIP-12.1.2.0.0.249.iso: OK\n" -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/pool_members_subcollection.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/pool_members_subcollection.json deleted file mode 100644 index 1041f8f62..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/pool_members_subcollection.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "kind": "tm:ltm:pool:members:membersstate", - "name": "1.1.1.1:80", - "partition": "Common", - "fullPath": "/Common/1.1.1.1:80", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/pool/~Common~test_pool/members/~Common~1.1.1.1:80?ver=11.5.4", - "address": "1.1.1.1", - "connectionLimit": 0, - "dynamicRatio": 1, - "inheritProfile": "enabled", - "logging": "disabled", - "monitor": "default", - "priorityGroup": 0, - "rateLimit": "disabled", - "ratio": 1, - "session": "user-disabled", - "state": "up" - } - ] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/update_iapp_service_parameters_f5_http.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/update_iapp_service_parameters_f5_http.json deleted file mode 100644 index cbb389364..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/update_iapp_service_parameters_f5_http.json +++ /dev/null @@ -1,195 +0,0 @@ -{ - "name": "http_example", - "partition": "Common", - "template": "/Common/f5.http", - "lists": [ - { - "name": "irules__irules", - "encrypted": "no", - "value": [ - "/Common/lgyft" - ] - }, - { - "name": "net__client_vlan", - "encrypted": "no", - "value": [ - "/Common/net2" - ] - } - ], - "tables": [ - { - "columnNames": [ - "name" - ], - "name": "pool__hosts", - "rows": [ - { - "row": [ - "demo.example.com" - ] - } - ] - }, - { - "columnNames": [ - "addr", - "connection_limit" - ], - "name": "pool__members", - "rows": [ - { - "row": [ - "20.1.1.1", - "0" - ] - }, - { - "row": [ - "10.1.1.2", - "0" - ] - } - ] - } - ], - "variables": [ - { - "name": "afm__policy", - "value": "/#do_not_use#" - }, - { - "name": "afm__dos_security_profile", - "value": "/#do_not_use#" - }, - { - "name": "afm__protocol_security_profile", - "value": "/#do_not_use#" - }, - { - "name": "asm__use_asm", - "value": "/#do_not_use#" - }, - { - "name": "client__http_compression", - "value": "/#do_not_use#" - }, - { - "name": "client__standard_caching_without_wa", - "value": "/#do_not_use#" - }, - { - "name": "client__tcp_wan_opt", - "value": "/#create_new#" - }, - { - "name": "monitor__monitor", - "value": "/#create_new#" - }, - { - "name": "monitor__frequency", - "value": "30" - }, - { - "name": "monitor__uri", - "value": "/my/path" - }, - { - "name": "monitor__response", - "value": "" - }, - { - "name": "net__client_mode", - "value": "wan" - }, - { - "name": "net__server_mode", - "value": "lan" - }, - { - "name": "net__vlan_mode", - "value": "all" - }, - { - "name": "pool__addr", - "value": "10.10.10.10" - }, - { - "name": "pool__http", - "value": "/#create_new#" - }, - { - "name": "pool__mask", - "value": "" - }, - { - "name": "pool__persist", - "value": "/#cookie#" - }, - { - "name": "pool__lb_method", - "value": "least-connections-member" - }, - { - "name": "pool__pool_to_use", - "value": "/#create_new#" - }, - { - "name": "pool__port_secure", - "value": "443" - }, - { - "name": "pool__redirect_port", - "value": "80" - }, - { - "name": "pool__redirect_to_https", - "value": "yes" - }, - { - "name": "pool__xff", - "value": "yes" - }, - { - "name": "server__oneconnect", - "value": "/#create_new#" - }, - { - "name": "server__tcp_lan_opt", - "value": "/#create_new#" - }, - { - "name": "ssl__cert", - "value": "/Common/default.crt" - }, - { - "name": "ssl__client_ssl_profile", - "value": "/#create_new#" - }, - { - "name": "ssl__key", - "value": "/Common/default.key" - }, - { - "name": "ssl__mode", - "value": "client_ssl" - }, - { - "name": "ssl__use_chain_cert", - "value": "/#do_not_use#" - }, - { - "name": "ssl_encryption_questions__advanced", - "value": "yes" - }, - { - "name": "stats__analytics", - "value": "/#do_not_use#" - }, - { - "name": "stats__request_logging", - "value": "/#do_not_use#" - } - ] -} diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/update_vlan_description.json b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/update_vlan_description.json deleted file mode 100644 index 99bf48334..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/fixtures/update_vlan_description.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "kind": "tm:net:vlan:vlanstate", - "name": "somevlan", - "partition": "Common", - "fullPath": "/Common/somevlan", - "description": "changed_this", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/net/vlan/~Common~somevlan?ver=12.1.0", - "autoLasthop": "default", - "cmpHash": "default", - "dagRoundRobin": "disabled", - "dagTunnel": "outer", - "failsafe": "disabled", - "failsafeAction": "failover-restart-tm", - "failsafeTimeout": 90, - "ifIndex": 480, - "learning": "enable-forward", - "mtu": 1500, - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes", - "samplingRate": 0, - "samplingRateGlobal": "yes" - }, - "sourceChecking": "disabled", - "tag": 4094, - "interfacesReference": { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~somevlan/interfaces?ver=12.1.0", - "isSubcollection": true - } -}
\ No newline at end of file diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_apm_acl.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_apm_acl.py deleted file mode 100644 index 9cc6d3b0a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_apm_acl.py +++ /dev/null @@ -1,242 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_acl import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import ( - Mock, patch -) - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - acl_order=0, - type='static', - path_match_case=True, - description='foobar', - entries=[ - dict(action='allow', - dst_port='80', - dst_addr='192.168.1.1', - src_port='443', - src_addr='10.10.10.0', - src_mask='255.255.255.128', - protocol='tcp', - host_name='foobar.com', - paths='/shopfront', - scheme='https' - ) - ] - ) - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.acl_order == 0 - assert p.type == 'static' - assert p.path_match_case == 'true' - assert p.description == 'foobar' - assert p.entries[0] == dict(action='allow', - dstEndPort=80, - dstStartPort=80, - dstSubnet='192.168.1.1/32', - srcEndPort=443, - srcStartPort=443, - srcSubnet='10.10.10.0/25', - protocol=6, - host='foobar.com', - paths='/shopfront', - scheme='https' - ) - - def test_api_parameters(self): - args = load_fixture('load_apm_acl.json') - - p = ApiParameters(params=args) - assert p.name == 'lastone' - assert p.acl_order == 2 - assert p.type == 'static' - assert p.path_match_case == 'false' - assert p.description == 'foobar' - assert p.entries[0] == dict(action='discard', - dstEndPort=0, - dstStartPort=0, - dstSubnet='0.0.0.0/0', - srcEndPort=0, - srcStartPort=0, - srcSubnet='0.0.0.0/0', - protocol=1, - scheme='any', - log='none' - ) - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_acl.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_acl.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_acl.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_L4_L7_ACL(self, *args): - set_module_args(dict( - name='foo', - acl_order=0, - type='static', - path_match_case=True, - description='my description', - entries=[ - dict(action='allow', - dst_port='80', - dst_addr='192.168.1.1', - src_port='443', - src_addr='10.10.10.0', - src_mask='255.255.255.128', - protocol='tcp', - host_name='foobar.com', - paths='/shopfront', - scheme='https' - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['acl_order'] == 0 - assert results['description'] == 'my description' - assert results['type'] == 'static' - assert results['path_match_case'] == 'yes' - assert results['entries'] == [ - dict(action='allow', - dst_port='80', - dst_addr='192.168.1.1', - src_port='443', - src_addr='10.10.10.0', - src_mask='255.255.255.128', - protocol='tcp', - host_name='foobar.com', - paths='/shopfront', - scheme='https' - )] - - def test_update_L4_L7_ACL(self, *args): - set_module_args(dict( - name='lastone', - acl_order=0, - path_match_case='yes', - entries=[ - dict(action='allow', - dst_port='80', - dst_addr='192.168.1.1', - src_port='443', - src_addr='10.10.10.0', - src_mask='255.255.255.128', - protocol='tcp', - host_name='foobar.com', - paths='/shopfront', - scheme='https' - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_apm_acl.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['acl_order'] == 0 - assert results['path_match_case'] == 'yes' - assert results['entries'] == [ - dict(action='allow', - dst_port='80', - dst_addr='192.168.1.1', - src_port='443', - src_addr='10.10.10.0', - src_mask='255.255.255.128', - protocol='tcp', - host_name='foobar.com', - paths='/shopfront', - scheme='https' - )] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_apm_network_access.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_apm_network_access.py deleted file mode 100644 index f6f126017..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_apm_network_access.py +++ /dev/null @@ -1,209 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_network_access import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import ( - Mock, patch -) - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - ip_version='ipv4', - split_tunnel=True, - description='foobar', - allow_local_subnet=True, - allow_local_dns=True, - snat_pool='foo_pool', - dtls=True, - dtls_port=4443, - ipv4_lease_pool='ipv4lease', - excluded_ipv4_adresses=[dict(subnet='10.10.10.1')], - ipv4_address_space=[dict(subnet='192.168.1.0/24')], - dns_address_space=['foobar.com'], - excluded_dns_addresses=['bar-foo.org'] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.ip_version == 'ipv4' - assert p.split_tunnel == 'true' - assert p.allow_local_subnet == 'true' - assert p.allow_local_dns == 'true' - assert p.snat_pool == '/Common/foo_pool' - assert p.description == 'foobar' - assert p.dtls == 'true' - assert p.dtls_port == 4443 - assert p.ipv4_lease_pool == '/Common/ipv4lease' - assert p.excluded_ipv4_adresses == [dict(subnet='10.10.10.1/32')] - assert p.ipv4_address_space == [dict(subnet='192.168.1.0/24')] - assert p.dns_address_space == ['foobar.com'] - assert p.excluded_dns_addresses == ['bar-foo.org'] - - def test_api_parameters(self): - args = load_fixture('load_apm_network_access.json') - - p = ApiParameters(params=args) - assert p.name == 'test' - assert p.ip_version == 'ipv4-ipv6' - assert p.split_tunnel == 'true' - assert p.allow_local_subnet == 'true' - assert p.allow_local_dns == 'true' - assert p.snat_pool == 'automap' - assert p.dtls == 'false' - assert p.dtls_port == 4433 - assert p.ipv4_lease_pool == '/Common/ipv4lease' - assert p.excluded_ipv4_adresses == [ - dict(subnet='192.168.1.0/24'), - dict(subnet='192.168.2.1/32') - ] - assert p.ipv4_address_space == [ - dict(subnet='10.10.10.1/32'), - dict(subnet='10.11.11.0/24') - ] - assert p.dns_address_space == ['foo.com', 'bar.com'] - assert p.excluded_dns_addresses == ['baz.com', 'bazfoo.com'] - assert p.ipv6_address_space == [dict(subnet="2607:f0d0:1002:51::4/128")] - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_network_access.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_network_access.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_network_access.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_ipv4_net_access(self, *args): - set_module_args(dict( - name='foo', - ip_version='ipv4', - split_tunnel=True, - description='foobar', - allow_local_subnet=True, - allow_local_dns=True, - snat_pool='foo_pool', - dtls=True, - dtls_port=4443, - ipv4_lease_pool='ipv4lease', - excluded_ipv4_adresses=[dict(subnet='10.10.10.1')], - ipv4_address_space=[dict(subnet='192.168.1.0/24')], - dns_address_space=['foobar.com'], - excluded_dns_addresses=['bar-foo.org'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['ip_version'] == 'ipv4' - assert results['split_tunnel'] == 'yes' - assert results['allow_local_subnet'] == 'yes' - assert results['allow_local_dns'] == 'yes' - assert results['snat_pool'] == '/Common/foo_pool' - assert results['description'] == 'foobar' - assert results['dtls'] == 'yes' - assert results['dtls_port'] == 4443 - assert results['ipv4_lease_pool'] == '/Common/ipv4lease' - assert results['excluded_ipv4_adresses'] == [dict(subnet='10.10.10.1')] - assert results['ipv4_address_space'] == [dict(subnet='192.168.1.0/24')] - assert results['dns_address_space'] == ['foobar.com'] - assert results['excluded_dns_addresses'] == ['bar-foo.org'] - - def test_update_ipv4_net_access(self, *args): - set_module_args(dict( - name='test', - excluded_ipv4_adresses=[dict(subnet='10.10.10.1')], - ipv4_address_space=[dict(subnet='192.168.1.0/24')], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_apm_network_access.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['excluded_ipv4_adresses'] == [dict(subnet='10.10.10.1')] - assert results['ipv4_address_space'] == [dict(subnet='192.168.1.0/24')] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_apm_policy_fetch.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_apm_policy_fetch.py deleted file mode 100644 index 4c4465537..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_apm_policy_fetch.py +++ /dev/null @@ -1,110 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - - -from ansible.module_utils.basic import AnsibleModule -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_policy_fetch import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import ( - Mock, patch -) - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - dest='/tmp/', - force='yes', - file='foo_export', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - p = ModuleParameters(params=args) - assert p.file == 'foo_export' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_policy_fetch.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_policy_fetch.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_policy_fetch.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='fake_policy', - file='foo_export', - dest='/tmp/', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.execute = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_apm_policy_import.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_apm_policy_import.py deleted file mode 100644 index 84e244604..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_apm_policy_import.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_policy_import import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import ( - Mock, patch -) - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='fake_policy', - type='access_policy', - source='/var/fake/fake.tar.gz' - ) - - p = ModuleParameters(params=args) - assert p.name == 'fake_policy' - assert p.source == '/var/fake/fake.tar.gz' - assert p.type == 'access_policy' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.policy = os.path.join(fixture_path, 'fake_policy.tar.gz') - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_policy_import.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_policy_import.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_apm_policy_import.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_import_from_file(self, *args): - set_module_args(dict( - name='fake_policy', - source=self.policy, - type='access_policy', - provider=dict( - server='localhost', - password='password', - user='admin' - ), - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.exists = Mock(return_value=False) - mm.import_file_to_device = Mock(return_value=True) - mm.remove_temp_file_from_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_policy' - assert results['source'] == self.policy diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_advanced_settings.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_advanced_settings.py deleted file mode 100644 index c79c34e9f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_advanced_settings.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_advanced_settings import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import ( - Mock, patch -) - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - value='5', - ) - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.value == 5 - - def test_api_parameters(self): - args = dict( - name='foo', - value='bar', - defaultValue='baz', - - ) - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.value == 'bar' - assert p.default_value == 'baz' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_advanced_settings.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_advanced_settings.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_advanced_settings.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_set_asm_setting(self, *args): - set_module_args(dict( - name='long_request_buffer_size', - value='30', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_asm_settings.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_dos_application.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_dos_application.py deleted file mode 100644 index 0fd86cce0..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_dos_application.py +++ /dev/null @@ -1,265 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_dos_application import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import ( - Mock, patch -) - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - profile='dos_foo', - geolocations=dict( - blacklist=['Argentina', 'Montenegro'], - whitelist=['France', 'Belgium'] - ), - heavy_urls=dict( - auto_detect=True, - latency_threshold=3000, - exclude=['/exclude1.html', '/exclude2.html'], - include=[dict(url='include1.html', threshold='auto'), - dict(url='include2.html', threshold='2000')], - ), - mobile_detection=dict( - enabled=True, - allow_android_rooted_device=True, - allow_any_android_package=True, - allow_any_ios_package=True, - allow_jailbroken_devices=True, - allow_emulators=True, - client_side_challenge_mode='cshui', - ios_allowed_package_names=['foo', 'bar'], - android_publishers=['cert1.crt', 'cert2.crt'] - ), - rtbh_duration=180, - rtbh_enable=True, - scrubbing_duration=360, - scrubbing_enable=True, - single_page_application=True, - trigger_irule=False, - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.profile == 'dos_foo' - assert p.geo_whitelist == ['France', 'Belgium'] - assert p.geo_blacklist == ['Argentina', 'Montenegro'] - assert p.auto_detect == 'enabled' - assert p.latency_threshold == 3000 - assert p.hw_url_exclude == ['/exclude1.html', '/exclude2.html'] - assert dict(name='URL/include1.html', threshold='auto', url='/include1.html') in p.hw_url_include - assert dict(name='URL/include2.html', threshold='2000', url='/include2.html') in p.hw_url_include - assert p.allow_android_rooted_device == 'true' - assert p.enable_mobile_detection == 'enabled' - assert p.allow_any_android_package == 'true' - assert p.allow_any_ios_package == 'true' - assert p.allow_jailbroken_devices == 'true' - assert p.allow_emulators == 'true' - assert p.client_side_challenge_mode == 'cshui' - assert p.ios_allowed_package_names == ['foo', 'bar'] - assert p.android_publishers == ['/Common/cert1.crt', '/Common/cert2.crt'] - assert p.rtbh_duration == 180 - assert p.rtbh_enable == 'enabled' - assert p.scrubbing_duration == 360 - assert p.scrubbing_enable == 'enabled' - assert p.single_page_application == 'enabled' - assert p.trigger_irule == 'disabled' - - def test_api_parameters(self): - args = load_fixture('load_asm_dos.json') - - p = ApiParameters(params=args) - assert p.geo_whitelist == ['Aland Islands'] - assert p.geo_blacklist == ['Afghanistan'] - assert p.auto_detect == 'enabled' - assert p.latency_threshold == 1000 - assert p.hw_url_exclude == ['/exclude.html'] - assert dict(name='URL/test.htm', threshold='auto', url='/test.htm') in p.hw_url_include - assert dict(name='URL/testy.htm', threshold='auto', url='/testy.htm') in p.hw_url_include - assert p.allow_android_rooted_device == 'false' - assert p.enable_mobile_detection == 'disabled' - assert p.allow_any_android_package == 'false' - assert p.allow_any_ios_package == 'false' - assert p.allow_jailbroken_devices == 'true' - assert p.allow_emulators == 'true' - assert p.client_side_challenge_mode == 'pass' - assert p.ios_allowed_package_names == ['foobarapp'] - assert p.android_publishers == ['/Common/ca-bundle.crt'] - assert p.rtbh_duration == 300 - assert p.rtbh_enable == 'enabled' - assert p.scrubbing_duration == 60 - assert p.scrubbing_enable == 'enabled' - assert p.single_page_application == 'enabled' - assert p.trigger_irule == 'enabled' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_dos_application.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_dos_application.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_dos_application.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_asm_dos_profile(self, *args): - set_module_args(dict( - profile='dos_foo', - geolocations=dict( - blacklist=['Argentina', 'Montenegro'], - whitelist=['France', 'Belgium'] - ), - heavy_urls=dict( - auto_detect=True, - latency_threshold=3000, - exclude=['/exclude1.html', '/exclude2.html'], - include=[dict(url='include1.html', threshold='auto'), - dict(url='include2.html', threshold='2000')] - ), - mobile_detection=dict( - enabled=True, - allow_android_rooted_device=True, - allow_any_android_package=True, - allow_any_ios_package=True, - allow_jailbroken_devices=True, - allow_emulators=True, - client_side_challenge_mode='cshui', - ios_allowed_package_names=['foo', 'bar'], - android_publishers=['cert1.crt', 'cert2.crt'] - ), - rtbh_duration=180, - rtbh_enable=True, - scrubbing_duration=360, - scrubbing_enable=True, - single_page_application=True, - trigger_irule=False, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.version_less_than_13_1 = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['geolocations'] == dict(blacklist=['Argentina', 'Montenegro'], whitelist=['France', 'Belgium']) - assert results['heavy_urls'] == dict(auto_detect='yes', latency_threshold=3000, - exclude=['/exclude1.html', '/exclude2.html'], - include=[dict(url='/include1.html', threshold='auto'), - dict(url='/include2.html', threshold='2000')] - ) - assert results['mobile_detection'] == dict(enabled='yes', allow_android_rooted_device='yes', - allow_any_android_package='yes', allow_any_ios_package='yes', - allow_jailbroken_devices='yes', allow_emulators='yes', - client_side_challenge_mode='cshui', - ios_allowed_package_names=['foo', 'bar'], - android_publishers=['/Common/cert1.crt', '/Common/cert2.crt'] - ) - assert results['rtbh_duration'] == 180 - assert results['rtbh_enable'] == 'yes' - assert results['scrubbing_duration'] == 360 - assert results['scrubbing_enable'] == 'yes' - assert results['single_page_application'] == 'yes' - assert results['trigger_irule'] == 'no' - - def test_update_asm_dos_profile(self, *args): - set_module_args(dict( - profile='test', - heavy_urls=dict( - latency_threshold=3000, - exclude=['/exclude1.html', '/exclude2.html'], - include=[dict(url='include1.html', threshold='auto'), - dict(url='include2.html', threshold='2000')] - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_asm_dos.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.version_less_than_13_1 = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['heavy_urls'] == dict(latency_threshold=3000, exclude=['/exclude1.html', '/exclude2.html'], - include=[dict(url='/include1.html', threshold='auto'), - dict(url='/include2.html', threshold='2000')] - ) diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_fetch.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_fetch.py deleted file mode 100644 index f4eb5208f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_fetch.py +++ /dev/null @@ -1,113 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_fetch import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import ( - Mock, patch -) - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - inline='yes', - compact='no', - base64='yes', - dest='/tmp/foo.xml', - force='yes', - file='foo.xml' - ) - p = ModuleParameters(params=args) - assert p.inline is True - assert p.compact is False - assert p.base64 is True - assert p.file == 'foo.xml' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_fetch.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_fetch.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_fetch.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='fake_policy', - file='foobar.xml', - dest='/tmp/foobar.xml', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - mm = ModuleManager(module=module) - mm.want.binary = False - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.execute = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_import.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_import.py deleted file mode 100644 index 0af3b9b56..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_import.py +++ /dev/null @@ -1,112 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_import import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import ( - Mock, patch -) - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='fake_policy', - state='present', - source='/var/fake/fake.xml' - ) - - p = ModuleParameters(params=args) - assert p.name == 'fake_policy' - assert p.source == '/var/fake/fake.xml' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.policy = os.path.join(fixture_path, 'fake_policy.xml') - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_import.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_import.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_import.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_import_from_file(self, *args): - set_module_args(dict( - name='fake_policy', - source=self.policy, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.import_file_to_device = Mock(return_value=True) - mm.remove_temp_policy_from_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_policy' - assert results['source'] == self.policy diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_manage.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_manage.py deleted file mode 100644 index 07086d07d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_manage.py +++ /dev/null @@ -1,498 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_manage import ( - V1ModuleParameters, V1Manager, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import ( - Mock, patch -) - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_template(self): - args = dict( - name='fake_policy', - state='present', - template='LotusDomino 6.5 (http)' - ) - - p = V1ModuleParameters(params=args) - assert p.name == 'fake_policy' - assert p.state == 'present' - assert p.template == 'POLICY_TEMPLATE_LOTUSDOMINO_6_5_HTTP' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.policy = os.path.join(fixture_path, 'fake_policy.xml') - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_manage.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_manage.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_manage.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_activate_create_from_template(self, *args): - set_module_args(dict( - name='fake_policy', - template='OWA Exchange 2007 (https)', - state='present', - active='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1ModuleParameters(params=load_fixture('load_asm_policy_inactive.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=False) - v1.import_to_device = Mock(return_value=True) - v1.wait_for_task = Mock(side_effect=[True, True]) - v1.read_current_from_device = Mock(return_value=current) - v1.apply_on_device = Mock(return_value=True) - v1.create_from_template_on_device = Mock(return_value=True) - v1._file_is_missing = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_policy' - assert results['template'] == 'OWA Exchange 2007 (https)' - assert results['active'] == 'yes' - - def test_activate_create_by_name(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - active='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1ModuleParameters(params=load_fixture('load_asm_policy_inactive.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=False) - v1.import_to_device = Mock(return_value=True) - v1.wait_for_task = Mock(side_effect=[True, True]) - v1.create_on_device = Mock(return_value=True) - v1.create_blank = Mock(return_value=True) - v1.read_current_from_device = Mock(return_value=current) - v1.apply_on_device = Mock(return_value=True) - v1._file_is_missing = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_policy' - assert results['active'] == 'yes' - - def test_activate_policy_exists_inactive(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - active='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1ModuleParameters(params=load_fixture('load_asm_policy_inactive.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=True) - v1.update_on_device = Mock(return_value=True) - v1.wait_for_task = Mock(side_effect=[True, True]) - v1.read_current_from_device = Mock(return_value=current) - v1.apply_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['active'] == 'yes' - - def test_activate_policy_exists_active(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - active='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1ModuleParameters(params=load_fixture('load_asm_policy_active.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=True) - v1.read_current_from_device = Mock(return_value=current) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_deactivate_policy_exists_active(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - active='no', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1ModuleParameters(params=load_fixture('load_asm_policy_active.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=True) - v1.read_current_from_device = Mock(return_value=current) - v1.update_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_deactivate_policy_exists_inactive(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - active='no', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1ModuleParameters(params=load_fixture('load_asm_policy_inactive.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=True) - v1.read_current_from_device = Mock(return_value=current) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_create_from_template(self, *args): - set_module_args(dict( - name='fake_policy', - template='LotusDomino 6.5 (http)', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1ModuleParameters(params=load_fixture('load_asm_policy_inactive.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=False) - v1.create_from_template_on_device = Mock(return_value=True) - v1.wait_for_task = Mock(side_effect=[True, True]) - v1.read_current_from_device = Mock(return_value=current) - v1._file_is_missing = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_policy' - assert results['template'] == 'LotusDomino 6.5 (http)' - - def test_create_by_name(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1ModuleParameters(params=load_fixture('load_asm_policy_inactive.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=False) - v1.import_to_device = Mock(return_value=True) - v1.wait_for_task = Mock(side_effect=[True, True]) - v1.create_on_device = Mock(return_value=True) - v1.create_blank = Mock(return_value=True) - v1.read_current_from_device = Mock(return_value=current) - v1.apply_on_device = Mock(return_value=True) - v1._file_is_missing = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_policy' - - def test_delete_policy(self, *args): - set_module_args(dict( - name='fake_policy', - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(side_effect=[True, False]) - v1.remove_from_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_activate_policy_raises(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - active='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1ModuleParameters(params=load_fixture('load_asm_policy_inactive.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - msg = 'Apply policy task failed.' - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=True) - v1.wait_for_task = Mock(return_value=False) - v1.update_on_device = Mock(return_value=True) - v1.read_current_from_device = Mock(return_value=current) - v1.apply_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg - - def test_create_policy_raises(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - msg = 'Failed to create ASM policy: fake_policy' - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=False) - v1.create_on_device = Mock(return_value=False) - v1._file_is_missing = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg - - def test_delete_policy_raises(self, *args): - set_module_args(dict( - name='fake_policy', - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - msg = 'Failed to delete ASM policy: fake_policy' - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(side_effect=[True, True]) - v1.remove_from_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_server_technology.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_server_technology.py deleted file mode 100644 index a4f8521a7..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_server_technology.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_server_technology import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='ASP', - state='present', - policy_name='fake_policy' - ) - - p = ModuleParameters(params=args) - assert p.name == 'ASP' - assert p.state == 'present' - assert p.policy_name == 'fake_policy' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_server_technology.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_server_technology.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_server_technology.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_add_server_technology(self, *args): - set_module_args(dict( - policy_name='fake_policy', - state='present', - name='IIS', - provider=dict( - server='localhost', - password='password', - user='admin' - ), - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'IIS' - assert results['policy_name'] == 'fake_policy' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_signature_set.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_signature_set.py deleted file mode 100644 index 1932e4957..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_asm_policy_signature_set.py +++ /dev/null @@ -1,124 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_signature_set import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='IIS and Windows Signatures', - state='present', - policy_name='fake_policy', - alarm='yes', - block='no', - learn='yes' - ) - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_signature_set.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '13.1.0' - - p = ModuleParameters(params=args) - - assert p.name == 'IIS and Windows Signatures' - assert p.state == 'present' - assert p.policy_name == 'fake_policy' - assert p.alarm is True - assert p.block is False - assert p.learn is True - - self.p1.stop() - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_signature_set.module_provisioned') - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_signature_set.tmos_version') - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m2.return_value = '13.1.0' - self.m1.return_value = True - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_asm_policy_signature_set.send_teem') - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_add_server_technology(self, *args): - set_module_args(dict( - policy_name='fake_policy', - state='present', - name='IIS and Windows Signatures', - alarm='yes', - block='no', - learn='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'IIS and Windows Signatures' - assert results['policy_name'] == 'fake_policy' - assert results['alarm'] == 'yes' - assert results['block'] == 'no' - assert results['learn'] == 'yes' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_cgnat_lsn_pool.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_cgnat_lsn_pool.py deleted file mode 100644 index fb08ec11f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_cgnat_lsn_pool.py +++ /dev/null @@ -1,252 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_cgnat_lsn_pool import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='foobar', - client_conn_limit=300, - harpin_mode='yes', - icmp_echo='no', - inbound_connections='explicit', - mode='pba', - persistence_mode='address-port', - persistence_timeout=180, - route_advertisement='yes', - pba_block_idle_timeout=50, - pba_block_lifetime=1800, - pba_block_size=10, - pba_client_block_limit=1, - pba_zombie_timeout=10, - port_range_low=1080, - port_range_high=1090, - egress_intf_enabled='yes', - egress_interfaces=['tunnel1', 'tunnel2'], - members=['10.10.10.0/25', '10.10.10.128/25'], - backup_members=['12.12.12.0/25', '12.12.12.128/25'], - log_profile='foo_profile', - log_publisher='baz_publisher', - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'foobar' - assert p.client_conn_limit == 300 - assert p.harpin_mode == 'enabled' - assert p.icmp_echo == 'disabled' - assert p.inbound_connections == 'explicit' - assert p.mode == 'pba' - assert p.persistence_mode == 'address-port' - assert p.persistence_timeout == 180 - assert p.route_advertisement == 'enabled' - assert p.pba_block_idle_timeout == 50 - assert p.pba_block_lifetime == 1800 - assert p.pba_block_size == 10 - assert p.pba_client_block_limit == 1 - assert p.pba_zombie_timeout == 10 - assert p.port_range_low == 1080 - assert p.port_range_high == 1090 - assert p.egress_intf_enabled == 'yes' - assert '/Common/tunnel1' in p.egress_interfaces and '/Common/tunnel2' in p.egress_interfaces - assert '12.12.12.0/25' in p.backup_members and '12.12.12.128/25' in p.backup_members - assert '10.10.10.0/25' in p.members and '10.10.10.128/25' in p.members - assert p.log_profile == '/Common/foo_profile' - assert p.log_publisher == '/Common/baz_publisher' - - def test_api_parameters(self): - args = load_fixture('load_cgnat_lsn_pool.json') - - p = ApiParameters(params=args) - assert p.name == 'test_pool' - assert p.client_conn_limit == 0 - assert p.harpin_mode == 'disabled' - assert p.icmp_echo == 'disabled' - assert p.inbound_connections == 'disabled' - assert p.mode == 'deterministic' - assert p.persistence_mode == 'address' - assert p.persistence_timeout == 300 - assert p.route_advertisement == 'disabled' - assert p.pba_block_idle_timeout == 3600 - assert p.pba_block_lifetime == 0 - assert p.pba_block_size == 64 - assert p.pba_client_block_limit == 1 - assert p.pba_zombie_timeout == 0 - assert p.port_range_low == 1025 - assert p.port_range_high == 6954 - assert p.egress_intf_enabled == 'no' - assert '/Common/http-tunnel' in p.egress_interfaces - assert '11.11.11.1/32' in p.backup_members - assert '101.10.10.0/24' in p.members - assert p.log_profile == '/Common/lsn_log_profile' - assert p.log_publisher == '/Common/default-ipsec-log-publisher' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_cgnat_lsn_pool.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_cgnat_lsn_pool.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_LSN_pool(self, *args): - set_module_args(dict( - name='foo', - description='foobar', - client_conn_limit=300, - harpin_mode='yes', - icmp_echo='no', - inbound_connections='explicit', - mode='pba', - persistence_mode='address-port', - persistence_timeout=180, - route_advertisement='yes', - pba_block_idle_timeout=50, - pba_block_lifetime=1800, - pba_block_size=10, - pba_client_block_limit=1, - pba_zombie_timeout=10, - port_range_low=1080, - port_range_high=1090, - egress_intf_enabled='yes', - egress_interfaces=['tunnel1', 'tunnel2'], - members=['10.10.10.0/25', '10.10.10.128/25'], - backup_members=['12.12.12.0/25', '12.12.12.128/25'], - log_profile='foo_profile', - log_publisher='baz_publisher', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'foobar' - assert results['client_conn_limit'] == 300 - assert results['harpin_mode'] == 'yes' - assert results['icmp_echo'] == 'no' - assert results['inbound_connections'] == 'explicit' - assert results['mode'] == 'pba' - assert results['persistence_mode'] == 'address-port' - assert results['persistence_timeout'] == 180 - assert results['route_advertisement'] == 'yes' - assert results['pba_block_idle_timeout'] == 50 - assert results['pba_block_lifetime'] == 1800 - assert results['pba_block_size'] == 10 - assert results['pba_client_block_limit'] == 1 - assert results['pba_zombie_timeout'] == 10 - assert results['port_range_low'] == 1080 - assert results['port_range_high'] == 1090 - assert results['egress_intf_enabled'] == 'yes' - assert '/Common/tunnel1' in results['egress_interfaces'] and '/Common/tunnel2' in results['egress_interfaces'] - assert '12.12.12.0/25' in results['backup_members'] and '12.12.12.128/25' in results['backup_members'] - assert '10.10.10.0/25' in results['members'] and '10.10.10.128/25' in results['members'] - assert results['log_profile'] == '/Common/foo_profile' - assert results['log_publisher'] == '/Common/baz_publisher' - - def test_update_LSN_pool(self, *args): - set_module_args(dict( - name='test_pool', - description='foobar', - mode='napt', - members=['15.15.15.0/25'], - backup_members='', - harpin_mode='yes', - route_advertisement='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - current = ApiParameters(params=load_fixture('load_cgnat_lsn_pool.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'foobar' - assert results['mode'] == 'napt' - assert results['members'] == ['15.15.15.0/25'] - assert results['backup_members'] == [] - assert results['harpin_mode'] == 'yes' - assert results['route_advertisement'] == 'yes' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_cli_alias.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_cli_alias.py deleted file mode 100644 index 443a60965..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_cli_alias.py +++ /dev/null @@ -1,112 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_cli_alias import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - command='run /util bash', - description='another description', - scope='shared', - ) - - p = ModuleParameters(params=args) - assert p.command == 'run /util bash' - assert p.description == 'another description' - assert p.scope == 'shared' - - def test_api_parameters(self): - args = load_fixture('load_tm_cli_alias_1.json') - - p = ApiParameters(params=args) - assert p.command == 'run /util bash' - assert p.description == 'Run the bash shell' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_cli_alias.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_cli_alias.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_default_device_group(self, *args): - set_module_args( - dict( - name="foo-group", - command='run /util bash', - description='another description', - scope='shared', - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_cli_script.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_cli_script.py deleted file mode 100644 index 117d1702c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_cli_script.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_cli_script import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - content="my content", - description="my description" - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.content == 'my content' - assert p.description == 'my description' - - def test_api_parameters(self): - args = load_fixture('load_tm_cli_script_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.content == 'proc script::run {} {}' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_cli_script.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_cli_script.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - content='asdasds', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_command.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_command.py deleted file mode 100644 index 9757f96ba..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_command.py +++ /dev/null @@ -1,283 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_command import ( - Parameters, ModuleManager, V1Manager, V2Manager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - with open(path) as f: - data = f.read() - try: - data = json.loads(data) - except Exception: - pass - return data - - -class TestParameters(unittest.TestCase): - - def test_module_parameters(self): - args = dict( - commands=[ - "tmsh show sys version" - ], - ) - p = Parameters(params=args) - assert len(p.commands) == 1 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_command.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_command.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p2.stop() - self.p3.stop() - - def test_run_single_command(self, *args): - set_module_args(dict( - commands=[ - "tmsh show sys version" - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - m1 = V2Manager(module=module) - m1.execute_on_device = Mock(return_value=['resp1', 'resp2']) - - mm = ModuleManager(module=module) - mm._run_commands = Mock(return_value=[]) - mm.get_manager = Mock(return_value=m1) - - results = mm.exec_module() - - assert results['changed'] is False - assert mm._run_commands.call_count == 0 - - def test_run_single_modification_command(self, *args): - set_module_args(dict( - commands=[ - "tmsh create ltm virtual foo" - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - m1 = V2Manager(module=module) - m1.execute_on_device = Mock(return_value=['resp1', 'resp2']) - - mm = ModuleManager(module=module) - mm._run_commands = Mock(return_value=[]) - mm.get_manager = Mock(return_value=m1) - - results = mm.exec_module() - - assert results['changed'] is True - assert mm._run_commands.call_count == 0 - - def test_cli_command(self, *args): - set_module_args(dict( - commands=[ - "show sys version" - ], - provider=dict( - server='localhost', - password='password', - user='admin', - transport='cli' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - m1 = V1Manager(module=module) - m1.execute_on_device = Mock(return_value=['resp1', 'resp2', 'resp3']) - - mm = ModuleManager(module=module) - mm._run_commands = Mock(return_value=[]) - mm.get_manager = Mock(return_value=m1) - - results = mm.exec_module() - - assert results['changed'] is False - - # call count is two on CLI transport because we must first - # determine if the remote CLI is in tmsh mode or advanced shell - # (bash) mode. - # - # 1 call for the shell check - # 1 call for the command in the "commands" list above - # - # Can we change this in the future by making the terminal plugin - # find this out ahead of time? - assert m1.execute_on_device.call_count == 3 - - def test_command_with_commas(self, *args): - set_module_args(dict( - commands=""" - tmsh create /auth ldap system-auth {bind-dn uid=binduser, - cn=users,dc=domain,dc=com bind-pw $ENCRYPTEDPW check-roles-group - enabled search-base-dn cn=users,dc=domain,dc=com servers add { - ldap.server.com } } - """, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - m1 = V2Manager(module=module) - m1.execute_on_device = Mock(return_value=['resp1', 'resp2']) - - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=m1) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_normalizing_command_show(self, *args): - args = dict( - commands=[ - "show sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'show sys version' - - def test_normalizing_command_delete(self, *args): - args = dict( - commands=[ - "delete sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'delete sys version' - - def test_normalizing_command_modify(self, *args): - args = dict( - commands=[ - "modify sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'modify sys version' - - def test_normalizing_command_list(self, *args): - args = dict( - commands=[ - "list sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'list sys version' - - def test_normalizing_command_tmsh_show(self, *args): - args = dict( - commands=[ - "tmsh show sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'show sys version' - - def test_normalizing_command_tmsh_delete(self, *args): - args = dict( - commands=[ - "tmsh delete sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'delete sys version' - - def test_normalizing_command_tmsh_modify(self, *args): - args = dict( - commands=[ - "tmsh modify sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'modify sys version' - - def test_normalizing_command_tmsh_list(self, *args): - args = dict( - commands=[ - "tmsh list sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'list sys version' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_config.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_config.py deleted file mode 100644 index ea30ce779..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_config.py +++ /dev/null @@ -1,107 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_config import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - save='yes', - reset='yes', - merge_content='asdasd', - verify='no', - ) - p = Parameters(params=args) - assert p.save == 'yes' - assert p.reset == 'yes' - assert p.merge_content == 'asdasd' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_config.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_config.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_run_single_command(self, *args): - set_module_args(dict( - save='yes', - reset='yes', - merge_content='asdasd', - verify='no', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exit_json = Mock(return_value=True) - mm.reset_device = Mock(return_value='reset output') - mm.upload_to_device = Mock(return_value=True) - mm.move_on_device = Mock(return_value=True) - mm.merge_on_device = Mock(return_value='merge output') - mm.remove_temporary_file = Mock(return_value=True) - mm.save_on_device = Mock(return_value='save output') - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_configsync_action.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_configsync_action.py deleted file mode 100644 index 6f1df847c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_configsync_action.py +++ /dev/null @@ -1,126 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_configsync_action import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - sync_device_to_group=True, - sync_group_to_device=True, - overwrite_config=True, - device_group="foo" - ) - p = Parameters(params=args) - assert p.sync_device_to_group is True - assert p.sync_group_to_device is True - assert p.overwrite_config is True - assert p.device_group == 'foo' - - def test_module_parameters_yes_no(self): - args = dict( - sync_device_to_group='yes', - sync_group_to_device='no', - overwrite_config='yes', - device_group="foo" - ) - p = Parameters(params=args) - assert p.sync_device_to_group == 'yes' - assert p.sync_group_to_device == 'no' - assert p.overwrite_config == 'yes' - assert p.device_group == 'foo' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_configsync_action.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_configsync_action.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p2.stop() - self.p3.stop() - - def test_update_agent_status_traps(self, *args): - set_module_args(dict( - sync_device_to_group='yes', - device_group="foo", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm._device_group_exists = Mock(return_value=True) - mm._sync_to_group_required = Mock(return_value=False) - mm.execute_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=None) - - mm._get_status_from_resource = Mock() - mm._get_status_from_resource.side_effect = [ - 'Changes Pending', 'Awaiting Initial Sync', 'In Sync' - ] - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_data_group.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_data_group.py deleted file mode 100644 index 146b1e950..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_data_group.py +++ /dev/null @@ -1,607 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_data_group import ( - ModuleParameters, ModuleManager, ExternalManager, InternalManager, - ArgumentSpec, RecordsEncoder, RecordsDecoder -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestAuxClasses(unittest.TestCase): - def setUp(self): - self.ip_encode = RecordsEncoder(record_type='ip', separator=':=') - self.int_encode = RecordsEncoder(record_type='int', separator=':=') - self.str_encode = RecordsEncoder(record_type='str', separator=':=') - self.ip_decode = RecordsDecoder(record_type='ip', separator=':=') - self.int_decode = RecordsDecoder(record_type='int', separator=':=') - self.str_decode = RecordsDecoder(record_type='str', separator=':=') - - def test_encode_ipv6_ipv4_cidr_dict(self, *args): - dg1 = dict(key='10.0.0.0/8', value='Network1') - dg2 = dict(key='2402:6940::/32', value='Network2') - dg3 = dict(key='192.168.1.1/32', value='Host1') - dg4 = dict(key='2402:9400:1000::/128', value='Host2') - - net1 = self.ip_encode.encode(dg1) - net2 = self.ip_encode.encode(dg2) - host1 = self.ip_encode.encode(dg3) - host2 = self.ip_encode.encode(dg4) - - assert net1 == 'network 10.0.0.0 prefixlen 8 := Network1' - assert net2 == 'network 2402:6940:: prefixlen 32 := Network2' - assert host1 == 'host 192.168.1.1 := Host1' - assert host2 == 'host 2402:9400:1000:: := Host2' - - def test_encode_ipv6_ipv4_cidr_rd_dict(self, *args): - dg1 = dict(key='10.0.0.0%11/8', value='Network1') - dg2 = dict(key='2402:6940::%11/32', value='Network2') - dg3 = dict(key='192.168.1.1%11/32', value='Host1') - dg4 = dict(key='2402:9400:1000::%11/128', value='Host2') - - net1 = self.ip_encode.encode(dg1) - net2 = self.ip_encode.encode(dg2) - host1 = self.ip_encode.encode(dg3) - host2 = self.ip_encode.encode(dg4) - - assert net1 == 'network 10.0.0.0%11 prefixlen 8 := Network1' - assert net2 == 'network 2402:6940::%11 prefixlen 32 := Network2' - assert host1 == 'host 192.168.1.1%11 := Host1' - assert host2 == 'host 2402:9400:1000::%11 := Host2' - - def test_encode_ipv6_ipv4_cidr_str(self, *args): - dg1 = '10.0.0.0/8' - dg2 = '2402:6940::/32 := Network2' - dg3 = '192.168.1.1/32 := Host1' - dg4 = '2402:9400:1000::/128' - - net1 = self.ip_encode.encode(dg1) - net2 = self.ip_encode.encode(dg2) - host1 = self.ip_encode.encode(dg3) - host2 = self.ip_encode.encode(dg4) - - assert net1 == 'network 10.0.0.0 prefixlen 8 := 10.0.0.0' - assert net2 == 'network 2402:6940:: prefixlen 32 := Network2' - assert host1 == 'host 192.168.1.1 := Host1' - assert host2 == 'host 2402:9400:1000:: := 2402:9400:1000::' - - def test_encode_ipv6_ipv4_cidr_rd_str(self, *args): - dg1 = '10.0.0.0%12/8' - dg2 = 'network 2402:6940::%12 prefixlen 32 := Network2' - dg3 = 'host 192.168.1.1%12 := Host1' - dg4 = '2402:9400:1000::%12/128' - - net1 = self.ip_encode.encode(dg1) - net2 = self.ip_encode.encode(dg2) - host1 = self.ip_encode.encode(dg3) - host2 = self.ip_encode.encode(dg4) - - assert net1 == 'network 10.0.0.0%12 prefixlen 8 := 10.0.0.0%12' - assert net2 == 'network 2402:6940::%12 prefixlen 32 := Network2' - assert host1 == 'host 192.168.1.1%12 := Host1' - assert host2 == 'host 2402:9400:1000::%12 := 2402:9400:1000::%12' - - def test_encode_host_net_ptrn_str(self, *args): - dg1 = 'network 10.0.0.0 prefixlen 8 := Network1' - dg2 = 'network 2402:6940:: prefixlen 32 := Network2' - dg3 = 'host 192.168.1.1 := Host1' - dg4 = 'host 2402:9400:1000:: := Host2' - - net1 = self.ip_encode.encode(dg1) - net2 = self.ip_encode.encode(dg2) - host1 = self.ip_encode.encode(dg3) - host2 = self.ip_encode.encode(dg4) - - assert net1 == 'network 10.0.0.0 prefixlen 8 := Network1' - assert net2 == 'network 2402:6940:: prefixlen 32 := Network2' - assert host1 == 'host 192.168.1.1 := Host1' - assert host2 == 'host 2402:9400:1000:: := Host2' - - def test_encode_int_and_str(self, *args): - dg1 = dict(key=1, value='one') - dg2 = '10' - dg3 = dict(key='one', value='is_not_the_answer') - dg4 = 'fifty' - - int1 = self.int_encode.encode(dg1) - int2 = self.int_encode.encode(dg2) - str1 = self.str_encode.encode(dg3) - str2 = self.str_encode.encode(dg4) - - assert int1 == '1 := one' - assert int2 == '10 := ""' - assert str1 == 'one := is_not_the_answer' - assert str2 == 'fifty := ""' - - def test_decode_ipv6_ipv4_cidr_rd(self, *args): - dg1 = 'network 192.168.0.0%11 prefixlen 16 := "Network3"' - dg2 = 'network 2402:9400:1000:0::%11 prefixlen 64 := "Network4"' - dg3 = 'host 172.16.1.1%11 := "Host3"' - dg4 = 'host 2001:0db8:85a3:0000:0000:8a2e:0370:7334%11 := "Host4"' - - net1 = self.ip_decode.decode(dg1) - net2 = self.ip_decode.decode(dg2) - host1 = self.ip_decode.decode(dg3) - host2 = self.ip_decode.decode(dg4) - - assert net1 == dict(name='192.168.0.0%11/16', data='Network3') - assert net2 == dict(name='2402:9400:1000:0::%11/64', data='Network4') - assert host1 == dict(name='172.16.1.1%11/32', data='Host3') - assert host2 == dict(name='2001:0db8:85a3:0000:0000:8a2e:0370:7334%11/128', data='Host4') - - def test_decode_int_str(self, *args): - dg1 = '10' - dg2 = 'one := "is_not_the_answer"' - - int1 = self.int_decode.decode(dg1) - str1 = self.str_decode.decode(dg2) - - assert int1 == dict(name='10', data="") - assert str1 == dict(name='one', data='is_not_the_answer') - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - type='address', - delete_data_group_file=False, - internal=False, - records=[ - dict( - key='10.10.10.10/32', - value='bar' - ) - ], - separator=':=', - state='present', - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.type == 'ip' - assert p.delete_data_group_file is False - assert len(p.records) == 1 - assert 'data' in p.records[0] - assert 'name' in p.records[0] - assert p.records[0]['data'] == 'bar' - assert p.records[0]['name'] == '10.10.10.10/32' - assert p.separator == ':=' - assert p.state == 'present' - assert p.partition == 'Common' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_data_group.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_data_group.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_external_datagroup_type_string(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=False, - records_src="{0}/data-group-string.txt".format(fixture_path), - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = ExternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - results = mm0.exec_module() - - assert results['changed'] is True - - def test_create_external_incorrect_address_data(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=False, - type='address', - records_src="{0}/data-group-string.txt".format(fixture_path), - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = ExternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - with pytest.raises(F5ModuleError) as ex: - mm0.exec_module() - - assert "When specifying an 'address' type, the value to the left of the separator must be an IP." == str(ex.value) - - def test_create_external_incorrect_integer_data(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=False, - type='integer', - records_src="{0}/data-group-string.txt".format(fixture_path), - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = ExternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - with pytest.raises(F5ModuleError) as ex: - mm0.exec_module() - - assert "When specifying an 'integer' type, the value to the left of the separator must be a number." == str(ex.value) - - def test_remove_data_group_keep_file(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=False, - state='absent', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = ExternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[True, False]) - mm1.remove_from_device = Mock(return_value=True) - mm1.external_file_exists = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - results = mm0.exec_module() - - assert results['changed'] is True - - def test_remove_data_group_remove_file(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=True, - internal=False, - state='absent', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = ExternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[True, False]) - mm1.remove_from_device = Mock(return_value=True) - mm1.external_file_exists = Mock(return_value=True) - mm1.remove_data_group_file_from_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - results = mm0.exec_module() - - assert results['changed'] is True - - def test_create_internal_datagroup_type_string(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=True, - records_src="{0}/data-group-string.txt".format(fixture_path), - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = InternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - results = mm0.exec_module() - - assert results['changed'] is True - - def test_create_internal_incorrect_integer_data(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=True, - type='integer', - records_src="{0}/data-group-string.txt".format(fixture_path), - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = InternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - with pytest.raises(F5ModuleError) as ex: - mm0.exec_module() - - assert "When specifying an 'integer' type, the value to the left of the separator must be a number." == str(ex.value) - - def test_create_internal_datagroup_type_integer(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=True, - type='integer', - records_src="{0}/data-group-integer.txt".format(fixture_path), - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = InternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - results = mm0.exec_module() - - assert results['changed'] is True - - def test_create_internal_datagroup_type_address(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=True, - type='address', - records_src="{0}/data-group-address.txt".format(fixture_path), - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = InternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - results = mm0.exec_module() - - assert results['changed'] is True - - def test_create_internal_datagroup_type_address_list(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=True, - type='address', - records=[ - dict( - key='10.0.0.0/8', - value='Network1' - ), - dict( - key='172.16.0.0/12', - value='Network2' - ), - dict( - key='192.168.20.1/16', - value='Network3' - ), - dict( - key='192.168.20.1', - value='Host1' - ), - dict( - key='172.16.1.1', - value='Host2' - ) - ], - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = InternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - results = mm0.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_auth.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_auth.py deleted file mode 100644 index 598780b32..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_auth.py +++ /dev/null @@ -1,127 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_auth import ( - TacacsApiParameters, TacacsModuleParameters, TacacsManager, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - type="tacacs", - authentication="use-all-servers", - accounting="send-to-all-servers", - protocol_name="ip", - secret="$XXXXXXXXXXXXXXXXXXXX==", - servers=['10.10.10.10', '10.10.10.11'], - service_name="ppp", - use_for_auth=True, - update_secret="on_create", - ) - p = TacacsModuleParameters(params=args) - assert p.type == 'tacacs' - assert p.authentication == 'use-all-servers' - assert p.accounting == 'send-to-all-servers' - - def test_api_parameters(self): - args = load_fixture('load_tm_auth_tacacs_1.json') - p = TacacsApiParameters(params=args) - assert p.authentication == 'use-first-server' - assert p.accounting == 'send-to-first-server' - assert p.protocol_name == 'ftp' - assert p.secret == 'secret' - assert p.servers == ['11.11.11.11'] - assert p.service_name == 'ppp' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_auth.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_auth.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - type="tacacs", - authentication="use-all-servers", - accounting="send-to-all-servers", - protocol_name="ip", - secret="secret", - servers=['10.10.10.10', '10.10.10.11'], - service_name="ppp", - use_for_auth=True, - update_secret="on_create", - state='present', - provider=dict( - password='admin', - server='localhost', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - m1 = TacacsManager(module=module) - m1.exists = Mock(return_value=False) - m1.create_on_device = Mock(return_value=True) - m1.update_auth_source_on_device = Mock(return_value=True) - - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=m1) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_auth_ldap.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_auth_ldap.py deleted file mode 100644 index 000ec88c2..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_auth_ldap.py +++ /dev/null @@ -1,129 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_auth_ldap import ( - ApiParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - servers=['10.10.10.10', '10.10.10.11'], - port=389, - remote_directory_tree='foo', - scope='base', - bind_dn='bar', - bind_password='secret', - user_template='alice', - check_member_attr=False, - ssl='no', - ca_cert='default.crt', - client_key='default.key', - client_cert='default1.crt', - validate_certs=True, - login_ldap_attr='bob', - fallback_to_local=True, - referrals=False, - update_password='on_create', - ) - p = ApiParameters(params=args) - assert p.port == 389 - assert p.servers == ['10.10.10.10', '10.10.10.11'] - assert p.remote_directory_tree == 'foo' - assert p.scope == 'base' - assert p.bind_dn == 'bar' - assert p.bind_password == 'secret' - assert p.user_template == 'alice' - assert p.check_member_attr == 'no' - assert p.ssl == 'no' - assert p.ca_cert == '/Common/default.crt' - assert p.client_key == '/Common/default.key' - assert p.client_cert == '/Common/default1.crt' - assert p.validate_certs == 'yes' - assert p.login_ldap_attr == 'bob' - assert p.fallback_to_local == 'yes' - assert p.referrals == 'no' - assert p.update_password == 'on_create' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_auth_ldap.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_auth_ldap.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - servers=['10.10.10.10', '10.10.10.11'], - update_password='on_create', - state='present', - provider=dict( - password='admin', - server='localhost', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.update_auth_source_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_auth_radius.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_auth_radius.py deleted file mode 100644 index 9b01dd488..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_auth_radius.py +++ /dev/null @@ -1,127 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_auth_radius import ( - ApiParameters, ModuleManager, ArgumentSpec, ModuleParameters -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - servers=['foo1', 'foo2'], - retries=5, - service_type='login', - accounting_bug=False, - fallback_to_local=True, - use_for_auth=True, - ) - p = ModuleParameters(params=args) - - assert '/Common/foo1' in p.servers and '/Common/foo2' in p.servers - assert p.retries == 5 - assert p.use_for_auth == 'yes' - assert p.accounting_bug == 'disabled' - assert p.service_type == "login" - assert p.fallback_to_local == 'yes' - - def test_api_parameters(self): - args = load_fixture('load_radius_config.json') - - p = ApiParameters(params=args) - assert p.retries == 3 - assert p.service_type == 'authenticate-only' - assert p.accounting_bug == 'disabled' - assert p.servers == ['/Common/system_auth_name1'] - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_auth_radius.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_auth_radius.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - servers=['foo1', 'foo2'], - retries=5, - service_type='login', - accounting_bug=False, - fallback_to_local=True, - use_for_auth=True, - state='present', - provider=dict( - password='admin', - server='localhost', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.update_auth_source_on_device = Mock(return_value=True) - mm.update_fallback_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - assert '/Common/foo1' in results['servers'] and '/Common/foo2' in results['servers'] - assert results['retries'] == 5 - assert results['accounting_bug'] == 'disabled' - assert results['service_type'] == 'login' - assert results['fallback_to_local'] == 'yes' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_auth_radius_server.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_auth_radius_server.py deleted file mode 100644 index af53cac71..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_auth_radius_server.py +++ /dev/null @@ -1,125 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_auth_radius_server import ( - ApiParameters, ModuleManager, ArgumentSpec, ModuleParameters -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - ip='10.10.10.10', - description='foobar', - port=1812, - timeout=5, - secret='secret1', - ) - - p = ModuleParameters(params=args) - - assert p.name == 'foo' - assert p.ip == '10.10.10.10' - assert p.description == 'foobar' - assert p.port == 1812 - assert p.timeout == 5 - assert p.secret == 'secret1' - - def test_api_parameters(self): - args = load_fixture('load_radius_server.json') - - p = ApiParameters(params=args) - - assert p.ip == '1.1.1.1' - assert p.port == 1812 - assert p.timeout == 3 - assert p.name == 'test' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_auth_radius_server.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_auth_radius_server.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - description='foobar', - port=1812, - timeout=5, - secret='secret1', - state='present', - provider=dict( - password='admin', - server='localhost', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ip'] == '10.10.10.10' - assert results['port'] == 1812 - assert results['timeout'] == 5 - assert results['description'] == 'foobar' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_certificate.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_certificate.py deleted file mode 100644 index b6d0d546d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_certificate.py +++ /dev/null @@ -1,158 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_certificate import ( - ModuleManager, ArgumentSpec, ModuleParameters -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - key_size=2048, - cert_name='foo.crt', - key_name='foo.key', - days_valid=60, - issuer=dict( - country='US', - state='WA', - locality='Seattle', - organization='F5', - division='IT', - common_name='foo.bar.local', - email='admin@foo.bar.local' - ), - new_cert='yes' - ) - p = ModuleParameters(params=args) - assert p.key_size == 2048 - assert p.cert_name == 'foo.crt' - assert p.key_name == 'foo.key' - assert p.days_valid == 60 - assert 'CN=foo.bar.local' in p.issuer - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - def test_update_expired_cert(self, *args): - set_module_args(dict( - days_valid=60, - provider=dict( - server='localhost', - password='password', - user='admin', - transport='cli', - server_port=22 - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - mm = ModuleManager(module=module) - mm.expired = Mock(return_value=True) - mm.update_certificate = Mock(return_value=True) - mm.restart_daemon = Mock(return_value=True) - mm.copy_files_to_trusted = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['days_valid'] == 60 - - def test_create_new_cert(self): - set_module_args(dict( - key_size=2048, - cert_name='foo.crt', - key_name='foo.key', - days_valid=60, - new_cert='yes', - issuer=dict( - country='US', - state='WA', - locality='Seattle', - organization='F5', - division='IT', - common_name='foo.bar.local', - email='admin@foo.bar.local' - ), - provider=dict( - server='localhost', - password='password', - user='admin', - transport='cli', - server_port=22 - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - mm = ModuleManager(module=module) - mm.expired = Mock(return_value=True) - mm.generate_cert_key = Mock(return_value=True) - mm.restart_daemon = Mock(return_value=True) - mm.configure_new_cert = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['days_valid'] == 60 - assert results['cert_name'] == 'foo.crt' - assert results['key_name'] == 'foo.key' - assert results['issuer'] == dict( - country='US', - state='WA', - locality='Seattle', - organization='F5', - division='IT', - common_name='foo.bar.local', - email='admin@foo.bar.local' - ) diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_connectivity.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_connectivity.py deleted file mode 100644 index b8e0d03de..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_connectivity.py +++ /dev/null @@ -1,378 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_connectivity import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - multicast_port='1010', - multicast_address='10.10.10.10', - multicast_interface='eth0', - failover_multicast=True, - unicast_failover=[ - dict( - address='20.20.20.20', - port='1234' - ) - ], - mirror_primary_address='1.2.3.4', - mirror_secondary_address='5.6.7.8', - config_sync_ip='4.3.2.1', - state='present', - ) - p = ModuleParameters(params=args) - assert p.multicast_port == 1010 - assert p.multicast_address == '10.10.10.10' - assert p.multicast_interface == 'eth0' - assert p.failover_multicast is True - assert p.mirror_primary_address == '1.2.3.4' - assert p.mirror_secondary_address == '5.6.7.8' - assert p.config_sync_ip == '4.3.2.1' - assert len(p.unicast_failover) == 1 - assert 'effectiveIp' in p.unicast_failover[0] - assert 'effectivePort' in p.unicast_failover[0] - assert 'port' in p.unicast_failover[0] - assert 'ip' in p.unicast_failover[0] - assert p.unicast_failover[0]['effectiveIp'] == '20.20.20.20' - assert p.unicast_failover[0]['ip'] == '20.20.20.20' - assert p.unicast_failover[0]['port'] == 1234 - assert p.unicast_failover[0]['effectivePort'] == 1234 - - def test_api_parameters(self): - params = load_fixture('load_tm_cm_device.json') - p = ApiParameters(params=params) - assert p.multicast_port == 62960 - assert p.multicast_address == '224.0.0.245' - assert p.multicast_interface == 'eth0' - assert p.mirror_primary_address == '10.2.2.2' - assert p.mirror_secondary_address == '10.2.3.2' - assert p.config_sync_ip == '10.2.2.2' - assert len(p.unicast_failover) == 2 - assert 'effectiveIp' in p.unicast_failover[0] - assert 'effectivePort' in p.unicast_failover[0] - assert 'port' in p.unicast_failover[0] - assert 'ip' in p.unicast_failover[0] - assert p.unicast_failover[0]['effectiveIp'] == 'management-ip' - assert p.unicast_failover[0]['ip'] == 'management-ip' - assert p.unicast_failover[0]['port'] == 1026 - assert p.unicast_failover[0]['effectivePort'] == 1026 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_connectivity.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_connectivity.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_update_settings(self, *args): - set_module_args(dict( - config_sync_ip="10.1.30.1", - mirror_primary_address="10.1.30.1", - unicast_failover=[ - dict( - address="10.1.30.1" - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device_default.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['config_sync_ip'] == '10.1.30.1' - assert results['mirror_primary_address'] == '10.1.30.1' - assert len(results.keys()) == 4 - - def test_set_primary_mirror_address_none(self, *args): - set_module_args(dict( - mirror_primary_address="none", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['mirror_primary_address'] == 'none' - assert len(results.keys()) == 2 - - def test_set_secondary_mirror_address_none(self, *args): - set_module_args(dict( - mirror_secondary_address="none", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['mirror_secondary_address'] == 'none' - assert len(results.keys()) == 2 - - def test_set_multicast_address_none(self, *args): - set_module_args(dict( - multicast_address="none", - multicast_port=62960, - multicast_interface="eth0", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['multicast_address'] == 'none' - assert len(results.keys()) == 2 - - def test_set_multicast_port_negative(self, *args): - set_module_args(dict( - multicast_port=-1, - multicast_address="224.0.0.245", - multicast_interface="eth0", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert 'must be between' in str(ex.value) - - def test_set_multicast_address(self, *args): - set_module_args(dict( - multicast_address="10.1.1.1", - multicast_port=62960, - multicast_interface="eth0", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['multicast_address'] == '10.1.1.1' - assert len(results.keys()) == 2 - - def test_unset_unicast_failover(self, *args): - set_module_args(dict( - unicast_failover=[], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['unicast_failover'] == 'none' - assert len(results.keys()) == 2 - - def test_unset_config_sync_ip(self, *args): - set_module_args(dict( - config_sync_ip="none", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['config_sync_ip'] == 'none' - assert len(results.keys()) == 2 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_dns.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_dns.py deleted file mode 100644 index 47d39dad6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_dns.py +++ /dev/null @@ -1,122 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_dns import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - cache='disable', - ip_version=4, - name_servers=['10.10.10.10', '11.11.11.11'], - search=['14.14.14.14', '15.15.15.15'], - ) - p = Parameters(params=args) - assert p.cache == 'disable' - assert p.name_servers == ['10.10.10.10', '11.11.11.11'] - assert p.search == ['14.14.14.14', '15.15.15.15'] - - # BIG-IP considers "ipv4" to be an empty value - assert p.ip_version == 4 - - def test_ipv6_parameter(self): - args = dict( - ip_version=6 - ) - p = Parameters(params=args) - assert p.ip_version == 6 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_dns.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_dns.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_update_settings(self, *args): - set_module_args(dict( - cache='disable', - ip_version=4, - name_servers=['10.10.10.10', '11.11.11.11'], - search=['14.14.14.14', '15.15.15.15'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters( - dict( - cache='enable' - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_group.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_group.py deleted file mode 100644 index 853125982..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_group.py +++ /dev/null @@ -1,175 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_group import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - save_on_auto_sync=True, - full_sync=False, - description="my description", - type="sync-failover", - auto_sync=True, - asm_sync=True - ) - - p = ModuleParameters(params=args) - assert p.save_on_auto_sync == 'true' - assert p.full_sync == 'false' - assert p.description == "my description" - assert p.type == "sync-failover" - assert p.auto_sync == 'enabled' - assert p.asm_sync == 'enabled' - - def test_api_parameters(self): - args = load_fixture('load_device_group.json') - - p = ApiParameters(params=args) - assert p.auto_sync == 'enabled' - assert p.asm_sync == 'disabled' - assert p.full_sync == 'true' - assert p.max_incremental_sync_size == 1024 - assert p.save_on_auto_sync == 'false' - assert p.type == 'sync-only' - - -class TestModuleManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_group.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_group.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_default_device_group(self, *args): - set_module_args( - dict( - name="foo-group", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - assert results['changed'] is True - - def test_update_device_group(self, *args): - set_module_args( - dict( - full_sync=True, - name="foo-group", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = ApiParameters(params=load_fixture('load_tm_cm_device_group.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - - def test_delete_device_group(self, *args): - set_module_args( - dict( - name="foo-group", - state="absent", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, False]) - mm.remove_from_device = Mock(return_value=True) - mm.remove_members_in_group_from_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_group_member.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_group_member.py deleted file mode 100644 index e8c4a6904..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_group_member.py +++ /dev/null @@ -1,100 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_group_member import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='bigip1', - device_group='dg1' - ) - - p = Parameters(params=args) - assert p.name == 'bigip1' - assert p.device_group == 'dg1' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_group_member.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_group_member.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args( - dict( - name="bigip1", - device_group="dg1", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_ha_group.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_ha_group.py deleted file mode 100644 index e611b5cf9..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_ha_group.py +++ /dev/null @@ -1,203 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_ha_group import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_v13(self): - args = dict( - name='foobar', - description='baz', - active_bonus=20, - enable='yes', - state='present', - pools=[ - dict( - pool_name='fakepool', - attribute='percent-up-members', - weight=30, - minimum_threshold=2, - partition='Common' - ) - ], - trunks=[ - dict( - trunk_name='faketrunk', - attribute='percent-up-members', - weight=30, - minimum_threshold=2 - ) - ] - ) - - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_ha_group.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '13.1.0' - - p = ModuleParameters(params=args) - - assert p.name == 'foobar' - assert p.state == 'present' - assert p.active_bonus == 20 - assert p.enabled is True - assert p.pools == [{'name': '/Common/fakepool', 'attribute': 'percent-up-members', - 'weight': 30, 'minimumThreshold': 2}] - assert p.trunks == [{'name': 'faketrunk', 'attribute': 'percent-up-members', - 'weight': 30, 'minimumThreshold': 2}] - - self.p1.stop() - - def test_module_parameters_v12(self): - args = dict( - name='foobar', - description='baz', - active_bonus=20, - enable='yes', - state='present', - pools=[ - dict( - pool_name='fakepool', - attribute='percent-up-members', - weight=30, - minimum_threshold=2, - partition='Common' - ) - ], - trunks=[ - dict( - trunk_name='faketrunk', - attribute='percent-up-members', - weight=20, - minimum_threshold=1 - ) - ] - ) - - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_ha_group.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '12.1.0' - - p = ModuleParameters(params=args) - - assert p.name == 'foobar' - assert p.state == 'present' - assert p.active_bonus == 20 - assert p.enabled is True - assert p.pools == [{'name': '/Common/fakepool', 'attribute': 'percent-up-members', - 'weight': 30, 'threshold': 2}] - assert p.trunks == [{'name': 'faketrunk', 'attribute': 'percent-up-members', - 'weight': 20, 'threshold': 1}] - - self.p1.stop() - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_ha_group.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '13.1.0' - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_ha_group.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - - def test_create_ha_group(self, *args): - set_module_args(dict( - name='fake_group', - state='present', - description='baz', - active_bonus=20, - enable='yes', - pools=[ - dict( - pool_name='fakepool', - attribute='percent-up-members', - weight=30, - minimum_threshold=2, - partition='Common' - ) - ], - trunks=[ - dict( - trunk_name='faketrunk', - attribute='percent-up-members', - weight=20, - minimum_threshold=1 - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_group' - assert results['description'] == 'baz' - assert results['active_bonus'] == 20 - assert results['enable'] == 'yes' - assert results['pools'] == [{'pool_name': '/Common/fakepool', 'attribute': 'percent-up-members', - 'weight': 30, 'minimum_threshold': 2}] - assert results['trunks'] == [{'trunk_name': 'faketrunk', 'attribute': 'percent-up-members', - 'weight': 20, 'minimum_threshold': 1}] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_httpd.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_httpd.py deleted file mode 100644 index fcff5344a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_httpd.py +++ /dev/null @@ -1,295 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_httpd import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - auth_name='BIG-IP', - auth_pam_idle_timeout=1200, - auth_pam_validate_ip='on' - ) - - p = Parameters(params=args) - assert p.auth_name == 'BIG-IP' - assert p.auth_pam_idle_timeout == 1200 - assert p.auth_pam_validate_ip == 'on' - - def test_api_parameters(self): - args = load_fixture('load_sys_httpd.json') - p = Parameters(params=args) - assert p.auth_name == 'BIG-IP' - assert p.auth_pam_idle_timeout == 1200 - - -class TestModuleManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_httpd.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_httpd.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p2.stop() - self.p3.stop() - - def test_update(self, *args): - set_module_args( - dict( - auth_name='foo', - auth_pam_idle_timeout='1000', - auth_pam_validate_ip='off', - auth_pam_dashboard_timeout='on', - fast_cgi_timeout=200, - hostname_lookup='on', - log_level='error', - max_clients='20', - redirect_http_to_https='yes', - ssl_port=8443, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = Parameters(params=load_fixture('load_sys_httpd.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - - def test_update_issue_00522(self, *args): - set_module_args( - dict( - ssl_cipher_suite='ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = Parameters(params=load_fixture('load_sys_httpd.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ssl_cipher_suite'] == 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384' - - def test_update_issue_00522_as_list(self, *args): - set_module_args( - dict( - ssl_cipher_suite=[ - 'ECDHE-RSA-AES128-GCM-SHA256', - 'ECDHE-RSA-AES256-GCM-SHA384' - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = Parameters(params=load_fixture('load_sys_httpd.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ssl_cipher_suite'] == 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384' - - def test_update_issue_00522_default(self, *args): - set_module_args( - dict( - ssl_cipher_suite='default', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = Parameters(params=load_fixture('load_sys_httpd_non_default.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ssl_cipher_suite'] == 'default' - - def test_update_issue_00587(self, *args): - set_module_args( - dict( - ssl_protocols='all -SSLv2', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = Parameters(params=load_fixture('load_sys_httpd.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ssl_protocols'] == 'all -SSLv2' - - def test_update_issue_00587_as_list(self, *args): - set_module_args( - dict( - ssl_protocols=[ - 'all', - '-SSLv2' - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = Parameters(params=load_fixture('load_sys_httpd.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ssl_protocols'] == 'all -SSLv2' - - def test_update_issue_00587_default(self, *args): - set_module_args( - dict( - ssl_protocols='default', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = Parameters(params=load_fixture('load_sys_httpd_non_default.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ssl_protocols'] == 'default' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_info.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_info.py deleted file mode 100644 index b495c16c3..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_info.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six import iteritems - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_info import ( - Parameters, VirtualAddressesFactManager, ArgumentSpec, ModuleManager -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class FakeVirtualAddress: - def __init__(self, *args, **kwargs): - attrs = kwargs.pop('params', {}) - for key, value in iteritems(attrs): - setattr(self, key, value) - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - gather_subset=['virtual-servers'], - ) - p = Parameters(params=args) - assert p.gather_subset == ['virtual-servers'] - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_info.modules_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = ['ltm', 'gtm', 'asm'] - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_info.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_info.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - self.p4 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_info.packages_installed') - self.m4 = self.p4.start() - self.m4.return_value = [] - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_get_trunk_facts(self, *args): - set_module_args(dict( - gather_subset=['virtual-addresses'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - fixture1 = load_fixture('load_ltm_virtual_address_collection_1.json') - collection = fixture1['items'] - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - tm = VirtualAddressesFactManager(module=module) - tm.read_collection_from_device = Mock(side_effect=[collection, []]) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['queried'] is True - assert 'virtual_addresses' in results - assert len(results['virtual_addresses']) > 0 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_license.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_license.py deleted file mode 100644 index dcf8ab7a0..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_license.py +++ /dev/null @@ -1,220 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_license import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - license_key='xxxx-yyyy-zzzz', - license_server='foo-license.f5.com', - state='latest', - accept_eula=True - ) - - p = ModuleParameters(params=args) - assert p.license_key == 'xxxx-yyyy-zzzz' - assert p.license_server == 'foo-license.f5.com' - assert p.state == 'latest' - assert p.accept_eula is True - - -class TestModuleManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_license.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p2.stop() - - def test_create(self, *args): - set_module_args( - dict( - license_key='xxxx-yyyy-zzzz', - license_server='foo-license.f5.com', - accept_eula=True, - state='latest', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.read_dossier_from_device = Mock(return_value=True) - mm.generate_license_from_remote = Mock(return_value=True) - mm.upload_license_to_device = Mock(return_value=True) - mm.upload_eula_to_device = Mock(return_value=True) - mm.reload_license = Mock(return_value=True) - mm._is_mcpd_ready_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - - def test_renewal(self, *args): - set_module_args( - dict( - license_key='xxxx-yyyy-zzzz', - license_server='foo-license.f5.com', - accept_eula=True, - state='latest', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.is_revoked = Mock(return_value=False) - mm.license_valid = Mock(return_value=False) - mm.read_dossier_from_device = Mock(return_value=True) - mm.generate_license_from_remote = Mock(return_value=True) - mm.upload_license_to_device = Mock(return_value=True) - mm.upload_eula_to_device = Mock(return_value=True) - mm.reload_license = Mock(return_value=True) - mm._is_mcpd_ready_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - - def test_no_renewal(self, *args): - set_module_args( - dict( - license_key='xxxx-yyyy-zzzz', - license_server='foo-license.f5.com', - accept_eula=True, - state='latest', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.is_revoked = Mock(return_value=False) - mm.license_valid = Mock(return_value=True) - mm.read_dossier_from_device = Mock(return_value=True) - mm.generate_license_from_remote = Mock(return_value=True) - mm.upload_license_to_device = Mock(return_value=True) - mm.upload_eula_to_device = Mock(return_value=True) - mm.reload_license = Mock(return_value=True) - mm._is_mcpd_ready_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is False - - def test_force_renewal(self, *args): - set_module_args( - dict( - license_key='xxxx-yyyy-zzzz', - license_server='foo-license.f5.com', - accept_eula=True, - state='latest', - force=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.is_revoked = Mock(return_value=False) - mm.license_valid = Mock(return_value=True) - mm.read_dossier_from_device = Mock(return_value=True) - mm.generate_license_from_remote = Mock(return_value=True) - mm.upload_license_to_device = Mock(return_value=True) - mm.upload_eula_to_device = Mock(return_value=True) - mm.reload_license = Mock(return_value=True) - mm._is_mcpd_ready_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_ntp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_ntp.py deleted file mode 100644 index 17c0d3ce0..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_ntp.py +++ /dev/null @@ -1,249 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_ntp import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - ntp = ['192.168.1.1', '192.168.1.2'] - args = dict( - ntp_servers=ntp, - timezone='Arctic/Longyearbyen' - ) - - p = Parameters(params=args) - assert p.ntp_servers == ntp - assert p.timezone == 'Arctic/Longyearbyen' - - def test_api_parameters(self): - ntp = ['192.168.1.1', '192.168.1.2'] - args = dict( - servers=ntp, - timezone='Arctic/Longyearbyen' - ) - - p = Parameters(params=args) - assert p.ntp_servers == ntp - assert p.timezone == 'Arctic/Longyearbyen' - - -class TestModuleManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_ntp.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_ntp.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_update_ntp_servers(self, *args): - ntp = ['10.1.1.1', '10.1.1.2'] - set_module_args( - dict( - ntp_servers=ntp, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters(params=load_fixture('load_ntp.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ntp_servers'] == ntp - - def test_update_timezone(self, *args): - set_module_args( - dict( - timezone='Arctic/Longyearbyen', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters(params=load_fixture('load_ntp.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['timezone'] == 'Arctic/Longyearbyen' - - def test_update_ntp_servers_and_timezone(self, *args): - ntp = ['10.1.1.1', '10.1.1.2'] - set_module_args( - dict( - ntp_servers=ntp, - timezone='Arctic/Longyearbyen', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters(params=load_fixture('load_ntp.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ntp_servers'] == ntp - assert results['timezone'] == 'Arctic/Longyearbyen' - - def test_absent_ntp_servers(self, *args): - ntp = [] - set_module_args( - dict( - ntp_servers=ntp, - timezone='America/Los_Angeles', - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters(params=load_fixture('load_ntp.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.absent_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ntp_servers'] == ntp - assert not hasattr(results, 'timezone') - - def test_absent_timezone(self, *args): - set_module_args( - dict( - timezone='', - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters(params=load_fixture('load_ntp.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.absent_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is False diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_sshd.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_sshd.py deleted file mode 100644 index 1d0d56d8d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_sshd.py +++ /dev/null @@ -1,121 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_sshd import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - allow=['all'], - banner='enabled', - banner_text='asdf', - inactivity_timeout='100', - log_level='debug', - login='enabled', - port=1010, - ) - p = ModuleParameters(params=args) - assert p.allow == ['all'] - assert p.banner == 'enabled' - assert p.banner_text == 'asdf' - assert p.inactivity_timeout == 100 - assert p.log_level == 'debug' - assert p.login == 'enabled' - assert p.port == 1010 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_sshd.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_sshd.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_update_settings(self, *args): - set_module_args(dict( - allow=['all'], - banner='enabled', - banner_text='asdf', - inactivity_timeout='100', - log_level='debug', - login='enabled', - port=1010, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters( - params=dict( - allow=['172.27.1.1'] - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['allow'] == ['all'] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_syslog.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_syslog.py deleted file mode 100644 index 5f2257fae..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_syslog.py +++ /dev/null @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_syslog import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - kern_from='err', - kern_to='info', - ) - p = ModuleParameters(params=args) - assert p.kern_from == 'err' - assert p.kern_to == 'info' - - def test_api_parameters(self): - p = ApiParameters(params=load_fixture('load_sys_syslog_1.json')) - assert p.kern_from == 'debug' - assert p.kern_to == 'emerg' - - -class TestUntypedManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_syslog.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_syslog.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_update(self, *args): - set_module_args(dict( - kern_from='emerg', - kern_to='debug', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - current = ApiParameters(params=load_fixture('load_sys_syslog_1.json')) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_traffic_group.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_traffic_group.py deleted file mode 100644 index 0dc95726b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_traffic_group.py +++ /dev/null @@ -1,161 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_traffic_group import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_1(self): - args = dict( - name='foo', - mac_address='' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.mac_address == 'none' - - def test_module_parameters_2(self): - args = dict( - mac_address='00:00:00:00:00:02' - ) - - p = ModuleParameters(params=args) - assert p.mac_address == '00:00:00:00:00:02' - - def test_module_parameters_3(self): - args = dict( - name='foo', - ha_order=['bigip1'], - ha_group='', - auto_failback='yes', - auto_failback_time=40 - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.ha_order == ['/Common/bigip1'] - assert p.ha_group == 'none' - assert p.auto_failback == 'true' - assert p.auto_failback_time == 40 - - def test_api_parameters_1(self): - args = load_fixture('load_tm_cm_traffic_group_1.json') - - p = ApiParameters(params=args) - assert p.mac_address == 'none' - - def test_api_parameters_2(self): - args = load_fixture('load_tm_cm_traffic_group_2.json') - - p = ApiParameters(params=args) - assert p.mac_address == '00:00:00:00:00:02' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_traffic_group.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_traffic_group.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_modify_ha_order(self, *args): - set_module_args(dict( - name='traffic-group-2', - ha_order=['v12-2.ansible.local', 'v12-1.ansible.local'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - current = ApiParameters(params=load_fixture('load_tg_ha_order.json')) - - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['ha_order'] == ['/Common/v12-2.ansible.local', '/Common/v12-1.ansible.local'] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_trust.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_trust.py deleted file mode 100644 index 773f865cd..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_device_trust.py +++ /dev/null @@ -1,179 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_trust import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - peer_server='10.10.10.10', - peer_hostname='foo.bar.baz', - peer_user='admin', - peer_password='secret' - ) - - p = Parameters(params=args) - assert p.peer_server == '10.10.10.10' - assert p.peer_hostname == 'foo.bar.baz' - assert p.peer_user == 'admin' - assert p.peer_password == 'secret' - - def test_module_parameters_with_peer_type(self): - args = dict( - peer_server='10.10.10.10', - peer_hostname='foo.bar.baz', - peer_user='admin', - peer_password='secret', - type='peer' - ) - - p = Parameters(params=args) - assert p.peer_server == '10.10.10.10' - assert p.peer_hostname == 'foo.bar.baz' - assert p.peer_user == 'admin' - assert p.peer_password == 'secret' - assert p.type is True - - def test_module_parameters_with_subordinate_type(self): - args = dict( - peer_server='10.10.10.10', - peer_hostname='foo.bar.baz', - peer_user='admin', - peer_password='secret', - type='subordinate' - ) - - p = Parameters(params=args) - assert p.peer_server == '10.10.10.10' - assert p.peer_hostname == 'foo.bar.baz' - assert p.peer_user == 'admin' - assert p.peer_password == 'secret' - assert p.type is False - - def test_hyphenated_peer_hostname(self): - args = dict( - peer_hostname='hn---hyphen____underscore.hmatsuda.local', - ) - - p = Parameters(params=args) - assert p.peer_hostname == 'hn---hyphen____underscore.hmatsuda.local' - - def test_numbered_peer_hostname(self): - args = dict( - peer_hostname='BIG-IP_12x_ans2.example.local', - ) - - p = Parameters(params=args) - assert p.peer_hostname == 'BIG-IP_12x_ans2.example.local' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_trust.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_device_trust.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_device_trust(self, *args): - set_module_args(dict( - peer_server='10.10.10.10', - peer_hostname='foo.bar.baz', - peer_user='admin', - peer_password='secret', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_device_trust_idempotent(self, *args): - set_module_args(dict( - peer_server='10.10.10.10', - peer_hostname='foo.bar.baz', - peer_user='admin', - peer_password='secret', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is False diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_dns_cache_resolver.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_dns_cache_resolver.py deleted file mode 100644 index 0a29a98c7..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_dns_cache_resolver.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_dns_cache_resolver import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - answer_default_zones=True, - route_domain=10, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.route_domain == '/Common/10' - - def test_api_parameters(self): - args = load_fixture('load_ltm_dns_cache_resolver_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.route_domain == '/Common/0' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_dns_cache_resolver.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_dns_cache_resolver.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - route_domain=20, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_dns_nameserver.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_dns_nameserver.py deleted file mode 100644 index fbee53d16..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_dns_nameserver.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_dns_nameserver import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - address='10.10.10.10', - service_port=80, - route_domain=20, - tsig_key='key1', - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.address == '10.10.10.10' - assert p.service_port == 80 - assert p.route_domain == '/Common/20' - assert p.tsig_key == '/Common/key1' - - def test_api_parameters(self): - args = load_fixture('load_ltm_dns_nameserver_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.address == '127.0.0.1' - assert p.service_port == 53 - assert p.route_domain == '/Common/0' - assert p.tsig_key == '/Common/key1' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_dns_nameserver.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_dns_nameserver.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - address='10.10.10.10', - service_port=80, - route_domain=20, - tsig_key='key1', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_dns_resolver.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_dns_resolver.py deleted file mode 100644 index 2c32f1859..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_dns_resolver.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_dns_resolver import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - route_domain=10, - cache_size=1234, - answer_default_zones=True, - randomize_query_case=False, - use_ipv4=True, - use_ipv6=False, - use_udp=True, - use_tcp=False, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.route_domain == '/Common/10' - assert p.cache_size == 1234 - assert p.answer_default_zones == 'yes' - assert p.randomize_query_case == 'no' - assert p.use_ipv4 == 'yes' - assert p.use_ipv6 == 'no' - assert p.use_tcp == 'no' - assert p.use_udp == 'yes' - - def test_api_parameters(self): - args = load_fixture('load_net_dns_resolver_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_dns_resolver.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_dns_resolver.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_dns_zone.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_dns_zone.py deleted file mode 100644 index 8ff9ccdb6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_dns_zone.py +++ /dev/null @@ -1,121 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_dns_zone import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - dns_express=dict( - server='server1', - enabled=True, - notify_action='consume', - allow_notify_from=['1.1.1.1'], - verify_tsig=True, - response_policy=False - ), - nameservers=[ - 'foo', 'bar', 'baz' - ], - tsig_server_key='key1' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert len(p.nameservers) == 3 - assert p.tsig_server_key == '/Common/key1' - assert p.express_server == '/Common/server1' - assert p.enabled == 'yes' - assert p.notify_action == 'consume' - assert len(p.allow_notify_from) == 1 - assert p.verify_tsig == 'yes' - assert p.response_policy == 'no' - - def test_api_parameters(self): - args = load_fixture('load_ltm_dns_zone_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_dns_zone.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_dns_zone.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_file_copy.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_file_copy.py deleted file mode 100644 index f59f654cc..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_file_copy.py +++ /dev/null @@ -1,113 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_file_copy import ( - ApiParameters, IFileManager, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - source='file.txt', - force=True - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.source == 'file.txt' - assert p.force is True - - def test_api_parameters(self): - args = load_fixture('load_sys_file_external-monitor_1.json') - p = ApiParameters(params=args) - assert p.checksum == '0c78e6641632e47d11802b29cfd119d2233cb80a' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_file_copy.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_file_copy.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - source='file.txt', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - tm = IFileManager(module=module) - tm.exists = Mock(return_value=False) - tm.create_on_device = Mock(return_value=True) - tm.upload_to_device = Mock(return_value=True) - tm.remove_uploaded_file_from_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_address_list.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_address_list.py deleted file mode 100644 index 50d3873f4..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_address_list.py +++ /dev/null @@ -1,153 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_address_list import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='this is a description', - addresses=['1.1.1.1', '2.2.2.2'], - address_ranges=['3.3.3.3-4.4.4.4', '5.5.5.5-6.6.6.6'], - address_lists=['/Common/foo', 'foo'] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'this is a description' - assert len(p.addresses) == 2 - assert len(p.address_ranges) == 2 - assert len(p.address_lists) == 2 - - def test_api_parameters(self): - args = load_fixture('load_security_address_list_1.json') - - p = ApiParameters(params=args) - assert len(p.addresses) == 2 - assert len(p.address_ranges) == 2 - assert len(p.address_lists) == 1 - assert len(p.fqdns) == 1 - assert len(p.geo_locations) == 5 - assert sorted(p.addresses) == ['1.1.1.1', '2700:bc00:1f10:101::6'] - assert sorted(p.address_ranges) == ['2.2.2.2-3.3.3.3', '5.5.5.5-6.6.6.6'] - assert p.address_lists[0] == '/Common/foo' - - def test_mixed_rd_non_rd_addresses(self): - args = dict( - addresses=['1.1.1.1', '2.2.2.2%123', '2700:bc00:1f10:101::6', '2700:bc00:1f10:101::6%123'], - ) - p = ModuleParameters(params=args) - assert '2.2.2.2%123' in p.addresses - assert '1.1.1.1' in p.addresses - assert '2700:bc00:1f10:101::6' in p.addresses - assert '2700:bc00:1f10:101::6%123' in p.addresses - - def test_mixed_rd_non_rd_addresses_from_device(self): - args = load_fixture('fw_addr_rd.json') - - p = ApiParameters(params=args) - assert '1.2.3.4' in p.addresses - assert '2700:bc00:1f10:101::6' in p.addresses - assert '2700:bc00:1f10:101::6%123' in p.addresses - assert '1.2.3.4%124' in p.addresses - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_address_list.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_address_list.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='this is a description', - addresses=['1.1.1.1', '2.2.2.2'], - address_ranges=['3.3.3.3-4.4.4.4', '5.5.5.5-6.6.6.6'], - address_lists=['/Common/foo', 'foo'], - geo_locations=[ - dict(country='US', region='Los Angeles'), - dict(country='China'), - dict(country='EU') - ], - fqdns=['google.com', 'mit.edu'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert 'addresses' in results - assert 'address_lists' in results - assert 'address_ranges' in results - assert len(results['addresses']) == 2 - assert len(results['address_ranges']) == 2 - assert len(results['address_lists']) == 2 - assert results['description'] == 'this is a description' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_dos_profile.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_dos_profile.py deleted file mode 100644 index ffed32510..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_dos_profile.py +++ /dev/null @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_dos_profile import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - threshold_sensitivity='low', - default_whitelist='whitelist1' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.threshold_sensitivity == 'low' - assert p.default_whitelist == '/Common/whitelist1' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_dos_profile.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_dos_profile.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='this is a description', - threshold_sensitivity='low', - default_whitelist='whitelist1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'this is a description' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_dos_vector.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_dos_vector.py deleted file mode 100644 index c3201559f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_dos_vector.py +++ /dev/null @@ -1,103 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_dos_vector import ( - ModuleParameters, ModuleManager, ArgumentSpec, ProtocolDnsManager -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - state='mitigate' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.state == 'mitigate' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_dos_vector.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_dos_vector.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_dns(self, *args): - set_module_args(dict( - name='aaaa', - state='mitigate', - profile='foo', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - m1 = ProtocolDnsManager(module=module) - m1.read_current_from_device = Mock(return_value=[]) - m1.update_on_device = Mock(return_value=True) - - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=m1) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_global_rules.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_global_rules.py deleted file mode 100644 index 8f1eca6be..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_global_rules.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_global_rules import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - enforced_policy='enforced1', - staged_policy='staged1', - service_policy='service1', - ) - p = ModuleParameters(params=args) - assert p.enforced_policy == '/Common/enforced1' - assert p.staged_policy == '/Common/staged1' - assert p.service_policy == '/Common/service1' - - def test_api_parameters(self): - p = ApiParameters(params=load_fixture('load_security_firewall_global_rules_1.json')) - assert p.enforced_policy == '/Common/foo' - assert p.service_policy == '/Common/bar' - assert p.staged_policy == '/Common/baz' - - -class TestUntypedManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_global_rules.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_global_rules.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_update(self, *args): - set_module_args(dict( - enforced_policy='enforced1', - staged_policy='staged1', - service_policy='service1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - current = ApiParameters(params=load_fixture('load_security_firewall_global_rules_1.json')) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_log_profile.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_log_profile.py deleted file mode 100644 index c172145b8..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_log_profile.py +++ /dev/null @@ -1,139 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_log_profile import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - partition='Common', - ip_intelligence=dict( - log_publisher='foobar', - rate_limit='300000', - log_translation_fields='yes', - log_rtbh='yes', - log_shun='yes', - ), - port_misuse=dict( - log_publisher='/Part/bazbar', - rate_limit='indefinite', - ), - dos_protection=dict( - sip_publisher='sip-pub', - dns_publisher='/Temp/dns-pub', - network_publisher='net-pub' - ) - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.ip_rate_limit == 300000 - assert p.ip_log_publisher == '/Common/foobar' - assert p.ip_log_translation_fields == 'enabled' - assert p.ip_log_shun is None - assert p.ip_log_rtbh == 'enabled' - assert p.port_log_publisher == '/Part/bazbar' - assert p.port_rate_limit == 4294967295 - assert p.dns_publisher == '/Temp/dns-pub' - assert p.sip_publisher == '/Common/sip-pub' - assert p.network_publisher == '/Common/net-pub' - - def test_api_parameters(self): - args = load_fixture('load_afm_log_global_network_profile.json') - - p = ApiParameters(params=args) - assert p.name == 'global-network' - assert p.description == 'Default logging profile for network events' - assert p.ip_log_shun == 'disabled' - assert p.ip_log_translation_fields == 'disabled' - assert p.ip_rate_limit == 4294967295 - assert p.port_rate_limit == 4294967295 - assert p.ip_log_publisher is None - assert p.port_log_publisher is None - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_log_profile.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_log_profile.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='this is a description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'this is a description' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_log_profile_network.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_log_profile_network.py deleted file mode 100644 index 62640c7af..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_log_profile_network.py +++ /dev/null @@ -1,165 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_log_profile_network import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - profile_name='foo', - rate_limit=150000, - log_publisher='/Common/foobar', - log_tcp_errors=dict( - enabled='yes', - rate_limit=10000, - ), - log_tcp_events=dict( - enabled='yes', - rate_limit=30000, - ), - log_ip_errors=dict( - enabled='yes', - rate_limit=60000, - ), - log_matches_accept_rule=dict( - enabled='yes', - rate_limit=80000, - ), - log_matches_drop_rule=dict( - enabled='no', - rate_limit='indefinite', - ), - log_matches_reject_rule=dict( - enabled='no', - rate_limit='indefinite', - ), - log_format_delimiter='.', - log_storage_format='field-list', - log_message_fields=['vlan', 'translated_vlan', 'src_ip'] - ) - - p = ModuleParameters(params=args) - assert p.profile_name == 'foo' - assert p.rate_limit == 150000 - assert p.log_publisher == '/Common/foobar' - assert p.log_tcp_events == 'enabled' - assert p.rate_tcp_events == 30000 - assert p.log_ip_errors == 'enabled' - assert p.rate_ip_errors == 60000 - assert p.log_tcp_errors == 'enabled' - assert p.rate_tcp_errors == 10000 - assert p.log_acl_match_accept == 'enabled' - assert p.rate_acl_match_accept == 80000 - assert p.log_acl_match_drop == 'disabled' - assert p.rate_acl_match_drop == 4294967295 - assert p.log_acl_match_reject == 'disabled' - assert p.rate_acl_match_reject == 4294967295 - assert p.log_format_delimiter == '.' - assert p.log_storage_format == 'field-list' - - def test_api_parameters(self): - args = load_fixture('load_afm_global_network_log_network.json') - - p = ApiParameters(params=args) - assert p.rate_limit == 4294967295 - assert p.log_tcp_events == 'disabled' - assert p.rate_tcp_events == 4294967295 - assert p.log_ip_errors == 'disabled' - assert p.rate_ip_errors == 4294967295 - assert p.log_tcp_errors == 'disabled' - assert p.rate_tcp_errors == 4294967295 - assert p.log_acl_match_accept == 'disabled' - assert p.rate_acl_match_accept == 4294967295 - assert p.log_acl_match_drop == 'disabled' - assert p.rate_acl_match_drop == 4294967295 - assert p.log_acl_match_reject == 'disabled' - assert p.rate_acl_match_reject == 4294967295 - assert p.log_format_delimiter == ',' - assert p.log_storage_format == 'none' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_log_profile_network.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_log_profile_network.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - profile_name='foo', - rate_limit=150000, - log_publisher='/Common/foobar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['rate_limit'] == 150000 - assert results['log_publisher'] == '/Common/foobar' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_policy.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_policy.py deleted file mode 100644 index ed2f1b086..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_policy.py +++ /dev/null @@ -1,113 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_policy import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - rules=['rule1', 'rule2', 'rule3'] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.rules == ['rule1', 'rule2', 'rule3'] - - def test_api_parameters(self): - args = load_fixture('load_security_firewall_policy_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.rules == ['rule1', 'rule2', 'rule3'] - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_policy.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_policy.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='this is a description', - rules=['rule1', 'rule2', 'rule3'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert 'rules' in results - assert len(results['rules']) == 3 - assert results['description'] == 'this is a description' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_port_list.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_port_list.py deleted file mode 100644 index ef3c9e95b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_port_list.py +++ /dev/null @@ -1,134 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_port_list import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='this is a description', - ports=[1, 2, 3, 4], - port_ranges=['10-20', '30-40', '50-60'], - port_lists=['/Common/foo', 'foo'] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'this is a description' - assert len(p.ports) == 4 - assert len(p.port_ranges) == 3 - assert len(p.port_lists) == 2 - - def test_api_parameters(self): - args = load_fixture('load_security_port_list_1.json') - - p = ApiParameters(params=args) - assert len(p.ports) == 4 - assert len(p.port_ranges) == 3 - assert len(p.port_lists) == 1 - assert sorted(p.ports) == [1, 2, 3, 4] - assert sorted(p.port_ranges) == ['10-20', '30-40', '50-60'] - assert p.port_lists[0] == '/Common/_sys_self_allow_tcp_defaults' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_port_list.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_port_list.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_port_list.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def tearDown(self): - self.p1.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='this is a description', - ports=[1, 2, 3, 4], - port_ranges=['10-20', '30-40', '50-60'], - port_lists=['/Common/foo', 'foo'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert 'ports' in results - assert 'port_lists' in results - assert 'port_ranges' in results - assert len(results['ports']) == 4 - assert len(results['port_ranges']) == 3 - assert len(results['port_lists']) == 2 - assert results['description'] == 'this is a description' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_rule.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_rule.py deleted file mode 100644 index c5f89790a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_rule.py +++ /dev/null @@ -1,152 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_rule import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent_policy='policy1', - protocol='tcp', - source=[ - dict(address='1.2.3.4'), - dict(address='::1'), - dict(address_list='foo-list1'), - dict(address_range='1.1.1.1-2.2.2.2.'), - dict(vlan='vlan1'), - dict(country='US'), - dict(port='22'), - dict(port_list='port-list1'), - dict(port_range='80-443'), - ], - destination=[ - dict(address='1.2.3.4'), - dict(address='::1'), - dict(address_list='foo-list1'), - dict(address_range='1.1.1.1-2.2.2.2.'), - dict(country='US'), - dict(port='22'), - dict(port_list='port-list1'), - dict(port_range='80-443'), - ], - irule='irule1', - action='accept', - logging=True, - ) - - p = ModuleParameters(params=args) - assert p.irule == '/Common/irule1' - assert p.action == 'accept' - assert p.logging is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_rule.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_rule.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - parent_policy='policy1', - protocol='tcp', - source=[ - dict(address='1.2.3.4'), - dict(address='::1'), - dict(address_list='foo-list1'), - dict(address_range='1.1.1.1-2.2.2.2.'), - dict(vlan='vlan1'), - dict(country='US'), - dict(port='22'), - dict(port_list='port-list1'), - dict(port_range='80-443'), - ], - destination=[ - dict(address='1.2.3.4'), - dict(address='::1'), - dict(address_list='foo-list1'), - dict(address_range='1.1.1.1-2.2.2.2.'), - dict(country='US'), - dict(port='22'), - dict(port_list='port-list1'), - dict(port_range='80-443'), - ], - irule='irule1', - action='accept', - logging='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_rule_list.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_rule_list.py deleted file mode 100644 index 01716e670..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_rule_list.py +++ /dev/null @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_rule_list import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - rules=['rule1', 'rule2', 'rule3'] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.rules == ['rule1', 'rule2', 'rule3'] - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_rule_list.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_rule_list.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='this is a description', - rules=['rule1', 'rule2', 'rule3'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert 'rules' in results - assert len(results['rules']) == 3 - assert results['description'] == 'this is a description' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_schedule.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_schedule.py deleted file mode 100644 index 03807f8ad..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_firewall_schedule.py +++ /dev/null @@ -1,122 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_schedule import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - daily_hour_end='21:00', - daily_hour_start='11:00', - date_valid_end='2019-03-11:15:30:00', - date_valid_start='2019-03-01:15:30:00', - days_of_week='all', - ) - p = ModuleParameters(params=args) - - assert p.name == 'foo' - assert p.description == 'my description' - assert p.daily_hour_end == '21:00' - assert p.daily_hour_start == '11:00' - assert p.date_valid_end == '2019-03-11T15:30:00Z' - assert p.date_valid_start == '2019-03-01T15:30:00Z' - assert 'monday' in p.days_of_week - - def test_api_parameters(self): - args = load_fixture('load_afm_schedule.json') - - p = ApiParameters(params=args) - assert p.name == 'foobar' - assert p.description == 'some description' - assert p.daily_hour_end == '12:00' - assert p.daily_hour_start == '6:00' - assert p.date_valid_end == '2019-06-13T16:00:00Z' - assert p.date_valid_start == '2019-05-31T07:00:00Z' - assert 'sunday' in p.days_of_week - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_schedule.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_firewall_schedule.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='this is a description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'this is a description' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_datacenter.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_datacenter.py deleted file mode 100644 index 9f29b37ba..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_datacenter.py +++ /dev/null @@ -1,229 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_datacenter import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - state='present', - contact='foo', - description='bar', - location='baz', - name='datacenter' - ) - p = ModuleParameters(params=args) - assert p.state == 'present' - - def test_api_parameters(self): - args = load_fixture('load_gtm_datacenter_default.json') - p = ApiParameters(params=args) - assert p.name == 'asd' - - def test_module_parameters_state_present(self): - args = dict( - state='present' - ) - p = ModuleParameters(params=args) - assert p.state == 'present' - assert p.enabled is True - - def test_module_parameters_state_absent(self): - args = dict( - state='absent' - ) - p = ModuleParameters(params=args) - assert p.state == 'absent' - - def test_module_parameters_state_enabled(self): - args = dict( - state='enabled' - ) - p = ModuleParameters(params=args) - assert p.state == 'enabled' - assert p.enabled is True - assert p.disabled is None - - def test_module_parameters_state_disabled(self): - args = dict( - state='disabled' - ) - p = ModuleParameters(params=args) - assert p.state == 'disabled' - assert p.enabled is None - assert p.disabled is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_datacenter.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_datacenter.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_datacenter.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_datacenter(self, *args): - set_module_args(dict( - name='foo', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - assert results['state'] == 'present' - - def test_create_disabled_datacenter(self, *args): - set_module_args(dict( - name='foo', - state='disabled', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - assert results['enabled'] is False - assert results['disabled'] is True - - def test_create_enabled_datacenter(self, *args): - set_module_args(dict( - name='foo', - state='enabled', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - assert results['enabled'] is True - assert results['disabled'] is False - - def test_idempotent_disable_datacenter(self, *args): - set_module_args(dict( - name='foo', - state='disabled', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - current = ApiParameters(params=load_fixture('load_gtm_datacenter_disabled.json')) - - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is False diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_dns_listener.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_dns_listener.py deleted file mode 100644 index c321e30c0..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_dns_listener.py +++ /dev/null @@ -1,390 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2020, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_dns_listener import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - address='10.0.1.0', - mask='255.255.255.0', - port=56, - advertise='no', - description='this is description', - ip_protocol='tcp' - ) - - p = ModuleParameters(params=args) - assert p.address == '10.0.1.0' - assert p.mask == '255.255.255.0' - assert p.port == 56 - assert p.advertise == 'no' - assert p.description == 'this is description' - assert p.ip_protocol == 'tcp' - - def test_api_parameters(self): - args = dict( - address='10.0.1.0', - mask='255.255.255.0', - port=56, - advertise='no', - description='this is description', - ip_protocol='tcp' - ) - - p = ApiParameters(params=args) - assert p.address == '10.0.1.0' - assert p.mask == '255.255.255.0' - assert p.port == 56 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_dns_listener.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_dns_listener.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='test-dns-listener', - address='10.0.1.0', - mask='255.255.255.0', - port=53, - advertise='no', - state='present', - description='this is description', - ip_protocol='tcp', - translate_address='yes', - translate_port='no', - enabled_vlans=[ - '/Common/vlan1', - '/Common/vlan2' - ], - irules=[ - '/Common/rule1', - '/Common/rule2' - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['address'] == '10.0.1.0' - assert results['port'] == 53 - assert results['mask'] == '255.255.255.0' - assert results['advertise'] == 'no' - assert results['ip_protocol'] == 'tcp' - assert results['description'] == 'this is description' - assert results['translate_address'] == 'enabled' - assert results['translate_port'] == 'disabled' - assert results['vlans_enabled'] is True - assert results['enabled_vlans'][0] == '/Common/vlan1' and results['vlans'][1] == '/Common/vlan2' - assert results['irules'][0] == '/Common/rule1' and results['irules'][1] == '/Common/rule2' - - def test_update(self, *args): - set_module_args(dict( - name='test-dns-listener', - address='10.0.1.0', - mask='255.255.255.0', - port=53, - advertise='no', - state='present', - description='this is description', - ip_protocol='tcp', - translate_address='yes', - translate_port='no', - enabled_vlans=[ - '/Common/vlan1', - '/Common/vlan2' - ], - irules=[ - '/Common/rule1', - '/Common/rule2' - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - current = ApiParameters( - dict( - agent_status_traps='disabled' - ) - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - results = mm.exec_module() - - assert results['changed'] is True - assert results['address'] == '10.0.1.0' - assert results['port'] == 53 - assert results['mask'] == '255.255.255.0' - assert results['advertise'] == 'no' - assert results['ip_protocol'] == 'tcp' - assert results['description'] == 'this is description' - assert results['translate_address'] == 'enabled' - assert results['translate_port'] == 'disabled' - assert results['enabled_vlans'][0] == '/Common/vlan1' and results['vlans'][1] == '/Common/vlan2' - assert results['irules'][0] == '/Common/rule1' and results['irules'][1] == '/Common/rule2' - - def test_enabled_vlans_all(self, *args): - set_module_args(dict( - name='test-dns-listener', - address='10.0.1.0', - mask='255.255.255.0', - port=53, - advertise='no', - state='present', - description='this is description', - ip_protocol='tcp', - translate_address='yes', - translate_port='no', - enabled_vlans='all', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - current = ApiParameters( - dict( - agent_status_traps='disabled' - ) - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - results = mm.exec_module() - - assert results['changed'] is True - assert results['address'] == '10.0.1.0' - assert results['port'] == 53 - assert results['mask'] == '255.255.255.0' - assert results['advertise'] == 'no' - assert results['ip_protocol'] == 'tcp' - assert results['description'] == 'this is description' - assert results['translate_address'] == 'enabled' - assert results['translate_port'] == 'disabled' - assert results['vlans_enabled'] is True - assert 'vlans_disabled' not in results - - def test_disabled_vlans(self, *args): - set_module_args(dict( - name='test-dns-listener', - address='10.0.1.0', - mask='255.255.255.0', - port=53, - advertise='no', - state='present', - description='this is description', - ip_protocol='tcp', - translate_address='yes', - translate_port='no', - disabled_vlans='all', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - current = ApiParameters( - dict( - agent_status_traps='disabled' - ) - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - assert 'You cannot disable all VLANs. You must name them individually.' in str(ex.value) - - def test_delete(self, *args): - set_module_args(dict( - name='test-dns-listener', - address='192.10.0.2', - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - current = ApiParameters( - dict( - agent_status_traps='disabled' - ) - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - results = mm.exec_module() - - assert results['changed'] is False - - def test_enable_listener(self, *args): - set_module_args(dict( - name='test-dns-listener', - state='enabled', - address='192.10.0.2', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - current = ApiParameters( - dict( - agent_status_traps='disabled' - ) - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - results = mm.exec_module() - - assert results['changed'] is True - - def test_disable_listener(self, *args): - set_module_args(dict( - name='test-dns-listener', - state='disabled', - address='192.10.0.2', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - current = ApiParameters( - dict( - agent_status_traps='disabled' - ) - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_global.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_global.py deleted file mode 100644 index 028356be8..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_global.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_global import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - synchronization=True, - synchronization_group_name='foo', - synchronize_zone_files=True - ) - - p = ModuleParameters(params=args) - assert p.synchronization is True - assert p.synchronization_group_name == 'foo' - assert p.synchronize_zone_files is True - - def test_api_parameters(self): - args = load_fixture('load_gtm_global_settings_general_1.json') - - p = ApiParameters(params=args) - assert p.synchronization is False - assert p.synchronization_group_name == 'default' - assert p.synchronize_zone_files is False - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_global.module_provisioned') - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_global.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_global.send_teem') - self.m1 = self.p1.start() - self.m1.return_value = True - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_update_parameters(self, *args): - set_module_args(dict( - synchronization="yes", - synchronization_group_name='foo', - synchronize_zone_files="yes", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_gtm_global_settings_general_1.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['synchronization'] == 'yes' - assert results['synchronization_group_name'] == 'foo' - assert results['synchronize_zone_files'] == 'yes' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_bigip.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_bigip.py deleted file mode 100644 index d5dd5096d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_bigip.py +++ /dev/null @@ -1,163 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_bigip import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - aggregate_dynamic_ratios='average-members', - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'bigip' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.aggregate_dynamic_ratios == 'average-members' - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port='80', - interval='20', - timeout='30', - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'bigip' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - destination='10.10.10.10:80', - interval=20, - timeout=30, - ignoreDownResponse='disabled', - aggregateDynamicRatios='none', - ) - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'bigip' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.aggregate_dynamic_ratios == 'none' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_bigip.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_bigip.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_bigip.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_external.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_external.py deleted file mode 100644 index b6522e41c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_external.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_external import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.type == 'external' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_external.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_external.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_external.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['parent'] == '/Common/parent' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_firepass.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_firepass.py deleted file mode 100644 index 66f3a10f8..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_firepass.py +++ /dev/null @@ -1,140 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_firepass import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='/Common/my-http', - max_load_average='60', - concurrency_limit='70', - ip='1.1.1.1', - port='80', - interval='10', - timeout='20', - ignore_down_response=True, - probe_timeout='30' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/my-http' - assert p.max_load_average == 60 - assert p.concurrency_limit == 70 - assert p.destination == '1.1.1.1:80' - assert p.ip == '1.1.1.1' - assert p.port == 80 - assert p.interval == 10 - assert p.timeout == 20 - assert p.ignore_down_response is True - assert p.probe_timeout == 30 - - def test_api_parameters(self): - args = load_fixture('load_gtm_monitor_firepass_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/firepass_gtm' - assert p.max_load_average == 12 - assert p.concurrency_limit == 95 - assert p.destination == '1.1.1.1:80' - assert p.ip == '1.1.1.1' - assert p.port == 80 - assert p.interval == 30 - assert p.timeout == 90 - assert p.ignore_down_response is True - assert p.probe_timeout == 5 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_firepass.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_firepass.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_firepass.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_http.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_http.py deleted file mode 100644 index a6d0cbb5b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_http.py +++ /dev/null @@ -1,146 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_http import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='/Common/my-http', - send='the send string', - receive='the receive string', - ip='1.1.1.1', - port='80', - interval='10', - timeout='20', - ignore_down_response=True, - transparent=False, - probe_timeout='30', - reverse=True - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/my-http' - assert p.send == 'the send string' - assert p.receive == 'the receive string' - assert p.destination == '1.1.1.1:80' - assert p.ip == '1.1.1.1' - assert p.port == 80 - assert p.interval == 10 - assert p.timeout == 20 - assert p.ignore_down_response is True - assert p.transparent is False - assert p.probe_timeout == 30 - assert p.reverse is True - - def test_api_parameters(self): - args = load_fixture('load_gtm_monitor_http_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/http' - assert p.send == 'GET /' - assert p.receive == 'the receive string' - assert p.destination == '3.3.3.3:8080' - assert p.ip == '3.3.3.3' - assert p.port == 8080 - assert p.interval == 30 - assert p.timeout == 120 - assert p.ignore_down_response is False - assert p.transparent is True - assert p.probe_timeout == 5 - assert p.reverse is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_http.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_http.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_http.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_https.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_https.py deleted file mode 100644 index e83c7a216..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_https.py +++ /dev/null @@ -1,154 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_https import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='/Common/my-http', - send='the send string', - receive='the receive string', - ip='1.1.1.1', - port='80', - interval='10', - timeout='20', - client_cert='default', - client_key='default', - target_username='user1', - target_password='secret1', - ignore_down_response=True, - transparent=False, - probe_timeout='30', - reverse=True - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/my-http' - assert p.send == 'the send string' - assert p.receive == 'the receive string' - assert p.destination == '1.1.1.1:80' - assert p.ip == '1.1.1.1' - assert p.port == 80 - assert p.interval == 10 - assert p.timeout == 20 - assert p.client_cert == '/Common/default.crt' - assert p.client_key == '/Common/default.key' - assert p.target_username == 'user1' - assert p.target_password == 'secret1' - assert p.ignore_down_response is True - assert p.transparent is False - assert p.probe_timeout == 30 - assert p.reverse is True - - def test_api_parameters(self): - args = load_fixture('load_gtm_monitor_http_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/http' - assert p.send == 'GET /' - assert p.receive == 'the receive string' - assert p.destination == '3.3.3.3:8080' - assert p.ip == '3.3.3.3' - assert p.port == 8080 - assert p.interval == 30 - assert p.timeout == 120 - assert p.ignore_down_response is False - assert p.transparent is True - assert p.probe_timeout == 5 - assert p.reverse is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_https.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_https.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_https.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_tcp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_tcp.py deleted file mode 100644 index 3332aac31..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_tcp.py +++ /dev/null @@ -1,207 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_tcp import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='/Common/my-tcp', - send='the send string', - receive='the receive string', - ip='1.1.1.1', - port='80', - interval='10', - timeout='20', - ignore_down_response=True, - transparent=False, - probe_timeout='30', - reverse=True - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/my-tcp' - assert p.send == 'the send string' - assert p.receive == 'the receive string' - assert p.destination == '1.1.1.1:80' - assert p.ip == '1.1.1.1' - assert p.port == 80 - assert p.interval == 10 - assert p.timeout == 20 - assert p.ignore_down_response is True - assert p.transparent is False - assert p.probe_timeout == 30 - assert p.reverse is True - - def test_api_parameters(self): - args = load_fixture('load_gtm_monitor_tcp_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/tcp' - assert p.send == 'the send string' - assert p.receive == 'the receive string' - assert p.destination == '1.1.1.1:80' - assert p.ip == '1.1.1.1' - assert p.port == 80 - assert p.interval == 30 - assert p.timeout == 120 - assert p.ignore_down_response is False - assert p.transparent is True - assert p.probe_timeout == 5 - assert p.reverse is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_tcp.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_tcp.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_tcp.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_change_ip(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_gtm_monitor_tcp_1.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[True, True]) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['ip'] == '10.10.10.10' - - def test_change_ignore_down_response(self, *args): - set_module_args(dict( - name='foo', - ignore_down_response=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_gtm_monitor_tcp_1.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[True, True]) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['ignore_down_response'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_tcp_half_open.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_tcp_half_open.py deleted file mode 100644 index ed26f2d6c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_monitor_tcp_half_open.py +++ /dev/null @@ -1,176 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_tcp_half_open import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - probe_interval=10, - probe_timeout=20, - probe_attempts=30, - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'tcp_half_open' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.probe_interval == 10 - assert p.probe_timeout == 20 - assert p.probe_attempts == 30 - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port='80', - interval='20', - timeout='30', - probe_interval='10', - probe_timeout='20', - probe_attempts='30', - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'tcp_half_open' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.probe_interval == 10 - assert p.probe_timeout == 20 - assert p.probe_attempts == 30 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - destination='10.10.10.10:80', - interval=20, - timeout=30, - probeInterval=10, - probeTimeout=20, - probeAttempts=30, - ignoreDownResponse='disabled' - ) - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'tcp_half_open' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.probe_interval == 10 - assert p.probe_timeout == 20 - assert p.probe_attempts == 30 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_tcp_half_open.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_tcp_half_open.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_monitor_tcp_half_open.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_pool.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_pool.py deleted file mode 100644 index ae8e86a90..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_pool.py +++ /dev/null @@ -1,215 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_pool import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - preferred_lb_method='topology', - alternate_lb_method='ratio', - fallback_lb_method='fewest-hops', - fallback_ip='10.10.10.10', - type='a' - ) - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.preferred_lb_method == 'topology' - assert p.alternate_lb_method == 'ratio' - assert p.fallback_lb_method == 'fewest-hops' - assert p.fallback_ip == '10.10.10.10' - assert p.type == 'a' - - def test_module_parameters_members(self): - args = dict( - partition='Common', - members=[ - dict( - server='foo', - virtual_server='bar' - ) - ] - ) - p = ModuleParameters(params=args) - assert len(p.members) == 1 - assert p.members[0] == '/Common/foo:bar' - - def test_api_parameters(self): - args = dict( - name='foo', - loadBalancingMode='topology', - alternateMode='ratio', - fallbackMode='fewest-hops', - fallbackIp='10.10.10.10' - ) - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.preferred_lb_method == 'topology' - assert p.alternate_lb_method == 'ratio' - assert p.fallback_lb_method == 'fewest-hops' - assert p.fallback_ip == '10.10.10.10' - - def test_api_parameters_members(self): - args = load_fixture('load_gtm_pool_a_with_members_1.json') - p = ApiParameters(params=args) - assert len(p.members) == 3 - assert p.members[0] == '/Common/server1:vs1' - assert p.members[1] == '/Common/server1:vs2' - assert p.members[2] == '/Common/server1:vs3' - - -class TestModuledManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_pool.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_pool.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_pool.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_pool(self, *args): - set_module_args(dict( - name='foo', - preferred_lb_method='round-robin', - type='a', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.module_provisioned = Mock(return_value=True) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['preferred_lb_method'] == 'round-robin' - - def test_update_pool(self, *args): - set_module_args(dict( - name='foo', - preferred_lb_method='topology', - alternate_lb_method='drop-packet', - fallback_lb_method='cpu', - type='a', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - current = ApiParameters(params=load_fixture('load_gtm_pool_a_default.json')) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.module_provisioned = Mock(return_value=True) - mm.exists = Mock(side_effect=[True, True]) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['preferred_lb_method'] == 'topology' - assert results['alternate_lb_method'] == 'drop-packet' - assert results['fallback_lb_method'] == 'cpu' - - def test_delete_pool(self, *args): - set_module_args(dict( - name='foo', - type='a', - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.module_provisioned = Mock(return_value=True) - mm.exists = Mock(side_effect=[True, False]) - mm.version_is_less_than_12 = Mock(return_value=False) - mm.remove_from_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_pool_member.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_pool_member.py deleted file mode 100644 index 1c700007d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_pool_member.py +++ /dev/null @@ -1,203 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_pool_member import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - pool='pool1', - server_name='server1', - virtual_server='vs1', - type='a', - state='enabled', - limits=dict( - bits_enabled=True, - packets_enabled=True, - connections_enabled=True, - bits_limit=100, - packets_limit=200, - connections_limit=300 - ), - description='foo description', - ratio=10, - monitor='tcp', - member_order=2 - ) - - p = ModuleParameters(params=args) - assert p.pool == 'pool1' - assert p.server_name == 'server1' - assert p.virtual_server == 'vs1' - assert p.type == 'a' - assert p.state == 'enabled' - assert p.bits_enabled == 'enabled' - assert p.packets_enabled == 'enabled' - assert p.connections_enabled == 'enabled' - assert p.bits_limit == 100 - assert p.packets_limit == 200 - assert p.connections_limit == 300 - - def test_api_parameters(self): - args = load_fixture('load_gtm_pool_a_member_1.json') - - p = ApiParameters(params=args) - assert p.ratio == 1 - assert p.monitor == 'default' - assert p.member_order == 1 - assert p.packets_enabled == 'disabled' - assert p.packets_limit == 0 - assert p.bits_enabled == 'disabled' - assert p.bits_limit == 0 - assert p.connections_enabled == 'disabled' - assert p.connections_limit == 0 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_pool_member.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_pool_member.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_pool_member.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - pool='pool1', - server_name='server1', - virtual_server='vs1', - type='a', - state='enabled', - limits=dict( - bits_enabled='yes', - packets_enabled='yes', - connections_enabled='yes', - bits_limit=100, - packets_limit=200, - connections_limit=300 - ), - description='foo description', - ratio=10, - monitor='tcp', - member_order=2, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of, - required_together=self.spec.required_together, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_aggregate_pool_members(self, *args): - set_module_args(dict( - pool='fake_pool', - type='a', - aggregate=[ - dict( - server_name='my-name1', - virtual_server='some-vs2', - state='present', - partition='Common', - - ), - dict( - server_name='my-name1', - virtual_server='some-vs1', - state='present', - partition='Common' - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of, - required_together=self.spec.required_together, - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_server.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_server.py deleted file mode 100644 index d46796d0c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_server.py +++ /dev/null @@ -1,303 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_server import ( - ApiParameters, ModuleParameters, ModuleManager, V1Manager, V2Manager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='GTM_Server', - datacenter='New York', - partition='Common', - server_type='bigip', - link_discovery='disabled', - virtual_server_discovery='disabled', - devices=[ - dict( - name='server_1', - address='1.1.1.1' - ), - dict( - name='server_2', - address='2.2.2.1', - translation='192.168.2.1' - ), - dict( - name='server_2', - address='2.2.2.2' - ), - dict( - name='server_3', - addresses=[ - dict( - address='3.3.3.1' - ), - dict( - address='3.3.3.2' - ) - ] - ), - dict( - name='server_4', - addresses=[ - dict( - address='4.4.4.1', - translation='192.168.14.1' - ), - dict( - address='4.4.4.2' - ) - ] - ) - ] - ) - - p = ModuleParameters(params=args) - assert p.name == 'GTM_Server' - assert p.datacenter == '/Common/New York' - assert p.server_type == 'bigip' - assert p.link_discovery == 'disabled' - assert p.virtual_server_discovery == 'disabled' - - def test_api_parameters(self): - args = load_fixture('load_gtm_server_1.json') - - p = ApiParameters(params=args) - assert p.name == 'baz' - assert p.datacenter == '/Common/foo' - assert p.server_type == 'bigip' - assert p.link_discovery == 'disabled' - assert p.virtual_server_discovery == 'disabled' - - -class TestV1Manager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_server.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_server.tmos_version') - self.m2 = self.p2.start() - self.m2.return_value = '13.0.0' - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_server.send_teem') - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='GTM_Server', - datacenter='/Common/New York', - server_type='bigip', - link_discovery='disabled', - virtual_server_discovery='disabled', - devices=[ - dict( - name='server_1', - address='1.1.1.1' - ), - dict( - name='server_2', - address='2.2.2.1', - translation='192.168.2.1' - ), - dict( - name='server_2', - address='2.2.2.2' - ), - dict( - name='server_3', - addresses=[ - dict( - address='3.3.3.1' - ), - dict( - address='3.3.3.2' - ) - ] - ), - dict( - name='server_4', - addresses=[ - dict( - address='4.4.4.1', - translation='192.168.14.1' - ), - dict( - address='4.4.4.2' - ) - ] - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - m1 = V1Manager(module=module, params=module.params) - m1.exists = Mock(side_effect=[False, True]) - m1.create_on_device = Mock(return_value=True) - m1.client = Mock() - m1.client.api.tmos_version = '12.0.0' - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=m1) - mm.version_is_less_than = Mock(return_value=True) - mm.gtm_provisioned = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['server_type'] == 'bigip' - - -class TestV2Manager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_server.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_server.tmos_version') - self.m2 = self.p2.start() - self.m2.return_value = '13.0.0' - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_server.send_teem') - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='GTM_Server', - datacenter='/Common/New York', - server_type='bigip', - link_discovery='disabled', - virtual_server_discovery='disabled', - devices=[ - dict( - name='server_1', - address='1.1.1.1' - ), - dict( - name='server_2', - address='2.2.2.1', - translation='192.168.2.1' - ), - dict( - name='server_2', - address='2.2.2.2' - ), - dict( - name='server_3', - addresses=[ - dict( - address='3.3.3.1' - ), - dict( - address='3.3.3.2' - ) - ] - ), - dict( - name='server_4', - addresses=[ - dict( - address='4.4.4.1', - translation='192.168.14.1' - ), - dict( - address='4.4.4.2' - ) - ] - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - m1 = V2Manager(module=module) - m1.exists = Mock(side_effect=[False, True]) - m1.create_on_device = Mock(return_value=True) - m1.client = Mock() - m1.client.api.tmos_version = '13.1.0' - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=m1) - mm.version_is_less_than = Mock(return_value=False) - mm.gtm_provisioned = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['server_type'] == 'bigip' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_topology_record.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_topology_record.py deleted file mode 100644 index fbf01ad35..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_topology_record.py +++ /dev/null @@ -1,126 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_topology_record import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - source=dict( - subnet='192.168.1.0/24', - negate=True - ), - destination=dict( - region='Foobar', - ), - weight=10 - ) - - p = ModuleParameters(params=args) - assert p.name == 'ldns: not subnet 192.168.1.0/24 server: region /Common/Foobar' - assert p.weight == 10 - - def test_api_parameters(self): - args = dict( - source=dict( - subnet='192.168.1.0/24', - negate=True - ), - destination=dict( - region='Foobar', - ), - score=10 - ) - - p = ApiParameters(params=args) - assert p.weight == 10 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_topology_record.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_topology_record.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_topology_record(self, *args): - set_module_args(dict( - source=dict( - subnet='192.168.1.0/24', - negate=True - ), - destination=dict( - region='Foobar', - ), - weight=10, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_topology_region.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_topology_region.py deleted file mode 100644 index 028e45249..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_topology_region.py +++ /dev/null @@ -1,138 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_topology_region import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foobar', - region_members=[ - dict( - country='Poland', - negate=True - ), - dict( - datacenter='bazcenter' - ) - ], - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foobar' - assert p.partition == 'Common' - assert p.region_members == ['not country PL', 'datacenter /Common/bazcenter'] - - def test_api_parameters(self): - args = dict( - name='foobar', - region_members=[ - dict( - name='not country PL' - ), - dict( - name='datacenter /Common/bazcenter' - ) - ], - partition='Common' - ) - - p = ApiParameters(params=args) - assert p.name == 'foobar' - assert p.partition == 'Common' - assert p.region_members == ['not country PL', 'datacenter /Common/bazcenter'] - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_topology_region.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_topology_region.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_topology_region(self, *args): - set_module_args(dict( - name='foobar', - region_members=[ - dict( - country='Poland', - negate=True - ), - dict( - datacenter='bazcenter' - ) - ], - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_virtual_server.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_virtual_server.py deleted file mode 100644 index b1c9229ed..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_virtual_server.py +++ /dev/null @@ -1,162 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_virtual_server import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - server_name='server1', - address='1.1.1.1', - port=22, - translation_address='2.2.2.2', - translation_port=443, - availability_requirements=dict( - type='at_least', - at_least=2, - ), - monitors=['http', 'tcp', 'gtp'], - virtual_server_dependencies=[ - dict( - server='server2', - virtual_server='vs2' - ) - ], - link='link1', - limits=dict( - bits_enabled=True, - packets_enabled=True, - connections_enabled=True, - bits_limit=100, - packets_limit=200, - connections_limit=300 - ), - state='present' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.server_name == 'server1' - assert p.address == '1.1.1.1' - assert p.port == 22 - assert p.translation_address == '2.2.2.2' - assert p.translation_port == 443 - assert p.availability_requirement_type == 'at_least' - assert p.at_least == 2 - assert p.monitors == 'min 2 of { /Common/http /Common/tcp /Common/gtp }' - assert len(p.virtual_server_dependencies) == 1 - assert p.link == '/Common/link1' - assert p.bits_enabled == 'enabled' - assert p.bits_limit == 100 - assert p.packets_enabled == 'enabled' - assert p.packets_limit == 200 - assert p.connections_enabled == 'enabled' - assert p.connections_limit == 300 - - def test_api_parameters(self): - args = load_fixture('load_gtm_server_virtual_2.json') - - p = ApiParameters(params=args) - assert p.name == 'vs2' - assert p.address == '6.6.6.6' - assert p.port == 8080 - assert p.translation_address == 'none' - assert p.translation_port == 0 - assert p.availability_requirement_type == 'all' - assert p.monitors == '/Common/gtp' - assert p.bits_enabled == 'enabled' - assert p.bits_limit == 100 - assert p.packets_enabled == 'enabled' - assert p.packets_limit == 200 - assert p.connections_enabled == 'enabled' - assert p.connections_limit == 300 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_virtual_server.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_virtual_server.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_virtual_server.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_datacenter(self, *args): - set_module_args(dict( - server_name='foo', - name='vs1', - address='1.1.1.1', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_wide_ip.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_wide_ip.py deleted file mode 100644 index 9b52a3a6e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_gtm_wide_ip.py +++ /dev/null @@ -1,182 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_wide_ip import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo.baz.bar', - pool_lb_method='round-robin', - ) - p = ModuleParameters(params=args) - assert p.name == 'foo.baz.bar' - assert p.pool_lb_method == 'round-robin' - - def test_module_pools(self): - args = dict( - pools=[ - dict( - name='foo', - ratio='100' - ) - ] - ) - p = ModuleParameters(params=args) - assert len(p.pools) == 1 - - def test_api_parameters(self): - args = dict( - name='foo.baz.bar', - poolLbMode='round-robin' - ) - p = ApiParameters(params=args) - assert p.name == 'foo.baz.bar' - assert p.pool_lb_method == 'round-robin' - - def test_module_not_fqdn_name(self): - args = dict( - name='foo', - lb_method='round-robin' - ) - with pytest.raises(F5ModuleError) as excinfo: - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert 'The provided name must be a valid FQDN' in str(excinfo.value) - - -class TestModuleManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_wide_ip.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_wide_ip.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_gtm_wide_ip.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_wideip(self, *args): - set_module_args(dict( - name='foo.baz.bar', - lb_method='round-robin', - type='a', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'foo.baz.bar' - assert results['state'] == 'present' - assert results['lb_method'] == 'round-robin' - - def test_create_wideip_with_pool(self, *args): - set_module_args(dict( - name='foo.baz.bar', - lb_method='round-robin', - type='a', - pools=[ - dict( - name='baz', - ratio=10, - ), - dict( - name='maz', - ratio=10, - order=1 - ), - dict( - name='vaz', - ratio=11, - order=2 - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'foo.baz.bar' - assert results['state'] == 'present' - assert results['lb_method'] == 'round-robin' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_hostname.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_hostname.py deleted file mode 100644 index d08ed9c0c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_hostname.py +++ /dev/null @@ -1,102 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_hostname import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - hostname='foo.internal.com' - ) - p = ModuleParameters(params=args) - assert p.hostname == 'foo.internal.com' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_hostname.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_hostname.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_update_hostname(self, *args): - set_module_args(dict( - hostname='foo2.internal.com', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters( - params=dict( - hostname='foo.internal.com' - ) - ) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['hostname'] == 'foo2.internal.com' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_iapp_service.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_iapp_service.py deleted file mode 100644 index e3f86fd3d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_iapp_service.py +++ /dev/null @@ -1,368 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_iapp_service import ( - Parameters, ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - - def test_module_parameters_keys(self): - args = load_fixture('create_iapp_service_parameters_f5_http.json') - p = ModuleParameters(params=args) - - # Assert the top-level keys - assert p.name == 'http_example' - assert p.partition == 'Common' - assert p.template == '/Common/f5.http' - assert p.device_group is None - assert p.inheritedTrafficGroup == 'true' - assert p.inheritedDevicegroup == 'true' - assert p.traffic_group == '/Common/traffic-group-local-only' - - def test_module_parameters_lists(self): - args = load_fixture('create_iapp_service_parameters_f5_http.json') - p = ModuleParameters(params=args) - - assert 'lists' in p._values - - assert p.lists[0]['name'] == 'irules__irules' - assert p.lists[0]['encrypted'] == 'no' - assert len(p.lists[0]['value']) == 1 - assert p.lists[0]['value'][0] == '/Common/lgyft' - - assert p.lists[1]['name'] == 'net__client_vlan' - assert p.lists[1]['encrypted'] == 'no' - assert len(p.lists[1]['value']) == 1 - assert p.lists[1]['value'][0] == '/Common/net2' - - def test_module_parameters_tables(self): - args = load_fixture('create_iapp_service_parameters_f5_http.json') - p = ModuleParameters(params=args) - - assert 'tables' in p._values - - assert 'columnNames' in p.tables[0] - assert len(p.tables[0]['columnNames']) == 1 - assert p.tables[0]['columnNames'][0] == 'name' - - assert 'name' in p.tables[0] - assert p.tables[0]['name'] == 'pool__hosts' - - assert 'rows' in p.tables[0] - assert len(p.tables[0]['rows']) == 1 - assert 'row' in p.tables[0]['rows'][0] - assert len(p.tables[0]['rows'][0]['row']) == 1 - assert p.tables[0]['rows'][0]['row'][0] == 'demo.example.com' - - assert len(p.tables[1]['rows']) == 2 - assert 'row' in p.tables[0]['rows'][0] - assert len(p.tables[1]['rows'][0]['row']) == 2 - assert p.tables[1]['rows'][0]['row'][0] == '10.1.1.1' - assert p.tables[1]['rows'][0]['row'][1] == '0' - assert p.tables[1]['rows'][1]['row'][0] == '10.1.1.2' - assert p.tables[1]['rows'][1]['row'][1] == '0' - - def test_module_parameters_variables(self): - args = load_fixture('create_iapp_service_parameters_f5_http.json') - p = ModuleParameters(params=args) - - assert 'variables' in p._values - assert len(p.variables) == 34 - - # Assert one configuration value - assert 'name' in p.variables[0] - assert 'value' in p.variables[0] - assert p.variables[0]['name'] == 'afm__dos_security_profile' - assert p.variables[0]['value'] == '/#do_not_use#' - - # Assert a second configuration value - assert 'name' in p.variables[1] - assert 'value' in p.variables[1] - assert p.variables[1]['name'] == 'afm__policy' - assert p.variables[1]['value'] == '/#do_not_use#' - - def test_module_strict_updates_from_top_level(self): - # Assumes the user did not provide any parameters - - args = dict( - strict_updates=True - ) - p = ModuleParameters(params=args) - assert p.strict_updates == 'enabled' - - args = dict( - strict_updates=False - ) - p = ModuleParameters(params=args) - assert p.strict_updates == 'disabled' - - def test_module_strict_updates_override_from_top_level(self): - args = dict( - strict_updates=True, - parameters=dict( - strictUpdates='disabled' - ) - ) - p = ModuleParameters(params=args) - assert p.strict_updates == 'enabled' - - args = dict( - strict_updates=False, - parameters=dict( - strictUpdates='enabled' - ) - ) - p = ModuleParameters(params=args) - assert p.strict_updates == 'disabled' - - def test_module_strict_updates_only_parameters(self): - args = dict( - parameters=dict( - strictUpdates='disabled' - ) - ) - p = ModuleParameters(params=args) - assert p.strict_updates == 'disabled' - - args = dict( - parameters=dict( - strictUpdates='enabled' - ) - ) - p = ModuleParameters(params=args) - assert p.strict_updates == 'enabled' - - def test_api_strict_updates_from_top_level(self): - args = dict( - strictUpdates='enabled' - ) - p = ApiParameters(params=args) - assert p.strict_updates == 'enabled' - - args = dict( - strictUpdates='disabled' - ) - p = ApiParameters(params=args) - assert p.strict_updates == 'disabled' - - def test_api_parameters_variables(self): - args = dict( - variables=[ - dict( - name="client__http_compression", - encrypted="no", - value="/#create_new#" - ) - ] - ) - p = ApiParameters(params=args) - assert p.variables[0]['name'] == 'client__http_compression' - - def test_api_parameters_tables(self): - args = dict( - tables=[ - { - "name": "pool__members", - "columnNames": [ - "addr", - "port", - "connection_limit" - ], - "rows": [ - { - "row": [ - "12.12.12.12", - "80", - "0" - ] - }, - { - "row": [ - "13.13.13.13", - "443", - 10 - ] - } - ] - } - ] - ) - p = ApiParameters(params=args) - assert p.tables[0]['name'] == 'pool__members' - assert p.tables[0]['columnNames'] == ['addr', 'port', 'connection_limit'] - assert len(p.tables[0]['rows']) == 2 - assert 'row' in p.tables[0]['rows'][0] - assert 'row' in p.tables[0]['rows'][1] - assert p.tables[0]['rows'][0]['row'] == ['12.12.12.12', '80', '0'] - assert p.tables[0]['rows'][1]['row'] == ['13.13.13.13', '443', '10'] - - def test_api_parameters_device_group(self): - args = dict( - deviceGroup='none' - ) - p = ApiParameters(params=args) - assert p.device_group is None - - def test_api_parameters_inherited_traffic_group(self): - args = dict( - inheritedTrafficGroup='true' - ) - p = ApiParameters(params=args) - assert p.inheritedTrafficGroup == 'true' - - def test_api_parameters_inherited_devicegroup(self): - args = dict( - inheritedDevicegroup='true' - ) - p = ApiParameters(params=args) - assert p.inheritedDevicegroup == 'true' - - def test_api_parameters_traffic_group(self): - args = dict( - trafficGroup='/Common/traffic-group-local-only' - ) - p = ApiParameters(params=args) - assert p.traffic_group == '/Common/traffic-group-local-only' - - def test_module_template_same_partition(self): - args = dict( - template='foo', - partition='bar' - ) - p = ModuleParameters(params=args) - assert p.template == '/bar/foo' - - def test_module_template_same_partition_full_path(self): - args = dict( - template='/bar/foo', - partition='bar' - ) - p = ModuleParameters(params=args) - assert p.template == '/bar/foo' - - def test_module_template_different_partition_full_path(self): - args = dict( - template='/Common/foo', - partition='bar' - ) - p = ModuleParameters(params=args) - assert p.template == '/Common/foo' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_iapp_service.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_iapp_service.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_service(self, *args): - parameters = load_fixture('create_iapp_service_parameters_f5_http.json') - set_module_args(dict( - name='foo', - template='f5.http', - parameters=parameters, - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.template_exists = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - - def test_update_agent_status_traps(self, *args): - parameters = load_fixture('update_iapp_service_parameters_f5_http.json') - set_module_args(dict( - name='foo', - template='f5.http', - parameters=parameters, - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - parameters = load_fixture('create_iapp_service_parameters_f5_http.json') - current = Parameters(parameters) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_iapp_template.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_iapp_template.py deleted file mode 100644 index f1ee10b18..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_iapp_template.py +++ /dev/null @@ -1,197 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_iapp_template import ( - Parameters, ArgumentSpec, ModuleManager -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - iapp = load_fixture('create_iapp_template.iapp') - args = dict( - content=iapp - ) - p = Parameters(params=args) - assert p.name == 'foo.iapp' - - def test_module_parameters_custom_name(self): - iapp = load_fixture('create_iapp_template.iapp') - args = dict( - content=iapp, - name='foobar' - ) - p = Parameters(params=args) - assert p.name == 'foobar' - assert 'sys application template /Common/foobar' in p.content - - def test_module_parameters_custom_partition(self): - iapp = load_fixture('create_iapp_template.iapp') - args = dict( - content=iapp, - partition='foobar' - ) - p = Parameters(params=args) - assert p.name == 'foo.iapp' - assert 'sys application template /foobar/foo.iapp' in p.content - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_iapp_template.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_iapp_template.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_iapp_template(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - content=load_fixture('basic-iapp.tmpl'), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_update_iapp_template(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - content=load_fixture('basic-iapp.tmpl'), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current1 = Parameters(params=load_fixture('load_sys_application_template_w_new_checksum.json')) - current2 = Parameters(params=load_fixture('load_sys_application_template_w_old_checksum.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.create_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current1) - mm.template_in_use = Mock(return_value=False) - mm._get_temporary_template = Mock(return_value=current2) - mm._remove_iapp_checksum = Mock(return_value=None) - mm._generate_template_checksum_on_device = Mock(return_value=None) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_delete_iapp_template(self, *args): - set_module_args(dict( - content=load_fixture('basic-iapp.tmpl'), - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, False]) - mm.remove_from_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_delete_iapp_template_idempotent(self, *args): - set_module_args(dict( - content=load_fixture('basic-iapp.tmpl'), - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, False]) - - results = mm.exec_module() - - assert results['changed'] is False diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ike_peer.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ike_peer.py deleted file mode 100644 index 08c5cd3e3..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ike_peer.py +++ /dev/null @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ike_peer import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='ike1', - ) - p = ModuleParameters(params=args) - assert p.name == 'ike1' - - def test_api_parameters(self): - args = dict( - name='ike1', - ) - p = ApiParameters(params=args) - assert p.name == 'ike1' - - -class TestUntypedManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ike_peer.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ike_peer.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='ike1', - version=['v1'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if, - required_together=self.spec.required_together - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_imish_config.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_imish_config.py deleted file mode 100644 index 9cf30609d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_imish_config.py +++ /dev/null @@ -1,102 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_imish_config import ( - ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_imish_config.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_imish_config.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - lines=[ - 'bgp graceful-restart restart-time 120', - 'redistribute kernel route-map rhi', - 'neighbor 10.10.10.11 remote-as 65000', - 'neighbor 10.10.10.11 fall-over bfd', - 'neighbor 10.10.10.11 remote-as 65000', - 'neighbor 10.10.10.11 fall-over bfd' - ], - parents='router bgp 64664', - before='bfd slow-timer 2000', - match='exact', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = load_fixture('load_imish_output_1.json') - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_if=self.spec.required_if, - add_file_common_args=self.spec.add_file_common_args - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.read_current_from_device = Mock(return_value=current['commandResult']) - mm.upload_file_to_device = Mock(return_value=True) - mm.load_config_on_device = Mock(return_value=True) - mm.remove_uploaded_file_from_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_interface.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_interface.py deleted file mode 100644 index 274f3b17b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_interface.py +++ /dev/null @@ -1,173 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_interface import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - description='my description', - enabled=False, - bundle='enabled', - bundle_speed='40G', - force_gigabit_fiber=False, - prefer_port='sfp', - media_fixed='40000-FD', - media_sfp='40000-FD', - flow_control='tx-rx', - forward_error_correction='auto', - port_fwd_mode='l3', - lldp_tlvmap=136, - lldp_admin='txonly', - stp=True, - stp_auto_edge_port=False, - stp_edge_port=True, - stp_link_type='p2p', - sflow=dict( - poll_interval=10, - poll_interval_global=False - ) - ) - - p = ModuleParameters(params=args) - assert p.description == 'my description' - assert p.disabled is True - assert p.enabled is None - assert p.bundle == 'enabled' - assert p.bundle_speed == '40G' - assert p.force_gigabit_fiber == 'disabled' - assert p.prefer_port == 'sfp' - assert p.media_fixed == '40000-FD' - assert p.media_sfp == '40000-FD' - assert p.flow_control == 'tx-rx' - assert p.forward_error_correction == 'auto' - assert p.port_fwd_mode == 'l3' - assert p.lldp_tlvmap == 136 - assert p.lldp_admin == 'txonly' - assert p.stp == 'enabled' - assert p.stp_auto_edge_port == 'disabled' - assert p.stp_edge_port == 'true' - assert p.stp_link_type == 'p2p' - assert p.sflow_interval == 10 - assert p.sflow_global == 'no' - - def test_api_parameters(self): - args = load_fixture('load_interface.json') - - p = ApiParameters(params=args) - assert p.sflow_global == 'no' - assert p.sflow_interval == 0 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_interface.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_interface.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_update_interface(self, *args): - set_module_args(dict( - name='1.1', - description='my description', - enabled=False, - bundle='enabled', - bundle_speed='40G', - prefer_port='fixed', - media_fixed='40000-FD', - media_sfp='40000-FD', - forward_error_correction='auto', - lldp_tlvmap=136, - lldp_admin='txrx', - stp_auto_edge_port=False, - stp_link_type='p2p', - sflow=dict( - poll_interval=10, - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=ApiParameters(params=load_fixture('load_interface.json'))) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - assert results['enabled'] == 'no' - assert results['bundle'] == 'enabled' - assert results['bundle_speed'] == '40G' - assert results['prefer_port'] == 'fixed' - assert results['media_fixed'] == '40000-FD' - assert results['media_sfp'] == '40000-FD' - assert results['forward_error_correction'] == 'auto' - assert results['lldp_tlvmap'] == 136 - assert results['lldp_admin'] == 'txrx' - assert results['stp_auto_edge_port'] == 'no' - assert results['stp_link_type'] == 'p2p' - assert results['sflow']['poll_interval'] == 10 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ipsec_policy.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ipsec_policy.py deleted file mode 100644 index ccead70a3..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ipsec_policy.py +++ /dev/null @@ -1,102 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ipsec_policy import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='ipsec1', - ) - p = ModuleParameters(params=args) - assert p.name == 'ipsec1' - - def test_api_parameters(self): - args = dict( - name='ipsec1', - ) - p = ApiParameters(params=args) - assert p.name == 'ipsec1' - - -class TestUntypedManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ipsec_policy.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ipsec_policy.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='ipsec1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_irule.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_irule.py deleted file mode 100644 index 4b93aa8cf..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_irule.py +++ /dev/null @@ -1,254 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six import PY3 - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_irule import ( - Parameters, ModuleManager, ArgumentSpec, GtmManager, LtmManager -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch, mock_open -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class BigIpObj(object): - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - -class TestParameters(unittest.TestCase): - def test_module_parameters_ltm(self): - content = load_fixture('create_ltm_irule.tcl') - args = dict( - content=content, - module='ltm', - name='foo', - state='present' - ) - p = Parameters(params=args) - assert p.content == content - - def test_module_parameters_gtm(self): - content = load_fixture('create_gtm_irule.tcl') - args = dict( - content=content, - module='gtm', - name='foo', - state='present' - ) - p = Parameters(params=args) - assert p.content == content - - def test_api_parameters_ltm(self): - content = load_fixture('create_ltm_irule.tcl') - args = dict( - apiAnonymous=content - ) - p = Parameters(params=args) - assert p.content == content - - def test_return_api_params(self): - content = load_fixture('create_ltm_irule.tcl') - args = dict( - content=content, - module='ltm', - name='foo', - state='present' - ) - p = Parameters(params=args) - params = p.api_params() - - assert 'apiAnonymous' in params - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.ltm_irules = [] - self.gtm_irules = [] - - members = load_fixture('load_ltm_irules.json') - for item in members: - self.ltm_irules.append(BigIpObj(**item)) - - members = load_fixture('load_gtm_irules.json') - for item in members: - self.gtm_irules.append(BigIpObj(**item)) - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_irule.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_irule.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_ltm_irule(self, *args): - set_module_args(dict( - name='foo', - module='ltm', - content='this is my content', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - tm = LtmManager(module=module, params=module.params) - tm.exists = Mock(side_effect=[False, True]) - tm.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['content'] == 'this is my content' - - def test_create_gtm_irule(self, *args): - set_module_args(dict( - name='foo', - module='gtm', - content='this is my content', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - tm = GtmManager(module=module, params=module.params) - tm.exists = Mock(side_effect=[False, True]) - tm.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['content'] == 'this is my content' - - def test_create_gtm_irule_src(self, *args): - set_module_args(dict( - name='foo', - module='gtm', - src='{0}/create_ltm_irule.tcl'.format(fixture_path), - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - if PY3: - builtins_name = 'builtins' - else: - builtins_name = '__builtin__' - - with patch(builtins_name + '.open', mock_open(read_data='this is my content'), create=True): - # Override methods in the specific type of manager - tm = GtmManager(module=module, params=module.params) - tm.exists = Mock(side_effect=[False, True]) - tm.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['content'] == 'this is my content' - assert results['module'] == 'gtm' - assert results['src'] == '{0}/create_ltm_irule.tcl'.format(fixture_path) - assert len(results.keys()) == 4 - - def test_module_mutual_exclusion(self, *args): - set_module_args(dict( - content='foo', - module='ltm', - name='foo', - state='present', - src='/path/to/irules/foo.tcl', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - with patch('ansible.module_utils.basic.AnsibleModule.fail_json', unsafe=True) as mo: - AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - mo.assert_called_once() diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_log_destination.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_log_destination.py deleted file mode 100644 index 110f101da..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_log_destination.py +++ /dev/null @@ -1,117 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_log_destination import ( - ApiParameters, ModuleParameters, ModuleManager, V1Manager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - forward_to='pool1', - syslog_format='rfc5424', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.forward_to == '/Common/pool1' - assert p.syslog_format == 'rfc5424' - - def test_api_parameters(self): - args = load_fixture('load_sys_log_config_destination_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.syslog_format == 'rfc5424' - assert p.forward_to == '/Common/pool1' - - -class TestModuleManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_log_destination.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_log_destination.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_policy(self, *args): - set_module_args(dict( - name="foo", - type='remote-syslog', - forward_to='pool1', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - tm = V1Manager(module=module, params=module.params) - tm.exists = Mock(return_value=False) - tm.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_log_publisher.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_log_publisher.py deleted file mode 100644 index 52870aa30..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_log_publisher.py +++ /dev/null @@ -1,125 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_log_publisher import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my desc', - destinations=[ - 'dest1', - 'dest2' - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my desc' - assert p.destinations == ['/Common/dest1', '/Common/dest2'] - - def test_api_parameters(self): - args = load_fixture('load_sys_log_config_publisher_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.destinations == [ - '/Common/SECURITYLOGSERVERS-LOGGING', - '/Common/local-db', - '/Common/local-syslog', - ] - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_log_publisher.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_log_publisher.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_policy(self, *args): - set_module_args(dict( - name="foo", - description='foo description', - destinations=[ - 'dest1', - 'dest2' - ], - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'foo description' - assert results['destinations'] == ['/Common/dest1', '/Common/dest2'] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ltm_global.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ltm_global.py deleted file mode 100644 index 0de10b39d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ltm_global.py +++ /dev/null @@ -1,133 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2020, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ltm_global import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import ( - Mock, patch -) - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - connection=dict( - default_vs_syn_challenge_tresh=123456, - global_syn_challenge_tresh=0 - ) - ) - p = ModuleParameters(params=args) - assert p.default_vs_syn_challenge_tresh == '123456' - assert p.global_syn_challenge_tresh == 'infinite' - - def test_invalid_vs_syn_value(self): - args = dict( - connection=dict( - default_vs_syn_challenge_tresh=999999999 - ) - ) - p = ModuleParameters(params=args) - with self.assertRaises(F5ModuleError) as res: - assert p.default_vs_syn_challenge_tresh is None - - assert str(res.exception) == 'Specified number is out of valid range, correct range is ' \ - 'between 128 and 1048576, or 0 for infinite.' - - def test_invalid_global_syn_value(self): - args = dict( - connection=dict( - global_syn_challenge_tresh=999999999 - ) - ) - p = ModuleParameters(params=args) - with self.assertRaises(F5ModuleError) as res: - assert p.global_syn_challenge_tresh is None - - assert str(res.exception) == 'Specified number is out of valid range, correct range is ' \ - 'between 2048 and 4194304, or 0 for infinite.' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ltm_global.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ltm_global.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_update_parameters(self, *args): - set_module_args(dict( - connection=dict( - default_vs_syn_challenge_tresh=123456, - global_syn_challenge_tresh=1244 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_global_settings_general.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['default_vs_syn_challenge_tresh'] == 123456 - assert results['global_syn_challenge_tresh'] == 1244 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_lx_package.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_lx_package.py deleted file mode 100644 index 9a94e5352..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_lx_package.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_lx_package import ( - Parameters, ArgumentSpec, ModuleManager -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - package='MyApp-0.1.0-0001.noarch.rpm', - state='present' - ) - p = Parameters(params=args) - assert p.package == 'MyApp-0.1.0-0001.noarch.rpm' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_lx_package.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '12.1.3' - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_lx_package.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.patcher1.stop() - - def test_create_iapp_template(self, *args): - package_name = os.path.join(fixture_path, 'MyApp-0.1.0-0001.noarch.rpm') - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - package=package_name, - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.check_file_exists_on_device = Mock(return_value=False) - mm.upload_to_device = Mock(return_value=True) - mm.enable_iapplx_on_device = Mock(return_value=True) - mm.retain_package_file = Mock(return_value=False) - mm.remove_package_file_from_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_management_route.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_management_route.py deleted file mode 100644 index 61be483e0..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_management_route.py +++ /dev/null @@ -1,117 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_management_route import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - gateway='1.1.1.1', - network='default', - description='my description' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.gateway == '1.1.1.1' - assert p.network == 'default' - assert p.description == 'my description' - - def test_api_parameters(self): - args = load_fixture('load_sys_management_route_1.json') - - p = ApiParameters(params=args) - assert p.name == 'default' - assert p.gateway == '10.0.2.2' - assert p.network == 'default' - assert p.description == 'configured-by-dhcp' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_management_route.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_management_route.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - gateway='1.1.1.1', - network='default', - description='my description', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['gateway'] == '1.1.1.1' - assert results['network'] == 'default' - assert results['description'] == 'my description' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_peer.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_peer.py deleted file mode 100644 index 98a661e93..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_peer.py +++ /dev/null @@ -1,186 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_peer import ( - ApiParameters, ModuleParameters, ModuleManager, GenericModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - partition='foobar', - description='my description', - auto_init='yes', - auto_init_interval=1234, - connection_mode='per-peer', - number_of_connections=20, - pool='/Common/example', - ratio=10, - transport_config='/Common/virtual' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.partition == 'foobar' - assert p.description == 'my description' - assert p.auto_init == 'enabled' - assert p.auto_init_interval == 1234 - assert p.connection_mode == 'per-peer' - assert p.number_of_connections == 20 - assert p.pool == '/Common/example' - assert p.ratio == 10 - assert p.transport_config == '/Common/virtual' - - def test_api_parameters(self): - args = load_fixture('load_generic_peer.json') - - p = ApiParameters(params=args) - assert p.name == 'test' - assert p.partition == 'Common' - assert p.description == 'foobar' - assert p.auto_init == 'disabled' - assert p.auto_init_interval == 5000 - assert p.connection_mode == 'per-peer' - assert p.number_of_connections == 1 - assert p.pool == '/Common/example' - assert p.ratio == 1 - assert p.transport_config == '/Common/test_tranport' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_peer.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_peer.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_generic_peer(self, *args): - set_module_args(dict( - name='foo', - partition='foobar', - description='my description', - auto_init='yes', - auto_init_interval=1234, - connection_mode='per-peer', - number_of_connections=20, - pool='/Common/example', - ratio=10, - transport_config='/Common/virtual', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=False) - gm.create_on_device = Mock(return_value=True) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['auto_init'] == 'yes' - assert results['description'] == 'my description' - assert results['auto_init_interval'] == 1234 - assert results['connection_mode'] == 'per-peer' - assert results['number_of_connections'] == 20 - assert results['pool'] == '/Common/example' - assert results['ratio'] == 10 - assert results['transport_config'] == '/Common/virtual' - - def test_update_generic_peer(self, *args): - set_module_args(dict( - name='test', - auto_init_interval=3000, - ratio=120, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_generic_peer.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=True) - gm.update_on_device = Mock(return_value=True) - gm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['auto_init_interval'] == 3000 - assert results['ratio'] == 120 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_protocol.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_protocol.py deleted file mode 100644 index 96f3a5e62..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_protocol.py +++ /dev/null @@ -1,173 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_protocol import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - partition='foobar', - description='my description', - parent='barfoo', - disable_parser=True, - max_egress_buffer=10000, - max_msg_size=2000, - msg_terminator='%%%%', - no_response=False, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.partition == 'foobar' - assert p.description == 'my description' - assert p.parent == '/foobar/barfoo' - assert p.disable_parser == 'yes' - assert p.max_egress_buffer == 10000 - assert p.max_msg_size == 2000 - assert p.msg_terminator == '%%%%' - assert p.no_response == 'no' - - def test_api_parameters(self): - args = load_fixture('load_generic_parser.json') - - p = ApiParameters(params=args) - assert p.name == 'foobar' - assert p.partition == 'Common' - assert p.parent == '/Common/genericmsg' - assert p.disable_parser == 'no' - assert p.max_egress_buffer == 32768 - assert p.max_msg_size == 32768 - assert p.no_response == 'no' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_protocol.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_protocol.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_generic_protocol(self, *args): - set_module_args(dict( - name='foo', - partition='foobar', - description='my description', - parent='barfoo', - disable_parser=True, - max_egress_buffer=10000, - max_msg_size=2000, - msg_terminator='%%%%', - no_response=False, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.version_less_than_14 = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - assert results['parent'] == '/foobar/barfoo' - assert results['disable_parser'] == 'yes' - assert results['max_egress_buffer'] == 10000 - assert results['max_msg_size'] == 2000 - assert results['msg_terminator'] == '%%%%' - assert results['no_response'] == 'no' - - def test_update_generic_protocol(self, *args): - set_module_args(dict( - name='foobar', - disable_parser=True, - max_egress_buffer=10000, - max_msg_size=2000, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_generic_parser.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.version_less_than_14 = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['disable_parser'] == 'yes' - assert results['max_egress_buffer'] == 10000 - assert results['max_msg_size'] == 2000 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_route.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_route.py deleted file mode 100644 index 9ecfa25f7..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_route.py +++ /dev/null @@ -1,170 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_route import ( - ApiParameters, ModuleParameters, ModuleManager, GenericModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - partition='foobar', - description='my description', - dst_address='some_destination', - src_address='some_address', - peer_selection_mode='ratio', - peers=['/Common/example'] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.partition == 'foobar' - assert p.description == 'my description' - assert p.dst_address == 'some_destination' - assert p.src_address == 'some_address' - assert p.peer_selection_mode == 'ratio' - assert p.peers == ['/Common/example'] - - def test_api_parameters(self): - args = load_fixture('load_generic_route.json') - - p = ApiParameters(params=args) - assert p.name == 'some' - assert p.partition == 'Common' - assert p.dst_address == 'annoying_user' - assert p.src_address == '99.99.99.99' - assert p.peer_selection_mode == 'sequential' - assert p.peers == ['/Common/testy'] - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_route.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_route.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_generic_route(self, *args): - set_module_args(dict( - name='some', - partition='foobar', - description='my description', - dst_address='some_destination', - src_address='some_address', - peer_selection_mode='ratio', - peers=['/Common/example'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=False) - gm.create_on_device = Mock(return_value=True) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - assert results['dst_address'] == 'some_destination' - assert results['src_address'] == 'some_address' - assert results['peer_selection_mode'] == 'ratio' - assert results['peers'] == ['/Common/example'] - - def test_update_generic_peer(self, *args): - set_module_args(dict( - name='some', - dst_address="blackhole", - peer_selection_mode='ratio', - peers=['/Common/example'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_generic_route.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=True) - gm.update_on_device = Mock(return_value=True) - gm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['dst_address'] == 'blackhole' - assert results['peer_selection_mode'] == 'ratio' - assert results['peers'] == ['/Common/example'] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_router.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_router.py deleted file mode 100644 index e379a7ab0..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_router.py +++ /dev/null @@ -1,198 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_router import ( - ApiParameters, ModuleParameters, ModuleManager, GenericModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - partition='foobar', - description='my description', - ignore_client_port='no', - inherited_traffic_group='yes', - use_local_connection='no', - max_pending_bytes=20000, - max_pending_messages=300, - max_retries=32, - mirror='yes', - mirrored_msg_sweeper_interval=3000, - routes=['test1', 'test2'], - traffic_group='footraffic', - ) - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.partition == 'foobar' - assert p.description == 'my description' - assert p.ignore_client_port == 'no' - assert p.inherited_traffic_group == 'true' - assert p.use_local_connection == 'no' - assert p.max_pending_bytes == 20000 - assert p.max_pending_messages == 300 - assert p.max_retries == 32 - assert p.mirror == 'enabled' - assert p.mirrored_msg_sweeper_interval == 3000 - assert p.routes == ['/foobar/test1', '/foobar/test2'] - assert p.traffic_group == '/Common/footraffic' - - def test_api_parameters(self): - args = load_fixture('load_generic_router.json') - - p = ApiParameters(params=args) - assert p.name == 'messagerouter' - assert p.partition == 'Common' - assert p.ignore_client_port == 'no' - assert p.inherited_traffic_group == 'true' - assert p.use_local_connection == 'yes' - assert p.max_pending_bytes == 23768 - assert p.max_pending_messages == 64 - assert p.max_retries == 1 - assert p.mirror == 'disabled' - assert p.mirrored_msg_sweeper_interval == 1000 - assert p.traffic_group == '/Common/traffic-group-1' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_router.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_router.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_generic_router(self, *args): - set_module_args(dict( - name='foo', - partition='foobar', - description='my description', - ignore_client_port='no', - inherited_traffic_group='yes', - use_local_connection='no', - max_pending_bytes=20000, - max_pending_messages=300, - max_retries=32, - mirror='yes', - mirrored_msg_sweeper_interval=3000, - routes=['test1', 'test2'], - traffic_group='footraffic', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=False) - gm.create_on_device = Mock(return_value=True) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - assert results['ignore_client_port'] == 'no' - assert results['inherited_traffic_group'] == 'yes' - assert results['use_local_connection'] == 'no' - assert results['max_pending_bytes'] == 20000 - assert results['max_pending_messages'] == 300 - assert results['max_retries'] == 32 - assert results['mirror'] == 'yes' - assert results['mirrored_msg_sweeper_interval'] == 3000 - assert results['traffic_group'] == '/Common/footraffic' - assert results['routes'] == ['/foobar/test1', '/foobar/test2'] - - def test_update_generic_router(self, *args): - set_module_args(dict( - name='messagerouter', - use_local_connection='no', - mirror='yes', - routes=['/Common/example'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_generic_router.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=True) - gm.update_on_device = Mock(return_value=True) - gm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['use_local_connection'] == 'no' - assert results['mirror'] == 'yes' - assert results['routes'] == ['/Common/example'] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_transport_config.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_transport_config.py deleted file mode 100644 index f2a3e15db..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_message_routing_transport_config.py +++ /dev/null @@ -1,175 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_transport_config import ( - ApiParameters, ModuleParameters, ModuleManager, GenericModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - partition='foobar', - description='my description', - profiles=['genericmsg', 'foo_udp'], - src_addr_translation=dict( - type='snat', - pool='some_pool1' - ), - src_port=1023, - rules=['rule1', 'rule2'], - ) - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.partition == 'foobar' - assert p.description == 'my description' - assert p.profiles == ['/foobar/genericmsg', '/foobar/foo_udp'] - assert p.snat_type == 'snat' - assert p.snat_pool == '/foobar/some_pool1' - assert p.src_port == 1023 - assert p.rules == ['/foobar/rule1', '/foobar/rule2'] - - def test_api_parameters(self): - args = load_fixture('load_generic_transport_config.json') - - p = ApiParameters(params=args) - assert p.name == 'gen1' - assert p.partition == 'Common' - assert p.profiles == ['/Common/diametersession', '/Common/tcp'] - assert p.snat_type == 'snat' - assert p.src_port == 0 - assert p.snat_pool == '/Common/test_snat' - assert p.rules == ['/Common/test'] - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_transport_config.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_message_routing_transport_config.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_generic_transport(self, *args): - set_module_args(dict( - name='foo', - partition='foobar', - description='my description', - profiles=['genericmsg', 'foo_udp'], - src_addr_translation=dict( - type='snat', - pool='some_pool1' - ), - src_port=1023, - rules=['rule1', 'rule2'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=False) - gm.create_on_device = Mock(return_value=True) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - assert results['src_addr_translation'] == dict(type='snat', pool='/foobar/some_pool1') - assert results['src_port'] == 1023 - assert results['rules'] == ['/foobar/rule1', '/foobar/rule2'] - assert results['profiles'] == ['/foobar/genericmsg', '/foobar/foo_udp'] - - def test_update_generic_transport(self, *args): - set_module_args(dict( - name='gen1', - src_port=1024, - rules=['/Common/barfoo'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_generic_transport_config.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=True) - gm.update_on_device = Mock(return_value=True) - gm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['src_port'] == 1024 - assert results['rules'] == ['/Common/barfoo'] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_dns.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_dns.py deleted file mode 100644 index 6094ded74..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_dns.py +++ /dev/null @@ -1,149 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_dns import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - parent='/Common/dns', - interval=10, - time_until_up=0, - timeout=30, - ) - - p = ModuleParameters(params=args) - assert p.parent == '/Common/dns' - assert p.interval == 10 - assert p.time_until_up == 0 - assert p.timeout == 30 - - def test_api_parameters(self): - args = dict( - defaultsFrom='/Common/dns', - interval=10, - timeUntilUp=0, - timeout=30, - ) - - p = ApiParameters(params=args) - assert p.parent == '/Common/dns' - assert p.interval == 10 - assert p.time_until_up == 0 - assert p.timeout == 30 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_dns.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_dns.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - parent='/Common/dns', - query_name='foo', - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_with_description(self, *args): - set_module_args(dict( - name='foo', - parent='/Common/dns', - query_name='foo', - interval=20, - timeout=30, - time_until_up=60, - description='Important Description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_external.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_external.py deleted file mode 100644 index 17f6a3274..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_external.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_external import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.type == 'external' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_external.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_external.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['parent'] == '/Common/parent' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_ftp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_ftp.py deleted file mode 100644 index 60a93e0b6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_ftp.py +++ /dev/null @@ -1,183 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_ftp import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - app_service='my.app.foo', - parent='parent', - description='my descr', - debug=True, - mode='port', - filename='/ftp/var/health.txt', - target_username='admin', - target_password='sekrit', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - up_interval=15, - manual_resume=True, - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.app_service == 'my.app.foo' - assert p.description == 'my descr' - assert p.debug == 'enabled' - assert p.ip == '10.10.10.10' - assert p.target_username == 'admin' - assert p.target_password == 'sekrit' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - assert p.up_interval == 15 - assert p.manual_resume == 'enabled' - - def test_api_parameters(self): - args = load_fixture('load_ltm_monitor_ftp.json') - p = ApiParameters(params=args) - assert p.name == 'foo_ftp' - assert p.destination == '*:*' - assert p.ip == '*' - assert p.port == '*' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_ftp.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_ftp.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_ftp_monitor(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo_ftp', - parent='ftp_parent', - description='description one', - debug='yes', - mode='port', - filename='/ftp/var/health.txt', - target_username='admin', - target_password='sekrit', - ip='10.10.10.10', - port=80, - manual_resume='no', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'description one' - assert results['debug'] == 'yes' - assert results['parent'] == '/Common/ftp_parent' - assert results['mode'] == 'port' - assert results['manual_resume'] == 'no' - - def test_update_ftp_monitor(self, *args): - set_module_args(dict( - name='foo_ftp', - debug='no', - mode='passive', - ip='15.15.15.1', - port=8080, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_profile_ftp.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['debug'] == 'no' - assert results['mode'] == 'passive' - assert results['ip'] == '15.15.15.1' - assert results['port'] == 8080 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_gateway_icmp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_gateway_icmp.py deleted file mode 100644 index d1b1f6bbc..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_gateway_icmp.py +++ /dev/null @@ -1,148 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_gateway_icmp import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - parent='/Common/gateway-icmp', - interval=10, - time_until_up=0, - timeout=30, - ) - - p = ModuleParameters(params=args) - assert p.parent == '/Common/gateway-icmp' - assert p.interval == 10 - assert p.time_until_up == 0 - assert p.timeout == 30 - - def test_api_parameters(self): - args = dict( - defaultsFrom='/Common/gateway-icmp', - interval=10, - timeUntilUp=0, - timeout=30, - ) - - p = ApiParameters(params=args) - assert p.parent == '/Common/gateway-icmp' - assert p.interval == 10 - assert p.time_until_up == 0 - assert p.timeout == 30 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_gateway_icmp.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_gateway_icmp.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - parent='/Common/gateway-icmp', - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_with_description(self, *args): - set_module_args(dict( - name='foo', - parent='/Common/gateway-icmp', - interval=20, - timeout=30, - time_until_up=60, - description='Important Description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_http.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_http.py deleted file mode 100644 index 7af20bfdc..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_http.py +++ /dev/null @@ -1,446 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_http import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - up_interval=10, - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'http' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - assert p.up_interval == 10 - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port='80', - interval='20', - timeout='30', - time_until_up='60', - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'http' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - send='this is a send string', - recv='this is a receive string', - destination='10.10.10.10:80', - interval=20, - timeout=30, - timeUntilUp=60 - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'http' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_http.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_http.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['parent'] == '/Common/parent' - - def test_create_monitor_idempotent(self, *args): - set_module_args(dict( - name='asdf', - parent='http', - send='GET /\\r\\n', - receive='hello world', - ip='1.1.1.1', - port=389, - interval=5, - timeout=16, - time_until_up=0, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_port(self, *args): - set_module_args(dict( - name='asdf', - port=800, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['port'] == 800 - - def test_update_interval(self, *args): - set_module_args(dict( - name='foo', - interval=10, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['interval'] == 10 - - def test_update_interval_larger_than_existing_timeout(self, *args): - set_module_args(dict( - name='asdf', - interval=30, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_interval_larger_than_new_timeout(self, *args): - set_module_args(dict( - name='asdf', - interval=10, - timeout=5, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_send(self, *args): - set_module_args(dict( - name='asdf', - send='this is another send string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['send'] == 'this is another send string' - - def test_update_receive(self, *args): - set_module_args(dict( - name='asdf', - receive='this is another receive string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['receive'] == 'this is another receive string' - - def test_update_timeout(self, *args): - set_module_args(dict( - name='asdf', - timeout=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['timeout'] == 300 - - def test_update_time_until_up(self, *args): - set_module_args(dict( - name='asdf', - time_until_up=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['time_until_up'] == 300 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_https.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_https.py deleted file mode 100644 index 3dd6aacd4..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_https.py +++ /dev/null @@ -1,444 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_https import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'https' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port='80', - interval='20', - timeout='30', - time_until_up='60', - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'https' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - send='this is a send string', - recv='this is a receive string', - destination='10.10.10.10:80', - interval=20, - timeout=30, - timeUntilUp=60 - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'https' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_https.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_https.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['parent'] == '/Common/parent' - - def test_create_monitor_idempotent(self, *args): - set_module_args(dict( - name='asdf', - parent='https', - send='GET /\\r\\n', - receive='hello world', - ip='1.1.1.1', - port=389, - interval=5, - timeout=16, - time_until_up=0, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_port(self, *args): - set_module_args(dict( - name='asdf', - port=800, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['port'] == 800 - - def test_update_interval(self, *args): - set_module_args(dict( - name='foo', - interval=10, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['interval'] == 10 - - def test_update_interval_larger_than_existing_timeout(self, *args): - set_module_args(dict( - name='asdf', - interval=30, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_interval_larger_than_new_timeout(self, *args): - set_module_args(dict( - name='asdf', - interval=10, - timeout=5, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_send(self, *args): - set_module_args(dict( - name='asdf', - send='this is another send string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['send'] == 'this is another send string' - - def test_update_receive(self, *args): - set_module_args(dict( - name='asdf', - receive='this is another receive string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['receive'] == 'this is another receive string' - - def test_update_timeout(self, *args): - set_module_args(dict( - name='asdf', - timeout=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['timeout'] == 300 - - def test_update_time_until_up(self, *args): - set_module_args(dict( - name='asdf', - time_until_up=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['time_until_up'] == 300 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_icmp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_icmp.py deleted file mode 100644 index 92f39faf9..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_icmp.py +++ /dev/null @@ -1,148 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_icmp import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - parent='/Common/icmp', - interval=10, - time_until_up=0, - timeout=30, - ) - - p = ModuleParameters(params=args) - assert p.parent == '/Common/icmp' - assert p.interval == 10 - assert p.time_until_up == 0 - assert p.timeout == 30 - - def test_api_parameters(self): - args = dict( - defaultsFrom='/Common/icmp', - interval=10, - timeUntilUp=0, - timeout=30, - ) - - p = ApiParameters(params=args) - assert p.parent == '/Common/icmp' - assert p.interval == 10 - assert p.time_until_up == 0 - assert p.timeout == 30 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_icmp.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_icmp.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - parent='/Common/icmp', - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_with_description(self, *args): - set_module_args(dict( - name='foo', - parent='/Common/icmp', - interval=20, - timeout=30, - time_until_up=60, - description='Important Description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_ldap.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_ldap.py deleted file mode 100644 index b2b463ffd..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_ldap.py +++ /dev/null @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_ldap import ( - ApiParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - parent='/Common/ldap', - interval=10, - time_until_up=0, - timeout=30, - ) - - p = ApiParameters(params=args) - assert p.parent == '/Common/ldap' - assert p.interval == 10 - assert p.time_until_up == 0 - assert p.timeout == 30 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_ldap.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_ldap.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - parent='/Common/ldap', - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_mysql.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_mysql.py deleted file mode 100644 index d00d05df5..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_mysql.py +++ /dev/null @@ -1,146 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_mysql import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - parent='/Common/mysql', - interval=5, - timeout=120, - time_until_up=20, - target_username='foobar', - send='SELECT * from v$instance1', - database='instance1', - recv='OPEN', - recv_column='1', - recv_row='1', - count=10, - manual_resume=True, - debug=True - ) - p = ModuleParameters(params=args) - assert p.parent == '/Common/mysql' - assert p.interval == 5 - assert p.timeout == 120 - assert p.time_until_up == 20 - assert p.target_username == 'foobar' - assert p.send == 'SELECT * from v$instance1' - assert p.recv == 'OPEN' - assert p.count == 10 - assert p.recv_column == '1' - assert p.recv_row == '1' - assert p.manual_resume == 'enabled' - assert p.debug == 'yes' - - def test_api_parameters(self): - args = load_fixture('load_bigip_monitor_mysql.json') - p = ApiParameters(params=args) - assert p.parent == '/Common/mysql' - assert p.ip == '1.1.1.1' - assert p.port == '30025' - assert p.time_until_up == 0 - assert p.up_interval == 0 - assert p.manual_resume == 'disabled' - assert p.target_username == 'some_user' - assert p.timeout == 60 - assert p.count == 0 - assert p.send == 'this is send string' - assert p.recv == 'this is recv string' - assert p.recv_column == '1' - assert p.recv_row == '2' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_mysql.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_mysql.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='mysqdb', - parent='/Common/mysql', - interval=10, - timeout=30, - time_until_up=5, - target_username='foobar', - send='SELECT * from v$instance1', - database='instance1', - recv='OPEN', - recv_column='1', - recv_row='1', - count=10, - manual_resume=True, - debug=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_oracle.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_oracle.py deleted file mode 100644 index 925c79554..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_oracle.py +++ /dev/null @@ -1,160 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_oracle import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - parent='/Common/oracle', - interval=5, - timeout=120, - time_until_up=20, - target_username='foobar', - send='SELECT * from v$instance1', - database='instance1', - recv='OPEN', - recv_column='1', - recv_row='1', - count=10, - manual_resume=True, - debug=True - ) - p = ModuleParameters(params=args) - assert p.parent == '/Common/oracle' - assert p.interval == 5 - assert p.timeout == 120 - assert p.time_until_up == 20 - assert p.target_username == 'foobar' - assert p.send == 'SELECT * from v$instance1' - assert p.recv == 'OPEN' - assert p.count == 10 - assert p.recv_column == '1' - assert p.recv_row == '1' - assert p.manual_resume == 'enabled' - assert p.debug == 'yes' - - def test_api_parameters(self): - args = load_fixture('load_oracle_monitor.json') - p = ApiParameters(params=args) - assert p.parent == '/Common/oracle' - assert p.ip == '*' - assert p.port == '*' - assert p.time_until_up == 0 - assert p.up_interval == 0 - assert p.manual_resume == 'disabled' - assert p.target_username == 'user' - assert p.timeout == 91 - assert p.count == 1 - assert p.send == 'foo' - assert p.recv == 'bar' - assert p.recv_column == '3' - assert p.recv_row == '2' - assert p.debug == 'no' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_oracle.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_oracle.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='oracledb', - parent='/Common/oracle', - interval=10, - timeout=30, - time_until_up=5, - target_username='foobar', - send='SELECT * from v$instance1', - database='instance1', - recv='OPEN', - recv_column='1', - recv_row='1', - count=10, - manual_resume=True, - debug=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['parent'] == '/Common/oracle' - assert results['interval'] == 10 - assert results['timeout'] == 30 - assert results['time_until_up'] == 5 - assert results['target_username'] == 'foobar' - assert results['send'] == 'SELECT * from v$instance1' - assert results['recv'] == 'OPEN' - assert results['count'] == 10 - assert results['recv_column'] == '1' - assert results['recv_row'] == '1' - assert results['manual_resume'] == 'yes' - assert results['debug'] == 'yes' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_smtp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_smtp.py deleted file mode 100644 index ebc995040..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_smtp.py +++ /dev/null @@ -1,174 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_smtp import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - app_service='my.app.foo', - parent='parent', - description='my descr', - debug=True, - domain='baz.com', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - up_interval=15, - manual_resume=True, - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.app_service == 'my.app.foo' - assert p.description == 'my descr' - assert p.debug == 'enabled' - assert p.domain == 'baz.com' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - assert p.up_interval == 15 - assert p.manual_resume == 'enabled' - - def test_api_parameters(self): - args = load_fixture('load_ltm_monitor_smtp.json') - p = ApiParameters(params=args) - assert p.name == 'foo_smtp' - assert p.destination == '11.2.2.1:554' - assert p.ip == '11.2.2.1' - assert p.port == 554 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_smtp.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_smtp.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_smtp_monitor(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo_smtp', - parent='smtp_parent', - description='description one', - debug='yes', - domain='baz.com', - ip='10.10.10.10', - port=80, - manual_resume='no', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'description one' - assert results['debug'] == 'yes' - assert results['parent'] == '/Common/smtp_parent' - assert results['domain'] == 'baz.com' - assert results['manual_resume'] == 'no' - - def test_update_smtp_monitor(self, *args): - set_module_args(dict( - name='foo_ftp', - domain='baz.com', - ip='15.15.15.1', - port=8080, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_profile_ftp.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['domain'] == 'baz.com' - assert results['ip'] == '15.15.15.1' - assert results['port'] == 8080 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_snmp_dca.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_snmp_dca.py deleted file mode 100644 index 31b90ba5f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_snmp_dca.py +++ /dev/null @@ -1,170 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_snmp_dca import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - agent_type='UCD', - community='public', - cpu_coefficient='1.5', - cpu_threshold='80', - parent='/Common/snmp_dca', - disk_coefficient='2.0', - disk_threshold='90', - interval=10, - memory_coefficient='1.0', - memory_threshold='70', - time_until_up=0, - timeout=30, - version='v1' - ) - - p = Parameters(params=args) - assert p.agent_type == 'UCD' - assert p.community == 'public' - assert p.cpu_coefficient == 1.5 - assert p.cpu_threshold == 80 - assert p.parent == '/Common/snmp_dca' - assert p.disk_coefficient == 2.0 - assert p.disk_threshold == 90 - assert p.interval == 10 - assert p.memory_coefficient == 1.0 - assert p.memory_threshold == 70 - assert p.time_until_up == 0 - assert p.timeout == 30 - assert p.version == 'v1' - - def test_api_parameters(self): - args = dict( - agentType='UCD', - community='public', - cpuCoefficient='1.5', - cpuThreshold='80', - defaultsFrom='/Common/snmp_dca', - diskCoefficient='2.0', - diskThreshold='90', - interval=10, - memoryCoefficient='1.0', - memoryThreshold='70', - timeUntilUp=0, - timeout=30, - apiRawValues={ - "userDefined asdasd": "{ foo }", - "userDefined bar": "tim rupp", - "user-defined baz-": "nia", - "userDefined userDefined": "23234" - }, - version='v1' - ) - - p = Parameters(params=args) - assert p.agent_type == 'UCD' - assert p.community == 'public' - assert p.cpu_coefficient == 1.5 - assert p.cpu_threshold == 80 - assert p.parent == '/Common/snmp_dca' - assert p.disk_coefficient == 2.0 - assert p.disk_threshold == 90 - assert p.interval == 10 - assert p.memory_coefficient == 1.0 - assert p.memory_threshold == 70 - assert p.time_until_up == 0 - assert p.timeout == 30 - assert p.version == 'v1' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_snmp_dca.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_snmp_dca.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - agent_type='UCD', - community='public', - cpu_coefficient='1.5', - cpu_threshold='80', - parent='/Common/snmp_dca', - disk_coefficient='2.0', - disk_threshold='90', - memory_coefficient='1.0', - memory_threshold='70', - version='v1', - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_tcp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_tcp.py deleted file mode 100644 index 3d5acc0d4..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_tcp.py +++ /dev/null @@ -1,446 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_tcp import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - type='TTYPE_TCP', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'tcp' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - type='TTYPE_TCP', - port='80', - interval='20', - timeout='30', - time_until_up='60', - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'tcp' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - send='this is a send string', - recv='this is a receive string', - destination='10.10.10.10:80', - interval=20, - timeout=30, - timeUntilUp=60 - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'tcp' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_tcp.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_tcp.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['parent'] == '/Common/parent' - - def test_create_monitor_idempotent(self, *args): - set_module_args(dict( - name='foo', - parent='tcp', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_port(self, *args): - set_module_args(dict( - name='foo', - port=800, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['port'] == 800 - - def test_update_interval(self, *args): - set_module_args(dict( - name='foo', - interval=10, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['interval'] == 10 - - def test_update_interval_larger_than_existing_timeout(self, *args): - set_module_args(dict( - name='foo', - interval=30, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_interval_larger_than_new_timeout(self, *args): - set_module_args(dict( - name='foo', - interval=10, - timeout=5, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_send(self, *args): - set_module_args(dict( - name='foo', - send='this is another send string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['send'] == 'this is another send string' - - def test_update_receive(self, *args): - set_module_args(dict( - name='foo', - receive='this is another receive string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['receive'] == 'this is another receive string' - - def test_update_timeout(self, *args): - set_module_args(dict( - name='foo', - timeout=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['timeout'] == 300 - - def test_update_time_until_up(self, *args): - set_module_args(dict( - name='foo', - time_until_up=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['time_until_up'] == 300 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_tcp_echo.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_tcp_echo.py deleted file mode 100644 index 63d79b1af..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_tcp_echo.py +++ /dev/null @@ -1,323 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_tcp_echo import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - interval=20, - timeout=30, - time_until_up=60, - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.type == 'tcp_echo' - assert p.destination == '10.10.10.10' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - interval='20', - timeout='30', - time_until_up='60', - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.type == 'tcp_echo' - assert p.destination == '10.10.10.10' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - destination='10.10.10.10', - interval=20, - timeout=30, - timeUntilUp=60 - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.type == 'tcp_echo' - assert p.destination == '10.10.10.10' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - -class TestManagerEcho(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_tcp_echo.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_tcp_echo.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_monitor_idempotent(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_echo.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_interval(self, *args): - set_module_args(dict( - name='foo', - interval=10, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_echo.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['interval'] == 10 - - def test_update_interval_larger_than_existing_timeout(self, *args): - set_module_args(dict( - name='foo', - interval=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_echo.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_interval_larger_than_new_timeout(self, *args): - set_module_args(dict( - name='foo', - interval=10, - timeout=5, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_echo.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_timeout(self, *args): - set_module_args(dict( - name='foo', - timeout=300, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_echo.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - assert results['timeout'] == 300 - - def test_update_time_until_up(self, *args): - set_module_args(dict( - name='foo', - time_until_up=300, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_echo.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['time_until_up'] == 300 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_tcp_half_open.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_tcp_half_open.py deleted file mode 100644 index 25ffa6c1b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_tcp_half_open.py +++ /dev/null @@ -1,330 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_tcp_half_open import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'tcp_half_open' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval='20', - timeout='30', - time_until_up='60', - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'tcp_half_open' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - destination='10.10.10.10:80', - interval=20, - timeout=30, - timeUntilUp=60 - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'tcp_half_open' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_tcp_half_open.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_tcp_half_open.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_monitor_idempotent(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_half_open.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_interval(self, *args): - set_module_args(dict( - name='foo', - interval=10, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_half_open.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['interval'] == 10 - - def test_update_interval_larger_than_existing_timeout(self, *args): - set_module_args(dict( - name='foo', - interval=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_half_open.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_interval_larger_than_new_timeout(self, *args): - set_module_args(dict( - name='foo', - interval=10, - timeout=5, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_half_open.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_timeout(self, *args): - set_module_args(dict( - name='foo', - timeout=300, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_half_open.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - assert results['timeout'] == 300 - - def test_update_time_until_up(self, *args): - set_module_args(dict( - name='foo', - time_until_up=300, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_half_open.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['time_until_up'] == 300 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_udp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_udp.py deleted file mode 100644 index de917e03c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_monitor_udp.py +++ /dev/null @@ -1,444 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_udp import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'udp' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port='80', - interval='20', - timeout='30', - time_until_up='60', - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'udp' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - send='this is a send string', - recv='this is a receive string', - destination='10.10.10.10:80', - interval=20, - timeout=30, - timeUntilUp=60 - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'udp' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_udp.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_monitor_udp.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['parent'] == '/Common/parent' - - def test_create_monitor_idempotent(self, *args): - set_module_args(dict( - name='asdf', - parent='udp', - send='default send string', - receive='hello world', - ip='1.1.1.1', - port=389, - interval=5, - timeout=16, - time_until_up=0, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_port(self, *args): - set_module_args(dict( - name='asdf', - port=800, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['port'] == 800 - - def test_update_interval(self, *args): - set_module_args(dict( - name='foo', - interval=10, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['interval'] == 10 - - def test_update_interval_larger_than_existing_timeout(self, *args): - set_module_args(dict( - name='asdf', - interval=30, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_interval_larger_than_new_timeout(self, *args): - set_module_args(dict( - name='asdf', - interval=10, - timeout=5, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_send(self, *args): - set_module_args(dict( - name='asdf', - send='this is another send string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['send'] == 'this is another send string' - - def test_update_receive(self, *args): - set_module_args(dict( - name='asdf', - receive='this is another receive string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['receive'] == 'this is another receive string' - - def test_update_timeout(self, *args): - set_module_args(dict( - name='asdf', - timeout=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['timeout'] == 300 - - def test_update_time_until_up(self, *args): - set_module_args(dict( - name='asdf', - time_until_up=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['time_until_up'] == 300 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_network_globals.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_network_globals.py deleted file mode 100644 index 3fd68edb6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_network_globals.py +++ /dev/null @@ -1,262 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_network_globals import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - stp=dict( - config_name='foobar', - config_revision=1, - description='description', - fwd_delay=16, - hello_time=2, - max_age=6, - max_hops=2, - mode='mstp', - transmit_hold=1 - ), - multicast=dict( - max_pending_packets=2000, - max_pending_routes=200, - rate_limit=True, - route_lookup_timeout=80000, - ), - dag=dict( - round_robin_mode='local', - dag_ipv6_prefix_len=64, - icmp_hash='ipicmp', - ), - lldp=dict( - enabled=True, - max_neighbors_per_port=200, - reinit_delay=1000, - tx_delay=1500, - tx_hold=200, - tx_interval=100 - ) - ) - p = ModuleParameters(params=args) - assert p.stp_config_name == 'foobar' - assert p.stp_config_revision == 1 - assert p.stp_description == 'description' - assert p.stp_fwd_delay == 16 - assert p.stp_hello_time == 2 - assert p.stp_max_age == 6 - assert p.stp_max_hops == 2 - assert p.stp_mode == 'mstp' - assert p.stp_transmit_hold == 1 - assert p.mcast_max_pending_packets == 2000 - assert p.mcast_max_pending_routes == 200 - assert p.mcast_rate_limit == 'enabled' - assert p.mcast_route_lookup_timeout == 80000 - assert p.dag_round_robin_mode == 'local' - assert p.dag_ipv6_prefix_len == 64 - assert p.dag_icmp_hash == 'ipicmp' - assert p.lldp_enabled is True - assert p.lldp_disabled is None - assert p.lldp_max_neighbors_per_port == 200 - assert p.lldp_reinit_delay == 1000 - assert p.lldp_tx_delay == 1500 - assert p.lldp_tx_hold == 200 - assert p.lldp_tx_interval == 100 - - def test_api_parameters(self): - args = dict( - stp=load_fixture('load_stp_globals.json'), - multicast=load_fixture('load_mcast_globals.json'), - dag=load_fixture('load_dag_globals.json'), - lldp=load_fixture('load_lldp_globals.json') - ) - - p = ApiParameters(params=args) - - assert p.stp_config_name is None - assert p.stp_config_revision == 0 - assert p.stp_description is None - assert p.stp_fwd_delay == 15 - assert p.stp_hello_time == 2 - assert p.stp_max_age == 20 - assert p.stp_max_hops == 20 - assert p.stp_mode == 'passthru' - assert p.stp_transmit_hold == 6 - assert p.mcast_max_pending_packets == 16 - assert p.mcast_max_pending_routes == 256 - assert p.mcast_rate_limit == 'enabled' - assert p.mcast_route_lookup_timeout == 2 - assert p.dag_round_robin_mode == 'global' - assert p.dag_ipv6_prefix_len == 128 - assert p.dag_icmp_hash == 'icmp' - assert p.lldp_enabled is None - assert p.lldp_disabled is True - assert p.lldp_max_neighbors_per_port == 10 - assert p.lldp_reinit_delay == 2 - assert p.lldp_tx_delay == 0 - assert p.lldp_tx_hold == 5 - assert p.lldp_tx_interval == 0 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_network_globals.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_network_globals.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_update_all_settings(self, *args): - set_module_args(dict( - stp=dict( - config_name='foobar', - config_revision=1, - max_hops=2, - mode='mstp', - transmit_hold=1 - ), - multicast=dict( - max_pending_routes=200, - rate_limit='no', - ), - dag=dict( - round_robin_mode='local', - dag_ipv6_prefix_len=64, - icmp_hash='ipicmp', - ), - lldp=dict( - enabled='yes', - tx_delay=1500, - tx_hold=200, - tx_interval=100 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = dict( - stp=load_fixture('load_stp_globals.json'), - multicast=load_fixture('load_mcast_globals.json'), - dag=load_fixture('load_dag_globals.json'), - lldp=load_fixture('load_lldp_globals.json') - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=ApiParameters(params=current)) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['stp']['config_name'] == 'foobar' - assert results['stp']['config_revision'] == 1 - assert results['stp']['max_hops'] == 2 - assert results['stp']['mode'] == 'mstp' - assert results['stp']['transmit_hold'] == 1 - assert results['dag']['dag_ipv6_prefix_len'] == 64 - assert results['dag']['icmp_hash'] == 'ipicmp' - assert results['multicast']['rate_limit'] == 'no' - assert results['multicast']['max_pending_routes'] == 200 - assert results['lldp']['enabled'] == 'yes' - assert results['lldp']['tx_delay'] == 1500 - assert results['lldp']['tx_hold'] == 200 - assert results['lldp']['tx_interval'] == 100 - - def test_update_one_group(self, *args): - set_module_args(dict( - stp=dict( - hello_time=1, - mode='rstp', - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = dict( - stp=load_fixture('load_stp_globals.json'), - multicast=None, - dag=None, - lldp=None, - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=ApiParameters(params=current)) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['stp']['hello_time'] == 1 - assert results['stp']['mode'] == 'rstp' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_node.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_node.py deleted file mode 100644 index 826ea9fca..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_node.py +++ /dev/null @@ -1,238 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_node import ( - Parameters, ApiParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - host='10.20.30.40', - name='10.20.30.40' - ) - - p = Parameters(params=args) - assert p.host == '10.20.30.40' - assert p.name == '10.20.30.40' - - def test_api_parameters(self): - args = load_fixture('load_ltm_node_1.json') - - p = Parameters(params=args) - assert p.address == '1.2.3.4' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_node.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_node.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_node(self, *args): - set_module_args(dict( - host='10.20.30.40', - name='mytestserver', - monitors=[ - '/Common/icmp' - ], - partition='Common', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_node_idempotent(self, *args): - set_module_args(dict( - host='10.20.30.40', - name='mytestserver', - monitors=[ - '/Common/icmp' - ], - partition='Common', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_node_3.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_create_node_fqdn(self, *args): - set_module_args(dict( - fqdn='foo.bar', - name='mytestserver', - monitors=[ - '/Common/icmp' - ], - partition='Common', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_update_node_fqdn_up_interval(self, *args): - set_module_args(dict( - fqdn='foo.bar', - fqdn_up_interval=100, - name='mytestserver', - monitors=[ - '/Common/icmp' - ], - partition='Common', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_node_2.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_update_node_fqdn_up_interval_idempotent(self, *args): - set_module_args(dict( - fqdn='google.com', - fqdn_up_interval=3600, - name='fqdn-foo', - monitors=[ - 'icmp', - 'tcp_echo' - ], - partition='Common', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_node_2.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is not True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_partition.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_partition.py deleted file mode 100644 index bcf793c81..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_partition.py +++ /dev/null @@ -1,207 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_partition import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - route_domain=0 - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.route_domain == 0 - - def test_module_parameters_string_domain(self): - args = dict( - name='foo', - route_domain='0' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.route_domain == 0 - - def test_api_parameters(self): - args = dict( - name='foo', - description='my description', - defaultRouteDomain=1 - ) - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.route_domain == 1 - - -class TestManagerEcho(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_partition.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_partition.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_partition(self, *args): - set_module_args(dict( - name='foo', - description='my description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.update_folder_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_partition_idempotent(self, *args): - set_module_args(dict( - name='foo', - description='my description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_tm_auth_partition.json')) - current.update({'folder_description': 'my description'}) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_description(self, *args): - set_module_args(dict( - name='foo', - description='another description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_tm_auth_partition.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - mm.update_folder_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'another description' - - def test_update_route_domain(self, *args): - set_module_args(dict( - name='foo', - route_domain=1, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_tm_auth_partition.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['route_domain'] == 1 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_password_policy.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_password_policy.py deleted file mode 100644 index 515eef1b9..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_password_policy.py +++ /dev/null @@ -1,141 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_password_policy import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - expiration_warning=7, - max_duration=99999, - max_login_failures=0, - min_duration=0, - min_length=6, - password_memory=0, - policy_enforcement=False, - required_lowercase=0, - required_numeric=0, - required_special=0, - required_uppercase=0, - ) - - p = ModuleParameters(params=args) - assert p.expiration_warning == 7 - assert p.max_duration == 99999 - assert p.max_login_failures == 0 - assert p.min_duration == 0 - assert p.password_memory == 0 - assert p.policy_enforcement == 'no' - assert p.required_lowercase == 0 - assert p.required_numeric == 0 - assert p.required_special == 0 - assert p.required_uppercase == 0 - - def test_api_parameters(self): - args = load_fixture('load_tm_auth_password_policy_1.json') - - p = ApiParameters(params=args) - assert p.expiration_warning == 7 - assert p.max_duration == 99999 - assert p.max_login_failures == 0 - assert p.min_duration == 0 - assert p.password_memory == 0 - assert p.policy_enforcement == 'no' - assert p.required_lowercase == 0 - assert p.required_numeric == 0 - assert p.required_special == 0 - assert p.required_uppercase == 0 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_password_policy.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_password_policy.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_partition(self, *args): - set_module_args(dict( - expiration_warning=7, - max_duration=9999, - max_login_failures=0, - min_duration=0, - min_length=6, - password_memory=0, - policy_enforcement='no', - required_lowercase=0, - required_numeric=0, - required_special=0, - required_uppercase=0, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_tm_auth_password_policy_1.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_policy.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_policy.py deleted file mode 100644 index 4ddaed63b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_policy.py +++ /dev/null @@ -1,151 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_policy import ( - Parameters, ModuleManager, SimpleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_none_strategy(self): - args = dict( - name='foo', - description='asdf asdf asdf', - ) - p = Parameters(params=args) - assert p.name == 'foo' - assert p.description == 'asdf asdf asdf' - assert p.strategy is None - - def test_module_parameters_with_strategy_no_partition(self): - args = dict( - name='foo', - description='asdf asdf asdf', - strategy='foo', - partition='Common' - ) - p = Parameters(params=args) - assert p.name == 'foo' - assert p.description == 'asdf asdf asdf' - assert p.strategy == '/Common/foo' - - def test_module_parameters_with_strategy_partition(self): - args = dict( - name='foo', - description='asdf asdf asdf', - strategy='/Common/foo', - partition='Common' - ) - p = Parameters(params=args) - assert p.name == 'foo' - assert p.description == 'asdf asdf asdf' - assert p.strategy == '/Common/foo' - - def test_module_parameters_with_strategy_different_partition(self): - args = dict( - name='foo', - description='asdf asdf asdf', - strategy='/Foo/bar', - partition='Common' - ) - p = Parameters(params=args) - assert p.name == 'foo' - assert p.description == 'asdf asdf asdf' - assert p.strategy == '/Foo/bar' - - def test_api_parameters(self): - args = dict( - name='foo', - description='asdf asdf asdf', - strategy='/Common/asdf' - ) - p = Parameters(params=args) - assert p.name == 'foo' - assert p.description == 'asdf asdf asdf' - assert p.strategy == '/Common/asdf' - - -class TestSimpleTrafficPolicyManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_policy.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_policy.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_policy(self, *args): - set_module_args(dict( - name="Policy-Foo", - state='present', - strategy='best', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - tm = SimpleManager(module=module, params=module.params) - tm.exists = Mock(return_value=False) - tm.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_12 = Mock(return_value=True) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_policy_rule.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_policy_rule.py deleted file mode 100644 index 0260d908d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_policy_rule.py +++ /dev/null @@ -1,191 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_policy_rule import ( - ModuleParameters, ApiParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_policy(self): - args = dict( - policy='Policy - Foo' - ) - p = ModuleParameters(params=args) - assert p.policy == 'Policy - Foo' - - def test_module_parameters_actions(self): - args = dict( - actions=[ - dict( - type='forward', - pool='pool-svrs' - ) - ] - ) - p = ModuleParameters(params=args) - assert len(p.actions) == 1 - - def test_module_parameters_conditions(self): - args = dict( - conditions=[ - dict( - type='http_uri', - path_begins_with_any=['/ABC'] - ) - ] - ) - p = ModuleParameters(params=args) - assert len(p.conditions) == 1 - - def test_module_parameters_name(self): - args = dict( - name='rule1' - ) - p = ModuleParameters(params=args) - assert p.name == 'rule1' - - def test_api_parameters(self): - args = load_fixture('load_ltm_policy_draft_rule_http-uri_forward.json') - p = ApiParameters(params=args) - assert len(p.actions) == 1 - assert len(p.conditions) == 1 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_policy_rule.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_policy_rule.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_policy_rule_no_existence(self, *args): - set_module_args(dict( - name="rule1", - state='present', - policy='policy1', - actions=[ - dict( - type='forward', - pool='baz' - ) - ], - conditions=[ - dict( - type='http_uri', - path_begins_with_any=['/ABC'] - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.publish_on_device = Mock(return_value=True) - mm.draft_exists = Mock(return_value=False) - mm._create_existing_policy_draft_on_device = Mock(return_value=True) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_policy_rule_idempotent_check(self, *args): - set_module_args(dict( - name="rule1", - state='present', - policy='policy1', - actions=[ - dict( - type='forward', - pool='baz' - ) - ], - conditions=[ - dict( - type='http_uri', - path_begins_with_any=['/ABC'] - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_policy_draft_rule_http-uri_forward.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.draft_exists = Mock(return_value=False) - mm.update_on_device = Mock(return_value=True) - mm._create_existing_policy_draft_on_device = Mock(return_value=True) - mm.publish_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_pool.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_pool.py deleted file mode 100644 index bf2bbed81..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_pool.py +++ /dev/null @@ -1,536 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_pool import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - monitor_type='m_of_n', - monitors=['/Common/Fake', '/Common/Fake2'], - quorum=1, - slow_ramp_time=200, - reselect_tries=5, - service_down_action='drop' - ) - - p = ModuleParameters(params=args) - assert p.monitor_type == 'm_of_n' - assert p.quorum == 1 - assert p.monitors == 'min 1 of { /Common/Fake /Common/Fake2 }' - assert p.slow_ramp_time == 200 - assert p.reselect_tries == 5 - assert p.service_down_action == 'drop' - - def test_api_parameters(self): - args = dict( - monitor="/Common/Fake and /Common/Fake2 ", - slowRampTime=200, - reselectTries=5, - serviceDownAction='drop' - ) - - p = ApiParameters(params=args) - assert p.monitors == '/Common/Fake and /Common/Fake2' - assert p.slow_ramp_time == 200 - assert p.reselect_tries == 5 - assert p.service_down_action == 'drop' - - def test_unknown_module_lb_method(self): - args = dict( - lb_method='obscure_hyphenated_fake_method', - ) - with pytest.raises(F5ModuleError): - p = ModuleParameters(params=args) - assert p.lb_method == 'foo' - - def test_unknown_api_lb_method(self): - args = dict( - loadBalancingMode='obscure_hypenated_fake_method' - ) - with pytest.raises(F5ModuleError): - p = ApiParameters(params=args) - assert p.lb_method == 'foo' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_pool.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_pool.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_pool(self, *args): - set_module_args(dict( - pool='fake_pool', - description='fakepool', - service_down_action='drop', - lb_method='round-robin', - partition='Common', - slow_ramp_time=10, - reselect_tries=1, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['description'] == 'fakepool' - assert results['service_down_action'] == 'drop' - assert results['lb_method'] == 'round-robin' - assert results['slow_ramp_time'] == 10 - assert results['reselect_tries'] == 1 - - def test_create_pool_monitor_type_missing(self, *args): - set_module_args(dict( - pool='fake_pool', - lb_method='round-robin', - partition='Common', - monitors=['/Common/tcp', '/Common/http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['monitors'] == ['/Common/http', '/Common/tcp'] - assert results['monitor_type'] == 'and_list' - - def test_create_pool_monitors_missing(self, *args): - set_module_args(dict( - pool='fake_pool', - lb_method='round-robin', - partition='Common', - monitor_type='and_list', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - msg = "The 'monitors' parameter cannot be empty when " \ - "'monitor_type' parameter is specified" - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - - assert str(err.value) == msg - - def test_create_pool_quorum_missing(self, *args): - set_module_args(dict( - pool='fake_pool', - lb_method='round-robin', - partition='Common', - monitor_type='m_of_n', - monitors=['/Common/tcp', '/Common/http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - msg = "Quorum value must be specified with monitor_type 'm_of_n'." - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - - assert str(err.value) == msg - - def test_create_pool_monitor_and_list(self, *args): - set_module_args(dict( - pool='fake_pool', - partition='Common', - monitor_type='and_list', - monitors=['/Common/tcp', '/Common/http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['monitors'] == ['/Common/http', '/Common/tcp'] - assert results['monitor_type'] == 'and_list' - - def test_create_pool_monitor_m_of_n(self, *args): - set_module_args(dict( - pool='fake_pool', - partition='Common', - monitor_type='m_of_n', - quorum=1, - monitors=['/Common/tcp', '/Common/http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['monitors'] == ['/Common/http', '/Common/tcp'] - assert results['monitor_type'] == 'm_of_n' - - def test_update_monitors(self, *args): - set_module_args(dict( - name='test_pool', - partition='Common', - monitor_type='and_list', - monitors=['/Common/http', '/Common/tcp'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - - current = ApiParameters(params=load_fixture('load_ltm_pool.json')) - - mm.update_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['monitor_type'] == 'and_list' - - def test_create_pool_monitor_and_list_no_partition(self, *args): - set_module_args(dict( - pool='fake_pool', - monitor_type='and_list', - monitors=['tcp', 'http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['monitors'] == ['/Common/http', '/Common/tcp'] - assert results['monitor_type'] == 'and_list' - - def test_create_pool_monitor_m_of_n_no_partition(self, *args): - set_module_args(dict( - pool='fake_pool', - monitor_type='m_of_n', - quorum=1, - monitors=['tcp', 'http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['monitors'] == ['/Common/http', '/Common/tcp'] - assert results['monitor_type'] == 'm_of_n' - - def test_create_pool_monitor_and_list_custom_partition(self, *args): - set_module_args(dict( - pool='fake_pool', - partition='Testing', - monitor_type='and_list', - monitors=['tcp', 'http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['monitors'] == ['/Testing/http', '/Testing/tcp'] - assert results['monitor_type'] == 'and_list' - - def test_create_pool_monitor_m_of_n_custom_partition(self, *args): - set_module_args(dict( - pool='fake_pool', - partition='Testing', - monitor_type='m_of_n', - quorum=1, - monitors=['tcp', 'http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['monitors'] == ['/Testing/http', '/Testing/tcp'] - assert results['monitor_type'] == 'm_of_n' - - def test_create_pool_with_metadata(self, *args): - set_module_args(dict( - pool='fake_pool', - metadata=dict(ansible='2.4'), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert 'metadata' in results - assert 'ansible' in results['metadata'] - assert results['metadata']['ansible'] == '2.4' - - def test_create_aggregate_pools(self, *args): - set_module_args(dict( - aggregate=[ - dict( - pool='fake_pool', - description='fakepool', - service_down_action='drop', - lb_method='round-robin', - partition='Common', - slow_ramp_time=10, - reselect_tries=1, - ), - dict( - pool='fake_pool2', - description='fakepool2', - service_down_action='drop', - lb_method='predictive-node', - partition='Common', - slow_ramp_time=110, - reselect_tries=2, - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_pool_member.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_pool_member.py deleted file mode 100644 index 42dd39c99..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_pool_member.py +++ /dev/null @@ -1,246 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_pool_member import ( - ModuleParameters, ApiParameters, NodeApiParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - pool='my-pool', - address='1.2.3.4', - fqdn='fqdn.foo.bar', - name='my-name', - port=2345, - connection_limit=100, - description='this is a description', - rate_limit=70, - ratio=20, - preserve_node=False, - priority_group=10, - state='present', - partition='Common', - fqdn_auto_populate=False, - reuse_nodes=False, - ) - - p = ModuleParameters(params=args) - assert p.name == 'my-name' - - def test_api_parameters(self): - args = load_fixture('load_net_node_with_fqdn.json') - p = ApiParameters(params=args) - assert p.state == 'present' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_pool_member.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_pool_member.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_reuse_node_with_name(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - pool='my-pool', - fqdn='foo.bar.com', - port=2345, - state='present', - partition='Common', - reuse_nodes=True, - provider=dict( - password='password', - server='localhost', - user='admin' - ) - )) - - current_node = NodeApiParameters(params=load_fixture('load_net_node_with_fqdn.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of, - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.read_current_node_from_device = Mock(return_value=current_node) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['fqdn_auto_populate'] is True - assert results['fqdn'] == 'foo.bar.com' - assert results['state'] == 'present' - - def test_create_reuse_node_with_ipv4_address(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - pool='my-pool', - address='7.3.67.8', - port=2345, - state='present', - partition='Common', - reuse_nodes=True, - provider=dict( - password='password', - server='localhost', - user='admin' - ) - )) - - current_node = NodeApiParameters(params=load_fixture('load_net_node_with_ipv4_address.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of, - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.read_current_node_from_device = Mock(return_value=current_node) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['fqdn_auto_populate'] is False - assert results['address'] == '7.3.67.8' - assert results['state'] == 'present' - - def test_create_reuse_node_with_fqdn_auto_populate(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - pool='my-pool', - fqdn='foo.bar.com', - port=2345, - state='present', - partition='Common', - reuse_nodes=True, - fqdn_auto_populate=False, - provider=dict( - password='password', - server='localhost', - user='admin' - ) - )) - - current_node = NodeApiParameters(params=load_fixture('load_net_node_with_fqdn.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of, - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.read_current_node_from_device = Mock(return_value=current_node) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['fqdn_auto_populate'] is True - assert results['fqdn'] == 'foo.bar.com' - assert results['state'] == 'present' - - def test_create_aggregate_pool_members(self, *args): - set_module_args(dict( - pool='fake_pool', - aggregate=[ - dict( - name='my-name', - host="1.1.1.1", - port=1234, - state='present', - partition='Common', - reuse_nodes=True, - fqdn_auto_populate=False, - ), - dict( - name='my-name2', - fqdn='google.com', - port=2423, - state='present', - partition='Common', - fqdn_auto_populate=True, - reuse_nodes=True, - ) - ], - provider=dict( - password='password', - server='localhost', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of, - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_analytics.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_analytics.py deleted file mode 100644 index 2f9b7966d..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_analytics.py +++ /dev/null @@ -1,114 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_analytics import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - description='foo', - collect_geo=True, - collect_ip=True, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.description == 'foo' - assert p.collect_geo == 'yes' - assert p.collect_ip == 'yes' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_analytics_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.collect_geo == 'no' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_analytics.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_analytics.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - description='foo', - collect_geo=True, - collect_ip=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_client_ssl.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_client_ssl.py deleted file mode 100644 index 4be098826..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_client_ssl.py +++ /dev/null @@ -1,121 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_client_ssl import ( - ModuleParameters, ApiParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - ciphers='!SSLv3:!SSLv2:ECDHE+AES-GCM+SHA256:ECDHE-RSA-AES128-CBC-SHA', - cert_key_chain=[ - dict( - cert='bigip_ssl_cert1', - key='bigip_ssl_key1', - chain='bigip_ssl_cert1' - ) - ] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.ciphers == '!SSLv3:!SSLv2:ECDHE+AES-GCM+SHA256:ECDHE-RSA-AES128-CBC-SHA' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_clientssl.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.ciphers == 'DEFAULT' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_client_ssl.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_client_ssl.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - ciphers='!SSLv3:!SSLv2:ECDHE+AES-GCM+SHA256:ECDHE-RSA-AES128-CBC-SHA', - cert_key_chain=[ - dict( - cert='bigip_ssl_cert1', - key='bigip_ssl_key1', - chain='bigip_ssl_cert1' - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_dns.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_dns.py deleted file mode 100644 index a832cc3a9..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_dns.py +++ /dev/null @@ -1,140 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_dns import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - enable_dns_express=True, - enable_zone_transfer=True, - enable_dnssec=True, - enable_gtm=True, - process_recursion_desired=True, - use_local_bind=True, - enable_dns_firewall=True, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.enable_dns_express is True - assert p.enable_zone_transfer is True - assert p.enable_dnssec is True - assert p.enable_gtm is True - assert p.process_recursion_desired is True - assert p.use_local_bind is True - assert p.enable_dns_firewall is True - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_dns_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/dns' - assert p.enable_dns_express is False - assert p.enable_zone_transfer is True - assert p.enable_dnssec is False - assert p.enable_gtm is False - assert p.process_recursion_desired is True - assert p.use_local_bind is False - assert p.enable_dns_firewall is True - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_dns.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_dns.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - enable_dns_express=True, - enable_zone_transfer=True, - enable_dnssec=True, - enable_gtm=True, - process_recursion_desired=True, - use_local_bind=True, - enable_dns_firewall=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['enable_dns_express'] == 'yes' - assert results['enable_zone_transfer'] == 'yes' - assert results['enable_dnssec'] == 'yes' - assert results['enable_gtm'] == 'yes' - assert results['process_recursion_desired'] == 'yes' - assert results['use_local_bind'] == 'yes' - assert results['enable_dns_firewall'] == 'yes' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_fastl4.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_fastl4.py deleted file mode 100644 index 97797030a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_fastl4.py +++ /dev/null @@ -1,173 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_fastl4 import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - idle_timeout=100, - client_timeout=101, - description='description one', - explicit_flow_migration=False, - ip_df_mode='pmtu', - ip_tos_to_client=102, - ip_tos_to_server=103, - ip_ttl_v4=104, - ip_ttl_v6=105, - ip_ttl_mode='proxy', - keep_alive_interval=106, - late_binding=True, - link_qos_to_client=7, - link_qos_to_server=6, - loose_close=False, - loose_initialization=True, - mss_override=4, - reassemble_fragments=True, - receive_window_size=109, - reset_on_timeout=False, - rtt_from_client=True, - rtt_from_server=False, - server_sack=True, - server_timestamp=False, - syn_cookie_mss=110, - tcp_close_timeout=111, - tcp_generate_isn=True, - tcp_handshake_timeout=112, - tcp_strip_sack=False, - tcp_time_wait_timeout=113, - tcp_timestamp_mode='rewrite', - tcp_wscale_mode='strip', - timeout_recovery='fallback', - hardware_syn_cookie=True, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.description == 'description one' - assert p.idle_timeout == 100 - assert p.client_timeout == 101 - assert p.explicit_flow_migration == 'no' - assert p.ip_df_mode == 'pmtu' - assert p.ip_tos_to_client == 102 - assert p.ip_tos_to_server == 103 - assert p.ip_ttl_v4 == 104 - assert p.ip_ttl_v6 == 105 - assert p.ip_ttl_mode == 'proxy' - assert p.keep_alive_interval == 106 - assert p.late_binding == 'yes' - assert p.link_qos_to_client == 7 - assert p.link_qos_to_server == 6 - assert p.loose_close == 'no' - assert p.loose_initialization == 'yes' - assert p.mss_override == 4 - assert p.reassemble_fragments == 'yes' - assert p.receive_window_size == 109 - assert p.reset_on_timeout == 'no' - assert p.rtt_from_client == 'yes' - assert p.rtt_from_server == 'no' - assert p.server_sack == 'yes' - assert p.server_timestamp == 'no' - assert p.syn_cookie_mss == 110 - assert p.tcp_close_timeout == 111 - assert p.tcp_generate_isn == 'yes' - assert p.tcp_handshake_timeout == 112 - assert p.tcp_strip_sack == 'no' - assert p.tcp_time_wait_timeout == 113 - assert p.tcp_timestamp_mode == 'rewrite' - assert p.tcp_wscale_mode == 'strip' - assert p.timeout_recovery == 'fallback' - assert p.hardware_syn_cookie == 'enabled' - - def test_api_parameters(self): - args = load_fixture('load_ltm_fastl4_profile_1.json') - p = ApiParameters(params=args) - assert p.name == 'fastL4' - assert p.description is None - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_fastl4.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_fastl4.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_ftp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_ftp.py deleted file mode 100644 index bf11fd0c6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_ftp.py +++ /dev/null @@ -1,164 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_ftp import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - description='description one', - inherit_parent_profile=True, - log_profile='bazbar', - log_publisher='pub1', - translate_extended=True, - port=635, - security=False, - partition='Common' - ) - - p = ModuleParameters(params=args) - - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.description == 'description one' - assert p.inherit_parent_profile == 'enabled' - assert p.log_profile == '/Common/bazbar' - assert p.log_publisher == '/Common/pub1' - assert p.translate_extended == 'enabled' - assert p.port == 635 - assert p.security == 'disabled' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_ftp.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.description is None - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_ftp.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_ftp.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_ftp_profile(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - description='description one', - inherit_parent_profile=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'description one' - assert results['inherit_parent_profile'] == 'yes' - assert results['parent'] == '/Common/bar' - - def test_update_ftp_profile(self, *args): - set_module_args(dict( - name='foo', - description='my description', - allow_ftps=False, - inherit_parent_profile=False, - port=2048, - log_profile='alg_profile', - log_publisher='baz_publish', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_profile_ftp.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['description'] == 'my description' - assert results['allow_ftps'] == 'no' - assert results['inherit_parent_profile'] == 'no' - assert results['port'] == 2048 - assert results['log_profile'] == '/Common/alg_profile' - assert results['log_publisher'] == '/Common/baz_publish' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_http.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_http.py deleted file mode 100644 index fa7876c99..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_http.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_http import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - description='This is a Test', - proxy_type='transparent', - insert_xforwarded_for=True, - redirect_rewrite='all', - encrypt_cookies=['FooCookie'], - encrypt_cookie_secret='12345' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.description == 'This is a Test' - assert p.proxy_type == 'transparent' - assert p.insert_xforwarded_for == 'enabled' - assert p.redirect_rewrite == 'all' - assert p.encrypt_cookies == ['FooCookie'] - assert p.encrypt_cookie_secret == '12345' - - def test_api_parameters(self): - args = load_fixture('load_ltm_http_profile_1.json') - p = ApiParameters(params=args) - assert p.name == 'http' - assert p.insert_xforwarded_for == 'disabled' - assert p.description == 'none' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_http.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_http.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - insert_xforwarded_for='yes', - parent='bar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['insert_xforwarded_for'] == 'yes' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_http2.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_http2.py deleted file mode 100644 index 7cf147e03..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_http2.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_http2 import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - description='This is a Test', - streams=20, - enforce_tls_requirements=True, - frame_size=1024, - activation_modes=['always'], - insert_header=True, - insert_header_name='FOO' - - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.description == 'This is a Test' - assert p.streams == 20 - assert p.enforce_tls_requirements == 'enabled' - assert p.frame_size == 1024 - assert p.activation_modes == ['always'] - assert p.insert_header == 'enabled' - assert p.insert_header_name == 'FOO' - - def test_api_parameters(self): - args = load_fixture('load_ltm_http2_profile.json') - p = ApiParameters(params=args) - assert p.name == 'test' - assert p.streams == 10 - assert p.enforce_tls_requirements == 'enabled' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_http2.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_http2.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - enforce_tls_requirements='yes', - parent='bar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['enforce_tls_requirements'] == 'yes' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_http_compression.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_http_compression.py deleted file mode 100644 index ed8266fdf..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_http_compression.py +++ /dev/null @@ -1,122 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_http_compression import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - description='description1', - buffer_size=1024, - gzip_memory_level=64, - gzip_level=2, - gzip_window_size=128 - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.description == 'description1' - assert p.buffer_size == 1024 - assert p.gzip_memory_level == 64 - assert p.gzip_level == 2 - assert p.gzip_window_size == 128 - - def test_api_parameters(self): - p = ApiParameters(params=load_fixture('load_ltm_profile_http_compression_1.json')) - assert p.description == 'my profile' - assert p.buffer_size == 4096 - assert p.gzip_memory_level == 8 - assert p.gzip_level == 1 - assert p.gzip_window_size == 16 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_http_compression.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_http_compression.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - description='description1', - buffer_size=1024, - gzip_memory_level=64, - gzip_level=2, - gzip_window_size=128, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_oneconnect.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_oneconnect.py deleted file mode 100644 index 4b1d43013..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_oneconnect.py +++ /dev/null @@ -1,117 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_oneconnect import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - maximum_size=100, - maximum_age=200, - maximum_reuse=300, - idle_timeout_override=20, - limit_type='strict' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.maximum_size == 100 - assert p.maximum_age == 200 - assert p.maximum_reuse == 300 - assert p.idle_timeout_override == 20 - assert p.limit_type == 'strict' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_oneconnect_1.json') - p = ApiParameters(params=args) - assert p.name == 'oneconnect' - assert p.maximum_reuse == 1000 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_oneconnect.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_oneconnect.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - maximum_reuse=1000, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['maximum_reuse'] == 1000 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_persistence_cookie.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_persistence_cookie.py deleted file mode 100644 index 098346018..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_persistence_cookie.py +++ /dev/null @@ -1,117 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_persistence_cookie import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - match_across_services=False, - match_across_virtuals=True, - match_across_pools=False, - override_connection_limit=True - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.match_across_services == 'no' - assert p.match_across_virtuals == 'yes' - assert p.match_across_pools == 'no' - assert p.override_connection_limit == 'yes' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_persistence_cookie_1.json') - p = ApiParameters(params=args) - assert p.name == 'cookie' - assert p.match_across_pools == 'no' - assert p.match_across_services == 'no' - assert p.match_across_virtuals == 'no' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_persistence_cookie.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_persistence_cookie.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - match_across_virtuals='yes', - parent='bar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['match_across_virtuals'] == 'yes' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_persistence_src_addr.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_persistence_src_addr.py deleted file mode 100644 index e3a51659f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_persistence_src_addr.py +++ /dev/null @@ -1,121 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_persistence_src_addr import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - match_across_services=False, - match_across_virtuals=True, - match_across_pools=False, - hash_algorithm='carp', - entry_timeout=100, - override_connection_limit=True - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.match_across_services == 'no' - assert p.match_across_virtuals == 'yes' - assert p.match_across_pools == 'no' - assert p.hash_algorithm == 'carp' - assert p.entry_timeout == 100 - assert p.override_connection_limit == 'yes' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_persistence_src_addr_1.json') - p = ApiParameters(params=args) - assert p.name == 'source_addr' - assert p.match_across_pools == 'no' - assert p.match_across_services == 'no' - assert p.match_across_virtuals == 'no' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_persistence_src_addr.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_persistence_src_addr.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - match_across_virtuals='yes', - parent='bar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['match_across_virtuals'] == 'yes' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_persistence_universal.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_persistence_universal.py deleted file mode 100644 index e2ded8981..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_persistence_universal.py +++ /dev/null @@ -1,121 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_persistence_universal import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - match_across_services=False, - match_across_virtuals=True, - match_across_pools=False, - timeout=100, - override_connection_limit=True, - rule='/Common/irule_name' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.match_across_services == 'no' - assert p.match_across_virtuals == 'yes' - assert p.match_across_pools == 'no' - assert p.timeout == 100 - assert p.override_connection_limit == 'yes' - assert p.rule == '/Common/irule_name' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_persistence_universal.json') - p = ApiParameters(params=args) - assert p.name == 'universal' - assert p.match_across_pools == 'no' - assert p.match_across_services == 'no' - assert p.match_across_virtuals == 'no' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_persistence_universal.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_persistence_universal.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - match_across_virtuals='yes', - parent='bar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['match_across_virtuals'] == 'yes' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_server_ssl.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_server_ssl.py deleted file mode 100644 index 0bb7c785c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_server_ssl.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_server_ssl import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - server_name='foo.bar.com', - secure_renegotiation='require', - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.server_name == 'foo.bar.com' - assert p.secure_renegotiation == 'require' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_serverssl_1.json') - p = ApiParameters(params=args) - assert p.name == 'asda' - assert p.server_name is None - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_server_ssl.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_server_ssl.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - server_name='foo.bar.com', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_sip.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_sip.py deleted file mode 100644 index d2381d389..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_sip.py +++ /dev/null @@ -1,185 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_sip import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - security=False, - description='my description', - community='foo_community', - dialog_aware=True, - enable_sip_firewall=False, - insert_via_header=True, - user_via_header='SIP/2.0/UDP 10.10.10.10:5060', - secure_via_header=True, - terminate_on_bye=False, - max_size=2048, - log_profile='alg_profile', - log_publisher='baz_publish', - insert_record_route_header=True, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.security == 'disabled' - assert p.description == 'my description' - assert p.community == 'foo_community' - assert p.dialog_aware == 'enabled' - assert p.enable_sip_firewall == 'no' - assert p.insert_via_header == 'enabled' - assert p.user_via_header == 'SIP/2.0/UDP 10.10.10.10:5060' - assert p.terminate_on_bye == 'disabled' - assert p.max_size == 2048 - assert p.log_profile == '/Common/alg_profile' - assert p.log_publisher == '/Common/baz_publish' - assert p.insert_record_route_header == 'enabled' - - def test_api_parameters(self): - args = load_fixture('load_profile_sip.json') - p = ApiParameters(params=args) - assert p.name == 'foobar' - assert p.max_size == 65535 - assert p.parent == '/Common/sip' - assert p.dialog_aware == 'enabled' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_sip.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_sip.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_sip_profile(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - max_size=8192, - log_profile='alg_profile', - log_publisher='baz_publish', - dialog_aware='yes', - enable_sip_firewall='no', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['parent'] == '/Common/bar' - assert results['max_size'] == 8192 - assert results['log_profile'] == '/Common/alg_profile' - assert results['log_publisher'] == '/Common/baz_publish' - assert results['dialog_aware'] == 'yes' - assert results['enable_sip_firewall'] == 'no' - - def test_update_sip_profile(self, *args): - set_module_args(dict( - name='foobar', - description='my description', - insert_via_header=True, - user_via_header='SIP/2.0/UDP 10.10.10.10:5060', - secure_via_header=True, - terminate_on_bye=False, - max_size=2048, - log_profile='alg_profile', - log_publisher='baz_publish', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_profile_sip.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['description'] == 'my description' - assert results['insert_via_header'] == 'yes' - assert results['user_via_header'] == 'SIP/2.0/UDP 10.10.10.10:5060' - assert results['secure_via_header'] == 'yes' - assert results['terminate_on_bye'] == 'no' - assert results['max_size'] == 2048 - assert results['log_profile'] == '/Common/alg_profile' - assert results['log_publisher'] == '/Common/baz_publish' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_tcp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_tcp.py deleted file mode 100644 index e8a2c5199..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_tcp.py +++ /dev/null @@ -1,114 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_tcp import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - idle_timeout='500', - time_wait_timeout='immediate' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.idle_timeout == 500 - assert p.time_wait_timeout == 'immediate' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_tcp_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.idle_timeout == 300 - assert p.time_wait_timeout == '2000' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_tcp.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_tcp.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - idle_timeout=500, - time_wait_timeout='immediate', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['idle_timeout'] == 500 - assert results['time_wait_timeout'] == 'immediate' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_udp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_udp.py deleted file mode 100644 index 6797b0e9a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_profile_udp.py +++ /dev/null @@ -1,112 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_udp import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - idle_timeout='500', - datagram_load_balancing=False - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.idle_timeout == 500 - assert p.datagram_load_balancing is False - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_udp_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.idle_timeout == 60 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_udp.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_profile_udp.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - idle_timeout=500, - datagram_load_balancing=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['idle_timeout'] == 500 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_provision.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_provision.py deleted file mode 100644 index 0137dfceb..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_provision.py +++ /dev/null @@ -1,307 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_provision import ( - ModuleParameters, ModuleManager, ArgumentSpec, ApiParameters -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - module='gtm', - level='nominal', - ) - p = ModuleParameters(params=args) - assert p.module == 'gtm' - assert p.level == 'nominal' - - def test_api_parameters(self): - args = load_fixture('load_sys_provision_default.json') - p = ApiParameters(params=args) - assert p.level == 'dedicated' - assert p.memory == 'medium' - assert p.module == 'urldb' - - def test_module_parameters_level_minimum(self): - args = dict( - level='minimum', - ) - p = ModuleParameters(params=args) - assert p.level == 'minimum' - - def test_module_parameters_level_nominal(self): - args = dict( - level='nominal', - ) - p = ModuleParameters(params=args) - assert p.level == 'nominal' - - def test_module_parameters_level_dedicated(self): - args = dict( - level='dedicated', - ) - p = ModuleParameters(params=args) - assert p.level == 'dedicated' - - def test_module_parameters_memory_small(self): - args = dict( - module='mgmt', - memory='small', - ) - p = ModuleParameters(params=args) - assert p.memory == 0 - - def test_module_parameters_memory_medium(self): - args = dict( - module='mgmt', - memory='medium', - ) - p = ModuleParameters(params=args) - assert p.memory == 200 - - def test_module_parameters_memory_large(self): - args = dict( - module='mgmt', - memory='large', - ) - p = ModuleParameters(params=args) - assert p.memory == 500 - - def test_module_parameters_memory_700(self): - args = dict( - module='mgmt', - memory=700, - ) - p = ModuleParameters(params=args) - assert p.memory == 700 - - def test_module_parameters_mod_afm(self): - args = dict( - module='afm', - ) - p = ModuleParameters(params=args) - assert p.module == 'afm' - - def test_module_parameters_mod_am(self): - args = dict( - module='am', - ) - p = ModuleParameters(params=args) - assert p.module == 'am' - - def test_module_parameters_mod_sam(self): - args = dict( - module='sam', - ) - p = ModuleParameters(params=args) - assert p.module == 'sam' - - def test_module_parameters_mod_asm(self): - args = dict( - module='asm', - ) - p = ModuleParameters(params=args) - assert p.module == 'asm' - - def test_module_parameters_mod_avr(self): - args = dict( - module='avr', - ) - p = ModuleParameters(params=args) - assert p.module == 'avr' - - def test_module_parameters_mod_fps(self): - args = dict( - module='fps', - ) - p = ModuleParameters(params=args) - assert p.module == 'fps' - - def test_module_parameters_mod_gtm(self): - args = dict( - module='gtm', - ) - p = ModuleParameters(params=args) - assert p.module == 'gtm' - - def test_module_parameters_mod_lc(self): - args = dict( - module='lc', - ) - p = ModuleParameters(params=args) - assert p.module == 'lc' - - def test_module_parameters_mod_pem(self): - args = dict( - module='pem', - ) - p = ModuleParameters(params=args) - assert p.module == 'pem' - - def test_module_parameters_mod_swg(self): - args = dict( - module='swg', - ) - p = ModuleParameters(params=args) - assert p.module == 'swg' - - def test_module_parameters_mod_ilx(self): - args = dict( - module='ilx', - ) - p = ModuleParameters(params=args) - assert p.module == 'ilx' - - def test_module_parameters_mod_apm(self): - args = dict( - module='apm', - ) - p = ModuleParameters(params=args) - assert p.module == 'apm' - - def test_module_parameters_mod_mgmt(self): - args = dict( - module='mgmt', - ) - p = ModuleParameters(params=args) - assert p.module == 'mgmt' - - def test_module_parameters_mod_sslo(self): - args = dict( - module='sslo', - ) - p = ModuleParameters(params=args) - assert p.module == 'sslo' - - def test_module_parameters_mod_urldb(self): - args = dict( - module='urldb', - ) - p = ModuleParameters(params=args) - assert p.module == 'urldb' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_provision.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_provision.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - self.patcher1.stop() - - def test_provision_one_module_default_level(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - module='gtm', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ModuleParameters( - dict( - module='gtm', - level='none' - ) - ) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.reboot_device = Mock(return_value=True) - mm.save_on_device = Mock(return_value=True) - - # this forced sleeping can cause these tests to take 15 - # or more seconds to run. This is deliberate. - mm._is_mprov_running_on_device = Mock(side_effect=[True, False, False, False, False]) - mm._is_rest_available = Mock(side_effect=[False, False, True, True, True]) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['level'] == 'nominal' - - def test_provision_all_modules(self, *args): - modules = [ - 'afm', 'am', 'sam', 'asm', 'avr', 'fps', - 'gtm', 'lc', 'ltm', 'pem', 'swg', 'ilx', - 'apm', 'mgmt', 'sslo', 'urldb', - ] - - for module in modules: - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - module=module, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - with patch('ansible.module_utils.basic.AnsibleModule.fail_json') as mo: - AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - mo.assert_not_called() diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_provision_async.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_provision_async.py deleted file mode 100644 index e61924696..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_provision_async.py +++ /dev/null @@ -1,330 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2023 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) - -__metaclass__ = type - -import os -import json - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_provision_async import ( - ModuleParameters, ModuleManager, ArgumentSpec, ApiParameters -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - module='gtm', - level='nominal', - ) - p = ModuleParameters(params=args) - assert p.module == 'gtm' - assert p.level == 'nominal' - - def test_api_parameters(self): - args = load_fixture('load_sys_provision_default.json') - p = ApiParameters(params=args) - assert p.level == 'dedicated' - assert p.memory == 'medium' - assert p.module == 'urldb' - - def test_module_parameters_level_minimum(self): - args = dict( - level='minimum', - ) - p = ModuleParameters(params=args) - assert p.level == 'minimum' - - def test_module_parameters_level_nominal(self): - args = dict( - level='nominal', - ) - p = ModuleParameters(params=args) - assert p.level == 'nominal' - - def test_module_parameters_level_dedicated(self): - args = dict( - level='dedicated', - ) - p = ModuleParameters(params=args) - assert p.level == 'dedicated' - - def test_module_parameters_memory_small(self): - args = dict( - module='mgmt', - memory='small', - ) - p = ModuleParameters(params=args) - assert p.memory == 0 - - def test_module_parameters_memory_medium(self): - args = dict( - module='mgmt', - memory='medium', - ) - p = ModuleParameters(params=args) - assert p.memory == 200 - - def test_module_parameters_memory_large(self): - args = dict( - module='mgmt', - memory='large', - ) - p = ModuleParameters(params=args) - assert p.memory == 500 - - def test_module_parameters_memory_700(self): - args = dict( - module='mgmt', - memory=700, - ) - p = ModuleParameters(params=args) - assert p.memory == 700 - - def test_module_parameters_mod_afm(self): - args = dict( - module='afm', - ) - p = ModuleParameters(params=args) - assert p.module == 'afm' - - def test_module_parameters_mod_am(self): - args = dict( - module='am', - ) - p = ModuleParameters(params=args) - assert p.module == 'am' - - def test_module_parameters_mod_sam(self): - args = dict( - module='sam', - ) - p = ModuleParameters(params=args) - assert p.module == 'sam' - - def test_module_parameters_mod_asm(self): - args = dict( - module='asm', - ) - p = ModuleParameters(params=args) - assert p.module == 'asm' - - def test_module_parameters_mod_avr(self): - args = dict( - module='avr', - ) - p = ModuleParameters(params=args) - assert p.module == 'avr' - - def test_module_parameters_mod_fps(self): - args = dict( - module='fps', - ) - p = ModuleParameters(params=args) - assert p.module == 'fps' - - def test_module_parameters_mod_gtm(self): - args = dict( - module='gtm', - ) - p = ModuleParameters(params=args) - assert p.module == 'gtm' - - def test_module_parameters_mod_lc(self): - args = dict( - module='lc', - ) - p = ModuleParameters(params=args) - assert p.module == 'lc' - - def test_module_parameters_mod_pem(self): - args = dict( - module='pem', - ) - p = ModuleParameters(params=args) - assert p.module == 'pem' - - def test_module_parameters_mod_swg(self): - args = dict( - module='swg', - ) - p = ModuleParameters(params=args) - assert p.module == 'swg' - - def test_module_parameters_mod_ilx(self): - args = dict( - module='ilx', - ) - p = ModuleParameters(params=args) - assert p.module == 'ilx' - - def test_module_parameters_mod_apm(self): - args = dict( - module='apm', - ) - p = ModuleParameters(params=args) - assert p.module == 'apm' - - def test_module_parameters_mod_mgmt(self): - args = dict( - module='mgmt', - ) - p = ModuleParameters(params=args) - assert p.module == 'mgmt' - - def test_module_parameters_mod_sslo(self): - args = dict( - module='sslo', - ) - p = ModuleParameters(params=args) - assert p.module == 'sslo' - - def test_module_parameters_mod_urldb(self): - args = dict( - module='urldb', - ) - p = ModuleParameters(params=args) - assert p.module == 'urldb' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_provision_async.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_provision_async.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '15.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - self.patcher1.stop() - - def test_start_provision_one_module_default_level(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - module='gtm', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ModuleParameters( - dict( - module='gtm', - level='none' - ) - ) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - mm._device_is_rebooting = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert "Device will start provisioning requested module: gtm" in results['message'] - - def test_check_for_provision_progress_one_module_default_level(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - module='gtm', - check_status=True, - status_timeout=300, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm._device_is_rebooting = Mock(return_value=False) - mm.device_is_ready = Mock(return_value=True) - mm._is_mprov_running_on_device = Mock(side_effect=[True, True, False, False, False]) - - results = mm.exec_module() - - assert results['changed'] is True - assert "Device has finished provisioning the requested module." in results['message'] - - def test_provision_all_modules(self, *args): - modules = [ - 'afm', 'am', 'sam', 'asm', 'avr', 'fps', - 'gtm', 'lc', 'ltm', 'pem', 'swg', 'ilx', - 'apm', 'mgmt', 'sslo', 'urldb', - ] - - for module in modules: - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - module=module, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - with patch('ansible.module_utils.basic.AnsibleModule.fail_json') as mo: - AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mo.assert_not_called() diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_qkview.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_qkview.py deleted file mode 100644 index 0acf74b05..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_qkview.py +++ /dev/null @@ -1,176 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_qkview import ( - Parameters, ModuleManager, MadmLocationManager, BulkLocationManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - filename='foo.qkview', - asm_request_log=False, - max_file_size=1024, - complete_information=True, - exclude_core=True, - force=False, - exclude=['audit', 'secure'], - dest='/tmp/foo.qkview' - ) - p = Parameters(params=args) - assert p.filename == 'foo.qkview' - assert p.asm_request_log is None - assert p.max_file_size == '-s 1024' - assert p.complete_information == '-c' - assert p.exclude_core == '-C' - assert p.force is False - assert len(p.exclude_core) == 2 - assert 'audit' in p.exclude - assert 'secure' in p.exclude - assert p.dest == '/tmp/foo.qkview' - - def test_module_asm_parameter(self): - args = dict( - asm_request_log=True, - ) - p = Parameters(params=args) - assert p.asm_request_log == '-o asm-request-log' - - -class TestMadmLocationManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_qkview.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_qkview.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_qkview_default_options(self, *args): - set_module_args(dict( - dest='/tmp/foo.qkview', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - tm = MadmLocationManager(module=module, params=module.params) - tm.exists = Mock(return_value=False) - tm.execute_on_device = Mock(return_value=True) - tm._move_qkview_to_download = Mock(return_value=True) - tm._download_file = Mock(return_value=True) - tm._delete_qkview = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_less_than_14 = Mock(return_value=True) - mm.get_manager = Mock(return_value=tm) - - with patch('os.path.exists') as mo: - mo.return_value = True - results = mm.exec_module() - - assert results['changed'] is False - - -class TestBulkLocationManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_qkview.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_qkview.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_qkview_default_options(self, *args): - set_module_args(dict( - dest='/tmp/foo.qkview', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - tm = BulkLocationManager(module=module, params=module.params) - tm.exists = Mock(return_value=False) - tm.execute_on_device = Mock(return_value=True) - tm._move_qkview_to_download = Mock(return_value=True) - tm._download_file = Mock(return_value=True) - tm._delete_qkview = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=tm) - - with patch('os.path.exists') as mo: - mo.return_value = True - results = mm.exec_module() - - assert results['changed'] is False diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_remote_role.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_remote_role.py deleted file mode 100644 index e88604fbf..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_remote_role.py +++ /dev/null @@ -1,103 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_remote_role import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - terminal_access='none', - ) - - p = ModuleParameters(params=args) - assert p.terminal_access == 'disable' - - def test_api_parameters(self): - args = load_fixture('load_auth_remote_role_role_info_1.json') - - p = ApiParameters(params=args) - assert p.terminal_access == 'disable' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_remote_role.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_remote_role.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_remote_syslog(self, *args): - set_module_args(dict( - name='foo', - line_order=1000, - attribute_string='bar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_remote_syslog.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_remote_syslog.py deleted file mode 100644 index 5a0eb6815..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_remote_syslog.py +++ /dev/null @@ -1,221 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_remote_syslog import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - remote_host='10.10.10.10', - remote_port=514, - local_ip='1.1.1.1' - ) - - p = ModuleParameters(params=args) - assert p.remote_host == '10.10.10.10' - assert p.remote_port == 514 - assert p.local_ip == '1.1.1.1' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_remote_syslog.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_remote_syslog.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_remote_syslog(self, *args): - set_module_args(dict( - remote_host='1.1.1.1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - fixture = load_fixture('load_tm_sys_syslog_1.json') - current = fixture['remoteServers'] - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_remote_syslog_idempotent(self, *args): - set_module_args(dict( - name='remotesyslog1', - remote_host='10.10.10.10', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - fixture = load_fixture('load_tm_sys_syslog_1.json') - current = fixture['remoteServers'] - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_remote_port(self, *args): - set_module_args(dict( - remote_host='10.10.10.10', - remote_port=800, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - fixture = load_fixture('load_tm_sys_syslog_1.json') - current = fixture['remoteServers'] - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['remote_port'] == 800 - - def test_update_local_ip(self, *args): - set_module_args(dict( - remote_host='10.10.10.10', - local_ip='2.2.2.2', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - fixture = load_fixture('load_tm_sys_syslog_1.json') - current = fixture['remoteServers'] - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['local_ip'] == '2.2.2.2' - - def test_update_no_name_dupe_host(self, *args): - set_module_args(dict( - remote_host='10.10.10.10', - local_ip='2.2.2.2', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - fixture = load_fixture('load_tm_sys_syslog_2.json') - current = fixture['remoteServers'] - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "Multiple occurrences of hostname" in str(ex.value) diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_remote_user.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_remote_user.py deleted file mode 100644 index 37852631c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_remote_user.py +++ /dev/null @@ -1,119 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_remote_user import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - default_partition='Common', - default_role='admin', - console_access='yes', - description='this is a role' - - ) - - p = ModuleParameters(params=args) - assert p.default_partition == 'Common' - assert p.default_role == 'admin' - assert p.console_access == 'tmsh' - assert p.description == 'this is a role' - - def test_api_parameters(self): - args = load_fixture('load_remote_user_settings.json') - p = ApiParameters(params=args) - assert p.default_partition == 'all' - assert p.default_role == 'no-access' - assert p.console_access == 'disabled' - assert p.description is None - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_remote_user.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_remote_user.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_remote_syslog(self, *args): - set_module_args(dict( - default_partition='Foobar', - default_role='auditor', - console_access='yes', - description='this is a role', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_remote_user_settings.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'this is a role' - assert results['default_partition'] == 'Foobar' - assert results['default_role'] == 'auditor' - assert results['console_access'] == 'yes' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_routedomain.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_routedomain.py deleted file mode 100644 index 3623fe9e6..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_routedomain.py +++ /dev/null @@ -1,121 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_routedomain import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - id='1234', - description='my description', - strict=True, - parent='parent1', - vlans=['vlan1', 'vlan2'], - routing_protocol=['BFD', 'BGP'], - bwc_policy='bwc1', - connection_limit=200, - flow_eviction_policy='evict1', - service_policy='service1' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.id == 1234 - assert p.description == 'my description' - assert p.strict is True - assert p.connection_limit == 200 - - def test_api_parameters(self): - args = load_fixture('load_net_route_domain_1.json') - - p = ApiParameters(params=args) - assert len(p.vlans) == 5 - assert p.id == 0 - assert p.strict is True - assert p.connection_limit == 0 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_routedomain.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_routedomain.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - id=1234, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['id'] == 1234 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_selfip.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_selfip.py deleted file mode 100644 index 5f8c8fd31..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_selfip.py +++ /dev/null @@ -1,197 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_selfip import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - address='10.10.10.10', - allow_service=[ - 'tcp:80', - 'udp:53', - 'gre' - ], - name='net1', - netmask='255.255.255.0', - partition='Common', - route_domain='1', - state='present', - traffic_group='traffic-group-local-only', - vlan='net1' - ) - p = ModuleParameters(params=args) - assert p.address == '10.10.10.10%1/24' - assert p.allow_service == ['gre:0', 'tcp:80', 'udp:53'] - assert p.name == 'net1' - assert p.netmask == 24 - assert p.route_domain == 1 - assert p.traffic_group == '/Common/traffic-group-local-only' - assert p.vlan == '/Common/net1' - - def test_module_invalid_service(self): - args = dict( - allow_service=[ - 'tcp:80', - 'udp:53', - 'grp' - ] - ) - p = ModuleParameters(params=args) - with pytest.raises(F5ModuleError) as ex: - assert p.allow_service == ['grp', 'tcp:80', 'udp:53'] - assert 'The provided protocol' in str(ex.value) - - def test_api_parameters(self): - args = dict( - address='10.10.10.10%1/24', - allowService=[ - 'tcp:80', - 'udp:53', - 'gre' - ], - name='net1', - state='present', - trafficGroup='/Common/traffic-group-local-only', - vlan='net1' - ) - p = ApiParameters(params=args) - assert p.address == '10.10.10.10%1/24' - assert p.allow_service == ['gre', 'tcp:80', 'udp:53'] - assert p.name == 'net1' - assert p.netmask == 24 - assert p.traffic_group == '/Common/traffic-group-local-only' - assert p.vlan == '/Common/net1' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_selfip.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_selfip.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_selfip(self, *args): - set_module_args(dict( - address='10.10.10.10', - allow_service=[ - 'tcp:80', - 'udp:53', - 'gre' - ], - name='net1', - netmask='255.255.255.0', - partition='Common', - route_domain='1', - state='present', - traffic_group='traffic-group-local-only', - vlan='net1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_selfip_idempotent(self, *args): - set_module_args(dict( - address='10.10.10.10', - allow_service=[ - 'tcp:80', - 'udp:53', - 'gre' - ], - name='net1', - netmask='255.255.255.0', - partition='Common', - route_domain='1', - state='present', - traffic_group='traffic-group-local-only', - vlan='net1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_tm_net_self.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_service_policy.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_service_policy.py deleted file mode 100644 index 34a2c3c31..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_service_policy.py +++ /dev/null @@ -1,119 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_service_policy import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - timer_policy='timer1', - port_misuse_policy='misuse1', - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.timer_policy == '/Common/timer1' - assert p.port_misuse_policy == '/Common/misuse1' - - def test_api_parameters(self): - args = load_fixture('load_net_service_policy_1.json') - p = ApiParameters(params=args) - assert p.name == 'baz' - assert p.description == 'my description' - assert p.timer_policy == '/Common/foo' - assert p.port_misuse_policy == '/Common/bar' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_service_policy.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_service_policy.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_service_policy.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create_selfip(self, *args): - set_module_args(dict( - name='foo', - description='my description', - timer_policy='timer1', - port_misuse_policy='misuse1', - partition='Common', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_smtp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_smtp.py deleted file mode 100644 index 7134064d8..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_smtp.py +++ /dev/null @@ -1,145 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_smtp import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - smtp_server='1.1.1.1', - smtp_server_port='25', - smtp_server_username='admin', - smtp_server_password='password', - local_host_name='smtp.mydomain.com', - encryption='tls', - update_password='always', - from_address='no-reply@mydomain.com', - authentication=True, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.smtp_server == '1.1.1.1' - assert p.smtp_server_port == 25 - assert p.smtp_server_username == 'admin' - assert p.smtp_server_password == 'password' - assert p.local_host_name == 'smtp.mydomain.com' - assert p.encryption == 'tls' - assert p.update_password == 'always' - assert p.from_address == 'no-reply@mydomain.com' - assert p.authentication_disabled is None - assert p.authentication_enabled is True - - def test_api_parameters(self): - p = ApiParameters(params=load_fixture('load_sys_smtp_server.json')) - assert p.name == 'foo' - assert p.smtp_server == 'mail.foo.bar' - assert p.smtp_server_port == 465 - assert p.smtp_server_username == 'admin' - assert p.smtp_server_password == '$M$Ch$this-is-encrypted==' - assert p.local_host_name == 'mail-host.foo.bar' - assert p.encryption == 'ssl' - assert p.from_address == 'no-reply@foo.bar' - assert p.authentication_disabled is None - assert p.authentication_enabled is True - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_smtp.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_smtp.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - smtp_server='1.1.1.1', - smtp_server_port='25', - smtp_server_username='admin', - smtp_server_password='password', - local_host_name='smtp.mydomain.com', - encryption='tls', - update_password='always', - from_address='no-reply@mydomain.com', - authentication=True, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['encryption'] == 'tls' - assert results['smtp_server'] == '1.1.1.1' - assert results['smtp_server_port'] == 25 - assert results['local_host_name'] == 'smtp.mydomain.com' - assert results['authentication'] is True - assert results['from_address'] == 'no-reply@mydomain.com' - assert 'smtp_server_username' not in results - assert 'smtp_server_password' not in results diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snat_pool.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snat_pool.py deleted file mode 100644 index a05d24603..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snat_pool.py +++ /dev/null @@ -1,180 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snat_pool import ( - ModuleParameters, ApiParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='my-snat-pool', - state='present', - members=['10.10.10.10', '20.20.20.20'], - description='A SNAT pool description', - partition='Common' - ) - p = ModuleParameters(params=args) - assert p.name == 'my-snat-pool' - assert p.state == 'present' - assert p.description == 'A SNAT pool description' - assert len(p.members) == 2 - assert '/Common/10.10.10.10' in p.members - assert '/Common/20.20.20.20' in p.members - - def test_api_parameters(self): - args = dict( - members=['/Common/10.10.10.10', '/foo/20.20.20.20'] - ) - p = ApiParameters(params=args) - assert len(p.members) == 2 - assert '/Common/10.10.10.10' in p.members - assert '/foo/20.20.20.20' in p.members - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snat_pool.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snat_pool.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_snat_pool(self, *args): - set_module_args(dict( - name='my-snat-pool', - state='present', - members=['10.10.10.10', '20.20.20.20'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert len(results['members']) == 2 - assert '/Common/10.10.10.10' in results['members'] - assert '/Common/20.20.20.20' in results['members'] - - def test_create_snat_pool_idempotent(self, *args): - set_module_args(dict( - name='asdasd', - state='present', - members=['1.1.1.1', '2.2.2.2'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_snatpool.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_snat_pool(self, *args): - set_module_args(dict( - name='asdasd', - state='present', - members=['30.30.30.30'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_snatpool.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=True) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert len(results['members']) == 1 - assert '/Common/30.30.30.30' in results['members'] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snat_translation.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snat_translation.py deleted file mode 100644 index cffcfb993..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snat_translation.py +++ /dev/null @@ -1,331 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snat_translation import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='my-snat-translation', - address='1.1.1.1', - arp='yes', - connection_limit=300, - description='None', - ip_idle_timeout='50', - partition='Common', - state='present', - traffic_group='test', - tcp_idle_timeout='20', - udp_idle_timeout='100', - ) - - p = ModuleParameters(params=args) - assert p.name == 'my-snat-translation' - assert p.address == '1.1.1.1' - assert p.arp == 'enabled' - assert p.connection_limit == 300 - assert p.description == 'None' - assert p.ip_idle_timeout == '50' - assert p.partition == 'Common' - assert p.state == 'present' - assert p.traffic_group == '/Common/test' - assert p.tcp_idle_timeout == '20' - assert p.udp_idle_timeout == '100' - - def test_api_parameters(self): - args = load_fixture('load_ltm_snat_translation_default.json') - p = ApiParameters(params=args) - assert p.address == '1.1.1.1' - assert p.arp == 'no' - assert p.connection_limit == 0 - assert p.description == 'My description' - assert p.ip_idle_timeout == '50' - assert p.partition == 'Common' - assert p.traffic_group == '/Common/test' - assert p.tcp_idle_timeout == '20' - assert p.udp_idle_timeout == '100' - - def test_module_parameters_arp_yes(self): - args = dict( - arp='yes' - ) - p = ModuleParameters(params=args) - assert p.arp == 'enabled' - - def test_module_parameters_arp_no(self): - args = dict( - arp='no' - ) - p = ModuleParameters(params=args) - assert p.arp == 'disabled' - - def test_module_parameters_connection_limit_none(self): - args = dict( - connection_limit=0 - ) - p = ModuleParameters(params=args) - assert p.connection_limit == 0 - - def test_module_parameters_connection_limit_int(self): - args = dict( - connection_limit=500 - ) - p = ModuleParameters(params=args) - assert p.connection_limit == 500 - - def test_module_parameters_description_none(self): - args = dict( - description='none' - ) - p = ModuleParameters(params=args) - assert p.description == '' - - def test_module_parameters_description_empty(self): - args = dict( - description='' - ) - p = ModuleParameters(params=args) - assert p.description == '' - - def test_module_parameters_description_string_value(self): - args = dict( - description='My Snat Translation' - ) - p = ModuleParameters(params=args) - assert p.description == 'My Snat Translation' - - def test_module_parameters_ip_idle_timeout_indefinite(self): - args = dict( - ip_idle_timeout='indefinite' - ) - p = ModuleParameters(params=args) - assert p.ip_idle_timeout == 'indefinite' - - def test_module_parameters_ip_idle_timeout_string_value(self): - args = dict( - ip_idle_timeout='65000' - ) - p = ModuleParameters(params=args) - assert p.ip_idle_timeout == '65000' - - def test_module_no_partition_prefix_parameters(self): - args = dict( - partition='Common', - address='10.10.10.10', - traffic_group='traffic-group-1' - ) - p = ModuleParameters(params=args) - assert p.partition == 'Common' - assert p.address == '10.10.10.10' - assert p.traffic_group == '/Common/traffic-group-1' - - def test_module_partition_prefix_parameters(self): - args = dict( - partition='Common', - address='10.10.10.10', - traffic_group='/Common/traffic-group-1' - ) - p = ModuleParameters(params=args) - assert p.partition == 'Common' - assert p.address == '10.10.10.10' - assert p.traffic_group == '/Common/traffic-group-1' - - def test_module_parameters_state_present(self): - args = dict( - state='present' - ) - p = ModuleParameters(params=args) - assert p.state == 'present' - assert p.enabled is True - - def test_module_parameters_state_absent(self): - args = dict( - state='absent' - ) - p = ModuleParameters(params=args) - assert p.state == 'absent' - - def test_module_parameters_state_enabled(self): - args = dict( - state='enabled' - ) - p = ModuleParameters(params=args) - assert p.state == 'enabled' - assert p.enabled is True - - def test_module_parameters_state_disabled(self): - args = dict( - state='disabled' - ) - p = ModuleParameters(params=args) - assert p.state == 'disabled' - assert p.disabled is True - - def test_module_parameters_tcp_idle_timeout_indefinite(self): - args = dict( - tcp_idle_timeout='indefinite' - ) - p = ModuleParameters(params=args) - assert p.tcp_idle_timeout == 'indefinite' - - def test_module_parameters_tcp_idle_timeout_string_value(self): - args = dict( - tcp_idle_timeout='65000' - ) - p = ModuleParameters(params=args) - assert p.tcp_idle_timeout == '65000' - - def test_module_parameters_udp_idle_timeout_indefinite(self): - args = dict( - udp_idle_timeout='indefinite' - ) - p = ModuleParameters(params=args) - assert p.udp_idle_timeout == 'indefinite' - - def test_module_parameters_udp_idle_timeout_string_value(self): - args = dict( - udp_idle_timeout='65000' - ) - p = ModuleParameters(params=args) - assert p.udp_idle_timeout == '65000' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snat_translation.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snat_translation.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_snat_translation(self, *args): - set_module_args(dict( - name='my-snat-translation', - address='1.1.1.1', - arp='yes', - connection_limit=300, - description='My description', - ip_idle_timeout='50', - state='present', - tcp_idle_timeout='20', - udp_idle_timeout='100', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['address'] == '1.1.1.1' - assert results['arp'] == 'yes' - assert results['connection_limit'] == 300 - assert results['description'] == 'My description' - assert results['ip_idle_timeout'] == '50' - assert results['tcp_idle_timeout'] == '20' - assert results['udp_idle_timeout'] == '100' - - def test_update_snat_translation(self, *args): - set_module_args(dict( - name='my-snat-translation', - address='1.1.1.1', - arp='yes', - connection_limit=300, - description='', - ip_idle_timeout='500', - state='disabled', - tcp_idle_timeout='indefinite', - traffic_group='traffic-group-1', - udp_idle_timeout='indefinite', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - current = ApiParameters(params=load_fixture('load_ltm_snat_translation_default.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=True) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['arp'] == 'yes' - assert results['connection_limit'] == 300 - assert results['description'] == '' - assert results['ip_idle_timeout'] == '500' - assert results['tcp_idle_timeout'] == 'indefinite' - assert results['udp_idle_timeout'] == 'indefinite' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snmp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snmp.py deleted file mode 100644 index cb3b82b8b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snmp.py +++ /dev/null @@ -1,259 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snmp import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - agent_status_traps='enabled', - agent_authentication_traps='enabled', - contact='Alice@foo.org', - device_warning_traps='enabled', - location='Lunar orbit', - ) - p = ModuleParameters(params=args) - assert p.agent_status_traps == 'enabled' - assert p.agent_authentication_traps == 'enabled' - assert p.device_warning_traps == 'enabled' - assert p.location == 'Lunar orbit' - assert p.contact == 'Alice@foo.org' - - def test_module_parameters_disabled(self): - args = dict( - agent_status_traps='disabled', - agent_authentication_traps='disabled', - device_warning_traps='disabled', - ) - p = ModuleParameters(params=args) - assert p.agent_status_traps == 'disabled' - assert p.agent_authentication_traps == 'disabled' - assert p.device_warning_traps == 'disabled' - - def test_api_parameters(self): - args = dict( - agentTrap='enabled', - authTrap='enabled', - bigipTraps='enabled', - sysLocation='Lunar orbit', - sysContact='Alice@foo.org', - ) - p = ApiParameters(params=args) - assert p.agent_status_traps == 'enabled' - assert p.agent_authentication_traps == 'enabled' - assert p.device_warning_traps == 'enabled' - assert p.location == 'Lunar orbit' - assert p.contact == 'Alice@foo.org' - - def test_api_parameters_disabled(self): - args = dict( - agentTrap='disabled', - authTrap='disabled', - bigipTraps='disabled', - ) - p = ApiParameters(params=args) - assert p.agent_status_traps == 'disabled' - assert p.agent_authentication_traps == 'disabled' - assert p.device_warning_traps == 'disabled' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snmp.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snmp.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_update_agent_status_traps(self, *args): - set_module_args(dict( - agent_status_traps='enabled', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters( - params=dict( - agent_status_traps='disabled' - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['agent_status_traps'] == 'enabled' - - def test_update_allowed_addresses(self, *args): - set_module_args(dict( - allowed_addresses=[ - '127.0.0.0/8', - '10.10.10.10', - 'foo', - 'baz.foo.com' - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters( - params=dict( - allowed_addresses=['127.0.0.0/8'] - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert len(results['allowed_addresses']) == 4 - assert results['allowed_addresses'] == [ - '10.10.10.10', '127.0.0.0/8', 'baz.foo.com', 'foo' - ] - - def test_update_allowed_addresses_default(self, *args): - set_module_args(dict( - allowed_addresses=[ - 'default' - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters( - params=dict( - allowed_addresses=['10.0.0.0'] - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert len(results['allowed_addresses']) == 1 - assert results['allowed_addresses'] == ['127.0.0.0/8'] - - def test_update_allowed_addresses_empty(self, *args): - set_module_args(dict( - allowed_addresses=[''], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters( - params=dict( - allowed_addresses=['10.0.0.0'] - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert len(results['allowed_addresses']) == 1 - assert results['allowed_addresses'] == ['127.0.0.0/8'] diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snmp_community.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snmp_community.py deleted file mode 100644 index 5f1623c67..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snmp_community.py +++ /dev/null @@ -1,291 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snmp_community import ( - ApiParameters, ModuleParameters, ModuleManager, V1Manager, V2Manager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - version='v2c', - community='foo', - source='1.1.1.1', - port='8080', - oid='.1', - access='ro', - ip_version=4, - snmp_username='admin', - snmp_auth_protocol='sha', - snmp_auth_password='secretsecret', - snmp_privacy_protocol='des', - snmp_privacy_password='secretsecret', - update_password='always', - state='present' - ) - - p = ModuleParameters(params=args) - assert p.version == 'v2c' - assert p.community == 'foo' - assert p.source == '1.1.1.1' - assert p.port == 8080 - assert p.oid == '.1' - assert p.access == 'ro' - assert p.ip_version == 4 - assert p.snmp_username == 'admin' - assert p.snmp_auth_protocol == 'sha' - assert p.snmp_auth_password == 'secretsecret' - assert p.snmp_privacy_protocol == 'des' - assert p.snmp_privacy_password == 'secretsecret' - assert p.update_password == 'always' - assert p.state == 'present' - - def test_api_parameters_community_1(self): - args = load_fixture('load_sys_snmp_communities_1.json') - - p = ApiParameters(params=args) - assert p.access == 'ro' - assert p.community == 'foo' - assert p.ip_version == 4 - - def test_api_parameters_community_2(self): - args = load_fixture('load_sys_snmp_communities_2.json') - - p = ApiParameters(params=args) - assert p.access == 'rw' - assert p.community == 'foo' - assert p.ip_version == 4 - assert p.oid == '.1' - assert p.source == '1.1.1.1' - - def test_api_parameters_community_3(self): - args = load_fixture('load_sys_snmp_communities_3.json') - - p = ApiParameters(params=args) - assert p.access == 'ro' - assert p.community == 'foo' - assert p.ip_version == 6 - assert p.oid == '.1' - assert p.source == '2001:0db8:85a3:0000:0000:8a2e:0370:7334' - - def test_api_parameters_community_4(self): - args = load_fixture('load_sys_snmp_communities_4.json') - - p = ApiParameters(params=args) - assert p.access == 'ro' - assert p.community == 'foo' - assert p.ip_version == 6 - - def test_api_parameters_users_1(self): - args = load_fixture('load_sys_snmp_users_1.json') - - p = ApiParameters(params=args) - assert p.access == 'ro' - assert p.snmp_auth_protocol == 'sha' - assert p.oid == '.1' - assert p.snmp_privacy_protocol == 'aes' - assert p.snmp_username == 'foo' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snmp_community.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snmp_community.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_v2c_community_1(self, *args): - set_module_args(dict( - version='v2c', - community='foo', - source='1.1.1.1', - port='8080', - oid='.1', - access='ro', - ip_version=4, - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - m1 = V1Manager(module=module) - - # Override methods to force specific logic in the module to happen - m1.exists = Mock(side_effect=[False, True]) - m1.create_on_device = Mock(return_value=True) - - m0 = ModuleManager(module=module) - m0.get_manager = Mock(return_value=m1) - - results = m0.exec_module() - - assert results['changed'] is True - - def test_create_v1_community_1(self, *args): - set_module_args(dict( - name='foo', - version='v1', - community='foo', - source='1.1.1.1', - port='8080', - oid='.1', - access='ro', - ip_version=4, - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - m1 = V1Manager(module=module) - - # Override methods to force specific logic in the module to happen - m1.exists = Mock(side_effect=[False, True]) - m1.create_on_device = Mock(return_value=True) - - m0 = ModuleManager(module=module) - m0.get_manager = Mock(return_value=m1) - - results = m0.exec_module() - - assert results['changed'] is True - - def test_create_v3_community_1(self, *args): - set_module_args(dict( - version='v3', - oid='.1', - access='ro', - snmp_username='admin', - snmp_auth_protocol='md5', - snmp_auth_password='secretsecret', - snmp_privacy_protocol='des', - snmp_privacy_password='secretsecret', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - m1 = V2Manager(module=module) - - # Override methods to force specific logic in the module to happen - m1.exists = Mock(side_effect=[False, True]) - m1.create_on_device = Mock(return_value=True) - - m0 = ModuleManager(module=module) - m0.get_manager = Mock(return_value=m1) - - results = m0.exec_module() - - assert results['changed'] is True - - def test_create_v3_community_2(self, *args): - set_module_args(dict( - version='v3', - access='ro', - snmp_username='admin', - snmp_auth_protocol='md5', - snmp_auth_password='secretsecret', - snmp_privacy_protocol='des', - snmp_privacy_password='secretsecret', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - m1 = V2Manager(module=module) - - # Override methods to force specific logic in the module to happen - m1.exists = Mock(side_effect=[False, True]) - m1.create_on_device = Mock(return_value=True) - - m0 = ModuleManager(module=module) - m0.get_manager = Mock(return_value=m1) - - with pytest.raises(F5ModuleError) as ex: - m0.exec_module() - - assert 'oid must be specified when creating a new v3 community.' == str(ex.value) diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snmp_trap.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snmp_trap.py deleted file mode 100644 index 8bc9bb290..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_snmp_trap.py +++ /dev/null @@ -1,188 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snmp_trap import ( - V2Parameters, V1Parameters, ModuleManager, V2Manager, V1Manager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch, DEFAULT -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_networked_parameters(self): - args = dict( - name='foo', - snmp_version='1', - community='public', - destination='10.10.10.10', - port=1000, - network='other', - ) - p = V2Parameters(params=args) - assert p.name == 'foo' - assert p.snmp_version == '1' - assert p.community == 'public' - assert p.destination == '10.10.10.10' - assert p.port == 1000 - assert p.network == 'other' - - def test_module_non_networked_parameters(self): - args = dict( - name='foo', - snmp_version='1', - community='public', - destination='10.10.10.10', - port=1000, - network='other', - ) - p = V1Parameters(params=args) - assert p.name == 'foo' - assert p.snmp_version == '1' - assert p.community == 'public' - assert p.destination == '10.10.10.10' - assert p.port == 1000 - assert p.network is None - - def test_api_parameters(self): - args = dict( - name='foo', - community='public', - host='10.10.10.10', - network='other', - version=1, - port=1000 - ) - p = V2Parameters(params=args) - assert p.name == 'foo' - assert p.snmp_version == '1' - assert p.community == 'public' - assert p.destination == '10.10.10.10' - assert p.port == 1000 - assert p.network == 'other' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snmp_trap.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_snmp_trap.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_trap(self, *args): - set_module_args(dict( - name='foo', - snmp_version='1', - community='public', - destination='10.10.10.10', - port=1000, - network='other', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - m0 = ModuleManager(module=module) - m0.is_version_without_network = Mock(return_value=False) - m0.is_version_with_default_network = Mock(return_value=True) - - patches = dict( - create_on_device=DEFAULT, - exists=DEFAULT - ) - with patch.multiple(V2Manager, **patches) as mo: - mo['create_on_device'].side_effect = Mock(return_value=True) - mo['exists'].side_effect = Mock(return_value=False) - results = m0.exec_module() - - assert results['changed'] is True - assert results['port'] == 1000 - assert results['snmp_version'] == '1' - - def test_create_trap_non_network(self, *args): - set_module_args(dict( - name='foo', - snmp_version='1', - community='public', - destination='10.10.10.10', - port=1000, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - m0 = ModuleManager(module=module) - m0.is_version_without_network = Mock(return_value=True) - - patches = dict( - create_on_device=DEFAULT, - exists=DEFAULT - ) - with patch.multiple(V1Manager, **patches) as mo: - mo['create_on_device'].side_effect = Mock(return_value=True) - mo['exists'].side_effect = Mock(return_value=False) - results = m0.exec_module() - - assert results['changed'] is True - assert results['port'] == 1000 - assert results['snmp_version'] == '1' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_software_image.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_software_image.py deleted file mode 100644 index 89d58e3fa..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_software_image.py +++ /dev/null @@ -1,119 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_software_image import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - filename='/path/to/BIGIP-13.0.0.0.0.1645.iso', - image='/path/to/BIGIP-13.0.0.0.0.1645.iso', - ) - - p = ModuleParameters(params=args) - assert p.filename == 'BIGIP-13.0.0.0.0.1645.iso' - assert p.image == '/path/to/BIGIP-13.0.0.0.0.1645.iso' - - def test_api_parameters(self): - args = dict( - file_size='1000 MB', - build='0.0.3', - checksum='8cdbd094195fab4b2b47ff4285577b70', - image_type='release', - version='13.1.0.8' - ) - - p = ApiParameters(params=args) - assert p.file_size == 1000 - assert p.build == '0.0.3' - assert p.checksum == '8cdbd094195fab4b2b47ff4285577b70' - assert p.image_type == 'release' - assert p.version == '13.1.0.8' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_software_image.ModuleManager._set_mode_and_ownership') - self.p1.start() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_software_image.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_software_image.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - image='/path/to/BIGIP-13.0.0.0.0.1645.iso', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_sys_software_image_1.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.read_current_from_device = Mock(return_value=current) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['file_size'] == 1948 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_software_install.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_software_install.py deleted file mode 100644 index bacf89950..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_software_install.py +++ /dev/null @@ -1,113 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_software_install import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - volume='HD1.2', - type='standard', - image='BIGIP-13.0.0.0.0.1645.iso', - ) - - p = ModuleParameters(params=args) - assert p.volume == 'HD1.2' - assert p.image == 'BIGIP-13.0.0.0.0.1645.iso' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_software_install.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_software_install.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - image='BIGIP-13.0.0.0.0.1645.iso', - volume='HD1.2', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters() - current.read_image_from_device = Mock( - side_effect=[ - ['BIGIP-13.0.0.0.0.1645.iso'], - ['BIGIP-12.1.3.4-0.0.2.iso'], - ] - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.have = current - - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.volume_exists = Mock(return_value=False) - mm.update_on_device = Mock(return_value=True) - mm.wait_for_device_reboot = Mock(return_value=True) - mm.wait_for_software_install_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_software_update.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_software_update.py deleted file mode 100644 index b5f0aafdf..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_software_update.py +++ /dev/null @@ -1,111 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_software_update import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - auto_check=True, - frequency="daily" - ) - p = ModuleParameters(params=args) - assert p.auto_check == 'enabled' - assert p.frequency == 'daily' - - def test_api_parameters(self): - args = dict( - autoCheck="enabled", - frequency="daily" - ) - p = ApiParameters(params=args) - assert p.auto_check == 'enabled' - assert p.frequency == 'daily' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_software_update.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_software_update.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_update(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - auto_check='no', - auto_phone_home='no', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_sys_software_update.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['auto_check'] is False diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_certificate.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_certificate.py deleted file mode 100644 index 9bec6e7ee..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_certificate.py +++ /dev/null @@ -1,147 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_certificate import ( - ArgumentSpec, ApiParameters, ModuleParameters, ModuleManager -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_cert(self): - cert_content = load_fixture('create_insecure_cert1.crt') - args = dict( - content=cert_content, - name="cert1", - partition="Common", - state="present", - ) - p = ModuleParameters(params=args) - assert p.name == 'cert1' - assert p.filename == 'cert1.crt' - assert 'Signature Algorithm' in p.content - assert '-----BEGIN CERTIFICATE-----' in p.content - assert '-----END CERTIFICATE-----' in p.content - assert p.checksum == '1e55aa57ee166a380e756b5aa4a835c5849490fe' - assert p.state == 'present' - - def test_module_issuer_cert_key(self): - args = dict( - issuer_cert='foo', - partition="Common", - ) - p = ModuleParameters(params=args) - assert p.issuer_cert == '/Common/foo.crt' - - def test_api_issuer_cert_key(self): - args = load_fixture('load_sys_file_ssl_cert_with_issuer_cert.json') - p = ApiParameters(params=args) - assert p.issuer_cert == '/Common/intermediate.crt' - - -class TestCertificateManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_certificate.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_certificate.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_import_certificate_and_key_no_key_passphrase(self, *args): - set_module_args(dict( - name='foo', - content=load_fixture('cert1.crt'), - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.remove_uploaded_file_from_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_import_certificate_chain(self, *args): - set_module_args(dict( - name='foo', - content=load_fixture('chain1.crt'), - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.remove_uploaded_file_from_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_csr.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_csr.py deleted file mode 100644 index 56d306fdf..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_csr.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_csr import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='ssl_csr_1', - common_name='ssl_csr_1', - key_name='ssl_key_1', - dest='/tmp/ssl_csr_1' - ) - - p = ModuleParameters(params=args) - assert p.name == 'ssl_csr_1' - assert p.common_name == 'ssl_csr_1' - assert p.key_name == 'ssl_key_1' - assert p.dest == '/tmp/ssl_csr_1' - - def test_api_parameters(self): - args = load_fixture('load_sys_crypto_csr.json') - p = ApiParameters(params=args) - assert p.name == 'ssl_csr_1' - assert p.common_name == 'ssl_csr_1' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_csr.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_csr.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='ssl_csr_1', - common_name='ssl_csr_1', - key_name='ssl_key_1', - dest='/tmp/ssl_csr_1', - force=True, - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.version_is_less_than_14 = Mock(return_value=False) - mm.exists = Mock(return_value=False) - mm.file_exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm._move_csr_to_download = Mock(return_value=True) - mm._delete_csr = Mock(return_value=True) - mm._download_file = Mock(return_value=True) - mm.remove_from_device = Mock(return_value=True) - - with patch('os.path.exists') as mo: - mo.return_value = True - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_key.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_key.py deleted file mode 100644 index 0b88a4ded..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_key.py +++ /dev/null @@ -1,109 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_key import ( - ArgumentSpec, ModuleParameters, ModuleManager -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_key(self): - key_content = load_fixture('create_insecure_key1.key') - args = dict( - content=key_content, - name="cert1", - partition="Common", - state="present", - password='password', - server='localhost', - user='admin' - ) - p = ModuleParameters(params=args) - assert p.name == 'cert1' - assert p.key_filename == 'cert1.key' - assert '-----BEGIN RSA PRIVATE KEY-----' in p.content - assert '-----END RSA PRIVATE KEY-----' in p.content - assert p.key_checksum == '91bdddcf0077e2bb2a0258aae2ae3117be392e83' - assert p.state == 'present' - - -class TestModuleManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_key.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_key.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_import_key_no_key_passphrase(self, *args): - set_module_args(dict( - name='foo', - content=load_fixture('cert1.key'), - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - cm = ModuleManager(module=module) - cm.exists = Mock(side_effect=[False, True]) - cm.create_on_device = Mock(return_value=True) - cm.remove_uploaded_file_from_device = Mock(return_value=True) - - results = cm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_key_cert.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_key_cert.py deleted file mode 100644 index 2855bc580..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_key_cert.py +++ /dev/null @@ -1,141 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2020, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_key_cert import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import ( - Mock, patch -) - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_key(self): - key_content = load_fixture('create_insecure_key1.key') - args = dict( - key_content=key_content, - key_name="cert1", - partition="Common", - state="present", - password='password', - server='localhost', - user='admin' - ) - p = ModuleParameters(params=args) - assert p.key_name == 'cert1' - assert p.key_filename == 'cert1.key' - assert '-----BEGIN RSA PRIVATE KEY-----' in p.key_content - assert '-----END RSA PRIVATE KEY-----' in p.key_content - assert p.key_checksum == '91bdddcf0077e2bb2a0258aae2ae3117be392e83' - assert p.state == 'present' - - def test_module_parameters_cert(self): - cert_content = load_fixture('create_insecure_cert1.crt') - args = dict( - cert_content=cert_content, - cert_name="cert1", - partition="Common", - state="present", - ) - p = ModuleParameters(params=args) - assert p.cert_name == 'cert1' - assert p.cert_filename == 'cert1.crt' - assert 'Signature Algorithm' in p.cert_content - assert '-----BEGIN CERTIFICATE-----' in p.cert_content - assert '-----END CERTIFICATE-----' in p.cert_content - assert p.cert_checksum == '1e55aa57ee166a380e756b5aa4a835c5849490fe' - assert p.state == 'present' - - def test_module_issuer_cert_key(self): - args = dict( - issuer_cert='foo', - partition="Common", - ) - p = ModuleParameters(params=args) - assert p.issuer_cert == '/Common/foo.crt' - - def test_api_issuer_cert_key(self): - args = load_fixture('load_sys_file_ssl_cert_with_issuer_cert.json') - p = ApiParameters(params=args) - assert p.issuer_cert == '/Common/intermediate.crt' - - -class TestModuleManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_key_cert.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_key_cert.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_import_key_no_key_passphrase(self, *args): - set_module_args(dict( - key_name='foo', - key_content=load_fixture('cert1.key'), - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - cm = ModuleManager(module=module) - cm.exists = Mock(side_effect=[False, True]) - cm.create_on_device = Mock(return_value=True) - cm.remove_uploaded_file_from_device = Mock(return_value=True) - - results = cm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_ocsp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_ocsp.py deleted file mode 100644 index 110dcf612..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ssl_ocsp.py +++ /dev/null @@ -1,110 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_ocsp import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - clock_skew=100, - connections_limit=101, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.clock_skew == 100 - assert p.connections_limit == 101 - - def test_api_parameters(self): - args = load_fixture('load_sys_crypto_cert_validator_1.json') - p = ApiParameters(params=args) - assert p.name == 'asd' - assert p.clock_skew == 300 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_ocsp.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '13.0.0' - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ssl_ocsp.send_teem') - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p1.stop() - self.p3.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - clock_skew=100, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_static_route.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_static_route.py deleted file mode 100644 index b179d7852..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_static_route.py +++ /dev/null @@ -1,367 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_static_route import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - vlan="foo", - gateway_address="10.10.10.10" - ) - p = ModuleParameters(params=args) - assert p.vlan == '/Common/foo' - assert p.gateway_address == '10.10.10.10' - - def test_api_parameters(self): - args = dict( - tmInterface="foo", - gw="10.10.10.10" - ) - p = ApiParameters(params=args) - assert p.vlan == 'foo' - assert p.gateway_address == '10.10.10.10' - - def test_reject_parameter_types(self): - # boolean true - args = dict(reject=True) - p = ModuleParameters(params=args) - assert p.reject is True - - # boolean false - args = dict(reject=False) - p = ModuleParameters(params=args) - assert p.reject is None - - # string - args = dict(reject="yes") - p = ModuleParameters(params=args) - assert p.reject is True - - # integer - args = dict(reject=1) - p = ModuleParameters(params=args) - assert p.reject is True - - # none - args = dict(reject=None) - p = ModuleParameters(params=args) - assert p.reject is None - - def test_destination_parameter_types(self): - # cidr address - args = dict( - destination="10.10.10.10", - netmask='32' - ) - p = ModuleParameters(params=args) - assert p.destination == '10.10.10.10/32' - - # netmask - args = dict( - destination="10.10.10.10", - netmask="255.255.255.255" - ) - p = ModuleParameters(params=args) - assert p.destination == '10.10.10.10/32' - - def test_vlan_with_partition(self): - args = dict( - vlan="/Common/foo", - gateway_address="10.10.10.10" - ) - p = ModuleParameters(params=args) - assert p.vlan == '/Common/foo' - assert p.gateway_address == '10.10.10.10' - - def test_api_route_domain(self): - args = dict( - destination="1.1.1.1/32%2" - ) - p = ApiParameters(params=args) - assert p.route_domain == 2 - - args = dict( - destination="2700:bc00:1f10:101::6/64%2" - ) - p = ApiParameters(params=args) - assert p.route_domain == 2 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_static_route.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_static_route.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_blackhole(self, *args): - set_module_args(dict( - name='test-route', - state='present', - destination='10.10.10.10', - netmask='255.255.255.255', - reject='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - - def test_create_route_to_pool(self, *args): - set_module_args(dict( - name='test-route', - state='present', - destination='10.10.10.10', - netmask='255.255.255.255', - pool="test-pool", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['pool'] == 'test-pool' - - def test_create_route_to_vlan(self, *args): - set_module_args(dict( - name='test-route', - state='present', - destination='10.10.10.10', - netmask='255.255.255.255', - vlan="test-vlan", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['vlan'] == '/Common/test-vlan' - - def test_update_description(self, *args): - set_module_args(dict( - name='test-route', - state='present', - description='foo description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - current = ApiParameters(params=load_fixture('load_net_route_description.json')) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'foo description' - - def test_update_description_idempotent(self, *args): - set_module_args(dict( - name='test-route', - state='present', - description='asdasd', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - current = ApiParameters(params=load_fixture('load_net_route_description.json')) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - results = mm.exec_module() - - # There is no assert for the description, because it should - # not have changed - assert results['changed'] is False - - def test_delete(self, *args): - set_module_args(dict( - name='test-route', - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, False]) - mm.remove_from_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert 'description' not in results - - def test_invalid_unknown_params(self, *args): - set_module_args(dict( - name='test-route', - state='present', - foo="bar", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - with patch('ansible.module_utils.basic.AnsibleModule.fail_json') as mo: - mo.return_value = True - AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - assert mo.call_count == 1 - - def test_create_with_route_domain(self, *args): - set_module_args(dict( - name='test-route', - state='present', - destination='10.10.10.10', - netmask='255.255.255.255', - route_domain=1, - reject='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - assert results['route_domain'] == 1 - assert results['destination'] == '10.10.10.10%1/32' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_sys_daemon_log_tmm.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_sys_daemon_log_tmm.py deleted file mode 100644 index ab7a1cd15..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_sys_daemon_log_tmm.py +++ /dev/null @@ -1,131 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_sys_daemon_log_tmm import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - arp_log_level='warning', - http_compression_log_level='error', - http_log_level='error', - ip_log_level='warning', - irule_log_level='informational', - layer4_log_level='notice', - net_log_level='warning', - os_log_level='notice', - pva_log_level='debug', - ssl_log_level='warning', - ) - p = ModuleParameters(params=args) - assert p.arp_log_level == 'warning' - assert p.http_compression_log_level == 'error' - assert p.http_log_level == 'error' - assert p.ip_log_level == 'warning' - assert p.irule_log_level == 'informational' - assert p.layer4_log_level == 'notice' - assert p.net_log_level == 'warning' - assert p.os_log_level == 'notice' - assert p.pva_log_level == 'debug' - assert p.ssl_log_level == 'warning' - - def test_api_parameters(self): - args = load_fixture('load_tmm_log.json') - p = ApiParameters(params=args) - assert p.arp_log_level == 'warning' - assert p.http_compression_log_level == 'error' - assert p.http_log_level == 'error' - assert p.ip_log_level == 'warning' - assert p.irule_log_level == 'informational' - assert p.layer4_log_level == 'notice' - assert p.net_log_level == 'warning' - assert p.os_log_level == 'notice' - assert p.pva_log_level == 'informational' - assert p.ssl_log_level == 'warning' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_sys_daemon_log_tmm.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_sys_daemon_log_tmm.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_update(self, *args): - set_module_args(dict( - arp_log_level='debug', - layer4_log_level='debug', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tmm_log.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_sys_db.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_sys_db.py deleted file mode 100644 index 35249888a..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_sys_db.py +++ /dev/null @@ -1,125 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_sys_db import ( - Parameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - key='foo', - value='bar', - ) - p = Parameters(params=args) - assert p.key == 'foo' - assert p.value == 'bar' - - def test_api_parameters(self): - args = dict( - key='foo', - value='bar', - defaultValue='baz', - - ) - p = Parameters(params=args) - assert p.key == 'foo' - assert p.value == 'bar' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_sys_db.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_sys_db.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_blackhole(self, *args): - set_module_args(dict( - key='provision.cpu.afm', - value='1', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters( - dict( - kind="tm:sys:db:dbstate", - name="provision.cpu.afm", - fullPath="provision.cpu.afm", - generation=1, - selfLink="https://localhost/mgmt/tm/sys/db/provision.cpu.afm?ver=11.6.1", - defaultValue="0", - scfConfig="false", - value="0", - valueRange="integer min:0 max:100" - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_sys_global.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_sys_global.py deleted file mode 100644 index abd24bc69..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_sys_global.py +++ /dev/null @@ -1,126 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_sys_global import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - banner_text='this is a banner', - console_timeout=100, - gui_setup='yes', - lcd_display='yes', - mgmt_dhcp='yes', - net_reboot='yes', - quiet_boot='yes', - security_banner='yes', - ) - p = ModuleParameters(params=args) - assert p.banner_text == 'this is a banner' - assert p.console_timeout == 100 - assert p.gui_setup == 'yes' - assert p.lcd_display == 'yes' - assert p.mgmt_dhcp == 'yes' - assert p.net_reboot == 'yes' - assert p.quiet_boot == 'yes' - assert p.security_banner == 'yes' - - def test_api_parameters(self): - args = load_fixture('load_sys_global_settings.json') - p = ApiParameters(params=args) - assert 'Welcome to the BIG-IP Configuration Utility' in p.banner_text - assert p.console_timeout == 0 - assert p.gui_setup == 'no' - assert p.lcd_display == 'yes' - assert p.mgmt_dhcp == 'yes' - assert p.net_reboot == 'no' - assert p.quiet_boot == 'yes' - assert p.security_banner == 'yes' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_sys_global.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_sys_global.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_update(self, *args): - set_module_args(dict( - banner_text='this is a banner', - console_timeout=100, - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_sys_global_settings.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_timer_policy.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_timer_policy.py deleted file mode 100644 index 0c8ef254b..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_timer_policy.py +++ /dev/null @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_timer_policy import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - - def test_api_parameters(self): - args = load_fixture('load_net_timer_policy_1.json') - - p = ApiParameters(params=args) - assert p.name == 'timer1' - assert p.description == 'my description' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_timer_policy.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_timer_policy.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='my description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_traffic_selector.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_traffic_selector.py deleted file mode 100644 index bd4763b72..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_traffic_selector.py +++ /dev/null @@ -1,101 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_traffic_selector import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='selector1', - ) - p = ModuleParameters(params=args) - assert p.name == 'selector1' - - def test_api_parameters(self): - args = dict( - name='selector1', - ) - p = ApiParameters(params=args) - assert p.name == 'selector1' - - -class TestUntypedManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_traffic_selector.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_traffic_selector.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='selector1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_trunk.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_trunk.py deleted file mode 100644 index 1b42fa76e..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_trunk.py +++ /dev/null @@ -1,134 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_trunk import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - interfaces=[ - '1.3', '1.1' - ], - link_selection_policy='auto', - frame_distribution_hash='destination-mac', - lacp_enabled=True, - lacp_mode='active', - lacp_timeout='long' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.interfaces == ['1.1', '1.3'] - assert p.link_selection_policy == 'auto' - assert p.frame_distribution_hash == 'dst-mac' - assert p.lacp_enabled is True - assert p.lacp_mode == 'active' - assert p.lacp_timeout == 'long' - - def test_api_parameters(self): - args = load_fixture('load_tm_net_trunk_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.frame_distribution_hash == 'dst-mac' - assert p.lacp_enabled is False - assert p.lacp_mode == 'active' - assert p.lacp_timeout == 'long' - assert p.interfaces == ['1.3'] - assert p.link_selection_policy == 'maximum-bandwidth' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_trunk.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_trunk.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - interfaces=[ - '1.3', '1.1' - ], - link_selection_policy='auto', - frame_distribution_hash='destination-mac', - lacp_enabled=True, - lacp_mode='active', - lacp_timeout='long', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['link_selection_policy'] == 'auto' - assert results['frame_distribution_hash'] == 'destination-mac' - assert results['lacp_enabled'] is True - assert results['lacp_mode'] == 'active' - assert results['lacp_timeout'] == 'long' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_tunnel.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_tunnel.py deleted file mode 100644 index 5f746dfd5..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_tunnel.py +++ /dev/null @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_tunnel import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - profile='ipip', - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.profile == '/Common/ipip' - - def test_api_parameters(self): - args = load_fixture('load_net_tunnel_1.json') - - p = ApiParameters(params=args) - assert p.name == 'tunnel1' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_tunnel.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_tunnel.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - profile='ipip', - local_address='2.2.2.2.', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ucs.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ucs.py deleted file mode 100644 index 8b6699342..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ucs.py +++ /dev/null @@ -1,407 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ucs import ( - ModuleParameters, ModuleManager, ArgumentSpec, V1Manager, V2Manager -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - ucs="/root/bigip.localhost.localdomain.ucs", - force=True, - include_chassis_level_config=True, - no_license=True, - no_platform_check=True, - passphrase="foobar", - reset_trust=True, - state='installed' - ) - - p = ModuleParameters(params=args) - assert p.ucs == '/root/bigip.localhost.localdomain.ucs' - assert p.force is True - assert p.include_chassis_level_config is True - assert p.no_license is True - assert p.no_platform_check is True - assert p.passphrase == "foobar" - assert p.reset_trust is True - assert p.install_command == \ - "tmsh load sys ucs /var/local/ucs/bigip.localhost.localdomain.ucs " \ - "include-chassis-level-config no-license no-platform-check " \ - "passphrase foobar reset-trust" - - def test_module_parameters_false_ucs_booleans(self): - args = dict( - ucs="/root/bigip.localhost.localdomain.ucs", - include_chassis_level_config=False, - no_license=False, - no_platform_check=False, - reset_trust=False - ) - - p = ModuleParameters(params=args) - assert p.ucs == '/root/bigip.localhost.localdomain.ucs' - assert p.include_chassis_level_config is False - assert p.no_license is False - assert p.no_platform_check is False - assert p.reset_trust is False - assert p.install_command == "tmsh load sys ucs /var/local/ucs/bigip.localhost.localdomain.ucs" - - -class TestV1Manager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ucs.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ucs.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '12.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - self.patcher1.stop() - - def test_ucs_default_present(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=True) - - vm = V1Manager(module=module) - vm.create_on_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[False, True]) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_explicit_present(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=True) - - vm = V1Manager(module=module) - vm.create_on_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[False, True]) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_installed(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='installed', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=True) - - vm = V1Manager(module=module) - vm.create_on_device = Mock(return_value=True) - vm.exists = Mock(return_value=True) - vm.install_on_device = Mock(return_value=True) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_absent_exists(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=True) - - vm = V1Manager(module=module) - vm.remove_from_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[True, False]) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_absent_fails(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=True) - - vm = V1Manager(module=module) - vm.remove_from_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[True, True]) - - with pytest.raises(F5ModuleError) as ex: - vm.exec_module() - assert 'Failed to delete' in str(ex.value) - - -class TestV2Manager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ucs.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ucs.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - self.patcher1.stop() - - def test_ucs_default_present(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=False) - - vm = V2Manager(module=module) - vm.create_on_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[False, True]) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_explicit_present(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=False) - - vm = V2Manager(module=module) - vm.create_on_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[False, True]) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_installed(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='installed', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=False) - - vm = V2Manager(module=module) - vm.create_on_device = Mock(return_value=True) - vm.exists = Mock(return_value=True) - vm.install_on_device = Mock(return_value=True) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_absent_exists(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=False) - - vm = V1Manager(module=module) - vm.remove_from_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[True, False]) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_absent_fails(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=False) - - vm = V1Manager(module=module) - vm.remove_from_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[True, True]) - - with pytest.raises(F5ModuleError) as ex: - vm.exec_module() - assert 'Failed to delete' in str(ex.value) diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ucs_fetch.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ucs_fetch.py deleted file mode 100644 index 3f2fa08e3..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_ucs_fetch.py +++ /dev/null @@ -1,122 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ucs_fetch import ( - Parameters, ModuleManager, V1Manager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - backup='yes', - create_on_missing='yes', - encryption_password='my-password', - dest='/tmp/foo.ucs', - force='yes', - fail_on_missing='no', - src='remote.ucs', - ) - p = Parameters(params=args) - assert p.backup == 'yes' - - -class TestV1Manager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ucs_fetch.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_ucs_fetch.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - backup='yes', - create_on_missing='yes', - dest='/tmp/foo.ucs', - force='yes', - fail_on_missing='no', - src='remote.ucs', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - add_file_common_args=self.spec.add_file_common_args - ) - - # Override methods to force specific logic in the module to happen - m1 = V1Manager(module=module) - m1.exists = Mock(return_value=False) - m1.create_on_device = Mock(return_value=True) - m1._get_backup_file = Mock(return_value='/tmp/foo.backup') - m1.download_from_device = Mock(return_value=True) - m1._set_checksum = Mock(return_value=12345) - m1._set_md5sum = Mock(return_value=54321) - - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=m1) - mm.is_version_v1 = Mock(return_value=True) - - p1 = patch('os.path.exists', return_value=True) - p1.start() - p2 = patch('os.path.isdir', return_value=False) - p2.start() - - results = mm.exec_module() - - p1.stop() - p2.stop() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_user.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_user.py deleted file mode 100644 index 4a346d546..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_user.py +++ /dev/null @@ -1,881 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_user import ( - Parameters, ModuleManager, ArgumentSpec, UnpartitionedManager, PartitionedManager -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - access = [{'name': 'Common', 'role': 'guest'}] - args = dict( - username_credential='someuser', - password_credential='testpass', - full_name='Fake Person', - partition_access=access, - update_password='always' - ) - - p = Parameters(params=args) - assert p.username_credential == 'someuser' - assert p.password_credential == 'testpass' - assert p.full_name == 'Fake Person' - assert p.partition_access == access - assert p.update_password == 'always' - - def test_api_parameters(self): - access = [{'name': 'Common', 'role': 'guest'}] - args = dict( - name='someuser', - description='Fake Person', - partitionAccess=access, - shell='none' - ) - - p = Parameters(params=args) - assert p.name == 'someuser' - assert p.full_name == 'Fake Person' - assert p.partition_access == access - assert p.shell == 'none' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_user.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_user.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_user(self, *args): - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - partition_access=['Common:guest'], - update_password='on_create', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.create_on_device = Mock(return_value=True) - pm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['partition_access'] == ['Common:guest'] - - def test_create_user_no_password(self, *args): - set_module_args(dict( - username_credential='someuser', - partition_access=['Common:guest'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.create_on_device = Mock(return_value=True) - pm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['partition_access'] == ['Common:guest'] - - def test_create_user_partition_access_raises(self, *args): - set_module_args(dict( - username_credential='someuser', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.create_on_device = Mock(return_value=True) - pm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - msg = "The 'partition_access' option " \ - "is required when creating a resource." - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - assert str(ex.value) == msg - - def test_create_user_shell_bash(self, *args): - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - partition_access=['all:admin'], - update_password='on_create', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.create_on_device = Mock(return_value=True) - pm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['partition_access'] == ['all:admin'] - - def test_create_user_shell_not_permitted_raises(self, *args): - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - partition_access=['Common:guest'], - update_password='on_create', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.create_on_device = Mock(return_value=True) - pm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - msg = "Shell access is only available to 'admin' or " \ - "'resource-admin' roles." - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - assert str(ex.value) == msg - - def test_update_user_password_no_pass(self, *args): - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters(params=load_fixture('load_auth_user_no_pass.json')) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.exists = Mock(return_value=True) - pm.update_on_device = Mock(return_value=True) - pm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_update_user_password_with_pass(self, *args): - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters(params=load_fixture('load_auth_user_with_pass.json')) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.exists = Mock(return_value=True) - pm.update_on_device = Mock(return_value=True) - pm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_update_user_shell_to_none(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='none', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters( - params=dict( - user='admin', - shell='tmsh' - ) - ) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.exists = Mock(return_value=True) - pm.update_on_device = Mock(return_value=True) - pm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['shell'] == 'none' - - def test_update_user_shell_to_none_shell_attribute_missing(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='none', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - access = [{'name': 'Common', 'role': 'guest'}] - current = Parameters( - params=dict( - user='admin', - partition_access=access - ) - ) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.exists = Mock(return_value=True) - pm.update_on_device = Mock(return_value=True) - pm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - results = mm.exec_module() - - assert results['changed'] is False - assert not hasattr(results, 'shell') - - def test_update_user_shell_to_bash(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - access = [{'name': 'all', 'role': 'admin'}] - current = Parameters( - params=dict( - user='admin', - shell='tmsh', - partition_access=access - ) - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.exists = Mock(return_value=True) - upm.update_on_device = Mock(return_value=True) - upm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['shell'] == 'bash' - - def test_update_user_shell_to_bash_mutliple_roles(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - access = [ - {'name': 'Common', 'role': 'operator'}, - {'name': 'all', 'role': 'guest'} - ] - current = Parameters( - params=dict( - user='admin', - shell='tmsh', - partition_access=access - ) - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.exists = Mock(return_value=True) - upm.update_on_device = Mock(return_value=True) - upm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - msg = "Shell access is only available to 'admin' or " \ - "'resource-admin' roles." - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - assert str(ex.value) == msg - - -class TestLegacyManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_user.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_user.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_user(self, *args): - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - partition_access=['Common:guest'], - update_password='on_create', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.create_on_device = Mock(return_value=True) - upm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['partition_access'] == ['Common:guest'] - - def test_create_user_no_password(self, *args): - set_module_args(dict( - username_credential='someuser', - partition_access=['Common:guest'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.create_on_device = Mock(return_value=True) - upm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['partition_access'] == ['Common:guest'] - - def test_create_user_partition_access_raises(self, *args): - set_module_args(dict( - username_credential='someuser', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.create_on_device = Mock(return_value=True) - upm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - msg = "The 'partition_access' option " \ - "is required when creating a resource." - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - assert str(ex.value) == msg - - def test_create_user_shell_bash(self, *args): - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - partition_access=['all:admin'], - update_password='on_create', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.create_on_device = Mock(return_value=True) - upm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['partition_access'] == ['all:admin'] - - def test_create_user_shell_not_permitted_raises(self, *args): - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - partition_access=['Common:guest'], - update_password='on_create', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.create_on_device = Mock(return_value=True) - upm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - msg = "Shell access is only available to 'admin' or " \ - "'resource-admin' roles." - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - assert str(ex.value) == msg - - def test_update_user_password(self, *args): - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - access = [{'name': 'Common', 'role': 'guest'}] - current = Parameters( - params=dict( - shell='tmsh', - partition_access=access - ) - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.exists = Mock(return_value=True) - upm.update_on_device = Mock(return_value=True) - upm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_update_user_shell_to_none(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='none', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters( - params=dict( - user='admin', - shell='tmsh' - ) - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.exists = Mock(return_value=True) - upm.update_on_device = Mock(return_value=True) - upm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['shell'] == 'none' - - def test_update_user_shell_to_none_shell_attribute_missing(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='none', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - access = [{'name': 'Common', 'role': 'guest'}] - current = Parameters( - params=dict( - user='admin', - partition_access=access - ) - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.exists = Mock(return_value=True) - upm.update_on_device = Mock(return_value=True) - upm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is False - assert not hasattr(results, 'shell') - - def test_update_user_shell_to_bash(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - access = [{'name': 'all', 'role': 'admin'}] - current = Parameters( - params=dict( - user='admin', - shell='tmsh', - partition_access=access - ) - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.exists = Mock(return_value=True) - upm.update_on_device = Mock(return_value=True) - upm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['shell'] == 'bash' - - def test_update_user_shell_to_bash_mutliple_roles(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - access = [ - {'name': 'Common', 'role': 'operator'}, - {'name': 'all', 'role': 'guest'} - ] - current = Parameters( - params=dict( - user='admin', - shell='tmsh', - partition_access=access - ) - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.exists = Mock(return_value=True) - upm.update_on_device = Mock(return_value=True) - upm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - msg = "Shell access is only available to 'admin' or " \ - "'resource-admin' roles." - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - assert str(ex.value) == msg diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_vcmp_guest.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_vcmp_guest.py deleted file mode 100644 index ff91367ef..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_vcmp_guest.py +++ /dev/null @@ -1,244 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_vcmp_guest import ( - ModuleParameters, ApiParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - initial_image='BIGIP-12.1.0.1.0.1447-HF1.iso', - mgmt_network='bridged', - mgmt_address='1.2.3.4/24', - vlans=[ - 'vlan1', - 'vlan2' - ] - ) - - p = ModuleParameters(params=args) - assert p.initial_image == 'BIGIP-12.1.0.1.0.1447-HF1.iso' - assert p.mgmt_network == 'bridged' - - def test_module_parameters_mgmt_bridged_without_subnet(self): - args = dict( - mgmt_network='bridged', - mgmt_address='1.2.3.4' - ) - - p = ModuleParameters(params=args) - assert p.mgmt_network == 'bridged' - assert p.mgmt_address == '1.2.3.4/32' - - def test_module_parameters_mgmt_address_cidr(self): - args = dict( - mgmt_network='bridged', - mgmt_address='1.2.3.4/24' - ) - - p = ModuleParameters(params=args) - assert p.mgmt_network == 'bridged' - assert p.mgmt_address == '1.2.3.4/24' - - def test_module_parameters_mgmt_address_subnet(self): - args = dict( - mgmt_network='bridged', - mgmt_address='1.2.3.4/255.255.255.0' - ) - - p = ModuleParameters(params=args) - assert p.mgmt_network == 'bridged' - assert p.mgmt_address == '1.2.3.4/24' - - def test_module_parameters_mgmt_route(self): - args = dict( - mgmt_route='1.2.3.4' - ) - - p = ModuleParameters(params=args) - assert p.mgmt_route == '1.2.3.4' - - def test_module_parameters_vcmp_software_image_facts(self): - # vCMP images may include a forward slash in their names. This is probably - # related to the slots on the system, but it is not a valid value to specify - # that slot when providing an initial image - args = dict( - initial_image='BIGIP-12.1.0.1.0.1447-HF1.iso/1', - ) - - p = ModuleParameters(params=args) - assert p.initial_image == 'BIGIP-12.1.0.1.0.1447-HF1.iso/1' - - def test_api_parameters(self): - args = dict( - initialImage="BIGIP-tmos-tier2-13.1.0.0.0.931.iso", - managementGw="2.2.2.2", - managementIp="1.1.1.1/24", - managementNetwork="bridged", - state="deployed", - vlans=[ - "/Common/vlan1", - "/Common/vlan2" - ] - ) - - p = ApiParameters(params=args) - assert p.initial_image == 'BIGIP-tmos-tier2-13.1.0.0.0.931.iso' - assert p.mgmt_route == '2.2.2.2' - assert p.mgmt_address == '1.1.1.1/24' - assert '/Common/vlan1' in p.vlans - assert '/Common/vlan2' in p.vlans - - def test_api_parameters_with_hotfix(self): - args = dict( - initialImage="BIGIP-14.1.0.3-0.0.6.iso", - initialHotfix="Hotfix-BIGIP-14.1.0.3.0.5.6-ENG.iso", - managementGw="2.2.2.2", - managementIp="1.1.1.1/24", - managementNetwork="bridged", - state="deployed", - vlans=[ - "/Common/vlan1", - "/Common/vlan2" - ] - ) - - p = ApiParameters(params=args) - assert p.initial_image == 'BIGIP-14.1.0.3-0.0.6.iso' - assert p.initial_hotfix == 'Hotfix-BIGIP-14.1.0.3.0.5.6-ENG.iso' - assert p.mgmt_route == '2.2.2.2' - assert p.mgmt_address == '1.1.1.1/24' - assert '/Common/vlan1' in p.vlans - assert '/Common/vlan2' in p.vlans - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_vcmp_guest.ModuleParameters.initial_image_exists') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_vcmp_guest.ModuleParameters.initial_hotfix_exists') - self.m2 = self.p2.start() - self.m2.return_value = True - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_vcmp_guest.tmos_version') - self.p4 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_vcmp_guest.send_teem') - self.m3 = self.p3.start() - self.m3.return_value = '14.1.0' - self.m4 = self.p4.start() - self.m4.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - self.p4.stop() - - def test_create_vcmpguest(self, *args): - set_module_args(dict( - name="guest1", - mgmt_network="bridged", - mgmt_address="10.10.10.10/24", - initial_image="BIGIP-13.1.0.0.0.931.iso", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - mm.is_deployed = Mock(side_effect=[False, True, True, True, True]) - mm.deploy_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'guest1' - - def test_create_vcmpguest_with_hotfix(self, *args): - set_module_args(dict( - name="guest2", - mgmt_network="bridged", - mgmt_address="10.10.10.10/24", - initial_image="BIGIP-14.1.0.3-0.0.6.iso", - initial_hotfix="Hotfix-BIGIP-14.1.0.3.0.5.6-ENG.iso", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - mm.is_deployed = Mock(side_effect=[False, True, True, True, True]) - mm.deploy_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'guest2' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_virtual_address.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_virtual_address.py deleted file mode 100644 index 706e565e0..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_virtual_address.py +++ /dev/null @@ -1,227 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_virtual_address import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - state='present', - address='1.1.1.1', - netmask='2.2.2.2', - connection_limit='10', - arp='enabled', - auto_delete='enabled', - icmp_echo='enabled', - availability_calculation='always', - ) - p = ModuleParameters(params=args) - assert p.state == 'present' - assert p.address == '1.1.1.1' - assert p.netmask == '2.2.2.2' - assert p.connection_limit == 10 - assert p.arp == 'enabled' - assert p.auto_delete == 'true' - assert p.icmp_echo == 'enabled' - assert p.availability_calculation == 'none' - - def test_api_parameters(self): - args = load_fixture('load_ltm_virtual_address_default.json') - p = ApiParameters(params=args) - assert p.name == '1.1.1.1' - assert p.address == '1.1.1.1' - assert p.arp == 'enabled' - assert p.auto_delete == 'true' - assert p.connection_limit == 0 - assert p.state == 'enabled' - assert p.icmp_echo == 'enabled' - assert p.netmask == '255.255.255.255' - assert p.route_advertisement_type == 'disabled' - assert p.availability_calculation == 'any' - - def test_module_parameters_advertise_route_all(self): - args = dict( - availability_calculation='when_all_available' - ) - p = ModuleParameters(params=args) - assert p.availability_calculation == 'all' - - def test_module_parameters_advertise_route_any(self): - args = dict( - availability_calculation='when_any_available' - ) - p = ModuleParameters(params=args) - assert p.availability_calculation == 'any' - - def test_module_parameters_icmp_echo_disabled(self): - args = dict( - icmp_echo='disabled' - ) - p = ModuleParameters(params=args) - assert p.icmp_echo == 'disabled' - - def test_module_parameters_icmp_echo_selective(self): - args = dict( - icmp_echo='selective' - ) - p = ModuleParameters(params=args) - assert p.icmp_echo == 'selective' - - def test_module_parameters_auto_delete_disabled(self): - args = dict( - auto_delete='disabled' - ) - p = ModuleParameters(params=args) - assert p.auto_delete == 'false' - - def test_module_parameters_arp_disabled(self): - args = dict( - arp='disabled' - ) - p = ModuleParameters(params=args) - assert p.arp == 'disabled' - - def test_module_parameters_state_present(self): - args = dict( - state='present' - ) - p = ModuleParameters(params=args) - assert p.state == 'present' - assert p.enabled == 'yes' - - def test_module_parameters_state_absent(self): - args = dict( - state='absent' - ) - p = ModuleParameters(params=args) - assert p.state == 'absent' - - def test_module_parameters_state_enabled(self): - args = dict( - state='enabled' - ) - p = ModuleParameters(params=args) - assert p.state == 'enabled' - assert p.enabled == 'yes' - - def test_module_parameters_state_disabled(self): - args = dict( - state='disabled' - ) - p = ModuleParameters(params=args) - assert p.state == 'disabled' - assert p.enabled == 'no' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_virtual_address.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_virtual_address.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_virtual_address(self, *args): - set_module_args(dict( - state='present', - address='1.1.1.1', - netmask='2.2.2.2', - connection_limit='10', - arp='yes', - auto_delete='yes', - icmp_echo='enabled', - advertise_route='always', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - - def test_delete_virtual_address(self, *args): - set_module_args(dict( - state='absent', - address='1.1.1.1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, False]) - mm.remove_from_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_virtual_server.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_virtual_server.py deleted file mode 100644 index e2236e507..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_virtual_server.py +++ /dev/null @@ -1,1020 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_virtual_server import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_destination_mutex_1(self): - args = dict( - destination='1.1.1.1' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - - def test_destination_mutex_2(self): - args = dict( - destination='1.1.1.1%2' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - assert p.destination_tuple.route_domain == 2 - - def test_destination_mutex_3(self): - args = dict( - destination='1.1.1.1:80' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - assert p.destination_tuple.port == 80 - - def test_destination_mutex_4(self): - args = dict( - destination='1.1.1.1%2:80' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - assert p.destination_tuple.port == 80 - assert p.destination_tuple.route_domain == 2 - - def test_api_destination_mutex_5(self): - args = dict( - destination='/Common/1.1.1.1' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - - def test_api_destination_mutex_6(self): - args = dict( - destination='/Common/1.1.1.1%2' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - assert p.destination_tuple.route_domain == 2 - - def test_api_destination_mutex_7(self): - args = dict( - destination='/Common/1.1.1.1:80' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - assert p.destination_tuple.port == 80 - - def test_api_destination_mutex_8(self): - args = dict( - destination='/Common/1.1.1.1%2:80' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - assert p.destination_tuple.port == 80 - assert p.destination_tuple.route_domain == 2 - - def test_destination_mutex_9(self): - args = dict( - destination='2700:bc00:1f10:101::6' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '2700:bc00:1f10:101::6' - - def test_destination_mutex_10(self): - args = dict( - destination='2700:bc00:1f10:101::6%2' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '2700:bc00:1f10:101::6' - assert p.destination_tuple.route_domain == 2 - - def test_destination_mutex_11(self): - args = dict( - destination='2700:bc00:1f10:101::6.80' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '2700:bc00:1f10:101::6' - assert p.destination_tuple.port == 80 - - def test_destination_mutex_12(self): - args = dict( - destination='2700:bc00:1f10:101::6%2.80' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '2700:bc00:1f10:101::6' - assert p.destination_tuple.port == 80 - assert p.destination_tuple.route_domain == 2 - - def test_module_no_partition_prefix_parameters(self): - args = dict( - state='present', - partition='Common', - name='my-virtual-server', - destination='10.10.10.10', - port=443, - pool='my-pool', - snat='Automap', - description='Test Virtual Server', - profiles=[ - dict( - name='fix', - context='all' - ) - ], - enabled_vlans=['vlan2'] - ) - p = ModuleParameters(params=args) - assert p.name == 'my-virtual-server' - assert p.partition == 'Common' - assert p.port == 443 - assert p.destination == '/Common/10.10.10.10:443' - assert p.pool == '/Common/my-pool' - assert p.snat == {'type': 'automap'} - assert p.description == 'Test Virtual Server' - assert len(p.profiles) == 1 - assert 'context' in p.profiles[0] - assert 'name' in p.profiles[0] - assert '/Common/vlan2' in p.enabled_vlans - - def test_module_partition_prefix_parameters(self): - args = dict( - state='present', - partition='Common', - name='my-virtual-server', - destination='10.10.10.10', - port=443, - pool='/Common/my-pool', - snat='Automap', - description='Test Virtual Server', - profiles=[ - dict( - name='fix', - context='all' - ) - ], - enabled_vlans=['/Common/vlan2'] - ) - p = ModuleParameters(params=args) - assert p.name == 'my-virtual-server' - assert p.partition == 'Common' - assert p.port == 443 - assert p.destination == '/Common/10.10.10.10:443' - assert p.pool == '/Common/my-pool' - assert p.snat == {'type': 'automap'} - assert p.description == 'Test Virtual Server' - assert len(p.profiles) == 1 - assert 'context' in p.profiles[0] - assert 'name' in p.profiles[0] - assert '/Common/vlan2' in p.enabled_vlans - - def test_api_parameters_variables(self): - args = { - "kind": "tm:ltm:virtual:virtualstate", - "name": "my-virtual-server", - "partition": "Common", - "fullPath": "/Common/my-virtual-server", - "generation": 54, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server?expandSubcollections=true&ver=12.1.2", - "addressStatus": "yes", - "autoLasthop": "default", - "cmpEnabled": "yes", - "connectionLimit": 0, - "description": "Test Virtual Server", - "destination": "/Common/10.10.10.10:443", - "enabled": True, - "gtmScore": 0, - "ipProtocol": "tcp", - "mask": "255.255.255.255", - "mirror": "disabled", - "mobileAppTunnel": "disabled", - "nat64": "disabled", - "rateLimit": "disabled", - "rateLimitDstMask": 0, - "rateLimitMode": "object", - "rateLimitSrcMask": 0, - "serviceDownImmediateAction": "none", - "source": "0.0.0.0/0", - "sourceAddressTranslation": { - "type": "automap" - }, - "sourcePort": "preserve", - "synCookieStatus": "not-activated", - "translateAddress": "enabled", - "translatePort": "enabled", - "vlansEnabled": True, - "vsIndex": 3, - "vlans": [ - "/Common/net1" - ], - "vlansReference": [ - { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~net1?ver=12.1.2" - } - ], - "policiesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/policies?ver=12.1.2", - "isSubcollection": True - }, - "profilesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles?ver=12.1.2", - "isSubcollection": True, - "items": [ - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "http", - "partition": "Common", - "fullPath": "/Common/http", - "generation": 54, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~http?ver=12.1.2", - "context": "all", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/http/~Common~http?ver=12.1.2" - } - }, - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "serverssl", - "partition": "Common", - "fullPath": "/Common/serverssl", - "generation": 54, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~serverssl?ver=12.1.2", - "context": "serverside", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/server-ssl/~Common~serverssl?ver=12.1.2" - } - }, - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "tcp", - "partition": "Common", - "fullPath": "/Common/tcp", - "generation": 54, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~tcp?ver=12.1.2", - "context": "all", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/tcp/~Common~tcp?ver=12.1.2" - } - } - ] - } - } - p = ApiParameters(params=args) - assert p.name == 'my-virtual-server' - assert p.partition == 'Common' - assert p.port == 443 - assert p.destination == '/Common/10.10.10.10:443' - assert p.snat == {'type': 'automap'} - assert p.description == 'Test Virtual Server' - assert 'context' in p.profiles[0] - assert 'name' in p.profiles[0] - assert 'fullPath' in p.profiles[0] - assert p.profiles[0]['context'] == 'all' - assert p.profiles[0]['name'] == 'http' - assert p.profiles[0]['fullPath'] == '/Common/http' - assert '/Common/net1' in p.vlans - - def test_module_address_translation_enabled(self): - args = dict( - address_translation=True - ) - p = ModuleParameters(params=args) - assert p.address_translation == 'enabled' - - def test_module_address_translation_disabled(self): - args = dict( - address_translation=False - ) - p = ModuleParameters(params=args) - assert p.address_translation == 'disabled' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_virtual_server.modules_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = ['ltm', 'gtm', 'asm'] - self.p2 = patch( - 'ansible_collections.f5networks.f5_modules.plugins.modules.bigip_virtual_server.Parameters._read_current_clientssl_profiles_from_device' - ) - self.p3 = patch( - 'ansible_collections.f5networks.f5_modules.plugins.modules.bigip_virtual_server.Parameters._read_current_serverssl_profiles_from_device' - ) - self.p4 = patch( - 'ansible_collections.f5networks.f5_modules.plugins.modules.bigip_virtual_server.VirtualServerValidator.check_create' - ) - self.p5 = patch( - 'ansible_collections.f5networks.f5_modules.plugins.modules.bigip_virtual_server.VirtualServerValidator.check_update' - ) - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - self.m5 = self.p5.start() - self.m2.return_value = ['asda', 'clientssl', 'cs_foobar.star.local'] - self.m3.return_value = ['baz', 'serverssl', 'ss_foobar.star.local'] - self.m4.return_value = Mock(return_value=True) - self.m5.return_value = Mock(return_value=True) - - self.p6 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_virtual_server.tmos_version') - self.p7 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_virtual_server.send_teem') - self.m6 = self.p6.start() - self.m6.return_value = '14.1.0' - self.m7 = self.p7.start() - self.m7.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - self.p4.stop() - self.p5.stop() - - def test_create_virtual_server(self, *args): - set_module_args(dict( - all_profiles=[ - dict( - name='http' - ), - dict( - name='clientssl' - ) - ], - description="Test Virtual Server", - destination="10.10.10.10", - name="my-snat-pool", - partition="Common", - port="443", - snat="Automap", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - - def test_delete_virtual_server(self, *args): - set_module_args(dict( - all_profiles=[ - 'http', 'clientssl' - ], - description="Test Virtual Server", - destination="10.10.10.10", - name="my-snat-pool", - partition="Common", - port="443", - snat="Automap", - state="absent", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_enable_vs_that_is_already_enabled(self, *args): - set_module_args(dict( - all_profiles=[ - 'http', 'clientssl' - ], - description="Test Virtual Server", - destination="10.10.10.10", - name="my-snat-pool", - partition="Common", - port="443", - snat="Automap", - state="absent", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters( - dict( - agent_status_traps='disabled' - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - results = mm.exec_module() - - assert results['changed'] is False - - def test_modify_port(self, *args): - set_module_args(dict( - name="my-virtual-server", - partition="Common", - port="10443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_ltm_virtual_1.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - - def test_modify_port_idempotent(self, *args): - set_module_args(dict( - name="my-virtual-server", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_ltm_virtual_1.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - results = mm.exec_module() - - assert results['changed'] is False - - def test_modify_vlans_idempotent(self, *args): - set_module_args(dict( - name="my-virtual-server", - partition="Common", - disabled_vlans=[ - "net1" - ], - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_ltm_virtual_2.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_modify_profiles(self, *args): - set_module_args(dict( - name="my-virtual-server", - partition="Common", - profiles=[ - 'http', 'clientssl' - ], - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_ltm_virtual_2.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert len(results['profiles']) == 2 - assert 'name' in results['profiles'][0] - assert 'context' in results['profiles'][0] - assert results['profiles'][0]['name'] == 'http' - assert results['profiles'][0]['context'] == 'all' - assert 'name' in results['profiles'][1] - assert 'context' in results['profiles'][1] - assert results['profiles'][1]['name'] == 'clientssl' - assert results['profiles'][1]['context'] == 'clientside' - - def test_update_virtual_server(self, *args): - set_module_args(dict( - profiles=[ - dict( - name='http' - ), - dict( - name='clientssl' - ) - ], - description="foo virtual", - destination="1.1.1.1", - name="my-virtual-server", - partition="Common", - port="8443", - snat="snat-pool1", - state="disabled", - source='1.2.3.4/32', - irules=[ - 'irule1', - 'irule2' - ], - policies=[ - 'policy1', - 'policy2' - ], - enabled_vlans=[ - 'vlan1', - 'vlan2' - ], - pool='my-pool', - default_persistence_profile='source_addr', - fallback_persistence_profile='dest_addr', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_ltm_virtual_3.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['source'] == '1.2.3.4/32' - assert results['description'] == 'foo virtual' - assert results['snat'] == '/Common/snat-pool1' - assert results['destination'] == '1.1.1.1' - assert results['port'] == 8443 - assert results['default_persistence_profile'] == '/Common/source_addr' - assert results['fallback_persistence_profile'] == '/Common/dest_addr' - - # policies - assert len(results['policies']) == 2 - assert '/Common/policy1' in results['policies'] - assert '/Common/policy2' in results['policies'] - - # irules - assert len(results['irules']) == 2 - assert '/Common/irule1' in results['irules'] - assert '/Common/irule2' in results['irules'] - - # vlans - assert len(results['enabled_vlans']) == 2 - assert '/Common/vlan1' in results['enabled_vlans'] - assert '/Common/vlan2' in results['enabled_vlans'] - - # profiles - assert len(results['profiles']) == 2 - assert 'name' in results['profiles'][0] - assert 'context' in results['profiles'][0] - assert results['profiles'][0]['name'] == 'http' - assert results['profiles'][0]['context'] == 'all' - assert 'name' in results['profiles'][1] - assert 'context' in results['profiles'][1] - assert results['profiles'][1]['name'] == 'clientssl' - assert results['profiles'][1]['context'] == 'clientside' - - def test_create_virtual_server_with_address_translation_bool_true(self, *args): - set_module_args(dict( - destination="10.10.10.10", - address_translation=True, - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['address_translation'] is True - - def test_create_virtual_server_with_address_translation_string_yes(self, *args): - set_module_args(dict( - destination="10.10.10.10", - address_translation='yes', - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['address_translation'] is True - - def test_create_virtual_server_with_address_translation_bool_false(self, *args): - set_module_args(dict( - destination="10.10.10.10", - address_translation=False, - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['address_translation'] is False - - def test_create_virtual_server_with_address_translation_string_no(self, *args): - set_module_args(dict( - destination="10.10.10.10", - address_translation='no', - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['address_translation'] is False - - def test_create_virtual_server_with_port_translation_bool_true(self, *args): - set_module_args(dict( - destination="10.10.10.10", - port_translation=True, - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['port_translation'] is True - - def test_create_virtual_server_with_port_translation_string_yes(self, *args): - set_module_args(dict( - destination="10.10.10.10", - port_translation='yes', - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['port_translation'] is True - - def test_create_virtual_server_with_port_translation_bool_false(self, *args): - set_module_args(dict( - destination="10.10.10.10", - port_translation=False, - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['port_translation'] is False - - def test_create_virtual_server_with_port_translation_string_no(self, *args): - set_module_args(dict( - destination="10.10.10.10", - port_translation='no', - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['port_translation'] is False - - def test_create_virtual_server_with_check_profiles_bool_true(self, *args): - set_module_args(dict( - all_profiles=[ - 'http', 'clientssl' - ], - destination="10.10.10.10", - name="my-snat-pool", - partition="Common", - port="443", - state="present", - check_profiles='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_virtual_server_with_check_profiles_bool_false(self, *args): - set_module_args(dict( - all_profiles=[ - 'http', 'clientssl' - ], - destination="10.10.10.10", - name="my-snat-pool", - partition="Common", - port="443", - state="present", - check_profiles='no', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_vlan.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_vlan.py deleted file mode 100644 index 4ad0c1aa8..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_vlan.py +++ /dev/null @@ -1,338 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_vlan import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class BigIpObj(object): - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='somevlan', - tag=213, - description='fakevlan', - untagged_interfaces=['1.1'], - hw_syn_cookie=True, - ) - p = ModuleParameters(params=args) - - assert p.name == 'somevlan' - assert p.tag == 213 - assert p.description == 'fakevlan' - assert p.untagged_interfaces == ['1.1'] - assert p.hw_syn_cookie == 'enabled' - - def test_api_parameters(self): - args = dict( - name='somevlan', - description='fakevlan', - tag=213 - ) - - p = ApiParameters(params=args) - - assert p.name == 'somevlan' - assert p.tag == 213 - assert p.description == 'fakevlan' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_vlan.tmos_version') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_vlan.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = '14.1.0' - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p2.stop() - self.p3.stop() - - def test_create_vlan(self, *args): - set_module_args(dict( - name='somevlan', - description='fakevlan', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'fakevlan' - - def test_create_vlan_tagged_interface(self, *args): - set_module_args(dict( - name='somevlan', - tagged_interface=['2.1'], - tag=213, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['tagged_interfaces'] == ['2.1'] - assert results['tag'] == 213 - - def test_create_vlan_untagged_interface(self, *args): - set_module_args(dict( - name='somevlan', - untagged_interface=['2.1'], - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['untagged_interfaces'] == ['2.1'] - - def test_create_vlan_tagged_interfaces(self, *args): - set_module_args(dict( - name='somevlan', - tagged_interface=['2.1', '1.1'], - tag=213, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['tagged_interfaces'] == ['1.1', '2.1'] - assert results['tag'] == 213 - - def test_create_vlan_untagged_interfaces(self, *args): - set_module_args(dict( - name='somevlan', - untagged_interface=['2.1', '1.1'], - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['untagged_interfaces'] == ['1.1', '2.1'] - - def test_update_vlan_untag_interface(self, *args): - set_module_args(dict( - name='somevlan', - untagged_interface=['2.1'], - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - current = ApiParameters(params=load_fixture('load_vlan.json')) - interfaces = load_fixture('load_vlan_interfaces.json') - current.update({'interfaces': interfaces}) - - mm.update_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['untagged_interfaces'] == ['2.1'] - - def test_update_vlan_tag_interface(self, *args): - set_module_args(dict( - name='somevlan', - tagged_interface=['2.1'], - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - current = ApiParameters(params=load_fixture('load_vlan.json')) - - mm.update_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['tagged_interfaces'] == ['2.1'] - - def test_update_vlan_description(self, *args): - set_module_args(dict( - name='somevlan', - description='changed_that', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - current = ApiParameters(params=load_fixture('update_vlan_description.json')) - - mm.update_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'changed_that' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_wait.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_wait.py deleted file mode 100644 index c0eb5e762..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigip_wait.py +++ /dev/null @@ -1,122 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigip_wait import ( - Parameters, ModuleManager, V2Manager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - type='standard', - delay=3, - timeout=500, - sleep=10, - msg='We timed out during waiting for BIG-IP :-(' - ) - - p = Parameters(params=args) - assert p.delay == 3 - assert p.timeout == 500 - assert p.sleep == 10 - assert p.msg == 'We timed out during waiting for BIG-IP :-(' - - def test_module_string_parameters(self): - args = dict( - type='standard', - delay='3', - timeout='500', - sleep='10', - msg='We timed out during waiting for BIG-IP :-(' - ) - - p = Parameters(params=args) - assert p.delay == 3 - assert p.timeout == 500 - assert p.sleep == 10 - assert p.msg == 'We timed out during waiting for BIG-IP :-(' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigip_wait.send_teem') - self.m3 = self.p3.start() - self.m3.return_value = True - - def tearDown(self): - self.p3.stop() - self.patcher1.stop() - - def test_wait_already_available(self, *args): - set_module_args(dict( - provider=dict( - server='localhost', - password='password', - user='admin', - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - m1 = V2Manager(module=module) - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=m1) - - m1._connect_to_device = Mock(return_value=True) - m1._device_is_rebooting = Mock(return_value=False) - m1._is_mprov_running_on_device = Mock(return_value=False) - m1._get_client_connection = Mock(return_value=True) - m1._rest_endpoints_ready = Mock(side_effect=[False, False, True]) - - results = mm.exec_module() - - assert results['changed'] is False - assert results['elapsed'] == 0 diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_fasthttp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_fasthttp.py deleted file mode 100644 index 60ebfeb52..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_fasthttp.py +++ /dev/null @@ -1,213 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fasthttp import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ) - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.config_set_name == 'foo' - assert p.sub_path == 'foo' - assert p.http_profile == 'profile_http' - assert p.service_environment == 'bar' - assert len(p.servers) == 2 - assert 'address' in p.servers[0] - assert 'port' in p.servers[0] - assert 'address' in p.servers[1] - assert 'port' in p.servers[1] - assert p.servers[0]['address'] == '1.2.3.4' - assert p.servers[0]['port'] == 8080 - assert p.servers[1]['address'] == '5.6.7.8' - assert p.servers[1]['port'] == 8000 - assert 'address' in p.inbound_virtual - assert 'netmask' in p.inbound_virtual - assert 'port' in p.inbound_virtual - assert p.inbound_virtual['address'] == '2.2.2.2' - assert p.inbound_virtual['netmask'] == '255.255.255.255' - assert p.inbound_virtual['port'] == 80 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fasthttp.bigiq_version') - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fasthttp.ModuleParameters.template_reference') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fasthttp.ModuleParameters.ssg_reference') - self.p4 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fasthttp.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar2') - self.m4.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - self.p5 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fasthttp.send_teem') - self.m5 = self.p5.start() - self.m5.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - self.p4.stop() - self.p5.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.check_bigiq_version = Mock(return_value=True) - mm.has_no_service_environment = Mock(return_value=False) - mm.wait_for_apply_template_task = Mock(return_value=True) - - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(side_effect=[False, True]) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - - def test_bigiq_version_raises(self): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - msg = 'Module supports only BIGIQ version 6.0.x or lower.' - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_fastl4_tcp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_fastl4_tcp.py deleted file mode 100644 index 25dd2f11c..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_fastl4_tcp.py +++ /dev/null @@ -1,206 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fastl4_tcp import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ) - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.config_set_name == 'foo' - assert p.sub_path == 'foo' - assert p.http_profile == 'profile_http' - assert p.service_environment == 'bar' - assert len(p.servers) == 2 - assert 'address' in p.servers[0] - assert 'port' in p.servers[0] - assert 'address' in p.servers[1] - assert 'port' in p.servers[1] - assert p.servers[0]['address'] == '1.2.3.4' - assert p.servers[0]['port'] == 8080 - assert p.servers[1]['address'] == '5.6.7.8' - assert p.servers[1]['port'] == 8000 - assert 'address' in p.inbound_virtual - assert 'netmask' in p.inbound_virtual - assert 'port' in p.inbound_virtual - assert p.inbound_virtual['address'] == '2.2.2.2' - assert p.inbound_virtual['netmask'] == '255.255.255.255' - assert p.inbound_virtual['port'] == 80 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fastl4_tcp.bigiq_version') - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fastl4_tcp.ModuleParameters.template_reference') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fastl4_tcp.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - self.p5 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fastl4_tcp.send_teem') - self.m5 = self.p5.start() - self.m5.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - self.p5.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.check_bigiq_version = Mock(return_value=True) - mm.has_no_service_environment = Mock(return_value=False) - mm.wait_for_apply_template_task = Mock(return_value=True) - - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(side_effect=[False, True]) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - - def test_bigiq_version_raises(self): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - msg = 'Module supports only BIGIQ version 6.0.x or lower.' - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_fastl4_udp.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_fastl4_udp.py deleted file mode 100644 index 4b8b80632..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_fastl4_udp.py +++ /dev/null @@ -1,208 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fastl4_udp import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ) - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.config_set_name == 'foo' - assert p.sub_path == 'foo' - assert p.http_profile == 'profile_http' - assert p.service_environment == 'bar' - assert len(p.servers) == 2 - assert 'address' in p.servers[0] - assert 'port' in p.servers[0] - assert 'address' in p.servers[1] - assert 'port' in p.servers[1] - assert p.servers[0]['address'] == '1.2.3.4' - assert p.servers[0]['port'] == 8080 - assert p.servers[1]['address'] == '5.6.7.8' - assert p.servers[1]['port'] == 8000 - assert 'address' in p.inbound_virtual - assert 'netmask' in p.inbound_virtual - assert 'port' in p.inbound_virtual - assert p.inbound_virtual['address'] == '2.2.2.2' - assert p.inbound_virtual['netmask'] == '255.255.255.255' - assert p.inbound_virtual['port'] == 80 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fastl4_udp.bigiq_version') - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fastl4_udp.ModuleParameters.template_reference') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fastl4_udp.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - self.p5 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_fastl4_udp.send_teem') - self.m5 = self.p5.start() - self.m5.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - self.p5.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.check_bigiq_version = Mock(return_value=True) - mm.has_no_service_environment = Mock(return_value=False) - mm.wait_for_apply_template_task = Mock(return_value=True) - - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(side_effect=[False, True]) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - - def test_bigiq_version_raises(self): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - msg = 'Module supports only BIGIQ version 6.0.x or lower.' - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_http.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_http.py deleted file mode 100644 index 678d79532..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_http.py +++ /dev/null @@ -1,213 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_http import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ) - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.config_set_name == 'foo' - assert p.sub_path == 'foo' - assert p.http_profile == 'profile_http' - assert p.service_environment == 'bar' - assert len(p.servers) == 2 - assert 'address' in p.servers[0] - assert 'port' in p.servers[0] - assert 'address' in p.servers[1] - assert 'port' in p.servers[1] - assert p.servers[0]['address'] == '1.2.3.4' - assert p.servers[0]['port'] == 8080 - assert p.servers[1]['address'] == '5.6.7.8' - assert p.servers[1]['port'] == 8000 - assert 'address' in p.inbound_virtual - assert 'netmask' in p.inbound_virtual - assert 'port' in p.inbound_virtual - assert p.inbound_virtual['address'] == '2.2.2.2' - assert p.inbound_virtual['netmask'] == '255.255.255.255' - assert p.inbound_virtual['port'] == 80 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_http.bigiq_version') - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_http.ModuleParameters.template_reference') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_http.ModuleParameters.ssg_reference') - self.p4 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_http.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar2') - self.m4.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - self.p5 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_http.send_teem') - self.m5 = self.p5.start() - self.m5.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - self.p4.stop() - self.p5.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.check_bigiq_version = Mock(return_value=True) - mm.has_no_service_environment = Mock(return_value=False) - mm.wait_for_apply_template_task = Mock(return_value=True) - - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(side_effect=[False, True]) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - - def test_bigiq_version_raises(self): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - msg = 'Module supports only BIGIQ version 6.0.x or lower.' - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_https_offload.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_https_offload.py deleted file mode 100644 index 70446eace..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_https_offload.py +++ /dev/null @@ -1,231 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_https_offload import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - redirect_virtual=dict( - address='3.3.3.3', - netmask='255.255.255.255', - port=80 - ) - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.config_set_name == 'foo' - assert p.sub_path == 'foo' - assert p.http_profile == 'profile_http' - assert p.service_environment == 'bar' - assert len(p.servers) == 2 - assert 'address' in p.servers[0] - assert 'port' in p.servers[0] - assert 'address' in p.servers[1] - assert 'port' in p.servers[1] - assert p.servers[0]['address'] == '1.2.3.4' - assert p.servers[0]['port'] == 8080 - assert p.servers[1]['address'] == '5.6.7.8' - assert p.servers[1]['port'] == 8000 - assert 'address' in p.inbound_virtual - assert 'netmask' in p.inbound_virtual - assert 'port' in p.inbound_virtual - assert p.inbound_virtual['address'] == '2.2.2.2' - assert p.inbound_virtual['netmask'] == '255.255.255.255' - assert p.inbound_virtual['port'] == 80 - assert 'address' in p.redirect_virtual - assert 'netmask' in p.redirect_virtual - assert 'port' in p.redirect_virtual - assert p.redirect_virtual['address'] == '3.3.3.3' - assert p.redirect_virtual['netmask'] == '255.255.255.255' - assert p.redirect_virtual['port'] == 80 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_https_offload.bigiq_version') - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_https_offload.ModuleParameters.template_reference') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_https_offload.ModuleParameters.ssg_reference') - self.p4 = patch( - 'ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_https_offload.ModuleParameters.default_device_reference' - ) - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar2') - self.m4.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - self.p5 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_https_offload.send_teem') - self.m5 = self.p5.start() - self.m5.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - self.p4.stop() - self.p5.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - redirect_virtual=dict( - address='3.3.3.3', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.check_bigiq_version = Mock(return_value=True) - mm.has_no_service_environment = Mock(return_value=False) - mm.wait_for_apply_template_task = Mock(return_value=True) - - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(side_effect=[False, True]) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - - def test_bigiq_version_raises(self): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - msg = 'Module supports only BIGIQ version 6.0.x or lower.' - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_https_waf.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_https_waf.py deleted file mode 100644 index ccad35ecb..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_application_https_waf.py +++ /dev/null @@ -1,237 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_https_waf import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.plugins.module_utils.common import F5ModuleError -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - redirect_virtual=dict( - address='3.3.3.3', - netmask='255.255.255.255', - port=80 - ), - domain_names=[ - 'foo.baz.com', - 'bar.baz.com' - ] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.config_set_name == 'foo' - assert p.sub_path == 'foo' - assert p.http_profile == 'profile_http' - assert p.service_environment == 'bar' - assert len(p.servers) == 2 - assert 'address' in p.servers[0] - assert 'port' in p.servers[0] - assert 'address' in p.servers[1] - assert 'port' in p.servers[1] - assert p.servers[0]['address'] == '1.2.3.4' - assert p.servers[0]['port'] == 8080 - assert p.servers[1]['address'] == '5.6.7.8' - assert p.servers[1]['port'] == 8000 - assert 'address' in p.inbound_virtual - assert 'netmask' in p.inbound_virtual - assert 'port' in p.inbound_virtual - assert p.inbound_virtual['address'] == '2.2.2.2' - assert p.inbound_virtual['netmask'] == '255.255.255.255' - assert p.inbound_virtual['port'] == 80 - assert 'address' in p.redirect_virtual - assert 'netmask' in p.redirect_virtual - assert 'port' in p.redirect_virtual - assert p.redirect_virtual['address'] == '3.3.3.3' - assert p.redirect_virtual['netmask'] == '255.255.255.255' - assert p.redirect_virtual['port'] == 80 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_https_waf.bigiq_version') - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_https_waf.ModuleParameters.template_reference') - self.p3 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_https_waf.ModuleParameters.ssg_reference') - self.p4 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_https_waf.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar2') - self.m4.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - self.p5 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_application_https_waf.send_teem') - self.m5 = self.p5.start() - self.m5.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - self.p4.stop() - self.p5.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - redirect_virtual=dict( - address='3.3.3.3', - netmask='255.255.255.255', - port=80 - ), - domain_names=[ - 'foo.baz.com', - 'bar.baz.com' - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.check_bigiq_version = Mock(return_value=True) - mm.has_no_service_environment = Mock(return_value=False) - mm.wait_for_apply_template_task = Mock(return_value=True) - - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(side_effect=[False, True]) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - - def test_bigiq_version_raises(self): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - msg = 'Module supports only BIGIQ version 6.0.x or lower.' - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_device_discovery.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_device_discovery.py deleted file mode 100644 index 79f6e0d54..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_device_discovery.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_device_discovery import ( - ApiParameters, ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - device_address='192.168.1.1', - device_username='admin', - device_password='admin', - device_port=10443, - ha_name='bazfoo', - use_bigiq_sync='yes', - modules=['asm', 'ltm', 'security_shared'] - ) - - p = ModuleParameters(params=args) - assert p.device_address == '192.168.1.1' - assert p.device_username == 'admin' - assert p.device_password == 'admin' - assert p.device_port == 10443 - assert p.ha_name == 'bazfoo' - assert p.use_bigiq_sync is True - assert p.modules == ['asm', 'adc_core', 'security_shared'] - - def test_api_parameters(self): - args = load_fixture('load_machine_resolver.json') - - p = ApiParameters(params=args) - assert sorted(p.modules) == sorted(['asm', 'adc_core', 'security_shared']) - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_device_discovery.bigiq_version') - self.m1 = self.p1.start() - self.m1.return_value = '6.1.0' - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_device_discovery.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - - def test_create(self, *args): - set_module_args(dict( - device_address='192.168.1.1', - device_username='admin', - device_password='admin', - modules=['asm', 'ltm', 'security_shared'], - provider=dict( - password='password', - server='localhost', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.set_trust_with_device = Mock(return_value=True) - mm.discover_on_device = Mock(return_value=True) - mm.import_modules_on_device = Mock(return_value=True) - mm.check_bigiq_version = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_device_info.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_device_info.py deleted file mode 100644 index af2555575..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_device_info.py +++ /dev/null @@ -1,99 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_device_info import ( - Parameters, SystemInfoFactManager, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - gather_subset=['system-info'], - ) - p = Parameters(params=args) - assert p.gather_subset == ['system-info'] - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_device_info.bigiq_version') - self.m1 = self.p1.start() - self.m1.return_value = '6.1.0' - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_device_info.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - - def test_get_facts(self, *args): - set_module_args(dict( - gather_subset=['system-info'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - fixture1 = load_fixture('load_shared_system_setup_1.json') - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - tm = SystemInfoFactManager(module=module) - tm.read_collection_from_device = Mock(return_value=fixture1) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True - assert 'system_info' in results diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_regkey_license.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_regkey_license.py deleted file mode 100644 index 37fe8b084..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_regkey_license.py +++ /dev/null @@ -1,114 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_regkey_license import ( - ModuleParameters, ApiParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - regkey_pool='foo', - license_key='XXXX-XXXX-XXXX-XXXX-XXXX', - accept_eula=True, - description='this is a description' - ) - - p = ModuleParameters(params=args) - assert p.regkey_pool == 'foo' - assert p.license_key == 'XXXX-XXXX-XXXX-XXXX-XXXX' - assert p.accept_eula is True - assert p.description == 'this is a description' - - def test_api_parameters(self): - args = load_fixture('load_regkey_license_key.json') - - p = ApiParameters(params=args) - assert p.description == 'foo bar baz' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_regkey_license.bigiq_version') - self.m1 = self.p1.start() - self.m1.return_value = '6.1.0' - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_regkey_license.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - - def test_create(self, *args): - set_module_args(dict( - regkey_pool='foo', - license_key='XXXX-XXXX-XXXX-XXXX-XXXX', - accept_eula=True, - description='this is a description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'this is a description' diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_regkey_license_assignment.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_regkey_license_assignment.py deleted file mode 100644 index ebc3ad92f..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_regkey_license_assignment.py +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_regkey_license_assignment import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_unmanaged(self): - args = dict( - pool='foo-pool', - key='XXXX-XXXX-XXXX-XXXX-XXXX', - device='1.1.1.1', - managed=False, - device_username='admin', - device_password='secret', - device_port='8443' - ) - - p = ModuleParameters(params=args) - assert p.pool == 'foo-pool' - assert p.key == 'XXXX-XXXX-XXXX-XXXX-XXXX' - assert p.device == '1.1.1.1' - assert p.managed is False - assert p.device_username == 'admin' - assert p.device_password == 'secret' - assert p.device_port == 8443 - - def test_module_parameters_managed(self): - args = dict( - pool='foo-pool', - key='XXXX-XXXX-XXXX-XXXX-XXXX', - device='1.1.1.1', - managed=True, - ) - - p = ModuleParameters(params=args) - assert p.pool == 'foo-pool' - assert p.key == 'XXXX-XXXX-XXXX-XXXX-XXXX' - assert p.device == '1.1.1.1' - assert p.managed is True - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_regkey_license_assignment.bigiq_version') - self.m1 = self.p1.start() - self.m1.return_value = '6.1.0' - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_regkey_license_assignment.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - - def test_create(self, *args): - set_module_args(dict( - pool='foo-pool', - key='XXXX-XXXX-XXXX-XXXX-XXXX', - device='1.1.1.1', - device_username='admin', - device_password='secret', - managed='no', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.wait_for_device_to_be_licensed = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_regkey_pool.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_regkey_pool.py deleted file mode 100644 index 3b7ff91e1..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_regkey_pool.py +++ /dev/null @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_regkey_pool import ( - ModuleParameters, ApiParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - description='this is a description' - ) - - p = ModuleParameters(params=args) - assert p.description == 'this is a description' - - def test_api_parameters(self): - args = load_fixture('load_regkey_license_pool.json') - - p = ApiParameters(params=args) - assert p.description == 'this is a description' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_regkey_pool.bigiq_version') - self.m1 = self.p1.start() - self.m1.return_value = '6.1.0' - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_regkey_pool.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='bar baz', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_utility_license.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_utility_license.py deleted file mode 100644 index bb34fa593..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_utility_license.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_utility_license import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - license_key='XXXX-XXXX-XXXX-XXXX-XXXX', - accept_eula=True, - ) - - p = ModuleParameters(params=args) - assert p.license_key == 'XXXX-XXXX-XXXX-XXXX-XXXX' - assert p.accept_eula is True - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_utility_license.bigiq_version') - self.m1 = self.p1.start() - self.m1.return_value = '6.1.0' - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_utility_license.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - - def test_create(self, *args): - set_module_args(dict( - license_key='XXXX-XXXX-XXXX-XXXX-XXXX', - accept_eula=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.wait_for_initial_license_activation = Mock(return_value=True) - mm.wait_for_utility_license_activation = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_utility_license_assignment.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_utility_license_assignment.py deleted file mode 100644 index 7285c1462..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/network/f5/test_bigiq_utility_license_assignment.py +++ /dev/null @@ -1,129 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_utility_license_assignment import ( - ModuleParameters, ModuleManager, ArgumentSpec -) -from ansible_collections.f5networks.f5_modules.tests.unit.compat import unittest -from ansible_collections.f5networks.f5_modules.tests.unit.compat.mock import Mock, patch -from ansible_collections.f5networks.f5_modules.tests.unit.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_unmanaged(self): - args = dict( - offering='asdf', - key='XXXX-XXXX-XXXX-XXXX-XXXX', - device='1.1.1.1', - managed=False, - device_username='admin', - device_password='secret', - device_port='8443' - ) - - p = ModuleParameters(params=args) - assert p.offering == 'asdf' - assert p.key == 'XXXX-XXXX-XXXX-XXXX-XXXX' - assert p.device == '1.1.1.1' - assert p.managed is False - assert p.device_username == 'admin' - assert p.device_password == 'secret' - assert p.device_port == 8443 - - def test_module_parameters_managed(self): - args = dict( - offering='asdf', - key='XXXX-XXXX-XXXX-XXXX-XXXX', - device='1.1.1.1', - managed=True, - ) - - p = ModuleParameters(params=args) - assert p.offering == 'asdf' - assert p.key == 'XXXX-XXXX-XXXX-XXXX-XXXX' - assert p.device == '1.1.1.1' - assert p.managed is True - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.p1 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_utility_license_assignment.bigiq_version') - self.m1 = self.p1.start() - self.m1.return_value = '6.1.0' - self.p2 = patch('ansible_collections.f5networks.f5_modules.plugins.modules.bigiq_utility_license_assignment.send_teem') - self.m2 = self.p2.start() - self.m2.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - - def test_create(self, *args): - set_module_args(dict( - offering='asdf', - key='XXXX-XXXX-XXXX-XXXX-XXXX', - device='1.1.1.1', - device_username='admin', - device_password='secret', - managed='no', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.wait_for_device_to_be_licensed = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/modules/utils.py b/ansible_collections/f5networks/f5_modules/tests/unit/modules/utils.py deleted file mode 100644 index 5df4053af..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/modules/utils.py +++ /dev/null @@ -1,50 +0,0 @@ -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import json - -from ..compat import unittest -from ..compat.mock import patch -from ansible.module_utils import basic -from ansible.module_utils._text import to_bytes - - -def set_module_args(args): - if '_ansible_remote_tmp' not in args: - args['_ansible_remote_tmp'] = '/tmp' - if '_ansible_keep_remote_files' not in args: - args['_ansible_keep_remote_files'] = False - - args = json.dumps({'ANSIBLE_MODULE_ARGS': args}) - basic._ANSIBLE_ARGS = to_bytes(args) - - -class AnsibleExitJson(Exception): - pass - - -class AnsibleFailJson(Exception): - pass - - -def exit_json(*args, **kwargs): - if 'changed' not in kwargs: - kwargs['changed'] = False - raise AnsibleExitJson(kwargs) - - -def fail_json(*args, **kwargs): - kwargs['failed'] = True - raise AnsibleFailJson(kwargs) - - -class ModuleTestCase(unittest.TestCase): - - def setUp(self): - self.mock_module = patch.multiple(basic.AnsibleModule, exit_json=exit_json, fail_json=fail_json) - self.mock_module.start() - self.mock_sleep = patch('time.sleep') - self.mock_sleep.start() - set_module_args({}) - self.addCleanup(self.mock_module.stop) - self.addCleanup(self.mock_sleep.stop) diff --git a/ansible_collections/f5networks/f5_modules/tests/unit/requirements.yml b/ansible_collections/f5networks/f5_modules/tests/unit/requirements.yml deleted file mode 100644 index 8a46626d7..000000000 --- a/ansible_collections/f5networks/f5_modules/tests/unit/requirements.yml +++ /dev/null @@ -1,3 +0,0 @@ -integration_tests_dependencies: [] -unit_tests_dependencies: -- community.general |