![Aparece un misterioso error de campo faltante al crear un compute.v1.instanceTemplate con Deployment Manager](https://rvso.com/image/668046/Aparece%20un%20misterioso%20error%20de%20campo%20faltante%20al%20crear%20un%20compute.v1.instanceTemplate%20con%20Deployment%20Manager.png)
Estoy intentando crear un compute.v1.instanceTemplate
con el Administrador de implementación (v2), pero aparece el siguiente error:
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}]}
Supongo que es una queja por una propiedad perdida, pero no puedo ni por mi vida saber cuál podría ser. He echado un vistazo alPlantillas de instanciarecurso y elimplementación avanzada ejemplos, y yo noparecerfaltar nada. Sin embargo, me encantaría que me demostraran que estoy equivocado.
Aquí está el recurso completo adquirido con 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"
}
}
Y aquí hay una versión más amigable para los humanos de 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
¿Algunas ideas? Alternativamente, compute.v1.instanceTemplate
se agradecerían mucho ejemplos de implementaciones exitosas.
Respuesta1
Resulta que uno de los ejemplos de implementación avanzada efectivamente tenía unaejemplo de uso de compute.v1.instanceTemplate. En lugar de a zone
, el recurso debería especificar a project
, lo que de hecho tiene más sentido, aunque no parece estar documentado en ningún lugar excepto en ese ejemplo. Sin embargo, de manera menos sensata, los parámetros reales de la plantilla de instancia se colocan dentrootroobjeto de propiedades. No estoy seguro de dónde viene esto, pero aquí está mi plantilla jinja funcional final (tenga en cuenta que algunos campos usan sus valores predeterminados y, de hecho, podrían omitirse):
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