我是 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模块?
那么我怎样才能将这两个任务串联起来呢?
您不能这样做,但您可以添加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)。
| 归档时间: |
|
| 查看次数: |
14630 次 |
| 最近记录: |