【发布时间】:2017-12-28 22:32:24
【问题描述】:
是否可以通过munge 调用或类似的方法来规范化标题值?
我有一个自定义类型/提供程序来管理 Windows 机器上的本地组成员身份(我们需要对组成员身份进行更细化,而不仅仅是在用户/组类型内部。
group_member{"Group => Member":
ensure=>present,
}
group_member{"Group => DOMAIN\Member":
ensure=>present,
}
resources{'group_member':
purge =>true,
}
一般来说,当一切都一致时,一切都会很好。问题在于 windows/active 目录不区分大小写。因此,当self.instances 被调用时,它会生成一个资源Group_member["Users => DOMAIN\SomeGroup"],但在我们的puppet manifest 中,Users 是硬编码的,DOMAIN 来自一个事实,SomeGroup 来自一个层次值。
在这方面,我们与 puppet 的大小写敏感问题斗争了大约 5 年,我们的大多数管理员已经习惯于确保域和 yaml 配置之间的大小写匹配。
现在,我们遇到了一个新问题……不知怎的,DOMAIN 搞砸了。在新的测试域上,NETBIOS 名称是小写的。我们返回 DOMAIN 的事实仍然返回大写,但 Windows ADSI 返回小写形式。如果我们不使用resources{'group_member': purge=>true},这不会是一个问题,但是现在在这个测试环境中,每个puppet 运行时都会添加(通过它们各自的.pp 文件)和删除(通过resources{'group_member': purge=>true}})组。
理想情况下,我只想将self.instances 和所有 .pp 文件中的所有内容都标准化为小写,但我们有 400 个 puppet 模块,我们使用 group_member 120 次,由相当多的不同团队管理。如果我可以 munge 标题元参数会容易得多。
有什么建议吗?
【问题讨论】:
-
我不知道有任何方法可以拦截或修改资源 title,但我认为您可以为您的类型的 namevar 设置 munging。然后,您需要确认当 namevar 自动从资源标题中获取其值时,实际上触发了 munging,而不是明确表示它。您还需要确认此机制可以保护您的资源免遭清除——我怀疑如果操作正确,它会保护您的资源,但我之前实际上没有这样做过。
-
@JohnBollinger 我使用两个参数作为名称变量的一部分,虽然我尝试过修改它们,但标题保留了原始字符串值 pre-title_pattern。
-
您确实应该关注自定义类型中的
namevar代码。类型代码当然支持 Munging,我已经看到了示例。这将极大地帮助您尝试在此处应用的管道胶带方法。但是,您在此处描述了一些关于自定义类型和自定义事实代码的非常可疑的内容。这两个 cmets 都需要查看相关代码以获得进一步的帮助,而不是模糊的描述。如果您有 NDA 问题,请先对其进行消毒。 -
@ruckc,正如我所说,我认为您不能拦截或更改资源标题。然而,当我没有明确地说你不应该这样做时,我可能假设太多了。修改 namevar 或其组件将导致(有时)资源名称与其标题不同,这完全可以。
标签: puppet custom-type