我对厨师和我做的概念验证尝试使用它来构建Web服务器时相对陌生。由于这个问题超出范围的原因,我将创建多个Apache实例,我可能想同时创建和“删除”。同样的问题可能真的适用于在单个Apache实例中创建和删除虚拟主机配置。与厨师一起删除配置项目
我目前正在使用chef-client基于此节点的已定义属性创建所有的Apache实例。因此,例如,我可能具有定义Instance1
,Instance2
和Instance3
的属性。这一切在这一点上都工作得很好。实例目录获取创建像这样:
/opt/local/apache/Instance1/stuff
/opt/local/apache/Instance2/stuff
/opt/local/apache/Instance3/stuff
内容目录和服务得到相同的instancename
标识符创建。
问题来了,如果我想从该节点的属性中删除Instance3
。我的厨师 - 客户端运行将确保Instance1
& Instance2
配置正确,但Instance3
将继续作为厨师客户现在一无所知。
我明白在一个理想的世界里,你可能只是用新的配置启动一台新机器,而这个问题甚至都没有抬头。但是,我需要在无法重新配置的服务器上执行此操作(这只是在现有服务器上配置Apache的POC)。
我可以“删除并重新创建”,但这听起来对我来说不是幂等的。首先,文件时间戳会有所不同。即使没有任何东西要做,厨师客户做这些事情似乎也是错误的。
我自己想出了一个解决方案。在上面的示例中,我将在Ruby中获取所有实例名称的列表,包括/opt/local/apache/
,迭代它们并删除实例,如果它不是在属性中定义的实例。我把它放在一个单独的配方中,我称之为cleanup.rb
。如果我在主要安装配方之后运行此操作,并且没有删除配置,则它不会执行任何操作,因此似乎可以安全运行。
这很好,但它似乎hacky我担心这可能是一种反模式。从概念上讲,我是以正确的方式去做还是应该做一些与众不同的事情?在你的食谱中使用自定义的Ruby代码来做这样的事情是否被认为是正常和正确的?
谢谢coderanger。我检查了Zap,我必须明确地'遍历文件夹(Apache服务器目录,内容目录,systemd单元文件,并在需要的时候也切换运行的服务......)。我已经走了上面的方法。它似乎运作良好。感谢您的建议! – Tom17