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 ...
随机推荐
- 【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题
foreach语句使用总结 增强for(part1:part2){part3}; part2中是一个数组对象,或者是带有泛性的集合. part1定义了一个局部变量,这个局部变量的类型与part2中的对 ...
- HDU 1010 Tempter of the Bone【DFS经典题+奇偶剪枝详解】
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- HDU 1013 Digital Roots【字符串,水】
Digital Roots Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- HDU2988-Dark roads,HDU1233-还是畅通工程-最小生成树
最小生成树: 中文名 最小生成树 外文名 Minimum Spanning Tree,MST 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的 ...
- HDU_1257
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 从零开始学习前端开发 — 10、HTML5新标签及表单控件属性和属性值
一.html5新增标签 1.结构性标签 header 定义网页的头部 nav 定义网页的导航 footer 定义网页的底部 section 定义网页的某个区域 article 定义网页中的一篇文章 a ...
- java if与for循环的题
//打印一个4*5的空心长方形 /* for (int i = 0; i < 5;i++ ) { if (i == 0 | i == 4) { ...
- 初识RabbitMQ,附RabbitMQ+PHP演示实例
RabbitMQ是一个在AMQP基础上实现的企业级消息系统.何谓消息系统,就是消息队列系统,消息队列是""消费-生产者模型""的一个典型的代表,一端往消息队列中 ...
- 最常用Python开源框架有哪些?
Python开源框架有很多,像Django.Flask.webpy等等,但哪些是最常用到的呢?我们收集了一些Python使用者的宝贵意见,把他们认为最常用的Python开源框架简单的介绍给大家. 一. ...
- SSL协议之数据加密过程详解
前言 总括: 原文博客地址:SSL协议之数据加密过程详解 知乎专栏&&简书专题:前端进击者(知乎)&&前端进击者(简书) 博主博客地址:Damonare的个人博客 生活 ...