playbook介绍
来源:互联网 发布:windows basic配色方案 编辑:程序博客网 时间:2024/05/18 12:40
本文介绍了YAML,playbook的概念,特点,元素,组件,以及运行playbook。
简介
playbook — 跑剧本
playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。
YAML
YAML是一个可读性高的用来资料序列的格式。YAML参考了多种编程语言,包括:XML,C,Python,Perl等。
YAML的特点
可读性好和脚本语言的交互性好使用实现语言的数据类型易于实现可基于流来处理表达能力强,扩展性好
YAML的用途
由于实现简单,解析成本低,YAML适合作为脚本语言使用
YAML比较适合做序列化。因为它是宿主语言数据类型直转的。
写YAML要比写XML快得多(无需关注标签或引号),并且比ini文档功能更强。
其很强的阅读性,用于调试过程中dump出信息供分析也是一种比较方便的做法。
YAML的缺陷
YAML没有定义自己的数据类型,而是使用实现语言的数据类型,所以一个YAML文件,在不同的语言中解析后得到的数据类型可能不同,导致出现不同语言间数据流转出现兼容性问题。
YAML的格式
YAML的结构通过空格以类似大纲的缩进排列方式展示,序列中的连续项用 -
加空格代表,map中的键值对用 :
分隔。
下面是一个结构示例:
- hosts:172.25.254.251 //定义主机vars: //定义变量 var1:value var2:valuetasks: //定义任务 - name: //后面输入任务名称,并且可使用模块来执行具体任务handlers: //定义触发通知所做的操作。和tasks一样,用模块定义任务 - name:remote_user: //远程主机执行任务时的用于(一般无需指定,默认为root)
YAML的扩展名为
.yaml
或.yml
,例如test.yaml
YAML示例
- name:test.yaml hosts:test //定义主机组 vars: worker_processes:4 //进程数为4 max_open_file:65535 //最多打开65535个文件 remote_user:root //远程主机以root身份执行任务(可以不定义) tasks: //定义任务 - name:ensure apache is the latest version. //任务名称 yum:pkg=httpd state=latest //调用yum模块检测apache是否为最新,否则安装为最新。 - name:create apache config file. template:src=/usr/local/amsible/template/apache.j2 dest=/etc/httpd/http.conf notify: //调用handlers中的内容 - restart apache //handlers中定义的名字 - name:ensure apache is running service:name=httpd state=started handlers: //也是一些task的列表,通过名字来引用,它们和一般的task并没有什么区别。 - name:restart apache service:name=httpd state=restart
1、notify这个action可用于在每个play的最后被触发,这样可以避免多次有改变发生时每次都执行指定的操作
2、handlers 由通知者进行 notify, 如果没有被 notify,handlers 不会执行。不管有多少个通知者进行了 notify,等到play中的所有task执行完成之后,handlers 也只会被执行一次。handlers 最佳应用场景是用来重启服务,或者触发系统重启操作。除此以外很少用到了。
个人觉得这个yaml的写法让我想起了puppet中的site.pp文件的写法,两者真的十分相似,基本上就是定义一个任务名,然后下边就是调用具体模块完成任务。可以将两者对比着看吧
Playbook
核心元素
Tasks:任务,由模板定义的操作列表
Variables:变量
Templates:模板,即使用模板语法的文件
Handlers:由特定条件触发的Tasks
Roles:角色
组成
Target section: 定义将要执行 playbook 的远程主机组
Variable section:定义 playbook 运行时需要使用的变量
Task section :定义将要在远程主机上执行的任务列表
Handler section:定义 task 执行完成以后需要调用的任务
主机和用户
在playbook中的每一个play都可以选择在哪些服务器和以什么用户完成,hosts一行可以是一个主机组、主机、多个主机,中间以冒号分隔,可使用通配模式。其中remote_user表示执行的用户账号。
– hosts: mysqldb remote_user: root
每一个tasks都可以定义自己的用户
– hosts: mysqldb remote_user: root tasks: – name: test connection ping: remote_user: dbroot
使用sudo
– hosts: web remote_user: deploy sudo: yes
– hosts: web remote_user: deploy tasks: – name:start nginx service: name=nginx state=started sudo: yes
在一个任务中使用sudo
– hosts: web remote_user: deploy sudo: yes sudo_user: root
登陆后 sudo 到其他用户执行
在使用 sudo_user 切换到非 root 用户时,Ansible 会将模块参数(非密码选项参数)记录到/tmp 下的一个临时随机文件,命令执行完后会删除;当 sudo 到 root 或者普通用户登陆时并不记录
任务列表
Playbook将按照定义的yaml中的tasks条目的顺序向下依次执行,定义的主机都会执行相同的任务。建议:在tasks中每一个任务都写一个name条目,便于了解运行的位置以及增加可读性。task的写法请参考上边yaml的格式,模块参数请参考Ansiable命令、配置文件及模块
tasks: – name: ensure nginx is running service: name=nginx state=started
这一个tasks就是调用service模块,使nginx启动。两个参数name和state是这个模块的两个key,表示服务名称和状态。
tasks: – name: test connection ping:
有些模块本身是不带key的,例如ping,command,shell等
tasks: – name: disable selinux command: setenforce 0
tasks: – name: Copy ansible inventory file copy: src=/etc/ansible/hosts dest=/tmp/hosts owner=root group=root mode=0644
参数过长可以回车使用空格缩进
运行Playbook
首先写一个简单的yaml文件作为测试,测试的两台客户端先装好了apache程序并且处于running状态。
想要运行playbook,则使用ansible-playbook
命令。
检测语法
ansible-playbook -syntax-check /path/to/test.yaml
这里我也不知道为什么会有这个error,但是不影响后面的运行。
测试运行
ansible-playbook -C /path/to/test.yaml
由于是测试运行,所以不会改变主机的状态,但是可以从测试结果中看出,test.yaml是可以完成其所写的功能的。
也可以使用–list查看对应文件中的内容
运行
ansible-playbook /path/to/test.yaml
可以从结果看出,第一个task检测连通性,两个测试机都可以ping同;第二个task也成功将两个测试机的httpd服务关闭,状态都转变为stopped。
标签
在运行平playbook跑剧本的时候,可以使用-t TAGS
来指定一个YAML文件中的标签位置,playbook会只运行标签处的内容,而忽略之前和之后的步骤。
这里可以看到,我在第二个task处添加了targs标签,箭头表示运行顺序。
可以看到,命令使用-t 指定标签名称,从运行结果来看,只运行了包含tags的tasks内容,剩余的内容没有它运行。之所以运行了notified,是因为指定了notify。
一定注意,yaml文件一定注意文件格式,尤其是对齐的问题,这可能会引起报错。这也是我常遇到的问题(例如冒号后加一个空格)
- playbook介绍
- Ansible Playbook 介绍
- playbook
- BlackBerry PlayBook NDK 官方样例介绍。
- Ansible之YMAL语法介绍以及playbook详解
- playbook 循环
- playbook handlers
- playbook lookups
- playbook conditionals
- Ansible playbook
- ansible-playbook
- ansible playbook
- ansible playbook
- 系列培训:PlayBook开发
- Playbook环境安装
- PlayBook内置截图工具
- PlayBook应用-视频
- PlayBook应用安装工具
- 409. Longest Palindrome*
- 【Unix高级编程】现阶段函数汇总
- 杭电 2002 ( 计算球体积 ) java
- KPI关键绩效指标(Key Performance Indicator)
- [UOJ164] V 记录历史最值线段树
- playbook介绍
- jupyter notebook添加kernel
- vlc-android配置实录
- cookie实现购物车
- baidumapsdk: Authentication Error errorcode: 230 uid: -1 appid -1 msg: APP Scode码校验失败
- WebShpere MQ 实战命令操作
- 杭电 2003 ( 求绝对值 ) java
- struts2 简单总结
- c语言中的大小端问题与高低位问题