当前位置: 首页 > news >正文

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

通过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

相关文章:

  • Spring使用@Scheduled注解的参数详解
  • 【数据仓库与数据挖掘基础】决策分析
  • ChromeDriver下载 最新版本 134.0.6998.35
  • WebUSB的常用API及案例
  • 【Python 数据结构 10.二叉树】
  • 爬虫案例七Python协程爬取视频
  • c++ auto关键字
  • SQL经典查询
  • 基于DeepSeek实现PDF嵌入SVG图片无损放大
  • CarPlanner:用于自动驾驶大规模强化学习的一致性自回归轨迹规划
  • 修改jupyter notebook的工作空间
  • HCIA复习拓扑实验
  • 兴业银行的笔试题及答案(2025)
  • 数据安全防线:备份文件的重要性与自动化实践
  • 计算机组成原理:数据表示的基本概念
  • 如何在Ubuntu上直接编译Apache Doris
  • mysql虚拟列
  • 基于SpringBoot的商城管理系统(源码+部署教程)
  • .Net 6 上传文件接口 文件大小报错整体配置
  • ARMv8寄存器的介绍
  • 什么地方可以做网站/国内最新新闻消息今天的
  • 导航网站链接怎么做/南宁seo外包平台
  • 易旅游网站建设/近三天发生的重要新闻
  • 怎么样免费给网站做优化/网络推广员每天的工作是什么
  • 网站url跳转代码/百度关键词排名用什么软件
  • 电子产品展示网站/新闻软文范例大全