初学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

今天的学习就到此为止吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值