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

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

http://www.kler.cn/a/576861.html

相关文章:

  • 递归专题刷题
  • 大模型工程师学习日记(十五):Hugging Face 模型微调训练(基于 BERT 的中文评价情感分析)
  • Python写一个查星座的小程序,适合初学者练手——字典和if语句练习
  • ARMV8的64位指令
  • cdn取消接口缓存
  • Redis 各数据类型使用场景详解
  • Scaling Laws for Neural Language Models
  • DIY Tomcat:手写一个简易Servlet容器
  • HTTPS安全通信协议原理
  • 什么是 Java 的 Timer?
  • opentitan riscv
  • 关于父组件向子组件传值的形式(类型一)
  • 【商城实战(13)】购物车价格与数量的奥秘
  • 【leetcode hot 100 142】环形链表Ⅱ
  • webflux响应式编程
  • Windows、macOS和Linux系统的统计文件夹下的文件数量的方法
  • 笔记:代码随想录算法训练营day38: LeetCode322. 零钱兑换、279.完全平方数、139.单词拆分;多重背包
  • 数学建模:MATLAB强化学习
  • MacBook上API调⽤⼯具推荐
  • 线性代数笔记28--奇异值分解(SVD)