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: exp
remote_user: root
tasks:
- name: Install Apache
yum: name=httpd state=installed
- name: Config CentOS6 Apache
copy: src=/etc/ansible/centos6_httpd.conf dest=/etc/httpd/conf/httpd.conf
when: ansible_distribution_major_version == "6"
- name: Config CentOS7 Apache
copy: src=/etc/ansible/centos7_httpd.conf dest=/etc/httpd/conf/httpd.conf
when: ansible_distribution_major_version == "7"
- name: Start Apache
service: name=httpd state=started
上述Ansible Playbook,可以给客户端安装Apache服务,并且根据客户端系统版本不同安装不同的Apache配置文件。
上述命令执行结果如下:
二、Ansible Template 之for语句
Ansible的Template还支持使用for,表示对Template中的部分内容进行迭代。一个典型的Ansible Template中使用for的示例如下:
---
- hosts: exp
remote_user: root
vars:
nginx_vhosts:
- vhost1:
port: 81
server_name: "web1.pzz.com"
root: "/var/www/nginx/web1"
- vhost2:
port: 82
server_name: "web2.pzz.com"
root: "/var/www/nginx/web2"
- vhost3:
port: 83
server_name: "web3.pzz.com"
root: "/var/www/nginx/web3"
tasks:
- name: install Nginx
yum: name=nginx state=installed
- name: config nginx
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
- name: Start Nginx
service: 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: exp
remote_user: root
vars:
nginx_vhosts:
- vhost1:
port: 81
server_name: "web1.pzz.com"
root: "/var/www/nginx/web1"
- vhost2:
port: 82
server_name: "web2.pzz.com"
root: "/var/www/nginx/web2"
- vhost3:
server_name: "web3.pzz.com"
root: "/var/www/nginx/web3"
tasks:
- name: install Nginx
yum: name=nginx state=installed
- name: config nginx
template: 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
相关文章
- python控制mt4自动交易软件下载_MT4 EA智能自动交易系统使用教程[通俗易懂]
- 中断系统结构及中断控制详解
- 【说站】Python+pyaudio实现音频控制示例详解
- 如何产生ioexception_结合实例论述控制过程
- 【Linux】进程控制
- Python流程控制语句有哪几种?流程控制语句详解
- Python 自动化指南(繁琐工作自动化)第二版:二十、使用 GUI 自动化控制键盘和鼠标
- 锂电池供应链平台中的质量控制与监管
- Android控制文字水平间距android:letterSpacing详解手机开发
- Filter过滤器实现权限控制详解编程语言
- Java并发控制机制详解编程语言
- js控制easyui datagrid列的显示和隐藏详解编程语言
- 控制只能输入小数以及小数点后3位详解编程语言
- 谈谈php依赖注入和控制反转详解编程语言
- element ui 表格(table)里边使用Switch开关,单独控制详解编程语言
- HTML5 audio脚本控制播放的方法详解编程语言
- SHD0-预留控制不能直接左上角删除详解编程语言
- 自开发程序加权限控制(SU21创建权限对象、PFCG创建Role)详解编程语言
- 如何使用Apache控制命令检查它的模块是否已经启用或加载
- 如何恢复误删的Oracle控制文件(oracle控制文件误删)
- Oracle精准控制小数位数(oracle 几位小数)
- 手动控制Redis集群的切换过程(redis 集群手动切换)
- 使用Redis有效控制内存1G大小(redis限制1g)
- 多线程并发控制Redis数据过期(redis过期 多线程)
- 英特尔无人机售价超7500,最大控制距离300米,能与大疆竞争吗?