F5Networks / f5-ansible

Imperative Ansible modules for F5 BIG-IP products
GNU General Public License v3.0
375 stars 231 forks source link

bigiq_device_discovery - httplib error #1512

Closed worldwide-tech closed 4 years ago

worldwide-tech commented 5 years ago

For ansible module bigiq_device_discovery I am seeing an issue with httplib and control characters as part of the URL.

Have you guys seen this?

httplib.InvalidURL: URL can't contain control characters. "/mgmt/cm/system/machineid-resolver?$filter=address eq '192.168.2.100'" (found at least ' ')

Entire stack -

The full traceback is: Traceback (most recent call last): File "/root/.ansible/tmp/ansible-tmp-1570197103.9-27379879262013/AnsiballZ_bigiq_device_discovery.py", line 114, in _ansiballz_main() File "/root/.ansible/tmp/ansible-tmp-1570197103.9-27379879262013/AnsiballZ_bigiq_device_discovery.py", line 106, in _ansiballz_main invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS) File "/root/.ansible/tmp/ansible-tmp-1570197103.9-27379879262013/AnsiballZ_bigiq_device_discovery.py", line 49, in invoke_module imp.load_module('main', mod, module, MOD_DESC) File "/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/main.py", line 1239, in File "/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/main.py", line 1232, in main File "/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/main.py", line 679, in exec_module File "/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/main.py", line 691, in present File "/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/main.py", line 750, in exists File "/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/ansible_bigiq_device_discovery_payload.zip/ansible/module_utils/network/f5/icontrol.py", line 232, in get File "/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/ansible_bigiq_device_discovery_payload.zip/ansible/module_utils/network/f5/icontrol.py", line 193, in send File "/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/ansible_bigiq_device_discovery_payload.zip/ansible/module_utils/urls.py", line 1163, in open File "/usr/lib64/python2.7/urllib2.py", line 154, in urlopen return opener.open(url, data, timeout) File "/usr/lib64/python2.7/urllib2.py", line 431, in open response = self._open(req, data) File "/usr/lib64/python2.7/urllib2.py", line 449, in _open '_open', req) File "/usr/lib64/python2.7/urllib2.py", line 409, in _call_chain result = func(*args) File "/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/ansible_bigiq_device_discovery_payload.zip/ansible/module_utils/urls.py", line 374, in https_open File "/usr/lib64/python2.7/urllib2.py", line 1211, in do_open h.request(req.get_method(), req.get_selector(), req.data, headers) File "/usr/lib64/python2.7/httplib.py", line 1056, in request self._send_request(method, url, body, headers) File "/usr/lib64/python2.7/httplib.py", line 1084, in _send_request self.putrequest(method, url, **skips) File "/usr/lib64/python2.7/httplib.py", line 943, in putrequest % (url, match.group())) httplib.InvalidURL: URL can't contain control characters. "/mgmt/cm/system/machineid-resolver?$filter=address eq '192.168.2.101'" (found at least ' ')

failed: [192.168.2.105] (item={u'ip': u'192.168.2.101', u'state': u'present', u'hostname': u'bigip-a.example.net'}) => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "ansible_loop_var": "item", "changed": false, "item": { "hostname": "bigip-a.example.net", "ip": "192.168.2.101", "state": "present" }, "module_stderr": "Traceback (most recent call last):\n File \"/root/.ansible/tmp/ansible-tmp-1570197103.9-27379879262013/AnsiballZ_bigiq_device_discovery.py\", line 114, in \n _ansiballz_main()\n File \"/root/.ansible/tmp/ansible-tmp-1570197103.9-27379879262013/AnsiballZ_bigiq_device_discovery.py\", line 106, in _ansiballz_main\n invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n File \"/root/.ansible/tmp/ansible-tmp-1570197103.9-27379879262013/AnsiballZ_bigiq_device_discovery.py\", line 49, in invoke_module\n imp.load_module('main', mod, module, MOD_DESC)\n File \"/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/main.py\", line 1239, in \n File \"/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/main.py\", line 1232, in main\n File \"/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/main.py\", line 679, in exec_module\n File \"/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/main.py\", line 691, in present\n File \"/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/main.py\", line 750, in exists\n File \"/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/ansible_bigiq_device_discovery_payload.zip/ansible/module_utils/network/f5/icontrol.py\", line 232, in get\n File \"/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/ansible_bigiq_device_discovery_payload.zip/ansible/module_utils/network/f5/icontrol.py\", line 193, in send\n File \"/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/ansible_bigiq_device_discovery_payload.zip/ansible/module_utils/urls.py\", line 1163, in open\n File \"/usr/lib64/python2.7/urllib2.py\", line 154, in urlopen\n return opener.open(url, data, timeout)\n File \"/usr/lib64/python2.7/urllib2.py\", line 431, in open\n response = self._open(req, data)\n File \"/usr/lib64/python2.7/urllib2.py\", line 449, in _open\n '_open', req)\n File \"/usr/lib64/python2.7/urllib2.py\", line 409, in _call_chain\n result = func(*args)\n File \"/tmp/ansible_bigiq_device_discovery_payload_fvYqQA/ansible_bigiq_device_discovery_payload.zip/ansible/module_utils/urls.py\", line 374, in https_open\n File \"/usr/lib64/python2.7/urllib2.py\", line 1211, in do_open\n h.request(req.get_method(), req.get_selector(), req.data, headers)\n File \"/usr/lib64/python2.7/httplib.py\", line 1056, in request\n self._send_request(method, url, body, headers)\n File \"/usr/lib64/python2.7/httplib.py\", line 1084, in _send_request\n self.putrequest(method, url, **skips)\n File \"/usr/lib64/python2.7/httplib.py\", line 943, in putrequest\n % (url, match.group()))\nhttplib.InvalidURL: URL can't contain control characters. \"/mgmt/cm/system/machineid-resolver?$filter=address eq '192.168.2.101'\" (found at least ' ')\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1 }

onurbrc commented 5 years ago

I have the same error but with the bigiq_regkey_license_assignment module when I try to assign licenses to unmanaged devices. The error below:

An exception occurred during task execution. To see the full traceback, use -vvv. The error was: http.client.InvalidURL: URL can't contain control characters. "/mgmt/cm/device/licensing/pool/regkey/licenses?$filter=(name eq 'mylicenses')&$top=1" (found at least ' ')

fatal: [my-license-manager -> {{ bigip_MgmtIp }}]: FAILED! =>

{"changed": false, "module_stderr": "Traceback (most recent call last):\n File \"/root/.ansible/tmp/ansible-tmp-1570202184.481169-113798022103074/AnsiballZ_bigiq_regkey_license_assignment.py\", line 114, in <module>\n    _ansiballz_main()\n  File \"/root/.ansible/tmp/ansible-tmp-1570202184.481169-113798022103074/AnsiballZ_bigiq_regkey_license_assignment.py\",
line 106, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n File \"/root/.ansible/tmp/ansible-tmp-1570202184.481169-113798022103074/AnsiballZ_bigiq_regkey_license_assignment.py\",
line 49, in invoke_module\n    imp.load_module('__main__', mod, module, MOD_DESC)\n 
File \"/venv_ansible/lib/python3.6/imp.py\", line 235, in load_module\n  
return load_source(name, filename, file)\n  File \"/venv_ansible/lib/python3.6/imp.py\",
 line 170, in load_source\n    module = _exec(spec, sys.modules[name])\n File \"<frozen importlib._bootstrap>\", line 618, in _exec\n  File \"<frozen importlib._bootstrap_external>\", line 678, in exec_module\n  File \"<frozen importlib._bootstrap>\", line 219, in _call_with_frames_removed\n File \"/tmp/ansible_bigiq_regkey_license_assignment_payload_me1ggvxj/__main__.py\", line 635, in <module>\n  File \"/tmp/ansible_bigiq_regkey_license_assignment_payload_me1ggvxj/__main__.py\", line 628, in main\n File \"/tmp/ansible_bigiq_regkey_license_assignment_payload_me1ggvxj/__main__.py\", line 443, in exec_module\n File \"/tmp/ansible_bigiq_regkey_license_assignment_payload_me1ggvxj/__main__.py\", line 463, in present\n File \"/tmp/ansible_bigiq_regkey_license_assignment_payload_me1ggvxj/__main__.py\", line 468, in exists\n File \"/tmp/ansible_bigiq_regkey_license_assignment_payload_me1ggvxj/__main__.py\", line 310, in member_id\n File \"/tmp/ansible_bigiq_regkey_license_assignment_payload_me1ggvxj/__main__.py\", line 278, in pool_id\n   File \"/tmp/ansible_bigiq_regkey_license_assignment_payload_me1ggvxj/ansible_bigiq_regkey_license_assignment_payload.zip/ansible/module_utils/network/f5/icontrol.py\", line 232, in get\n  File \"/tmp/ansible_bigiq_regkey_license_assignment_payload_me1ggvxj/ansible_bigiq_regkey_license_assignment_payload.zip/ansible/module_utils/network/f5/icontrol.py\", line 193, in send\n  File \"/tmp/ansible_bigiq_regkey_license_assignment_payload_me1ggvxj/ansible_bigiq_regkey_license_assignment_payload.zip/ansible/module_utils/urls.py\", line 1163, in open\n  File \"/usr/lib/python3.6/urllib/request.py\", line 223, in urlopen\n    return opener.open(url, data, timeout)\n  File \"/usr/lib/python3.6/urllib/request.py\", line 526, in open\n    response = self._open(req, data)\n  File \"/usr/lib/python3.6/urllib/request.py\", line 544, in _open\n    '_open', req)\n  File \"/usr/lib/python3.6/urllib/request.py\", line 504, in _call_chain\n    result = func(*args)\n  File \"/tmp/ansible_bigiq_regkey_license_assignment_payload_me1ggvxj/ansible_bigiq_regkey_license_assignment_payload.zip/ansible/module_utils/urls.py\", line 374, in https_open\n  File \"/usr/lib/python3.6/urllib/request.py\", line 1318, in do_open\n encode_chunked=req.has_header('Transfer-encoding'))\n  File \"/usr/lib/python3.6/http/client.py\", line 1254, in request\n self._send_request(method, url, body, headers, encode_chunked)\n  File \"/usr/lib/python3.6/http/client.py\", line 1265, in _send_request\n    self.putrequest(method, url, **skips)\n File \"/usr/lib/python3.6/http/client.py\", line 1127, in putrequest\n    raise
InvalidURL(f\"URL can't contain control characters. {url!r} \"\nhttp.client.InvalidURL: URL can't contain control characters.
\"/mgmt/cm/device/licensing/pool/regkey/licenses?$filter=(name eq 'mylicenses')&$top=1\"(found at least ' ')\n",
"module_stdout": "", "msg":
"MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}

BIG-IQ:

Product     BIG-IQ
Version     6.1.0
Build       0.0.1224

Ansible and Python versions:

ansible 2.8.5
Python 3.6

I've tested with Ansible 2.8 and Python 2.7 and it works normally. Any tips to workaround this problem and make it work with a higher python version ?

Thanks very much.

onurbrc commented 5 years ago

Hi @wojtek0806 any tips?

worldwide-tech commented 5 years ago

I updated my python distro to 3.7.3 and it worked for me.

Carl Dubois Technical Solutions Architect | Application Delivery World Wide Technology, Inchttp://www.wwt.com/ Cell 603.417.8090 | carl.dubois@wwt.com


From: Bruno Calçado notifications@github.com Sent: Thursday, October 17, 2019 2:12 AM To: F5Networks/f5-ansible f5-ansible@noreply.github.com Cc: Dubois, Carl Carl.Dubois@wwt.com; Author author@noreply.github.com Subject: Re: [F5Networks/f5-ansible] bigiq_device_discovery - httplib error (#1512)

Hi, any tips?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHubhttps://nam05.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FF5Networks%2Ff5-ansible%2Fissues%2F1512%3Femail_source%3Dnotifications%26email_token%3DAIIF5W32ELHMOQEFS5E526LQO766DA5CNFSM4I5QFNE2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBO5NWQ%23issuecomment-543020762&data=02%7C01%7CCarl.Dubois%40wwt.com%7C5056a39933ea42735ffa08d752c90c0e%7Ca2d8e6b4e26e44218f3dec288c827c7d%7C1%7C0%7C637068895757315068&sdata=504ai7mvpMAOPc2H%2FVnwpkih50Mmb%2BowKYLITURTTNM%3D&reserved=0, or unsubscribehttps://nam05.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAIIF5WYIGKCVIB6I6K7RJP3QO766DANCNFSM4I5QFNEQ&data=02%7C01%7CCarl.Dubois%40wwt.com%7C5056a39933ea42735ffa08d752c90c0e%7Ca2d8e6b4e26e44218f3dec288c827c7d%7C1%7C0%7C637068895757315068&sdata=8cbRyWmygFVB609%2FrNUCZo3ypnPUg3tD2xzWPkSiZvA%3D&reserved=0.

onurbrc commented 5 years ago

@worldwide-tech Thank you for your tip. I just upgraded my python version to 3.7.3 and still not working. Same Error.

focrensh commented 4 years ago

@onurbrc can you please provide the exact task you are running that causes the error.

Tracking with FMFA-389