ansible roles 介绍和使用
roles
roles 介绍
ansible 自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次结构自动装在边梁文杰、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量、文件、任务、模块以及处理器放置于单独的目录中,并可以边界的include他们的一种机制。角色一般基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。
一个roles的案例如下所示:
site.yml
wevservers.yml
fooservers.yml
roles/
common/
files/
templates/
tasks/
handlers/
vars/
meta/
wevservers/
files/
templates/
tasks/
handlers/
vars/
meta/
而在playbook中,可以这样使用roles:
-hosts: wevservers
roles:
- common
- wevservers
也可以向roles传递参数,例如:
- hosts: webservers
roles:
- common
- { role: foo_app_instance, dir: '/opt/a', port: 5000 }
- { role: foo_app_instance, dir: '/opt/b', port: 5001 }
甚至也可以条件式地使用roles,例如:
- hostss: webservers
roles:
- { role: some_role, when: "ansible_os_family == 'RedHat'" }
创建role的步骤
- 创建以roles命名的目录;
- 在roles目录中分别创建以各校色名称命名的目录,如webservers等;
- 在每个角色命名的目录中分别创建files、handlers、meta、tasks、templates和vars目录;用不到的目录可以创建为空目录,也可以不创建;
- 在playbook文件中,调用各角色;
role内个目录中可用的文件
| 目录名 | 说明 |
|---|---|
| tasks目录 | 至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表;文件可以使用include包含其它的位于此目录中的task文件; |
| file目录 | 存放由copy或script等模块调用的文件; |
| templates目录 | template模块会自动在此目录中寻找Jinja2模板文件; |
| handlers目录 | 此目录中应当包含一个main.yml文件,用于定义此角色用到的各handler;在handler中使用include包含的其它handler文件也应该位于此目录中; |
| vars目录 | 应当包含一个main.yml文件,用于定义此角色用到的变量; |
| meta目录 | 因当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系;ansible 1.3 及其以后的版本才支持; |
| default目录 | 为当前角色设定默认变量时使用此目录,因当包含一个main.yml文件; |
案例
创建roles所需的目录
[root@node-1 ansible]# mkdir -pv ansible_playbook/roles/{webservs,dbservs}/{tasks,files,templates,meta,handlers,vars}
[root@node-1 ansible]# tree ansible_playbook/
ansible_playbook/
└── roles
├── dbservs
│ ├── files
│ ├── handlers
│ ├── meta
│ ├── tasks
│ ├── templates
│ └── vars
└── webservs
├── files
├── handlers
├── meta
├── tasks
├── templates
└── vars
以webservs来举例
首先进入到webservs角色对应的目录
[root@node-1 ansible_playbook]# cd roles/webservs/
[root@node-1 webservs]# ls
files handlers meta tasks templates vars
[root@node-1 webservs]# pwd
/etc/ansible/ansible_playbook/roles/webservs
然后拷贝httpd配置文件
[root@node-1 webservs]# cp /etc/httpd/conf/httpd.conf files/
定义tasks
[root@node-1 webservs]# cat tasks/main.yml
- name: install httpd package
yum: name=httpd state=present
- name: install configuration file
copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
tags:
- conf
notify:
- restart httpd
- name: start httpd
service: name=httpd state=started
定义handlers
[root@node-1 webservs]# cat handlers/main.yml
- name: restart httpd
service: name=httpd state=restarted
然后到roles目录下
[root@node-1 webservs]# cd ../../
[root@node-1 ansible_playbook]# pwd
/etc/ansible/ansible_playbook
[root@node-1 ansible_playbook]# ls
roles
定义site.yml
这里site.yml是固定用法
[root@node-1 ansible_playbook]# cat site.yml
- hosts: webservs
remote_user: root
roles:
- webservs
[root@node-1 ansible_playbook]# pwd
/etc/ansible/ansible_playbook
[root@node-1 ansible_playbook]# ls
roles site.yml
最后执行site.yml
[root@node-1 ansible_playbook]# ansible-playbook site.yml
PLAY [webservs] **********************************************************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************************************
ok: [10.25.196.25]
TASK [webservs : install httpd package] **********************************************************************************************************************
changed: [10.25.196.25]
TASK [webservs : install configuration file] *****************************************************************************************************************
ok: [10.25.196.25]
TASK [webservs : start httpd] ********************************************************************************************************************************
changed: [10.25.196.25]
PLAY RECAP ***************************************************************************************************************************************************
10.25.196.25 : ok=4 changed=2 unreachable=0 failed=0
可以看到执行成功了,下面来查看一下
[root@node-1 ansible_playbook]# ansible webservs -m shell -a 'rpm -qa httpd'
[WARNING]: Consider using the yum, dnf or zypper module rather than running rpm. If you need to use command because yum, dnf or zypper is insufficient you
can add warn=False to this command task or set command_warnings=False in ansible.cfg to get rid of this message.
10.25.196.25 | SUCCESS | rc=0 >>
httpd-2.2.15-69.el6.centos.x86_64
[root@node-1 ansible_playbook]# ansible webservs -m shell -a 'ps aux | grep httpd'
10.25.196.25 | SUCCESS | rc=0 >>
root 19148 0.0 0.0 175536 3764 ? Ss 21:08 0:00 /usr/sbin/httpd
apache 19150 0.0 0.0 175536 2476 ? S 21:08 0:00 /usr/sbin/httpd
apache 19151 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19152 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19153 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19154 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19155 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19156 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19157 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
root 19335 0.0 0.0 106104 1128 pts/1 S+ 21:16 0:00 /bin/sh -c ps aux | grep httpd
root 19337 0.0 0.0 103260 832 pts/1 S+ 21:16 0:00 grep httpd
可以看到服务都是启动正常的。
总结:
最后的site.yml中,可以定义多个hosts,分别执行不同的任务.这样所有的代码都可以被反复使用。
- 目录名同角色名;
- 目录结构有固定格式;
ansible roles 介绍和使用的更多相关文章
- ansible roles 目录规范
我的ansible roles项目的目录结构: (ansible_venv) [root@localhost ansible_home]# tree ansible_playbooks/ ansibl ...
- Ansible Playbooks 介绍 和 使用 二
目录 handlers playbook 案例 2 handlers vars 变量 setup facts 变量使用 案例 inventory 中定义变量 案例 条件测试 when 语句 案例 迭代 ...
- 6.Ansible Roles角色实战
==Roles小技巧:== 1.创建roles目录结构,手动或使用ansible-galaxy init test roles 2.编写roles的功能,也就是tasks. nginx rsyncd ...
- Ansible简单介绍(一)
一 :ansible简单介绍 此名取自 Ansible 作者最喜爱的<安德的游戏> 小说,而这部小说更被后人改编成电影 -<战争游戏>. 官网地址:https://www.an ...
- Ansible--06 ansible roles
Ansible roles roles不管是Ansible还是saltstack,我在写一键部署的时候,都不可能把所有的步骤全部写入到一个'剧本'文件当中,我们肯定需要把不同的工作模块,拆分开来,解耦 ...
- ansible roles 自动化安装
例: ansible roles 自动化安装memcached 文件目录结构如下: cat memcached_role.yml - hosts: memcached remote_user: ro ...
- 第二十七章 ansible变量介绍
一.ansible变量介绍 1.概念 变量提供了便捷的方式来管理Ansible playbook的每一个项目中的动态值,比如nginx-1.6.3这个软件包的版本,在其它地方或许会反复使用,那么如果讲 ...
- ansible roles实践——安装nginx
1.创建roles 在/etc/ansible/roles目录下 1.1 手动创建需要的目录 1.2 使用命令创建,用不到的目录可以创建为空目录,但不可以不创建. 创建目录[root@master] ...
- Ansible之roles介绍
本节内容: 什么场景下会用roles? roles示例 一.什么场景下会用roles? 假如我们现在有3个被管理主机,第一个要配置成httpd,第二个要配置成php服务器,第三个要配置成MySQL服务 ...
随机推荐
- 全排列函数(next_permutation())
平常需要全排列的时候,一般都是dfs然后字符串匹配啥的……今天看题解的时候突然发现了这个神器. next_permutation()函数在c++的algorithm库里,作用是传入一个数组,输出这个数 ...
- Python文件处理:创建、打开、追加、读、写
在Python中,不需要导入外部库来读取和写入文件.Python为创建.写入和读取文件提供了内置的函数. 在本文中,我们将学习 如何创建文本文件 如何将数据附加到文件中 如何读取文件 如何逐行读取文件 ...
- csp-s模拟测试101的T3代码+注释
因为题目过于大神所以单独拿出来说.而且既然下发std了颓代码貌似也不算可耻233 很难讲啊,所以还是写在代码注释里面吧 因为比较认真的写了不少注释,所以建议缩放到80%观看,或者拿到gedit上 1 ...
- 《吊打面试官》系列-Redis哨兵、持久化、主从、手撕LRU
你知道的越多,你不知道的越多 点赞再看,养成习惯 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联 ...
- 原生JS实现栈结构
1. 前言 栈,是一种遵从后进先出(LIFO,Later-In-First-Out)原则的有序集合.新添加的元素都保存在栈的一端,称作栈顶,另一端叫做栈底.在栈中,新元素都靠近栈顶,旧元素都靠近栈底. ...
- Java基础系列5:Java代码的执行顺序
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.构造方法 构造方 ...
- [LINQ2Dapper]最完整Dapper To Linq框架(六)---多表联合与匿名类型返回
目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...
- python——切片
切片 格式:[start : end : step] start:起始索引,从0开始,-1表示结束 end:结束索引 step:步长 # 字符串,列表,元组等都可以支持切片截取的操作# 切片必须依赖于 ...
- CentOS7 编码编译安装或卸载http2.4.25 一键脚本
待完善 CentOS 7测试 哈哈 #!/bin/bash #************************************************************** #Autho ...
- Spring中常用的注解及作用
@Component(value) 配置类,当使用该注解时,SpringIOC会将这个类自动扫描成一个bean实例 不写的时候,默认是类名,且首字母小写 @ComponentScan 默认是代表进行扫 ...