[root@master~]# salt \* test.ping
minion-1:
True
minion-2:
True
minion-3:
True
minion-4:
True
True代表正常,没有响应当然代表客户端没有启动或者没有认证成功之类的。
指定目标主要有五种方式
一: Global,即salt默认的匹配方式,能识别终端常用的通配符,如*代表所有
如,salt '*' test.ping
二: List,列表,需-L指定。
如,salt -L 'foo,bar' test.ping 其中foo,bar是完整的minion_id
三:正则表达式,需-E指定。
如,salt -E 'pre[1-7]' test.ping 会匹配pre1,pre2..pre7,并且匹配到左右minion_id里面含有1-7的,如pre-11,pre7也会匹配到,如果只匹配1-7可使用参照下面
如,salt -E ^pre[1-7]$ test.ping或者 salt pre[1-7] test.ping
四:混合模式,需-C指定。里面可以既有正则表达式也有列表等
salt -C "apache* or E@ngin*" test.ping 匹配所有tomcat开头,或者mon开头的
五:分组,需要-N指定,其中组名就是上面/etc/salt/master.d/groups.conf文件里面配置的配置信息。
如,salt -N apache test.ping
然后是模块,主要介绍state,cmd,cp模块
注:想了解某个模块的功能或者具体参数可以
salt \* sys.doc [模块名,如cmd]
即salt \* sys.doc cmd 就会列出相关操作及示例了
远程命令执行
远程命令执行大概是最常用的操作的,比如获取所有minion端的ip地址,查看同一个目录下的文件,全部增加一条环境变量到/etc/profile文件里并刷新环境变量等等操作
cmd模块
主要用此模块的run方法,即cmd.run
使用方式如下,
salt \* cmd.run 'ls /root'
如上所示,选择了所有的客户端,master端用cmd.run模块,把''里面的'ls /root'命令全部分发下去,其中单引号''也可以用双引号""代替,引号的作用就是把被引号的命令传给salt-master,然后master分发给所有的minion执行,上述命令就会列出所有minion端/root目录下的文件
注:引号里面的命令跟在任何一台机器上的命令没有任何区别,唯一的区别就是salt执行的命令默认用的是sh,而我们常用的shell是bash,比如bash中ll是ls –l的别名,而sh里面是没有做ll的别名的,所以引号里面的命令如果用ll命令会提示找不到此命的
cmd有几个有用的参数,在可以着重介绍一下
cwd 定义命令所在的目录,即工作目录,在哪个目录执行操作
如:
复制代码 代码如下:
Salt \* cmd.run cwd=/opt ‘pwd'
minion-id-1:
/opt
runas,定义执行此条命令的用户,使用哪个用户执行这条命令
如:
复制代码 代码如下:
Salt \* cmd.run runas=nobody ‘touch /tmp/file'
然后去客户端就会发现,在/tmp/目录下有一个file文件,拥有者是nobody
然后就state模块了
主要用到的几个方法是sls,highstate,show_sls
在讲state模块的时候首先得了解sls文件。
Sls文件用.sls结尾,放在指定的环境目录下,即提到的/data/salt/base /data/salt/base/sls或者/data/salt/apache/sls等目录
注:假如在这两个目录下有两个一样的sls文件,那么会file_root配置的第一个环境目录,即
比如环境:
base:
复制代码 代码如下:
/data/salt/base
/data/salt/base/sls
会执行/data/salt/base里的sls文件,因为它在前一行
sls文件基本格式如下:
例子一
复制代码 代码如下:
/tmp/ttt20:
file.managed:
- source: salt://files/tst
- mode: 700
- backup: minion
- makedirs: True
例子二
复制代码 代码如下:
testfile:
file.managed:
- name: /tmp/ttt20
- source: salt://files/tst
- mode: 700
- backup: minion
- makedirs: True
如上所示,其实例子一与例子二是达成了一样的效果,只不过写法不一样
像例子一,因为没有- name: /tmp/ttt20所以,它会去第一行的标识作为name
,而例子二的testfile可以任意起名,只要不与该文件中的其他标识一样即可。
上面的例子达到的功能就是,将/srv/salt/files/tst文件复制到客户端的/tmp/ttt20位置,如果存在则替换,如果已存在且一样则提示is correct state,即已经是正确的状态了。
然后就是top.sls
在每个独立的salt环境下有且只能有一个top.sls文件,这个文件为该环境的入口文件,里面记录了目标主机对应的sls文件
如:
base:
minion-id-1:
- test1
- test2
minion-id-2:
- test1
- test3
以tomcat-1为例
它匹配了
- test1
- test2
上面一共是一个2个sls配置文件,即匹配该环境下的test11.sls,test2.sls文件
所以在执行state模块的时候,它会去检索这些对应的配置文件并执行该配置文件里的内容。
注:在前面提到过,这些参数前面的空格不能用tab键补全或者少写,不然会报错,再者就是如果配置文件为xxxx.sls 在调用这个配置文件的时候只要写xxxx,即它的文件名,没有后缀
以test1为例
复制代码 代码如下:
/tmp/testfile.txt:
file.managed:
- source: salt://test.txt
- mode: 700
- user: root
- mode: 644
- makedirs: True
功能就是调用file模块,将salt://test.txt(其中,salt://对于该环境的file_root目录,即/data/salt/base)与目标的/tmp/testfile.txt文件做比对,如不一致则更新。
并且此文件的拥有者为root mask码为644,如果目标文件目录不存在就创建
现在回到highstate,sls,show_sls方法
执行如下
复制代码 代码如下:
salt \* state.sls test
salt \* state.highstate
salt \* state.show_sls test
上面的意思依次是
1.在当前环境下寻找test.sls文件并执行
2.匹配当前环境的top.sls文件所有的sls文件并执行
3.查看当前环境test.sls文件的执行内容,但是不在客户端执行。
注:上面特别提到了是在当前环境,默认情况下,salt只会查找执行base环境下的sls文件,不会执行其他环境的配置文件,所以在不同环境下,需要指定要执行的配置环境,比如apache环境,只是执行apache的sls文件的话,则需声明saltenv=apache,如下
网友评论
文明上网理性发言,请遵守 新闻评论服务协议我要评论
立即提交
专题推荐独孤九贱-php全栈开发教程
全栈 100W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
玉女心经-web前端开发教程
入门 50W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
天龙八部-实战开发教程
实战 80W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
php中文网:公益在线php培训,帮助PHP学习者快速成长!
Copyright 2014-2020 https://www.php.cn/ All Rights Reserved | 苏ICP备2020058653号-1