我使用 puppet/Vcsrepo 从 Bitbucket(云)服务器向一组 Linux 服务器分发和更新软件。多年来,这种方法一直运行良好,但大约 6 个月前,Puppet 开始Error: Path /usr/local/tools/... exists and is not the desired repository.
在每次运行时抱怨每个存储库。我认为问题可能是在我们从本地版本的 bitbucket 转移到云版本时开始的。
如果我删除路径并运行 puppet,它会替换目录,然后在下次运行时再次出错。每当我需要更新存储库时,我都会删除它们。
傀儡代码已简化为:
define deploy(Array $names) {
$names.each |$repo| {
vcsrepo { "/usr/local/tools/$repo":
ensure => present,
provider => git,
user => 'tools',
source => "https://[email protected]/uoa/$repo.git",
}
}
}
.....
$names_list = [
'common-library',
'common-tools'
]
...::deploy {"base-tools":
names => $names_list,
}
您知道问题是什么或如何诊断该问题吗?
答案1
是的,git 的 CVE 补丁打破了您现有的配置。这是过去几天在 Debian Buster 上发布的,导致系统 puppet (5.5.10-4) 出现故障。似乎没有针对 vcsrepo 3.2.1 的补丁,这是支持 Puppet 5 的最新版本。我不确定为什么我的 Bullseye 机器似乎没有受到影响。
如果您可以升级到 Puppet 6,那么当前的 vcsrepo 版本可以处理这个问题。
如果没有,作为一种解决方法,您可以执行以下操作:
一次:
concat { '/etc/gitconfig' :
owner => 'root',
group => 'root',
mode => '0644',
}
然后在每个循环内的定义中:
concat::fragment { "gitconfig_$repo" :
target => '/etc/gitconfig',
content => "[safe]\n\tdirectory = /usr/local/tools/$repo\n\n",
before => Vcsrepo["/usr/local/tools/$repo"],
}