Манифест проекта Boxen не разрешает $repo_dir

Я пытаюсь использовать Boxen для настройки нашей среды разработки. У нас есть несколько репозиториев, которые мы хотим открыть и запустить скрипт, чтобы начать работу. Мы пришли к соглашению: в репозиториях есть каталог scripts/ со сценарием bootstrap, который необходимо запустить.

Похоже, это возможно с помощью команды exec. Но чтобы сказать ему, что запускать, мне нужно получить доступ к каталогу репо. Другие скрипты используют $repo_dir или ${boxen::config:srcdir}/${name}. Я пробовал каждый из них и несколько разных стилей exec, но безрезультатно.

Манифест

class projects::hero {

  include ruby

  boxen::project { 'hero':
    ruby          => '2.0.0',
    source        => 'myorg/hero'
  }
  ->
  Exec {
    command       => '$repo_dir/scripts/echo'
  }
  ->
  notify {'hero is running at $srcdir':}
}

Это проще заявленной цели. Скрипты должны запускаться в каталоге, в котором они находятся. Итак, мой первый (и, надеюсь, окончательный) манифест будет иметь что-то вроде этого для шага exec:

->
exec { 'running bootstrap on hero':
  command         => '$repo_dir/scripts/bootstrap',
  cwd             => '$repo_dir/scripts'
}

Сценарий

На данный момент scripts/echo очень прост:

#!/bin/bash
echo "Echo File!"
touch `date`

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

Вызов бокса

Я просто вызываю этот проект прямо из каталога manifests:

Chris:manifests chris$ boxen hero

Выход

Warning: Scope(Class[Boxen::Environment]): Setting up 'hero'. This can be made permanent by having 'include projects::hero' in your personal manifest.
Error: Could not find resource 'command => $repo_dir/scripts/echo' for relationship from 'Boxen::Project[hero]' on node chris.local
Error: Could not find resource 'command => $repo_dir/scripts/echo' for relationship from 'Boxen::Project[hero]' on node chris.local

Это также верно, если я попробую ${boxen::config::srcdir} вместо этого. Глядя на другие примеры, эти переменные используются и, похоже, работают. Я неправильно называю? Есть ли другая переменная, которую я должен использовать?


person cdownie    schedule 06.02.2014    source источник


Ответы (1)


Я заметил две ошибки в вашем манифесте здесь:

->
Exec {
    command       => '$repo_dir/scripts/echo'
}
->

Во-первых, вы написали первую букву слова exec заглавной. На языке puppet это означает, что вы указываете значение по умолчанию для всех последующих определений ресурсов exec (docs< /а>). Это не само определение ресурса, поэтому порядок ресурсов не может быть применен, отсюда и ошибка.

Еще одна ошибка — использование одинарных кавычек в сочетании с переменными. Строки в одинарных кавычках интерпретируются как литералы. Другими словами, '$repo_dir' интерпретируется буквально как $repo_dir, а "$repo_dir" интерпретируется как содержимое переменной $repo_dir (документы).

Надеюсь это поможет,

Удачи

person Lodewijk Bogaards    schedule 09.02.2014