1

我已经尝试了几种不同的方法,包括创建一个新配方并通知该配方运行,但我一直遇到同样的问题,即在资源运行之前克隆的 repo 目录不存在file,所以我收到了一个致命错误。

我的问题是,我可以在文件资源尝试执行之前让 git clone 完成,还是有更好的方法来做到这一点?

SN:我正在尝试通过新的用户环境设置来完成交易 - 所以在创建新用户之后,我将从将为该用户部署的 git repo 中克隆一堆配置文件。

  git "/home/#{user_id}/.myconfigs" do
    repository "https://url/to/repo"
    reference "master"
    user user_id
    group user_id
    action :checkout
    not_if "test -d /home/#{user_id}/.myconfigs"
    #notifies :run, "recipe[zsh_workstation::zshrc]"
  end

  file "/home/#{user_id}/.zshrc" do
    content IO.read("/home/#{user_id}/.myconfigs/.zshrc")
    owner user_id
    group user_id
    mode "0600"
    action :create_if_missing
  end
4

1 回答 1

4

检查厨师跑步的解剖

在厨师编译你的文件资源的那一刻,git资源还没有运行(甚至没有启动),所以文件“/home/#{user_id}/.myconfigs/.zshrc”不存在。

可能的解决方法:

  1. 这将在 git 使用FileUtils创建文件后复制文件。

    ruby_block "create /home/#{user_id}/.zshrc" do
      block do
        ::FileUtils.copy("/home/#{user_id}/.myconfigs/.zshrc", "/home/#{user_id} /.zshrc") unless ::File.exists? "/home/#{user_id}/.zshrc" 
      end
    end
    
  2. 符号链接而不是复制。

    link "/home/#{user_id}/.zshrc" do
      to "/home/#{user_id}/.myconfigs/.zshrc"
    end
    
  3. 在编译阶段运行 git 资源。

    git "/home/#{user_id}/.myconfigs" do
      [...]
      action :nothing
    end.run_action :checkout
    
于 2013-01-03T08:44:04.523 回答