就像你在终端上执行的常规命令一样,有些任务需要特殊的权限,以便Ansible在你的远程节点上成功执行。
了解权限升级在Ansible中的作用是很重要的,这样你就能以适当的权限执行你的任务。默认情况下,任务会以连接用户的身份运行--这可能是root或任何有SSH权限的普通用户,可以访问清单文件中的远程节点。
要运行具有扩展权限的命令,例如需要sudo 的命令,你需要在你的游戏中包含一个become 指令,设置为yes 。这可以作为一个全局设置,对该剧中的所有任务有效,或者作为一个单独的指令应用于每个任务。根据你的sudo 用户在远程节点中的设置情况,你可能还需要提供用户的sudo 密码。下面的例子是更新apt 缓存,这个任务需要root权限。
在你的ansible-practice 目录中创建一个名为playbook-07.yml 的新文件。
nano ~/ansible-practice/playbook-07.yml
然后在新的playbook文件中添加以下几行。
~/ansible-practice/playbook-07.yml
---
- hosts: all
become: yes
tasks:
- name: Update apt cache
apt:
update_cache: yes
完成后保存并关闭该文件。
要运行这个playbook,你需要在ansible-playbook 命令中加入-K 选项。这将使Ansible提示你为指定的用户提供sudo 密码。
ansible-playbook -i inventory playbook-07.yml -u sammy -K
你也可以在执行任务或游戏时改变你想切换到哪个用户。要做到这一点,将become_user 指令设置为你想切换到的远程用户的名字。当你在一个游戏手册中有几个任务依赖sudo ,但也有几个任务应该以你的普通用户运行时,这很有用。
下面的例子定义了这个游戏中的所有任务在默认情况下将以sudo 执行。这是在游戏级别设置的,就在hosts 定义之后。第一个任务使用root 权限在/tmp 上创建一个文件,因为那是默认的became_user 值。然而,最后一个任务定义了它自己的become_user 。
在你的ansible-practice 目录中创建一个名为playbook-08.yml 的新文件。
nano ~/ansible-practice/playbook-08.yml
在新的playbook文件中添加以下内容。
~/ansible-practice/playbook-08.yml
---
- hosts: all
become: yes
vars:
user: "{{ ansible_env.USER }}"
tasks:
- name: Create root file
file:
path: /tmp/my_file_root
state: touch
- name: Create user file
become_user: "{{ user }}"
file:
path: /tmp/my_file_{{ user }}
state: touch
完成后保存并关闭该文件。
ansible_env.USER 事实包含连接用户的用户名,可以在执行时用-u 选项运行ansible-playbook 命令时定义该用户名。在本指南中,我们以sammy 。
ansible-playbook -i inventory playbook-08.yml -u sammy -K
OutputBECOME password:
PLAY [all] **********************************************************************************************
TASK [Gathering Facts] **********************************************************************************
ok: [203.0.113.10]
TASK [Create root file] *********************************************************************************
changed: [203.0.113.10]
TASK [Create user file] *********************************************************************************
changed: [203.0.113.10]
PLAY RECAP **********************************************************************************************
203.0.113.10 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
当游戏手册运行完毕后,你可以登录到远程节点上,以验证在/tmp ,每个文件都有不同的所有权信息,创建了两个新文件。
ssh sammy@203.0.113.10
ls -la /tmp/my_file*
Output-rw-r--r-- 1 root root 0 Apr 14 13:19 /tmp/my_file_root
-rw-r--r-- 1 sammy sudo 0 Apr 14 12:07 /tmp/my_file_sammy
关于Ansible中权限升级的更多详细信息,请参考官方文档。