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 を実行すると、ディレクトリが置き換えられ、次の実行時に再びエラーが発生します。リポジトリを更新する必要があるたびに、リポジトリを削除することになりました。

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) で破損を引き起こしました。Puppet 5 をサポートする最新の vcsrepo 3.2.1 用のパッチはないようです。私の 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"],
      }

関連情報