Ansible中如何在一个role中引入其他多个role
Ansible 聚合角色使用解答
是否支持仅调用其他role的role
完全支持,这类角色通常被称为聚合角色或者元角色,是Ansible非常常见的用法,专门用来把多个关联的role打包成一个整体对外提供,减少playbook里重复声明role的工作量。
是否可以直接用playbook式的role列表声明
不能直接在role内部写playbook层级的hosts、roles配置,你可以用以下两种官方推荐的方式实现相同效果:
方式1:通过meta/main.yml的依赖声明(最常用)
在你的聚合角色的meta/main.yml文件中添加dependencies配置,所有被依赖的role会在当前聚合角色自身的tasks执行前按顺序运行:
--- dependencies: - role: role1 - role: role2 - role: role3
如果需要给子role传参数,直接在role声明下加对应变量即可:
dependencies: - role: role1 vars: role1_port: 8080
方式2:通过任务文件调用role(更灵活)
如果需要自定义执行顺序、添加执行条件或者在多个role中间插入其他任务,可以在聚合角色的tasks/main.yml中用import_role或者include_role模块调用其他role:
--- # 可以在调用role前先执行一些自定义任务 - name: 预检查环境配置 ansible.builtin.debug: msg: "即将开始批量执行关联role" - name: 执行role1 ansible.builtin.import_role: name: role1 - name: 满足条件时才执行role2 ansible.builtin.import_role: name: role2 when: enable_role2 == true - name: 执行role3 ansible.builtin.import_role: name: role3
注意事项
需要确保所有被调用的子role都在Ansible配置的roles_path搜索路径下,否则会报找不到role的错误。
内容的提问来源于stack exchange,提问作者jessefournier
相关产品推荐
相关产品推荐

