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