Ansible-06-模板

模板介绍

Ansible使用Jinja2模板来启用动态表达式和访问变量。

比如:

模板文件内容如下:

IP 地址: {{ ip }}

当定义 ip=192.168.122.10 这个变量时候,通过上面的模板文件可以产生出如下内容的新文件

IP 地址: 192.168.122.10

原来的模板文件不变。

在目标计算机上发送和执行任务之前,所有模板都在Ansible控制器上进行。

Jinja2 模板基本语法

Jinja模板只是一个文本文件,一般文件名使用 .j2 为后缀。模板包含变量和或表达式,在渲染模板时将其替换为值。

有几种分隔符。默认的Jinja分隔符配置如下:

  • {% ... %} 声明逻辑表达式
  • {{ ... }} 用于将变量输出
  • {# ... #} 用于模板的注释

JinJa2 逻辑控制

条件表达

{% if %}
...
{% elif %}
...
{% else %}
...
{% endif %}

Example

{# 如果定义了 idc 变量, 则输出 #}
{% if idc is defined %}
{{ idc }}
{% else %}
   没有定义
{% endif %}

循环控制

{% for %}
...
...
{% endfor %}

Example

{% for i in li %}
 {{ i }}
{% endfor %}
- hosts: node1
  vars:
    li: [1,2,3]
  tasks:
    - name: tet
      template: src=for2.j2  dest=/tmp/for2.txt
ansible-playbook some.yml

输出内容:

[root@master ~]# ssh node1 cat /tmp/for2.txt
 1
 2
 3

实战

首先在管理节点创建模板文件

{# 我是注释  #}

这里输出了自定义变量的内容: {{ ip }}

循环输出目前执行任务的主机 {{ inventory_hostname }} 属于下列组:

{% for g in group_names %}

组名: {{ g }}

{% endfor %}

{% if n > 10 %}
这个值是 {{ n }}
{% endif %}

YAML 文档内容如下:

- name: 测试变量
  hosts: slb
  gather_facts: no
  vars:
     ip: 192.168.122.26
     n: 20
  tasks:
    - name: 模板文件测试
      template:
        src: test.j2
        dest: /tmp/test.conf

输出的文件内容如下

[root@master ~]# cat /tmp/test.conf

这里输出了自定义变量的内容: 192.168.122.26

循环输出目前执行任务的主机 192.168.122.26 属于下列组:


组名: nginx


组名: slb


  这个值是 20

生产

mysql_connection={{groups['dbserver'][0]}}
kafka_connection={{groups['dbserver']  | product(['9092']) | map('join', ':') | join(',') }}
redis_connection={{groups['dbserver']  | product(['7001', '7002']) | map('join', ':') | join(',') }}
zookeeper_connection={{groups['dbserver']  | product(['2181']) | map('join', ':') | join(',') }}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shark_西瓜甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值