我正在尝试使用puppet使git命令行色彩丰富,并出现错误。我想念什么?
exec { 'make-git-color':
command => '/usr/bin/git config --global color.ui auto',
logoutput => 'on_failure',
user => 'vagrant',
timeout => 1200,
require => Package['git']
}
错误是:
/Exec[make-git-color]/returns: fatal: $HOME not set
Error: '/usr/bin/git config --global color.ui auto' returned 128 instead of one of [0]
直接运行命令可以正常工作。 /usr/bin/git config --global color.ui auto
但是我需要通过木偶来做。
答案 0 :(得分:2)
如错误消息所述,未设置$ HOME。您需要将代码更改为如下所示,以设置缺少的环境变量:
exec { 'make-git-color':
command => '/usr/bin/git config --global color.ui auto',
logoutput => 'on_failure',
user => 'vagrant',
environment => 'HOME=/home/vagrant',
require => Package['git']
}
那可以工作(我测试了)。将环境变量传递给exec的文档为here。
注意,我也删除了超时,这不是必需的。
如果您还需要确保幂等性,请根据以下评论将其更改为:
exec { 'make-git-color':
command => 'git config --global color.ui auto',
unless => 'git config --list --global | grep -q color.ui=auto',
path => '/usr/bin',
logoutput => 'on_failure',
user => 'vagrant',
environment => 'HOME=/home/vagrant',
require => Package['git']
}
答案 1 :(得分:1)
该错误消息表明git
抱怨HOME
环境变量未设置。其他答案描述了如何为该变量提供值,但这不一定是解决此特定问题的正确方法。
考虑到git
关心HOME
的事实表明,它正在尝试在每个用户级别设置配置。如果确实是您想要的,那就好了,但是通过Puppet进行 vs 似乎有点过大了。只是直接运行命令。另一方面,如果您通过“ --global”以为是在整个系统范围内级别设置属性,那么您会感到惊讶。 git config --global
在影响特定用户的所有存储库(不会覆盖它)的意义上设置“全局”配置。通过--system
选项选择系统范围的属性:
exec { 'make-git-color':
command => '/usr/bin/git config --system color.ui auto',
logoutput => 'on_failure',
user => 'vagrant',
timeout => 1200,
require => Package['git'],
unless => 'git config --list --system | grep -q color.ui=auto',
}
在那种情况下,您还应该考虑以“ vagrant”用户身份运行命令是否合适,因为尚不清楚该用户是否具有修改系统范围配置的适当权限。
您还应该考虑是否需要这么长时间的超时。我不太了解您所期望的情况,这种情况需要很长时间才能对命令已挂起有合理的信心。