什么是角色

角色是一种解决问题的思想,也是一种规范。

目录

角色的目录结构如下:

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------角色的更多相关文章

  1. ansible基础-ansible角色的使用

    ansible基础-ansible角色的使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们建议把多个节点都会用到的功能将其定义模块,然后谁要用到该模块就直接调用即可!而在a ...

  2. Ansible角色

    Ansible角色介绍 官方地址: https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html 角色目录 ...

  3. ansible 角色登陆

    用ansible 来管理远程的主机,最大的好处是方便,ansible不用在远程的主机上安装ansible的客户端,ansible只要能通过ssh连接上远程主机就 能对它进行管理.也就是说ansible ...

  4. Ansible_使用Ansible galaxy部署角色

    一.介绍Anisble galaxy 1.介绍Ansibleu galaxy 1️⃣:Ansible Galaxy (官网:https://galaxy.ansible.com)是一个Ansible内 ...

  5. ansible实现keepalived和nginx高可用

    实验环境 ansible节点 keepalived+nginx节点1    ansible自动安装配置 keepalived+nginx节点2    ansible自动安装配置 httpd节点1 ht ...

  6. 使用ansible安装配置zabbix客户端

    ansible角色简介: 目录名 说明 defaults 默认变量存放目录 handlers 处理程序(当发生改变时需要执行的操作) meta 角色依赖关系处理 tasks 具体执行的任务操作定义 t ...

  7. Ansible_描述角色结构

    一.利用角色构造ansible playbook 1.What's 角色 1️⃣:Ansible角色提供了一种方法,让用户能以通用的方式更加轻松地重复利用Ansible代码. 我们可以在标准化目录结构 ...

  8. 进击的 Ansible(二):如何快速搞定生产环境 Ansible 项目布局?

    Tips:与前文 <进击的 Ansible(一):Ansible 快速入门> 一样,本文使用的 Ansible 版本 2.5.4,项目演示环境 MacOS.由于 Ansible 项目开发活 ...

  9. Pyhton开源框架(加强版)

    info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...

  10. Python开源框架

    info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...

随机推荐

  1. 压力测试Apache

    在做类似商城秒杀系统的同事都知道要在支持高并发,高可用的环境下进行多次的压力测试来防止自己的项目结构被高额的点击量击穿,导致商品超卖等损失 介绍一款简单的软件 xampp xam里带了Apache服务 ...

  2. 英特尔关闭PC计算卡项目—插个卡片就能升级个人电脑

    在 2017 年的美国国际消费电子展上,电脑芯片巨头英特尔公司曾经推出一个名为“计算卡”的新产品,相当于把个人电脑的重要零部件整合到了一张信用卡大小的卡片设备中,未来用户升级个人电脑,只需要拔下旧卡片 ...

  3. python print 在windows上 出现 Bad file descriptor error

    先说一下情况,一个python写的采集程序,做成windows服务在windows上运行. 这个问题出现的挺奇特,本来一套采集程序,一个采集文件的时候没问题,两个采集文件的时候也没问题,当三个采集文件 ...

  4. Java泛型中<? extends E>和<? super E>的区别

    这篇文章谈一谈Java泛型声明<? extends E>和<? super E>的作用和区别 <? extends E> <? extends E> 是 ...

  5. PS调出唯美紫蓝色天空背景女生照片

    教你学会用PS给照片叠加素材,达到想要的效果. 首先,作为摄影在拍摄前,我们要明白自己拍摄主题与目的,希望后期达到的效果,尤其是当我们需要后期叠加素材时,脑海中自然而然会有大致画面,就以“夏日”这组为 ...

  6. 2019微信公开课 同行With Us 听课笔记及演讲全文

    [2019WeChat 微信公开课] 产品理念: 微信启动页 一个小人站在地球前面,每个人都有自己的理解和解读 所谓异类,表示与别人与众不同,即优秀的代名词. 微信的与众不同体现在尊重用户对产品的感受 ...

  7. Linux下开启和关闭Telnet服务

    telnet与ssh相比,安全性能并不高,但是在SSH版本升级或者其他的情况下还是需要开启这一服务. linux提供服务是由运行在后台的守护程序(daemon)来执行的,telnet服务是由xinet ...

  8. 线程池、进程池(concurrent.futures模块)和协程

    一.线程池 1.concurrent.futures模块 介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 Pro ...

  9. 使用ServletContext对象读取资源文件

    备注:本文以properties文件为例 一.通过ServletContext读取文件 1.通过ServletContext读取放置在src下的properties文件 package com; im ...

  10. python学习日记(OOP——反射)

    反射 反射就是通过字符串的形式,导入模块:通过字符串的形式,去模块寻找指定函数,并执行.利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动! hasattr ...