ansible-playbook组件解析及操作全解
转载于http://www.178linux.com/7001
一、ansible-playbook介绍:
playbook是由一个或多个”play”组成的列表。play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来将,所谓的task无法是调用ansible的一个module。将多个paly组织在一个playbook中,即可以让他们联通起来按事先编排的机制同唱一台大戏。
1、playbook基础组件:
hosts playbook中的每一个paly的目的都是为了让某个或某些以某个指定用户的身份执行任务。hosts用于指定要执行指定任务的主机,其可以是一个或多个由冒号分割主机组。
user remote_user则用于指定远程主机上的执行任务的用户。
任务列表:
play的主体部分是task list. task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。
action
任务执行过程
handlers
用于当前关注的资源发生变化时采取一定指定的操作
2、实例:
[root@node1 playbook]# cat web.yml
- hosts: test \\主机组,在/etc/ansible/hosts定义
remote_user: root \\远端执行任务的用户
tasks: \\任务
- name: install httpd \\任务描述
command: yum -y install httpd \\调用ansible的command模块安装httpd
- name: provide httpd.conf \\任务描述
copy: src="/root/httpd.conf" dest="/etc/httpd/conf/httpd.conf" \\调用ansible的copy模块,httpd安装完成后将事先准备好的httpd.conf文件复制到/etc/httpd/conf目录下
tags: conf \\给此任务打标记,可单独执行标记的任务,使用 ansible-playbook -C 命令执行
notify: \\文件内容变更通知
- server restart \\通知到指定的任务
- name: server start \\任务描述
service: name=httpd state=started enabled=true \\调用ansible的service模块的属性定义安装完成httpd以后httpd服务的管理
handlers: \\定义接受关注的资源变化后执行的动作
- name: server restart \\任务描述
service: name=httpd state=restarted \\当关注的资源发生变化后调用service模块,采取的响应的动作
执行过程如下:
[root@node1 playbook]# ansible-playbook web.yml PLAY [test] ******************************************************************* GATHERING FACTS ***************************************************************
ok: [172.16.2.13] TASK: [install httpd] *********************************************************
changed: [172.16.2.13] TASK: [provide httpd.conf] ****************************************************
changed: [172.16.2.13] TASK: [server start] **********************************************************
changed: [172.16.2.13] NOTIFIED: [server restart] ****************************************************
changed: [172.16.2.13] PLAY RECAP ********************************************************************
172.16.2.13 : ok=5 changed=4 unreachable=0 failed=0
二、ansible的roles介绍:
ansible的roles用于层次性、结构化地组织palybook。roles能够根据层次型结构自动装载变量文件、tasks及handlers等。要使用roles只需要playbook中使用include指令即可。
rules的组成:
root@node1 playbook]# tree roles/
roles/ \\ansible所有的信息都放到此目录下面对应的目录中
└── nginx \\角色名称
├── default \\为当前角色设定默认变量时使用此目录,应当包含一个main.yml文件;
├── files \\存放有copy或script等模块调用的文件
├── handlers \\此目录总应当包含一个main.yml文件,用于定义各角色用到的各handler
├── meta \\应当包含一个main.yml,用于定义角色的特殊设定及其依赖关系;1.3及以后版本支持
├── tasks \\至少包含一个名为main.yml的文件,定义了此角色的任务列表,可使用include指令
├── templates \\template模块会自动在此目录中寻找Jinja2模板文件
└── vars \\应当包含一个main.yml文件,用于定义此角色用到的变量
roles介绍完了,那么我们就利用ansible的roles来配置nginx
1、首先按照上面的要求创建要用到的目录
[root@node1 playbook]# mkdir -pv roles/nginx/{tasks,files,templates,handlers,vars,meta,default}
2、准备nginx配置文件
准备nginx.conf配置文件,使用模板文件配置
[root@node1 playbook]# cd roles/nginx/templates/
[root@node1 ~]# ansible all -m setup | grep ansible_processor_cores
"ansible_processor_cores": 1, \\获取ansible的要调用的相关函数
[root@node1 playbook]# cd roles/nginx/templates/ \\模板文件一定要放到此目录
[root@node1 templates]# vim nginx.conf
worker_processes {{ ansible_processor_cores }}; \\调用获取到的函数
准备nginx的default.conf文件
[root@node1 playbook]# ls -l roles/nginx/files/
-rw-r--r--. 1 root root 1290 Nov 12 2014 default.conf
3、准备nginx的rpm包
[root@node1 playbook]# ls -l roles/nginx/files/
-rw-r--r--. 1 root root 1290 Nov 12 2014 default.conf
-rw-r--r--. 1 root root 319456 Mar 29 20:44 nginx-1.4.7-1.el6.ngx.x86_64.rpm
4、在tasks目录中配置任务列表
[root@node1 playbook]# cd roles/nginx/tasks/
[root@node1 tasks]# vim main.yml
- name: copy nginx.rpm
copy: src=nginx-1.4.7-1.el6.ngx.x86_64.rpm dest=/tmp/nginx-1.4.7-1.el6.ngx.x86_64.rpm
- name: install nginx
shell: yum -y install /tmp/nginx-1.4.7-1.el6.ngx.x86_64.rpm
- name: provides nginx.conf
template: src=nginx.conf dest=/etc/nginx/nginx.conf
tags: nginxconf
notify:
- server restart
- name: provides default.conf
copy: src=default.conf dest=/etc/nginx/conf.d/default.conf
tags: nginxconf
- name: server start
service: name=nginx enabled=true state=started
5、在handlers目录中配置定义handler信息
[root@node1 playbook]# cd roles/nginx/handlers/
[root@node1 handlers]# vim main.yml
- name: server restart
service: name=nginx state=restarted
6、在roles同一级目录中创建site.yml文件
[root@node1 playbook]# cat site.yml
- hosts: nginx
remote_user: root
roles:
- nginx
7、应用配置:
[root@node1 playbook]# ansible-playbook site.yml PLAY [nginx] ****************************************************************** GATHERING FACTS ***************************************************************
ok: [172.16.2.13] TASK: [nginx | copy nginx.rpm] ************************************************
ok: [172.16.2.13] TASK: [nginx | install nginx] *************************************************
changed: [172.16.2.13] TASK: [nginx | provides nginx.conf] *******************************************
changed: [172.16.2.13] TASK: [nginx | provides default.conf] *****************************************
changed: [172.16.2.13] TASK: [nginx | server start] **************************************************
changed: [172.16.2.13] NOTIFIED: [nginx | server restart] ********************************************
changed: [172.16.2.13] PLAY RECAP ********************************************************************
172.16.2.13 : ok=7 changed=5 unreachable=0 failed=0
8、在node2主机上查看nginx是否已启动
[root@node2 ~]# ss -tpln | grep 80
LISTEN 0 128 *:80 *:* users:(("nginx",8934,8),("nginx",8936,8))
9、roles目录总体结构:
[root@node1 playbook]# tree roles/
roles/
└── nginx
├── default
├── files
│ ├── default.conf
│ └── nginx-1.4.7-1.el6.ngx.x86_64.rpm
├── handlers
│ └── main.yml
├── meta
├── tasks
│ └── main.yml
├── templates
│ └── nginx.conf
└── vars
到此ansible常用的知识已介绍完毕,仅个人学习总结,大家有疑问的话可以一起交流
ansible-playbook组件解析及操作全解的更多相关文章
- js系列教程1-数组操作全解
全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...
- jquery系列教程2-style样式操作全解
全栈工程师开发手册 (作者:栾鹏) 快捷链接: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件 ...
- jquery系列教程4-事件操作全解
点击打开: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件操作全解 jquery系列教程5-动 ...
- jquery系列教程3-DOM操作全解
全栈工程师开发手册 (作者:栾鹏) 快捷链接: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件 ...
- Js基础知识1-数组操作全解
数组操作全解 js变量类型 var string; var name = "student",age=12; //underfined.null.boolean.string.nu ...
- phpEXCEL操作全解
phpExcel中文帮助手册,列举了各种属性,以及常用的操作方法,难得是每一个都用实例加以说明,希望对大家有所帮助. phpExcel中文帮助手册,不可多得的好文章,供大家学习参考. 1.设置exce ...
- js系列教程2-对象、构造函数、对象属性全解
全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...
- css系列教程1-选择器全解
全栈工程师开发手册 (作者:栾鹏) 一个demo学会css css系列教程1-选择器全解 css系列教程2-样式操作全解 css选择器全解: css选择器包括:基本选择器.属性选择器.伪类选择器.伪元 ...
- jquery系列教程7-自定义jquery插件全解:对象函数、全局函数、选择器
点击打开: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件操作全解 jquery系列教程5-动 ...
随机推荐
- 12.14 Daily Scrum
Today's Task Tomorrow's Task 丁辛 实现和菜谱相关的餐厅列表. 实现和菜谱相关的餐厅列表. 邓亚梅 美化搜索框UI. 美 ...
- 使用highcharts绘制美观的燃尽图
使用highcharts绘制美观的燃尽图 助教在博客中介绍了两种绘制燃尽图的方法,但是我们组在使用时发现有些任务不适合写进issue,而且网站生成的燃尽图不是很美观,因此我们打算使用其他方法自己绘制燃 ...
- 第六次作业-my Backlog
杨灵超小组 My Backlog 小学生四则运算自动生成(Backlog) ID Name IMP EST How to Demo ...
- 剑指offer:变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路 首先想到的解决方案是根据普通跳台阶题目改编,因为可以跳任意级,所以要 ...
- [2017BUAA软工]第一次个人项目 数独的生成与求解
零.Github链接 https://github.com/xxr5566833/sudo 一.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分 ...
- shell脚本--数值比较
用于数值比较的无非大于.小于.等于.大于等于.小于等于这几个. 比较格式: [ 数值1 比较符 数值2 ] 注意左边的括号与数值1之间有一个空格,同样,数值2和右边的括号之间也有空格. 数值比较运 ...
- 用async/ await来发送异步
昨天看了一篇vue的教程,作者用async/ await来发送异步请求,从服务端获取数据,代码很简洁,同时async/await 已经被标准化,是时候学习一下了. 先说一下async的用法,它作为一个 ...
- 转载: 一、linux cpu、内存、IO、网络的测试工具
来源地址: http://blog.csdn.net/wenwenxiong/article/details/77197997 记录一下 以后好找.. 一.linux cpu.内存.IO.网络的测试工 ...
- ios微信浏览器中video视频播放问题
微信ios只支持几种特定的视频格式,一般使用mp4格式的视频(腾讯官方就是用的这种视频格式)
- BZOJ2434[Noi2011]阿狸的打字机——AC自动机+dfs序+树状数组
题目描述 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小 ...