Ansible:连接角色(元,角色名称:或import_role)的最佳实践

时间:2019-01-24 10:30:27

标签: ansible roles

据我所知,有三种方法可以调用另一个角色:

1)在包含role: rolename的剧本中

2)在角色本身的 rolename / meta / main.yml 文件中,并带有

dependencies:
  - { role: rolename2 }

3)

- import_role:
    name: anotherrolename

我想我也知道这些区别: 2号(元方法)将在任务中指定的内容之前执行 rolname2 。 3号= https://docs.ansible.com/ansible/2.4/import_role_module.html

首先,我的问题不是这两种方法之间的区别(请随时告诉我们),但我想知道连接两个(或更多)角色的最佳实践是什么。方法1、2或3?

2 个答案:

答案 0 :(得分:1)

如果您有一个非常简单的项目,希望在所有节点上以相同的顺序运行相同的角色,请继续并按顺序在剧本中对其进行调用。

如果您有一些更复杂的依赖关系,并且只想管理彼此依赖的角色,那么就我所知,meta依赖关系方法就可以了。

除非您需要 function PDF() { SpreadsheetApp.flush(); var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var gid = sheet.getSheetId(); var pdfOpts = '&size=letter&fzr=false&portrait=true&fitw=false&gridlines=false&scale=1&top_margin=0.17&bottom_margin=0.17&left_margin=0.1&right_margin=0.1&printtitle=false&sheetnames=false&pagenum=UNDEFINED&attachment=false&gid='+gid; var row2 = 66; var printRange = '&c1=0' + '&r1=0' + '&c2=15' + '&r2='+row2; // B2:APn var url = ss.getUrl().replace(/edit$/, '') + 'export?format=pdf' + pdfOpts + printRange; var app = UiApp.createApplication().setWidth(300).setHeight(100); app.setTitle('Print this sheet'); var link = app.createAnchor('Download PDF', url).setTarget('_new'); app.add(link); ss.show(app); }; 的其他功能,例如在另一个任务列表中使用不同的参数多次运行角色,否则元数据依赖关系将是首选,因为{{ 1}}是在撰写in preview时。

答案 1 :(得分:0)

角色“依赖项” 处理此问题的事实上的标准方法。

请参阅:https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html#role-dependencies

---
dependencies:
- role: wheel
  vars:
     n: 1
- role: wheel
  vars:
     n: 2
- role: wheel
  vars:
     n: 3
- role: wheel
  vars:
     n: 4

如果您需要较低级别的解释,请提供您的特定用例。