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

Fil*_*nov 8 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
Run Code Online (Sandbox Code Playgroud)

我的输出是:

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
Run Code Online (Sandbox Code Playgroud)

我猜测- name- file是听写并考虑不同的任务。
并且在 中执行的内容- name不再有效- file
因为我切换到了 Jenkins 用户,- name并且- file我很可能使用我执行 SSH 的帐户。

那么我怎样才能将这两个任务串联起来呢?
这样做的正确方法是什么?

另一件事我如何使用file模块执行 sudo ?我看不到这样的选项:
http://docs.ansible.com/ansible/latest/file_module.html

或者我应该只做 shell:mkdir -pv $HOME/.ssh而不是使用file模块?

tec*_*raf 8

那么我怎样才能将这两个任务串联起来呢?

您不能这样做,但您可以添加become到第二个任务,这将使其以与第一个任务相同的权限运行:

- file:
    path: "{{home}}/.ssh"
    state: directory
  become: true
  become_method: sudo
  become_user: "{{account}}"
Run Code Online (Sandbox Code Playgroud)

另一件事我如何使用文件模块执行 sudo 看不到这样的选项

因为become(and other) 不是模块的参数,而是任何任务(和播放)的通用声明。

我猜测 -name 和 -file 是字典并被视为不同的任务。

第一个任务是shell,不是name。您可以添加name到任何任务(就像become)。