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.chgrp、file.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