Ansible got stuck while running shell command for creating symbolic link - ansible

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

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

Provisioning Grafana Datasource in Ansible using Lists

I'm having an issue provisioning Grafana datasources with host variables for api key and url.
My intent is to implement a common list of datasources across multiple Grafana hosts (test/dev platforms.) Each of these hosts has their own Grafana URL and API Key.
Running grafana_datasource explicitly works fine, and using variables in debug prints my expected values for API key and URL as expected, but using the same syntax in grafana_datasource causes issues.
I have created host variables in my inventory like so:
[hostgroup]
host1 grafapikey=loTsoFLeTTers grafurl=https://host1.net
host2 grafapikey=loTsoFLeTTers grafurl=https://host2.net
I then test referencing these variables in my playbook like this:
- name: what is grafurl
debug:
msg: "{{ hostvars[inventory_hostname].grafurl }}"
- name: what is grafapi
debug:
msg: "{{ hostvars[inventory_hostname].grafapikey }}"
# note output is identical whether using msg or var here
and the output is as expected:
TASK [what is grafurl] **************************
ok: [host1.net] => {
"msg": "https://host1.net/"
}
TASK [what is grafapi] **************************
ok: [host1.net] => {
"msg": "loTsoFLeTTers"
}
Also, defining all arguments explictly when running this command ad-hoc creates the datasource successfully.
user#ansible-host:~$ ansible host1.net -m grafana_datasource -a "grafana_api_key='LoTsofLettERs' grafana_url='https://host1.net' name=testds ds_type=mysql url='testurl' database='test'" -K
BECOME password:
host1.net | CHANGED => {
"changed": true,
"id": 2,
"msg": "Datasource testds created : Datasource added",
"name": "testds"
}
However, running the same adhoc command using variable references causes issues:
user#ansible-host:~$ ansible host1.net -m grafana_datasource -a "grafana_api_key='{{ hostvars[inventory_hostname].grafapikey }}' grafana_url='{{ hostvars[inventory_hostname].grafurl }}' name=testds ds_type=mysql url='testurl' database='test' validate_certs=no" -K
BECOME password:
scada.ifctrl.net | FAILED! => {
"changed": false,
"module_stderr": "Shared connection to scada.ifctrl.net closed.\r\n",
"module_stdout": ##see below
I get lengthy errors in playbook output describing unexpected empty JSON:
Traceback (most recent call last):
File \"/root/.ansible/tmp/ansible-tmp-1596750425.3152304-29947-100749071777145/AnsiballZ_grafana_datasource.py\", line 102, in <module>
_ansiballz_main()
File \"/root/.ansible/tmp/ansible-tmp-1596750425.3152304-29947-100749071777145/AnsiballZ_grafana_datasource.py\", line 94, in _ansiballz_main
invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
File \"/root/.ansible/tmp/ansible-tmp-1596750425.3152304-29947-100749071777145/AnsiballZ_grafana_datasource.py\", line 40, in invoke_module
runpy.run_module(mod_name='ansible.modules.monitoring.grafana_datasource', init_globals=None, run_name='__main__', alter_sys=True)
File \"/usr/lib/python3.6/runpy.py\", line 205, in run_module
return _run_module_code(code, init_globals, run_name, mod_spec)
File \"/usr/lib/python3.6/runpy.py\", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File \"/usr/lib/python3.6/runpy.py\", line 85, in _run_code
exec(code, run_globals)
File \"/tmp/ansible_grafana_datasource_payload_pwpa837u/ansible_grafana_datasource_payload.zip/ansible/modules/monitoring/grafana_datasource.py\", line 683, in <module>
File \"/tmp/ansible_grafana_datasource_payload_pwpa837u/ansible_grafana_datasource_payload.zip/ansible/modules/monitoring/grafana_datasource.py\", line 665, in main
File \"/tmp/ansible_grafana_datasource_payload_pwpa837u/ansible_grafana_datasource_payload.zip/ansible/modules/monitoring/grafana_datasource.py\", line 504, in grafana_create_datasource
File \"/tmp/ansible_grafana_datasource_payload_pwpa837u/ansible_grafana_datasource_payload.zip/ansible/modules/monitoring/grafana_datasource.py\", line 397, in grafana_datasource_exists
File \"/usr/lib/python3.6/json/__init__.py\", line 354, in loads
return _default_decoder.decode(s)
File \"/usr/lib/python3.6/json/decoder.py\", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File \"/usr/lib/python3.6/json/decoder.py\", line 357, in raw_decode
raise JSONDecodeError(\"Expecting value\", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Is my syntax incorrect? Am I referencing variables incorrectly in the scope of grafana_datasource in my playbook?
The issue was that I had a trailing slash in my Grafana URL. Removing the slash resolved the problem.

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 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