saltstack的重要數據系統組件grains和pillar和jinja的使用

一、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中查看,會看到前兩行是空白,在接聽端口處會看到效果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章