grains
主要负责采集客户端一些基本信息, 这个也完全可以自定义,可以在客户端自定义,然后自动汇报上来;也可以从服务器端定义然后推下去,采集完后,再汇报上来
1. 打印所有items值
root@sh-salt-01 ~
> salt bj-db-01 grains.items
bj-db-01:
----------
SSDs:
cpu_flags:
- fpu
- vme
- de
- pse
- tsc
- msr
- pae
- mce
...... 此处省略100字
selinux:
----------
enabled:
False
enforced:
Disabled
server_id:
327831961
shell:
/bin/bash
virtual:
VMware
zmqversion:
3.2.5
2.列出所有items
> salt bj-db-01 grains.ls
bj-db-01:
- SSDs
- cpu_flags
- cpu_model
- cpuarch
- domain
- fqdn
- fqdn_ip4
- fqdn_ip6
- gpus
- host
- hwaddr_interfaces
- id
- init
......
3.查看单个item值
root@sh-salt-01 ~
> salt bj-db-01 grains.item shell
bj-db-01:
----------
shell:
/bin/bash
root@sh-salt-01 ~
> salt bj-db-01 grains.item ipv4
bj-db-01:
----------
ipv4:
- 1.1.1.12
- 127.0.0.1
4.自定义grains数据
- 有两种方法
在minion端实现
修改配置文件/etc/salt/minion中打开 default_include: minion.d/.conf
在/etc/salt/minion.d/目录中添加需要增加的items,文件类型与配置项.conf对应
> vim /etc/salt/minion.d/tomcat.conf
grains: #开头需声明是grains
role:
- tomcat
- db
max_con: 123
重启minion,在master查看
> salt bj-db-01 grains.item role max_con
bj-db-01:
----------
max_con:
123
role:
- tomcat
- db
在master端实现
在master端添加
在/srv/salt/ 创建_grains目录,一般是py文件,编写grains文件,需要返回一个字典
> vim tomcat.py
def tomcat_version():
grains = {}
grains['tomcat'] = '7.0.64'
return grains
同步到minion端
salt bj-db-01 saltutil.sync_all
查看自定义的grains信息
> salt bj-db-01 grains.item tomcat
bj-db-01:
----------
tomcat:
7.0.64
pillar
Pillar是什么?
pillar是salt非常重要的一个组件,它用于给特定的minion定义任何你需要的数据, 这些数据可以被salt的其他组件使用。pillar 在解析完成 后,是一个嵌套的 dict 结构;最上层的 key 是 minion ID,其 value 是该 minion 所拥有的 Pillar 数据;每一个 value 也都是 key/value。这里可以看出 Pillar 的一个特点,Pillar 数据是与特定 minion 关联的,也就是说每一个minion 都只能看到自己的数据, 所以 Pillar 可以用来传递敏感数据 。
Pillar可以用在哪些地方?
- 敏感数据
例如ssh key,加密证书等,由于Pillar使用独立的加密session,可以确保这些敏感数据不被其他minion看到。 - 变量
可以在Pillar中处理平台差异性,比如针对不同的操作系统设置软件包的名字,然后在State中引用。 - 其他任何数据
可以在Pillar中添加任何需要用到的数据。比如定义用户和UID的对应关系,mnion的角色等。 - 用在Targetting中
Pillar可以用来选择minion,使用-I选项。
怎样定义Pillar数据?
- master配置文件中定义
默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。如果要禁用这一默认值,可以在master配置文件中添加如下数据,重启服务后生效:
pillar_opts: False
- 使用SLS文件定义Pillar
Pillar使用与State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定义的目录下。示例如下:
pillar_roots:
base:
- /srv/pillar
- 定义入口文件和数据
cd /srv/pillar
vim top.sls
base:
'*':
- data
vim data.sls
appname: website
flow:
maxconn: 30000
maxmen: 8G
如何知道minion拥有哪些Pillar数据?
在master上修改Pilla文件后,需要用以下命令刷新minion上的数据:
salt bj-db-01 saltutil.refresh_pillar
使用执行模块pillar。pillar模块有两个funtion:pillar.data和pillar.raw。示例如下:
salt bj-db-01 pillar.data
如果定义好的pillar不生效,建议刷新一下试试。
> salt bj-db-01 saltutil.refresh_pillar
bj-db-01:
True
root@sh-salt-01 pillar
> salt bj-db-01 pillar.data
bj-db-01:
----------
appname:
website
flow:
----------
maxconn:
30000
maxmen:
8G
Pillar中数据如何使用?
完成pillar配置后,我们可以在state和模板文件中引用,模板格式变量为{{ pillar变量 }}
:
- 示例
{{ pillar['appname'] }} #代表值 website
{{ pillar['flow']['maxconn'] }} #代表值 30000
python API格式:
pillar['appname']
pillar['flow']['maxconn']
1.操作目标主机
使用-I,大写 i
选项表示使用Pillar来匹配minion.
> salt -I 'appname:website' test.ping
bj-db-01:
True
2.结合grains处理数据差异性
首先结合grainx的id信息来区分不同id的maxcpu和maxmen;
修改上面的data.sls,语法为jinja2,查看jinja2中文文档
vim data.sls
appname: website
ip: {{ grains['ipv4'][0] }}
flow:
maxconn: 30000
{ % if grains['id'] == 'sh-salt-01' % }
maxcpu: 8
maxmen: 8G
{ % elif grains['id'] == 'bj-db-01' % }
maxcpu: 2
maxmen: 4G
{ % endif % }
刷新pillar数据,查看主机的pillar数据,看看是否有差异
> salt \* saltutil.refresh_pillar
bj-db-01:
True
sh-salt-01:
True
root@sh-salt-01 pillar
> salt \* pillar.data ip
bj-db-01:
----------
ip:
1.1.1.12
sh-salt-01:
----------
ip:
1.1.1.11
本文出处:[刘天斯python自动运维一书]