template简介

template功能: 根据模板文件动态生成对应的配置文件
template文件必须存放于templates目录下,且命名为 .j2 结尾
ansible的template模板使用的是Jinja2语言
yaml/yml 文件需和templates目录平级,目录结构如下:
./
├── temnginx.yml
└── templates
       └── nginx.conf.j2

template模板应用

[root@centos7 ansible]# cp /etc/nginx/nginx.conf templates/nginx.conf.j2              #准备nginx配置文件复制到templates目录下做模板文件,文件后缀必须是j2
[root@centos7 ansible]# vim templates/nginx.conf.j2          #对nginx的模板文件稍作修改
user {{user}};                                               #jinja2语言支持变量和数字运算等
worker_processes {{ansible_processor_vcpus*2}};              #ansible_processor_vcpus变量为ansible的setup模块自带的系统变量,后面跟*2做乘法运算
[root@centos7 ansible]# vim template_nginx.yml               #编译安装nginx的playbook
---
#install nginx
- hosts: appsrvs
  remote_user: root

  tasks:
    - name: install nginx package
      yum: name=nginx
    - name: config file
      template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf       #把模板文件复制到远程主机;系统会自动到templates目录下找到nginx.conf.j2文件
    - name: start service
      service: name=nginx state=started enabled=yes
[root@centos7 ansible]# ansible-playbook -e user="daemon" template_nginx.yml     #执行安装nginx的playbook,执行playbook,到复制nginx配置文件时,会调用模板文件进行复制,并且命令行指定的user变量值赋值给模板文件中的user变量

template中的for应用

测试:准备一个playbook,在playbook中定义变量;准备一个template文件

[root@centos7 ansible]# vim for1.yml    #编辑一个playbook
---
#test for
- hosts: appsrvs
  remote_user: root
  vars:               #自定义变量
    ports:            #指定列表,并且给列表中设置三个元素
      - 81
      - 82
      - 83

  tasks:
    - name: test for
      template: src=app.conf.j2 dest=/data/app.conf            #引用模板

[root@centos7 ansible]# vim templates/app.conf.j2            #编辑模板
{% for p in ports %}           #读取playbook中ports列表中的元素,赋值给变量p;列表中有几个元素,执行几次循环
server {
    listen {{p}}
}
{%endfor%}

执行结果如下:
[root@wwwserver817 ~]$ cat /data/app.conf
server {
	listen 81
}
server {
	listen 82
}
server {
	listen 83
}
for循环中的复杂应用----字典:
[root@centos7 ansible]# vim for2.yml
---
#test for
- hosts: appsrvs
  remote_user: root
  vars:                  #自定义变量
    ports:               #指定列表,每个元素由一个字典组成,每个字典中有两个键值对儿
      - {listen: 81, web: www.xx1.com }
      - {listen: 82, web: www.xx2.com }
      - {listen: 83, web: www.xx3.com }

  tasks:
    - name: test for
      template: src=app.conf.j2 dest=/data/app.conf

[root@centos7 ansible]# vim templates/app.conf.j2
{% for p in ports %}            #把列表中的元素赋值给变量p
server {
    listen {{p.listen}}         #把元素中的listen值赋值给变量p
    name {{p.web}}              #把元素中的web值赋值给变量p
}
{%endfor%}

执行结果如下:
server {
	listen 81
	name www.xx1.com
}
server {
	listen 82
	name www.xx2.com
}
server {
	listen 83
	name www.xx3.com
}
for循环的复杂应用----配合if:
[root@centos7 ansible]# vim for3.yml
---
#test for
- hosts: appsrvs
  remote_user: root
  vars:
    ports:              #指定列表,列表中设置三个元素,用字典进行表示;元素二的字典中有两个键值对儿,listen和web;其余元素的字典中只有一个键值对儿listen
      - {listen: 81 }
      - {listen: 82, web: www.xx2.com }
      - {listen: 83 }

  tasks:
    - name: test for
      template: src=app.conf.j2 dest=/data/app.conf

[root@centos7 ansible]# vim templates/app.conf.j2
{% for p in ports %}
server {
    listen {{p.listen}}
{% if p.web is defined %}        #判断列表元素中如果定义了web的值,就进行打印p.web;反之,就不进行打印
    name {{p.web}}
{%endif%}
}
{%endfor%}

结果如下:
server {
	listen 81
}
server {
	listen 82
	name www.xx2.com
}
server {
	listen 83
}

ansible-template的更多相关文章

  1. 运维自动化之ansible的安装与使用(包括模块与playbook使用)(转发)

    原文  http://dl528888.blog.51cto.com/2382721/1435415 我使用过puppet(地址是http://dl528888.blog.51cto.com/2382 ...

  2. ansible基础-Jinja2模版 | 过滤器

    Jinja2模版介绍 注:本文demo使用ansible2.7稳定版 在ansible基础-变量的「8.2 模版使用变量」章节中关于模版与变量也有所提及,有兴趣的同学可以去回顾一下. ansible通 ...

  3. kolla部署all-in-one环境(N版)

    简单介绍: Kolla 是 OpenStack 大帐篷模式下的官方子项目之一,其主要目标是通过利用 Docker 容器以及 Ansible 自动化部署工具,来为 OpenStack 云平台提 供一个简 ...

  4. ansible之template模块

    趁着最近在搞ansible,现在学习了一波template模块的用法: 1.使用template模块在jinja2中引用变量,先来目录结构树 [root@master ansible]# tree . ...

  5. Ansible学习笔记

    一.Ansible简介 Ansible是一种agentless(基于ssh),可实现批量配置.命令执行和控制,基于Python实现的自动化运维工具. 其特性有: ①模块化:通过调用相关模块,完成指定任 ...

  6. Ansible简介

    概述 Ansible是一种自动化运维管理工具,无需安装客户端,通过SSH协议与节点通信. 架构 由上图可以看出Ansible由5个部分组成 Ansible:核心 Inventory:定义管理主机的清单 ...

  7. ansible的使用技巧

    #查看ansible的帮助 $ ansible -h   #ansible 指定不通的模块执行 $ ansible -i /etc/ansible/hosts  docker -u root -m c ...

  8. ansible中tag的用法

    Tags 根据官方文档介绍: ansible允许通过自定义的关键字来给playbook中的资源打上标签,然后只运行标签标记的那个task任务. 例如,可能有个完成的OS配置,然后特定的步骤标记为“nt ...

  9. ansible 安装使用

    ansible ansible源码安装 yum -y install python-jinja2 PyPAML python-parmiko python-babel python-crypto ta ...

  10. Ansible用于网络设备管理 part 2 对Jinja2 YAML 和 module的理解

    虽然很不想用“应该”这个词,但是还是写上了,的确我自己目前就是这么理解的. 那么这个理解就是,Ansible的一个key point 就是总的一个playbook是去依赖很多元素的,就像一开始那个图里 ...

随机推荐

  1. Netty - 粘包和半包(上)

    在网络传输中,粘包和半包应该是最常出现的问题,作为 Java 中最常使用的 NIO 网络框架 Netty,它又是如何解决的呢?今天就让我们来看看. 定义 TCP 传输中,客户端发送数据,实际是把数据写 ...

  2. SpringBoot 2.0整合阿里云OSS,实现动静分离架构

    前言 相信大部分开发者对下面这张架构图并不陌生吧,现在很多网站/应用都采用了动静分离的架构进行部署.博主的博客也不例外,主机采用的是阿里云的 ECS,使用 CDN 做静态内容分发,不过静态文件还是存储 ...

  3. 学习 Antd Pro 前后端分离

    1.前言 最近学习reactjs ,前些年用RN开发过移动端,入门还算轻松.现在打算使用 Antd Pro 实现前后端分离.要使用Antd Pro这个脚手架,必须熟悉 umi.dva.redux-sa ...

  4. Flink 从 0 到 1 学习 —— 如何自定义 Data Source ?

    前言 在 <从0到1学习Flink>-- Data Source 介绍 文章中,我给大家介绍了 Flink Data Source 以及简短的介绍了一下自定义 Data Source,这篇 ...

  5. 2、Struts2开始深入

    一.Struts2的配置文件加载顺序 1 .进入过滤器[StrutsPrepareAndExecuteFilter]跟代码,可以看到对应的文件加载顺序 进入StrtsPrepareAndExecute ...

  6. Arduino学习笔记② Arduino语言基础

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  7. ESP8266开发之旅 网络篇⑨ HttpClient——ESP8266HTTPClient库的使用

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  8. JVM学习记录1--JVM内存布局

    先上个图 这是根据<Java虚拟机规范(第二版)>所画的jvm内存模型. 程序计数器:程序计数器是用来记录当前线程方法执行顺序的,对应的就是我们编程中一行行代码的执行顺序,如分支,跳转,循 ...

  9. JS移动端适配(自适应)

    var html = document.querySelector('html'); changeRem(); window.addEventListener('resize', changeRem) ...

  10. IDEA配置maven+错误记录

    使用maven并不是那么顺利所以把自己遇到的问题也记录一下 下载maven 从官网下载maven官网 配置环境变量 新建一个变量名:MAVEN_HOME 值:maven目录 path:%MAVEN_H ...