文章目录

  • role
    • **目录结构**
    • **Tags的影响**
    • **执行role中指定的task文件**
  • import_role
    • **使用方法**
    • **静态引用**
    • **Tag的影响**
    • **执行role中特定的task文件**
  • include_role
    • **使用方法**
    • **动态引用**
    • **Tag的影响**
    • **执行role中特定的task文件**

role

目录结构

一个role可以包含以下八个目录

common/tasks/        #  任务文件handlers/    # handler文件library/files/        # 一般不变的文件,比如tar包templates/        # 模板文件,需要替换变量,.j2文件vars/        # 变量文件defaults/    # 默认变量文件meta/        # role的依赖关系

Tags的影响

当在play中直接使用role时,role的tag会传给它包含的每一个task,比如:

---
- hosts: ["all"]gather_facts: noroles:- role: kubelettags: ["t1"]

那么t1会传给roles/kubelet/tasks/main.yml中的每一个task。比如main.yml文件内容如下:

---
- name: 安装kubeletdebug:msg: "install kubelet"tags: ["t2"]- name: 安装dockerdebug:msg: "install docker"tags: ["t3"]

我们执行时添加--tags t1--tags t2,t3,两个task都会被执行

$ ansible-playbook --tags t1 playbook.yml PLAY [all] ************************************************************************************************************************************************************************************TASK [安装kubelet] ******************************************************************************************************************************************************************************
ok: [192.168.2.103] => {"msg": "install kubelet"
}TASK [kubelet : 安装docker] *********************************************************************************************************************************************************************
ok: [192.168.2.103] => {"msg": "install docker"
}PLAY RECAP ************************************************************************************************************************************************************************************
192.168.2.103              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

执行role中指定的task文件

Role不能像import_roleinclude_role那样通过tasks_from来指定执行哪一个task文件


import_role

使用方法

前面我们可以在playbook当中通过role来引用role,我们还可以通过import_role来引用role,如下:

---
- hosts: ["master"]tasks:- import_role:name: kubelet- import_role:name: kubectl - hosts: ["node"]tasks:- import_role:name: kubelet

静态引用

include_role相比,import_role是一种静态引用。所谓静态引用,就是在预编译阶段,就知道整个playbook要执行哪些任务,具体的表现如下:

  • 1、引用的role的不允许使用变量(varsvars-file除外)
  • 2、import_role本身不会被当作是一个task

比如如下,在import_role的task的名字为task1

---
- hosts: ["all"]gather_facts: notasks:- name: task1import_role:name: kubelet

我们在执行发现,task的名字中并不会有这个task:

$ ansible-playbook playbook.yml PLAY [all] ************************************************************************************************************************************************************************************TASK [安装kubelet] ******************************************************************************************************************************************************************************
ok: [192.168.2.103] => {"msg": "install kubelet"
}PLAY RECAP ************************************************************************************************************************************************************************************
192.168.2.103              : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Tag的影响

当使用import_role时,会把import_role这个task的tag添加到role里面的每个task上。

比如playbook如下:

---
- hosts: ["all"]gather_facts: notasks:- name: task1import_role:name: kubelettags: ["t1"]

roles/kubelet/tasks/main.yml如下:

---
- name: 安装kubeletdebug:msg: "install kubelet"tags: ["t2"]- name: 安装dockerdebug:msg: "install docker"tags: ["t3"]

经过验证,当我们执行这个playbook,使用--tags t1--tags t2,t3时,两个task都会被执行

$ ansible-playbook --tags t1 playbook.yml PLAY [all] ************************************************************************************************************************************************************************************TASK [安装kubelet] ******************************************************************************************************************************************************************************
ok: [192.168.2.103] => {"msg": "install kubelet"
}TASK [kubelet : 安装docker] *********************************************************************************************************************************************************************
ok: [192.168.2.103] => {"msg": "install docker"
}PLAY RECAP ************************************************************************************************************************************************************************************
192.168.2.103              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

而使用--tags t2时,只有 安装kubelet 会被执行。

执行role中特定的task文件

如果role中有多个task文件,我们可以通过下面的方法来指定执行哪个task文件中的task,比如我们如果想执行roles/kubelet/tasks/install.yml中的task

---
- hosts: ["all"]gather_facts: notasks:- import_role:name: kubelettasks_from: install.yml

include_role

使用方法

前面我们可以在playbook当中通过role来引用role,我们还可以通过include_role来引用role,如下:

---
- hosts: ["all"]tasks:- name: task1include_role:name: kubelet

动态引用

import_role相比,include_role是一种动态引用。所谓动态引用,就是在执行阶段,才知道整个playbook要执行哪些任务,具体的表现如下:

  • 1、引用的role的名字允许使用变量
  • 2、include_role本身会被当作是一个task

比如如下,在include_role的task的名字为task1

---
- hosts: ["all"]gather_facts: notasks:- name: task1include_role:name: kubelet

我们在执行发现,task的名字中并不会有这个task:

$ ansible-playbook playbook.yml PLAY [all] ************************************************************************************************************************************************************************************TASK [task1] **********************************************************************************************************************************************************************************TASK [安装kubelet] ******************************************************************************************************************************************************************************
ok: [192.168.2.103] => {"msg": "install kubelet"
}TASK [kubelet : 安装docker] *********************************************************************************************************************************************************************
ok: [192.168.2.103] => {"msg": "install docker"
}PLAY RECAP ************************************************************************************************************************************************************************************
192.168.2.103              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Tag的影响

当使用include_role时,include_role本身的tag不会传递给它所引用的task。

比如playbook如下:

---
- hosts: ["all"]gather_facts: notasks:- name: task1include_role:name: kubelettags: ["t1"]

roles/kubelet/tasks/main.yml如下:

---
- name: 安装kubeletdebug:msg: "install kubelet"tags: ["t2"]- name: 安装dockerdebug:msg: "install docker"tags: ["t3"]

经过验证,当我们执行这个playbook,使用--tags t1时,只会执行task1这个task

$ ansible-playbook --tags t1 playbook.yml PLAY [all] ************************************************************************************************************************************************************************************TASK [task1] **********************************************************************************************************************************************************************************PLAY RECAP ************************************************************************************************************************************************************************************

而使用--tags t2,t3时,都不会执行

ansible-playbook --tags t2,t3 playbook.yml PLAY [all] ************************************************************************************************************************************************************************************PLAY RECAP ************************************************************************************************************************************************************************************

只有使用--tags t1,t2,t3时,三个task才会都被执行(已验证)

执行role中特定的task文件

如果role中有多个task文件,我们可以通过下面的方法来指定执行哪个task文件中的task,比如我们如果想执行roles/kubelet/tasks/install.yml中的task

---
- hosts: ["all"]gather_facts: notasks:- include_role:name: kubelettasks_from: install.yml

辨析 role、import_role、include_role相关推荐

  1. html5之role作用

    role属性作用是告诉Accessibility类应用(比如屏幕朗读程序,为盲人提供的访问网络的便利程序),这个元素所扮演的角色,主要是供残疾人使用.使用role可以增强文本的可读性和语义化. 在ht ...

  2. ansible基础-playbooks

    1. playbooks介绍 如果说ansible的modules是工具,inventory配置文件是原材料,那么playbook就是一封说明书,这里会记录任务是如何如何执行的,当然如果你愿意,这里也 ...

  3. Ansible自动化运维2

    目录 一 Playbook运维 1.1验证YAML语法 1.2play的定义 1.3完整playbook 2.ansbible 变量 2.1主机变量 2.2facts变量 2.3.注册变量 2.4变量 ...

  4. ansible-playbook role角色

    文章目录 1. 介绍 2. 创建roles步骤 3. roles各目录中文件 4. 存储和查找角色 5. 使用角色 5.1 role 5.1.1 使用 allow_duplicates: true 5 ...

  5. Dynamics CRM 导入用户数据错误 could not retrieve salesperson role

    在CRM中通过导入数据的方式创建用户时报下图中的错误,"could not retrieve saleperson role".原因是系统中的自带的salesperson安全角色被 ...

  6. ORA-01919: role 'PLUSTRACE' does not exist

    环境:Oracle 10g,11g. 现象:在一次迁移测试中,发现有这样的角色赋权会报错不存在: SYS@orcl> grant PLUSTRACE to jingyu; grant PLUST ...

  7. 角色权限(Role)和系统权限(System)的几个澄清实验

    数据库安全是一个内容丰富的体系结构,其中访问控制和操作控制是安全体系的重要内容.Oracle数据库作为目前最成熟的商用数据库产品,其安全访问体系是行业界普遍接受的标准. Oracle数据库权限体系是一 ...

  8. [导入]Nhibernate引入自定义Membership和Role

    Custom Membership and Role Providers using NHibernate 该工程已经迁入CodePlex 地址 http://www.codeplex.com/nhi ...

  9. playbook核心元素之 -- 角色role(9)

    playbook核心元素之 --> 角色role 角色: 以特定的层级目录结构进行组织的tasks.variables.handlers.templates.files等: role_name/ ...

最新文章

  1. invalid dts/pts combination
  2. 怎么改utf8_想重装python但有很多包怎么办?不要慌,教你如何快速重装
  3. 5个杰出的商业机器学习用例
  4. 获得网页中元素的位置
  5. pt-show-grants的用法
  6. C++指针探讨 (二) 函数指针
  7. 自动化部署之git merge和git rebase的区别
  8. java 构造函数的执行顺序
  9. Linux基础入门之VM和centos的安装使用
  10. BabeLua历史版本及更新计划
  11. 个人记账软件测试初学者,好用的个人记账软件
  12. 控制策略 | PI控制器积分分离的仿真分析
  13. 通过ip查找域名的网站
  14. emqx启用JWT令牌认证(包含hmac-based和public-key)
  15. C++经典编程题目(九)玩火柴棍游戏
  16. win10安装Tomcat10详细教程
  17. プログラム・ライブラリ
  18. C++实现 数字游戏之拼出最大数
  19. 技术支持工程师面试试题
  20. 社保,你不能做的N件事

热门文章

  1. 麻雀搜索算法matlab代码
  2. Flutter 小技巧之 3.7 性能优化background isolate
  3. 大家我是来自广东工业大学的吴文钧
  4. 10组团队项目-Beta冲刺-5/5
  5. paperwhite3翻页_亚马逊Kindle Paperwhite第二代评论-以及新的Kindle软件更新
  6. Mysql8创建用户以及赋权操作
  7. 华数机器人码垛_华数码垛机器人工艺包详细说明
  8. mysql创建学生答题系统_jsp+ssm+mysql实现的学生在线考试系统
  9. MSDN经典案例分析--PetShop
  10. 电商平台-商品价格的设计与架构