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 #执行组包含的主机列表
本文介绍了如何使用Ansible的script模块进行远程批量执行脚本,并通过inventory文件设置不同环境变量。在deploy.yml文件中,展示了如何根据env变量控制脚本执行条件。示例中,当env为'Prod'时,执行script.sh并打印结果。此外,还提到了Ansible的debug模块及其他内置变量的使用,如group_names、inventory_hostname、groups和hostvars等,展示其在自动化部署和管理中的应用。

1055

被折叠的 条评论
为什么被折叠?



