1.grains
grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。
//列出所有的grains项目名字
[root@knightlai01 ~]# salt 'knightlai02' grains.ls
knightlai02:
- SSDs
- biosreleasedate
- biosversion
- cpu_flags
- cpu_model
- cpuarch
- disks
- dns
- domain
- fqdn
- fqdn_ip4
- fqdn_ip6
- gid
- gpus
- groupname
- host
- hwaddr_interfaces
- id
- init
- ip4_gw
- ip4_interfaces
- ip6_gw
- ip6_interfaces
- ip_gw
- ip_interfaces
salt 'knightlai02' grains.items 列出所有grains项目以及值
//列出所有grains项目以及值
[root@knightlai01 ~]# salt 'knightlai02' grains.items
knightlai02:
----------
SSDs:
biosreleasedate:
07/02/2015
biosversion:
6.00
..................................................
cpu_model:
Intel(R) Core(TM) i3-4170 CPU @ 3.70GHz
cpuarch:
x86_64
disks:
- sda
- sr0
dns:
----------
domain:
ip4_nameservers:
- 192.168.139.1
ip6_nameservers:
nameservers:
- 192.168.139.1
options:
search:
sortlist:
- grains的信息并不是动态的,并不会实时变更,它是在minion启动时收集到的。
- 我们可以根据grains收集到的一些信息,做配置管理工作。
- grains支持自定义信息。
1.2 saltstack – 自定义grains
- minion上:[root@knightlai02 ~]# vi /etc/salt/grains
- //添加: role: nginx env: test
- 重启minion服务 [root@knightlai02 ~]# systemctl restart salt-minion
master上:
[root@knightlai01 ~]# salt '*' grains.item role env
knightlai02:
----------
env:
test
role:
nginx
knightlai01:
----------
env:
role:
//可以借助grains的一些属性信息来执行
[root@knightlai01 ~]# salt -G role:nginx cmd.run 'hostname'
knightlai02:
knightlai02
2.pillar
pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。
//配置自定义pillar
//找到如下配置://去掉前面的警号
[root@knightlai01 ~]# vim /etc/salt/master
pillar_roots:
base: #此行前面有两个空格
- /srv/pillar #此行前面有4个空格
vim /srv/pillar/test.sls //内容如下
conf: /etc/123.conf
vi /srv/pillar/top.sls //内容如下
base:
'knightlai02': #此行前面有两个空格
- test #此行前面有4个空格
配置pillar
[root@knightlai01 ~]# salt '*' saltutil.refresh_pillar
knightlai02:
True
knightlai01:
True
[root@knightlai01 ~]# salt '*' pillar.item conf
knightlai02:
----------
conf:
knightlai01:
----------
conf:
pillar同样可以用来作为salt的匹配对象。
[root@knightlai01 ~]# salt -I 'conf:/etc/123.conf'
Usage: salt [options] '<target>' <function> [arguments]
Salt allows for commands to be executed across a swath of remote systems in
parallel, so they can be both controlled and queried with ease.
Options:
--version show program's version number and exit
-V, --versions-report
Show program's dependencies version number and exit.
-h, --help show this help message and exit
--saltfile=SALTFILE Specify the path to a Saltfile. If not passed, one
will be searched for in the current working directory.
-c CONFIG_DIR, --config-dir=CONFIG_DIR
Pass in an alternative configuration directory.
Default: '/etc/salt'.
-t TIMEOUT, --timeout=TIMEOUT
..............................................................................
3.安装配置httpd
master上file_roots:
base: #前面有两个空格 - /srv/salt #前面有4个空格
[root@knightlai01 ~]# vi /etc/salt/master
//打开如下内容的注释:
file_roots:
base:
- /srv/salt/
[root@knightlai01 ~]# mkdir /srv/salt
[root@knightlai01 ~]# cd /srv/salt
[root@knightlai01 salt]# vi /srv/salt/top.sls
base:
'*': #前面有两个空格
- httpd #前面有4个空格
意思是,在所有的客户端上执行httpd模块
重启 systemctl restart salt-master
saltstack – 安装配置httpd
master上vi /srv/salt/httpd.sls //加入如下内容,这个就是httpd模块的内容
httpd-service:
pkg.installed:
- names: //这里如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行了。
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True
说明: httpd-service是id的名字,自定义的。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。
mkdir /srv/salt/test/123
cp /etc/passwd /srv/salt/test/123/1.txt
vi /srv/salt/top.sls //改为如下内容
base:
'*':
- test
执行: salt 'aming-02' state.highstate
检查aming-02上是否有/tmp/aminglinux.com,检查内容以及权限
4.配置管理文件
master上vi /srv/salt/test.sls //加入如下内容
file_test:
file.managed:
- name: /tmp/aminglinux.com
- source: salt://test/123/1.txt
- user: root
- group: root
- mode: 600
说明:第一行的file_test为自定的名字,表示该配置段的名字,可以在别的配置段中引用它,source指定文件从哪里拷贝,这里的salt://test/123/1.txt相当于是/srv/salt/test/123/1.txt
mkdir /srv/salt/test/123
cp /etc/passwd /srv/salt/test/123/1.txt
vi /srv/salt/top.sls //改为如下内容
base:
'*':
- test
执行: salt 'aming-02' state.highstate
检查aming-02上是否有/tmp/aminglinux.com,检查内容以及权限
master上vi /srv/salt/test_dir.sls //加入如下内容
file_dir:
file.recurse:
- name: /tmp/testdir
- source: salt://test/123
- user: root
- file_mode: 640
- dir_mode: 750
- mkdir: True
- clean: True //加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除
修改top.sls, vi /srv/salt/top.sls //改为如下内容
base:
'*':
- test_dir
执行: salt 'aming-02' state.highstate
检查aming-02上是否有/tmp/testdir,检查里面的目录、文件以及权限
说明:这里有一个问题,如果source对应的目录里有空目录的话,客户端上不会创建该目录
5.配置管理目录
master上vi /srv/salt/test_dir.sls //加入如下内容
file_dir:
file.recurse:
- name: /tmp/testdir
- source: salt://test/123
- user: root
- file_mode: 640
- dir_mode: 750
- mkdir: True
- clean: True //加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除
修改top.sls, vi /srv/salt/top.sls //改为如下内容
base:
'*':
- test_dir
执行: salt 'knightlai02' state.highstate
检查knightlai02上是否有/tmp/testdir,检查里面的目录、文件以及权限
说明:这里有一个问题,如果source对应的目录里有空目录的话,客户端上不会创建该目录
6.配置管理远程命令
master上
vi /srv/salt/shell_test.sls //加入如下内容
shell_test:
cmd.script:
- source: salt://test/1.sh
- user: root
vi /srv/salt/test/1.sh //加入如下内容
#!/bin/bash
touch /tmp/111.txt
if [ ! -d /tmp/1233 ]
then
mkdir /tmp/1233
fi
更改top.sls内容
base:
'*':
- shell_test
执行: salt 'aming-02' state.highstate
检查是否有/tmp/111.txt和/tmp/1233
7.配置管理计划任务
master上
vi /srv/salt/cron_test.sls //加入如下内容
cron_test:
cron.present:
- name: /bin/touch /tmp/111.txt
- user: root
- minute: '*'
- hour: 20
- daymonth: '*'
- month: '*'
- dayweek: '*
注意,*需要用单引号引起来。当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在的。想要删除该cron,需要增加: cron.absent: - name: /bin/touch /tmp/111.txt 两者不能共存,要想删除一个cron,那之前的present就得去掉。
更改top.sls
base:
'*':
- cron_test
执行: salt 'knightlai02' state.highstate
到knightlai02上检查cron,会看到提示# Lines below here are managed by Salt, do not edit
我们不能随意改动它,否则就没法删除或者修改这个cron了。
8.saltstack – 其它可能会用到的命令
cp.get_file 拷贝master上的文件到客户端 salt '*' cp.get_file salt://test/1.txt /tmp/123.txt
cp.get_dir 拷贝目录 salt '*' cp.get_dir salt://test/conf /tmp/ //会自动在客户端创建conf目录,所以后面不要加conf,如果写成 /tmp/conf/ 则会在/tmp/conf/目录下又创建conf salt-run manage.up
显示存活的minion salt '*' cmd.script salt://test/1.sh 命令行下执行master上的shell脚本
9.salt-ssh使用
salt-ssh不需要对客户端做认证,客户端也不用安装salt-minion,它类似pssh/expect
安装很简单yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
yum install -y salt-ssh
vi /etc/salt/roster //增加如下内容
knightlai01:
host: 192.168.139.138
user: root
passwd: 123456
knightlai02:
host: 192.168.139.135
user: root
passwd: 123456
salt-ssh --key-deploy '*' -r 'w' //第一次执行的时候会自动把本机的公钥放到对方机器上,然后就可以把roster里面的密码去掉