Ssh – pulling git-via-ssh repo via Puppet: “Could not create repository (non-repository at path)”

gitgithubpuppetssh

I'm trying to pull a git (github) repo via Puppet. I've used the official vcsrepo documentation and borrowed from the Fiesta post to come up with the following config:

vcsrepo { "/tmp/":
  ensure => latest,
  provider => git,
  source => 'git@github.com:tedder/helloworld.git',
  revision => 'master',
  # eventually:
  # revision => 'branchname'
  require => [ Package["git"], Sshkey["github.com"] ],
  identity => '/home/ubuntu/.ssh/id_rsa',
}

The problem is, when I run this, I get the following output. I've chopped most of the logging related to the Package and Sshkey, as they appear to be fine:

$ sudo puppet apply --debug --verbose /etc/puppet/modules/github-deploy/manifests/init.pp
[snip lots of output]
debug: Puppet::Type::Package::ProviderApt: Executing '/usr/bin/dpkg-query -W --showformat '${Status} ${Package} ${Version}\n''
debug: Puppet::Type::Package::ProviderApt: Executing '/usr/bin/apt-cache policy git'
debug: Prefetching parsed resources for sshkey
notice: /Stage[main]/Github_deploy/Vcsrepo[/tmp/]/ensure: Creating repository from latest
err: /Stage[main]/Github_deploy/Vcsrepo[/tmp/]/ensure: change from absent to latest failed: Could not create repository (non-repository at path)
[snip some output]

This appears to be the same as in this bug, though the pull request is either a 404 or inaccessible, so I don't know what version contains the fix. (it says "pending release", admittedly) There's also the following discussion, but it links to an invalid bug ID too.

There's also a postscript on the vcsrepo doc that says "use require" and "see /examples/", but there aren't any substantial examples. Sigh.

For what it's worth, I tried "ensure bare" instead. Doesn't work (same error). Note that neither "ensure bare" or "ensure latest" give the command that is being run in the logs. I don't know if that is a problem.

So, is the answer that git-via-ssh doesn't work? How do I pull a private repo from github? I'm loath to use exec if I can avoid it, but maybe that's the answer.

If the answer is "use https instead", how does that work for authenticated repos on github? Simply saying "you can't use git-via-ssh with the current version of vcsrepo" is not a sufficient answer.

FWIW, I'm using 2.7 of puppet:

$ puppet --version
2.7.18

Best Answer

Looks like the problem is that you're giving it a path of "/tmp/" - the error is saying that something already exists at the path which is supposed to be the repository (the /tmp directory), and that it's not going to proceed because of that.

Did you intend to clone to something like "/tmp/reponame" instead?