Ansible-06-模板
  TEZNKK3IfmPf 22天前 20 0

模板介绍

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(',') }}

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: 【Linux】IO多路转接 下一篇: 四剑客第五关
  1. 分享:
最后一次编辑于 22天前 0

暂无评论

推荐阅读
TEZNKK3IfmPf