рецепт шеф-повара, дождитесь завершения git clone

Я пробовал это несколькими разными способами, включая создание нового рецепта и уведомление о запуске этого рецепта, но я продолжаю сталкиваться с одной и той же проблемой, заключающейся в том, что клонированный каталог репо не существует до запуска ресурса file, поэтому я получаю фатальная ошибка.

мой вопрос: могу ли я завершить клонирование git до того, как файловый ресурс попытается выполниться, или есть лучший способ сделать это?

SN: то, что я пытаюсь выполнить, связано с настройкой новой пользовательской среды, поэтому после создания нового пользователя я клонирую кучу файлов конфигурации из репозитория git, которые будут развернуты для этого пользователя.

  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

person veilig    schedule 03.01.2013    source источник


Ответы (1)


Ознакомьтесь с Анатомией прогона шеф-повара.

В тот момент, когда шеф-повар компилирует ваш файловый ресурс, ресурс 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
    
person Draco Ater    schedule 03.01.2013
comment
Большое спасибо, это все отличные ответы! Я новичок в шеф-поваре и рубине, и это действительно помогло! - person veilig; 03.01.2013