我有一台虚拟机(托管在“云”中),该虚拟机已使用我所在组织自己的 Chef 服务器配置了 Chef。
我想在本地复制该 VM(使用 vagrant 管理的 VM),以便进行一些 chef 开发。
我可以通过在 Chef 服务器上创建一个新节点并从现有节点手动复制角色、配方、属性等来做我想做的事情。
在我看来,这是一个非常常见的用例(即复制节点/虚拟机),因此可能有一种方法可以轻松做到这一点(而无需手动复制角色、配方、属性等) - 但遗憾的是,我找不到。
答案1
我所做的是设置本地虚拟机(通过 Vagrant 或简单的 VirtualBox VM),然后在那里设置完整的 Chef 服务器安装。之后,我将我的普通 knife.rb 复制到另一个 knife.rb 文件(如 knife.local.rb),在其中更改 Chef 服务器的 URL 并通过以下方式上传我的所有数据
knife cookbook upload -a -c ~/.chef/knife.local.rb
knife data bag from file users users/* -c ~/.chef/knife.local.rb
etc etc...
最后,当通过 Vagrant 测试你的食谱时,你可以使用本地 Chef 的地址来执行此操作!作为助手,你可以定义一个lknife
函数,它可以作为knife
本地 Chef 的工具。只需将其放入用户的 .bashrc 中
function lknife { `which knife` "$@" -c "$HOME/.chef/knife.local.rb"; }
答案2
knife edit
可以做到:
knife edit <existing node name> # Change "name" attribute to something unique
这将创建一个具有与现有节点相同的运行列表和属性(名称除外)的新节点。