У меня есть вложенная карта как часть списка атрибутов в моем поставщике terraform. Я получаю ошибку, указанную ниже, когда запускаю terraform apply на моем провайдере.
Ниже приведен фрагмент кода, который я использую:
func resourceUplinkSet() *schema.Resource {
return &schema.Resource{
Create: resourceUplinkSetCreate,
Read: resourceUplinkSetRead,
Update: resourceUplinkSetUpdate,
Delete: resourceUplinkSetDelete,
Schema: map[string]*schema.Schema{
"name": {
Type: schema.TypeString,
Required: true,
},
"port_config_infos": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"desired_speed": {
Type: schema.TypeString,
Optional: true,
},
"location": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"location_entries": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"value": {
Type: schema.TypeString,
Optional: true,
},
"type": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
},
},
},
},
},
},
},
}
}
Ожидаемый результат:
Terraform apply создает указанный ресурс.
Фактический результат:
Terraform падает со следующим сообщением.
panic: interface conversion: interface {} is map[string]interface {}, not ov.PortConfigInfos
который указывает на присвоение portConfigInfos[i] = raw.(ov.PortConfigInfos)
, показанное ниже.
Я пытаюсь установить значение "port_config_infos", используя цикл for:
portConfigInfosList := d.Get("port_config_infos").(*schema.Set).List()
portConfigInfos := make([]ov.PortConfigInfos,len(portConfigInfosList))
for i,raw := range portConfigInfosList {
portConfigInfos[i] = raw.(ov.PortConfigInfos)
}
uplinkSet.PortConfigInfos = portConfigInfos
Я новичок в Terraform и не уверен, что в назначении я использую правильный тип данных. Как я могу продолжить?