剑客
关注科技互联网

salt minion的高级配置及grains

作者:杨冬 欢迎转载,也请保留这段声明。谢谢!

出处: https://andyyoung01.github.io/
http://andyyoung01.16mb.com/

前两篇文章学习了salt的state、pillar和top文件的应用,本篇学习一下salt minions的其它配置,包括如何配置masterless的minion,如何配置grains以及在minions上直接执行salt命令。

配置masterless minion

salt有一种配置方式允许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数据。

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址