salt
该命令执行salt的执行模块,通常在master端运行,常用命令
salt [option] '<target>' <function> [arguments]
#例如
salt 'minion-01' cmd.run 'ip addr'
salt-run
该命令执行runner(salt自带或者自定义的,),通常在master端执行,比如经常用到的manage
salt-run [options] [runner.func]
#例如
salt-run manage.status ##查看所有minion状态
salt-run manage.down ##查看所有没在线minion
salt-run manage.up ##查看所有在线minion
salt-key
密钥管理,通常在master端执行
salt-key [options]
salt-key -L ##查看所有minion-key
salt-key -a <key-name> ##接受某个minion-key
salt-key -d <key-name> ##删除某个minion-key
salt-key -A ##接受所有的minion-key
salt-key -D ##删除所有的minion-key
salt-call
该命令通常在minion上执行,minion自己执行可执行模块,不通过master下发job
salt-call [options] <function> [arguments]
salt-call test.ping ##自己执行test.ping命令
salt-call cmd.run 'ifconfig' ##自己执行cmd.run函数
salt-cp
分发文件到minion上,不支持目录分发.运行在master
salt-cp [options] '<target>' SOURCE DEST
#例如
salt-cp '*' testfile.html /tmp
salt-cp 'test*' index.html /tmp/a.html
salt-master
salt-master [options]
salt-master ##前台运行master
salt-master -d ##后台运行master
salt-master -l debug ##前台debug输出
salt-minion
salt-minion [options]
salt-minion ##前台运行
salt-minion -d ##后台运行
salt-minion -l debug ##前台debug输出
普通用户执行salt
方法一:ACL(修改master)
client_acl:
monitor: #uonghu
- test*: #权限
- test.*
dev:
- service.*
sa:
- .*
#重启master
#给予目录和文件权限
chmod +r /etc/salt/master
chmod +x /var/run/salt
chmod +x /var/cache/salt
方法二:external_auth(修改master)
pam:
fred:
- test.*
#重启master
#给予目录和文件权限
chmod +r /etc/salt/master
chmod +x /var/run/salt
chmod +x /var/cache/salt
使用Token不必每次都输入账号密码,使用external_auth每次都是需要密码的,这样多麻烦,这里引入了Token,它会保存一串字符到在当前用户家目录下.salt_token中,在有效时间内使用external_auth是不需要输入密码的,默认时间12hour,可以通过master配置文件修改。
salt -T -a pam '*' test.ping
target
target也就是目标,目的.指定master命令应该对谁执行
- 正则匹配
[root@master /]# salt -E 'mini*' test.ping
minion-02:
True
minion-01:
True
- 列表匹配
[root@master ~]# salt -L minion-01,minion-02 test.ping
minion-02:
True
minion-01:
True
- grains匹配
[root@master ~]# salt -G 'os:CentOs' test.ping
minion-02:
True
minion-01:
True
- 组匹配
#开启master 的default_include
vim /etc/salt/master.d/nodegroup.conf
#写到master中也是这个格式
nodegroups:
test1: 'L@test1,test2 or test3*'
test2: 'G@os:CenOS or test2'
salt -N test1 test.ping #-N指定groupname
在top file中使用nodegroups
'test1':
- match: nodegroup ##没s,匹配的是文件
- webserver
[root@master ~]# salt -N nodegroups test.ping
minion-02:
True
minion-01:
True
#组需要在master中预先定义
- 复合匹配
salt -C 'G@os:MacOS or L@Minion1'
- Pillar匹配
salt -I 'key:value' test.ping
- CIDR匹配
salt -S '192.168.1.0/24' test.ping
在top文件中匹配 grains
'node_type:web':
- match: grain #没有s
- webserver
top文件中使用jinja
{% set self = grains['node_type'] %}
- match: grain
- {{ self }}
一次在n个minion上执行
-b n
--batch-size n
#例:
salt '*' -b 5 test.ping
#5个5个的ping
网友评论