ansible expect module throwing error Module failure Parse: failed - ansible

my playbook is like
- name: configuring pdf harmony
expect:
command: ./install.sh
responses:
'This will install pdfharmony on your system. Do you want to continue[y/N]?': y
'Do you agree with this copyright? [y/N]': y
'Now you must enter a valid registration number:': XXXX-XXXX-XXXX-XXXX-XXXX
echo: yes
args:
chdir: '{{ dest_dir }}/pdfHarmony_20_L26_64'
become: yes
Error:
fatal: [10.135.232.213]: FAILED! => {"changed": true, "cmd": "./install.sh",
"delta": "0:00:30.186764", "end": "2016-08-12 14:02:23.384237", "failed":
true, "invocation": {"module_args": {"chdir":
"/usr/local/pdfHarmony_20_L26_64", "command": "./
mounted or mapped drive. You may not copy the software to use for ",
"development, testing or staging purposes.", "", "1. Restrictions: You may
not resell, transfer, rent or lease the Software ", "without the specific
agreement of Appligent. You may not reverse engineer, ", "\u001b[7m--More--
\u001b[27m"]}
I could not understand the cause of this error
when installing manually,
Here when you pass y to the first prompt, you get a copyright agreement which is more than a page and you will find --More-- at the end of the page and when keep on pressing enter last line of the agreement the second prompt(question appears) like
when you press y for 1st prompt you see this
then you press more
after pressing more at last you see this
then it asks for reg. keys
Update:
it is like not listening to my next response after more.. i am not able to understand how this is happening
it is not taking my response for
'Do you agree with this copyright? [y/N]': y
i have added more and now it looks like
- name: configuring pdf harmony
expect:
command: ./install.sh
responses:
'This will install pdfharmony on your system. Do you want to continue[y/N]?': y
'--More--': \r
'(?i)Do you agree with this copyright? [y/N]': y
'Now you must enter a valid registration number': XXXX-XXXX-XXXX-XXXX-XXXX
echo: yes
args:
chdir: '{{ dest_dir }}/pdfHarmony_20_L26_64'
become: yes
But now it fails at next response it doesn't take the next response and i don't know why it fails at:
"\u001b[7m--More--\u001b[27m\u0007\u0007", "Updates may be licensed to you
by Appligent with additional or different terms.", "", "Do you agree with
this copyright? [y/N] : "]}
There is a new error with the module and i can make nothing out of it, ichanghed the play to :
- name: configuring stamp pdf batch
expect:
command: /bin/bash -c "stty rows 2000,2000; ./install.sh"
responses:
'This will install stamppdf on your system. Do you want to continue[y/N]?': y
# '--More--': \r
'(?i)Do you agree with this copyright\? \[y/N\]': y
'AP_FONT_DIR [/usr/local/fonts]': y
'Now you must enter a valid registration number': '{{ stamp_pdf_key }}'
echo: yes
args:
chdir: '{{ dest_dir }}/StampPDFBatch_60_L26_64'
become: yes
the error is:
fatal: [10.135.232.213]: FAILED! => {"changed": false, "failed": true,
"invocation": {"module_name": "expect"}, "module_stderr": "",
"module_stdout": "Traceback (most recent call last):\r\n File
\"/tmp/ansible_V_modk/ansible_module_expect.py\", line 230, in <module>\r\n
main()\r\n File \"/tmp/ansible_V_modk/ansible_module_expect.py\", line 199,
in main\r\n events=events, cwd=chdir, echo=echo)\r\n File
\"/usr/lib/python2.6/site-packages/pexpect/__init__.py\", line 225, in
runu\r\n env=env, _spawn=spawnu, **kwargs)\r\n File
\"/usr/lib/python2.6/site-packages/pexpect/__init__.py\", line 246, in
_run\r\n index = child.expect(patterns)\r\n File
\"/usr/lib/python2.6/site-packages/pexpect/__init__.py\", line 1451, in
expect\r\n timeout, searchwindowsize)\r\n File
\"/usr/lib/python2.6/site-packages/pexpect/__init__.py\", line 1466, in
expect_list\r\n timeout, searchwindowsize)\r\n File
\"/usr/lib/python2.6/site-packages/pexpect/__init__.py\", line 1535, in
expect_loop\r\n c = self.read_nonblocking(self.maxread, timeout)\r\n
File \"/usr/lib/python2.6/site-packages/pexpect/__init__.py\", line 984, in
read_nonblocking\r\n s = self._coerce_read_string(s)\r\n File
\"/usr/lib/python2.6/site-packages/pexpect/__init__.py\", line 1797, in
_coerce_read_string\r\n return self._decoder.decode(s, final=False)\r\n
File \"/usr/lib64/python2.6/codecs.py\", line 296, in decode\r\n
(result, consumed) = self._buffer_decode(data, self.errors,
final)\r\nUnicodeDecodeError: 'utf8' codec can't decode byte 0xd2 in
position 1166: invalid continuation byte\r\n", "msg": "MODULE FAILURE",
"parsed": false}

You can try to alter TTY height and avoid 'More'-thing:
command: /bin/bash -c "stty rows 2000,2000; ./install.sh"

Related

Ansible - HTTP Error 502: Bad Gateway when using script with XMLRPC

I have this script, that connects to service via XMLRPC, like:
import odoorpc
odoo = odoorpc.ODOO(host, protocol=protocol, port=port)
Task from yaml file:
- name: Change Odoo admin user password
ansible.builtin.script: "change-user-password \
{{ secrets_odoo_init_user_passwords_file }} --ignore-failed-login \
--host {{ ansible_host }} --port 443 --protocol jsonrpc+ssl"
become: true
become_user: "{{ app_user }}"
Call looks like this (from ansible logs):
<my-host> SSH: EXEC ssh -o ControlMaster=auto -o ControlPersist=30m -o PreferredAuthentications=publickey -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="root"' -o ConnectTimeout=10 -o ControlPath=/tmp/ansible-ssh-%h-%p-%r -tt my-host '/bin/sh -c '"'"'sudo -H -S -n -u odoo /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-lsrscdzqfzfliptrdleqjxcwaseuaggn ; /var/tmp/ansible-tmp-1635367335.375884-2165879-123865031409885/change-user-password /opt/odoo/.secrets/odoo_init_user_passwords_file --ignore-failed-login --host my-host --port 443 --protocol jsonrpc+ssl'"'"'"'"'"'"'"'"' && sleep 0'"'"''
The full traceback is:
NoneType: None
fatal: [dev]: FAILED! => {
"changed": true,
"msg": "non-zero return code",
"rc": 1,
"stderr": "Shared connection to my-host closed.\r\n",
"stderr_lines": [
"Shared connection to my-host closed."
],
"stdout": "Traceback (most recent call last):\r\n File \"/var/tmp/ansible-tmp-1635367335.375884-2165879-123865031409885/change-user-password\", line 109, in <module>\r\n odoo = login(\r\n File \"/var/tmp/ansible-tmp-1635367335.375884-2165879-123865031409885/change-user-password\", line 75, in login\r\n odoo = odoorpc.ODOO(host, protocol=protocol, port=port)\r\n File \"/opt/odoo/.local/lib/python3.9/site-packages/odoorpc/odoo.py\", line 95, in __init__\r\n self._connector = rpc.PROTOCOLS[protocol](\r\n File \"/opt/odoo/.local/lib/python3.9/site-packages/odoorpc/rpc/__init__.py\", line 288, in __init__\r\n super(ConnectorJSONRPCSSL, self).__init__(\r\n File \"/opt/odoo/.local/lib/python3.9/site-packages/odoorpc/rpc/__init__.py\", line 211, in __init__\r\n self._proxy_json, self._proxy_http = self._get_proxies()\r\n File \"/opt/odoo/.local/lib/python3.9/site-packages/odoorpc/rpc/__init__.py\", line 235, in _get_proxies\r\n result = proxy_json('/web/webclient/version_info')['result']\r\n File \"/opt/odoo/.local/lib/python3.9/site-packages/odoorpc/rpc/jsonrpclib.py\", line 113, in __call__\r\n response = self._opener.open(request, timeout=self._timeout)\r\n File \"/usr/lib/python3.9/urllib/request.py\", line 523, in open\r\n response = meth(req, response)\r\n File \"/usr/lib/python3.9/urllib/request.py\", line 632, in http_response\r\n response = self.parent.error(\r\n File \"/usr/lib/python3.9/urllib/request.py\", line 561, in error\r\n return self._call_chain(*args)\r\n File \"/usr/lib/python3.9/urllib/request.py\", line 494, in _call_chain\r\n result = func(*args)\r\n File \"/usr/lib/python3.9/urllib/request.py\", line 641, in http_error_default\r\n raise HTTPError(req.full_url, code, msg, hdrs, fp)\r\nurllib.error.HTTPError: HTTP Error 502: Bad Gateway\r\n",
"stdout_lines": [
"Traceback (most recent call last):",
" File \"/var/tmp/ansible-tmp-1635367335.375884-2165879-123865031409885/change-user-password\", line 109, in <module>",
" odoo = login(",
" File \"/var/tmp/ansible-tmp-1635367335.375884-2165879-123865031409885/change-user-password\", line 75, in login",
" odoo = odoorpc.ODOO(host, protocol=protocol, port=port)",
" File \"/opt/odoo/.local/lib/python3.9/site-packages/odoorpc/odoo.py\", line 95, in __init__",
" self._connector = rpc.PROTOCOLS[protocol](",
" File \"/opt/odoo/.local/lib/python3.9/site-packages/odoorpc/rpc/__init__.py\", line 288, in __init__",
" super(ConnectorJSONRPCSSL, self).__init__(",
" File \"/opt/odoo/.local/lib/python3.9/site-packages/odoorpc/rpc/__init__.py\", line 211, in __init__",
" self._proxy_json, self._proxy_http = self._get_proxies()",
" File \"/opt/odoo/.local/lib/python3.9/site-packages/odoorpc/rpc/__init__.py\", line 235, in _get_proxies",
" result = proxy_json('/web/webclient/version_info')['result']",
" File \"/opt/odoo/.local/lib/python3.9/site-packages/odoorpc/rpc/jsonrpclib.py\", line 113, in __call__",
" response = self._opener.open(request, timeout=self._timeout)",
" File \"/usr/lib/python3.9/urllib/request.py\", line 523, in open",
" response = meth(req, response)",
" File \"/usr/lib/python3.9/urllib/request.py\", line 632, in http_response",
" response = self.parent.error(",
" File \"/usr/lib/python3.9/urllib/request.py\", line 561, in error",
" return self._call_chain(*args)",
" File \"/usr/lib/python3.9/urllib/request.py\", line 494, in _call_chain",
" result = func(*args)",
" File \"/usr/lib/python3.9/urllib/request.py\", line 641, in http_error_default",
" raise HTTPError(req.full_url, code, msg, hdrs, fp)",
"urllib.error.HTTPError: HTTP Error 502: Bad Gateway"
]
}
I read that people workaround this error by using headers={'User-Agent': 'Mozilla/5.0'}. But if I use script module via ansible, how can I specify such header?
The thing is, I only get this error if I run script via ansible. I tried running that script explicitly from my machine and from target machine. In those cases, it works fine.
ansible [core 2.11.6]
config file = /home/oerp/.ansible.cfg
configured module search path = ['/home/oerp/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /home/oerp/.local/lib/python3.8/site-packages/ansible
ansible collection location = /home/oerp/.ansible/collections:/usr/share/ansible/collections
executable location = /home/oerp/.local/bin/ansible
python version = 3.8.10 (default, Sep 28 2021, 16:10:42) [GCC 9.3.0]
jinja version = 3.0.1
libyaml = True
Update
Turn out the problem when XMLPRC call is made, service is not yet running, thus the error.
So I have to use RPC only when service is already running.
I tried using wait_for like this (note, my Odoo service port is not exposed via compose, its only accessible through docker network by nginx):
- name: Save Odoo container status
set_fact:
odoo_ip: "{{ docker_compose_output.services.odoo.app_odoo_1.networks.app_backend.IPAddress }}"
- name: Wait for IP to be active
wait_for:
host: "{{ odoo_ip }}"
delay: 1
state: drained
I do get this error:
The full traceback is:
Traceback (most recent call last):
File "/root/.ansible/tmp/ansible-tmp-1635403378.5625799-2174550-176521610555803/AnsiballZ_wait_for.py", line 100, in <module>
_ansiballz_main()
File "/root/.ansible/tmp/ansible-tmp-1635403378.5625799-2174550-176521610555803/AnsiballZ_wait_for.py", line 92, in _ansiballz_main
invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
File "/root/.ansible/tmp/ansible-tmp-1635403378.5625799-2174550-176521610555803/AnsiballZ_wait_for.py", line 40, in invoke_module
runpy.run_module(mod_name='ansible.modules.wait_for', init_globals=dict(_module_fqn='ansible.modules.wait_for', _modlib_path=modlib_path),
File "/usr/lib/python3.9/runpy.py", line 210, in run_module
return _run_module_code(code, init_globals, run_name, mod_spec)
File "/usr/lib/python3.9/runpy.py", line 97, in _run_module_code
_run_code(code, mod_globals, init_globals,
File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/tmp/ansible_wait_for_payload_pic_t21b/ansible_wait_for_payload.zip/ansible/modules/wait_for.py", line 674, in <module>
File "/tmp/ansible_wait_for_payload_pic_t21b/ansible_wait_for_payload.zip/ansible/modules/wait_for.py", line 657, in main
File "/tmp/ansible_wait_for_payload_pic_t21b/ansible_wait_for_payload.zip/ansible/modules/wait_for.py", line 356, in __init__
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
fatal: [dev]: FAILED! => {
"changed": false,
"module_stderr": "Shared connection to my-host closed.\r\n",
"module_stdout": "Traceback (most recent call last):\r\n File \"/root/.ansible/tmp/ansible-tmp-1635403378.5625799-2174550-176521610555803/AnsiballZ_wait_for.py\", line 100, in <module>\r\n _ansiballz_main()\r\n File \"/root/.ansible/tmp/ansible-tmp-1635403378.5625799-2174550-176521610555803/AnsiballZ_wait_for.py\", line 92, in _ansiballz_main\r\n invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n File \"/root/.ansible/tmp/ansible-tmp-1635403378.5625799-2174550-176521610555803/AnsiballZ_wait_for.py\", line 40, in invoke_module\r\n runpy.run_module(mod_name='ansible.modules.wait_for', init_globals=dict(_module_fqn='ansible.modules.wait_for', _modlib_path=modlib_path),\r\n File \"/usr/lib/python3.9/runpy.py\", line 210, in run_module\r\n return _run_module_code(code, init_globals, run_name, mod_spec)\r\n File \"/usr/lib/python3.9/runpy.py\", line 97, in _run_module_code\r\n _run_code(code, mod_globals, init_globals,\r\n File \"/usr/lib/python3.9/runpy.py\", line 87, in _run_code\r\n exec(code, run_globals)\r\n File \"/tmp/ansible_wait_for_payload_pic_t21b/ansible_wait_for_payload.zip/ansible/modules/wait_for.py\", line 674, in <module>\r\n File \"/tmp/ansible_wait_for_payload_pic_t21b/ansible_wait_for_payload.zip/ansible/modules/wait_for.py\", line 657, in main\r\n File \"/tmp/ansible_wait_for_payload_pic_t21b/ansible_wait_for_payload.zip/ansible/modules/wait_for.py\", line 356, in __init__\r\nTypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'\r\n",
"msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
"rc": 1
}
Its unclear what argument it is about.
Turns out, the problem was that service (container) I was trying to connect with RPC was not yet running and that was causing bad gateway problem.
In my playbook, container is stopped and then started and just after initiating start, it tries to use RPC, which would fail (as my reverse proxy, which is nginx, would not yet see odoo service).
So simple fix is this:
- name: Pause for 3 seconds for Odoo service to load
pause:
seconds: 3
Though its not ideal as I can't be sure that I would need 3 seconds. It might be too long or too fast.
I tried using wait_for, but got some confusing errors. I think wait_for is better approach as it could react better than simple pause.
Update
Better way would be to use wait_for, so we don't need to specify specific delay time. Like (this way it waits till service is ready to be used):
- name: Save Odoo container status
set_fact:
odoo_ip: "{{ docker_compose_output.services.odoo.app_odoo_1.networks\
.app_backend.IPAddress }}"
- name: Wait for IP to be active
wait_for:
host: "{{ odoo_ip }}"
port: 8069
state: started

Indescript LetsEncript Certificate Generating Error

I have built a site with Roots' Trellis. But I forgot to enable SSL. So I changed the setting in group_vars/production/wordpress_sites.yml and re-provisioned but I'm getting this error.
TASK [letsencrypt : Generate the certificates] *****************************************************************
System info:
Ansible 2.4.0.0; Darwin
Trellis at "Fix `raw_vars` functionality for Ansible 2.4.1"
---------------------------------------------------
non-zero return code
fatal: [gordoncowie.com]: FAILED! => {"changed": false, "cmd": ["./renew-certs.py"], "delta": "0:00:00.918804", "end": "2018-07-16 20:00:38.681459", "failed": true, "rc": 1, "start": "2018-07-16 20:00:37.762655", "stderr": "", "stderr_lines": [], "stdout": "Generating certificate for gordoncowie.com\nError while generating certificate for gordoncowie.com\nTraceback (most recent call last):\n File \"/usr/local/letsencrypt/acme_tiny.py\", line 198, in <module>\n main(sys.argv[1:])\n File \"/usr/local/letsencrypt/acme_tiny.py\", line 194, in main\n signed_crt = get_crt(args.account_key, args.csr, args.acme_dir, log=LOGGER, CA=args.ca)\n File \"/usr/local/letsencrypt/acme_tiny.py\", line 123, in get_crt\n wellknown_path, wellknown_url))\nValueError: Wrote file to /srv/www/letsencrypt/VCyNAoWOu0lf4gTqJStnqfgPzcoaHRBuF5wZoJ_RpAA, but couldn't download http://www.gordoncowie.com/.well-known/acme-challenge/VCyNAoWOu0lf4gTqJStnqfgPzcoaHRBuF5wZoJ_RpAA", "stdout_lines": ["Generating certificate for gordoncowie.com", "Error while generating certificate for gordoncowie.com", "Traceback (most recent call last):", " File \"/usr/local/letsencrypt/acme_tiny.py\", line 198, in <module>", " main(sys.argv[1:])", " File \"/usr/local/letsencrypt/acme_tiny.py\", line 194, in main", " signed_crt = get_crt(args.account_key, args.csr, args.acme_dir, log=LOGGER, CA=args.ca)", " File \"/usr/local/letsencrypt/acme_tiny.py\", line 123, in get_crt", " wellknown_path, wellknown_url))", "ValueError: Wrote file to /srv/www/letsencrypt/VCyNAoWOu0lf4gTqJStnqfgPzcoaHRBuF5wZoJ_RpAA, but couldn't download http://www.gordoncowie.com/.well-known/acme-challenge/VCyNAoWOu0lf4gTqJStnqfgPzcoaHRBuF5wZoJ_RpAA"]}
To me, this seems completely indescript. Google searches produce basically no relevant results. Can anyone explain what this error means exactly?

Ansible got stuck while running shell command for creating symbolic link

For below task for creating symbolic link, ansible stuck and no output for 5 mins
- name: Registering the service my-service
shell: >
sudo ln -s {{KARAF_HOME}}/bin/karaf-service /etc/init.d/
On ctrl+c it output below
♥Process WorkerProcess-19:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python2.7/dist-packages/ansible/executor/process/worker.py", line 118, in run
self._rslt_q
File "/usr/lib/python2.7/dist-packages/ansible/executor/task_executor.py", line 138, in run
res = self._execute()
File "/usr/lib/python2.7/dist-packages/ansible/executor/task_executor.py", line 561, in _execute
result = self._handler.run(task_vars=variables)
File "/usr/lib/python2.7/dist-packages/ansible/plugins/action/shell.py", line 27, in run
result = command_action.run(task_vars=task_vars)
File "/usr/lib/python2.7/dist-packages/ansible/plugins/action/command.py", line 24, in run
[ERROR]: User interrupted execution
i also tried below option but again facing error
file: src="{{KARAF_HOME}}/bin/my-service" dest="/etc/init.d/" state=link owner=root group=root
it produce below error
fatal: [my-host]: FAILED! => {"changed": false, "gid": 0, "group": "root", "mode": "0755", "msg": "refusing to convert between directory and link f
or /etc/init.d/", "owner": "root", "path": "/etc/init.d/", "size": 4096, "state": "directory", "uid": 0}
Update:
For running shell its looking for password, but i tried below as recommended by #imjoseangel
- file: become=true src="{{KARAF_HOME}}/bin/my-service" dest="/etc/init.d/my-service" state=link
But getting below error
"msg": "Unsupported parameters for (file) module: become Supported parameters include: attributes,...
Hi the destinatios must be a file and not a directory.
file: src="{{KARAF_HOME}}/bin/my-service" dest="/etc/init.d/my-service" state=link owner=root group=root

ansible 2.3.0 - No authentication methods available

I have installed ansible on ubuntu server using:
pip install git+git://github.com/ansible/ansible.git#devel
So my curent version is:
ansible 2.3.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
In configuration file I have:
# uncomment this to disable SSH key host checking
host_key_checking = False
And when I run ansible I get:
Using /etc/ansible/ansible.cfg as config file
SSH password:
PLAYBOOK: test1.yml ************************************************************
1 plays in test1.yml
PLAY [testowy playbook] ********************************************************
TASK [show version] ************************************************************
task path: /home/mszczesniak/test1.yml:8
Using module file /usr/local/lib/python2.7/dist-packages/ansible/modules/core/network/ios/ios_command.py
<10.27.200.80> ESTABLISH LOCAL CONNECTION FOR USER: root
<10.27.200.80> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1477054111.24-214066525349846 `" && echo ansible-tmp-1477054111.24-214066525349846="` echo $HOME/.ansible/tmp/ansible-tmp-1477054111.24-214066525349846 `" ) && sleep 0'
<10.27.200.80> PUT /tmp/tmpNfII7q TO /home/mszczesniak/.ansible/tmp/ansible-tmp-1477054111.24-214066525349846/ios_command.py
<10.27.200.80> EXEC /bin/sh -c 'chmod u+x /home/mszczesniak/.ansible/tmp/ansible-tmp-1477054111.24-214066525349846/ /home/mszczesniak/.ansible/tmp/ansible-tmp-1477054111.24-214066525349846/ios_command.py && sleep 0'
<10.27.200.80> EXEC /bin/sh -c '/usr/bin/python /home/mszczesniak/.ansible/tmp/ansible-tmp-1477054111.24-214066525349846/ios_command.py; rm -rf "/home/mszczesniak/.ansible/tmp/ansible-tmp-1477054111.24-214066525349846/" > /dev/null 2>&1 && sleep 0'
An exception occurred during task execution. The full traceback is:
Traceback (most recent call last):
File "/tmp/ansible_zKWzh_/ansible_module_ios_command.py", line 237, in <module>
main()
File "/tmp/ansible_zKWzh_/ansible_module_ios_command.py", line 200, in main
runner.add_command(**cmd)
File "/tmp/ansible_zKWzh_/ansible_modlib.zip/ansible/module_utils/netcli.py", line 147, in add_command
File "/tmp/ansible_zKWzh_/ansible_modlib.zip/ansible/module_utils/network.py", line 116, in cli
File "/tmp/ansible_zKWzh_/ansible_modlib.zip/ansible/module_utils/network.py", line 147, in connect
File "/tmp/ansible_zKWzh_/ansible_modlib.zip/ansible/module_utils/ios.py", line 180, in connect
File "/tmp/ansible_zKWzh_/ansible_modlib.zip/ansible/module_utils/shell.py", line 230, in connect
File "/tmp/ansible_zKWzh_/ansible_modlib.zip/ansible/module_utils/shell.py", line 100, in open
File "/usr/lib/python2.7/dist-packages/paramiko/client.py", line 367, in connect
look_for_keys, gss_auth, gss_kex, gss_deleg_creds, gss_host)
File "/usr/lib/python2.7/dist-packages/paramiko/client.py", line 585, in _auth
raise SSHException('No authentication methods available')
paramiko.ssh_exception.SSHException: No authentication methods available
fatal: [10.27.200.80]: FAILED! => {
"changed": false,
"failed": true,
"invocation": {
"module_name": "ios_command"
},
"module_stderr": "Traceback (most recent call last):\n File \"/tmp/ansible_zKWzh_/ansible_module_ios_command.py\", line 237, in <module>\n main()\n File \"/tmp/ansible_zKWzh_/ansible_module_ios_command.py\", line 200, in main\n runner.add_command(**cmd)\n File \"/tmp/ansible_zKWzh_/ansible_modlib.zip/ansible/module_utils/netcli.py\", line 147, in add_command\n File \"/tmp/ansible_zKWzh_/ansible_modlib.zip/ansible/module_utils/network.py\", line 116, in cli\n File \"/tmp/ansible_zKWzh_/ansible_modlib.zip/ansible/module_utils/network.py\", line 147, in connect\n File \"/tmp/ansible_zKWzh_/ansible_modlib.zip/ansible/module_utils/ios.py\", line 180, in connect\n File \"/tmp/ansible_zKWzh_/ansible_modlib.zip/ansible/module_utils/shell.py\", line 230, in connect\n File \"/tmp/ansible_zKWzh_/ansible_modlib.zip/ansible/module_utils/shell.py\", line 100, in open\n File \"/usr/lib/python2.7/dist-packages/paramiko/client.py\", line 367, in connect\n look_for_keys, gss_auth, gss_kex, gss_deleg_creds, gss_host)\n File \"/usr/lib/python2.7/dist-packages/paramiko/client.py\", line 585, in _auth\n raise SSHException('No authentication methods available')\nparamiko.ssh_exception.SSHException: No authentication methods available\n",
"module_stdout": "",
"msg": "MODULE FAILURE"
}
to retry, use: --limit #/home/mszczesniak/test1.retry
PLAY RECAP *********************************************************************
10.27.200.80 : ok=0 changed=0 unreachable=0 failed=1
What is wrong? It looks like option in a config file is not taken or maby there is problem in dev 2.3.0 version?
This exception is raised when you do not provide any means for authentication. The Paramiko SSH Client doesn't know what method to use and hence raises SSHException('No authentication methods available').
You should provide either a password or a private key (or both), for the SSHClient to work. Else, it's just clueless.
A little extra:
If you look at the code, you can see that this exception is raised when none of the possible auth methods have been tried.
if we are adding the below parameters
ansible_user=rakesh
ansible_password=xxxxx
it is giving "unable to set terminal parameters" error

An exception occurred during task execution

Following this http://docs.ansible.com/ansible/intro_installation.html I did
echo "127.0.0.1" > /etc/ansible/hosts
Then
ansible all -m ping --ask-pass
SSH password:
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: AttributeError: 'EntryPoint' object has no attribute 'resolve'
127.0.0.1 | FAILED! => {
"failed": true,
"msg": "Unexpected failure during module execution.",
"stdout": ""
}
So, using -vvv I get:
ansible -vvv all -m ping --ask-pass
No config file found; using defaults
SSH password:
Using module file /Users/Snowcrash/Developer/Ansible/ansible/lib/ansible/modules/core/system/ping.py
<127.0.0.1> ESTABLISH CONNECTION FOR USER: None on PORT 22 TO 127.0.0.1
An exception occurred during task execution. The full traceback is:
Traceback (most recent call last):
File "/Users/Snowcrash/Developer/Ansible/ansible/lib/ansible/executor/task_executor.py", line 120, in run
res = self._execute()
File "/Users/Snowcrash/Developer/Ansible/ansible/lib/ansible/executor/task_executor.py", line 457, in _execute
result = self._handler.run(task_vars=variables)
File "/Users/Snowcrash/Developer/Ansible/ansible/lib/ansible/plugins/action/normal.py", line 33, in run
results = merge_hash(results, self._execute_module(tmp=tmp, task_vars=task_vars))
File "/Users/Snowcrash/Developer/Ansible/ansible/lib/ansible/plugins/action/__init__.py", line 583, in _execute_module
tmp = self._make_tmp_path(remote_user)
File "/Users/Snowcrash/Developer/Ansible/ansible/lib/ansible/plugins/action/__init__.py", line 218, in _make_tmp_path
result = self._low_level_execute_command(cmd, sudoable=False)
File "/Users/Snowcrash/Developer/Ansible/ansible/lib/ansible/plugins/action/__init__.py", line 726, in _low_level_execute_command
rc, stdout, stderr = self._connection.exec_command(cmd, in_data=in_data, sudoable=sudoable)
File "/Users/Snowcrash/Developer/Ansible/ansible/lib/ansible/plugins/connection/paramiko_ssh.py", line 251, in exec_command
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
File "/Users/Snowcrash/Developer/Ansible/ansible/lib/ansible/plugins/connection/__init__.py", line 51, in wrapped
self._connect()
File "/Users/Snowcrash/Developer/Ansible/ansible/lib/ansible/plugins/connection/paramiko_ssh.py", line 139, in _connect
self.ssh = SSH_CONNECTION_CACHE[cache_key] = self._connect_uncached()
File "/Users/Snowcrash/Developer/Ansible/ansible/lib/ansible/plugins/connection/paramiko_ssh.py", line 208, in _connect_uncached
ssh.load_system_host_keys()
File "/Users/Snowcrash/Library/Python/2.7/lib/python/site-packages/paramiko/client.py", line 101, in load_system_host_keys
self._system_host_keys.load(filename)
File "/Users/Snowcrash/Library/Python/2.7/lib/python/site-packages/paramiko/hostkeys.py", line 101, in load
e = HostKeyEntry.from_line(line, lineno)
File "/Users/Snowcrash/Library/Python/2.7/lib/python/site-packages/paramiko/hostkeys.py", line 331, in from_line
key = RSAKey(data=decodebytes(key))
File "/Users/Snowcrash/Library/Python/2.7/lib/python/site-packages/paramiko/rsakey.py", line 58, in __init__
).public_key(default_backend())
File "/Users/Snowcrash/Library/Python/2.7/lib/python/site-packages/cryptography/hazmat/backends/__init__.py", line 35, in default_backend
_default_backend = MultiBackend(_available_backends())
File "/Users/Snowcrash/Library/Python/2.7/lib/python/site-packages/cryptography/hazmat/backends/__init__.py", line 22, in _available_backends
"cryptography.backends"
AttributeError: 'EntryPoint' object has no attribute 'resolve'
127.0.0.1 | FAILED! => {
"failed": true,
"msg": "Unexpected failure during module execution.",
"stdout": ""
}
Any suggestions?
AttributeError: 'EntryPoint' object has no attribute 'resolve' is an error caused when the version of setuptools that was loaded is too old. Try upgrading the setuptools in your environment.
cryptography documents a minimum setuptools version of >=11.3 (setup.py), but on occasion pip can fail to enforce this requirement.

Resources