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)的优点,实现了批量系统配置. ...
随机推荐
- APIO 2014 回文串(Manacher+后缀自动机+倍增)
题意 https://www.lydsy.com/JudgeOnline/problem.php?id=3676 思路 好像还是回文自动机裸体,但是 \(\text{Manacher}\) +后缀自动 ...
- Thinkphp5背景图片的引入~ 以及图片的引入
将图片信息从数据库查询 再渲染于前台页面
- flyway
flyway主要基于6种基本命令:migrate, clean, info, validate, baseline, repair flyway如何运作:https://flywaydb.org/ge ...
- golang Mysql -- Tx
Transaction 事务 事务处理是数据的重要特性.尤其是对于一些支付系统,事务保证性对业务逻辑会有重要影响.golang的mysql驱动也封装好了事务相关的操作.我们已经学习了db的Query和 ...
- git\CentOS6.5中gitlab安装教程
一.Git 起源: Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本 ...
- P2822 组合数问题
传送门 思路: 利用公式: C( n,r ) = C( n-1,r ) + C( n-1,r-1 ) 由此可以将计算 C( n,r ) 的过程化为加法来做. 可以看出,C( n,r ) 其实就是求杨辉 ...
- 查看linux是ubuntu还是centos
方式一: radhat或centos存在: /etc/redhat-release 这个文件[ 命令 cat /etc/redhat-release ] ubuntu存在 : /etc/lsb-rel ...
- PyQt5——高级控件
PyQt5高级控件使用方法详见:https://blog.csdn.net/jia666666/article/list/4?t=1& PyQt5高级控件汇总: 1.QTableView 2. ...
- Subversion ----> svnserve.conf / authz / passwd / hooks-env.tmpl <<翻译笔记>>
svnserve.conf 假如你使用这个文件去允许访问这个仓库,那么这个文件控制着svnserve后台进程的配置.(但是如果你只是允许通过http和/或者 file:URLs,则这个文件就不起作用了 ...
- linux环境下安装使用selenium Chrome
安装驱动 http://chromedriver.storage.googleapis.com/index.html 下载对应chrome浏览器版本的驱动程序 chmod +x chromedrive ...