-
需求一: 要在所有的远程主机上执行一下收集脚本,并在控制台打印出来
脚本如下:[root@192 Playbooks]# cat CollectServerInformation.sh
#!/bin/bashCollect server information
echo "Collecting server information..."
OS Information
echo "Operating System Information:"
cat /etc/*releaseKernel Version
echo "Kernel Version:"
uname -recho "Network Configuration:"
ip -4 a
编辑ansible-playbook
v1版本:
[root@192 Playbooks]# cat AnsiblePlay-CollectServerInformation.yaml
---
- name: Execute script
gather_facts: no
become: yes
become_user: root
hosts: all
tasks:
- name: Execute script
script:
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 script
gather_facts: no
become: yes
become_user: root
hosts: all
tasks:
- name: Execute script
script:
cmd: /opt/Playbooks/CollectServerInformation.sh
register: script_result
- name: Output result
debug:
msg: "{{ script_result.stdout }}"
- register: script_result : 将脚本的值注册到 script_result 中
debug: # 调用debug模块打印 script_result 变量中的内容
msg: "{{ script_result.stdout }}"
- 需求二: 要求把脚本的输出结果写入到ansible主机,并以远程主机名命名
这里的远程主机名指定是 inventory 清单中的主机名
如下:
编写ansible-play:
---
- name: Execute remote script and save output on Ansible control node
hosts: all
gather_facts: no
become: yes
become_user: root
tasks:
- name: Execute script on remote hosts and save output to a temporary file
script:
cmd: /opt/Playbooks/hardware_info.sh
register: script_result
- name: Save script output with hostname as filename
copy:
content: "{{ script_result.stdout }}"
dest: "/root/{{ inventory_hostname }}_output.txt"
when: script_result.stdout is defined
- name: Fetch script output from remote hosts
fetch:
src: "/root/{{ inventory_hostname }}_output.txt"
dest: "/opt/Playbooks/output/"
flat: yes
when: 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
变量是否被定义