3. playbook基础组件

Playbook

playbook是由一个或多个“play”组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。

从根本上来讲,所谓task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联同起来按事先编排的机制同唱一台大戏。

playbook基础组件


Hosts和Users

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

hosts用于指定要执行指定任务的主机,其可以是一个或多个由冒号分隔主机组;

remote_user则用于指定远程主机上的执行任务的用户。

如上面示例中的

1
2
    -hosts: webnodes
     remote_user:root

不过,remote_user也可用于各task中。也可以通过指定其通过sudo的方式在远程主机上执行任务,其可用于play全局或某任务;

此外,甚至可以在sudo时使用sudo_user指定sudo时切换的用户。

1
2
3
4
5
6
7
- hosts: webnodes
    remote_user: mageedu
    tasks:
    - name: test connection
      ping:
      remote_user: mageedu
      sudo: yes

任务列表和action

play的主体部分是task list。

task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。

在运行自下而下某playbook时,如果中途发生错误,所有已执行任务都将回滚,因此,在更正playbook后重新执行一次即可。

task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致。

每个task都应该有其name,用于playbook的执行结果输出,建议其内容尽可能清晰地描述任务执行步骤。如果未提供name,则action的结果将用于输出。

定义task的可以使用“action:module options”或“module: options”的格式,推荐使用后者以实现向后兼容。如果action一行的内容过多,也中使用在行首使用几个空白字符进行换行。

tasks:

1
2
    - name: make sure apache is running
      service:name=httpd state=running

在众多模块中,只有command和shell模块仅需要给定一个列表而无需使用“key=value”格式,例如:

1
2
3
    tasks:
     -name: disable selinux
      command: /sbin/setenforce 0

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

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

或者使用ignore_errors来忽略错误信息:

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

Inventory

ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名。默认的inventory file为/etc/ansible/hosts。
inventory文件格式:

inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中;

此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明。

1
2
3
4
5
6
7
8
9
10
    ntp.xmfb.com

[webservers]
    www1.xmfb.com:2222
    www2.xmfb.com

[dbservers]
    db1.xmfb.com
    db2.xmfb.com
    db3.xmfb.com

如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机,例如:

1
2
3
4
5
[webservers]
www[01:50].example.com

[databases]
db-[a:f].example.com

组嵌套

inventory中,组还可以包含其它的组,并且也可以向组中的主机指定变量。不过,这些变量只能在ansible-playbook中使用,而ansible不支持。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[apache]
httpd1.xmfb.com
httpd2.xmfb.com

[nginx]
ngx1.xmfb.com
ngx2.xmfb.com

[webservers:children]
apache
nginx

[webservers:vars]
ntp_server=ntp.xmfb.com

Handlers示例:定义配置文件发生修改之后,在执行yml文件,会重启httpd服务。
定义的内容:
<ignore_js_op style="word-wrap: break-word; margin: 0px; padding: 0px; color: rgb(68, 68, 68); font-family: Tahoma, ‘Microsoft Yahei‘, Simsun; widows: 1; background-color: rgb(255, 255, 255);"> 
修改配置文件的监听端口为80

1
2
[[email protected] ~]# vim conf/httpd.conf
Listen 80

执行结果
 
验证:webserver组中的主机httpd端口更改与否

1
2
[[email protected] ~]# netstat -lntp | grep httpd
tcp       0      0 :::80                       :::*                        LISTEN      41848/httpd

来源: <http://www.iyunv.com/thread-81771-1-1.html>

来自为知笔记(Wiz)

时间: 2024-12-16 10:01:25

3. playbook基础组件的相关文章

Android 基础组件

基础组件 所有的控件都可以在java代码中创建出来,并且大部分的属性都对应set和get方法,比如 View view = new View(Context context)  context是上下文,是Activity父类,一般传入当前Activity 1.TextView text 文本 setText() getText() textColor文本颜色 #FFFFFF setTextColor(Color.Blue) getTextColor() textSize文本大小   sp set

数据库写库基础组件设计思想与实现

码农一定会遇到写库的繁琐操作,字段少的话数据访问层的SQL语句封装还好实现,可是字段一旦多起来,比如十多个二十多个字段的话,SQL的封装将会是一个巨大的难题,并不是说难度有多大,而是这样的操作很繁琐,况且极容易出错,SQL语句一旦出错很难排查.我也是在开发中遇到了相同的问题,这样的问题总会浪费很多不必要的时间,所以我就想能不能提供一个公共的基础组件来实现繁琐的底层SQL语句操作,我们只需要调用一些简单的借口就能实现数据库的快捷的写库.首先,写库时必要的信息包含:要写入的列名,还有就是数据实体.(

Unity3D开发基础组件提取总结

在游戏开发过程中,除了逻辑功能的开发之外,还有非常多基础的模块.这些模块,对大部分手机网络游戏来说都是一样的.所以,在上个游戏已经上线运营大半年之际,我认为有必要将这些模块整理出来.让后面其它游戏的开发,能够不用从0開始.该游戏client採用Unity3D开发,那么我们这里抽取的基础组件也就是针对Unity3D引擎来的. 简单的梳理之后,我发现主要有下面一些模块,能够独立抽取出来,当然各个模块之间也有一个依赖关系.比方日志模块,差点儿是全部模块都须要依赖的. 1.日志模块 游戏开发中,我们避免

android四大基础组件--Service生命周期详解

android四大基础组件--ServiceService 生命周期详解 1.Service的生命周期: I> 在非绑定Service情况下,只有oncreate(),onStartCommand(),onDestory()方法情况下:  操作方法对应生命周期一: a.[执行startService(Intent)] 执行生命周期方法:oncreate()--->onStartCommand(): b.[执行stopService(Intent)] 执行生命周期方法:onDestory();

数据分析 关于基础组件与介绍

第二部分 关于基础组件与介绍 基础信息库种类 基础信息库是账户或者自然人的纯真数据库查询系统.系统内积累存储的数据包括有: ü 手机号归属信息 ü IP数据纯真库 ü GPS信息对应地址信息 ü 域名空间身份信息 ü 3G分组域通讯信息 ü VPN服务器基础信息 ü VPN服务器日志信息(最新的区域时间段) ü 国内运输系统基础数据 ü 网络帐号密码查询系统 ü 网络帐号详情搜索查询 3S定位技术 3S 是通过遥感技术(RS).地理信息系统(GIS).全球定位系统(GPS)实现位置确认技术的统称

CentOS安装LNMP环境的基础组件

注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. 在安装LNMP环境之前,请确保已经使用yum安装了以下各类基础组件(如果系统已自带,还可以考虑yum update下基础组件): gcc cmake openssl+openssl-devel pcre+pcre-devel bzip2+bzip2-devel libcurl+curl+curl-devel libjpeg+libjpeg-devel libpng+libpng-devel freetype+freetype-

关于Linux开源项目基础组件make编译流程

?? 关于Linux开源项目基础组件make编译流程 非常多Linux开源项目都会用到编译出可运行文件的make.这个是有一套流程的. 首先,GNU构建系统:https://en.wikipedia.org/wiki/GNU_build_system 使用Autotool来编译和管理整个产品的生产流程. 就是以下这张图: 这里面须要先了解make和makefile make:https://en.wikipedia.org/wiki/Make_(software) makefile:https:

Ext JS 6学习文档-第3章-基础组件

基础组件 在本章中,你将学习到一些 Ext JS 基础组件的使用.同时我们会结合所学创建一个小项目.这一章我们将学习以下知识点: 熟悉基本的组件 – 按钮,文本框,日期选择器等等 表单字段的校验 菜单和工具栏 设计一个表单 计算器程序– 本章的示例项目 转载请注明出处:http://www.jeeboot.com/archives/1219.html 本章的主要目的是创建一个表单设计和一个计算器示例项目.以下图分别展示了表单设计和计算器设计. 首先,你观察下列表单设计,你会发现我们使用了大量的控

Akka(17): Stream:数据流基础组件-Source,Flow,Sink简介

在大数据程序流行的今天,许多程序都面临着共同的难题:程序输入数据趋于无限大,抵达时间又不确定.一般的解决方法是采用回调函数(callback-function)来实现的,但这样的解决方案很容易造成“回调地狱(callback hell)”,即所谓的“goto-hell”:程序控制跳来跳去很难跟踪,特别是一些变量如果在回调函数中更改后产生不可预料的结果.数据流(stream)是一种解决问题的有效编程方式.Stream是一个抽象概念,能把程序数据输入过程和其它细节隐蔽起来,通过申明方式把数据处理过程