Команда Puppet exec запускается в оболочке, но не через puppet

Я пытаюсь использовать vagrant для настройки среды разработки, которая автоматически клонирует два репозитория, если они еще не были клонированы.

Я написал простой скрипт для клонирования репозиториев, после многих неудачных попыток заставить puppet запускать команду git напрямую. По какой-то причине я думал, что этот метод будет надежным, но оказалось, что я лучший дурак, чем я думал.

exec {"load-repos":
    command =>"/bin/bash /vagrant/manifests/modules/scripts/clone_repos.sh",
    require => Package["git-core"],
  }

Вот сценарий:

#!/bin/bash
if [ ! -d /vagrant/repo-one-dest ]; then
  git clone [email protected]:/repo-one.git /vagrant/repo-one-dest
fi

if [ ! -d /vagrant/repo-two-dest ]; then
  git clone [email protected]:/repo-two.git /vagrant/repo-two-dest
fi

exit

Закрытые ключи настроены правильно. Когда я вхожу в виртуальную машину и вручную запускаю bash clone_repos.sh, все работает. Независимо от того, сколько раз я перезагружаю vagrant и позволяю puppet делать свое дело, репозитории никогда не загружаются через exec. Что мне не хватает?


person jeremiahs    schedule 23.06.2012    source источник
comment
Не хватает места в первом [ тесте.   -  person ormaaj    schedule 24.06.2012
comment
Спасибо что подметил это. К сожалению, это артефакт, который я представил в посте, когда заменил реальный каталог на «repo-one-dest». Скрипт корректно работает при запуске из командной строки и имеет пробел. Я отредактировал сообщение, чтобы удалить синтаксическую ошибку.   -  person jeremiahs    schedule 24.06.2012
comment
Добавление 'logoutput=›true, к вашему блоку Exec может привести к увеличению вывода, что может помочь при отладке. Вы также можете добавить файл[/vagrant/manifests/modules/scripts/clone_repos.sh] в раздел require. Puppet может пытаться выполнить скрипт до того, как puppet передаст его на вашу виртуальную машину.   -  person pwan    schedule 25.06.2012
comment
Я попробую это, когда вернусь домой сегодня вечером. На 100% уверен, что проблема не в том, что файл не существует по пути, но, эй, я ошибался раньше.   -  person jeremiahs    schedule 26.06.2012
comment
Кстати: если у кого-то, кто читает это, есть время и желание решить эту проблему с помощью общедоступного репозитория git и опубликовать решение, это было бы полезно.   -  person jeremiahs    schedule 26.06.2012


Ответы (1)


Вероятно, это связано с тем, что когда вы vagrant ssh, вы обычно входите в систему как пользователь vagrant (по умолчанию, хотя это, безусловно, можно изменить с помощью конфигурации). Я предполагаю, что пользователь vagrant правильно настроил ключи.

Однако, когда Vagrant запускает ваш поставщик (в данном случае Puppet), он выполняет sudo, поэтому он запускается от имени пользователя root.

Как правило, я рекомендую настраивать ключи для развертывания: поместить ключи куда-нибудь, а затем использовать оболочку GIT_SSH для правильного клонирования или использовать агенты SSH.

person Mitchell    schedule 26.07.2012
comment
Хорошее понимание. Не уверен, что это работает, но выглядит правдоподобно. Я изменил свой рабочий процесс, и на данный момент меня все устраивает, и, вероятно, я не вернусь к своему первоначальному плану. Если у меня будет немного свободного времени, я, возможно, в конце концов посмотрю, не в этом ли проблема. - person jeremiahs; 24.08.2012