Я создаю пользовательский интерфейс командной строки в 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 или как определяется тело запроса.
Буду очень признателен за любые предложения.