![Возникает загадочная ошибка отсутствия поля при создании compute.v1.instanceTemplate с помощью Deployment Manager](https://rvso.com/image/668046/%D0%92%D0%BE%D0%B7%D0%BD%D0%B8%D0%BA%D0%B0%D0%B5%D1%82%20%D0%B7%D0%B0%D0%B3%D0%B0%D0%B4%D0%BE%D1%87%D0%BD%D0%B0%D1%8F%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%20%D0%BE%D1%82%D1%81%D1%83%D1%82%D1%81%D1%82%D0%B2%D0%B8%D1%8F%20%D0%BF%D0%BE%D0%BB%D1%8F%20%D0%BF%D1%80%D0%B8%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B8%20compute.v1.instanceTemplate%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Deployment%20Manager.png)
Я пытаюсь создать compute.v1.instanceTemplate
с помощью Deployment Manager (v2), но получаю следующую ошибку:
Unexpected response from resource of type compute.v1.instanceTemplate: 400 {statusMessage=Bad Request, errors=[{message=Invalid value for field 'resource.properties': ''. Instance Templates must provide instance properties., domain=global, reason=invalid}]}
Я полагаю, что это жалоба на пропажу собственности, но я не могу понять, какая именно. Я посмотрел наInstanceTemplatesресурс ирасширенное развертывание Примеры, и я неказатьсячто-то упустить. Хотя я был бы рад оказаться неправым.
Вот полный ресурс, приобретенный с помощью gcloud deployment-manager deployments describe --log-http name
:
{
"id": "redacted",
"insertTime": "2015-10-03T05:13:33.325-07:00",
"updateTime": "2015-10-03T05:42:50.152-07:00",
"name": "tpl-redacted",
"type": "compute.v1.instanceTemplate",
"update": {
"manifest": "https://www.googleapis.com/deploymentmanager/v2/projects/project-redacted/global/deployments/redacted/manifests/manifest-redacted",
"error": {
"errors": [
{
"code": "RESOURCE_ERROR",
"location": "redacted/tpl-redacted",
"message": "Unexpected response from resource of type compute.v1.instanceTemplate: 400 {statusMessage=Bad Request, errors=[{message=Invalid value for field 'resource.properties': ''. Instance Templates must provide instance properties., domain=global, reason=invalid}]}"
}
]
},
"state": "FAILED",
"intent": "CREATE_OR_ACQUIRE",
"properties": "canIpForward: true\ndisks:\n- autoDelete: true\n boot: true\n deviceName: boot\n initializeParams:\n diskSizeGb: 10\n diskType: pd-standard\n sourceImage: https://www.googleapis.com/compute/v1/projects/project-redacted/global/images/redacted-image\n mode: READ_WRITE\n type: PERSISTENT\nmachineType: https://www.googleapis.com/compute/v1/projects/project-redacted/zones/asia-east1-c/machineTypes/g1-small\nnetworkInterfaces:\n- accessConfigs: []\n network: $(ref.nw-redacted.selfLink)\nscheduling:\n automaticRestart: true\n onHostMaintenance: MIGRATE\nserviceAccounts:\n- scopes:\n - storage-ro\ntags:\n items:\n - redacted\nzone: asia-east1-c\n",
"finalProperties": "canIpForward: true\ndisks:\n- autoDelete: true\n boot: true\n deviceName: boot\n initializeParams:\n diskSizeGb: 10\n diskType: pd-standard\n sourceImage: https://www.googleapis.com/compute/v1/projects/project-redacted/global/images/redacted-image\n mode: READ_WRITE\n type: PERSISTENT\nmachineType: https://www.googleapis.com/compute/v1/projects/project-redacted/zones/asia-east1-c/machineTypes/g1-small\nnetworkInterfaces:\n- accessConfigs: []\n network: https://www.googleapis.com/compute/v1/projects/project-redacted/global/networks/nw-redacted\nscheduling:\n automaticRestart: true\n onHostMaintenance: MIGRATE\nserviceAccounts:\n- scopes:\n - storage-ro\ntags:\n items:\n - redacted\nzone: asia-east1-c\n"
}
}
А вот более удобная для человека версия finalProperties
:
canIpForward: true
disks:
- autoDelete: true
boot: true
deviceName: boot
initializeParams:
diskSizeGb: 10
diskType: pd-standard
sourceImage: https://www.googleapis.com/compute/v1/projects/project-redacted/global/images/redacted-image
mode: READ_WRITE
type: PERSISTENT
machineType: https://www.googleapis.com/compute/v1/projects/project-redacted/zones/asia-east1-c/machineTypes/g1-small
networkInterfaces:
- accessConfigs: []
network: https://www.googleapis.com/compute/v1/projects/project-redacted/global/networks/nw-redacted
scheduling:
automaticRestart: true
onHostMaintenance: MIGRATE
serviceAccounts:
- scopes:
- storage-ro
tags:
items:
- redacted
zone: asia-east1-c
Есть идеи? В качестве альтернативы, примеры успешных compute.v1.instanceTemplate
внедрений были бы весьма признательны.
решение1
Оказывается, один из примеров продвинутого развертывания действительно имелпример использования compute.v1.instanceTemplate. Вместо a zone
ресурс должен указывать a project
вместо этого, что действительно имеет больше смысла, хотя это, кажется, нигде не документировано, кроме этого одного примера. Менее разумно, однако, что фактические параметры instanceTemplate помещаются внутрьдругойсвойства объекта. Не уверен, откуда это взялось, но вот мой окончательный рабочий шаблон jinja (обратите внимание, что некоторые поля используют свои значения по умолчанию и на самом деле могут быть пропущены):
resources:
- name: {{ env["name"] }}
type: compute.v1.instanceTemplate
properties:
project: {{ env["project"] }}
properties:
machineType: {{ properties["machineType"] }}
canIpForward: true
scheduling:
automaticRestart: true
onHostMaintenance: MIGRATE
preemptible: false
tags:
items:
- redacted
disks:
- deviceName: boot
boot: true
autoDelete: true
mode: READ_WRITE
type: PERSISTENT
initializeParams:
diskSizeGb: 10
diskType: pd-standard
sourceImage: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/global/images/redacted
networkInterfaces:
- network: $(ref.{{ properties["network"] }}.selfLink)
serviceAccounts:
- email: default
scopes:
- https://www.googleapis.com/auth/devstorage.read_only