一、grains
grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。
# salt 'yw02' grains.ls 列出所有的grains项目名字 # salt 'aming-02' grains.items 列出所有grains项目以及值
grains的信息并不是动态的,并不会实时变更,它是在minion启动时收集到的。
我们可以根据grains收集到的一些信息,做配置管理工作。
grains支持自定义信息。
自定义grains
minion上:
# vim /etc/salt/grains //添加,前面是item,后面是value。这都是自定义的。 role: nginx env: test
重启minion服务
# systemctl restart salt-minion
master上:
获取grains:
# salt '*' grains.item role env //可以随便写一个item,如果minion端没有,就什么都不显示。
可以借助grains的item去匹配对应的主机来执行任务或命令
# salt -G role:nginx cmd.run 'hostname'
如果想把机器分组,就可以自定义一个grains。
二、pillar
pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。
配置自定义pillar
# vim /etc/salt/master 找到如下配置://去掉前面的#号 pillar_roots: //可以认为是接下来要配置的项目。 base: #此行前面有两个空格,项目里它的value叫base。 - /srv/pillar #此行前面有4个空格,value里的值叫/srv/pillar。 重启master //只有在修改了/etc/salt/master的情况下才需要重启服务,后面的只要刷新pillar配置即可。 # systemctl restart salt-master # mkdir /srv/pillar # vim /srv/pillar/test.sls //子配置文件,内容如下,saltstack的配置文件通常情况下以sls作为后缀名,方便区分。 conf: /etc/123.conf # vi /srv/pillar/top.sls //内容如下,这个top.sls文件作为一个总入口。 base: #base表示这是一个根 'yw02': #此行前面有两个空格,针对的机器的主机名。 - test #此行前面有4个空格,意思是要加载哪一个配置文件。-相当于是作为分隔符性质的。 - test1 #多个就写多行 'fuxi01': #也可以写多个机器 - test2 这个文件的格式一定要注意,机器前空两gear,对应的配置文件空四格。
当更改完pillar配置文件后,通过刷新pillar配置来获取新的pillar状态:
# salt '*' saltutil.refresh_pillar 验证:# salt '*' pillar.item conf
pillar同样可以用来匹配对应的主机。
比如 salt -I 'conf:/etc/123.conf' test.ping;salt -I 'conf:/etc/123.conf' cmd.run w
三、安装配置httpd
master上
# vi /etc/salt/master //搜索找到file_roots,打开如下内容的注释: file_roots: base: #前面有两个空格 - /srv/salt #前面有4个空格 # mkdir /srv/salt ; cd /srv/salt # vi /srv/salt/top.sls //定义总入口,加入如下内容 base: '*': #前面有两个空格, - httpd #前面有4个空格 # systemctl restart salt-master
'*'的意思是,在所有的minion客户端上执行httpd模块,也可以写单独的机器。
master上
# vi /srv/salt/httpd.sls //加入如下内容,这个就是httpd模块的内容 httpd-service: #定义的服务名字 pkg.installed: #salt自带的模块,类似于cmd.run。 - names: #后面就是要安装的包的名字。这里如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行了。 - httpd - httpd-devel service.running: #这个模块的作用是为了启动服务的。 - name: httpd #启动httpd这个服务 - enable: True #True表示要启动,false不启动。
说明: httpd-service是id的名字,自定义的。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。
执行: salt 'yw02' state.highstate //执行过程会比较慢,因为客户端上在yum install httpd httpd-devel,只要执行了这个state.highstate的命令,就会到/srv/salt目录下去找top.sls,这个配置文件里提到的相关的模块,都会去执行。
# ls /lib/systemd/system/httpd.service //安装完后,就有这个服务的包了。
四、配置管理文件
master上
# vi /srv/salt/test.sls //加入如下内容 file_test: file.managed: #引用到的模块 - name: /tmp/aminglinux.com #minion端要给到的文件路径 - 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,salt://这就表示在/etc/salt/master文件中的file_roots定义的根路径/srv/salt。
作用:比如,针对一组机器,改一个服务的配置文件,先把改好后的配置文件的模板搞过来,然后再告诉minion端,把这个文件要分发到机器上的哪一个目录下去,分发完后,可能还要做一些其他的操作,比如重启服务。
# mkdir /srv/salt/test/123 # cp /etc/passwd /srv/salt/test/123/1.txt # vi /srv/salt/top.sls //因为salt默认找的是top.sls,它是总入口,top会告诉我们接下来要去找哪一个子配置文件,所以这里要改成test: base: '*': - test # salt 'yw02' state.highstate yw02: ---------- ID: file_test Function: file.managed Name: /tmp/aminglinux.com Result: True Comment: File /tmp/aminglinux.com updated Started: 19:37:17.272462 Duration: 591.057 ms Changes: ---------- diff: New file Summary for yw02 ------------ Succeeded: 1 (changed=1) Failed: 0 ------------ Total states run: 1 Total run time: 591.057 ms
检查yw02上是否有/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 //添加test_dir base: '*': - test_dir # salt 'yw02' state.highstate
检查yw02上是否有/tmp/testdir,检查里面的目录、文件以及权限
说明:saltstack的一个特性,如果source对应的目录里有空目录的话,客户端上不会同步它,它会认为这是无用的。