Puppet: Как перезагрузить среду при установке пакета gem - версия rbenv не активна - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть работающий сервер марионеток, и я хочу выполнить следующие шаги в агенте марионеток:

  • загрузить rbenv с git-сервера на /usr/local/rbenv (успех)
  • загрузить ruby-сборка с сервера git (успех)
  • создать файл rbenv.sh в /etc/profile.d, чтобы при каждом входе в систему загружалась rbenv-среда (успех)
  • установить определенную версию ruby, используяexec-ресурс с rbenv install (успех)
  • активировать указанную версию ruby ​​с использованием exec-ресурса с rbenv global (сбой при текущем входе в систему)
  • установить конкретный гем ruby ​​(не удалось, посколькузависимости от версии ruby)

Проблема в том, что rbenv, запущенный из exec-ресурса в puppet, переключает версию ruby ​​в подоболочку и где-то сохраняет эту информацию.Версия ruby ​​для текущей оболочки, где я начинаю puppet agent --test, не изменилась.После выхода из системы и повторного запуска запуск кукол успешно завершен, потому что среда успешно загружена снова.

Итак, мой вопрос: есть ли возможность запустить поставщика пакетов в новом подоболочке?Или я должен использовать другой exec, работающий gem install?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

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

Я исправил это, добавив символическую ссылку в драгоценный камень shim'ed.Кукольный ищет там поставщика драгоценных камней.

Это сработало для меня ...

  include rbenv

  rbenv::plugin {'rbenv/ruby-build':}
  -> rbenv::build { '2.5.3':
    global => true,
  }
  -> file { '/usr/bin/gem':
    ensure => link,
    target => '/usr/local/rbenv/shims/gem',
  }
  -> package {'passenger':
    ensure   => '6.0.1',
    provider => gem,
  }
0 голосов
/ 20 сентября 2018

Итак, мой вопрос: есть ли возможность запустить поставщика пакетов в новой подоболочке?Или я должен использовать другой exec, выполняющий установку gem?

Нет.Поставщики работают в экземпляре Ruby узла.Они могут запускать внешние команды, включая оболочки, но сами они не запускаются таким образом.

Кроме того, вы сказали:

После выхода из системы и повторного запуска запуска кукол успешнопотому что среда успешно загружена снова.

Если для активизации реконфигурации rbenv действительно требуется выход из системы и вход в нее (что неясно), то запуск провайдера в подоболочке не будетэффективен в любом случае.Ни один из них не будет запускать gem install через Exec, если только Exec также явно не активирует желаемую среду Ruby.

Если вы используете Puppet для замены стандартного Ruby системы из себя, тоВы должны быть готовы к непоследовательному поведению.Вы можете обойти это, используя соответствующий Exec для установки драгоценного камня.

...