Программирование вложенных TypeSets в провайдере Terraform - PullRequest
0 голосов
/ 30 марта 2019

У меня есть вложенная карта как часть списка атрибутов в моем поставщике 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 и не уверен, что в назначении я использую правильный тип данных. Как я могу продолжить?

...