作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处: https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/
前两篇文章学习了salt的state、pillar和top文件的应用,本篇学习一下salt minions的其它配置,包括如何配置masterless的minion,如何配置grains以及在minions上直接执行salt命令。
配置masterless minionsalt有一种配置方式允许minions运行在没有master的模式下。在这种情况下minion充当它自己的master。这是通过将配置文件 /etc/salt/minion 中的file_client参数从remote改为local实现的。改为local后,还需要配置本地的存储states和pillars的路径。具体操作如下:
首先在/etc/salt/minion.d文件夹中添加文件file_client.conf,file_roots.conf和pillar_roots.conf:
file_client.conf
1
file_client: local
值local允许minion从本地文件系统中查找states和pillars。
file_roots.conf
file_roots: base: - /opt/salt/base development: - /opt/salt/development
pillar_roots.conf
pillar_roots: base: - /opt/salt/pillar/base development: - /opt/salt/pillar/development
上面这两个文件设置了states和pillars在本地的存储位置,与master上的配置类似,states和pillars的配置要放在这两个文件定义的位置里。配置完成后需要重启minion。
[root@centos7-B minion.d]# systemctl restart salt-minion下面测试一下上面的配置。在/opt/salt/base创建一个名为user-wilma.sls的文件,内容如下:
user-wilma.sls
user_wilma: user.present: - name: wilma - fullname: Wilma Flintstone - uid: 2002 - home: /home/wilma
使用下面的命令检查此state:
[root@centos7-B base]# salt-call state.show_sls user-wilma [INFO ] Loading fresh modules for state activity [INFO ] Fetching file from saltenv 'base', ** done ** 'user-wilma.sls' local: ---------- user_wilma: ---------- __env__: base __sls__: user-wilma user: |_ ---------- name: wilma |_ ---------- fullname: Wilma Flintstone |_ ---------- uid: 2002 |_ ---------- home: /home/wilma - present |_ ---------- order: 10000应用state到本地:
[root@centos7-B base]# salt-call state.sls user-wilma [INFO ] Loading fresh modules for state activity [INFO ] Fetching file from saltenv 'base', ** skipped ** latest already in cache 'salt://user-wilma.sls' [INFO ] Running state [wilma] at time 14:50:51.175126 [INFO ] Executing state user.present for wilma [INFO ] Executing command ['useradd', '-u', '2002', '-m', '-d', '/home/wilma', 'wilma'] in directory '/root' [INFO ] Executing command ['usermod', '-c', 'Wilma Flintstone,,,', 'wilma'] in directory '/root' [INFO ] {'shell': '/bin/bash', 'workphone': '', 'uid': 2002, 'passwd': 'x', 'roomnumber': '', 'groups': ['wilma'], 'home': '/home/wilma', 'name': 'wilma', 'gid': 2002, 'fullname': 'Wilma Flintstone', 'homephone': ''} [INFO ] Completed state [wilma] at time 14:50:51.540919 local: ---------- ID: user_wilma Function: user.present Name: wilma Result: True Comment: New user wilma created Started: 14:50:51.175126 Duration: 365.793 ms Changes: ---------- fullname: Wilma Flintstone gid: 2002 groups: - wilma home: /home/wilma homephone: name: wilma passwd: x roomnumber: shell: /bin/bash uid: 2002 workphone: Summary ------------ Succeeded: 1 (changed=1) Failed: 0 ------------ Total states run: 1可见,这种配置在没有master的情况下,minion自己充当master,只是将master上的salt命令换成了minions上的salt-call命令,其它用法与在master上操作完全一致。上面是使用的state.sls将特定的state应用到本地,如果写了top.sls文件,可以像在master上一样,使用state.highstate来引用top文件里规定的states。
在masterless minion的配置中,也可以不指定file_client为local,这样在使用salt-call命令时需要加上命令行参数 --local ,其效果与将file_client配置为local的效果相同。 不过当在配置文件中指定了file_client为local后,salt master就不能再连接上此minion,使用时一定要注意 。
在minion上配置grains在salt中,grains是存储在minions上的关于系统属性的一些信息,它可以帮助salt根据这些信息选择目标minions,通常它用来存储相对静态的数据。默认情况下,salt提供了许多grains信息,包括os、cup、内存、机器名等。然而我们也可以在minions上配置定制的grains信息,例如机器位置、服务器类型、应用程序名称、数据库等,这些定制信息使grains更加符合我们的需要。
有多种方法可以配置grains。首先可以在minion的默认配置文件/etc/salt/minion中配置;也可以将grains配置在一个单独的文件/etc/salt/grains中。无论哪种配置,grains都是以YAML键值对的形式配置的。这里我们以在/etc/salt/grains文件中配置grains举例:
grains
environment: development location: datacenter1 server_type: webserver
grains是为了存储静态信息的,如果grains的信息发生了变动或新的grains添加进来,必须要刷新minion来使master得到这些新的数据。这可以通过执行模块完成,不过现在直接重启salt-minion daemon就可以是这些新的数据可用。
[root@centos7-B salt]# systemctl restart salt-minion在master上通过命令grains.item得到grains的相关信息:
[root@centos7-A ~]# salt '*' grains.item environment location server_type minion: ---------- environment: development location: datacenter1 server_type: webserver也可以通过grains.items得到某个minion的所有grains:
[root@centos7-A ~]# salt '*' grains.items ... 从minions拉取master上的配置前两篇文章都是在master上通过salt命令将state推送到minions上,state也可以在minion上通过salt-call命令从master上拉取过来。可以使用下面的命令:
[root@centos7-B ~]# salt-call state.highstate这里使用了只存在于minion上的salt-call命令,调用了state.highstate执行模块。然后minion将系统中所有需要的数据从master上缓存到本地,最后根据top.sls中的规则将特定环境下符合minion目标的特定state应用到本地。也可以使用另外一种方法应用某个state:
[root@centos7-B ~]# salt-call state.sls user saltenv=development这里仍然使用只存在于minion上的salt-call命令,但是使用了另外一个state.sls的执行模块,它可以指定应用某个特定的state(这里是名为user的state)到此minion上,最后的saltenv指定了state文件在master上的存放位置。如果不提供saltenv参数,系统会到base环境下寻找相关的state文件。
上面的命令是在minion上拉取了master上的state配置,然后应用到本地。salt-call命令还可以从master上拉取pillar数据:
[root@centos7-B ~]# salt-call pillar.get dev_user local: ---------- comment: Thomas name: thomas password: $1$PG1inys0$kB2I83KzEVzVs9G7xLHjA1 uid: 2001可以将salt命令与salt-call命令进行类比,它们非常类似,最大的不同就是salt命令只存在于master主机上,而salt-call命令只存在于minion主机上。
本篇学习了salt minion的高级配置及grains,下篇看一下如何在state中使用grains数据。