ansible-playbook用法
一、playbook用法
1、playbook的执行文件为YAML语言编写,所以文件名为xxx.yml。YAML语法可以参考https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html#id1
2、下面以安装httpd软件来作讲解
示例playbook:
[root@localhost test]# cat httpd.yml
--- #文件起始行,也可以省略。但是不建议省略
- hosts: docker #docker表示远程执行这个yml文件的主机组,这里也可以指定对应的主机ip,或者正则表达
remote_user: root #远程执行命令的用户
vars: # vars以下为参数,可根据架构来选择是否有参数
pkg: httpd # 定义变量名为pkg,值为httpd,后续可以使用{{ pkg }}来引用
tasks: # tasks后续跟执行的任务
- name: uninstall httpd # 自定义任务名
yum: name={{ pkg }} state=absent # 任务执行命令, 这里表示用yum模块来卸载 httpd软件, {{ pkg }}引用vars中已经定义的变量,state表示对软件的操作,这里表示卸载
tags: unhttpd # tags为标签,任务都可以加上标签名,通过tags我们可以执行特定的任务,例如:ansible-playbook -t unhttpd httpd.yml 表示执行http.yml中tags为unhttpd的任务
- name: install http
yum: name={{ pkg }} state=installed #这里表示用yum模块来安装 httpd软件
tags: httpd
- name: copy cfg
copy: src=/opt/test/httpd.conf dest=/etc/httpd/conf/ #这里表示调用copy模块来将src的文件copy到目的地dest指定的位置
notify: restart service # notify 可以理解为触发器,与handlers配合起来使用。 当notify标注的任务被成功执行后,就会触发对应的handlers任务执行
tags: copy
- name: start service
service: name=httpd state=started enabled=yes
tags: httpd
handlers: #handlers和notify配合使用
- name: restart service # 任务名需要和notify名称一致,多个相同的任务可以使用同一个notify名称来触发同一个handlers任务,handlers任务可以为多个
service: name=httpd state=restarted
3、执行playbook
-C表示执行检查,不会对系统做改变,会完整的运行所有任务,检查playbook任务是否正确:
#ansible-playbook -C httpd.yml
执行playbook,根据任务顺序执行,系统会根据任务有所变化:
# ansible-playbook httpd.yml
执行结果说明:
绿色: 执行成功,不需要做改变(这里好像并不是一定不改变)
红色: 执行失败
黄色: 执行成功,并且系统有变化
执行结果颜色可以通过ansible的配置文件进行私人定制。
4、关于模块的使用
ansible-doc --list #可以列出所有可使用模块,核心模块:http://ansible.com.cn/docs/modules_core.html 额外模块:http://github.com/ansible/ansible-modules-extras
ansible-doc -s Module_Name #查询模块的使用方法 ,如: ansible-doc -s yum 查询yum模块的使用方法
ansible-doc Module_Name #更详细的展示模块的使用,和linux中的man手册类似
5、关于参数的定义
参数优先级: 命令行>局部>全局
♦ 通过命令指定,优先级最高
ansible-playbook -e varname=value xxx.yml
♦ ansilbe setup facts远程主机的多有变量都可以直接使用可以在执行ansible命令的时候给与变量值
ansible hostip -m setup #可以查询到ansible系统的一些信息,其中就包括可以直接使用的变量
♦ 在/etc/ansible/hosts中定义
普通变量;主机组中单独定义,优先级高于公共变量
公共(组)变量:针对主机组中所有主机定义统一变量
[docker]
172.17.0.2 http_port=80 #普通变量
172.17.0.3 http_port=90
[docker:vars]
http_port=100 #公共变量
♦ 在playbook中定义
vars:
- var1: value1
- var2: value2
♦ 在role中定义
需要一个固定的vars目录来存放编辑变量的文件,后续roles的使用中会讲到
ansible-playbook用法的更多相关文章
- ansible playbook模式及语法
一.什么是playbook及其组成 什么是playbook playbook 翻译过来就是"剧本" playbook的组成 play:定义的是主机的角色 task:定义的是具体执行 ...
- ansible playbook详解
ansible playbook是由yml语法书写,结构清晰,可读性强,所以必须掌握yml基础语法 语法 描述 缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成,不能使用tabs键 ...
- 02 . Ansible高级用法(运维开发篇)
自动化任务简介 假设我们要在10台linux服务器上安装一个nginx服务,手动是如何做的? # 第一步, ssh登录NUM(1,n)服务器 # 第二步,输入对应服务器密码 # 第三步,执行命令: y ...
- (三)ansible playbook
一,YAML语法 YAML的语法和其他高阶语言类似并且可以简单表达清单.散列表.标量等数据结构.(列表用横杆表示,键值对用冒号分割,键值对里又可以嵌套另外的键值对) YAML文件扩展名通常为.yaml ...
- Ansible playbook API 开发 调用测试
Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible ...
- ansible playbook实践(四)-如何调试写好的playbook文件
有时,我们写了一个长长,功能很强悍的yaml文件,但是,我们有可能会担心,写的yaml文件是否正确,是否有漏洞危机,毕竟是要修改线上的机器,那么,有可能我们可以从以下几个检查维度来进行,确保在大规模应 ...
- ansible playbook批量改ssh配置文件,远程用户Permission denied
最近手里的数百台服务器需要改/etc/ssh/sshd_config的参数,禁止root直接登陆,也就是说 [root@t0 ~]# cat /etc/ssh/sshd_config | grep R ...
- ansible笔记(11):初识ansible playbook(二)
ansible笔记():初识ansible playbook(二) 有前文作为基础,如下示例是非常容易理解的: --- - hosts: test211 remote_user: root tasks ...
- ansible笔记(10):初识ansible playbook
ansible笔记():初识ansible playbook 假设,我们想要在test70主机上安装nginx并启动,我们可以在ansible主机中执行如下3条命令 ansible test70 -m ...
- Ansible playbook 批量修改服务器密码 先普通后root用户
fsckzy Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...
随机推荐
- CAD 在ARCGIS中的坐标系问题
近期在使用服务(文本写入dxf方式)导出CAD的时候发现导出的CAD文件和原始数据在ArcMap中叠加后不能重合,出现了错位的现象. 查看CAD文件后发现CAD的坐标系及投影和数据不一致导致的.遇到这 ...
- Python-函数小结
原文出处,如有侵权,请联系删除. 用户自定义.py文件 如果你已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以在该文件的当前目录下启动Python解释器,用from abs ...
- UDK Stat命令
Stat命令(chs en)提供了游戏和引擎各个方面的实时统计信息,输入不同参数会在屏幕HUD上显示对应统计数据. 非Shipping版的UDK才会启用STATS宏,统计逻辑才会编译进exe,才能使 ...
- go的生产者-消费者模式
package main import ( "fmt" "math/rand" "time" ) // 数据生产者 func produce ...
- Kubernetes入门-集群安装
Kubernetes是谷歌开源的容器集群编排平台,是一个完备的分布式系统支撑平台,为容器化应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,具有强大的故障发现和自我修复机制.服务滚动升级 ...
- scp远程拷贝文件及文件夹
scp : 远程copy 命令 -r : 递归copy 从Linux Copy 到 Linux 从Linux Copy 到 Windows (当前目录使用. 就可以了) scp -r root@10. ...
- LA3971 组装电脑
思路:二分,就是在不超过b的预算下,使得品质的最小值最大化.关键还是判断函数吧. 假设答案为x,判断函数,就是每一个种类的配件的品质最基本的品质要大于x,然后找出最小的值.这样的配件品质之和的价格要小 ...
- 课堂练习6--统计txt文本
统计文本中26个字母的频率: package bao; import java.io.BufferedReader; import java.io.FileReader; import java.io ...
- 我用Python爬取了李沧最近一年多的二手房成交数据得出以下结论
前言 去年年底,博主有购房的意愿,本来是打算在青岛市北购房,怎奈工作变动,意向转移到了李沧,坐等了半年以后,最终选择在红岛附近购置了期房. 也许一些知道青岛红岛的小伙伴会问我,为什么会跑到那鸟不拉屎的 ...
- 如何在FineUIMvc(ASP.NET MVC)视图中绑定多个模型?
起因 这是知识星球内的一个网友提出的,按理说ASP.NET MVC中一个视图只能绑定一个模型(Model),在视图顶部标识如下: @model IEnumerable<FineUICore.Ex ...