如何使用Ansible在$ USER $ HOME中创建文件夹

时间:2017-08-21 10:42:57

标签: ansible

我是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模块?

1 个答案:

答案 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)。