[Bug]: `lbvserver_rewritepolicy_binding` not detecting existing resources / always report changes
Summary
> show ns version
NetScaler NS14.1: Build 21.57.nc, Date: Apr 18 2024, 16:06:59 (64-bit)
pip freeze output
ansible==9.6.0
ansible-compat==24.6.0
ansible-core==2.16.7
ansible-lint==24.5.0
attrs==23.2.0
black==24.4.2
bracex==2.4
certifi==2024.2.2
cffi==1.16.0
charset-normalizer==3.3.2
click==8.1.7
cryptography==42.0.7
distro==1.9.0
dnspython==2.6.1
enrich==1.2.7
filelock==3.14.0
git-filter-repo==2.38.0
idna==3.7
importlib_metadata==7.1.0
Jinja2==3.1.4
jsonschema==4.22.0
jsonschema-specifications==2023.12.1
lxml==4.6.3
markdown-it-py==3.0.0
MarkupSafe==2.1.5
mdurl==0.1.2
mypy-extensions==1.0.0
packaging==24.0
passlib==1.7.4
pathspec==0.12.1
platformdirs==4.2.2
pyasn1==0.6.0
pyasn1_modules==0.4.0
pycparser==2.22
Pygments==2.18.0
pyspnego==0.10.2
python-ldap==3.4.0
pyvmomi==8.0.2.0.1
pywinrm==0.4.1
PyYAML==6.0.1
referencing==0.35.1
requests==2.32.3
requests-credssp==2.0.0
requests-ntlm==1.2.0
resolvelib==1.0.1
rich==13.7.1
rpds-py==0.18.1
ruamel.yaml==0.18.6
ruamel.yaml.clib==0.2.8
selinux==0.2.1
six==1.16.0
subprocess-tee==0.4.1
tenacity==8.3.0
tomli==2.0.1
typing_extensions==4.12.0
urllib3==2.2.1
wcmatch==8.5.2
xmltodict==0.13.0
yamllint==1.35.1
zipp==3.19.0
Issue Type
Bug Report
Component Name
lbvserver_rewritepolicy_binding
Python Version
$ python --version
Python 3.10.12
Ansible Version
$ ansible --version
ansible [core 2.16.7]
config file = /home/user/git/company/infra/customers/test/ansible.cfg
configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /home/user/git/company/infra/customers/test/venv/lib/python3.10/site-packages/ansible
ansible collection location = /home/user/.ansible/collections:/usr/share/ansible/collections
executable location = /home/user/git/company/infra/customers/test/venv/bin/ansible
python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] ( /home/user/git/company/infra/customers/test/venv/bin/python3)
jinja version = 3.1.4
libyaml = True
Ansible Configuration
$ ansible-config dump --only-changed
CONFIG_FILE() = /home/user/git/company/infra/customers/test/ansible.cfg
DEFAULT_ROLES_PATH(/home/user/git/company/infra/customers/test/ansible.cfg) = ['/home/user/git/company/infra/customers/test/"roles', '/home/user/git/company/infra/customers/test/roles', '/usr/share/ansible>
PAGER(env: PAGER) = less
netscaler.adc Collection Version
$ ansible-galaxy collection list netscaler.adc
# /home/cydb/.ansible/collections/ansible_collections
Collection Version
------------- -------
netscaler.adc 2.6.1
Target NetScaler Version
> show ns version
Equivalent NetScaler CLI Command
bind lb vserver LBVS_Keycloak -policyName RP_Insert_X_Forwarded_Proto -priority 100 -gotoPriorityExpression NEXT -type REQUEST
Steps to Reproduce
{16:43}~/git/company/infra/customers/test:contrib/netscaler ✗ ➭ ansible-playbook -i inventory/hosts.yml -D playbooks/netscaler.yml --vault-password-file .vault-password --start-at-task="Bind rewrite policies and LBVS" -vvv
ansible-playbook [core 2.16.7]
config file = /home/user/git/company/infra/customers/test/ansible.cfg
configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /home/user/git/company/infra/customers/test/venv/lib/python3.10/site-packages/ansible
ansible collection location = /home/user/.ansible/collections:/usr/share/ansible/collections
executable location = /home/user/git/company/infra/customers/test/venv/bin/ansible-playbook
python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/home/user/git/company/infra/customers/test/venv/bin/python3)
jinja version = 3.1.4
libyaml = True
Using /home/user/git/company/infra/customers/test/ansible.cfg as config file
host_list declined parsing /home/user/git/company/infra/customers/test/inventory/hosts-kc-prd.yml as it did not pass its verify_file() method
script declined parsing /home/user/git/company/infra/customers/test/inventory/hosts-kc-prd.yml as it did not pass its verify_file() method
Parsed /home/user/git/company/infra/customers/test/inventory/hosts-kc-prd.yml inventory source with yaml plugin
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.
PLAYBOOK: netscaler.yml ********************************************************************************************************************************************************************
1 plays in playbooks/netscaler.yml
PLAY [NetScaler] ***************************************************************************************************************************************************************************
TASK [Bind rewrite policies and LBVS] ******************************************************************************************************************************************************
task path: /home/user/git/company/infra/customers/test/playbooks/netscaler.yml:494
<NSIP> ESTABLISH LOCAL CONNECTION FOR USER: test
<NSIP> EXEC /bin/sh -c 'echo ~test && sleep 0'
<NSIP> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/user/.ansible/tmp `"&& mkdir "` echo /home/user/.ansible/tmp/ansible-tmp-1719326890.8583844-1537215-210629528290893 `" && echo ansible-tmp-1719326890.8583844-1537215-210629528290893="` echo /home/user/.ansible/tmp/ansible-tmp-1719326890.8583844-1537215-210629528290893 `" ) && sleep 0'
<HOSTNAME> Attempting python interpreter discovery
<NSIP> EXEC /bin/sh -c 'echo PLATFORM; uname; echo FOUND; command -v '"'"'python3.12'"'"'; command -v '"'"'python3.11'"'"'; command -v '"'"'python3.10'"'"'; command -v '"'"'python3.9'"'"'; command -v '"'"'python3.8'"'"'; command -v '"'"'python3.7'"'"'; command -v '"'"'python3.6'"'"'; command -v '"'"'/usr/bin/python3'"'"'; command -v '"'"'/usr/libexec/platform-python'"'"'; command -v '"'"'python2.7'"'"'; command -v '"'"'/usr/bin/python'"'"'; command -v '"'"'python'"'"'; echo ENDFOUND && sleep 0'
<NSIP> EXEC /bin/sh -c '/home/user/git/company/infra/customers/test/venv/bin/python3.10 && sleep 0'
Using module file /home/user/.ansible/collections/ansible_collections/netscaler/adc/plugins/modules/lbvserver_rewritepolicy_binding.py
<NSIP> PUT /home/user/.ansible/tmp/ansible-local-15371558v8cicyp/tmpfpovnlkh TO /home/user/.ansible/tmp/ansible-tmp-1719326890.8583844-1537215-210629528290893/AnsiballZ_lbvserver_rewritepolicy_binding.py
<NSIP> EXEC /bin/sh -c 'chmod u+x /home/user/.ansible/tmp/ansible-tmp-1719326890.8583844-1537215-210629528290893/ /home/user/.ansible/tmp/ansible-tmp-1719326890.8583844-1537215-210629528290893/AnsiballZ_lbvserver_rewritepolicy_binding.py && sleep 0'
<NSIP> EXEC /bin/sh -c '/usr/bin/python3 /home/user/.ansible/tmp/ansible-tmp-1719326890.8583844-1537215-210629528290893/AnsiballZ_lbvserver_rewritepolicy_binding.py && sleep 0'
<NSIP> EXEC /bin/sh -c 'rm -f -r /home/user/.ansible/tmp/ansible-tmp-1719326890.8583844-1537215-210629528290893/ > /dev/null 2>&1 && sleep 0'
--- before
+++ after
@@ -1 +1,7 @@
-{}
+{
+ "bindpoint": "REQUEST",
+ "gotopriorityexpression": "NEXT",
+ "name": "LBVS_Keycloak",
+ "policyname": "RP_Insert_X_Forwarded_Proto",
+ "priority": 100.0
+}
changed: [HOSTNAME] => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": true,
"diff": {
"after": {
"bindpoint": "REQUEST",
"gotopriorityexpression": "NEXT",
"name": "LBVS_Keycloak",
"policyname": "RP_Insert_X_Forwarded_Proto",
"priority": 100.0
},
"before": {}
},
"invocation": {
"module_args": {
"api_path": "nitro/v1/config",
"bindpoint": "REQUEST",
"gotopriorityexpression": "NEXT",
"invoke": null,
"labelname": null,
"labeltype": null,
"managed_netscaler_instance_id": null,
"managed_netscaler_instance_ip": null,
"managed_netscaler_instance_name": null,
"managed_netscaler_instance_password": null,
"managed_netscaler_instance_username": null,
"name": "LBVS_Keycloak",
"netscaler_console_as_proxy_server": false,
"nitro_auth_token": null,
"nitro_pass": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
"nitro_protocol": "https",
"nitro_user": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
"nsip": "NSIP",
"order": null,
"policyname": "RP_Insert_X_Forwarded_Proto",
"priority": 100.0,
"save_config": false,
"state": "present",
"validate_certs": false
}
},
"loglines": [
"DEBUG: Initializing ModuleExecutor for resource lbvserver_rewritepolicy_binding",
"TRACE: ENTRY: common.get_valid_desired_states() called with ('lbvserver_rewritepolicy_binding',), {}",
"TRACE: EXIT: common.get_valid_desired_states() returned {'absent', 'present'}",
"TRACE: ENTRY: common.get_netscaler_version() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7fa2fe8d9a20>,), {}",
"TRACE: ENTRY: common.get_resource() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7fa2fe8d9a20>, 'nsversion'), {}",
"WARNING: Resource name nsversion not found in NITRO_RESOURCE_MAP to get get_arg_keys",
"TRACE: ENTRY: client.get() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7fa2fe8d9a20>,), {'resource': 'nsversion', 'id': None, 'args': {}}",
"TRACE: ENTRY: client.url_builder() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7fa2fe8d9a20>, 'nsversion'), {'id': None, 'args': {}, 'attrs': None, 'filter': None}",
"TRACE: EXIT: client.url_builder() returned https://NSIP/nitro/v1/config/nsversion",
"TRACE: ENTRY: client.send() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7fa2fe8d9a20>, 'GET', 'https://NSIP/nitro/v1/config/nsversion'), {}",
"DEBUG: self={'_module': <ansible.module_utils.basic.AnsibleModule object at 0x7fa2fe8d87c0>, 'check_mode': False, 'api_path': 'nitro/v1/config', 'resource_name': 'lbvserver_rewritepolicy_binding', '_headers': {'Content-Type': 'application/json', 'User-Agent': 'ansible-ctxadc', 'X-NITRO-USER': '********', 'X-NITRO-PASS': '********'}}",
"DEBUG: fetch_url()-resonse-info= GET: {'url': 'https://NSIP/nitro/v1/config/nsversion', 'status': 200, 'date': 'Tue, 25 Jun 2024 14:48:13 GMT', 'server': 'Apache', 'x-frame-options': 'SAMEORIGIN', 'expires': 'Thu, 19 Nov 1981 08:52:00 GMT', 'cache-control': 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', 'pragma': 'no-cache', 'vary': 'Accept-Encoding', 'feature-policy': \"camera 'none'; microphone 'none'; geolocation 'none'\", 'referrer-policy': 'no-referrer', 'x-xss-protection': '1; mode=block', 'x-content-type-options': 'nosniff', 'content-length': '201', 'content-type': 'application/json; charset=utf-8', 'connection': 'close', 'cookies_string': '', 'cookies': {}, 'msg': 'OK (201 bytes)'}",
"TRACE: EXIT: client.send() returned (200, {'errorcode': 0, 'message': 'Done', 'severity': 'NONE', 'nsversion': {'installedversion': False, 'version': 'NetScaler NS14.1: Build 21.57.nc, Date: Apr 18 2024, 16:06:59 (64-bit)', 'mode': '1'}})",
"TRACE: EXIT: client.get() returned (200, {'errorcode': 0, 'message': 'Done', 'severity': 'NONE', 'nsversion': {'installedversion': False, 'version': 'NetScaler NS14.1: Build 21.57.nc, Date: Apr 18 2024, 16:06:59 (64-bit)', 'mode': '1'}})",
"TRACE: ENTRY: common.fix_nitro_anomolies() called with ('nsversion', {}, [{'installedversion': False, 'version': 'NetScaler NS14.1: Build 21.57.nc, Date: Apr 18 2024, 16:06:59 (64-bit)', 'mode': '1'}]), {}",
"TRACE: EXIT: common.fix_nitro_anomolies() returned [{'installedversion': False, 'version': 'NetScaler NS14.1: Build 21.57.nc, Date: Apr 18 2024, 16:06:59 (64-bit)', 'mode': '1'}]",
"TRACE: EXIT: common.get_resource() returned (True, [{'installedversion': False, 'version': 'NetScaler NS14.1: Build 21.57.nc, Date: Apr 18 2024, 16:06:59 (64-bit)', 'mode': '1'}])",
"TRACE: EXIT: common.get_netscaler_version() returned (14.1, 21.57)",
"INFO: NetScaler version: 14.1-21.57",
"DEBUG: All params (including non module-specific params) are: {'nsip': 'NSIP', 'nitro_user': '********', 'nitro_pass': '********', 'nitro_protocol': 'https', 'validate_certs': False, 'save_config': False, 'bindpoint': 'REQUEST', 'gotopriorityexpression': 'NEXT', 'name': 'LBVS_Keycloak', 'policyname': 'RP_Insert_X_Forwarded_Proto', 'priority': 100.0, 'api_path': 'nitro/v1/config', 'netscaler_console_as_proxy_server': False, 'state': 'present', 'nitro_auth_token': None, 'managed_netscaler_instance_name': None, 'managed_netscaler_instance_ip': None, 'managed_netscaler_instance_id': None, 'managed_netscaler_instance_username': None, 'managed_netscaler_instance_password': None, 'invoke': None, 'labelname': None, 'labeltype': None, 'order': None}",
"TRACE: ENTRY: module_executor._filter_resource_module_params() called with (<ansible_collections.netscaler.adc.plugins.module_utils.module_executor.ModuleExecutor object at 0x7fa2fe8d9900>,), {}",
"DEBUG: self.module.params: {'nsip': 'NSIP', 'nitro_user': '********', 'nitro_pass': '********', 'nitro_protocol': 'https', 'validate_certs': False, 'save_config': False, 'bindpoint': 'REQUEST', 'gotopriorityexpression': 'NEXT', 'name': 'LBVS_Keycloak', 'policyname': 'RP_Insert_X_Forwarded_Proto', 'priority': 100.0, 'api_path': 'nitro/v1/config', 'netscaler_console_as_proxy_server': False, 'state': 'present', 'nitro_auth_token': None, 'managed_netscaler_instance_name': None, 'managed_netscaler_instance_ip': None, 'managed_netscaler_instance_id': None, 'managed_netscaler_instance_username': None, 'managed_netscaler_instance_password': None, 'invoke': None, 'labelname': None, 'labeltype': None, 'order': None}",
"DEBUG: Desired `lbvserver_rewritepolicy_binding` module specific params are: {'bindpoint': 'REQUEST', 'gotopriorityexpression': 'NEXT', 'name': 'LBVS_Keycloak', 'policyname': 'RP_Insert_X_Forwarded_Proto', 'priority': 100.0}",
"TRACE: EXIT: module_executor._filter_resource_module_params() returned None",
"TRACE: ENTRY: module_executor.get_existing_resource() called with (<ansible_collections.netscaler.adc.plugins.module_utils.module_executor.ModuleExecutor object at 0x7fa2fe8d9900>,), {}",
"TRACE: ENTRY: common.get_resource() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7fa2fe8d9a20>,), {'resource_name': 'lbvserver_rewritepolicy_binding', 'resource_id': 'LBVS_Keycloak', 'resource_module_params': {'bindpoint': 'REQUEST', 'gotopriorityexpression': 'NEXT', 'name': 'LBVS_Keycloak', 'policyname': 'RP_Insert_X_Forwarded_Proto', 'priority': 100.0}}",
"TRACE: ENTRY: client.get() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7fa2fe8d9a20>,), {'resource': 'lbvserver_rewritepolicy_binding', 'id': 'LBVS_Keycloak', 'filter': {'bindpoint': 'REQUEST', 'policyname': 'RP_Insert_X_Forwarded_Proto', 'priority': 100.0}}",
"TRACE: ENTRY: client.url_builder() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7fa2fe8d9a20>, 'lbvserver_rewritepolicy_binding'), {'id': 'LBVS_Keycloak', 'args': None, 'attrs': None, 'filter': {'bindpoint': 'REQUEST', 'policyname': 'RP_Insert_X_Forwarded_Proto', 'priority': 100.0}}",
"TRACE: EXIT: client.url_builder() returned https://NSIP/nitro/v1/config/lbvserver_rewritepolicy_binding/LBVS_Keycloak?filter=bindpoint:REQUEST,policyname:RP_Insert_X_Forwarded_Proto,priority:100.0",
"TRACE: ENTRY: client.send() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7fa2fe8d9a20>, 'GET', 'https://NSIP/nitro/v1/config/lbvserver_rewritepolicy_binding/LBVS_Keycloak?filter=bindpoint:REQUEST,policyname:RP_Insert_X_Forwarded_Proto,priority:100.0'), {}",
"DEBUG: self={'_module': <ansible.module_utils.basic.AnsibleModule object at 0x7fa2fe8d87c0>, 'check_mode': False, 'api_path': 'nitro/v1/config', 'resource_name': 'lbvserver_rewritepolicy_binding', '_headers': {'Content-Type': 'application/json', 'User-Agent': 'ansible-ctxadc', 'X-NITRO-USER': '********', 'X-NITRO-PASS': '********'}}",
"DEBUG: fetch_url()-resonse-info= GET: {'url': 'https://NSIP/nitro/v1/config/lbvserver_rewritepolicy_binding/LBVS_Keycloak?filter=bindpoint:REQUEST,policyname:RP_Insert_X_Forwarded_Proto,priority:100.0', 'status': 200, 'date': 'Tue, 25 Jun 2024 14:48:13 GMT', 'server': 'Apache', 'x-frame-options': 'SAMEORIGIN', 'expires': 'Thu, 19 Nov 1981 08:52:00 GMT', 'cache-control': 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', 'pragma': 'no-cache', 'vary': 'Accept-Encoding', 'feature-policy': \"camera 'none'; microphone 'none'; geolocation 'none'\", 'referrer-policy': 'no-referrer', 'x-xss-protection': '1; mode=block', 'x-content-type-options': 'nosniff', 'content-length': '57', 'content-type': 'application/json; charset=utf-8', 'connection': 'close', 'cookies_string': '', 'cookies': {}, 'msg': 'OK (57 bytes)'}",
"TRACE: EXIT: client.send() returned (200, {'errorcode': 0, 'message': 'Done', 'severity': 'NONE'})",
"TRACE: EXIT: client.get() returned (200, {'errorcode': 0, 'message': 'Done', 'severity': 'NONE'})",
"TRACE: EXIT: common.get_resource() returned (False, [])",
"TRACE: EXIT: module_executor.get_existing_resource() returned {}",
"TRACE: ENTRY: module_executor.main() called with (<ansible_collections.netscaler.adc.plugins.module_utils.module_executor.ModuleExecutor object at 0x7fa2fe8d9900>,), {}",
"TRACE: ENTRY: module_executor.create_or_update() called with (<ansible_collections.netscaler.adc.plugins.module_utils.module_executor.ModuleExecutor object at 0x7fa2fe8d9900>,), {}",
"TRACE: ENTRY: module_executor.update_diff_list() called with (<ansible_collections.netscaler.adc.plugins.module_utils.module_executor.ModuleExecutor object at 0x7fa2fe8d9900>,), {'existing': {}, 'desired': {'bindpoint': 'REQUEST', 'gotopriorityexpression': 'NEXT', 'name': 'LBVS_Keycloak', 'policyname': 'RP_Insert_X_Forwarded_Proto', 'priority': 100.0}}",
"TRACE: EXIT: module_executor.update_diff_list() returned None",
"INFO: Resource lbvserver_rewritepolicy_binding:LBVS_Keycloak does not exist. Will be CREATED.",
"TRACE: ENTRY: common.create_resource() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7fa2fe8d9a20>, 'lbvserver_rewritepolicy_binding', {'bindpoint': 'REQUEST', 'gotopriorityexpression': 'NEXT', 'name': 'LBVS_Keycloak', 'policyname': 'RP_Insert_X_Forwarded_Proto', 'priority': 100.0}), {}",
"TRACE: ENTRY: common._check_create_resource_params() called with ('lbvserver_rewritepolicy_binding', {'bindpoint': 'REQUEST', 'gotopriorityexpression': 'NEXT', 'name': 'LBVS_Keycloak', 'policyname': 'RP_Insert_X_Forwarded_Proto', 'priority': 100.0}), {}",
"TRACE: EXIT: common._check_create_resource_params() returned (True, None, {'bindpoint': 'REQUEST', 'gotopriorityexpression': 'NEXT', 'name': 'LBVS_Keycloak', 'policyname': 'RP_Insert_X_Forwarded_Proto', 'priority': 100.0})",
"TRACE: ENTRY: client.post() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7fa2fe8d9a20>,), {'post_data': {'lbvserver_rewritepolicy_binding': {'bindpoint': 'REQUEST', 'gotopriorityexpression': 'NEXT', 'name': 'LBVS_Keycloak', 'policyname': 'RP_Insert_X_Forwarded_Proto', 'priority': 100.0}}, 'resource': 'lbvserver_rewritepolicy_binding', 'action': None}",
"TRACE: ENTRY: client.url_builder() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7fa2fe8d9a20>, 'lbvserver_rewritepolicy_binding'), {'action': None}",
"TRACE: EXIT: client.url_builder() returned https://NSIP/nitro/v1/config/lbvserver_rewritepolicy_binding",
"TRACE: ENTRY: client.send() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7fa2fe8d9a20>, 'POST', 'https://NSIP/nitro/v1/config/lbvserver_rewritepolicy_binding', '{\"lbvserver_rewritepolicy_binding\": {\"bindpoint\": \"REQUEST\", \"gotopriorityexpression\": \"NEXT\", \"name\": \"LBVS_Keycloak\", \"policyname\": \"RP_Insert_X_Forwarded_Proto\", \"priority\": 100.0}}'), {}",
"DEBUG: self={'_module': <ansible.module_utils.basic.AnsibleModule object at 0x7fa2fe8d87c0>, 'check_mode': False, 'api_path': 'nitro/v1/config', 'resource_name': 'lbvserver_rewritepolicy_binding', '_headers': {'Content-Type': 'application/json', 'User-Agent': 'ansible-ctxadc', 'X-NITRO-USER': '********', 'X-NITRO-PASS': '********'}}",
"DEBUG: fetch_url()-resonse-info= POST: {'url': 'https://NSIP/nitro/v1/config/lbvserver_rewritepolicy_binding', 'status': 201, 'date': 'Tue, 25 Jun 2024 14:48:13 GMT', 'server': 'Apache', 'x-frame-options': 'SAMEORIGIN', 'expires': 'Thu, 19 Nov 1981 08:52:00 GMT', 'cache-control': 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', 'pragma': 'no-cache', 'feature-policy': \"camera 'none'; microphone 'none'; geolocation 'none'\", 'referrer-policy': 'no-referrer', 'x-xss-protection': '1; mode=block', 'x-content-type-options': 'nosniff', 'content-length': '0', 'content-type': 'text/html; charset=UTF-8', 'connection': 'close', 'cookies_string': '', 'cookies': {}, 'msg': 'OK (0 bytes)'}",
"TRACE: EXIT: client.send() returned (201, {})",
"TRACE: EXIT: client.post() returned (201, {})",
"TRACE: ENTRY: common.return_response() called with (), {'status_code': 201, 'response_body': {}, 'operation': 'create_resource', 'resource_name': 'lbvserver_rewritepolicy_binding'}",
"DEBUG: create_resource lbvserver_rewritepolicy_binding SUCCESS",
"TRACE: EXIT: common.return_response() returned (True, {})",
"TRACE: EXIT: common.create_resource() returned (True, {})",
"TRACE: EXIT: module_executor.create_or_update() returned None",
"TRACE: ENTRY: module_executor.return_success() called with (<ansible_collections.netscaler.adc.plugins.module_utils.module_executor.ModuleExecutor object at 0x7fa2fe8d9900>,), {}"
]
}
PLAY RECAP *********************************************************************************************************************************************************************************
HOSTNAME : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Re-run the playbook, get the exact same result
Expected Results
Expect the Ansible run to detect the existing binding
Actual Results
The run report changes everytime. Even though the instructions is present in the Netscaler
Additional Notes
No response
I think i have spotted the problem while troubleshooting netscaler.adc.csvserver_cspolicy_binding module
The request sent to the Netscaler API is as follow :
"TRACE: ENTRY: client.send() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7fa2fe8d9a20>, 'GET', 'https://NSIP/nitro/v1/config/lbvserver_rewritepolicy_binding/LBVS_Keycloak?filter=bindpoint:REQUEST,policyname:RP_Insert_X_Forwarded_Proto,priority:100.0'), {}",
In the filter arguments the priority is specified as a floating number ( 100.0 ) BUT in the Netscaler it wants a positiv integer
> bind cs vserver CSVS_OnCall_Web -policyName CSP_OnCall_Web_RealTimeAPI -priority 110.0
^^^^^
ERROR: Invalid value [unsigned integer, 110.0]
Replaying the same request with priority as an integer and tadaa it works
'GET', 'https://NSIP/nitro/v1/config/lbvserver_rewritepolicy_binding/LBVS_Keycloak?filter=bindpoint:REQUEST,policyname:RP_Insert_X_Forwarded_Proto,priority:100'), {}
So i guess it's the same problem since it also use priority parameter. I don't know about the others modules but could be affected as well.
I found this part of the code that might be responsible for this but quite unsure how to fix it. I would be grateful if anyone more Python skilled could do PR to address this.
https://github.com/netscaler/ansible-collection-netscaleradc/blob/56f27127c18e514bb308acfa0b49ba67b3c81d58/plugins/module_utils/module_executor.py#L205
Meanwhile, a quick & dirty fix
( this is the change for csvserver_cspolicy_binding but most probably applicable to other *_binding module
In plugins/module_utils/nitro_resource_map.py
@@ -24441,7 +24441,7 @@
},
"name": {"no_log": False, "type": "str"},
"policyname": {"no_log": False, "type": "str"},
- "priority": {"no_log": False, "type": "float"},
+ "priority": {"no_log": False, "type": "int"},
"targetlbvserver": {"no_log": False, "type": "str"},
},
"singleton": False,
Fixed in #515