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 提供者的源代码。在那里你可以确切地看到正在做什么来确定一个 repo 是否存在。具体来说,working_copy_exists?方法。

在我的情况下,发生故障是因为我已经指定了一个ssh://url,但是现有的 repo 已经被克隆(通过 ssh),其 url 类似于git@example.com:EXAMPLE/example.git. 这意味着当该working_copy_exists?方法检查.git/configrepo 中的 寻找地址时ssh://,它无法找到它!这会导致 vcsrepo 假定目录内容是不相关的,并且在没有强制的情况下失败。

URL 检查只是该方法中的几种检查之一,因此如果这不是它无法正确识别您的工作副本的原因,那么它可能是其他检查之一。

于 2015-08-25T21:43:25.410 回答
1

如果目标目录存在为非空,请在克隆 repo 中添加强制选项。

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 密钥(很烦人,因为它还假设您希望该用户拥有新克隆的 repo)。

于 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 回答