saltstack通过master下发脚本批量修改minion_id,修改为IP

news2025/3/9 13:28:31

通过master下发脚本批量修改minion_id,以修改为IP为例

通过cmd.script远程执行shell脚本修改minion_id,步骤如下:

# 下发脚本并执行
>> salt 'old_minion_id' cmd.script salt://modify_minion_id.sh saltenv=dev
#输出结果
old_minion_id:
    Minion did not return. [Not connected]
ERROR: Minions returned with non-zero exit code
# minion端日志modify_minion_id.log
2025-02-26 10:41:54 - ========== 开始修改 minion_id ==========
2025-02-26 10:41:54 - 备份 /etc/salt/minion_id 到 /etc/salt/minion_id.bak 成功.
2025-02-26 10:41:54 - 已将 /etc/salt/minion_id 修改为 IP: xx.xx.xx.xx
2025-02-26 10:41:54 - 正在重启 salt-minion 服务...
2025-02-26 10:43:24 - salt-minion 服务重启成功.
2025-02-26 10:43:29 - 执行 salt-call test.ping 检查通信...
2025-02-26 10:43:31 - 通信测试成功: local:
    True
2025-02-26 10:43:31 - ========== 修改 minion_id 任务完成 ==========

# 檢查minion_id是否修改成功
>> salt xx.xx.xx.xx test.ping
>> salt xx.xx.xx.xx grains.get id
# 刪除舊的salt key
>> salt-key -y -d old_minion_id

modify_minion_id.sh

#!/bin/bash
# 定义日志文件
LOGFILE="/etc/salt/modify_minion_id.log"

# 定义日志输出函数,带时间戳
log() {
    local msg="$1"
    echo "$(date +"%Y-%m-%d %H:%M:%S") - ${msg}" | tee -a "${LOGFILE}"
}

log "========== 开始修改 minion_id =========="

# 1. 备份 /etc/salt/minion_id 文件
if [ -f /etc/salt/minion_id ]; then
    cp /etc/salt/minion_id /etc/salt/minion_id.bak
    if [ $? -eq 0 ]; then
        log "备份 /etc/salt/minion_id 到 /etc/salt/minion_id.bak 成功."
    else
        log "备份 /etc/salt/minion_id 失败."
        exit 1
    fi
else
    log "文件 /etc/salt/minion_id 不存在,跳过备份步骤."
fi

# 2. 修改 minion_id 文件为本机 IP
IP=$(hostname -I | awk '{print $1}')
if [ -n "$IP" ]; then
    echo "$IP" > /etc/salt/minion_id
    if [ $? -eq 0 ]; then
        log "已将 /etc/salt/minion_id 修改为 IP: $IP"
    else
        log "修改 /etc/salt/minion_id 失败."
        exit 1
    fi
else
    log "获取 IP 地址失败."
    exit 1
fi

# 3. 延时并后台重启 salt-minion 服务,必須使用後台啟動
log "计划10秒后后台重启 salt-minion 服务..."
nohup bash -c "sleep 10; systemctl restart salt-minion" >/dev/null 2>&1 &

# 等待几秒钟,确保服务启动稳定
log "等待15s,確保服務啟動穩定..."
sleep 15

# 4. 执行 salt-call test.ping 检查与 master 通信是否正常
log "执行 salt-call test.ping 检查通信..."
PING_RESULT=$(salt-call test.ping 2>&1)
if echo "$PING_RESULT" | grep -q "True"; then
    log "通信测试成功: $PING_RESULT"
else
    log "通信测试失败: $PING_RESULT"
fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312155.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络】TCP常考知识点详解

TCP报文结构 TCP报文由**首部(Header)和数据(Data)**两部分组成。首部包括固定部分(20字节)和可选选项(最多40字节),总长度最大为60字节。 1. 首部固定部分 源端口&…

LeetCode1137 第N个泰波那契数

泰波那契数列求解:从递归到迭代的优化之路 在算法的世界里,数列问题常常是我们锻炼思维、提升编程能力的重要途径。今天,让我们一同深入探讨泰波那契数列这一有趣的话题。 泰波那契数列的定义 泰波那契序列 Tn 有着独特的定义方式&#xf…

六十天前端强化训练之第十四天之深入理解JavaScript异步编程

欢迎来到编程星辰海的博客讲解 目录 一、异步编程的本质与必要性 1.1 单线程的JavaScript运行时 1.2 阻塞与非阻塞的微观区别 1.3 异步操作的性能代价 二、事件循环机制深度解析 2.1 浏览器环境的事件循环架构 核心组件详解: 2.2 执行顺序实战分析 2.3 Nod…

利用EasyCVR平台打造化工园区视频+AI智能化监控管理系统

化工园区作为化工产业的重要聚集地,其安全问题一直是社会关注的焦点。传统的人工监控方式效率低下且容易出现疏漏,已经难以满足日益增长的安全管理需求。 基于EasyCVR视频汇聚平台构建的化工园区视频AI智能化应用方案,能够有效解决这些问题&…

【VUE2】第三期——样式冲突、组件通信、异步更新

目录 1 scoped解决样式冲突 2 data写法 3 组件通信 3.1 父子关系 3.1.1 父向子传值 props 3.1.2 子向父传值 $emit 3.2 非父子关系 3.2.1 event bus 事件总线 3.2.2 跨层级共享数据 provide&inject 4 props 4.1 介绍 4.2 props校验完整写法 5 v-model原理 …

深度学习分类回归(衣帽数据集)

一、步骤 1 加载数据集fashion_minst 2 搭建class NeuralNetwork模型 3 设置损失函数,优化器 4 编写评估函数 5 编写训练函数 6 开始训练 7 绘制损失,准确率曲线 二、代码 导包,打印版本号: import matplotlib as mpl im…

在Linux中开发OpenGL——检查开发环境对OpenGL ES的支持

由于移动端GPU规模有限,厂商并没有实现完整的OpenGL特性,而是实现了它的子集——OpenGL ES。因此如果需要开发的程序要支持移动端平台,最好使用OpenGL ES开发。 1、 下载支持库、OpenGL ES Demo 1.1、下载PowerVRSDK支持库作为准备&#xff…

基于Spring Boot的学院商铺管理系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

os-copilot安装和使用体验测评

简介: OS Copilot是阿里云基于大模型构建的Linux系统智能助手,支持自然语言问答、命令执行和系统运维调优。本文介绍其产品优势、功能及使用方法,并分享个人开发者在云服务器资源管理中的实际应用体验。通过-t/-f/管道功能,OS Cop…

Geo3D建筑材质切换+屋顶纹理

一、简介 基于Threejs开发封装建筑渲染管线,利用简单二维建筑矢量面轮廓程序化生成3D建筑,支持材质一键切换,支持多样化建筑墙面材质和屋顶材质,支持建筑透明,支持地形高程适配,支持按空间范围裁剪挖洞等。…

【GPT入门】第9课 思维树概念与原理

【GPT入门】第9课 思维树概念与原理 1.思维树概念与原理2. 算24游戏的方法 1.思维树概念与原理 思维树(Tree of Thought,ToT )是一种大模型推理框架,旨在解决更加复杂的多步骤推理任务,让大模型能够探索多种可能的解决…

栈概念和结构

文章目录 1. 栈的概念2. 栈的分类3. 栈的实现(数组栈)3.1 接口设计(Stack.h)3.2 接口实现(Stack.c)1)初始化销毁2)栈顶插入删除3)栈顶元素、空栈、大小 3.3 完整代码Stac…

Spring (八)AOP-切面编程的使用

目录 实现步骤&#xff1a; 1 导入AOP依赖 2 编写切面Aspect 3 编写通知方法 4 指定切入点表达式 5 测试AOP动态织入 图示&#xff1a; 实现步骤&#xff1a; 1 导入AOP依赖 <!-- Spring Boot AOP依赖 --><dependency><groupId>org.springframework.b…

VS Code连接服务器教程

VS Code是什么 VS Code&#xff08;全称 Visual Studio Code&#xff09;是一款由微软推出的免费、开源、跨平台的代码编辑神器。VS Code 支持 所有主流操作系统&#xff0c;拥有强大的功能和灵活的扩展性。 官网&#xff1a;https://code.visualstudio.com/插件市场&#xff1…

Windsuf 连接失败问题:[unavailable] unavailable: dial tcp...

问题描述 3月6日&#xff0c;在使用Windsuf 时&#xff0c;遇到以下网络连接错误&#xff1a; [unavailable] unavailable: dial tcp 35.223.238.178:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of…

docker中kibana启动后,通过浏览器访问,出现server is not ready yet

问题&#xff1a;当我在浏览器访问kibana时&#xff0c;浏览器给我报了server is not ready yet. 在网上试了很多方法&#xff0c;都未能解决&#xff0c;下面是我的方法&#xff1a; 查看kibana日志&#xff1a; docker logs -f kibana从控制台打印的日志可以发现&#xff…

更多文章请查看

更多文章知识请移步至下面链接&#xff0c;期待你的关注 如需查看新文章&#xff0c;请前往&#xff1a; 博主知识库https://www.yuque.com/xinzaigeek

(十 九)趣学设计模式 之 中介者模式!

目录 一、 啥是中介者模式&#xff1f;二、 为什么要用中介者模式&#xff1f;三、 中介者模式的实现方式四、 中介者模式的优缺点五、 中介者模式的应用场景六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xff0c;…

博弈论算法

一、减法游戏 初始有一个数 n。 两个玩家轮流操作&#xff0c;每次可以减去 1 到 9 之间的任意整数。 将数减到 0 的玩家获胜。 可以发现规律&#xff1a; 减法游戏只需要判断当前数取模是否为0&#xff0c;即可快速判断胜负。 例题&#xff1a; Leetcode 292. Nim 游戏 …

【网络】HTTP协议、HTTPS协议

HTTP与HTTPS HTTP协议概述 HTTP&#xff08;超文本传输协议&#xff09;&#xff1a;工作在OSI顶层应用层&#xff0c;用于客户端&#xff08;浏览器&#xff09;与服务器之间的通信,B/S模式 无状态&#xff1a;每次请求独立&#xff0c;服务器不保存客户端状态&#xff08;通…