在 Chef Recipe 中更改目录

Changing directory within Chef Recipe

这是我第一次尝试写一本厨师食谱。我正在尝试编写一个自动安装 git 的方法,创建一个新目录 (git_repo/),切换到该目录,初始化为 git 存储库,然后连接到一旦我在我的节点上 运行 chef-client,远程 git 存储库。我得到它来安装 git 并创建目录,但我不确定如何在配方中写入以将目录更改为 git_repo。我的代码是

package 'git' do
  action :install 
end 

directory '/home/git_repo' do   
  mode 0755   
  owner 'root'   
  group 'root'   
  action :create 
end

execute 'change' do
  command "sudo cd git_repo" 
end

除了针对此特定操作执行之外,是否还有更好的资源类型可供使用?如果是这样,有人可以详细说明吗?

execute 资源作为 属性 cwd:

cwd: The current working directory from which a command is run.

为了 运行 来自 git_repo/ 目录的命令作为工作目录,使用以下声明:

execute 'init' do
  command "git init"
  cwd "/home/git_repo"
end

因为这很可能在第二位厨师 运行 上失败(因为 git init 不会成功),您应该 guard 使用 creates 属性:

creates: Prevent a command from creating a file when that file already exists.

execute 'init' do
  command "git init"
  cwd "/home/git_repo"
  creates "/home/git_repo/.git"
end

一般来说,我不确定您是否真的要初始化一个空存储库。如果您只想克隆存储库,请使用 git 资源。