写在前面的话

远程执行可以说是我们使用 Saltstack 最为基础的目的。所以在这里专门作为单独的一篇来详细的聊聊。

远程执行命令

示例命令:

salt '*' cmd.run 'w'

命令分析:

salt 是命令本身,* 是执行目标,cmd.run 是 Saltstack 自带的模块,目前几百个。

其中一个重要的组成就是执行目标,这是我们执行命令的目的。关于目标,一般有两种选择方式:

1. 基于 Minion ID 的选择方式。

2. 基于 Minion 属性的选择方式。

和 Minion ID 相关的选择方式:

1. 直接使用 Minion ID:

salt 'saltstack-node-01' cmd.run 'w'

2. 使用通配符选择 Minion ID:

# * 选择所有
salt '*' cmd.run 'w' # 选择某个开头的
salt 'saltstack*' cmd.run 'w' # 选择1或者2
salt 'saltstack-node-0[1|2]' cmd.run 'w' # ? 代表一个字符
salt 'saltstack-node-0?' cmd.run 'w' # 选择范围
salt 'saltstack-node-0[1-2]' cmd.run 'w' # 选择非
salt 'saltstack-node-0[!2]' cmd.run 'w'

3. 使用列表选择 Minion ID:-L 参数

salt -L 'saltstack-node-01,saltstack-node-02' cmd.run 'w'

4. 正则表达式:-E 参数

salt -E 'saltstack-node-(01|02)' cmd.run 'w'

匹配方式还有很多,这些都是常用的,而且,这里用到的所有方式,在 top.sls 中同样可以使用。

另外,主机名设置建议,例如:erp-service-01-aliyun-oa.example.com

说明:erp-service 是服务,01 是节点,aliyun 是机房,oa 是业务线

5. 使用 IP 或者子网方式:-S 参数

# IP 地址
salt -S '192.168.100.112' cmd.run 'w' # 子网
salt -S '192.168.100.0/24' cmd.run 'w'

6. 对 Minion 进行分组:

在 /etc/salt/master 当前版本的 1192 行,有 nodegroup 配置,可以修改为如下:

nodegroups:
app: 'L@saltstack-node-01,saltstack-node-02'

L@ 其实就相当于 -L 参数,同意还可以 G@ 这些样式,选择 group 使用 -N 参数:

salt -N app test.ping

7. 还要混合匹配:-C

salt -C 'saltstack-node-01 and G@os:centos or E@saltstack-node-0(2|3)' test.ping

具体可以看官方文档,不推荐这种,太麻烦了。

同时,我们得提一下一个重要得参数,-b:

这个参数指定一次执行多少台,可以是数字,也可以是百分比。这样不至于一执行机器全挂。

salt '*' -b 1 test.ping

效果如下:

想了解更多可以查看文档:

https://www.unixhot.com/docs/saltstack/topics/targeting/index.html

远程执行模块

详细文档地址:

https://www.unixhot.com/docs/saltstack/ref/modules/all/index.html

这些模块都是 python 文件,被保存在服务器的:/usr/lib/python2.7/site-packages/salt/modules 目录下。

我们只需要关注一下常用的,如:network / service / state / cp 等等。

另外可以简单做了解的就是执行返回,我们可以将执行的记录和结果都保存到 MySQL 或者 Redis 等服务中,这里就不过多解释,具体可以查看文档:

https://www.unixhot.com/docs/saltstack/ref/returners/index.html

自己编写模块

自己编写简单的脚本模块方法:

1. 在 Master 新建脚本目录和文件:

# 新建目录
cd /srv/salt/ && mkdir _modules && cd _modules # 新建文件
vim get_disk.py 

内容如下:

def list():
cmd = 'df -h'
ret = __salt__['cmd.run'](cmd)
return ret

其实就是直接调用 salt 本身的 cmd.run 方法执行命令,返回结果,当然更复制的需求也可以使用其他模块。

2. 将模块同步到 Minion:

salt '*' saltutil.sync_modules

结果如下:

可以查看 Minion 上的情况 /var/cache/salt/ 目录,结果如下:

3. 直接执行我们写的模块:

salt '*' get_disk.list

结果如下:

小结

远程执行其实最主要的就是能够正确的选择到我们真的想执行的机器,这里面有包括我们自己在定义 Minion ID 时候的设计。一个良好的设计规范才能让我们更轻松的完成工作的需求。

另外 salt 的执行模块特别多,我们只需要记住几个常用的,如果不知道可查文档。

自己写模块是我们最后的解决思路,在我们实在没法找到合适的模块的时候,我们可以自己手写满足我们需求的模块。这里面会使用到 Python 脚本。当然,会 Python 最佳,如果不会也没有关系,因为我们写的内容一般还是相对于比较简单的功能。

最后,我们需要发现一个规律。这种自己定义 Grains,自己定义 modules,我们都是在 Master 端,然后通过 saltutil 里面的各种 sync 的方法推送到指定的 Minion 端。了解了这一点,能够更好的帮助我们了解 saltstack 的执行思路。

【03】Saltstack:远程执行的更多相关文章

  1. Saltstack远程执行(四)

    Saltstack远程执行 语法例:salt '*' cmd.run 'w' -  命令:salt -  目标:'*' -  模块:cmd.run,自带150+模块,也可以自己写模块 -  返回:执行 ...

  2. 2、自动化运维之SaltStack远程执行详解

    SaltStack远程执行详解 ●目标(Targeting) ●模块(Module) ●返回(Returnners) 混合模式-C 选项 主机名设置参照: redis-node1-redis03-id ...

  3. SaltStack远程执行-返回MySQL

    上一篇:SaltStack远程执行-模块 参考官方文档:https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.my ...

  4. Linux centosVMware 自动化运维认识自动化运维、启动salt相关服务、saltstack配置认证、salt-key命令用法、saltstack远程执行命令、saltstack - grains、saltstack – pillar

    一.认识自动化运维 传统运维效率低,大多工作人为完成 传统运维工作繁琐,容易出错 传统运维每日重复做相同的事情 传统运维没有标准化流程 传统运维的脚本繁多,不能方便管理 自动化运维就是要解决上面所有问 ...

  5. SaltStack入门篇(四)之深入理解SaltStack远程执行

    1.目标 2.执行模块 3.返回 salt ‘*’ cmd.run ‘uptime’ 命令 目标 执行模块 执行模块参数 1.SlatStack远程执行–目标 执行目标:https://docs.sa ...

  6. saltstack远程执行命令.md

    saltstack 支持在master上向client 远程执行命令,并显示命令执行的结果 命令格式: salt '<操作目标>' <方法> [参数] 示例 示例1 ping检 ...

  7. SaltStack远程执行

    上一篇:SaltStack概述及安装 master也需要安装一个minion 启动salt-master systemctl start salt-master 配置文件在目录/etc/salt下 p ...

  8. 利用 Saltstack 远程执行命令

    Saltstack的一个比较突出优势就是具备执行远程命令的功能. 操作方法与func (https://fedorahosted.org/func/)相似,可以帮助运维人员完成集中化的操作平台. ht ...

  9. SaltStack远程执行-模块

    上一篇:SaltStack数据系统-Pillar 执行模块 salt 'linux-node2.example.com' service.status sshd 其中service是模块名称statu ...

  10. SaltStack远程执行shell脚本

    编辑文件fansik.sh 脚本内容: #!/bin/bash # Author: fansik # data: 2017年 09月 26日 星期二 :: CST touch /tmp/fansik. ...

随机推荐

  1. CTF必备技能丨Linux Pwn入门教程——ROP技术(下)

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  2. Java面向对象之泛型

    主要介绍: 认识泛型 构造方法中使用泛型 设置多个泛型 通配符 泛型接口 泛型方法 泛型数组 一.认识泛型 具体实例如下: package com.huolongluo.newfeatures; /* ...

  3. Django框架操作数据库的两种方式

    Django操作数据库的前提操作是成功连接数据库,详情见上篇:https://www.cnblogs.com/kristin/p/10791358.html Django查询数据库的方式一 from ...

  4. 如何在浏览器中运行 VS Code?

    摘要: WEB IDE新时代! 作者:SHUHARI 的博客 原文:有趣的项目 - 在浏览器中运行 Visual Studio Code Fundebug按照原文要求转载,版权归原作者所有. 众所周知 ...

  5. Lumen5.7快速实现Captcha图片验证码功能

    公司发送短信注册的接口需要防刷,需要一个图形验证码,不考虑收费产品. Lumen5.7+nginx+mysql 使用了这个作者的扩展包,只讲实现.https://github.com/Youngyez ...

  6. sqlmap 注入的方法及技巧

    sqlmap 注入的方法及技巧 当给 sqlmap 这么一个 url 的时候,它会: 1.判断可注入的参数 2.判断可以用那种 SQL 注入技术来注入 3.识别出哪种数据库 4.根据用户选择,读取哪些 ...

  7. Asp.net管道模型之(HttpModules 和 HttpHandler)

    上一节我们从大概范围介绍了管道模型的整体流程,我们从其中知道管道最重要的两大组件为:HttpModules 跟 HttpHandler.今天我们着重来介绍一下这两大组件 一:asp.net处理管道 从 ...

  8. Windows下使用mingw+cmake编译C/C++程序

    按照正常流程安装好mingw和cmake后,仍然是无法直接使用cmake编译处MakeFile文件的,我们需要在CMakeLists.txt中做一些配置. 首先,在PROJECT之前,设置: SET( ...

  9. 6-剑指offer: 和为S的连续正数序列

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  10. 【Android】从Eclipse到AndroidStudio的工程迁移

    1.新建Android Studio的代码目录 2.打开AS,选择File---->New---->Import Project 3.在弹出的对话框选择Eclispe代码目录 4.选择Ec ...