#迭代循环的使用
#实现同时新建三个文件,同时部署三个服务
---
- host: websrvs
remote_user: root task:
- name: create some files
file: name=/data/{{ item }} state=touch #item=变量
when: ansible_distribution_major_version == "7"
with_items: #with_items=变量列表
- file1
- file2
- file3
- name: install some pakcages
yum: name={{ item }} state=started enabled=yes
with_items:
- httpd
- nginx
- vsftp ################################################################################ #迭代嵌套子变量
#实现新建三个用户三个组,三个用户分别归属于三个不同组
---
- host: websrvs
remote_user: root task:
- name: create some groups
group: name={{ item }}
when: ansible_distribution_major_version == "7"
with_items:
- g1
- g2
- g3
- name: create some users
user: name={{ item.name }} group={{ item.group }}
with_items:
- { name: 'user1', group: 'g1' }
- { name: 'user2', group: 'g2' }
- { name: 'user3', group: 'g3' } ###################################################################################
#for循环
---
- host: websrvs
remote_user: root
vars:
ports: #ports为变量名称,其中包含了一个量变列表
- 81
- 82
- 83
tasks:
- name: copy conf
tmplate: src=for1.conf.j2 dest=/data/for1.conf #==============================
#for1.conf.j2配置文件
{% for port in ports %} #port为变量,从已经定义的ports变量列表中取值
server{
listen {{ port }} #port作为变量,用括号表示
}
{% endfor %} #以for开头,对应以endfor结尾
最终实现结果:
server{
listen 81
}
server{
listen 82
}
server{
listen 82
} ############################################################################
#for循环进阶应用,键值对
---
- host: websrvs
remote_user: root
vars:
ports: #ports为变量名称,其中包含了一个量变列表
- web1:
port: 8080
name: web1.shykoo.com
- web2:
port: 8081
name: web2.shykoo.com
- web1:
port: 8082
name: web3.shykoo.com
tasks:
- name: copy conf
tmplate: src=for2.conf.j2 dest=/data/for2.conf
#===============================
#for2.conf.j2配置文件
{% for P in ports %} #P为变量,从已经定义的ports变量列表中取值
server{
listen {{ P.port }} #P.port取键值对中对应的数据
servername {{ P.name }}
}
{% endfor %} #以for开头,对应以endfor结尾
最终执行结果:
server{
listen 8080
servername web1.shykoo.com
}
server{
listen 8081
servername web2.shykoo.com
}
server{
listen 8082
servername web3.shykoo.com
} ############################################################
#if的使用
- host: websrvs
remote_user: root
vars:
ports: #ports为变量名称,其中包含了一个量变列表
- web1:
port: 8080
#name: web1.shykoo.com #此处被注释
- web2:
port: 8081
name: web2.shykoo.com
tasks:
- name: copy conf
tmplate: src=for3.conf.j2 dest=/data/for3.conf
#===============================
#for2.conf.j2配置文件
{% for P in ports %} #P为变量,从已经定义的ports变量列表中取值
server{
listen {{ P.port }} #P.port取键值对中对应的数据,固定存在
{% if P.name is defined %} #P.name如果被定义,那么servername将同时被定义
servername {{ P.name }} #如果if成立P.name从配置文件中取值
{% endif %} # if开头,endif结尾
}
{% endfor %} #以for开头,对应以endfor结尾
最终执行结果:
server{
listen 8080 #这边因为P.name被注释没有被定义,所以只有端口,没有P.name
}
server{
listen 8081
servername web2.shykoo.com
}

ansible-play中for,if的使用的更多相关文章

  1. ansible笔记(1)在centos中安装ansible

    ansible笔记():ansible的基本概念 一些基础概念 ansible是什么? 它是一个"配置管理工具",它是一个"自动化运维工具",如果你没有使用过任 ...

  2. 二、Ansible中playbook的变量

    先看看debug模块的使用: msg:输出调试信息 var:将某个任务执行的输出作为变量传给debug模块,debug模块将其打印输出 verbosity:debug的任务级别   1:在playbo ...

  3. Linux中ansible批量管理软件部署及剧本编写

    服务器版本信息: Centos6.9 [root@db02 ~]# uname -a Linux db02 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29: ...

  4. ansible中常用模块详解

    ansible中常用的模块详解: file模块 ansible内置的可以查看模块用法的命令如下: [root@docker5 ~]# ansible-doc -s file - name: Sets ...

  5. ansible中的playbook详解

    首先简单说明一下playbook,playbook是什么呢?根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等 ...

  6. Ansible中playbook的变量

    转自:http://www.cnblogs.com/lemon-le/p/6862788.html 先看看debug模块的使用: msg:输出调试信息 var:将某个任务执行的输出作为变量传给debu ...

  7. Linux centosVMware 自动化运维Ansible介绍、Ansible安装、远程执行命令、拷贝文件或者目录、远程执行脚本、管理任务计划、安装rpm包/管理服务、 playbook的使用、 playbook中的循环、 playbook中的条件判断、 playbook中的handlers、playbook实战-nginx安装、管理配置文件

    一.Ansible介绍 不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读 安装十分简单,ce ...

  8. ansible中定义变量的若干方法

    Ansible支持十几种定义变量的方式 根据优先级排序的定义方式: Inventory变量 Host Facts变量 Playbook变量 Playbook提示变量 变量文件 命令行变量 1.Inve ...

  9. ansible执行playbook时间显示的python脚本

    import datetime import os import time from ansible.plugins.callback import CallbackBase class Callba ...

  10. Ansible简介及常用模块

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

随机推荐

  1. Java解析XML文件的常用方法介绍

    XML是一个可扩展标记语言.很多时候我们需要进行数据交换,同时也存在跨平台使用,XML文件对这些需求提供了很好的帮助! 对于Java来说,XML常见的用途就是保存数据和配置,这就涉及了对XML文件的增 ...

  2. THUSCH 2017 大魔法师(矩阵乘法+线段树)

    题意 https://loj.ac/problem/2980 思路 区间修改考虑用线段树维护.由于一段区间的 \(A,B,C\) 可以表示成由原来的 \(A,B,C\) 乘上带上系数再加上某一个某个常 ...

  3. krpano 常用标签

    <krpano></krpano>根标签 相当于 <body> <scene></scene>一个全景图场景 <image> 图 ...

  4. Vim里常见的几个不可见字符

    Vim里常见的几个不可见字符:^@ = 0x00 Null值^I = 0x09 水平制表^J = 0x0A 换行^M = 0x0D 回车

  5. Docker五大优势:持续集成、版本控制、可移植性、隔离性和安全性

    随着Docker技术的不断成熟,越来越多的企业开始考虑使用Docker.Docker有很多的优势,本文主要讲述了Docker的五个最重要优势,即持续集成.版本控制.可移植性.隔离性和安全性. 对于Do ...

  6. 多个vlan之间路由

    通过这节课,我们学习到了如何利用两个交换机,创建多个vlan口,将多台Pc之间互通今天学习到了新的指令:interface vlan-interfacee ?                     ...

  7. SpringBoot之AOP

    AOP:面向切面编程,相当于OOP面向对象编程. Spring的AOP的存在目的是为了解耦,AOP可以让一组类共享相同的行为. Spring支持AspectJ的注解切面编程: (1)使用@Aspect ...

  8. js 格式化带时区的日期

    /** * 格式化带时区的日期 */ function formatDate(date) { var arr = date.split("T"); var d = arr[0]; ...

  9. load data语句实验报告

    1.创建和选择数据库 如果管理员在设置权限时为您创建数据库,则可以开始使用它.否则,您需要自己创建它: 创建数据库不会选择它来使用; 你必须明确地这样做.要创建menagerie当前数据库,请使用以下 ...

  10. vue-文字块收缩与展开功能

    在设计图中要求的效果为: 文字限制超过9行即隐藏,并显示“展开”按钮,点击按钮进行切换,控制文本全部展示和部分展示 在原本的实现过程中,使用了红框内的判断方式: 页面代码: 样式则规定嵌套元素给一个死 ...