Ansible将任务列表包含为

时间:2018-07-24 23:09:33

标签: ansible

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

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

- include_tasks: "{{ role_path }}/tasks/content.yml"
  become: yes
  become_user: dev

content.yml只是获取当前用户:

- command: whoami
  register: whoami
- debug:
    var: whoami

我的剧本是

- hosts: dev
  become: true
  remote_user: root  
  roles:
    - foo    

我得到以下输出:

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"
        ]
    }
}

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

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

1 个答案:

答案 0 :(得分:3)

使用import_tasks代替include_tasks

- import_tasks: "{{ role_path }}/tasks/content.yml"
  become: yes
  become_user: dev

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

- include_tasks: "{{ role_path }}/tasks/content.yml"
  apply:
    become: yes
    become_user: dev