2016-11-08 10 views
2

Я пытаюсь установить мерзавец и использовать его в том же кукольного сценарииКак установить пути среды Windows в текущей сессии Puppet?

package { 'git': 
    ensure => latest, 
    provider => 'chocolatey', 
} 
vcsrepo { 'C:/': 
    provider => git, 
    source => 'github etc...', 
} 

Однако, я получаю:

Поставщика мерзавца не работает на этом хосте

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

ошибка исчезает, если я использую refreshenv или set "PATH=%PATH%;C:\Program Files\Git\cmd" в командной строке или перезапустить командную строку, но есть способ, чтобы обновить их в том же кукольном сценарии без ручного вмешательства?

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

#1 
windows_env { 'PATH=C:\Program Files\Git\cmd': } 

#2 (I've also tried different variations of quotes) 
exec { 'temporary env var': 
    path => 'C:/Windows/System32', 
    command => 'cmd.exe /c "set \"PATH=$PATH%;C:\\Program Files\\Git\\cmd\""', 
} 

#3 
exec { 'C:/ProgramData/chocolatey/bin/refreshEnv.cmd': } 

Я думаю, вы могли бы сказать, что мой вопрос является расширением Puppet agent: provider git is not functional on this host.

+0

Как вы видите, это несколько ограничение в любом процессе Windows, поскольку оно не будет автоматически видеть обновления среды (например, PATH) и обновлять себя. Подпроцессы не могут обновлять родительские процессы (поэтому все ваши разные параметры не работают). Я думаю, вы определили единственный способ сделать это, пока Puppet не сможет автоматически поддерживать и обновлять среду. https://tickets.puppetlabs.com/browse/PUP-4708 – ferventcoder

+0

@ferventcoder Спасибо, я не знал, что на самом деле это невозможно! –

+0

Возможно, вы видели это с 'refreshenv'. Это просто не то, что вы можете сделать с помощью 'vcsrepo', если вы не можете переопределить путь (вы можете в' exec'). Таким образом, с помощью Puppet это автоматически поможет. Вот что такое билет. – ferventcoder

ответ

0

Я нашел обходное решение, которое позволяет кукольному скрипту работать полностью.

Запуск set "PATH=%PATH%;C:\Program Files\Git\cmd" в командной строке перед месте будущего puppet apply file.pp устанавливает GIT в качестве переменной окружения только для текущей командной строки (set, не setx). Таким образом, когда открывается другое командное приглашение, одноразовый путь пропадает, но тот же путь добавляется из фактической установки git.

 Смежные вопросы

  • Нет связанных вопросов^_^