#迭代循环的使用
#实现同时新建三个文件,同时部署三个服务
---
- 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. CF1062E Company

    CF1062E Company 链接 cf luogu 题目大意 给定一颗树,有若干个询问,每个询问给出 l,r,要求编号为 ll~rr 的点任意删去一个之后剩余点的 LCA 深度最大,输出删去点的编 ...

  2. Linux——高效玩转命令行

    [0]统计文件or压缩文件的行数 zcat file.gz | sed -n '$='   #迅速.直接打印出多少行.-n 取消默认的输出,使用安静(silent)模式    '$='  不知道是什么 ...

  3. vue--js里跳转页面

    我们知道在vue里进行页面跳转的话,我们使用<router-link>这个标签 那在构造函数里我们不能直接操纵DOM元素,我们又该如何进行页面跳转呢? 步骤1: 我们先在DOM里设置三个按 ...

  4. Ocelot概述

    Ocelot是一个基于netcoreapp2.0构建,.NET Core框架下的开源Api网关项目,用于开发基于.NET微服务架构或面向服务架构系统的统一入口.

  5. setTimeout setInterval 计时器

    setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 返回值:返回一个 ID(数字),可以将这个ID传递给 clearTimeout() 来取消执行. 案例: 点击按钮开始,停止时 ...

  6. java中捕获Oracle异常

    try{ } catch (Exception e){ String msg=.getMessage(): int index= msg. toUpperCase(). indexOf("O ...

  7. spring AOP AspectJ 定义切面实现拦截

    总结记录一下AOP常用的应用场景及使用方式,如有错误,请留言. 1.  讲AOP之前,先来总结web项目的几种拦截方式    A:  过滤器 使用过滤器可以过滤URL请求,以及请求和响应的信息,但是过 ...

  8. English trip EM1 - PE2 My My name is... Teacher:Lamb Key: introduce myself

    课上内容(Lesson) Lamb let us does introduce myself. Make a "hangman" game at warm-up . How to ...

  9. 移动端遇到的问题小结--video

    本篇主要是针对Android系统,所遇到的问题. 1. video的全屏处理: 这里说的全屏是指针对浏览器的全屏,而不是整个手机的全屏.要想全屏效果只需对video标签加   webkit-plays ...

  10. Hive分区表的导入与导出

    最近在做一个小任务,将一个CDH平台中Hive的部分数据同步到另一个平台中.毕竟我也刚开始工作,在正式开始做之前,首先进行了一段时间的练习,下面的内容就是练习时写的文档中的内容.如果哪里有错误或者疏漏 ...