#迭代循环的使用
#实现同时新建三个文件,同时部署三个服务
---
- 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. BalkanOI 2018 Parentrises(贪心+基础DP)

    题意 https://loj.ac/problem/2713 思路 对于 \(\text{P1}\) 的档,首先可以看出 \(O(n^3)\) 的方法,即用 \(O(n^3)\) 的 \(\text{ ...

  2. vue安装之后的报错处理---chromedriver@2.35.0 install: `node install.js`

    报错:chromedriver@2.35.0 install: `node install.js` 这个错误的解决方法就是在你创建的项目目录,比如你创建的项目叫myVue,然后你就要在myVue这个目 ...

  3. Scss 与 Sass 是什么,他们的区别在哪里?

    转载自:http://yunkus.com/difference-between-scss-sass/ 要想了解Scss 与 Sass 是什么以及他们的区别又在哪里,我们不过不先从他们各自的定义说起. ...

  4. CSS布局(圣杯、双飞翼、flex)

    圣杯布局(float + 负margin + padding + position) <!DOCTYPE html> <html> <head> <meta ...

  5. 在阿里云开源镜像站中下载centOS7

    镜像的选择 第一步.下载镜像 阿里云开源镜像站:http://mirrors.aliyun.com/ 选择centos进入 如下图: 如下图:选择centos7 再选择isos(镜像目录) 继续下一步 ...

  6. Ubuntu - Start - 必要软件安装

    1.安装Chromium浏览器 sudo apt install chromium-browser 如果出错, 先更新下apt sudo apt update 2. 安装rime输入法 sudo ap ...

  7. [Linux] 关闭防火墙以及开放端口

    一. service iptables stop 临时关闭, chkconfig iptables off完全关闭 service iptables status状态, service iptable ...

  8. prometheus相关文章

    prometheus book https://yunlzheng.gitbook.io/prometheus-book/ 开发自己的分布式监控Prometheus Exporter时遇到的坑 htt ...

  9. Asp.Net MVC 从客户端<a href="http://www....")中检测到有潜在危险的 Request.Form 值

    Asp.Net MVC应用程序, Framework4.0: 则需要在webconfig文件的 <system.web> 配置节中加上 <httpRuntime requestVal ...

  10. erlang下lists模块sort(排序)方法源码解析(二)

    上接erlang下lists模块sort(排序)方法源码解析(一),到目前为止,list列表已经被分割成N个列表,而且每个列表的元素是有序的(从大到小) 下面我们重点来看看mergel和rmergel ...