3

これは私が使用しているものです:

vcsrepo { "$base_dir":
    ensure => latest,
    provider => git,
    source => 'ssh://git@example.com:7999/EXAMPLE/example.git',
    require => File["$base_dir"],
    revision => $branch,
}

puppet マニフェストを適用すると、エラーが発生します。

Error: Could not create repository (non-repository at path)
Error: /Stage[main]/MyServer::Server/Vcsrepo[/usr/service/myserver]/ensure: change from absent to latest failed: Could not create repository (non-repository at path)

私がする時:

git clone ssh://git@example.com:7999/EXAMPLE/example.git

できます。

何か案は?

4

4 に答える 4

2

マニフェストを適用するたびに git リポジトリが削除されてクローンが作成されたり、置き換えられない可能性のある無関係なファイルでディレクトリが吹き飛ばされたりするため、強制を使用したくない可能性があります。代わりに、 git プロバイダーのソース コードを確認することをお勧めします。そこでは、レポが存在するかどうかを判断するために何が行われているかを正確に確認できます。具体的にはworking_copy_exists?方法です。

私の場合、ssh://あなたが持っているようにURLを指定したために失敗が発生しましたが、既存のリポジトリは(ssh経由で)のようなURLで複製されていましたgit@example.com:EXAMPLE/example.git。これは、working_copy_exists?メソッドが.git/configでアドレスを探してレポ内の を調べたときにssh://、それを見つけることができなかったことを意味します! これにより、vcsrepo はディレクトリの内容が無関係であると想定し、無理矢理失敗します。

URL チェックはその方法の 1 つにすぎないため、それが原因で作業コピーが正しく識別されない場合は、他のチェックの 1 つになる可能性があります。

于 2015-08-25T21:43:25.410 に答える
1

ターゲット ディレクトリが空ではない場合、強制オプションを追加してリポジトリを複製します。

vcsrepo { "$base_dir":
    ensure => latest,
    provider => git,
    source => 'ssh://git@example.com:7999/EXAMPLE/example.git',
    require => File["$base_dir"],
    revision => $branch,
    force => true,
}

ソース: vcsrepo: 宛先パスが既に存在する場合、git clone は機能しません。

于 2014-08-01T13:57:27.490 に答える
0

この議論 https://groups.google.com/d/msg/puppet-users/ke5Nk1qwGGs/37dFA3tr5rIJ と個人的な経験に基づいて、

vcsrepo はディレクトリを作成したいと考えています。

したがって、$base_dir が /tmp/foo/bar/baz の場合、/tmp/foo/bar ディレクトリのみが存在する必要があります。

また、ssh が正しく機能するために ( https://github.com/puppetlabs/puppetlabs-vcsrepo/blob/master/README.GIT.markdown#for-sources-that-use-ssh-eg-usernameserver )、次のことを行う必要があります。ユーザー属性を vcsrepo に追加して、正しい ssh キーを取得できるようにします (ユーザーが新しく複製されたリポジトリを所有することも想定しているため、面倒です)。

于 2013-11-05T21:01:54.657 に答える
-2

ssh://チェックアウトにパス全体が必要なわけではありません。このモジュールはそれを処理します。

これは彼らの例から引き抜かれました:

vcsrepo { "/path/to/repo":
    ensure => present,
    provider => git,
    source => "git://example.com/repo.git"
}

あなたは次のようになります:

vcsrepo { "$base_dir":
    ensure => latest,
    provider => git,
    source => 'git://example.com:7999/EXAMPLE/example.git',
    require => File["$base_dir"],
    revision => $branch,
}
于 2012-12-14T06:29:51.523 に答える