playbook的结构说明

playbook是由一个或多个"play"组成的列表。play的主要功能就是对一组主机应用play中定义好的task。从根本上来讲一个task就是对ansible一个module的调用。而将多个play按照一定的顺序组织到一个playbook中,我们称之为编排。

playbook主要有以下四部分构成:

  • Target section: 用于定义将要执行playbook的远程主机组及远程主机组上的用户,还包括定义通过什么样的方式连接远程主机(默认ssh)
  • Variable section: 定义playbook运行时需要使用的变量
  • Task section: 定义将要在远程主机上执行的任务列表
  • Handler section: 定义task执行完成以后需要调用的任务

Target section

playbook中的每一个play的目的都是为了让某个或某些主机以某个指定的用户身份执行任务。

Playbook中的远程用户

playbook中的远程用户和ad-hoc中的使用没有区别,默认不定义,则直接使用ansible.cfg配置中的用户相关的配置。也可在playbook中定义如下:

  1. - name: /etc/hosts is up to date
  2. hosts: datacenter
  3. remote_user: automation
  4. become: yes
  5. become_mothod: sudo
  6. become_user: root
  7. tasks:
  8. - name: server.example.com in /etc/hosts
  9. lineinfile:
  10. path: /etc/hosts
  11. line: '192.168.0.200 server.exmaple.com server'
  12. state: present

Playbook中的hosts

playbook中的hosts即inentory中的定义主机与主机组,在《Ansible Inventory》中我们讲到了如何选择主机与主机组,在这里也完全适用。

  1. - name: start mariadb
  2. hosts: db,&london
  3. tasks:
  4. - name: start mariadb
  5. service:
  6. name: mariadb
  7. state: started

Task section

play的主体部分是任务列表。

任务列表中的各任务按次序逐个在hosts中指定的所有主机上执行,在所有主机上完成第一个任务后再开始第二个。在自上而下运行某playbook时,如果中途发生错误,则整个playbook会停止执行,由于playbook的幂等性,playbook可以被反复执行,所以即使发生了错误,在修复错误后,再执行一次即可。

定义task可以使用action: module optionsmodule: options的格式,推荐使用后者以实现向后兼容。

  1. tasks:
  2. - name: make sure apache is running
  3. service:
  4. name: httpd
  5. state: started
  6. - name: disable selinux
  7. command: /sbin/setenforce 0

如果命令或脚本的退出码不为零可以使用如下方式替代:

  1. tasks:
  2. - name: run this command and ignore the result
  3. shell: /usr/bin/somecommand || /bin/true

可以使用ignore_errors来忽略错误信息:

  1. tasks:
  2. - name: run this command and ignore the result
  3. shell: /usr/bin/somecommand
  4. ignore_errors: True

Handler section

  • 在Ansible Playbook中,handler事实上也是个task,只不过这个task默认并不执行,只有在被触发时才执行。

  • handler通过notify来监视某个或者某几个task,一旦task执行结果发生变化,则触发handler,执行相应操作。

  • handler会在所有的play都执行完毕之后才会执行,这样可以避免当handler监视的多个task执行结果都发生了变化之后而导致handler的重复执行(handler只需要在最后执行一次即可)。

  1. tasks:
  2. - name: template configuration file
  3. template:
  4. src: template.j2
  5. dest: /etc/foo.conf
  6. notify:
  7. - restart memcached
  8. - restart apache
  9. - name: start memcached
  10. service:
  11. name: memcached
  12. state: started
  13. - name: start apache
  14. service
  15. name: httpd
  16. state: started
  17. handlers:
  18. - name: restart memcached
  19. service:
  20. name: memcached
  21. state: restarted
  22. - name: restart apache
  23. service:
  24. name: httpd
  25. state: restarted

在notify中定义内容一定要和tasks中定义的 - name 内容一样,这样才能达到触发的效果,否则会不生效。

默认情况下,在一个play中,只要有task执行失败,则play终止,即使是与handler关联的task在失败的task之前运行成功了,handler也不会被执行。如果希望在这种情况下handler仍然能够执行,则需要使用如下配置:

  1. - hosts: all
  2. force_handlers: yes
  3. tasks:
  4. - name: a task which always notifies its handler
  5. command: /bin/true
  6. notify: restart the database
  7. - name: a task which fails because the package doesn't exist
  8. yum:
  9. name: notapkg
  10. state: latest
  11. handlers:
  12. - name: restart the database
  13. service:
  14. name: mariadb
  15. state: restarted

如果与handler关联的task还未执行,在其前的task已经失败,整个play终止,则handler未被触发,也不会执行。

Ansible7:Playbook常用模块的更多相关文章

  1. Ansible7:Playbook常用模块【转】

    playbook的模块与在ansible命令行下使用的模块有一些不同.这主要是因为在playbook中会使用到一些facts变量和一些通过setup模块从远程主机上获取到的变量.有些模块没法在命令行下 ...

  2. Ansible简介及常用模块

    一.基础介绍 1.简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置. ...

  3. Ansible系列(二):选项和常用模块

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  4. Ansible安装部署以及常用模块详解

    一.  Ansible 介绍Ansible是一个配置管理系统configuration management system, python 语言是运维人员必须会的语言, ansible 是一个基于py ...

  5. ansible环境部署及常用模块总结 - 运维笔记

    一.  Ansible 介绍Ansible是一个配置管理系统configuration management system, python 语言是运维人员必须会的语言, ansible 是一个基于py ...

  6. 2、ansilbe常用模块详解及inventory介绍

    Ansible ansible格式: ansible <host-pattern> [-f forks] [-m module_name] [-a args] args: 用法 key=v ...

  7. Ansible 入门指南 - 常用模块

    介绍 module 文档: 官宣-模块分类的索引 官宣-全部模块的索引 在playbook脚本中,tasks 中的每一个 action都是对 module的一次调用.在每个 action中: 冒号前面 ...

  8. Ansible常用模块命令

    Ansible常用模块命令 一.安装ansible yum install epel-release yum install ansible 二.配置文件配置 vi /etc/ansible/ansi ...

  9. ansible api常用模块与参数

    ###ansibleAPI 常用模块 用于读取yaml,json格式的文件 from ansible.parsing.dataloader import DataLoader #用于管理变量的类,包括 ...

随机推荐

  1. C# Js 时间格式化问题

    C# 后台: .ToString("dd-MMM-yyyy", System.Globalization. DateTimeFormatInfo.InvariantInfo) eg ...

  2. 20172325 2016-2017-2 《Java程序设计》第四周学习总结

    20172325 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 1.对类.对象.声明变量的定义和属性有了进一步的了解 2.学会如何编写一个类并运用到需要的程 ...

  3. HDU3629(凸四边形的个数)

    HDU 3629 计算几何 题目描述:给你n个点(4~700), 问你能够成多少个不同的凸四边形. 解题报告: 暴力的话C(700,4)必然超时,发现,任何一个凹包必然是其中一点在其它3点构成的三角形 ...

  4. 个人作业2--APP案例分析

    产品 选择产品:酷狗音乐播放器 版本:Android版 选择理由:是我高中就开始用的音乐播放软件,在平时使用频率比较高,平时喜欢在累的时候听音乐放松. 调研 第一次上手体验 第一次使用的时候,感觉整个 ...

  5. 程序开发入门工具之CodeBlocks

    程序开发基础工具之CodeBlocks 作为程序开发工作者,我们会接触很多的程序开发软件:但实用以及容易掌握的程序开发软件对于初学者的学习能力是有一定的加成的.今天我就作为一个程序开发者给大家推荐一个 ...

  6. typedef struct bit0 : 1

    这句话定义了一个位域,bit0是该位域的域名,而且bit0只占用一个位.位域是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.为了节省存储空间,并使处理简便,C语言提供了一种 ...

  7. Delphi中使用OLE方法操作Excel

    首先创建 Excel 对象,使用ComObj: var ExcelApp: Variant; ExcelApp := CreateOleObject( ′Excel.Application′ ); 注 ...

  8. IDEA2018 license

    2018-06-01更新 更新了webstorm 3.2之后发现居然又不能用了,现用 http://idea.congm.in  可以激活 新增一个 http://idea.toocruel.net

  9. [转帖]HR职能划分三支柱模型

    HR职能划分三支柱模型 http://blog.sina.com.cn/s/blog_afbd12640101o5hf.html COE(Centre of Excellence or Center ...

  10. [转帖]通俗解释 AWS 云服务每个组件的作用

    你有听说过 ContainerCache,ElastiCast 和 QR72 这些 AWS 的新服务吗? 没有就对了,这些都是我编的:) 不过,AWS 有 50 多个服务,从名称也不能看出这些服务是做 ...