Ansible将任务列表包含为

Ada*_*dam 1 ansible

我想以特定用户的身份执行某些任务列表(在剧本中)。用户实际上来自变量,但是在最小的示例中,我很难将其编码为“ dev”。(此用户确实存在)。我无法弄清楚以下原因为何不起作用

我在role / foo / tasks中的main.yml是

- include_tasks: "{{ role_path }}/tasks/content.yml"
  become: yes
  become_user: dev
Run Code Online (Sandbox Code Playgroud)

虽然content.yml仅获取当前用户:

- command: whoami
  register: whoami
- debug:
    var: whoami
Run Code Online (Sandbox Code Playgroud)

我的剧本是

- hosts: dev
  become: true
  remote_user: root  
  roles:
    - foo    
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

PLAY [dev] ********************************************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************************************************************************************************************************************
ok: [adco-test-webdev]

TASK [foo : include_tasks] ****************************************************************************************************************************************************************************************************************************************************
included: /smbshare/ansible/roles/foo/tasks/content.yml for adco-test-webdev

TASK [foo : command] **********************************************************************************************************************************************************************************************************************************************************
changed: [adco-test-webdev]

TASK [foo : debug] ************************************************************************************************************************************************************************************************************************************************************
ok: [adco-test-webdev] => {
    "whoami": {
        "changed": true,
        "cmd": [
            "whoami"
        ],
        "delta": "0:00:00.002194",
        "end": "2018-07-25 02:05:54.879601",
        "failed": false,
        "rc": 0,
        "start": "2018-07-25 02:05:54.877407",
        "stderr": "",
        "stderr_lines": [],
        "stdout": "root",
        "stdout_lines": [
            "root"
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么以用户为根?我知道我以root用户身份连接,但是后来我成为了include的开发人员,不是吗?

如果这是它的工作方式,那么我应该如何配置角色,以便以特定用户的身份运行整个任务列表?我是否必须记住每个项目上的成为和成为用户?

tec*_*raf 5

使用import_tasks代替include_tasks

- import_tasks: "{{ role_path }}/tasks/content.yml"
  become: yes
  become_user: dev
Run Code Online (Sandbox Code Playgroud)

在将来的版本(从2.7开始)中,您将可以使用新参数来实现apply

- include_tasks: "{{ role_path }}/tasks/content.yml"
  apply:
    become: yes
    become_user: dev
Run Code Online (Sandbox Code Playgroud)

  • 因为在你提出这个问题之前,实现或维护“include_tasks”模块的人没有实现包含任务继承“成为”设置的功能。但是[为未来版本2.7实现了它](https://github.com/ansible/ansible/blob/2c9cbae3f9fe289e77168efdbcc8ee4b4547b931/lib/ansible/modules/utilities/logic/include_tasks.py#L31) (3认同)