我是Ansible的新手,试图成为$USER
,然后在.ssh
目录中创建$HOME
文件夹,并且我获得了Permission denied
:
---
- hosts: amazon
gather_facts: False
vars:
ansible_python_interpreter: "/usr/bin/env python3"
account: 'jenkins'
home: "{{out.stdout}}"
tasks:
- name: Create .SSH directory
become: true
become_method: sudo
become_user: "{{account}}"
shell: "echo $HOME"
register: out
- file:
path: "{{home}}/.ssh"
state: directory
我的输出是:
MacBook-Pro-60:playbooks stefanov$ ansible-playbook variable.yml -v
Using /Users/stefanov/.ansible/ansible.cfg as config file
PLAY [amazon] *************************************************************************************************************************************************************************************
TASK [Create .SSH directory] **********************************************************************************************************************************************************************
changed: [slave] => {"changed": true, "cmd": "echo $HOME", "delta": "0:00:00.001438", "end": "2017-08-21 10:23:34.882835", "rc": 0, "start": "2017-08-21 10:23:34.881397", "stderr": "", "stderr_lines": [], "stdout": "/home/jenkins", "stdout_lines": ["/home/jenkins"]}
TASK [file] ***************************************************************************************************************************************************************************************
fatal: [slave]: FAILED! => {"changed": false, "failed": true, "msg": "There was an issue creating /home/jenkins/.ssh as requested: [Errno 13] Permission denied: b'/home/jenkins/.ssh'", "path": "/home/jenkins/.ssh", "state": "absent"}
to retry, use: --limit @/Users/stefanov/playbooks/variable.retry
PLAY RECAP ****************************************************************************************************************************************************************************************
slave : ok=1 changed=1 unreachable=0 failed=1
我猜测- name
和- file
是决定性的,并被视为不同的任务。
- name
中执行的内容在- file
中不再有效?
因为我在- name
和- file
切换到Jenkins用户,我可能会使用该帐户进行SSH。
那么如何将两个任务连接成一个?
这样做的正确方法是什么?
另一件事我怎么能用file
模块做sudo?我看不到这样的选择:
http://docs.ansible.com/ansible/latest/file_module.html
或者我应该只做shell:mkdir -pv $HOME/.ssh
而不是使用file
模块?
答案 0 :(得分:1)
然后我如何将两个任务连接在一起?
你不能这样做,但是你可以将become
添加到第二个任务,这将使它以与第一个任务相同的权限运行:
- file:
path: "{{home}}/.ssh"
state: directory
become: true
become_method: sudo
become_user: "{{account}}"
另外我怎么能用文件模块做sudo看不到这样的选项
因为become
(和其他)不是模块的参数,而是任何任务(和播放)的一般声明。
我猜-name和-file是dicts并且被认为是不同的任务。
第一项任务是shell
,而不是name
。您可以将name
添加到任何任务(就像become
)。