Ansible: добавить открытый ключ в bitbucket и проверить репозиторий

#git #ansible #bitbucket

#git #ansible #bitbucket

Вопрос:

Я пытаюсь разработать скрипт Ansible, который будет выполнять проверку репозитория из bitbucket на хост. У меня есть ключ, у меня есть репозиторий и подготовленный модуль git в Ansible, который будет проверять репозиторий.

Если я перейду в Bitbucket-> настройки-> ssh-ключ и добавлю ключ с хоста вручную, тогда скрипт выполнит проверку репозитория.

 - name: Download the repository  
  git:
    key_file: /home/{{ device_user }}/.ssh/id_rsa
    repo: '{{ my_repo }}'
    dest: /home/{{ device_user }}/my_repo
    depth: '1'
    force: yes
    accept_hostkey: yes
 

Итак, пока это работает.

Проблема здесь в том, как автоматически добавлять через Ansible в Bitbucket? Было бы здорово, если бы контроллер Ansible мог это сделать, потому что у него уже есть ключ. Но если есть другие способы, я открыт для них.

Я попробовал community.general.bitbucket_access_key, но он завершается с ошибкой «Не удалось получить токен доступа …», и в Интернете не так много подсказок. Мне не удалось решить эту проблему.

Редактировать:

Я установил модуль, как указано в документации. В настройках Bitbucket, workspace я создал имя пользователя OAuth: device и для учетной записи, workspace, для проектов установлено значение read, а для репозиториев — разрешение reads и admin, как указано в документах.

 - name: Create access key
  community.general.bitbucket_access_key:
    repository: 'my_repo'
    client_id: xxxxxxxxx # Key generated by Bitbucket
    client_secret: xxxxxxxxxxxxxx # Secret generated by Bitbucket
    username: my_name.admin
    key: '{{lookup("file", "/home/{{ device_user }}/.ssh/device.pub") }}'
    label: 'device'
    state: present
 

И ошибка следующая:

 fatal: [169.254.155.9]: FAILED! => {"changed": false, "msg": "Failed to retrieve access token: {'url': 'https://bitbucket.org/site/oauth2/access_token', 'status': 400, 'content-security-policy-report-only': "script-src 'unsafe-eval' 'strict-dynamic' 'unsafe-inline' 'self' http: https: https://d301sr5gafysq2.cloudfront.net; style-src 'self' 'unsafe-inline' https://aui-cdn.atlassian.com https://d301sr5gafysq2.cloudfront.net; report-uri https://web-security-reports.services.atlassian.com/csp-report/bb-website; default-src 'self' 'unsafe-inline' 'unsafe-eval' data: blob: *; connect-src bitbucket.org *.bitbucket.org bb-inf.net *.bb-inf.net id.atlassian.com analytics.atlassian.com as.atlassian.com api-private.stg.atlassian.com api-private.atlassian.com cofs.staging.public.atl-paas.net cofs.prod.public.atl-paas.net intake.opbeat.com api.media.atlassian.com api.segment.io xid.statuspage.io xid.atlassian.com xid.sourcetreeapp.com bam.nr-data.net bam-cell.nr-data.net sentry.io bqlf8qjztdtr.statuspage.io https://d301sr5gafysq2.cloudfront.net; object-src about:; base-uri 'self'", 'server': 'nginx', 'vary': 'Accept-Language, Cookie', 'cache-control': 'no-cache, no-store, must-revalidate, max-age=0', 'content-type': 'application/json', 'x-b3-traceid': '05a9d3c28cad6147', 'x-dc-location': 'ash2', 'strict-transport-security': 'max-age=31536000; includeSubDomains; preload', 'date': 'Mon, 22 Feb 2021 07:02:34 GMT', 'expires': 'Mon, 22 Feb 2021 07:02:34 GMT', 'x-served-by': 'app-3012', 'content-language': 'en', 'x-static-version': 'd4819e0e263d', 'x-render-time': '0.0134270191193', 'connection': 'close', 'x-version': 'd4819e0e263d', 'x-request-count': '2373', 'x-frame-options': 'SAMEORIGIN', 'content-length': '198', 'msg': 'HTTP Error 400: Bad Request', 'body': b'{"error_description": "Cannot use client_credentials with a consumer marked as \\"public\\". Calls for auto generated consumers should use urn:bitbucket:oauth2:jwt instead.", "error": "invalid_grant"}'}"}
 

Я предполагаю, что важное сообщение: невозможно использовать client_credentials с потребителем, помеченным как \»public \».

Итак, я сделал пользователя приватным:

И я получил следующую ошибку:

 fatal: [169.254.155.9]: FAILED! => {"changed": false, "msg": "Failed to retrieve access token: {'url': 'https://bitbucket.org/site/oauth2/access_token', 'status': 400, 'content-security-policy-report-only': "script-src 'unsafe-eval' 'strict-dynamic' 'unsafe-inline' 'self' http: https: https://d301sr5gafysq2.cloudfront.net; style-src 'self' 'unsafe-inline' https://aui-cdn.atlassian.com https://d301sr5gafysq2.cloudfront.net; report-uri https://web-security-reports.services.atlassian.com/csp-report/bb-website; default-src 'self' 'unsafe-inline' 'unsafe-eval' data: blob: *; connect-src bitbucket.org *.bitbucket.org bb-inf.net *.bb-inf.net id.atlassian.com analytics.atlassian.com as.atlassian.com api-private.stg.atlassian.com api-private.atlassian.com cofs.staging.public.atl-paas.net cofs.prod.public.atl-paas.net intake.opbeat.com api.media.atlassian.com api.segment.io xid.statuspage.io xid.atlassian.com xid.sourcetreeapp.com bam.nr-data.net bam-cell.nr-data.net sentry.io bqlf8qjztdtr.statuspage.io https://d301sr5gafysq2.cloudfront.net; object-src about:; base-uri 'self'", 'server': 'nginx', 'vary': 'Accept-Language, Cookie', 'cache-control': 'no-cache, no-store, must-revalidate, max-age=0', 'content-type': 'application/json', 'x-b3-traceid': '859f3c3a6f0cdf50', 'x-dc-location': 'ash2', 'strict-transport-security': 'max-age=31536000; includeSubDomains; preload', 'date': 'Mon, 22 Feb 2021 07:11:20 GMT', 'expires': 'Mon, 22 Feb 2021 07:11:20 GMT', 'x-served-by': 'app-3015', 'content-language': 'en', 'x-static-version': 'd4819e0e263d', 'x-render-time': '0.0334351062775', 'connection': 'close', 'x-version': 'd4819e0e263d', 'x-request-count': '3514', 'x-frame-options': 'SAMEORIGIN', 'content-length': '98', 'msg': 'HTTP Error 400: Bad Request', 'body': b'{"error_description": "No callback uri defined for the OAuth client.", "error": "invalid_request"}'}"}
 

И здесь сообщение importatnt не является uri обратного вызова, определенным для клиента OAuth.

Я знаю, что это можно установить в настройках пользователя, но мне не удалось это решить.

Комментарии:

1. У Bitbucket есть API: developer.atlassian.com/bitbucket/api/2/reference/resource /…

2. Можете ли вы показать код того, что вы пробовали с community.general.bitbucket_access_key модулем? И полную ошибку, которую вы получаете? Это помогло бы выяснить, почему он не работает. Из сообщения и кода модуля проблема может заключаться в процессе аутентификации OAuth, и в сообщении об ошибке должно быть больше объяснений по этому поводу, сразу после «Не удалось получить токен доступа: «. Вы правильно указали идентификатор клиента и секрет, как задокументировано модулем? ( docs.ansible.com/ansible/latest/collections/community/general /… )

Ответ №1:

Я наконец-то заработал.

Это были только настройки в Bitbucket. Я понял, что обратный вызов должен быть установлен следующим образом: https://bitbucket.org/my_repo /

Итак, модуль community.general.bitbucket_access_key работает.