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

结果 就是这样
ansible-playbook巧用实现批量执行脚本_第1张图片
而整个result字典其实是这样的 可以看到stdout 和 stdout_lines的区别 ,前者是字符串内置换行符 ,后者是列表,每一行都是一个元素,而后者更美观。
ansible-playbook巧用实现批量执行脚本_第2张图片
还有很多内置变量,很不错 比如

with_items: "{{ group_names }}"  	#打印执行主机所在的所有主机组的列表 可以循环遍历
debug: var={{ inventory_hostname }} #打印执行主机的IP
debug: var={{ groups }} 			#inventory包含的所有组的字典,key为组名,value就是组的主机列表
debug: var=={{ hostvars }} 			#inventory包含的全部变量信息 慎用
debug: var=={{ play_hosts }} 		#执行组包含的主机列表

你可能感兴趣的:(ansible,ansible)