初学playbook,从一个简单的示例开始。
---# 文档的开始,用来明确这是一个yaml格式的文件,其实不写也可以
- hosts: 192.168.0.132# 要控制的主机组或者主机名,这里是主机名
tasks:# 定义一组任务,这些任务将在指定的主机上执行
- name: test connection# 任务列表的第一个任务,方便在执行时识别和调试。
ping:# Ansible的一个模块,用来测试Ansible是否能够成功连接到目标主机。它不是用来发送ICMP ping请求,而是用来建立SSH连接,并确认目标主机可达。
[root@192 ~]# ansible-playbook ping-playbook.yaml
PLAY [192.168.0.132] ****************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.132]
TASK [test connection] **************************************************************************************************************************************
ok: [192.168.0.132]
PLAY RECAP **************************************************************************************************************************************************
192.168.0.132 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- 使用 ansible-playbook 指向 playbook 剧本
- PLAY [192.168.0.132] :这表示Ansible正在对IP地址为192.168.0.132的主机执行剧本。
- TASK [Gathering Facts]: Ansible自动执行的第一个任务,用于收集目标主机的一些基本信息(称为facts),例如操作系统类型、内核版本、IP地址、内存大小等。
- ok: [192.168.0.132]: 表示任务执行成功,目标主机192.168.0.132的facts已经被收集。
- TASK [test connection]: 这是剧本中定义的任务,任务名称在上面有定义。
- ok: [192.168.0.132]: 表示任务执行成功,Ansible能够成功连接到目标主机192.168.0.132。
- PLAY RECAP: 剧本执行的总结。
- 192.168.0.132 : ok=2: 192.168.0.132 : ok=2:
- changed=0: 表示没有任务改变了目标主机的状态。
- unreachable=0: 表示没有无法到达的目标主机。
- failed=0: 表示没有失败的任务。
- skipped=0: 表示没有被跳过的任务。
- rescued=0: 表示没有被救援的任务(救援任务是指在某些任务失败时,尝试执行的任务)。
- ignored=0: 表示没有被忽略的任务。
上面通过一个简单的示例完成了一个play任务,下面来扩展一些知识
1. 如何指定用户执行
- hosts: webservers
remote_user: root
tasks:
- name: test connection
ping:
- tasks 上面定义远程用户,将对所有的任务生效
tasks:
- name: test connection
ping:
remote_user: root
只对“test connection”任务生效。
2. 使用普通用户执行如何使用sudo
确保你已经将公钥传输到了普通用户
ansible-playbook代码如下:
---
- hosts: 192.168.0.132
tasks:
- name: Reboot the server
reboot:
remote_user: media
执行效果:
[root@192 ~]# ansible-playbook ping-playbook.yaml
PLAY [192.168.0.132] ****************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.132]
TASK [Reboot the server] ************************************************************************************************************************************
fatal: [192.168.0.132]: FAILED! => {"changed": false, "elapsed": 0, "msg": "Reboot command failed. Error was Must be root., Shared connection to 192.168.0.132 closed.", "rebooted": false, "start": "2024-09-29T13:00:08.633940"}
PLAY RECAP **************************************************************************************************************************************************
192.168.0.132 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
- Reboot command failed. Error was Must be root. : 报错很明显,需要root权限。
修改代码如下:
---
- hosts: 192.168.0.132
tasks:
- name: Reboot the server
reboot:
remote_user: media
become_user: root
become: yes
我这里在执行sudo权限时没有要求输出密码,是因为在被控机上,
%wheel ALL=(ALL) NOPASSWD: ALL
有这条配置,无需wheel
组用户输出密码。
[root@192 ~]# ansible-playbook reboot-playbook.yaml
PLAY [192.168.0.132] ****************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.132]
TASK [Reboot the server] ************************************************************************************************************************************
changed: [192.168.0.132]
PLAY RECAP **************************************************************************************************************************************************
192.168.0.132 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- remote_user: media: 指定远程用户
- become_user: root:切换远程用户,这个可以放到tasks上面全局生效,配置文件默认sudo是切换root权限
- become: yes: 在执行任务时提升权限,也可以放到tasks上面全局生效。
使用sudo权限时,如果要求输入密码:
a) 方法一、在环境变量中声明
export ANSIBLE_BECOME_PASS="123456"
b) 方法二、在 inventory 文件中声明变量
[root@192 ~]# tail -2 /etc/ansible/hosts
192.168.0.132 ansible_become_pass="123456"
c) 方法三、在 配置文件中,将 become_ask_pass=True
改为True,在需要提权的时候要求输出密码
[root@192 ~]# grep become_ask_pass /etc/ansible/ansible.cfg
become_ask_pass=True
d) 在使用ansible-playbook使用剧本的时候使用 -K
参数来要求手动输入密码
# ansible-playbook reboot-playbook.yaml -K
今天的学习就到此为止吧。
原文地址:https://blog.csdn.net/qq_50247813/article/details/142642845
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!