今天继续给大家介绍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高级控制相关推荐

  1. 思科SP CCNP组播侦听者协议MLD详解想要成为高级网络工程师必看-ielab

    思科SP CCNP组播侦听者协议MLD详解想要成为高级网络工程师必看-ielab,网桥(Bridge)是早期的两端口二层网络设备,用来连接不同网段.网桥的两个端口分别有一条独立的交换信道,不是共享一条 ...

  2. php滚动窗口多条动态,详解原生JS是实现控制多个滚动条同步跟随滚动

    本文主要和大家详解详解原生JS是实现控制多个滚动条同步跟随滚动,当这两个容器元素的内容都超出了容器高度,即都出现了滚动框的时候,如何在其中一个容器元素滚动时,让另外一个元素也随之滚动. 在一些支持用 ...

  3. 第三节:带你详解Java的操作符,控制流程以及数组

    前言 大家好,我是 Vic,今天给大家带来带你详解Java的操作符,控制流程以及数组的概述,希望你们喜欢 操作符 算数操作符 一般的 +,-,*,/,还有两个自增 自减 ,以及一个取模 % 操作符. ...

  4. Solon 框架详解(九)- 渲染控制之定制统一的接口输出

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  5. Android涂鸦画板原理详解——从初级到高级(二)

    前言 前面写了<Android涂鸦画板原理详解--从初级到高级(一)>,讲了涂鸦原理初级和中级的应用,现在讲解高级应用.如果没有看过前面一篇文章的同学,建议先去看看哈. 准备 高级涂鸦涉及 ...

  6. java控制mac录音代码_操作详解丨如何用 Cybery 控制 mac OS系统下的录音软件(DAW)...

    原标题:操作详解丨如何用 Cybery 控制 mac OS系统下的录音软件(DAW) Cybery可以在各主流平台/操作系统下实现MIDI控制功能:mac OS(可通过蓝牙.USB线或者借助其它硬件连 ...

  7. ansible 详解

    文章目录 一.ansible 简介 1.1 ansible 是什么? 1.2 ansible 特点 1.3 ansible 架构图 二.ansible 任务执行 2.1 ansible 任务执行模式 ...

  8. 自动化运维工具——ansible详解(一)

    ansible 简介 ansible 是什么? ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统 ...

  9. 自动化运维-Ansible详解

    ansible 简介 ansible 是什么? ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统 ...

  10. Ansible详解(二)

    Ansible系列命令 Ansible系列命令有如下: ansible:这个命令是日常工作中使用率非常高的命令之一,主要用于临时一次性操作: ansible-doc:是Ansible模块文档说明,针对 ...

最新文章

  1. JAVA游戏编程之二----j2me MIDlet 手机游戏入门开发--贪吃蛇
  2. Spring Boot 监听 Redis Key 失效事件实现定时任务
  3. fedora12安装小企鹅输入法
  4. php 的包管理工具 composer
  5. Morris post order traversal algorithm
  6. python中多进程+协程的使用以及为什么要用它
  7. Ansible-playbook简单应用的几个实例
  8. 霍金首次公开24岁时博士论文 把剑桥的服务器搞瘫痪了……
  9. 思维导图Vue组件 mindmap
  10. sql azure 语法_Azure Kubernetes服务(AKS)中SQL Server
  11. 微信小程序自定义弹窗组件
  12. Servlet+Ajax实现搜索智能提示
  13. HBuilderX使用mac打包ios应用提示苹果根证书没有安装
  14. 《JavaSE系列教程》
  15. 电脑变慢,电脑越来越慢怎么办 电脑用久了网速变慢如何解决
  16. c语言 椭圆周长,高中数学公式大全
  17. 2004年11月网络工程师级试题
  18. Pandas中常见的20多种数据筛选方法,116张图详解 | 图解Pandas-图文第8篇
  19. 一元三次方程求解(枚举)
  20. WPS 操作之在指定页插入页码

热门文章

  1. 【每日算法Day 93】不用额外空间,你会旋转一个矩阵吗?
  2. 统计学习方法读书笔记11-决策树课后习题
  3. 机器学习入门——机器学习基础概念
  4. 产品经理应该扮演的几种角色
  5. 电子工业出版社博文视点Open Party 新年聚会 圆满成功召开
  6. 回顾|腾讯AI打败王者荣耀职业队,AI训练一天等于人类440年
  7. Python生成器中的send()与next()方法解析
  8. 【医疗影像处理】DICOM Rescale Intercept / Rescale Slope
  9. Spatial-Channel Sequeeze Excitation (SCSE)-8-June-2018【论文理解】
  10. java 对文件名非法字符处理