Я видел много сообщений, в которых утверждалось, что плейбуки работают правильно, когда выполняются с помощью доступного интерфейса командной строки, но не в AWX. Однако я не нашел решения своей проблемы. Для простоты у меня есть следующая роль:
---
- name: Append Public key in authorized_keys file
authorized_key:
user: "{{ username }}"
state: present
key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
Он называется следующим образом:
- name: copy root public key to nodes
become: yes
become_user: root
hosts: jenkins-nodes
roles:
- role: copy-keys
username: root
Запускаем его с помощью интерфейса командной строки, как показано ниже:
ansible-playbook -i inventory.ini -u root <my-playbook> ---vvv
работает должным образом и отображает следующее:
TASK [copy-keys : Append Public key in authorized_keys file
***************************************************************
task path: /opt/jenkins-cluster/roles/copy-keys/tasks/main.yml:2
...
ok: [jenkins-agent-1] => {
"changed": false,
"comment": null,
"exclusive": false,
"invocation": {
"module_args": {
"comment": null,
"exclusive": false,
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCuF9U2HvzUubuYYZxJaEu/1nls7RLAZO+qcJF37RIepTSLOgoPsluq7uVRhEnadqnB0yVWccZYHs6WEp5Fo2QIRDRho4+TuACB26EE4GTYGnozyMwOwVcTzRo0CiUXfo3IZKWwQ+v8WwBMae3EpYrbrEZy6lLS8K85uYseyjg1myRhEsltdSiNnHun7p09/v/HMq2KsZcmx6nTg66QvkbbnFvv9UpGQ1J6gvimp11r5r1hwXaB7ejTwrxMICvaE2Flq3WGeaB35I4dYFsrWNK1CalP7jPF+MRgqHUrjoOy5hxp3zSXunfGWeRJCaJY5hYDLp3hTGrt8BwcdD+8Gy7r root@inf-inone01-prd",
"key_options": null,
"keyfile": "/root/.ssh/authorized_keys",
"manage_dir": true,
"path": null,
"state": "present",
"unique": false,
"user": "root",
"validate_certs": true
}
},
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCuF9U2HvzUubuYYZxJaEu/1nls7RLAZO+qcJF37RIepTSLOgoPsluq7uVRhEnadqnB0yVWccZYHs6WEp5Fo2QIRDRho4+TuACB26EE4GTYGnozyMwOwVcTzRo0CiUXfo3IZKWwQ+v8WwBMae3EpYrbrEZy6lLS8K85uYseyjg1myRhEsltdSiNnHun7p09/v/HMq2KsZcmx6nTg66QvkbbnFvv9UpGQ1J6gvimp11r5r1hwXaB7ejTwrxMICvaE2Flq3WGeaB35I4dYFsrWNK1CalP7jPF+MRgqHUrjoOy5hxp3zSXunfGWeRJCaJY5hYDLp3hTGrt8BwcdD+8Gy7r root@inf-inone01-prd",
"key_options": null,
"keyfile": "/root/.ssh/authorized_keys",
"manage_dir": true,
"path": null,
"state": "present",
"unique": false,
"user": "root",
"validate_certs": true
}
...
META: ran handlers
META: ran handlers
Когда я выполняю то же самое в AWX, я получаю:
TASK [copy-keys : Append Public key in authorized_keys file]
*******************
task path: /var/lib/awx/projects/_39__jenkins_cluster/roles/copy-keys/tasks/main.yml:2
[WARNING]: Unable to find '~/.ssh/id_rsa.pub' in expected paths (use -vvvvv to
see paths)
[WARNING]: Unable to find '~/.ssh/id_rsa.pub' in expected paths (use -vvvvv to
see paths)
fatal: [jenkins-agent-1]: FAILED! => {
"msg": "An unhandled exception occurred while running the lookup plugin 'file'. Error was a
<class 'ansible.errors.AnsibleError'>, original message: could not locate file in lookup: ~/.ssh/id_rsa.pub"
}
Исключение составляет сообщение о том, что файл ~ / .ssh / id_rsa.pub, здесь /root/.ssh/id_rsa.pub для пользователя root, не может быть обнаружен, поскольку он не существует. Насколько я понимаю, модуль authorized_key добавит в файл authorized_keys на целевом хосте содержимое файла /root/.ssh/id_rsa.pub на доступном контроллере. И этот файл существует:
PROD root@inf-inone01-prd jenkins-cluster $ cat /root/.ssh/id_rsa.pub
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCuF9U2HvzUubuYYZxJaEu/1nls7RLAZO
+qcJF37RIepTSLOgoPsluq7uVRhEnadqnB0yVWccZY
Hs6WEp5Fo2QIRDRho4+TuACB26EE4GTYGnozyMwOwVcTzRo0CiUXfo3IZKWwQ
+v8WwBMae3EpYrbrEZy6lLS8K85uYseyjg1myRhEsltd
SiNnHun7p09/v/HMq2KsZcmx6nTg66QvkbbnFvv9UpGQ1J6gvimp11r5r1hwXaB7ejTwrxMIC
vaE2Flq3WGeaB35I4dYFsrWNK1CalP7jPF+MRgqHUrjoOy5hxp3zSXunfGWeRJCaJY5hYDLp3hTGrt8BwcdD+8Gy7r
root@inf-inone01-prd
PROD root@inf-inone01-prd jenkins-cluster $
Очевидно, что модуль authorized_keys не может разрешить ~ / .ssh, но почему он это делает при запуске с CLI?
Любое предложение будет высоко оценено, поскольку после того, как я потратил время на тестирование всего материала, чтобы охватить все случаи с использованием CLI, я подумал, что размещение всего в AWX будет делом минут. К сожалению, это не так.
С уважением,
Николас
~
- этоbash
вещь. AWX не работает в интерактивной оболочке, поэтому~
не разыменовывается. Используйте полный путь. - person Jack   schedule 18.02.2020bash
оболочке, которая разыменовывает~
за вас. - person Jack   schedule 18.02.2020ansible-playbook
, который мне пришлось изменить для работы в Ansible Tower. - person Jack   schedule 19.02.2020