前言
在https://github.com/saltstack-formulas中,grains.filter_by模塊使用的比較頻繁,先了解它的意思,然後理解大牛們使用它的用意。
grains.filter_by啥意思?
參照官網:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.grains.html#salt.modules.grains.filter_by
作用:在給定的字典中查找當前操作系統並返回結果
簡單理解下:可以根據不同環境(例如:操作系統),來獲取的這個適合這個操作系統的變量的值,意思就是我給centos和Debian同時定義了一套字典,類似
Debian:
server: mysql-server
client: mysql-client
service: mysql
python: python-mysqldb
debconf_utils: debconf-utils
dev: libmysqlclient-dev
config:
file: /etc/mysql/my.cnf
sections:
client:
port: 3306
socket: /var/run/mysqld/mysqld.sock
CentOS:
server: mysql-server
client: mysql
service: mysqld
python: MySQL-python
dev: mysql-devel
config_directory: /etc/my.cnf.d/
這樣,根據客戶端屬於哪種環境(例如:操作系統),就會套用到上述yaml模板中的值
grains.filter_by咋用呢?
grains.filter_by語法
{% set apache = salt['grains.filter_by']( { ... 列表區域 }, merge=salt['pillar.get']('apache:lookup') 參數區域) %}
set apache #設置了一個字典的對象,名字是apache,也就是創建了一個apache的對象
列表區域
就是yaml語法,設置字典
官方解釋:lookup_dict 一個字典,key來自於grains,包含一個或多個值匹配,通過匹配系統有關進行選定。例如,一個key可以是一個操作系統的名稱,該值可以在特定的操作系統中的包的名稱。
參數區域:
- grain-- 我們要從客戶端grains到那個key來區分環境,這就要說明下,默認值:os_family
- merge-- 字典
- default-- 默認值,默認選擇哪個key
- base-- 選擇lookup_dict合併在這最後合併字典合併。這允許每個案件的共同的價值觀被收集在基地和糧食選擇字典和詞典被合併。默認設置
舉個栗子1:
{% set apache = salt['grains.filter_by']({
'Debian': {'pkg': 'apache2', 'srv': 'apache2'},
'RedHat': {'pkg': 'httpd', 'srv': 'httpd'},
}, default='Debian') %}
myapache:
pkg.installed:
- name: {{ apache.pkg }}
service.running:
- name: {{ apache.srv }}
上述例子可以看到,使用©著作權歸作者所有:來自51CTO博客作者vekergu的原創作品,如需轉載,請註明出處,否則將追究法律責任
0
收藏