2016-11-08 79 views
2

我试图安装Git和在同一个傀儡脚本中使用它如何在当前Puppet会话中设置Windows环境路径?

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

但是,我越来越:

提供Git是不是该主机上的功能

正确的路径包含在环境变量中,这导致我相信错误仅仅是因为环境变量未被更新。

错误消失,如果我在命令行上,或者如果我重新启动命令提示符下使用refreshenvset "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'。除非你可以覆盖路径(你可以在'exec'中),否则这不是'vcsrepo'所能做的。所以让Puppet自动做到这一点会有所帮助。这就是票的内容。 – ferventcoder

回答

0

我发现了一个解决方法,允许puppet脚本完全运行。

之前puppet apply file.pp套Git的未来定位为只为当前命令提示符(set,不setx)环境变量在命令行中运行set "PATH=%PATH%;C:\Program Files\Git\cmd"。这样,当打开另一个命令提示符时,一次性路径不见了,但是从实际安装的git中添加了相同的路径。

相关问题