与您在终端上执行的常规命令一样,某些任务需要特殊权限,以便 Ansible 在远程节点上成功执行它们。
重要的是要了解优先权升级在 Ansible 中是如何工作的,以便您能够使用适当的权限执行任务. 默认情况下,任务将作为连接用户运行 - 这可能是 root 或任何有 SSH 访问的普通用户在库存文件中的远程节点。
要运行具有扩展权限的命令,例如需要sudo
的命令,您需要在游戏中包含一个变成
指令设置为是
。这可以作为适用于该游戏中的所有任务的全球设置,或者作为每个任务的单独指令。
在你的ansible-practice
目录中创建一个名为playbook-07.yml
的新文件:
1nano ~/ansible-practice/playbook-07.yml
然后将以下行添加到新播放簿文件中:
1[label ~/ansible-practice/playbook-07.yml]
2---
3- hosts: all
4 become: yes
5 tasks:
6 - name: Update apt cache
7 apt:
8 update_cache: yes
保存并关闭文件,当你完成。
要运行此播放本,您需要在ansible-playbook
命令中包含-K
选项。
1ansible-playbook -i inventory playbook-07.yml -u sammy -K
要做到这一点,将become_user
指令设置为您要切换的远程用户的名称。
以下示例定义了本场比赛中的所有任务将默认执行为sudo
。 这是在hosts
定义后,在sudo
级设置的。 第一项任务使用root
特权创建了在/tmp
上的文件,因为这是默认的became_user
值。
在你的ansible-practice
目录中创建一个名为playbook-08.yml
的新文件:
1nano ~/ansible-practice/playbook-08.yml
将以下内容添加到新播放簿文件中:
1[label ~/ansible-practice/playbook-08.yml]
2---
3- hosts: all
4 become: yes
5 vars:
6 user: "{{ ansible_env.USER }}"
7 tasks:
8 - name: Create root file
9 file:
10 path: /tmp/my_file_root
11 state: touch
12
13 - name: Create user file
14 become_user: "{{ user }}"
15 file:
16 path: /tmp/my_file_{{ user }}
17 state: touch
保存并关闭文件,当你完成。
ansible_env.USER
事实包含连接用户的用户名,在运行ansible-playbook
命令时可以定义在执行时使用-u
选项。
1ansible-playbook -i inventory playbook-08.yml -u sammy -K
1[secondary_label Output]
2BECOME password:
3
4PLAY [all] **********************************************************************************************
5
6TASK [Gathering Facts] **********************************************************************************
7ok: [203.0.113.10]
8
9TASK [Create root file] *********************************************************************************
10changed: [203.0.113.10]
11
12TASK [Create user file] *********************************************************************************
13changed: [203.0.113.10]
14
15PLAY RECAP **********************************************************************************************
16203.0.113.10 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
当播放簿完成运行时,您可以登录远程节点(s),以验证在 `/tmp 上创建了两个新文件,每个文件具有不同的所有权信息:
1ssh [email protected]
1[environment second]
2ls -la /tmp/my_file*
1[secondary_label Output]
2[environment second]
3-rw-r--r-- 1 root root 0 Apr 14 13:19 /tmp/my_file_root
4-rw-r--r-- 1 sammy sudo 0 Apr 14 12:07 /tmp/my_file_sammy
有关 Ansible 中的特权升级的详细信息,请参阅 官方文件。