目錄
- Jinja2
- Jinja2 For迴圈
- Jinja2 If 條件
- Jinja多值合併
Jinja2
掌握了Jinja才是深入Ansible-playbook的開始
Jinja2 For迴圈
變數的提取使用 {{variable}}
{%statement execution%}
括起來的內容為Jinja2命令執行語句
{% for item in all_items %}
{{ item }}
{% endfor %}
#匯入模組
from jinja2 import Template
#設定模板內容
template_content = '''
{% for id in range(201,211) %}
192.168.37.{{ id }} web{{ "%02d"|format(id-200) }}.magedu
{% endfor %}
'''
# 建立模板物件
template = Template(template_content)
# 渲染模板
output = template.render()
# 列印模板
print(output)
Jinja2 If 條件
{% if my_conditional %}
...
{% endif %}
編排目錄結構
mysqlconf.yaml roles/mysqlconf/ ├── templates │ └── mycnf.j2
mkdir -p roles/mysqlconf/templates
只定義了Templates而沒有定義Tasks,Ansible也支援這樣的方式,只是mysqlconf這個role的功能不全而已,但不影響其正常使用
我們本次的Tasks排程配置在mysqlconf.yaml檔案中
mysqlconf.yaml
- name : Mysql conf template
hosts : ubuntu
vars:
PORT: 1331
tasks:
- template:
src: roles/mysqlconf/templates/mycnf.j2
dest: /etc/mycnf.conf.yaml
roles/mysqlconf/templates/mycnf.j2
{% if PORT %}
bind-address=0.0.0.0:{{ PORT }}
{% else %}
bind-address=0.0.0.0:3306
{% endif %}
ansible-playbook mysqlconf.yaml
PLAY [Mysql conf template] ******
TASK [Gathering Facts] ******
ok: [192.168.255.110]
TASK [template] ******
changed: [192.168.255.110]
PLAY RECAP ******
192.168.255.110 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Jinja多值合併
{% for node in groups["db"] %}
{{ node | join("") }}:5672
{% if not loop.last %}
{% endif %}
{% endfor %}