千家信息网

二、grains、pillar、安装配置httpd、配置管理文件、配置管理目录

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,一、grainsgrains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。# salt 'yw02' grains.ls 列出所有的grains项目名
千家信息网最后更新 2025年02月03日二、grains、pillar、安装配置httpd、配置管理文件、配置管理目录

一、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.highstateyw02:----------          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 fileSummary for yw02------------Succeeded: 1 (changed=1)Failed:    0------------Total states run:     1Total 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_dirbase:  '*':    - test_dir # salt 'yw02' state.highstate

检查yw02上是否有/tmp/testdir,检查里面的目录、文件以及权限

说明:saltstack的一个特性,如果source对应的目录里有空目录的话,客户端上不会同步它,它会认为这是无用的。

0