我开始在私人管理的客户端-服务器环境中采用 Chef。
我希望管理一个相当大的开放实验室环境、用户桌面和各种类型的服务器。目前所有系统都是基于 *nix 的,但我想创建一个允许灵活性并避免重复的结构。
其他人是如何构建他们的环境的?我似乎无法解决的一个领域是覆盖或继承...例如,工作站将具有工作站角色,其中包含的一个配方允许特定子集的用户登录并使用机器,但不允许进一步的权限。然后,我想允许一小部分用户仅在其中一个工作站上安装软件包。如何使用 chef 处理这个问题?我通常只会推送一个新的 /etc/sudoers 文件,但这样做会导致 chef 恢复到工作站 sudoers,然后在每次运行时推送更新的版本。我想在这种情况下我可以使用 /etc/sudoers.d/,但我觉得这个覆盖问题会在其他情况下出现,所以一些见解会很好!
我认为我或我的团队还没有完全弄清楚 Chef 是如何组合在一起的,所以我们可能错过了某些属性或元数据是如何工作的,但目前我们还不是很清楚。
答案1
只要有可能,最好使用“foo.d”解决方案。但是,当两个配方必须对同一个文件进行更改时,您需要选择一个配方作为控制器,然后使用属性从模板生成文件。
您可以使用复杂的优先级方案覆盖和设置配方、角色、环境或节点配置中的属性。请参阅http://docs.opscode.com/chef_overview_attributes.html#attribute-precedence
对于管理 sudoers,我会查看社区手册http://community.opscode.com/cookbooks/sudo看看它是否能满足您的需要。