Как установить пути среды Windows в текущем сеансе Puppet?

Я пытаюсь установить git и использовать его в том же скрипте puppet.

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

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

Git провайдера не работает на этом хосте

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

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

Я попытался добавить в файл .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': }

Думаю, вы могли бы сказать, что мой вопрос является расширением кукольного агента. : Git провайдера не работает на этом хосте.


person Shelly Cao    schedule 08.11.2016    source источник
comment
Как вы видите, это несколько ограничивает любой процесс Windows, поскольку он не будет автоматически видеть обновления среды (например, PATH) и обновлять себя. Подпроцессы не могут обновлять родительские процессы (поэтому все ваши разные варианты не работают). Я думаю, вы определили единственный способ сделать это, пока Puppet не сможет автоматически просматривать и обновлять среду. tickets.puppetlabs.com/browse/PUP-4708   -  person ferventcoder    schedule 09.11.2016
comment
@ferventcoder Спасибо, я не знал, что это еще не возможно!   -  person Shelly Cao    schedule 09.11.2016
comment
Возможно, Вы видели это с refreshenv. Это просто не то, что вы можете сделать с vcsrepo, если вы не можете переопределить путь (вы можете в exec). Так что если Puppet делает это автоматически, это поможет. Вот что касается билета.   -  person ferventcoder    schedule 09.11.2016


Ответы (1)


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

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

person Shelly Cao    schedule 08.11.2016