目前我的剧本结构是这样的:
~/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
有更好的方法吗?
答案 0 :(得分:6)
您可以设置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
,blocks会派上用场,以避免再次发生:
- block:
- shell: do something
- shell: do something
- shell: do something
become: yes
become_user: my_username