- 需求一: 要在所有的远程主机上执行一下收集脚本,并在控制台打印出来
脚本如下:
[root@192 Playbooks]# cat CollectServerInformation.sh
#!/bin/bash
# Collect server information
echo "Collecting server information..."# OS Information
echo "Operating System Information:"
cat /etc/*release# Kernel Version
echo "Kernel Version:"
uname -recho "Network Configuration:"
ip -4 a
编辑ansible-playbook
v1版本:
[root@192 Playbooks]# cat AnsiblePlay-CollectServerInformation.yaml
---- name: Execute scriptgather_facts: nobecome: yesbecome_user: roothosts: alltasks:- name: Execute scriptscript:cmd: /opt/Playbooks/CollectServerInformation.sh
- gather_facts: no : 不搜集主机 facts 可以加快执行速度
- become: yes : 是否使用sudo
- become_user: root :切换的用户
执行效果:
[root@192 Playbooks]# ansible-playbook AnsiblePlay-CollectServerInformation.yaml
可以看出虽然脚本执行成功了,但是并没有在控制台打印出来。
v2版本:
[root@192 Playbooks]# cat AnsiblePlay-CollectServerInformation.yaml
---- name: Execute scriptgather_facts: nobecome: yesbecome_user: roothosts: alltasks:- name: Execute scriptscript:cmd: /opt/Playbooks/CollectServerInformation.shregister: script_result- name: Output resultdebug:msg: "{{ script_result.stdout }}"
- register: script_result : 将脚本的值注册到 script_result 中
debug: # 调用debug模块打印 script_result 变量中的内容
msg: “{{ script_result.stdout }}”
2. 需求二: 要求把脚本的输出结果写入到ansible主机,并以远程主机名命名
这里的远程主机名指定是 inventory 清单中的主机名
如下:
编写ansible-play:
---
- name: Execute remote script and save output on Ansible control nodehosts: allgather_facts: nobecome: yesbecome_user: roottasks:- name: Execute script on remote hosts and save output to a temporary filescript:cmd: /opt/Playbooks/hardware_info.shregister: script_result- name: Save script output with hostname as filenamecopy:content: "{{ script_result.stdout }}"dest: "/root/{{ inventory_hostname }}_output.txt"when: script_result.stdout is defined- name: Fetch script output from remote hostsfetch:src: "/root/{{ inventory_hostname }}_output.txt"dest: "/opt/Playbooks/output/"flat: yeswhen: script_result.stdout is defined
上述ansible-play中定义了3个 task
task1:
将脚本的输出结果注册到变量script_result
中
task2:
将远程主机的script_result.stdout
中的内容复制到 /root/{{ inventory_hostname }}_output.txt 文件,inventory_hostname
指定是在ansible清单中,对应的主机名。
task3:
将远程主机上/root/{{ inventory_hostname }}_output.txt 文件拷贝到ansible主机 /opt/Playbooks/output/
目录下这里最后面记得加上/
when: script_result.stdout is defined
: 在执行task前先判断script_result.stdout
变量是否被定义