在Puppet中使用角色/配置文件中的全局变量而不覆盖节点定义

时间:2013-06-07 16:49:49

标签: roles puppet

我目前正在使用Craig Dunn的角色/配置文件范例构建一个新的puppet存储库,并遇到一个(可预见的)问题,试图将节点定义减少到只包括他们的角色。

我正在使用全局变量(在顶级作用域中默认定义)来实现常见类的基本区分(例如,确定哪些用户获得ssh访问)。但是因为我不想在节点定义中覆盖它们,所以我正在寻找一种在配置文件中设置它们的好方法。

基本上我的问题是puppet的静态范围:我不能只在角色类中覆盖它们,因为它不会像动态范围一样继承给孩子,我不能调用限定名在模块中,因为我不知道它叫哪个类。

到目前为止,我的想法是解决问题:

  1. 在顶级作用域中定义角色并覆盖其中的变量
    如果其他一切都失败了,这可能是肮脏的解决方法。虽然我不确定这些类是否会获得某种超顶级范围,并且能够实际覆盖它。

  2. 找出hiera是否能够看到哪个模块/类层次结构调用它并给我相应的值。可悲的是,我还没有找到适合hiera的文档/教程。

  3. 创建一个继承地狱 - 我宁愿不去思考它,它似乎不可能

  4. 创建一个参数化的类地狱 - 随着时间的推移会有很多变量要通过,这会导致大量的冗余和错误来源

  5. 制作包含在配置文件中的顶级范围类。虽然我不确定这会起作用(见1))

  6. 有没有人有一个很好的解决方案,尽可能不宽裕?或者你能否证实我的一个想法?

    顺便说一句:我想将节点定义减少到角色,包括因为我想将木偶仪表板用作E​​NC并尽快登录。

1 个答案:

答案 0 :(得分:1)

您是否考虑过向Hiera添加一个名为Roles的层次结构级别?

要完成这项工作,您需要:

  1. 在“节点定义”中添加一个变量,用于定义哪个角色是当前角色
  2. 向具有角色的节点添加事实
  3. 这将使Hiera能够为该角色获取特定的yaml文件。在此文件中,您可以指定用户。

    您也可以在个人资料级别执行此操作。