template中使用流程控制 for 和 if

template中也可以使用流程控制 for 循环和 if 条件判断,实现动态生成文件功能

范例

#temlnginx2.yml
---
- hosts: websrvsremote_user: rootvars:nginx_vhosts:- 81- 82- 83tasks:- name: template configtemplate: src=nginx.conf.j2 dest=/data/nginx.conf#templates/nginx.conf2.j2
{% for vhost in  nginx_vhosts %}
server {listen {{ vhost }}
}
{% endfor %}ansible-playbook -C  templnginx2.yml  --limit 10.0.0.8#生成的结果:
server {listen 81
}
server {listen 82
}
server {listen 83
}

YAML

范例:

#temlnginx3.yml
---
- hosts: websrvsremote_user: rootvars:nginx_vhosts:- listen: 8080tasks:- name: config filetemplate: src=nginx.conf3.j2 dest=/data/nginx3.conf#templates/nginx.conf3.j2
{% for vhost in nginx_vhosts %}
server {listen {{ vhost.listen }}
}
{% endfor %}ansible-playbook   templnginx3.yml  --limit 10.0.0.8#生成的结果
server {listen 8080
}

范例:

#templnginx4.yml
- hosts: websrvsremote_user: rootvars:nginx_vhosts:- listen: 8080server_name: "web1.magedu.com"root: "/var/www/nginx/web1/"- listen: 8081server_name: "web2.magedu.com"root: "/var/www/nginx/web2/"- {listen: 8082, server_name: "web3.magedu.com", root: "/var/www/nginx/web3/"}tasks:- name: template config template: src=nginx.conf4.j2 dest=/data/nginx4.conf# templates/nginx.conf4.j2
{% for vhost in nginx_vhosts %}
server {listen {{ vhost.listen }}server_name {{ vhost.server_name }}root {{ vhost.root }}
}
{% endfor %}ansible-playbook  templnginx4.yml --limit 10.0.0.8#生成结果:
server {listen 8080server_name web1.magedu.comroot /var/www/nginx/web1/
}
server {listen 8081server_name web2.magedu.comroot /var/www/nginx/web2/
}
server {listen 8082server_name web3.magedu.comroot /var/www/nginx/web3/
}

YAML

在模版文件中还可以使用 if条件判断,决定是否生成相关的配置信息

范例:

#templnginx5.yml
- hosts: websrvsremote_user: rootvars:nginx_vhosts:- web1:listen: 8080root: "/var/www/nginx/web1/"- web2:listen: 8080server_name: "web2.magedu.com"root: "/var/www/nginx/web2/"- web3:listen: 8080server_name: "web3.magedu.com"root: "/var/www/nginx/web3/"tasks:- name: template config to template: src=nginx.conf5.j2 dest=/data/nginx5.conf#templates/nginx.conf5.j2
{% for vhost in  nginx_vhosts %}
server {listen {{ vhost.listen }}{% if vhost.server_name is defined %}
server_name {{ vhost.server_name }}{% endif %}
root  {{ vhost.root }}
}
{% endfor %}#生成的结果
server {listen 8080root  /var/www/nginx/web1/
}
server {listen 8080server_name web2.magedu.comroot  /var/www/nginx/web2/
}
server {listen 8080server_name web3.magedu.comroot  /var/www/nginx/web3/
}

YAML

playbook使用 when

when语句,可以实现条件测试。如果需要根据变量、facts或此前任务的执行结果来做为某task执行与否的前提时要用到条件测试,通过在task后添加when子句即可使用条件测试,jinja2的语法格式

范例:

---
- hosts: websrvsremote_user: roottasks:- name: "shutdown RedHat flavored systems"command: /sbin/shutdown -h nowwhen: ansible_os_family == "RedHat"

YAML

范例:

---
- hosts: websrvsremote_user: roottasks:- name: add group nginxtags: useruser: name=nginx state=present- name: add user nginxuser: name=nginx state=present group=nginx- name: Install Nginxyum: name=nginx state=present- name: restart Nginxservice: name=nginx state=restartedwhen: ansible_distribution_major_version == “6”

YAML

范例:

---
- hosts: websrvsremote_user: roottasks: - name: install conf file to centos7template: src=nginx.conf.c7.j2 dest=/etc/nginx/nginx.confwhen: ansible_distribution_major_version == "7"- name: install conf file to centos6template: src=nginx.conf.c6.j2 dest=/etc/nginx/nginx.confwhen: ansible_distribution_major_version == "6"

YAML

playbook 使用迭代 with_items

迭代:当有需要重复性执行的任务时,可以使用迭代机制
对迭代项的引用,固定变量名为”item“
要在task中使用with_items给定要迭代的元素列表

列表元素格式:

  • 字符串
  • 字典

范例:

---
- hosts: websrvsremote_user: roottasks:- name: add several usersuser: name={{ item }} state=present groups=wheelwith_items:- testuser1- testuser2
#上面语句的功能等同于下面的语句- name: add user testuser1user: name=testuser1 state=present groups=wheel- name: add user testuser2user: name=testuser2 state=present groups=wheel

范例:

---
#remove mariadb server
- hosts: appsrvs:!192.168.38.8remote_user: roottasks:- name: stop serviceshell: /etc/init.d/mysqld stop- name:  delete files and dirfile: path={{item}} state=absentwith_items:- /usr/local/mysql- /usr/local/mariadb-10.2.27-linux-x86_64- /etc/init.d/mysqld- /etc/profile.d/mysql.sh- /etc/my.cnf- /data/mysql- name: delete useruser: name=mysql state=absent remove=yes

范例:

---
- hosts:websrvsremote_user: roottasks- name: install some packagesyum: name={{ item }} state=presentwith_items:- nginx- memcached- php-fpm

范例:

---
- hosts: websrvsremote_user: roottasks:- name: copy filecopy: src={{ item }} dest=/tmp/{{ item }}with_items:- file1- file2- file3- name: yum install httpdyum: name={{ item }}  state=present with_items:- apr- apr-util- httpd

**迭代嵌套子变量:**在迭代中,还可以嵌套子变量,关联多个变量在一起使用

示例:

---
- hosts: websrvsremote_user: roottasks:- name: add some groupsgroup: name={{ item }} state=presentwith_items:- nginx- mysql- apache- name: add some usersuser: name={{ item.name }} group={{ item.group }} state=presentwith_items:- { name: 'nginx', group: 'nginx' }- { name: 'mysql', group: 'mysql' }- { name: 'apache', group: 'apache' }

YAML

范例:

cat with_item2.yml
---
- hosts: websrvsremote_user: roottasks:- name: add some groupsgroup: name={{ item }} state=presentwith_items:- g1- g2- g3- name: add some usersuser: name={{ item.name }} group={{ item.group }} home={{ item.home }} create_home=yes state=presentwith_items:- { name: 'user1', group: 'g1', home: '/data/user1' }- { name: 'user2', group: 'g2', home: '/data/user2' }- { name: 'user3', group: 'g3', home: '/data/user3' }

参考链接:http://www.yunweipai.com/34665.html

Ansible-Playbook-template算数运算以及流程控制相关推荐

  1. 2017.7.18可变/不可变类型,符号运算及其流程控制

    1.可变/不可变类型 可变数据类型:指的是数据id不变的情况下,数值可变 例子:列表   字典 不可变数据类型:是数据本身的id.value都不可改变的数据 例子:数字   字符串   布尔值 2.运 ...

  2. python加法赋值运算演示_Python赋值运算及流程控制

    1. 内置函数 1> len:统计元素长度 str1 = 'wonderful'print(len(str1)) result:9li= [1,2,3] print(len(li)) resul ...

  3. Ansible PLaybook template 模板详解

    template 模板 模板是一个文本文件,可以做为生成文件的模版,并且模板文件中还可嵌套jinja语法 jinja2语言 网站:https://jinja.palletsprojects.com/e ...

  4. day4 流程控制while 判断if

    # 今日内容:# 0 常量# 1 基本运算符# 算术运算# 赋值运算# 2 流程控制 if# 3流程控制循环(while for)# 4数据类型及内置方法# int# float# str# list ...

  5. python布尔类型运算_9.python的布尔类型与流程控制

    布尔类型其实可以算是一种特殊的数字,下面是 help() 函数得到的帮助信息: Help on class bool in module __builtin__:classbool(int)| boo ...

  6. Polyworks脚本开发学习笔记(六)-比较运算、数学运算、逻辑运算及流程控制

    Polyworks脚本开发学习笔记(六)-比较运算.数学运算.逻辑运算及流程控制 前言 比较运算.逻辑运算及流程控制是编程的基本语法,Polyworks的语法规则与VB/C#/Python等并没有很大 ...

  7. python给js变量赋值_python 之 前端开发( JavaScript变量、数据类型、内置对象、运算符、流程控制、函数)...

    11.4 JavaScript 11.41 变量 1.声明变量的语法 //1. 先声明后定义 var name; //声明变量时无需指定类型,变量name可以接受任意类型 name= "eg ...

  8. python 之 前端开发( JavaScript变量、数据类型、内置对象、运算符、流程控制、函数)...

    11.4 JavaScript 11.41 变量 1.声明变量的语法 // 1. 先声明后定义 var name; // 声明变量时无需指定类型,变量name可以接受任意类型 name= " ...

  9. Web前端学习笔记11:JavaScript_注释_输入输出_变量_数据类型_关键字_保留字_运算符_流程控制

    文章目录 JavaScript基础第01天 1 - 编程语言 1.1 编程 1.2 计算机语言 1.3 编程语言 1.4 翻译器 1.5 编程语言和标记语言区别 总结 2 - 计算机基础 2.1 计算 ...

最新文章

  1. Python中的继承和多态
  2. oracle创建数据库、表空间、用户并授权
  3. dockerfile COPY ADD 命令
  4. 将jOOQ与Spring结合使用:配置
  5. matlab jp2格式,JP2文件扩展名_JP2是什么格式_JP2文件怎么打开-文件百科
  6. 源三:聊聊注册中心在蚂蚁集团的降本提效之路
  7. 十款真正的编程游戏软件
  8. css字体加粗_CSS字体
  9. 老板说“把系统升级到https”,我用一个脚本实现了,而且永久免费!​
  10. Mongoose populate方法
  11. 七周成为数据分析师 | Excel
  12. ZBrush笔刷整理大合集
  13. python股票分析系统代码_Python 代码学习,用于股票分析
  14. nginx一篇入门:安装、静态网站部署、反向代理、负载均衡
  15. ArcGIS API for Python
  16. Seagull island
  17. pyplot 画多个图时搅合到了一起_【收藏贴】家里来了好些小朋友,什么游戏可以让孩子们玩到一起?...
  18. 技术分享 | 如何让无人机实现室内自主搜寻?
  19. 2018年9月13日训练日记
  20. 手机怎么在日历上设置每月19号提醒?

热门文章

  1. html5和前端精要(1)-架构与基础(1)
  2. 趣学python3(25)-del,deepcopy以及内存引用计数
  3. 【CV】一文讲懂图像处理中的低通、高通、带阻和带通滤波器
  4. 【深度学习】我用 PyTorch 复现了 LeNet-5 神经网络(CIFAR10 数据集篇)!
  5. 互联网职场就像一场《鱿鱼游戏》
  6. 温州大学《深度学习》课程课件(十二、自然语言处理和词嵌入)
  7. 【深度学习】一位算法工程师从30+场秋招面试中总结出的超强面经——目标检测篇(含答案)...
  8. 【学术相关】数学公式如何用Markdown优雅地写出来
  9. 目标检测一卷到底之后,终于又有人给它挖了个新坑|CVPR2021 Oral
  10. 推荐系统炼丹笔记:阿里DMIN多重兴趣网络