~/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
还有更好的方法吗?
#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
评论
为什么不仅在安装任务中写sudo = yes?sudo = yes不赞成吗?
没错,它已经过时了,但您也可以为每个任务使用begin_user。看到这个stackoverflow问题
我已经在做。只是想知道是否有更好的方法。
您可以以其他用户身份运行install_dependencies角色,同时包含此stackoverflow问题