我的 ansible 剧本中反复出现的一个主题是,我经常必须使用 sudo 权限 ( sudo: yes) 执行命令,因为我想为某个用户执行此操作。理想情况下,我宁愿使用 sudo 切换到该用户并正常执行命令。因为这样我就不必执行我通常的 post 命令清理了,例如 chowning 目录。这是我的一本剧本的片段:
sudo: yes
- name: checkout repo git: repo=https://github.com/some/repo.git version=master dest={{ dst }} sudo: yes - name: change perms file: dest={{ dst }} state=directory mode=0755 owner=some_user sudo: yes
理想情况下,我可以以不同的用户身份运行命令或命令集,即使它需要 sudo 来 su 到该用户。
Ansible 使用become、become_user和become_method指令来实现权限提升。您可以将它们应用于整个剧本或剧本,将它们设置在包含的剧本中,或将它们设置为特定任务。
become
become_user
become_method
- name: checkout repo git: repo=https://github.com/some/repo.git version=master dest={{ dst }} become: yes become_user: some_user
您可以使用become_with指定如何实现权限提升,默认为sudo.
become_with
sudo
该指令在使用它的块的范围内有效(示例)。
有关其他示例,请参阅主机和用户,有关更详细的文档,请参阅成为(特权升级)。
除了任务范围become和become_user指令之外,Ansible 1.9 添加了一些新变量和命令行选项,以便在没有显式指令的情况下在播放期间设置这些值:
从 Ansible 2.0.2.0 开始,下面描述的旧sudo/sudo_user语法仍然有效,但弃用通知指出,“此功能将在未来的版本中删除。”
sudo_user
- name: checkout repo git: repo=https://github.com/some/repo.git version=master dest={{ dst }} sudo: yes sudo_user: some_user