一礁凡、jinjia2 模板語(yǔ)言語(yǔ)法簡(jiǎn)介
# cat jinja2.sls # 運(yùn)行時(shí)把注釋去掉,不然會(huì)出錯(cuò)
{% set var = 'Hello World!' %} # 定義變量
{% set L = ['value1','value2','value3'] %} # 定義列表
{% set D = {'key1':'value1','key2':'value2','key3':'value3'} %} # 定義字典
test_var:
cmd.run:
- name: echo {{ var }} # 打印變量
# 循環(huán)遍歷列表
{% for l in L %}
echo {{ l }}
{% endfor %}
# 循環(huán)遍歷字典
{% for k,v in D.iteritems() %}
# 使用條件判斷
{% if k == 'key2' %}
{% break %} # 也可以是continue
{% else %}
echo {{k}}:{{v}}
{% endif %}
{% endfor %}
二彼哼、Grains 相關(guān)的基本命令
salt node1 grains.ls : 列出所有的grains選項(xiàng)
salt node1 grains.items :列出所有的grains選項(xiàng)及值
salt node1 grains.item 選項(xiàng)名:列出指定的選項(xiàng)所對(duì)應(yīng)的值
- 設(shè)置 grains 數(shù)據(jù)
salt node1 grains.setval key value # 設(shè)置單個(gè)鍵值對(duì)
salt node1 grains.setvals "{'key1':'value1','key2':'value2'}" # 設(shè)置多個(gè)個(gè)鍵值對(duì)
salt node1 grains.setval my_list "['one','two','three']" # 列表結(jié)構(gòu)設(shè)置
查看對(duì)應(yīng)的minion主機(jī)上已經(jīng)有了新添加的grains數(shù)據(jù)
salt node1 grains.delkey 鍵名 #刪除 grains 數(shù)據(jù)
- 設(shè)置grains模塊
mkdir -pv /srv/salt/_grains #創(chuàng)建grains模塊目錄
# cat /srv/salt/_grains/my_grains_module.py #寫(xiě)一個(gè)簡(jiǎn)單的grains模塊
import time
def now():
grains = {}
grains['now'] = int(time.time())
return grains
salt node1 saltutil.sync_all # 同步模塊到minion
salt node1 sys.reload_modules # 重載一次模塊
三、Pillar相關(guān)操作
- 建立目錄湘今,為每個(gè)minion編寫(xiě)對(duì)應(yīng)的SLS文件
mkdir -pv /srv/pillar
# cat /srv/pillar/minion_m_key.sls #主機(jī)m的pillar數(shù)據(jù)
private_key: minion_m_key
# cat /srv/pillar/minion_node_key.sls #主機(jī)node組的pillar數(shù)據(jù)
role: webserver
private_key: node
- 建立入口文件
# cat /srv/pillar/top.sls
base:
'node*':
- minion_node_key
'm':
- minion_m_key
- 刷新Pillar數(shù)據(jù)
salt '*' saltutil.refresh_pillar
四敢朱、用Jinja2和Grain擴(kuò)展SLS文件
- 根據(jù)不同的操作系統(tǒng)來(lái)安裝apahce服務(wù)
# cat /srv/sal/apache.sls
install_apache:
pkg.installed:
{% if grains['os_family'] == 'Debian' %}
- name: apache2
{% elif grains['os_family'] == 'RedHat' %}
- name: httpd
{% endif %}
- 根據(jù)不同的操作系統(tǒng)下發(fā)iptables配置文件
# cat iptables.sls
iptables:
pkg:
- installed
service:
- running
- watch:
- pkg: iptables
- file: iptables
file:
- managed
- source: salt://service/iptables
{% if grains['os'] == 'CentOS' or grains['os'] == 'Fedora' %}
- name: /etc/sysconfig/iptables
{% elif grains['os'] == 'Arch' %}
- name: /etc/conf.d/iptables
{% endif %}
五、使用Jinja2和Pillar擴(kuò)展SLS配置
- 添加多個(gè)不同用戶
# cat /srv/salt/adduser.sls
{% for i in pillar['user'] %}
add_{{ i }}:
user.present:
- name: i
{% endfor %}
六摩瞎、使用Jinja2以及Grain和Pillar動(dòng)態(tài)下發(fā)配置文件
- 簡(jiǎn)單模板下發(fā)實(shí)例
# cat /srv/salt/template.sls
template_test:
file.managed:
- source: salt://test.j2
- name: /tmp/test.conf
- user: root
- group: root
- mode: 644
- template: jinja
# cat /srv/salt/test.j2
cpu_num = {{ grains['num_cpus'] }}
mem_total = {{ grains['mem_total'] }}
hostname = {{ grains['host'] }}
user = {{ pillar['user'][0] }
- 在例1中的 test.j2 中添加流程控制
# cat /srv/salt/test.j2
{% if grains['num_cpus'] >= 8 %}
cpu_num = {{ grains['num_cpus'] }}
{% endif %}
{% if grains['mem_total'] <= 512 %}
mem_total = {{ grains['mem_total'] }}
mem_total <= 512
{% endif %}
hostname = {{ grains['host'] }}
{% for i in pillar['user'] %}
user = {{ i }}
{% endfor %}