Ansible详解(十一)——Ansible Template高级控制
今天继续给大家介绍Linux运维相关知识,本文主要内容是Ansible的Template模板的高级控制。
在上文Ansible详解(十)——Ansible Template模板基础中,我们讲到了Ansible的一些基础使用。实际上,Ansible的Template可以进行更加复杂的控制。今天,我们就来学习以下Ansible Template的高级控制。
一、Ansible Template 之when语句
Ansible Template的when语句可以用于条件测试,when的引入可以使得Ansible的Playbook根据不同的条件执行不同的命令。一个典型的Ansible Playbook中when语句示例如下:
---
- hosts: expremote_user: roottasks:- name: Install Apacheyum: name=httpd state=installed- name: Config CentOS6 Apachecopy: src=/etc/ansible/centos6_httpd.conf dest=/etc/httpd/conf/httpd.confwhen: ansible_distribution_major_version == "6"- name: Config CentOS7 Apachecopy: src=/etc/ansible/centos7_httpd.conf dest=/etc/httpd/conf/httpd.confwhen: ansible_distribution_major_version == "7"- name: Start Apacheservice: name=httpd state=started
上述Ansible Playbook,可以给客户端安装Apache服务,并且根据客户端系统版本不同安装不同的Apache配置文件。
上述命令执行结果如下:
二、Ansible Template 之for语句
Ansible的Template还支持使用for,表示对Template中的部分内容进行迭代。一个典型的Ansible Template中使用for的示例如下:
---
- hosts: expremote_user: rootvars:nginx_vhosts:- vhost1:port: 81server_name: "web1.pzz.com"root: "/var/www/nginx/web1"- vhost2:port: 82server_name: "web2.pzz.com"root: "/var/www/nginx/web2"- vhost3:port: 83server_name: "web3.pzz.com"root: "/var/www/nginx/web3"tasks:- name: install Nginxyum: name=nginx state=installed- name: config nginxtemplate: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf- name: Start Nginxservice: name=nginx state=started
模板文件关键部分如下:
{% for vhost in nginx_vhosts %}server{listen {{ vhost.port }};server_name {{ vhost.server_name }};root {{ vhost.root }};}{% endfor %}
在上例中,我们实现的作用是配置Nginx的虚拟主机,上述Playbook执行过程如下:
上例执行完毕后,在客户端生成的配置文件如下所示:
客户端在打开Nginx服务后,结果如下:
三、Ansible Template 之for if语句
Ansible的Template在for语句的基础上,还可以引入if,可以使得根据条件进行判断,灵活的生成配置文件,进行更加复杂的服务器配置。一个典型的Ansible Template中for if语句示例如下:
---
- hosts: expremote_user: rootvars:nginx_vhosts:- vhost1:port: 81server_name: "web1.pzz.com"root: "/var/www/nginx/web1"- vhost2:port: 82server_name: "web2.pzz.com"root: "/var/www/nginx/web2"- vhost3:server_name: "web3.pzz.com"root: "/var/www/nginx/web3"tasks:- name: install Nginxyum: name=nginx state=installed- name: config nginxtemplate: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
nginx.conf.j2模板文件部分如下:
{% for vhost in nginx_vhosts %}server{{% if vhost.port is defined%}listen {{ vhost.port }};{% else %}listen 88;{% endif %}server_name {{ vhost.server_name }};root {{ vhost.root }};}{% endfor %}
在上述配置中,vhost为自定义变量,该变量的值由调用该模板的Playbook时不断迭代传入。vhost.port、vhost.server_name和vhost.root为Playbook在定义nginx_vhosts时传入的变量。单大括号为for或者是if语句的标识,双大括号为变量标识。
完成上述定义后,Ansible执行如下所示:
执行完毕后,在被控端上生成的/etc/nginx/nginx.conf文件如下:
可以看出,在该配置文件中,server部分为Ansible的Playbook和Template中变量的不断迭代。
这样,我们在开启Nginx服务后,结果如下:
因此,可以看出,我们的Ansible Template的for配合if语句配置成功!
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200
Ansible详解(十一)——Ansible Template高级控制相关推荐
- 思科SP CCNP组播侦听者协议MLD详解想要成为高级网络工程师必看-ielab
思科SP CCNP组播侦听者协议MLD详解想要成为高级网络工程师必看-ielab,网桥(Bridge)是早期的两端口二层网络设备,用来连接不同网段.网桥的两个端口分别有一条独立的交换信道,不是共享一条 ...
- php滚动窗口多条动态,详解原生JS是实现控制多个滚动条同步跟随滚动
本文主要和大家详解详解原生JS是实现控制多个滚动条同步跟随滚动,当这两个容器元素的内容都超出了容器高度,即都出现了滚动框的时候,如何在其中一个容器元素滚动时,让另外一个元素也随之滚动. 在一些支持用 ...
- 第三节:带你详解Java的操作符,控制流程以及数组
前言 大家好,我是 Vic,今天给大家带来带你详解Java的操作符,控制流程以及数组的概述,希望你们喜欢 操作符 算数操作符 一般的 +,-,*,/,还有两个自增 自减 ,以及一个取模 % 操作符. ...
- Solon 框架详解(九)- 渲染控制之定制统一的接口输出
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Android涂鸦画板原理详解——从初级到高级(二)
前言 前面写了<Android涂鸦画板原理详解--从初级到高级(一)>,讲了涂鸦原理初级和中级的应用,现在讲解高级应用.如果没有看过前面一篇文章的同学,建议先去看看哈. 准备 高级涂鸦涉及 ...
- java控制mac录音代码_操作详解丨如何用 Cybery 控制 mac OS系统下的录音软件(DAW)...
原标题:操作详解丨如何用 Cybery 控制 mac OS系统下的录音软件(DAW) Cybery可以在各主流平台/操作系统下实现MIDI控制功能:mac OS(可通过蓝牙.USB线或者借助其它硬件连 ...
- ansible 详解
文章目录 一.ansible 简介 1.1 ansible 是什么? 1.2 ansible 特点 1.3 ansible 架构图 二.ansible 任务执行 2.1 ansible 任务执行模式 ...
- 自动化运维工具——ansible详解(一)
ansible 简介 ansible 是什么? ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统 ...
- 自动化运维-Ansible详解
ansible 简介 ansible 是什么? ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统 ...
- Ansible详解(二)
Ansible系列命令 Ansible系列命令有如下: ansible:这个命令是日常工作中使用率非常高的命令之一,主要用于临时一次性操作: ansible-doc:是Ansible模块文档说明,针对 ...
最新文章
- JAVA游戏编程之二----j2me MIDlet 手机游戏入门开发--贪吃蛇
- Spring Boot 监听 Redis Key 失效事件实现定时任务
- fedora12安装小企鹅输入法
- php 的包管理工具 composer
- Morris post order traversal algorithm
- python中多进程+协程的使用以及为什么要用它
- Ansible-playbook简单应用的几个实例
- 霍金首次公开24岁时博士论文 把剑桥的服务器搞瘫痪了……
- 思维导图Vue组件 mindmap
- sql azure 语法_Azure Kubernetes服务(AKS)中SQL Server
- 微信小程序自定义弹窗组件
- Servlet+Ajax实现搜索智能提示
- HBuilderX使用mac打包ios应用提示苹果根证书没有安装
- 《JavaSE系列教程》
- 电脑变慢,电脑越来越慢怎么办 电脑用久了网速变慢如何解决
- c语言 椭圆周长,高中数学公式大全
- 2004年11月网络工程师级试题
- Pandas中常见的20多种数据筛选方法,116张图详解 | 图解Pandas-图文第8篇
- 一元三次方程求解(枚举)
- WPS 操作之在指定页插入页码
热门文章
- 【每日算法Day 93】不用额外空间,你会旋转一个矩阵吗?
- 统计学习方法读书笔记11-决策树课后习题
- 机器学习入门——机器学习基础概念
- 产品经理应该扮演的几种角色
- 电子工业出版社博文视点Open Party 新年聚会 圆满成功召开
- 回顾|腾讯AI打败王者荣耀职业队,AI训练一天等于人类440年
- Python生成器中的send()与next()方法解析
- 【医疗影像处理】DICOM Rescale Intercept / Rescale Slope
- Spatial-Channel Sequeeze Excitation (SCSE)-8-June-2018【论文理解】
- java 对文件名非法字符处理