Puppet r10k:将 deploykey 放入 control-repo

Puppet r10k: get deploykey into control-repo

我在 gitlab 中有一个 control-repo,我想自动生成一个 sshkey 并通过 gitlab 将它发送到我的存储库 api(使用 Deploy Token)。

这实际上是一个我想回答的直截了当的问题。关于如何通过 api 将 sshkey 发送到 gitlab 的 puppet 的(或是否有任何)“标准”是什么?我试过使用这个模块(https://forge.puppet.com/abrader/gms),但它确实有效。下面我解释一下我做过和尝试过的事情。

我通过转到“设置”->“存储库”->“部署令牌”生成了一个部署令牌。在这里,我得到了一个随机字符串,我现在已经保存了它。

我已经能够自动生成一个名为 'manager-deploy-key' 的密钥。我使用这个模块生成密钥:https://forge.puppet.com/puppet/ssh_keygen

ssh 注册码

ssh_keygen { 'root':
  bits     => 4096,
  type     => 'rsa',
  filename => '/root/.ssh/manager-deploy-key',
}

然后我想使用这个模块:“https://forge.puppet.com/abrader/gms”自动将新生成的密钥作为部署密钥发送到我的仓库。

应该发送 deploykey

git_deploy_key { 'add_deploy_key_to_puppet_control':
  ensure       => present,
  name         => $::fqdn,
  path         => '/root/.ssh/manager-deploy-key.pub',
  token        => 'DEPLOY_TOKEN_HERE',
  project_name => 'user/control-repo',
  server_url   => 'https://gitlab.com',
  provider     => 'gitlab',
}

这失败了,因此我选择通过在命令中添加 --debug 来进行调试 --> "puppet apply --debug /file/test.pp"

查看调试信息,对 GET 请求的响应是

"{\"error\":\"API V3 is no longer supported. Use API V4 instead.\"}"

该模块不起作用...因此我现在要使用 curl 来自动执行此操作。但是,我真的很想知道是否有更简单的选择。

似乎唯一的方法就是使用 curl,因为该模块已被弃用。如果有人需要示例,我已经为它设置了一个命令。

curl -H "PRIVATE-TOKEN: ${git_api_token}" -H "Content-Type: application/json" \
    -X POST -d "{\"title\":\"${git_ssl_keyname}\",\"key\":\"${sslpub}\", \"can_push\":\"true\"}"     \
    "https://gitlab.com/api/v4/projects/${project_id}/deploy_keys"

git_api_token 是您在您的帐户上生成的令牌。我无法使用您可以在项目中生成的部署令牌来完成这项工作。

git_ssl_keyname 是您的 ssh 密钥的名称。这可以是任何你想要的。

sslpub 是您要导入项目的实际密钥。

project_id 是你项目的id。如果您访问您的主要项目页面,它将位于顶部附近。

如果您想了解有关 gitlabs 访问令牌的更多信息 api,请访问 https://docs.gitlab.com/ee/api/deploy_keys.html