playbook role应用
参考: ansible中文权威指南
1. 动态Include
结合when等判断,在满足某个条件的时候加载。
- include: test.yml
when: ......
handler 中也可以使用include
2. ansible role 结构
roles目录结构一般如下,可以根据实际情况减少:
.
├── group_vars #定义主机组的变量,虽然可以写在playbook和hosts中,但是提倡分离.文件用组名命名.
│ ├── all.yml
│ ├── seawar_server.yml
│ ├── seawar.yml
│ └── test1.yml
├── hosts
├── host_vars #定义特定主机的变量,文件以主机命名,
│ └── ios-cn-.yml
├── main.yml #整个playbook的入口文件,组织多个role的任务执行。任务总调度文件。主要指定远程主机,执行用户,调用的roles等。
└── roles
├── base #roles的名字
│ ├── files #存放要传输文件的目录,不用在tasks/main.yml中写绝对路径就可以用
│ │ └── server.sh
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ ├── tasks
│ │ ├── fileup.yml #分离出来的任务,main.yml中include直接引用。
│ │ ├── main.yml #任务主函数,整个role的任务入口。
│ │ └── sql.yml #分离出来的任务,main.yml中include直接引用。
│ ├── templates # 模版文件,一般用于配置文件的变更
│ └── vars # 变量
│ └── main.yml #一般定义templates中要用到的变量
└── create_dir.sh
roles说明:
这个 playbook 为一个角色 ‘x’ 指定了如下的行为:
- 如果 roles/x/tasks/main.yml 存在, 其中列出的 tasks 将被添加到 play 中
- 如果 roles/x/handlers/main.yml 存在, 其中列出的 handlers 将被添加到 play 中
- 如果 roles/x/vars/main.yml 存在, 其中列出的 variables 将被添加到 play 中
- 如果 roles/x/meta/main.yml 存在, 其中列出的 “角色依赖” 将被添加到 roles 列表中 (1.3 and later)
- 所有 copy tasks 可以引用 roles/x/files/ 中的文件,不需要指明文件的路径。
- 所有 script tasks 可以引用 roles/x/files/ 中的脚本,不需要指明文件的路径。
- 所有 template tasks 可以引用 roles/x/templates/ 中的文件,不需要指明文件的路径。
- 所有 include tasks 可以引用 roles/x/tasks/ 中的文件,不需要指明文件的路径。
hosts定义如下:
[ios_cn]
iOS-CN--
iOS-CN--
iOS-CN--
iOS-CN--
iOS-CN--
iOS-CN-
iOS-CN- [ios_tw]
121.40.20.132 [an_360]
-
-
- [googleplay]
android-TW-- [jp_ios]
gNetop-iOS-JP--
gNetop-iOS-JP--
gNetop-iOS-JP--
gNetop-iOS-JP--
gNetop-iOS-JP--
gNetop-iOS-JP--
gNetop-iOS-JP--
gNetop-iOS-JP--
gNetop-iOS-JP- [jp_an]
gNetop-android-JP--
gNetop-android-JP--
gNetop-android-JP--
gNetop-android-JP- [na]
gNetop-NA-S1
gNetop-NA-S2
gNetop-NA-S3
gNetop-NA- [eu]
gNetop-EU-
gNetop-EU-
gNetop-EU- [sea]
gNetop-SEA-M1
gNetop-SEA-M2 [seawar_server:children]
ios_cn
ios_tw
jp_ios
na
eu
sea [seawar:children]
googleplay
an_360
jp_an [test]
172.10.30.239 [test1:children]
test
hosts
变量定义如下: group_vars/all.yml .应用于所有主机的变量
--- back_dir: "/mnt/back_2015/"
playbook 入口文件main.yml 定义如下:
--- - hosts: jp_ios
remote_user: root #登录远程机器的用户, roles:
- u_776
roles/tasks中的文件如下:
--- - name: 上传数据库文件
copy:
src: "{{item.src}}"
dest: "{{item.dest}}"
owner: root
group: root
mode: 0755 with_items:
- { src: server.sql, dest: "{{back_dir}}" }
- { src: server.sh, dest: "{{back_dir}}" } - name: 执行数据库文件
shell: sh "{{back_dir}}"server.sh>server.txt chdir = "{{back_dir}}" #使用变量用引号。 sh命令去执行脚本。也可以在shell中直接执行命令。
更新数据库的任务
--- - name: 更新文件
copy:
src: "{{item.src}}"
dest: "{{item.dest}}"
with_items:
- { src: init, dest: "{{remote_dir}}" }
- { src: app, dest: "{{remote_dir}}" }
更新文件任务
--- - include: fileup.yml
#- include: sql.yml
tasks入口文件,include的使用
3. 跨平台roles,when判断实现
比如 redhat和ubuntu都要安装httpd.
首先定义两个roles httpd_ubuntu, httpd_redhat. 调用主文件如下:
---
- name: cross-platform install httpd
hosts: cross-platfoem
roles: #通过facts自动收集的信息结合when判断来执行
- {role: httpd_ubuntu, when: ansible_os_family="Ubuntu"}
- {role: httpd_redhat, when: ansible_os_family="RedHat"}
4. jinja2 模版自定义
https://www.jianshu.com/p/ae74f5f39828
二、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
playbook role应用的更多相关文章
- 014.Ansible Playbook Role 及调试
一 role 简介 在ansible中,role是将playbook分割为多个文件的主要机制,大大简化了复杂的playbook的编写,同时已与复用 role各个目录的作用及可用文件 files:存放由 ...
- [系统开发] 基于Ansible的产品上线系统
前言: 应部门急需,开发了一套基于Ansible Playbook的产品上线系统.由于时间很紧,UI直接套用了之前开发的一套perl cgi模板,后续计划用 django 重新编写. 个人感觉该系统的 ...
- Ansible状态管理
转载自:http://xdays.me/ansible状态管理.html 简介 就像所有服务器批量管理工具(puppet有DSL,salt有state)一样,ansible也有自己的状态管理组件 ...
- Nebula Graph 的 Ansible 实践
本文首发于 Nebula Graph 公众号 NebulaGraphCommunity,Follow & 看大厂图数据库技术实践 背景 在 Nebula-Graph 的日常测试中,我们会经常在 ...
- Ansible-DevOps
Ansible-DevOps Ansible 搭建 CentOS7 yum install epel-release yum search ansible yum install ansible -y ...
- ansible的playbook组件
playbook的核心元素: tasks: 任务 variables: 变量 templates: 模板 handlers: 处理器 roles: 角色 组织格式:YAML(被称为另外一种标记语言) ...
- ansible playbook最佳实践
本篇主要是根据官方翻译而来,从而使简单的翻译,并没有相关的实验步骤,以后文章会补充为实验步骤,此篇主要是相关理论的说明,可以称之为中文手册之一,具体内容如下: Ansible playbooks最佳实 ...
- Ansible10:Playbook的角色与包含【转】
当单个playbook文件越来越大的时候,我们就需要重新来组织Playbooks了.我们可以将一个大的playbook拆成若干个小的playbook文件,然后通过include的方式,在主配置文件中将 ...
- Ansible系列(五):playbook应用和roles自动化批量安装示例
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
随机推荐
- Uncaught RangeError: Maximum call stack size exceeded
环境: jquery+bootstrap+bootstrapValidator 问题描述:有个form表单,一点击按钮提交,就会报如题错误.正常应该是去校验表单输入. 解决: 从日志分析来看,报错的起 ...
- [转]PHP开发中涉及到emoji表情的三种处理方法
最近几个月做微信开发比较多,存储微信昵称必不可少,可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了 一般Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一 ...
- 字符串匹配的Boyer-Moore(BM)算法
各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法. Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解.1977年,德克萨斯大学的Robe ...
- Android 常用正则表达式
前言 闲扯一下,已经有好久没更新博客了,记得上一篇博客的更新时间为 2017-05-12 15:20.截止到今天,超过一百天没更新了. 这篇博客的内容大多数是从别的博客摘抄过来的,写这篇博客的目的主要 ...
- idea 去除xml文件sql语句背景色
怎么看idea mapper.xml中写sql语句的那种屎黄屎黄背景颜色不好看 去除背景色 把这两项勾选去掉,然后 把这个背景勾选也去掉,最后 把这个勾选也去掉 另一种方式: 也可以使用这种方式 al ...
- 'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件
今天安装完MYSQL8.0的版本,根据课本的提示,在CMD里运行,出现了'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件.在网上搜了一下,他的解决方法是这样的: 1.设置一下环境变量 ...
- Confluence 6 为空白空间重置原始默认内容
希望重置为原始的默认内容: 在屏幕的右上角单击 控制台按钮 ,然后选择 General Configuration 链接. 在左侧的面板中选择 全局模板和蓝图(Global Templates and ...
- SpringBoot捕获全局异常
1.创建GloableExceptionAop类捕获全局异常 package com.cppdy.exception; import org.springframework.web.bind.anno ...
- Python基础之面向对象的软件开发思路
当我们来到生产环境中的时候,对一个软件需要开发的时候,刚开始也可能会懵逼,挝耳挠腮.不知从何下手,其 实,大家也不要苦恼,这是大多数程序员都会遇到的问题.那么,我们就要想一想了,既然大家都会这样,到低 ...
- 《剑指offer》 二进制中1的个数
本题来自<剑指offer> 二进制中1的个数 题目: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路: 两种思路: 第一种:对n进行左移,检测最后一位是否为1,但考 ...