%20%E3%81%AE%E5%95%8F%E9%A1%8C%E3%80%8C....%20%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E7%9B%AE%E7%9A%84%E3%81%AE%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E3%80%8D.png)
私は、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"],
}