目前,我的剧本结构如下:

~/test_ansible_roles ❯❯❯ tree .
.
├── checkout_sources
│   └── tasks
│       └── main.yml
├── install_dependencies
│   └── tasks
│       └── main.yml
├── make_dirs
│   └── tasks
│       └── main.yml
├── setup_machine.yml


我要扮演的角色之一是在盒子上安装依赖项,因此我需要sudo。因此,我需要完成所有其他任务,所以需要添加节:

   become: yes
   become_user: my_username


还有更好的方法吗?

评论

为什么不仅在安装任务中写sudo = yes?

sudo = yes不赞成吗?

没错,它已经过时了,但您也可以为每个任务使用begin_user。看到这个stackoverflow问题

我已经在做。只是想知道是否有更好的方法。

您可以以其他用户身份运行install_dependencies角色,同时包含此stackoverflow问题

#1 楼

您可以根据以下内容设置become选项:


剧本
角色
任务

每个剧本:

- hosts: whatever
  become: yes
  become_user: my_username
  roles:
    - checkout_sources
    - install_dependencies
    - make_dirs


每个角色:

- hosts: whatever
  roles:
    - checkout_sources
    - role: install_dependencies
      become: yes
      become_user: my_username
    - make_dirs


每个任务:

- shell: do something
  become: yes
  become_user: my_username


您可以根据您的喜好进行组合。该剧本可以以用户A的身份运行,也可以以用户B的身份运行,最后可以以角色C的身份运行在角色内部。

几乎不需要为每个剧本或角色定义become。如果角色中的单个任务需要sudo,则仅应为该特定任务而不是角色进行定义。

如果角色中的多个任务需要become,则可以使用块来避免重复发生:

- block:
    - shell: do something
    - shell: do something
    - shell: do something
  become: yes
  become_user: my_username


评论


当我用-K运行剧本时,我开始使用的初始用户是“ root”,对吗?

–低建城
16年5月13日在11:36

我不这么认为。 --ask-sudo-pass(或现在为--ask-become-pass)应仅提示输入用于sudo / become的密码,而不能自动强制用户使用完整的剧本。

– udondan
16年5月13日在11:43

我已经尝试过了,在我的checkout_sources中,它以root身份签出源。

–低建城
16年5月13日在23:12