Playbooks简介
Playbooks简介
关于Playbooks
Playbook简单示例
基本组成
主机和用户
任务列表
Handlers: 配置更改时运行操作
执行Playbook
Ansible-Pull
Linting playbooks
其它的playbook确认选项
关于Playbooks
与ad-hoc模式相比,playbook是使用ansible的完全不同的方式,并且功能特别强大。
playbook是真正简单的配置管理和多机部署系统的基础,非常适合部署复杂的应用程序。
剧本可以声明配置,但是它们也可以编排任何有序步骤,即使不同的步骤必须在特定顺序的机器之间来回跳动也是如此。他们可以同步或异步启动任务。
在ansible-examples资料库中,还有一些完整的剧本,说明了许多这些技术 。
Playbook简单示例
playbook用YAML编写。
每个playbooks可以有一个或多个playbook组成
verify-apache.yml仅包含一部剧本:
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum:
name: httpd
state: latest
- name: write the apache config file
template:
src: /srv/httpd.j2
dest: /etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running
service:
name: httpd
state: started
handlers:
- name: restart apache
service:
name: httpd
state: restarted
Playbooks也可以包含多个plays,可能首先针对Web服务器,然后针对数据库服务器的剧本。例如:
---
- hosts: webservers
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum:
name: httpd
state: latest
- name: write the apache config file
template:
src: /srv/httpd.j2
dest: /etc/httpd.conf
- hosts: databases
remote_user: root
tasks:
- name: ensure postgresql is at the latest version
yum:
name: postgresql
state: latest
- name: ensure that postgresql is started
service:
name: postgresql
state: started
基本组成
主机和用户
对于每个playbook都可以选择在哪些机器上使用哪个用户完成任务。
---
- hosts: webservers
remote_user: root
也可以为每个任务定义远程用户:
---
- hosts: webservers
remote_user: root
tasks:
- name: test connection
ping:
remote_user: yourname
还可以使用其他特权升级方法,例如su:
---
- hosts: webservers
remote_user: yourname
become: yes
become_method: su
如果您需要为sudo指定密码,请ansible-playbook使用--ask-become-pass或运行-K
还可以控制主机的运行顺序。默认值是遵循hosts存提供的顺序.
任务列表
每个任务的目标是执行带有特定参数的模块。变量可以在模块的参数中使用。
模块应该是幂等的,也就是说,按顺序运行一个模块多次应具有与仅运行一次相同的效果。实现幂等的一种方法是让模块检查是否已达到其所需的最终状态,如果已经达到该状态,则不执行任何操作即可退出。如果剧本使用的所有模块都是幂等的,则剧本本身很可能是幂等的,因此重新运行剧本应该是安全的.
基本的任务语法:
tasks:
- name: make sure apache is running
service:
name: httpd
state: started
command和shell模块关心返回码,因此,如果您有一个成功退出码不为零的命令,则可能需要这样做:
tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand
ignore_errors: True
定义变量
tasks:
- name: create a virtual host file for {{ vhost }}
template:
src: somefile.j2
dest: /etc/httpd/conf.d/{{ vhost }}
Notify和Handlers
Notify写在tasks的最后面,它只会触发一次,即使被多个不同tasks通知。
- name: template configuration file
template:
src: template.j2
dest: /etc/foo.conf
notify:
- restart memcached
- restart apache
notify任务部分中列出的内容称为处理程序。
处理程序是任务的列表,与常规任务没有什么实质的不同,它们由全局唯一名称引用,并由通知程序通知。如果没有任何通知处理程序,它将不会运行。无论有多少个任务通知处理程序,在特定播放中完成所有任务后,它将仅运行一次。
这是处理程序部分的示例:
handlers:
- name: restart memcached
service:
name: memcache
dstate: restarted
- name: restart apache
service:
name: apache
state: restarted
将变量放在处理程序的任务参数中。您可以使用以下方式加载值include_vars:
tasks:
- name: Set host variables based on distribution
include_vars: "{{ ansible_facts.distribution }}.yml"
handlers:
- name: restart web service
service:
name: "{{ web_service_name | default('httpd') }}"
state: restarted
从Ansible 2.2开始,处理程序还可以“侦听”通用主题
handlers:
- name: restart memcached
service:
name: memcached
state: restarted
listen: "restart web services"
- name: restart apache
service:
name: apache
state: restarted
listen: "restart web services"
tasks:
- name: restart everything
command: echo "this task will restart the web services"
notify: "restart web services"
执行playbook
运行并行度为10的剧本:
ansible-playbook playbook.yml -f 10
Ansible Pull的使用
ansible用于从git中拉取playbooks
通过ansible-pull命令与git、crontab共同使用,可以通过crontab定期拉去指定的git版本到本地,并以指定模式自动运行预先制定好的指令
*/20 * * * * root /usr/local/bin/ansible-pull -o -C 2.1.0 -d /src/www/king-gw/ -i /etc/ansible/hosts - U git://git.kingifa.com/king-gw-ansiblepull >> /var/log/ansible-pull.log 2>&1
这里有一个写好的 clever playbook配置pull模式。
Linting playbooks
在执行之前,您可以使用ansible-lint对您的剧本进行详细检查。
$ ansible-lint verify-apache.yml
[403] Package installs should not use latest
verify-apache.yml:8
Task/Handler: ensure apache is at the latest version
其他剧本验证选项
ansible-playbook 与--syntax-check标志一起使用。这将通过解析器运行剧本文件,以确保其包含的文件,角色等没有语法问题。
ansible-playbook --syntax-check playbook.yml
要在运行剧本之前查看哪些主机会受到该剧本的影响,可以执行以下操作:
ansible-playbook playbook.yml --list-hosts
Playbooks简介的更多相关文章
- Ansible1:简介与基本安装【转】
Ansible是一个综合的强大的管理工具,他可以对多台主机安装操作系统,并为这些主机安装不同的应用程序,也可以通知指挥这些主机完成不同的任务.查看多台主机的各种信息的状态等,ansible都可以通过模 ...
- Ansible - 简介和应用自动化基础实践
installAnsible简介和应用自动化基础实践 一.引入: 1.1 如官方定义,Ansible is The simplest way to automate apps and IT infr ...
- ansible学习系列1-ansible简介
1.ansible简介 官方说明:Ansible is an IT automation tool. It can configure systems, deploy software, and or ...
- 【原创】运维基础之Ansible(1)简介、安装和使用
官方:https://www.ansible.com/ 一 简介 Ansible is a radically simple IT automation engine that automates c ...
- Ansible 简介
Ansible 是一个开源的基于 OpenSSH 的自动化配置管理工具.可以用它来配置系统.部署软件和编排更高级的 IT 任务,比如持续部署或零停机更新.Ansible 的主要目标是简单和易用,并且它 ...
- 001. Ansible简介
一 简介 Ansible是一款极其简单的自动化运维工具, 基于Python开发, 集合了众多运维工具(puppet, cfengine, chef, func, fabric)的优点. 实现了批量系统 ...
- Ansible之入门简介
一.ansible简介 ansible是一款由python语言编写的一款自动化运维工具,它集合了众多运维工具(puppet.cfengine.chef.func.fabric)优点,实现了批量系统配置 ...
- ansible-playbook简介
1. ansible-playbook简介 • Playbooks 与 adhoc 相比,是一种完全不同的运用 ansible 的方式,是非常之强大的. • 简单来说,playbooks 是一种简单的 ...
- ansible 五 playbooks剧本使用
一.Playbook 简介 Playbooks与Ad-Hoc相比,是一种完全不同的运用Ansible的方式,而且是非常之强大的:也是系统ansible命令的集合,其利用yaml语言编写,运行过程,an ...
随机推荐
- poj1502 MPI Maelstrom(单源最短路)
题意:表面乍一看output是输出最小值,但仔细研究可以发现,这个最小值是从点1到所有点所花时间的最小值,其实是访问这些节点中的最大值,因为只有访问了最长时间的那个点才算访问了所有点.所以求最短路之后 ...
- JAVA 时间转换、获取
/** * 将字符串格式的时间转换成Timestamp * * @param time * @param formatStyle * @return */ public static Timestam ...
- js事件3-事件对象
对于每次点击一个事件,都会产生一个事件对象,这个事件对象中包含了这个事件的很多信息 我们来看看事件对象具体有哪些信息 Object.onclick=function(e){ ..... }其中的参数e ...
- 【P1889】SOLDIERS (中位数)
题目描述 在一个划分成网格的操场上, n个士兵散乱地站在网格点上.由整数 坐标 (x,y) 表示.士兵们可以沿网格边上.下左右移动一步,但在同时刻任一网格点上只能有名士兵.按照军官的命令,们要整齐地列 ...
- Objective-C多态:动态类型识别+动态绑定+动态加载
http://blog.csdn.net/tskyfree/article/details/7984887 一.Objective-C多态 1.概念:相同接口,不同的实现 来自不同类可以定义共享相同名 ...
- RxSwift 在本质上简化了开发异步程序
RxSwift 是一个组合异步和事件驱动编程的库,通过使用可观察序列和功能样式运算符来,从而允许通过调度程序进行参数化执行. RxSwift 在本质上简化了开发异步程序,允许代码对新数据作出反应,并以 ...
- 同步docker中的容器时间和宿主机相同
同步docker中的容器时间和宿主机相同.cd /etc/ 在容器中修改下/etc/localtime文件的名称,避免冲突. mv localtime localtime_bak cp /usr/sh ...
- python - 全局中间件(2.7)
一.场景 在网站的所有页面中可能某些地方都需要相同的数据,此时可以在Django中定义全局数据并存储在session中,或使用模板语言放入页面中 注意:一定要加上 try: 进行潜在的异常捕捉,因为一 ...
- Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method 'POST' not supported (附带其余好几个坑)
yml: feign: httpclient: enabled: true properties: #feign feign.httpclient.enabled=true <!-- https ...
- PHP引用(&)
引用是什么 在 PHP 中引用意味着用不同的名字访问同一个变量内容.这并不像 C 的指针:例如你不能对他们做指针运算,他们并不是实际的内存地址.替代的是,引用是符号表别名.注意在PHP 中,变量名和变 ...