API Call Google Deployment Manager - PullRequest
       8

API Call Google Deployment Manager

0 голосов
/ 19 июня 2019

Я создаю пользовательский интерфейс командной строки в Python для управления некоторыми службами в Google Cloud Platform. Я изо всех сил пытаюсь сделать правильный вызов API администратора Google Deployment Manager для развертывания из конфигурации Python и шаблона YAML.

На основании следующей документации DM Link1 , Link2

Тело запроса в вызове должно иметь следующий формат:

        'name': deployment_name,
        'target': {  # The parameters that define your deployment, including the deployment configuration and relevant templates.
            'imports': [  # Specifies any files to import for this configuration. This can be used to import templates or other files. For example, you might import a text file in order to use the file in a template.
                 {
                     'content': "A String",  # The contents of the file.
                     'name': "A String",  # The name of the file.
                 },
             ],
            'config': {  # The configuration to use for this deployment.
                'content': import_config,  # The contents of the file.
            },
        },

Я создал следующую функцию:

def deploy(ctx, deployment_name, config):
    credentials =service_account.Credentials.from_service_account_file(
        'key.json')

    project_id = 'dm-creation-project-0'
    dm = discovery.build('deploymentmanager',
                         'v2', credentials=credentials)
    with open('project-definition/'+config, 'r') as stream:
        try:
            import_config = yaml.safe_load(stream)
            print(import_config)
        except yaml.YAMLError as exc:
            print(exc)

    project_body = {
        'name': deployment_name,
        'target': {
            'config': {  
                'content': import_config,
            },
        },
    }
    try:
        request = dm.deployments().insert(project=project_id, body=project_body, createPolicy=None, preview=None)
        response = request.execute()
        pprint(response)
    except Exception as e:
        print("Error")
        print(e)

Где переменная import_config содержит содержимое файла шаблона YAML и загружается как dict.

  - path: ../project.py
    name: project.py

resources:
  - name: dm-project-test-cli
    type: project.py
    properties:
      parent:
        type: organization
        id: "<CHANGE_ME>"
      billingAccountId: <CHANGE_ME>
      activateApis:
        - bigquery-json.googleapis.com
        - bigquerydatatransfer.googleapis.com
        - compute.googleapis.com
        - storage-component.googleapis.com
        - storage-api.googleapis.com
        - logging.googleapis.com

      serviceAccounts:
        - accountId: dm-project-test-cli
          displayName: DM PROJECT TEST CLI
          roles:
            - roles/editor
            - roles/viewer
          networkAccess: true
      usageExportBucket: false

(импортированная конфигурация project.py предоставляется в сообществе репозиторий )

Запуск Python CLI следующим образом: python3 gcloud-mng.py dm deploy -n 'project_testcli_0' -c 'project_testcli.yaml'

Я получаю следующую ошибку:

{'imports': [{'path': '../project.py', 'name': 'project.py'}], 'resources': [{'name': 'dm-project-test-cli', 'type': 'project.py', 'properties': {'parent': {'type': 'organization', 'id': 'XXXXXXXXXX'}, 'billingAccountId': 'XXXXXXXX', 'activateApis': ['bigquery-json.googleapis.com', 'bigquerydatatransfer.googleapis.com', 'compute.googleapis.com', 'storage-component.googleapis.com', 'storage-api.googleapis.com', 'logging.googleapis.com'], 'serviceAccounts': [{'accountId': 'dm-project-test-cli', 'displayName': 'DM PROJECT TEST CLI', 'roles': ['roles/editor', 'roles/viewer'], 'networkAccess': True}], 'usageExportBucket': False}}]}

Error
<HttpError 400 when requesting https://www.googleapis.com/deploymentmanager/v2/projects/dm-creation-project-0/global/deployments?alt=json returned "Request contains an invalid argument.">

Я не уверен, в чем может быть проблема, поскольку немного примеров того, как создать развертывание с помощью API администратора развертывания. Возможные проблемы, которые я могу себе представить, это то, как обрабатывается файл YAML или как определяется тело запроса. Буду очень признателен за любые предложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...