编写sls文件管理目标服务器应用

场景:以我目前公司使用的jazmin server为例。通过编写sls文件停止jazmin server应用。

创建/srv/salt/top.sls

base:
  '*'
    - jazmin_stop 

然后创建jazmin_stop.sls文件

jazmin_stop:
  cmd.script:
    - source: salt://test/jazmin_stop.sh
    - user: appadmin

cmd.script表示要执行脚本;
source 表示要执行的脚本路径;
user 表示执行的用户;

创建 test目录,以及test/jazmin_stop.sh文件

mkdir test
touch test/jazmin_stop.sh
#!/bin/bash

source /home/appadmin/.bashrc

# curl -s 隐藏输出
# awk -F 截取
public_ip=$$(curl -s http://getip:4584 | awk -F ':' {'print $$2'} | awk -F '"' {'print $$2'})
echo "公网IP: $$public_ip"

# shell 替换字符串
instance_id=$${public_ip//\./a}
echo "应用instance_id: $$instance_id"

jazmin_pid=$$(ps -ef |grep jazmin | grep $$instance_id |grep -v 'grep' |awk {'print $$2'})

if [ ! $$jazmin_pid ]; then
    echo "jazmin 应用未启动"
    exit 1
fi
echo "当前jazmin应用pid: $$jazmin_pid"

kill -9 $$jazmin_pid
echo "应用已停止"

http://getip:4584 是一个用来获取公网ip的应用,这里为了脱敏隐去具体的网址和ip,返回以下结果:

{"ip":"119.*.*.*"}

执行和调用

将某台服务器的应用停止,ip地址已脱敏

sudo salt '10.*.*.*' state.sls jazmin_stop

输出结果

关于state.sls与state.highstate
state.sls默认的运行环境是base环境,但是并不读取top.sls(top.sls定义了运行环境以及需要运行的sls)。 官方文档上这样描述:

salt.modules.state.sls(mods, saltenv='base', test=None, execlude=None, queue=False, env=None, **kwargs)

默认的saltenv就是base

state.highstate是全局的所有环境,以及所有状态都生效。它会读取每一个环境的top.sls,并且对所有的sls都生效。

本博客采用 知识共享署名-禁止演绎 4.0 国际许可协议 进行许可

本文标题:编写sls文件管理目标服务器应用

本文地址:https://jizhong.plus/post/2018/02/salt-sls.html