ansible-playbook巧用实现批量执行脚本

ansible的 script 模块 可以用来远程批量执行脚本, 但是ansible-playbook可以做得更精细。

这是inventory文件,名称为host 每一条IP都有各自的env变量

[all]
10.111.1.23 env=SIT
10.111.1.24 env=SIT
10.111.8.24 env=UAT
10.111.5.14 env=Prod
10.111.5.16 env=Prod

这是deploy.yml文件

---
- hosts: all            #主机组名称 这里包含所有
  remote_user: mtest    #要执行脚本主机的用户名 
  become_user: root
  become_method: su
  gather_facts: false
  tasks:
    - name: execute script   #执行脚本 
      script: script.sh		 #要执行的脚本
      register: result		 #脚本执行结果
      when: env=='Prod'		 #执行条件 env必须是Prod

    - name: print
      debug: var=result['stdout_lines']  #打印结果 result是字典 注意var=...必须紧凑无空格 除非另起一行
      when: env=='Prod' and result['stdout_lines']!=[] #有结果才打印

这里 debug注意有var,msg两种输出,var输出为变量,msg输出为字符串,所以后者变量带{{}},而前者不带

这是范例 script.sh

#!/bin/bash
uptime
date

执行

ansible-playbook -i host deploy.yml

结果 就是这样
在这里插入图片描述
而整个result字典其实是这样的 可以看到stdout 和 stdout_lines的区别 ,前者是字符串内置换行符 ,后者是列表,每一行都是一个元素,而后者更美观。
在这里插入图片描述
还有很多内置变量,很不错 比如

with_items: "{{ group_names }}"  	#打印执行主机所在的所有主机组的列表 可以循环遍历
debug: var=inventory_hostname #打印执行主机的IP
debug: var=groups 			#inventory包含的所有组的字典,key为组名,value就是组的主机列表
debug: var=hostvars			#inventory包含的全部变量信息 慎用
debug: var=play_hosts 		#执行组包含的主机列表
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值