ansible playbook实践(三)-yaml文件写法
playbook基于YAML语法来编写,基本语法规则如下:
1.大小写敏感
2.使用缩进表示层级关系
3.缩进时不允许使用Tab键,只允许使用空格
4.缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
5. # 表示注释,从这个字符一直到行尾,都会被解析器忽略。
6. 用---表示开头
YAML 支持三种数据结构:
对象:键值对的集合,用冒号:作为键值分隔
数组:一组按次序排列的值,用减号-作为标识
纯量:单个的、不可再分的值,如字符串,数值,日期等
例子:
---
- hosts: web
remote_user: root
tasks:
- name: ping test
ping: null
这个playbook表示去标识为web机的远程主机上,用root用户去执行名为ping test的任务,它使用ping模块。其中ping test为自己定义的任务名,会在稍后的执行输出中展示出来。
其对应的json结构为:
[
{
"hosts": "web",
"remote_user": "root",
"tasks": [
{
"name": "ping test",
"ping": null
}
]
}
]
运行:
root@localhost playbook]# ansible-playbook ping.yml
PLAY [web] ********************************************************************************
TASK [Gathering Facts] ********************************************************************
ok: [192.168.40.72]
ok: [192.168.40.73]
TASK [ping test] **************************************************************************
ok: [192.168.40.73]
ok: [192.168.40.72]
PLAY RECAP ********************************************************************************
192.168.40.72 : ok=2 changed=0 unreachable=0 failed=0
192.168.40.73 : ok=2 changed=0 unreachable=0 failed=0
来写一个更实用的playbook:
[root@localhost playbook]# cat add_user.yml
---
- hosts: web
remote_user: root
gather_facts: true
tasks:
- name: Add users
user: name={{ item }} state=present groups=wheel
with_items:
- testuser1
- testuser2
它表示标识为web的远程主机执行名为:Add users的任务,它使用user模块,这里面还用到了变量的用法,{{ item }},它最后会被值testuser1 和 testuser2 替换,总共添加两个用户。这个对应json结构如下:
[
{
"hosts": "web",
"remote_user": "root",
"gather_facts": true,
"tasks": [
{
"name": "Add users",
"user": "name={{ item }} state=present groups=wheel",
"with_items": [
"testuser1",
"testuser2"
]
}
]
}
]
[root@localhost playbook]# ansible-playbook add_user.yml
PLAY [web] ********************************************************************************
TASK [Gathering Facts] ********************************************************************
ok: [192.168.40.73]
ok: [192.168.40.72]
TASK [Add users] **************************************************************************
changed: [192.168.40.73] => (item=testuser1)
changed: [192.168.40.72] => (item=testuser1)
changed: [192.168.40.72] => (item=testuser2)
changed: [192.168.40.73] => (item=testuser2)
PLAY RECAP ********************************************************************************
192.168.40.72 : ok=2 changed=1 unreachable=0 failed=0
192.168.40.73 : ok=2 changed=1 unreachable=0 failed=0
再执行一遍,观察其输出与第一遍的差别:
[root@localhost playbook]# ansible-playbook add_user.yml
PLAY [web] ********************************************************************************
TASK [Gathering Facts] ********************************************************************
ok: [192.168.40.73]
ok: [192.168.40.72]
TASK [Add users] **************************************************************************
ok: [192.168.40.73] => (item=testuser1)
ok: [192.168.40.72] => (item=testuser1)
ok: [192.168.40.73] => (item=testuser2)
ok: [192.168.40.72] => (item=testuser2)
PLAY RECAP ********************************************************************************
192.168.40.72 : ok=2 changed=0 unreachable=0 failed=0
192.168.40.73 : ok=2 changed=0 unreachable=0 failed=0
其中第二次的changed=0。
ansible是很多模块的执行是具有幂等性的,即ansible检测到远程主机已经满足了最终执行完的条件就不再执行命令。
ansible playbook实践(三)-yaml文件写法的更多相关文章
- ansible playbook实践(四)-如何调试写好的playbook文件
有时,我们写了一个长长,功能很强悍的yaml文件,但是,我们有可能会担心,写的yaml文件是否正确,是否有漏洞危机,毕竟是要修改线上的机器,那么,有可能我们可以从以下几个检查维度来进行,确保在大规模应 ...
- ansible playbook实践(二)-基础相关命令
ansible相关的命令: ansible 用来执行ansible管理命令 ansible-doc 用来获取模块的帮助文档 ansible-playbook 当有众多任务时,可编写成playbook ...
- .net core i上 K8S(三)Yaml文件运行.netcore程序
上一章我们通过kubectl run简单运行了一个.netcore网站,但实际的开发中,我们都是通过yaml来实现的. 1.编写yaml文件 关于yaml文件的格式在此就不多描述了,不熟悉的可以去网上 ...
- ansible playbook实践(一)-基础环境安装
1 介绍 Ansible 是一个系统自动化工具,用来做系统配管理,批量对远程主机执行操作指令. 2 实验环境 ip 角色 192.168.40.71 ansible管控端 192.168.40.72 ...
- Ansible Playbook 简介
我们去远程执行命令时要使用 command 模块,拷贝文件时要使用 copy 模块,如果我们要操作的东西很多,那就要执行很多条不同模块的命令Playbook 是一个 yaml 配置文件,我们可以把不同 ...
- 自动化运维工具——ansible剧本playbook(三)
一.Playbook--Ansible剧本 playbook是由一个或多个 "play"组成的列表 play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的ta ...
- (三)ansible playbook
一,YAML语法 YAML的语法和其他高阶语言类似并且可以简单表达清单.散列表.标量等数据结构.(列表用横杆表示,键值对用冒号分割,键值对里又可以嵌套另外的键值对) YAML文件扩展名通常为.yaml ...
- ansible实践2-拷贝文件或目录
ansible testhost -m copy -a "src=/etc/ansible dest=/tmp/ansibletest owner=root group=root mo ...
- Ansible playbook循环实践总结<一>
1.标准Loops 标准loops可以直接减少task的次数,如下: [root@zero01 playbook]# vi loops.yaml --- - hosts: all gather_fac ...
随机推荐
- Spring(一)Spring的第一滴血
前言 开始工作了,但是一进来公司本来是做爬虫和数据分析的,但是走了一个后端的,导致我必须要去顶替他的工作.因为这个项目使用的是Spring. SpringMVC.Hibernate所以我又要去回忆一下 ...
- 2017 ICPC/ACM 沈阳区域赛HDU6223
Infinite Fraction Path Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java ...
- BZOJ3916: [Baltic2014]friends
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3916 复习一下hash(然后被傻叉错误卡了半天TAT... 取出一个字串:h[r]-h[l-1 ...
- HDU--2015
偶数求和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- c#中winform窗口的隐藏与显示
最近在做一个C# 的winform客户端程序,要实现在打开新的窗口时将原来打开的窗口关闭,但是想在关闭新打开的窗口是将原来的那个窗口再次打开,在网上查找各种资料,找了很多代码,都是通过窗口.Hide( ...
- 【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-上位机源码
[CC2530入门教程-增强版]基础技能综合实训案例(基础版)-上位机源码 广东职业技术学院 欧浩源 一.需求分析 按照指定参数打开串口,与测控终端建立数据传输通道,并根据应用要求实现程序逻辑,具体 ...
- linux安装navicat全程记录
国庆期间自己在试着用linux(ubuntu),献上navicat安装方法,以及很多教程里没有写的一些小东西 step1: 去navicat官网下载安装包,网址:http://www.navicat. ...
- UE4/Unity3D中同时捕获多高清摄像头的高效插件
本文主要讲实现过程的一些坑. 先说下要实现的目标,主要功能在UE4/Unity中都要用,能同时捕获多个摄像头,并且捕获的图片要达到1080p25桢上,并且需要经过复杂的图片处理后丢给UE4/Unity ...
- Centos硬盘IO性能检测命令iostat[转]
Centos硬盘IO性能检测命令iostat[转] 在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都 ...
- 已有使用Key登陆机器,创建新账号并使用新Key登陆
背景信息:CentOS6.9机器,目前是使用Key进行登陆的,现在需要创建一个新账号并使用新生成的Key进行登陆使用 使用连接Linux工具:XShell 1.在当前机器中创建一个新用户: # use ...