ansible-template
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的更多相关文章
- 运维自动化之ansible的安装与使用(包括模块与playbook使用)(转发)
原文 http://dl528888.blog.51cto.com/2382721/1435415 我使用过puppet(地址是http://dl528888.blog.51cto.com/2382 ...
- ansible基础-Jinja2模版 | 过滤器
Jinja2模版介绍 注:本文demo使用ansible2.7稳定版 在ansible基础-变量的「8.2 模版使用变量」章节中关于模版与变量也有所提及,有兴趣的同学可以去回顾一下. ansible通 ...
- kolla部署all-in-one环境(N版)
简单介绍: Kolla 是 OpenStack 大帐篷模式下的官方子项目之一,其主要目标是通过利用 Docker 容器以及 Ansible 自动化部署工具,来为 OpenStack 云平台提 供一个简 ...
- ansible之template模块
趁着最近在搞ansible,现在学习了一波template模块的用法: 1.使用template模块在jinja2中引用变量,先来目录结构树 [root@master ansible]# tree . ...
- Ansible学习笔记
一.Ansible简介 Ansible是一种agentless(基于ssh),可实现批量配置.命令执行和控制,基于Python实现的自动化运维工具. 其特性有: ①模块化:通过调用相关模块,完成指定任 ...
- Ansible简介
概述 Ansible是一种自动化运维管理工具,无需安装客户端,通过SSH协议与节点通信. 架构 由上图可以看出Ansible由5个部分组成 Ansible:核心 Inventory:定义管理主机的清单 ...
- ansible的使用技巧
#查看ansible的帮助 $ ansible -h #ansible 指定不通的模块执行 $ ansible -i /etc/ansible/hosts docker -u root -m c ...
- ansible中tag的用法
Tags 根据官方文档介绍: ansible允许通过自定义的关键字来给playbook中的资源打上标签,然后只运行标签标记的那个task任务. 例如,可能有个完成的OS配置,然后特定的步骤标记为“nt ...
- ansible 安装使用
ansible ansible源码安装 yum -y install python-jinja2 PyPAML python-parmiko python-babel python-crypto ta ...
- Ansible用于网络设备管理 part 2 对Jinja2 YAML 和 module的理解
虽然很不想用“应该”这个词,但是还是写上了,的确我自己目前就是这么理解的. 那么这个理解就是,Ansible的一个key point 就是总的一个playbook是去依赖很多元素的,就像一开始那个图里 ...
随机推荐
- Go 零基础 30 min 入门
不知不觉用 Go 开发也两年多了. 筹备点经验汇总, 方便后面的同学能快速上手. 提纲 1. Go 安装 2. Go ide 搭建 3. Go modules 模块管 ...
- Bootstrap Studio Mac网页设计神器
Bootstrap Studio Mac网页设计神器 美丽的组件 Bootstrap Studio附带了大量漂亮的组件,用于构建响应式页面.我们有页眉,页脚,画廊,幻灯片甚至基本元素,如跨度和div. ...
- Python之文件的使用
文件概述 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接 ...
- 06_基本框架_VMCS_GuestArea
1 Guest-State Area 1.1 References 注释: 其实 内容很多 一般是不背 的:需要的时候来查就行:但是要大致知道是做啥的. 代码 > 设置 Guest Area / ...
- 详解 Redis 内存管理机制和实现
Redis是一个基于内存的键值数据库,其内存管理是非常重要的.本文内存管理的内容包括:过期键的懒性删除和过期删除以及内存溢出控制策略. 最大内存限制 Redis使用 maxmemory 参数限制最大可 ...
- 自己动手破解Z.EntityFramework.Extensions 4.0.11.0的方法
因为项目中使用到Z.EntityFramework.Extensions 和 Z.EntityFramework.Plus(免费开源)两个类库,但是Z.EntityFramework.Extensio ...
- 设计模式(十三)Visitor模式
Visitor模式可以用来把数据结构与处理分离开.通俗来说就是编写一个访问者类来访问数据结构中的元素,并把对各元素的处理交给访问者类.这样,当需要增加新的处理时,只需要编写新的访问者,然后让数据结构可 ...
- 从0开始独立完成企业级Java电商网站开发(服务端)
数据表结构设计 唯一索引unique,保证数据唯一性 CREATE TABLE `mmall_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ...
- [考试反思]1105csp-s模拟测试102: 贪婪
还是有点蠢... 多测没清空T3挂40...(只得了人口普查分20) 多测题要把样例复制粘两遍自测一下防止未清空出锅. 然而不算分... 其实到现在了算不算也不重要了吧... 而且其实T3只考虑最长路 ...
- [专题总结]2-sat及题目&题解(2/5 complete)
啥啥啥2-sat今天就是最后一天了???我才打两道题啊... %%%yxm永远领先全世界... 为了防止学=没学所以还是要记一下,防止忘也确认自己真正理解了吧. 2-sat是指2适应性问题,然而知道这 ...