![Deployment Manager で compute.v1.instanceTemplate を作成すると、フィールドが見つからないという不可解なエラーが発生する](https://rvso.com/image/668046/Deployment%20Manager%20%E3%81%A7%20compute.v1.instanceTemplate%20%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E3%81%A8%E3%81%84%E3%81%86%E4%B8%8D%E5%8F%AF%E8%A7%A3%E3%81%AA%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%99%E3%82%8B.png)
Deployment Manager (v2) を使用して を作成しようとしていますcompute.v1.instanceTemplate
が、次のエラーが発生します。
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}]}
おそらくプロパティが不足しているというエラーなのでしょうが、どのプロパティが不足しているのか全くわかりません。インスタンステンプレートリソースと高度な展開 例、そして私は思われる何かが欠けているわけではない。しかし、私が間違っていることが証明されれば嬉しい。
以下は、 で取得した完全なリソースです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
高度な展開例の1つには、compute.v1.instanceTemplate の使用例の代わりにzone
、リソースは を指定する必要がありますproject
。これは確かに理にかなっていますが、この例以外にはどこにも文書化されていないようです。しかし、あまり理にかなっていないのは、実際のinstanceTemplateパラメータが別のproperties オブジェクト。これがどこから来ているのかはわかりませんが、これが私の最終的な動作する 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