Puppet:Vcsrepo(git)的问题“....存在并且不是所需的存储库。”

Puppet:Vcsrepo(git)的问题“....存在并且不是所需的存储库。”

我使用 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"],
      }

相关内容