ansible playbook 使用 script 模块在远程主机上执行脚本

ops/2024/12/12 2:03:01/
  1. 需求一: 要在所有的远程主机上执行一下收集脚本,并在控制台打印出来
    脚本如下:
[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 变量是否被定义

http://www.ppmy.cn/ops/141134.html

相关文章

Scala 隐式转换

object test {//复习隐式转换://隐式转换:编译器 偷偷地,自动地帮我们把一种数据转换为另一种类型//例如:int --> double//它有失败的时候(double --> int),有成功的时候//当它转换失败的…

css 实现在一条线上流动小物体(offset-path)

直接贴代码&#xff0c;留几个参考网址给大家 【SVG】路径&#xff1c;Path&#xff1e;标签详解&#xff0c;一次搞懂所有命令参数 探秘神奇的运动路径动画 Motion Path <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…

LeetCode - #153 寻找旋转排序数组中的最小值

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 我们社区陆续会将顾毅&#xff08;Netflix 增长黑客&#xff0c;《iOS 面试之道》作者&#xff0c;ACE 职业健身教练。&#xff09;的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新…

Scala正则表达式全面指南:从基础到高级应用

引言 正则表达式是处理字符串的强有力工具&#xff0c;它允许开发者定义复杂的搜索模式&#xff0c;用于文本的搜索、匹配、替换和提取等。Scala语言通过scala.util.matching.Regex类提供了对正则表达式的支持&#xff0c;使得在Scala中进行文本处理变得高效而灵活。本文将全面…

【开源免费】基于SpringBoot+Vue.JS大创管理系统(JAVA毕业设计)

博主说明&#xff1a;本文项目编号 T 081 &#xff0c;文末自助获取源码 \color{red}{T081&#xff0c;文末自助获取源码} T081&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

Prim 算法在不同权重范围内的性能分析及其实现

Prim 算法在不同权重范围内的性能分析及其实现 1. 边权重取值在 1 到 |V| 范围内伪代码C 代码实现2. 边权重取值在 1 到常数 W 之间结论Prim 算法是一种用于求解加权无向图的最小生成树(MST)的经典算法。它通过贪心策略逐步扩展生成树,确保每次选择的边都是当前生成树到未加…

C# 中String和string的区别

在 C# 中&#xff0c;String和string在功能上基本没有区别&#xff0c;它们都用于表示字符串类型&#xff0c;但在使用场景和一些细节上有以下差异&#xff1a; 类型定义 string是 C# 中的关键字&#xff0c;它是System.String类型的别名。这意味着当你使用string时&#xff0c…

常见的面试算法题

1.把二元查找树转变成排序的双向链表 题目&#xff1a; 输入一棵二元查找树&#xff0c;将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点&#xff0c;只调整指针的指向。 10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 46810121416。 首先我们定义的二…