ansible-play中for,if的使用
#迭代循环的使用
#实现同时新建三个文件,同时部署三个服务
---
- 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的使用的更多相关文章
- ansible笔记(1)在centos中安装ansible
ansible笔记():ansible的基本概念 一些基础概念 ansible是什么? 它是一个"配置管理工具",它是一个"自动化运维工具",如果你没有使用过任 ...
- 二、Ansible中playbook的变量
先看看debug模块的使用: msg:输出调试信息 var:将某个任务执行的输出作为变量传给debug模块,debug模块将其打印输出 verbosity:debug的任务级别 1:在playbo ...
- Linux中ansible批量管理软件部署及剧本编写
服务器版本信息: Centos6.9 [root@db02 ~]# uname -a Linux db02 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29: ...
- ansible中常用模块详解
ansible中常用的模块详解: file模块 ansible内置的可以查看模块用法的命令如下: [root@docker5 ~]# ansible-doc -s file - name: Sets ...
- ansible中的playbook详解
首先简单说明一下playbook,playbook是什么呢?根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等 ...
- Ansible中playbook的变量
转自:http://www.cnblogs.com/lemon-le/p/6862788.html 先看看debug模块的使用: msg:输出调试信息 var:将某个任务执行的输出作为变量传给debu ...
- Linux centosVMware 自动化运维Ansible介绍、Ansible安装、远程执行命令、拷贝文件或者目录、远程执行脚本、管理任务计划、安装rpm包/管理服务、 playbook的使用、 playbook中的循环、 playbook中的条件判断、 playbook中的handlers、playbook实战-nginx安装、管理配置文件
一.Ansible介绍 不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读 安装十分简单,ce ...
- ansible中定义变量的若干方法
Ansible支持十几种定义变量的方式 根据优先级排序的定义方式: Inventory变量 Host Facts变量 Playbook变量 Playbook提示变量 变量文件 命令行变量 1.Inve ...
- ansible执行playbook时间显示的python脚本
import datetime import os import time from ansible.plugins.callback import CallbackBase class Callba ...
- Ansible简介及常用模块
一.基础介绍 1.简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置. ...
随机推荐
- Python游戏编程入门3
用户输入:Bomb Catcher游戏本章介绍使用键盘和鼠标获得用户输入.包括如下主题:学习pygame事件学习实时循环学习键盘和鼠标事件学习轮询键盘和鼠标的状态编写Bomb Catcher游戏 1本 ...
- 解决 Cannot uninstall 'pyparsing' 问题
参考 pyparsing 无法卸载导致安装 matplotlib 出错 解决 Cannot uninstall 'pyparsing' 问题 在安装 pydot 时遇到依赖 pyparsing 无法更 ...
- Docker学习(转)
1.简介 Docker是一个开源的应用容器引擎:是一个轻量级容器技术: Docker支持将软件编译成一个镜像:然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像: 运行中的这 ...
- vue--vant组件库field输入框
安装vant UI框架: cnpm install vant –-save-dev 导入组件-在main.js里: import Vant from 'vant'; import'vant/lib/v ...
- react项目中页面跳转、刷新及获取网络状态
// 页面跳转 window.location.href = 'http://speedtest.wangxiaotong.com/' // 页面刷新 window.location.reload() ...
- springcloud采坑--Zuul上传文件报java.nio.charset.IllegalCharsetNameException: UTF-8;boundary=sqgzzmMxl1UPdIp0IAYnQgUIAr9yNewVAzKIX
报错日志: 2018-12-17 10:01:19,688 ERROR [io.undertow.request] (default task-3) UT005023: Exception handl ...
- SQL查询【根据生日计算】
根据生日日期,获取当前年龄.年龄单位. Select Case when DateDiff(Year, BirthDate, GetDate()) > 0 then DateDiff(Year, ...
- Caffe on Mac OS X 10.11
在Mac环境安装Caffe环境(CPU_ONLY) http://blog.csdn.net/xidiancoder/article/details/52081519 有问题 http://blo ...
- RePr: Improved Training of Convolutional Filters
关键点: 1.关于filter正交 将一层中的一个$k \times k \times c$的卷积核展开为$k * k * c$的向量,表示为$f$.一层中有$J_{\ell}$个卷积核,$\bold ...
- nginx配置二级目录,反向代理不同ip+端口
场景描述: 通过二级目录(虚拟目录,应用程序)的方式访问同一ip+端口的不同应用,例如location是用户使用页面,location/admin/是管理页面,location部署在192.168.1 ...