saltstack常用命令和模块

1. saltstack常用命令

1.1 master端命令参数

#查看在主服务器上已被接受的客户端
salt-key
-A  将所有的客户端加入accept keys下
-L  显示已经或者是未被认证的被控端ID
-D  删除所有认证主机的ID证书
-d  id 删除单个ID证书(ID为被控端的ID)
-a id 接受单个id证书的请求
-l  显示指定状态的key(支持正则表达式)
-r  拒绝等待认证的key
-R 拒绝所有等待认证的key
--include-all  显示所有状态的key
-p  打印指定的public key
-P  打印所有的public key
-f   显示指定key指纹信息
-F  显示所有key指纹信息
#salt
#master 客户端命令
可以先使用rpm -ql salt-master查看master都安装了什么
/etc/rc.d/init.d/salt-master   //salt-master启动脚本
/etc/salt/master      //salt-mater配置文件     
/usr/bin/salt         //salt-master核心命令
/usr/bin/salt-cp      //salt-master文件传输命令
/usr/bin/salt-key      //salt-master证书管理命令
/usr/bin/salt-master   //salt-master 服务命令
/usr/bin/salt-run      //salt-master runner 命令
/usr/bin/salt-unity

salt [options] '' <function> [arguments]
参数:
file.managed       管理文件
pkg.installed      安装软件
cron.absent        删除计划任务
cron.present       添加计划任务
cmd.run            后面跟cmd命令
service.running    启动服务
--version          查看saltstack程序的版本
--version-report   查看saltstack程序以及依赖的版本
-h                 查看帮助信息
-c                 指定配置文件的目录
-t                 指定timeout时间
--hard-crash       捕捉到original异常不退出
-s                 以组的形式返回所有的minion的数据
--async            异步执行
--show-timeout     显示minion timeout的状态
--show-jid         显示任务jid
-b                 按照百分比执行任务
-a                 指定外部的认证方式
-T                 生成master token
--return=RETURNER  指定saltstack return
-d                 查看指定模块或者所有模块的文档
--args-separator=ARGS_SEPARATOR  设置多个传参直接分隔符
--summary          显示汇总信息
--username=USERNAME  指定外部认证用户名
--password=PASSWORD  指定外部认证密码

Logging options:
-l LOG_LEVEL,--log-level=LOG_LEVEL   指定日志的级别
--log-file=LOG_FILE                  指定日志记录文件

Target options:
-E   正则匹配
-L   列表匹配,以主机id名列表的形式进行过滤,格式与Python的列表相似,即不同主机id名称使用逗号分离。
-G   grains匹配,根据被控主机的grains信息进行匹配过滤,格式为::
--grain-pcre  grains加正则匹配
-N   组匹配,根据主控端master配置文件中的分组名称进行过滤。
-R   范围匹配
-C   综合匹配,根据条件运算符not、and、or去匹配不同规则的主机信息
-I   pillar值匹配,根据被控主机的pillar信息进行匹配过滤,格式为:"对象名称":"对象值"
-S   minion网段地址匹配,根据被控主机的IP地址或IP子网进行匹配

Output options:
--out=OUTPUT             指定输出格式
--out-file=OUTPUT_FILE   指定输出文件
--no-color               关闭所有颜色显示
--force-color            强制输出颜色显示
--state-output=STATE_OUTPUT 指定state输出格式

salt '*' test.ping                测试minion是否连接正常
salt '*' disk.usage               disk.usage用来查看磁盘的使用情况
salt '*' network.interfaces       列出minion上的所有接口,以及IP和子网掩码等
salt '*' cmd.run 'ls /root'       cmd.run 用于执行shell命令
salt '*' pkg.install vim          pkg.install 查看安装包
salt '*' service.status mysql     查看mysql的服务状态
salt -E '*' '^[0-9]' test.ping 满足正则匹配的minion端是否能够通信
salt -L '192.168.1.131' grains.item osfullname 过滤主机并获取其完整的操作系统发行版本
salt -G 'osfullname:CentOS Linux' cmd.run 'python -V'  过滤grain信息 获取对应Python的版本号

2 master端常用模块

2.1 Archive模块

  主要是实现系统层面的压缩包调用,支持gzip、gunzip、rar、unrar、unzip等

salt '192.168.1.131' archive.tar xf mongodb-linux-x86_64-rhel62-3.0.7.tgz     远程解压mongo包

2.2 cmd模

cmd.has_exec: 如果可执行文件在minion上可用,返回true,否则返回false
例如:salt '*' cmd.has_exec ifconfig    这里只能是单个命令
cmd.retcode: 在minion执行一个shell命令并返回命令的返回码,0表示成功,0以外的表示失败,如我们可以查看一个文件是否存在根据返回码来判断,或者执行一个脚本等,引号里面就是你要执行的命令。正好跟cmd.has_exec相反
例如:salt '*' cmd.retcode pwd   
cmd.run: 这个执行shell命令,会显示返回结果,cmd.run_stderr意思只会在出问题的时候返回信息。
cmd.script和cmd.script_retcode: 从远程salt服务器或者ftp服务器或者http服务器下载脚本到本地执行
cmd.shell和cmd.shells: cmd.shell跟cmd.run一样,一般是用cmd.run,cmd.shell是通过/etc/shells文件列出此系统上有效的shell
cmd.which和cmd.which_bin:查找执行文件的所在位置
例如:salt '*' cmd.which ifconfig

2.3 cp模块

cp.get_dir和cp.get_file:管理节点从被管理节点获取文件夹或者文件
salt '*' cp.get_dir salt://path/to/dir/ /minion/dest    #从salt master递归复制目录到minion客户端的/minion/dest目录下面。
salt '*' cp.get_file salt://path/to/file /minion/dest     #从服务端拷贝单个文件到minion端的/minion/dest目录下面。
salt '*' cp.get_file "salt://{{grains.os}}/vimrc" /etc/vimrc template=jinja  #所有Salt minions从与其os粒度相同名称的目录下载vimrc,并将其复制到/etc/vimrc
cp.get_url: 用于从URL获取单个文件
cp.list_master和cp.list_master_dirs:用于查看salt master本地的file服务器有哪些文件或者目录

2.4 file模块

file.access:    f代表存在,rwx代表读写执行
例如:salt '*' file.access /root/test1.frm f  就是查看这个文件是否存在
也可以使用salt '*' file.file_exists /root/test1.frm 来检查,返回是一样的
file.get_mode 后面指定目录或者文件,可以查看授权的情况 例如:salt '*' file.get_mode /root/test1.frm
file.is_blkdev: 检查文件是否存在并且是块设备 file.is_chrdev: 检查文件是否存在并且是字符设备 file.is_fifo: 检查文件是否存在并且是FIFO file.is_link: 检查路径是否是符号链接 file.stats: 返回一个文件或者是目录的统计信息(包括类型,时间,属组,权限等) 例如:salt '*' file.stats /root/anaconda-ks.cfg
file.append和file.write: 前者是将内容追加到文件的末尾,后者是直接覆盖 PS1:注意单引号和双引号的区别,如果有特殊字符最好使用单引号,有变量使用双引号。 例如: salt '*' file.append /root/test.txt '`hostname` hello !' salt '*' file.append /root/test.txt "`hostname` hello " 显示的效果: `hostname` hello ! localhost.localdomain hello PS2:注意换行符的使用 例如: salt '*' file.append /root/test.txt "kk""kk kk" salt '*' file.append /root/test.txt "ll" "ll" 显示的效果: kkkk kk ll ll PS3:如果有=号的话可以使用args 例如:salt '*' file.append /root/test.txt args=['hostname=`hostname`','rel=`ls /root`'] 显示效果: hostname=`hostname` rel=`ls /root`
file.chgrpfile.chown和file.set_mode: 前者是更改文件的属组,中者是更改文件数的属主属组,后者是更改文件或目录的权限.
例如
salt '*' file.chgrp /root/test.txt admin #将minion端的/root/test.txt文件更改用户组为admin,如果客户端有此用户组则返回None,没有此用户组则返回用户组不存
salt '*' file.chown /root/test.txt root admin #第一个是用户,第二个是用户组,固定格式必须存在,将/root/test.txt的用户组设置为root,用户组设置为admin.
salt '*' file.set_mode /root/test.txt 0550 #设置/root/test.txt目录权限为0550,如果授权成功会显示授权后的权限,如果没有此文件或目录会提示

file.comment和file.comment_line: 注释指定内容的行,每次操作前都会更新文件名命令的.bak备份文件
例如:
salt '*' file.comment /root/test.txt kk 是将/root/test.txt文件中以kk开头的行注释掉,如果注释会显示注释信息,如果没有会显示false
salt '*' file.comment /root/test.txt ^h.*\`$  表达式支持正则,这里是已h开头已`结尾的行注释
salt '*' file.comment /root/test.txt ^r.*\`$ - 后面也可以指定加什么样的字符在开头,默认是#

file.copy: 复制文件或者目录到指定的目录下面,如果成功返回True,如果失败会有提示。
file.move: 移动文件
例如
salt '*' file.copy /data/test.sql /root/test.sql 把文件拷贝到minion对应的目录下面,切记这里一定要指定目标路径的文件名
salt '*' file.copy /data/ /root/haha/ recurse=true 拷贝目录,如果haha目录不存在,那么/data目录会改名成haha
salt '*' file.copy /data/ /root/haha/data recurse=true   这种才是正确的写法,如果haha不存在会自动创建
salt '*' file.copy /data/ /root/haha/ recurse=true remove_exiting=True 这种就是完全覆盖的形式

file.dirextory_exists和file.dirname的用法:前者检查一个目录是否存在,后者是取出文件的路径
salt '*' file.directory_exists /root/haha 检查haha目录是否存在,如果存在就会返回True,如果不存在就会返回false
salt '*' file.dirname '/root/haha/' 如果后面加/就会认为这两个都是目录,如果不加就会认为前面是目录后面是文件

file.find: 和find命令很相似,查找文件或者目录使用
例如:
salt '*' file.find / type=f name=\*.sql size=+1m 
查找/下文件类型为(a:所有文件类型,b:块设备,c:字节设备,d:目录,p:FIFO(命名管道),f:普通文件,l:符号链接,s:套接字),名称为.sql结尾的(支持正则),大小大于1Mb的文件(b:字节,k:千字节,m:兆字节,g:GB,t:TB)
salt '*' file.find /var mtime=+30d size=+10m print=path,size,mtime
查找/var目录下,最后一次更改时间是30天以前(w:周,d:天,h:小时,m:分钟,s:秒),大小大于10MB的文件,并打印文件的路径,大小,更改时间(可打印的内容有:group:组名,md5:文件内容的MD5摘要,mode:文件权限(以整数形式),mtime:最后修改时间,name:文件基础名称,path:文件绝对路径,size:文件大小(以字节为单位),type:文件类型,user:用户名)。
salt '*' file.find /data name=\*.[0-9] mtime=+10d size=+10m delete 
find的匹配条件有(name区分大小写,iname不区分大小写,type类型,user用户,group用户组,size[+-]大小,mtime修改时间,grep搜索文件内容),最后执行的动作除了delete和print,还有exec command。

file.get_gid、file.get_uid和file.get_group、file.get_user: 前一组是返回文件的gid喝uid号,后一组是返回文件或者是目录的group和user

file.grep:类似于grep命令,过滤使用
例如
salt '*' file.grep /root/test.txt kk 过滤test.txt包含kk的行,会输出pid:grep运行的pid号,retcode:状态码,0是成功过滤,1是失败过滤,stderr:错误输出,stdout:正常输出过滤的内容
salt '*' file.grep /root/test.txt kk " -i" 如果加上-i表示不区分大小写

file.link和file.makedirs: 前者创建硬链接,后者创建软连接

file.mkdir和file.mkdirs: 都是创建目录,前者会受/的影响,后者不会

file.remove、file.rmdir和filr.rename: 前者是删除文件,中间是删除空目录,后者是重新命名文件或者目录

file.touch和file.truncate: 前者是创建文件,后者是删除内容
例如:salt '*' file.truncate /root/passwd 3 将文件第三个字段之后的内容全部删除掉,那么久只剩下roo三个字段

2.5 host模块

host.add_host、host.rm_host和host.set_host: 前者是追加,中间是删除,后者是覆盖
例如:
salt '*' hosts.add_host 192.168.1.113 test.xxx   hosts.add会先判断/etc/hosts里面有没有这个IP192.168.1.113,如果有test.xxx会将alias名追加到这个IP后面,跟之前的解析别名一起使用这个IP,如果没有就会新创建一行hosts记录。
salt '*' hosts.set_host 192.168.1.114 test.XXX hosts.set_host这个的不同之处就是,如果这个IP不存在则创建新的一条hosts记录,如果hosts存在这个IP的解析记录。会完全覆盖掉。也就是旧的IP解析记录完全变成现在的结果.
salt '*' hosts.rm_host 192.168.1.114 test.xxx 删除192.168.1.114 test.xxx这条解析记录。如果192.168.1.114这行有多条解析记录,而只会删除test.xxx这条记录,其他的192.168.1.114 xxx.xxx,还会存在不会删除,可以说是有选择性的删除。

salt '*' hosts.get_alias 192.168.1.114 192.168.1.114这个IP对应的别名解析,如果有则返回对应的hosts别名解析记录。没有则什么都不返回。
salt '*' hosts.get_ip xxxx 这个就是返回xxxx在/etc/hosts里面对应的IP,但是有个问题,如果有多条只会返回文件最上方的那一条对应的IP地址.
salt '*' hosts.has_pair 192.168.1.113 xxxxx 如果有这条别名解析记录,则返回True,如果没有则返回False.
salt '*' hosts.list_hosts 类似于cat /etc/hosts的操作,但是不同的是,这相当于一个汇总,会以第一行是IP:下一行是其对应的别名解析的方式来呈现,比如一个IP有好几行的解析,这所有的解析记录都会汇总到这个IP下面,注释过的别名解析的行不会出现在这个汇总信息里面。

2.6 cron模块

cron.raw_cron:cron.list_tab和cron.ls的效果和其一样,格式也是要指定一个用户,都是显示指定用户crontab文件里面的定时任务
例如:salt '*' cron.raw_cron root  #必须指定用户,这里是显示root的crontab文件里面的内容,注释的行也会显示

cron.set_job: 为用户设置一个定时任务
salt '*' cron.set_job root '0' '0' '*' '*' '*' '/bin/bash /data/text.sh >/dev/null 2>&1'
如果'/bin/bash /data/test.txt >/dev/null 2>&1'这一部分存在了,那么这一步操作就是update,也就是更新前面执行crontab的时间,如果不存在,这就相当于一条添加定时任务的操作返回内容为new。

2.7 network模块

salt '*' network.get_hostname      返回minion的主机名
salt '*' network.hw_addr eth0      返回指定网络接口的mac地址
salt '*' network.in_subnet 192.168.1.0/24   查看主机在某个子网内就返回True,如果不在的话就返回False,多子网用空格隔开。
salt '*' network.ip_addrs         查看minion端绑定的IP地址,多IP也会显示出来,127.0.0.1除外。(#salt '*' network.interfaces会显示所有接口的详细信息,但是别名的网卡类似于eth0:1这种不会显示。)
salt '*' network.interface_ip eth0  显示指定网卡接口上面的IP,只会显示IP不会显示其他内容。(network.interface会连网关子网掩码也显示)
salt '*' network.mod_hostname  test1.salt    修改某一个minion的主机名,显然这一步操作只适合在初始化的时候而且不适合执行所有主机。
salt '*' network.ping www.baidu.com return_boolean=True timeout=3   如果不加return_boolean=True显示的是ping的结果信息,加了就是如果ping通了就返回True,ping不通就返回False。timeout=3就是ping的时间,3秒超时这样能快速返回结果。
salt '*' network.subnets    返回主机所属的子网

2.8 sys模块

sys.argspec:返回salt执行模块中函数的参数说明,对于后期写.sls文件有帮助
salt '*' sys.argspec pkg.install   查看pkg.install函数的参数说明
salt '*' sys.argspec sys           查看sys模块里面所有函数的规则说明。

sys.doc: 显示模块下函数的使用文档信息
salt '*' sys.doc cmd       查看cmd模块的使用方法

sys.list_functions和sys.list_modules: 前者是列出所有模块下面的函数,多模块也是用空格隔开,后者是将所有的模块全部列出。

salt '*' sys.list_functions 'sys.list_*'   可以用这种方法将所有sys.list开头的函数列出来。
salt '*' sys.list_modules                  列出所有的模块
salt '*' sys.list_modules 's*'             列出所有以s开头的模块。

2.9 service模块

salt '*' service.available sshd     查看某个命令的服务是否可用,这里是查看sshd服务是否可用,可用返回True,不可用返回False.
salt '*' service.disable postfix    禁止某个服务开机启动,这里是禁止postfix服务开机启动。
salt '*' service.disabled postfix   查看某个服务是否已经开机不启动,这里是以postfix服务为例,是返回True,否则返回False.
salt '*' service.enable postfix     设置某个服务开机启动,这里以postfix为例
salt '*' service.enabled postfix    查看某个服务是否开机启动,这里以postfix服务为例
salt '*' service.get_all            查看所有的服务项
salt '*' service.get_enabled        查看所有开机启动的服务
salt '*' service.reload <service name>   重新加载指定名称的服务
salt '*' service.restart <service name>  重新启动指定名称的服务
salt '*' service.start <service name>    启动指定名称的服务
salt '*' service.status <service name>   查看指定服务的状态,启动状态是True,关闭状态是False。
salt '*' service.stop <service name>     关闭指定名称的服务

2.10 pkg模块

pkg.install: 安装传递的包,在安装包之前,添加refresh=true来清理yum的数据库
salt '*' pkg.install httpd                如这就相当于在minion端执行yum install httpd -y操作
salt '*' pkg.install httpd refresh=True   如果是第一个yum的话,还是可以refresh参数,相当于yum clean all操作。
salt '*' pkg.install pkgs='["foo", "bar"]'
salt '*' pkg.install pkgs='["foo", {"bar": "1.2.3-4.el5"}]'
salt '*' pkg.install sources='[{"foo": "salt://foo.rpm"}, {"bar": "salt://bar.rpm"}]'

name:要安装的软件包的名称。如果传递了“pkgs”或“sources“”此参数则会被忽略
skip_verify:跳过GPG验证检查
version:安装包的特定版本
fromrepo:指定从哪个repo库来安装软件。
pkgs : 指定多个软件包,一定是要以列表传递。
sources:要安装的RPM软件包列表。 其中的键是包名称,值作为包的源URI或本地路径。

pkg.latest_version: 更新包到最新的版本
salt '*' pkg.latest_version <package name>  更新指定的软件包,若阁请以逗号隔开

pkg.remove:删除软件包
salt '*' pkg.remove <package name>          卸载指定的软件,多软件可以使用逗号隔开

pkg.version:查看软件的版本
salt '*' pkg.version <package name>         查看指定软件的版本号,多软件请以逗号隔开

2.11 grains模块

  Grains是saltstack组件中非常重要之一,在配置部署时候回经常使用,Grains记录minion的静态信息,比如常用属性,CPU、内存、磁盘、网络信息等。信息以键值对形式存储。配置文件/etc/salt/grains。

grains的基本用法:
salt '*' grains.ls       列出所有grains方法
salt '*' grains.items    列出主机所有Grains数据 
salt '*' grains.item os id host   列出主机的os,id,host的值

grains -G的用法:
salt -G 'os:CentOS' test.ping      对os:CentOS的主机进行ping操作
salt -G 'osrelease:7*' test.ping
salt '*' grains.item fqdn_ip4      找出IP地址
salt '*' grains.setval cpu_num 8   自定义cpu_num为8
alt '*' grains.setval cpu_info '["Intel","Xeon","10"]'
salt '*' grains.item cpu_info
salt '*' grains.delval cpu_info    删除cpu_num

2.12 pillar模块

  Pillar称作数据管理中心,经常配合states在大规模的配置管理中使用。Pillar是动态的,存储在master端,提供和给minion端,Pillar在SaltStack中主要的作用是存储和定义配置管理中需要的一些数据,比如软件版本号,用户账号密码等,保证敏感数据不被其他minion看到。

salt '*' pillar.item nginx  #检查设置的pillar值
grains和pillar对比:
grains数据采集方式是静态的,主要使用在minion启动时收集,数据查询,目标选择以及配置的管理,pillar的数据采集方式是动态的,主要是用在master进行自定义或者目标选择或者配置管理或者敏感数据方面。

 

参考:https://blog.csdn.net/qq_45029110/article/details/119996915

posted @ 2021-09-17 18:53  coffee_kai  阅读(826)  评论(0编辑  收藏  举报