Ansible------角色
什么是角色
角色是一种解决问题的思想,也是一种规范。
目录
角色的目录结构如下:
files:
存放由copy或script模块等调用的文件。 templates:
template模块查找所需要模板文件的目录。 tasks:
用于定义任务,至少应该包含一个名为main.yml的文件(类似于java和go等编译性语言,用于指定程序的入口),其他的文件需要在此文件中通过include进行包含。 handlers:
定义处理器,至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中通过include进行包含。 vars:
定义变量,至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中通过include进行包含。 meta:
定义元数据,至少应该包含一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系,其他的文件需要在此文件中通过include进行包含。 default:
设定模式变量时使用此目录中的main.yml文件。
存放路径
#查看默认存放位置,当然这个路径是可以修改的
[root@node101.yinzhengjie.org.cn ~]# grep roles_path /etc/ansible/ansible.cfg
roles_path = /etc/ansible/roles:/usr/share/ansible/roles
也可以使用绝对路径的方式调用角色,例如:
- hosts: test70
roles:
- "/testdir/ansible/testrole/"
实例
1、简单变量应用
[root@localhost ansible]# tree roles/
roles/
└── ceshi
├── defaults
│ └── main.yml
└── tasks
└── main.yml 3 directories, 2 files
[root@localhost ansible]# more test.yml
- hosts: all
roles:
- role: ceshi
[root@localhost ansible]# more roles/ceshi/tasks/main.yml
- debug:
msg: "hello {{ testvar }}!"
[root@localhost ansible]# more roles/ceshi/defaults/main.yml
testvar: "role"
我们在defaults文件夹下设置默认变量,即使在调用角色时没有任何参数的传入,也有默认的值可以使用。
此处需要注意,在默认情况下,角色中的变量是全局可访问的。
这句话怎么理解呢,看两个小实验:
1、新建一个role,并设置默认role变量
2、在调用角色时传入变量
在默认的情况下,角色的变量是全局可访问的,在上例中,将testvar设置为ceshi3的同时,默认将角色的变量也设置成了ceshi3,所以最终呈现了相同的变量。
如果想要改变这种情况,需要将变量的访问域变成角色所私有的。
需要设置/etc/ansible/ansible.cfg文件,去掉private_role_vars = yes的注释号。
这时候重新执行,查看结果,如你所想!
2、对同一角色的多次调用
默认情况下,我们无法对同一角色多次调用,即使你写很多遍,默认的只是调用了一次。
同样以上述环境举例:
要想多次调用同一角色,有两种方法:
方法一:设置角色的allow_dumplates属性,让其支持重复调用
这个属性需要在meta/main.yml文件中设置
方法二:调用角色时传入的参数值不同
3、var文件下变量优先级问题
var文件下变量的优先级具有很高的权限,距离测试一下
定义了3种变量,最终生效的还是vars下的变量!
当然如果你实在不想用这个变量,还可以在执行playbook时用-e传递新的参数变量
由此可见,除了使用-e参数外,任意变量的优先级都不如vars下的高!
4、templates使用
定义一个模板并放置在templates目录下
[root@localhost templates]# more test.conf.j2
something in template;
{{ template_var }}
模板中使用了template_var变量,我们把他定义在defaultes目录下
[root@localhost defaults]# more main.yml
testvar: "defaults"
template_var: "template"
在tasks直接使用这个模板
[root@localhost tasks]# more main.yml
- debug:
msg: "hello {{ testvar }}!"
- template:
src: test.conf.j2
dest: /opt/test.conf
5、handlers使用
在角色中使用handler触发,需要在handlers文件夹下进行配置。
[root@localhost handlers]# more main.yml
- name: test_handler
debug:
msg: "this is a test handler"
在其中定义了一个test_handler任务以便随时触发
为了能够更加简单的触发,在task/main.yml中的debug任务的状态设置为changed
[root@localhost tasks]# more main.yml
- debug:
msg: "hello {{ testvar }}!"
changed_when: true
notify: test_handler
当需要notify对应的handler时,直接写入名字就行,角色会自动去handlers/main.yml中去寻找
Ansible------角色的更多相关文章
- ansible基础-ansible角色的使用
ansible基础-ansible角色的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们建议把多个节点都会用到的功能将其定义模块,然后谁要用到该模块就直接调用即可!而在a ...
- Ansible角色
Ansible角色介绍 官方地址: https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html 角色目录 ...
- ansible 角色登陆
用ansible 来管理远程的主机,最大的好处是方便,ansible不用在远程的主机上安装ansible的客户端,ansible只要能通过ssh连接上远程主机就 能对它进行管理.也就是说ansible ...
- Ansible_使用Ansible galaxy部署角色
一.介绍Anisble galaxy 1.介绍Ansibleu galaxy 1️⃣:Ansible Galaxy (官网:https://galaxy.ansible.com)是一个Ansible内 ...
- ansible实现keepalived和nginx高可用
实验环境 ansible节点 keepalived+nginx节点1 ansible自动安装配置 keepalived+nginx节点2 ansible自动安装配置 httpd节点1 ht ...
- 使用ansible安装配置zabbix客户端
ansible角色简介: 目录名 说明 defaults 默认变量存放目录 handlers 处理程序(当发生改变时需要执行的操作) meta 角色依赖关系处理 tasks 具体执行的任务操作定义 t ...
- Ansible_描述角色结构
一.利用角色构造ansible playbook 1.What's 角色 1️⃣:Ansible角色提供了一种方法,让用户能以通用的方式更加轻松地重复利用Ansible代码. 我们可以在标准化目录结构 ...
- 进击的 Ansible(二):如何快速搞定生产环境 Ansible 项目布局?
Tips:与前文 <进击的 Ansible(一):Ansible 快速入门> 一样,本文使用的 Ansible 版本 2.5.4,项目演示环境 MacOS.由于 Ansible 项目开发活 ...
- Pyhton开源框架(加强版)
info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...
- Python开源框架
info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...
随机推荐
- dede 5.7 任意用户重置密码前台
返回了重置的链接,还要把&删除了,就可以重置密码了 结果只能改test的密码,进去过后,这个居然是admin的密码,有点头大,感觉这样就没有意思了 我是直接上传的一句话,用菜刀连才有乐趣 ...
- try/catch中finally的执行时间
前言 由于总是搞不清楚try/catch中的一个执行顺序,返回结果.所以总结一下 1.finally没有return 时,可以看出finally确实在return之前执行了 public static ...
- devmem读写物理内存和devkmem读取内核虚拟内存
关键词:/dev/mem./dev/kmem.mmap.__va.__pa.remap_pfn_range等等. 在日常工作中常有直接操作寄存器或者某一物理地址的需求,busybox中提供了devme ...
- ARC089E GraphXY 构造
传送门 在Luogu上评了"NOI"之后评级变成了"普及+/提高"--我觉得我可能要退群了 考虑构造一个这样的图: 其中上半部分是从\(S\)开始的一条长\(1 ...
- Visual Studio 2017 设置透明背景图
一.前言 给大家分享一下,如何为VS2017设置透明背景图.下面是一张设置前和设置后的图片. 设置前: 设置后: 二.设置背景图片的扩展程序 我们打开VS的扩展安装界面:[工具]->[扩展和更新 ...
- Python_Int
int型 用于计算. 十进制转化成二进制的有效位数. 1 0000 0001 2 0000 0010 3 0000 0011 ... ... 100 ? 计算十进制转化成二进制的有效位数.(使用bit ...
- 【转】深入分析 Parquet 列式存储格式
Parquet 是面向分析型业务的列式存储格式,由 Twitter 和 Cloudera 合作开发,2015 年 5 月从 Apache 的孵化器里毕业成为 Apache 顶级项目,最新的版本是 1. ...
- CodeSmith如何生成实体类 ,完善版
<%-- Name: Database Table Properties Author: Paul Welter Description: Create a list of properties ...
- Android NDK(C++) 双进程守护
双进程守护如果从进程管理器观察会发现新浪微博.支付宝和QQ等都有两个以上相关进程,其中一个就是守护进程,由此可以猜到这些商业级的软件都采用了双进程守护的办法. 什么是双进程守护呢?顾名思义就是两个进程 ...
- python之异常处理和re模块补充
一.re模块的补充 1.从一个字符串中获取要匹配的内容 findall:返回一个列表 2.search ***** 验证用户输入内容 '^正则规则$':返回一个对象,用group()取值 3.matc ...