Puppet r10k: получить deploykey в контрольном репо

У меня есть контрольный репозиторий в gitlab, и я хочу автоматически сгенерировать sshkey и отправить его в свой репозиторий через gitlab api(используя Deploy Token).

На самом деле это прямой вопрос, на который я хочу получить ответ. Что такое (или есть ли какой-либо)"стандарт" с марионеткой о том, как отправить sshkey в gitlab через его api? Я пробовал использовать этот модуль (https://forge.puppet.com/abrader/gms), но он действительно работает. Ниже я объясняю, что я делал и пробовал.

Я создал токен развертывания, перейдя в Настройки-> Репозиторий-> Развернуть токены. Здесь у меня есть случайная строка, которую я сейчас сохранил.

Мне удалось автоматически сгенерировать ключ с именем manager-deploy-key. Я использую этот модуль для генерации ключа: https://forge.puppet.com/puppet/ssh_keygen

Код ssh-keygen

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 для автоматизации этого самостоятельно. Однако я действительно хочу знать, есть ли более простая альтернатива.

1 ответ

Решение

Похоже, единственный способ - использовать 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 - это идентификатор вашего проекта. Если вы посетите главную страницу своего проекта, она будет вверху.

Если вам нужна дополнительная информация об api токена доступа gitlabs, посетите https://docs.gitlab.com/ee/api/deploy_keys.html

Другие вопросы по тегам