一、grains
1、grains的概念
grains是minion第一次啓動的時候採集的靜態數據,可以用在salt的模塊和其他組件中。其實grains在每次的minion啓動(重啓)的時候都會採集,即向master彙報一次的
2、設置grains的方法
- 在server2的minion配置文件中打開grains
vim /etc/salt/minion
121 grains:
122 roles:
123 - apache
重啓服務/etc/init.d/salt-minion restart
在server1(master)上:
[root@server1 salt]# salt -G 'roles:apache' cmd.run hostname #查看角色爲apache的主機名
server2:
server2
也可以查看minion的各個角色
- 在server3的/etc/salt目錄下書寫grains文件
vim /etc/salt/grains
roles: nginx #由於是用python寫的,應該注意語法格式
在master端查看的時候會發現還沒有出現server3的角色,可以用
[root@server1 salt]# salt server3 saltutil.sync_grains ##刷新
這時查看就會出現server3的角色
- 方法3
在server1上
[root@server1 ~]# cd /srv/salt
[root@server1 salt]# vim _grains
[root@server1 salt]# mkdir _grains
[root@server1 salt]# cd _grains/
[root@server1 _grains]# vim my_grains.py
#!/usr/bin/env python
def myfunction():
grains = {}
grains['hello'] = 'world'
grains['salt'] = 'stack'
return grains
在server1端將.py文件傳給server3
[root@server1 _grains]# salt server3 saltutil.sync_grains
server3:
- grains.my_grains
並且在server3的緩存目錄下可以看到該文件
[root@server3 ~]# cd /var/cache/salt/minion/files/base/_grains
[root@server3 _grains]# cat my_grains.py
#!/usr/bin/env python
def myfunction():
grains = {}
grains['hello'] = 'world'
grains['salt'] = 'stack'
return grains
在seever1上可以查看對應的鍵值
二、pillar (存放的是靜態數據)
1、pillar的概念
pillar是salt用來分發全局變量到所有minions的一個端口
Pillar用於給特定的 minion 定義任何你需要的數據, 這些數據可以被Salt的其他組件使用!安全起見,有些數據是不可以共享出來的,需要指定。比如高度敏感的數據:通過pillar傳輸的數據會保證只向選定的minions展現,這使得pillar可以作爲Salt中管理安全信息的引擎,比如加密的key和密碼。
2、配置pillar
(1)編輯/etc/salt/master打開pillar存儲路徑
[root@server1 _grains]# cd /etc/salt/
[root@server1 salt]# vim master
694 pillar_roots:
695 base:
696 - /srv/pillar
[root@server1 salt]# /etc/init.d/salt-master restart #重啓master服務
(2)刷新鎖與節點的pillar
[root@server1 salt]# salt '*' saltutil.refresh_pillar
(3)編輯存儲pillar鍵值對文件
[root@server1 salt]# cd /srv/
[root@server1 srv]# mkdir pillar
[root@server1 srv]# cd pillar/
[root@server1 pillar]# vim top.sls
base:
'*':
- web.install
[root@server1 pillar]# mkdir web
[root@server1 pillar]# cd web/
[root@server1 web]# vim install.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
當出現如下情況,刷新一下所有節點即可
[root@server1 pillar]# salt -I 'webserver:nginx' test.ping
server3:
Minion did not return. [No response]
查看所有pillar項
三、jinja模塊的使用方法
1、方法一
在server1的httpd.install中編寫jinja模版
[root@server1 apache]# cat install.sls
apache-install:
pkg.installed:
- pkgs:
- httpd
- php
- php-mysql
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- mode: 644
- user: root
- group: root
- template: jinja
- context:
bind: 172.25.66.2
port: 8080 #以鍵值對的形式存儲bind和port
在server1的httpd配置文件中編輯要更新的端口或接口
cd /srv/salt/apache/files
vim httpd.conf
136 Listen {{ bind }}:{{ port }}
給server2端推送
[root@server1 files]# salt server2 state.sls apache.service
推送成功
在server2端檢驗 vim /etc/httpd/conf/httpd.conf
2、方法二
vim /srv/salt/apache/lib.sls
{% set port = 8080 %}
{% set bind = '172.25.35.2' %}
vim /srv/salt/apache/files/httpd/conf
在首行添加
1 {% from 'apache/lib.sls' import port with context %}
2 {% from 'apache/lib.sls' import bind with context %}
推送測試,在server1中/srv/salt/apache/install.sls文件中註釋
# - context:
# bind: 172.25.66.2
# port: 8080
推送salt server2 state.sls apache.install
在server2中查看,會看到前兩行是空白,在接聽端口處會看到效果