2016-11-08 98 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中添加了相同的路徑。

相關問題