使用人偶使git命令行色彩丰富

时间:2018-09-11 03:50:27

标签: git puppet

我正在尝试使用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

但是我需要通过木偶来做。

2 个答案:

答案 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”用户身份运行命令是否合适,因为尚不清楚该用户是否具有修改系统范围配置的适当权限。

您还应该考虑是否需要这么长时间的超时。我不太了解您所期望的情况,这种情况需要很长时间才能对命令已挂起有合理的信心。