netscaler/ansible-collection-netscaleradc

[Bug]: lbmonitor expects nonsense arguments instead of using defaults

pkodzis opened this issue · 2 comments

Summary

Reason:{'errorcode': 1093, 'message': 'Argument pre-requisite missing [units, deviation]', 'severity': 'ERROR'}"

Issue Type

Bug Report

Component Name

lbmonitor

Python Version

$ python --version # or python3 --version
3.9

Ansible Version

$ ansible --version
ansible [core 2.15.6]
  config file = None
  configured module search path = ['/home/pkodzis/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/pkodzis/.local/lib/python3.9/site-packages/ansible
  ansible collection location = /home/pkodzis/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/pkodzis/.local/bin/ansible
  python version = 3.9.5 (default, Nov 18 2021, 16:00:48) [GCC 10.3.0] (/usr/bin/python3)
  jinja version = 3.1.2
  libyaml = True

Ansible Configuration

$ ansible-config dump --only-changed

netscaler.adc Collection Version

$ ansible-galaxy collection list netscaler.adc
2.0.3

Target NetScaler Version

> show ns version
13.1

Equivalent NetScaler CLI Command

add lb monitor monitor1 TCP -interval 15 -retries 20

Steps to Reproduce

    - name: setup monitors
      delegate_to: localhost
      netscaler.adc.lbmonitor:
        nsip: "{{ provider.nsip }}"
        nitro_auth_token: "{{ provider.nitro_auth_token | default(omit) }}"
        nitro_protocol: "{{ provider.nitro_protocol | default(omit) }}"
        validate_certs: "{{ provider.validate_certs | default(omit) }}"
        state: present
        monitorname: test-monitor1
        type: TCP
        interval: 15
        retries: 20

Expected Results

monitor should be created with provided non-default values and all not provided values that NetScaler may expect, should be set to defaults.

Actual Results

TASK [setup monitors] *******************************************************************************************************************************************************************************************
task path: /mnt/c/Users/SG0891776/OneDrive - Sabre/Documents/jp/GIT/permanent/c3g_ansible/dev2/1.yml:38
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: pjp
<localhost> EXEC /bin/sh -c 'echo ~pjp && sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/pjp/.ansible/tmp `"&& mkdir "` echo /home/pjp/.ansible/tmp/ansible-tmp-1701349748.8290045-6826-34178638564381 `" && echo ansible-tmp-1701349748.8290045-6826-34178638564381="` echo /home/pjp/.ansible/tmp/ansible-tmp-1701349748.8290045-6826-34178638564381 `" ) && sleep 0'
Using module file /home/pjp/.ansible/collections/ansible_collections/netscaler/adc/plugins/modules/lbmonitor.py
<localhost> PUT /home/pjp/.ansible/tmp/ansible-local-67676h_q4mov/tmpi885ikdr TO /home/pjp/.ansible/tmp/ansible-tmp-1701349748.8290045-6826-34178638564381/AnsiballZ_lbmonitor.py
<localhost> EXEC /bin/sh -c 'chmod u+x /home/pjp/.ansible/tmp/ansible-tmp-1701349748.8290045-6826-34178638564381/ /home/pjp/.ansible/tmp/ansible-tmp-1701349748.8290045-6826-34178638564381/AnsiballZ_lbmonitor.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/python3 /home/pjp/.ansible/tmp/ansible-tmp-1701349748.8290045-6826-34178638564381/AnsiballZ_lbmonitor.py && sleep 0'
<localhost> EXEC /bin/sh -c 'rm -f -r /home/pjp/.ansible/tmp/ansible-tmp-1701349748.8290045-6826-34178638564381/ > /dev/null 2>&1 && sleep 0'
fatal: [SY4-LB-C3G -> localhost]: FAILED! => {
    "changed": true,
    "invocation": {
        "module_args": {
            "Snmpoid": null,
            "acctapplicationid": null,
            "action": "DOWN",
            "alertretries": null,
            "api_path": "nitro/v1/config",
            "application": null,
            "attribute": null,
            "authapplicationid": null,
            "basedn": null,
            "binddn": null,
            "customheaders": null,
            "database": null,
            "destip": null,
            "destport": null,
            "deviation": null,
            "dispatcherip": null,
            "dispatcherport": null,
            "domain": null,
            "downtime": 30,
            "evalrule": null,
            "failureretries": null,
            "filename": null,
            "filter": null,
            "firmwarerevision": null,
            "group": null,
            "grpchealthcheck": "NO",
            "grpcservicename": null,
            "grpcstatuscode": null,
            "hostipaddress": null,
            "hostname": null,
            "httprequest": null,
            "inbandsecurityid": null,
            "interval": 15,
            "ipaddress": null,
            "iptunnel": "NO",
            "kcdaccount": null,
            "lasversion": null,
            "lbmonitor_metric_binding": null,
            "lbmonitor_sslcertkey_binding": null,
            "logonpointname": null,
            "lrtm": null,
            "maxforwards": 1.0,
            "metric": null,
            "metrictable": null,
            "metricthreshold": null,
            "metricweight": null,
            "monitorname": "test-monitor1",
            "mqttclientidentifier": null,
            "mqttversion": 4.0,
            "mssqlprotocolversion": null,
            "netprofile": null,
            "nitro_auth_token": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "nitro_pass": null,
            "nitro_protocol": "https",
            "nitro_user": null,
            "nsip": "10.133.254.35",
            "oraclesid": null,
            "originhost": null,
            "originrealm": null,
            "password": null,
            "productname": null,
            "query": null,
            "querytype": null,
            "radaccountsession": null,
            "radaccounttype": 1.0,
            "radapn": null,
            "radframedip": null,
            "radkey": null,
            "radmsisdn": null,
            "radnasid": null,
            "radnasip": null,
            "recv": null,
            "respcode": null,
            "resptimeout": 2,
            "resptimeoutthresh": null,
            "retries": 20,
            "reverse": "NO",
            "rtsprequest": null,
            "save_config": false,
            "scriptargs": null,
            "scriptname": null,
            "secondarypassword": null,
            "secure": "NO",
            "secureargs": null,
            "send": null,
            "servicegroupname": null,
            "servicename": null,
            "sipmethod": null,
            "sipreguri": null,
            "sipuri": null,
            "sitepath": null,
            "snmpcommunity": null,
            "snmpthreshold": null,
            "snmpversion": null,
            "sqlquery": null,
            "sslprofile": null,
            "state": "present",
            "storedb": "DISABLED",
            "storefrontacctservice": "YES",
            "storefrontcheckbackendservices": "NO",
            "storename": null,
            "successretries": 1,
            "supportedvendorids": null,
            "tos": null,
            "tosid": null,
            "transparent": "NO",
            "trofscode": null,
            "trofsstring": null,
            "type": "TCP",
            "units1": "SEC",
            "units2": "SEC",
            "units3": "SEC",
            "units4": "SEC",
            "username": null,
            "validate_certs": false,
            "validatecred": "NO",
            "vendorid": null,
            "vendorspecificacctapplicationids": null,
            "vendorspecificauthapplicationids": null,
            "vendorspecificvendorid": null
        }
    },
    "loglines": [
        "DEBUG: Initializing ModuleExecutor for resource lbmonitor",
        "TRACE: ENTRY: get_valid_desired_states() called with ('lbmonitor',), {}",
        "TRACE: EXIT: get_valid_desired_states() returned {'present', 'absent', 'enabled', 'disabled'}",
        "TRACE: ENTRY: get_netscaler_version() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7f57a5075d00>,), {}",
        "TRACE: ENTRY: get_resource() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7f57a5075d00>, 'nsversion'), {}",
        "TRACE: ENTRY: send() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7f57a5075d00>, 'GET', 'https://10.133.254.35/nitro/v1/config/nsversion'), {}",
        "DEBUG: self={'_module': <ansible.module_utils.basic.AnsibleModule object at 0x7f57a4c01850>, 'check_mode': False, 'api_path': 'nitro/v1/config', '_headers': {'Content-Type': 'application/json', 'User-Agent': 'ansible-ctxadc', 'Cookie': 'NITRO_AUTH_TOKEN=********'}}",
        "DEBUG: fetch_url()-resonse-info={'url': 'https://10.133.254.35/nitro/v1/config/nsversion', 'status': 200, 'date': 'Thu, 30 Nov 2023 13:09:10 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: send() returned (200, {'errorcode': 0, 'message': 'Done', 'severity': 'NONE', 'nsversion': {'installedversion': False, 'version': 'NetScaler NS13.1: Build 42.47.nc, Date: Feb 22 2023, 08:08:13   (64-bit)', 'mode': '1'}})",
        "TRACE: EXIT: get_resource() returned [{'installedversion': False, 'version': 'NetScaler NS13.1: Build 42.47.nc, Date: Feb 22 2023, 08:08:13   (64-bit)', 'mode': '1'}]",
        "TRACE: EXIT: get_netscaler_version() returned (13.1, 42.47)",
        "INFO: NetScaler version: 13.1-42.47",
        "DEBUG: All params (including non module-specific params) are: {'nsip': '10.133.254.35', 'nitro_auth_token': '********', 'validate_certs': False, 'state': 'present', 'monitorname': 'test-monitor1', 'type': 'TCP', 'interval': 15, 'retries': 20, 'nitro_protocol': 'https', 'save_config': False, 'api_path': 'nitro/v1/config', 'action': 'DOWN', 'downtime': 30, 'grpchealthcheck': 'NO', 'iptunnel': 'NO', 'maxforwards': 1.0, 'mqttversion': 4.0, 'radaccounttype': 1.0, 'resptimeout': 2, 'reverse': 'NO', 'secure': 'NO', 'storedb': 'DISABLED', 'storefrontacctservice': 'YES', 'storefrontcheckbackendservices': 'NO', 'successretries': 1, 'transparent': 'NO', 'units1': 'SEC', 'units2': 'SEC', 'units3': 'SEC', 'units4': 'SEC', 'validatecred': 'NO', 'nitro_user': None, 'nitro_pass': None, 'Snmpoid': None, 'acctapplicationid': None, 'alertretries': None, 'application': None, 'attribute': None, 'authapplicationid': None, 'basedn': None, 'binddn': None, 'customheaders': None, 'database': None, 'destip': None, 'destport': None, 'deviation': None, 'dispatcherip': None, 'dispatcherport': None, 'domain': None, 'evalrule': None, 'failureretries': None, 'filename': None, 'filter': None, 'firmwarerevision': None, 'group': None, 'grpcservicename': None, 'grpcstatuscode': None, 'hostipaddress': None, 'hostname': None, 'httprequest': None, 'inbandsecurityid': None, 'ipaddress': None, 'kcdaccount': None, 'lasversion': None, 'lbmonitor_metric_binding': None, 'lbmonitor_sslcertkey_binding': None, 'logonpointname': None, 'lrtm': None, 'metric': None, 'metrictable': None, 'metricthreshold': None, 'metricweight': None, 'mqttclientidentifier': None, 'mssqlprotocolversion': None, 'netprofile': None, 'oraclesid': None, 'originhost': None, 'originrealm': None, 'password': None, 'productname': None, 'query': None, 'querytype': None, 'radaccountsession': None, 'radapn': None, 'radframedip': None, 'radkey': None, 'radmsisdn': None, 'radnasid': None, 'radnasip': None, 'recv': None, 'respcode': None, 'resptimeoutthresh': None, 'rtsprequest': None, 'scriptargs': None, 'scriptname': None, 'secondarypassword': None, 'secureargs': None, 'send': None, 'servicegroupname': None, 'servicename': None, 'sipmethod': None, 'sipreguri': None, 'sipuri': None, 'sitepath': None, 'snmpcommunity': None, 'snmpthreshold': None, 'snmpversion': None, 'sqlquery': None, 'sslprofile': None, 'storename': None, 'supportedvendorids': None, 'tos': None, 'tosid': None, 'trofscode': None, 'trofsstring': None, 'username': None, 'vendorid': None, 'vendorspecificacctapplicationids': None, 'vendorspecificauthapplicationids': None, 'vendorspecificvendorid': None}",
        "TRACE: ENTRY: _filter_resource_module_params() called with (<ansible_collections.netscaler.adc.plugins.module_utils.module_executor.ModuleExecutor object at 0x7f57a5029190>,), {}",
        "DEBUG: Desired `lbmonitor` module specific params are: {'monitorname': 'test-monitor1', 'type': 'TCP', 'interval': 15, 'retries': 20, 'action': 'DOWN', 'downtime': 30, 'grpchealthcheck': 'NO', 'iptunnel': 'NO', 'maxforwards': 1.0, 'mqttversion': 4.0, 'radaccounttype': 1.0, 'resptimeout': 2, 'reverse': 'NO', 'secure': 'NO', 'storedb': 'DISABLED', 'storefrontacctservice': 'YES', 'storefrontcheckbackendservices': 'NO', 'successretries': 1, 'transparent': 'NO', 'units1': 'SEC', 'units2': 'SEC', 'units3': 'SEC', 'units4': 'SEC', 'validatecred': 'NO'}",
        "TRACE: EXIT: _filter_resource_module_params() returned None",
        "TRACE: ENTRY: _filter_desired_bindings() called with (<ansible_collections.netscaler.adc.plugins.module_utils.module_executor.ModuleExecutor object at 0x7f57a5029190>,), {}",
        "DEBUG: Desired `lbmonitor` module specific bindings are: []",
        "TRACE: EXIT: _filter_desired_bindings() returned None",
        "TRACE: ENTRY: get_existing_resource() called with (<ansible_collections.netscaler.adc.plugins.module_utils.module_executor.ModuleExecutor object at 0x7f57a5029190>,), {}",
        "TRACE: ENTRY: get_resource() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7f57a5075d00>,), {'resource_name': 'lbmonitor', 'resource_id': 'test-monitor1', 'args': {'type': 'TCP'}, 'filter': {}}",
        "TRACE: ENTRY: send() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7f57a5075d00>, 'GET', 'https://10.133.254.35/nitro/v1/config/lbmonitor/test-monitor1?args=type:TCP'), {}",
        "DEBUG: self={'_module': <ansible.module_utils.basic.AnsibleModule object at 0x7f57a4c01850>, 'check_mode': False, 'api_path': 'nitro/v1/config', '_headers': {'Content-Type': 'application/json', 'User-Agent': 'ansible-ctxadc', 'Cookie': 'NITRO_AUTH_TOKEN=********'}}",
        "DEBUG: fetch_url()-resonse-info={'url': 'https://10.133.254.35/nitro/v1/config/lbmonitor/test-monitor1?args=type:TCP', 'status': 404, 'date': 'Thu, 30 Nov 2023 13:09:12 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': '101', 'content-type': 'application/json; charset=utf-8', 'connection': 'close', 'msg': 'HTTP Error 404: Not Found', 'body': b'{ \"errorcode\": 258, \"message\": \"No such resource [monitorName, test-monitor1]\", \"severity\": \"ERROR\" }'}",
        "TRACE: EXIT: send() returned (404, {'errorcode': 258, 'message': 'No such resource [monitorName, test-monitor1]', 'severity': 'ERROR'})",
        "TRACE: EXIT: get_resource() returned []",
        "TRACE: EXIT: get_existing_resource() returned {}",
        "TRACE: ENTRY: main() called with (<ansible_collections.netscaler.adc.plugins.module_utils.module_executor.ModuleExecutor object at 0x7f57a5029190>,), {}",
        "TRACE: ENTRY: create_or_update() called with (<ansible_collections.netscaler.adc.plugins.module_utils.module_executor.ModuleExecutor object at 0x7f57a5029190>,), {}",
        "TRACE: ENTRY: update_diff_list() called with (<ansible_collections.netscaler.adc.plugins.module_utils.module_executor.ModuleExecutor object at 0x7f57a5029190>,), {'existing': {}, 'desired': {'monitorname': 'test-monitor1', 'type': 'TCP', 'interval': 15, 'retries': 20, 'action': 'DOWN', 'downtime': 30, 'grpchealthcheck': 'NO', 'iptunnel': 'NO', 'maxforwards': 1.0, 'mqttversion': 4.0, 'radaccounttype': 1.0, 'resptimeout': 2, 'reverse': 'NO', 'secure': 'NO', 'storedb': 'DISABLED', 'storefrontacctservice': 'YES', 'storefrontcheckbackendservices': 'NO', 'successretries': 1, 'transparent': 'NO', 'units1': 'SEC', 'units2': 'SEC', 'units3': 'SEC', 'units4': 'SEC', 'validatecred': 'NO'}}",
        "TRACE: EXIT: update_diff_list() returned None",
        "INFO: Resource lbmonitor:test-monitor1 does not exist. Will be CREATED.",
        "TRACE: ENTRY: create_resource() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7f57a5075d00>, 'lbmonitor', {'monitorname': 'test-monitor1', 'type': 'TCP', 'interval': 15, 'retries': 20, 'action': 'DOWN', 'downtime': 30, 'grpchealthcheck': 'NO', 'iptunnel': 'NO', 'maxforwards': 1.0, 'mqttversion': 4.0, 'radaccounttype': 1.0, 'resptimeout': 2, 'reverse': 'NO', 'secure': 'NO', 'storedb': 'DISABLED', 'storefrontacctservice': 'YES', 'storefrontcheckbackendservices': 'NO', 'successretries': 1, 'transparent': 'NO', 'units1': 'SEC', 'units2': 'SEC', 'units3': 'SEC', 'units4': 'SEC', 'validatecred': 'NO'}), {}",
        "TRACE: ENTRY: _check_create_resource_params() called with ('lbmonitor', {'monitorname': 'test-monitor1', 'type': 'TCP', 'interval': 15, 'retries': 20, 'action': 'DOWN', 'downtime': 30, 'grpchealthcheck': 'NO', 'iptunnel': 'NO', 'maxforwards': 1.0, 'mqttversion': 4.0, 'radaccounttype': 1.0, 'resptimeout': 2, 'reverse': 'NO', 'secure': 'NO', 'storedb': 'DISABLED', 'storefrontacctservice': 'YES', 'storefrontcheckbackendservices': 'NO', 'successretries': 1, 'transparent': 'NO', 'units1': 'SEC', 'units2': 'SEC', 'units3': 'SEC', 'units4': 'SEC', 'validatecred': 'NO'}), {}",
        "TRACE: EXIT: _check_create_resource_params() returned (True, None, {'monitorname': 'test-monitor1', 'type': 'TCP', 'interval': 15, 'retries': 20, 'action': 'DOWN', 'downtime': 30, 'grpchealthcheck': 'NO', 'iptunnel': 'NO', 'maxforwards': 1.0, 'mqttversion': 4.0, 'radaccounttype': 1.0, 'resptimeout': 2, 'reverse': 'NO', 'secure': 'NO', 'storedb': 'DISABLED', 'storefrontacctservice': 'YES', 'storefrontcheckbackendservices': 'NO', 'successretries': 1, 'transparent': 'NO', 'units1': 'SEC', 'units2': 'SEC', 'units3': 'SEC', 'units4': 'SEC', 'validatecred': 'NO'})",
        "TRACE: ENTRY: send() called with (<ansible_collections.netscaler.adc.plugins.module_utils.client.NitroAPIClient object at 0x7f57a5075d00>, 'POST', 'https://10.133.254.35/nitro/v1/config/lbmonitor', '{\"lbmonitor\": {\"monitorname\": \"test-monitor1\", \"type\": \"TCP\", \"interval\": 15, \"retries\": 20, \"action\": \"DOWN\", \"downtime\": 30, \"grpchealthcheck\": \"NO\", \"iptunnel\": \"NO\", \"maxforwards\": 1.0, \"mqttversion\": 4.0, \"radaccounttype\": 1.0, \"resptimeout\": 2, \"reverse\": \"NO\", \"secure\": \"NO\", \"storedb\": \"DISABLED\", \"storefrontacctservice\": \"YES\", \"storefrontcheckbackendservices\": \"NO\", \"successretries\": 1, \"transparent\": \"NO\", \"units1\": \"SEC\", \"units2\": \"SEC\", \"units3\": \"SEC\", \"units4\": \"SEC\", \"validatecred\": \"NO\"}}'), {}",
        "DEBUG: self={'_module': <ansible.module_utils.basic.AnsibleModule object at 0x7f57a4c01850>, 'check_mode': False, 'api_path': 'nitro/v1/config', '_headers': {'Content-Type': 'application/json', 'User-Agent': 'ansible-ctxadc', 'Cookie': 'NITRO_AUTH_TOKEN=********'}}",
        "DEBUG: fetch_url()-resonse-info={'url': 'https://10.133.254.35/nitro/v1/config/lbmonitor', 'status': 400, 'date': 'Thu, 30 Nov 2023 13:09:14 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': '106', 'connection': 'close', 'content-type': 'application/json; charset=utf-8', 'msg': 'HTTP Error 400: Bad Request', 'body': b'{ \"errorcode\": 1093, \"message\": \"Argument pre-requisite missing [units, deviation]\", \"severity\": \"ERROR\" }'}",
        "TRACE: EXIT: send() returned (400, {'errorcode': 1093, 'message': 'Argument pre-requisite missing [units, deviation]', 'severity': 'ERROR'})",
        "TRACE: ENTRY: return_response() called with (), {'status_code': 400, 'response_body': {'errorcode': 1093, 'message': 'Argument pre-requisite missing [units, deviation]', 'severity': 'ERROR'}, 'operation': 'create_resource', 'resource_name': 'lbmonitor'}",
        "ERROR: create_resource FAILED; status_code: 400; Reason:{'errorcode': 1093, 'message': 'Argument pre-requisite missing [units, deviation]', 'severity': 'ERROR'}",
        "TRACE: EXIT: return_response() returned (False, \"ERROR: create_resource FAILED; status_code: 400; Reason:{'errorcode': 1093, 'message': 'Argument pre-requisite missing [units, deviation]', 'severity': 'ERROR'}\")",
        "TRACE: EXIT: create_resource() returned (False, \"ERROR: create_resource FAILED; status_code: 400; Reason:{'errorcode': 1093, 'message': 'Argument pre-requisite missing [units, deviation]', 'severity': 'ERROR'}\")",
        "TRACE: ENTRY: return_failure() called with (<ansible_collections.netscaler.adc.plugins.module_utils.module_executor.ModuleExecutor object at 0x7f57a5029190>, \"ERROR: create_resource FAILED; status_code: 400; Reason:{'errorcode': 1093, 'message': 'Argument pre-requisite missing [units, deviation]', 'severity': 'ERROR'}\"), {}"
    ],
    "msg": "ERROR: create_resource FAILED; status_code: 400; Reason:{'errorcode': 1093, 'message': 'Argument pre-requisite missing [units, deviation]', 'severity': 'ERROR'}"
}

Additioinal Notes

No response

This issue is fixed in the latest release 2.1.0. Please check and update the issue accordingly.

ack - it's resolved in 2.1.0. thank you so much! :)