Bagaimana untuk mencipta skema penyedia sumber data rupa bumi tersuai untuk peta nilai peta?

PHPz
Lepaskan: 2024-02-10 11:03:09
ke hadapan
796 orang telah melayarinya

如何为地图值的地图创建自定义 terraform 数据源提供程序架构?

editor php Banana akan memperkenalkan anda hari ini cara mencipta seni bina pembekal sumber data rupa bumi tersuai untuk peta nilai peta. Apabila menggunakan Terraform untuk orkestrasi infrastruktur, kita selalunya perlu mendapatkan data daripada sistem atau perkhidmatan luaran untuk konfigurasi dinamik. Dan pembekal sumber data tersuai boleh membantu kami mencapai matlamat ini. Dengan mencipta skema penyedia sumber data tersuai, kami boleh mendapatkan data yang kami perlukan dengan mudah daripada peta nilai peta dan menggunakannya dalam konfigurasi Terraform kami. Seterusnya, mari belajar bagaimana untuk mencapainya!

Kandungan soalan

Saya mempunyai fungsi golang yang mengembalikan peranan jenis map[string]map[string]string

Contohnya:

map[foo:map[name:abc env:dev id:465 project:e-1] boo:map[name:def env:prd id:82 project:e-1] :doo[name:ght env:stg id:353 project:e-3]]
Salin selepas log masuk

Saya mencipta skema untuknya seperti yang ditunjukkan di bawah...

func datasourceaccounthelper() *schema.resource {
    return &schema.resource{
        read: accounthelperread,

        schema: map[string]*schema.schema{
        
            "roles": {
                type: schema.typemap,
                elem: &schema.schema{
                    type:     schema.typemap,
                    computed: true,
                    elem: &schema.schema{
                        type: schema.typestring,
                    },
                },

                computed: true,
            },

            "id": &schema.schema{
                computed: true,
                type:     schema.typestring,
            },
        },
    }
}
Salin selepas log masuk

Dan kaedah penciptaan untuk menghantar nilai peranan kepada skema

func rolesread(d *schema.resourcedata, m interface{}) error {
    filteredroles := filteraccounts("john") // returns `map[string]map[string]string`



    if err := d.set("account_map", filteredroles); err != nil {
        return err
    }

    //accountmaps := make(map[string]interface{})

    d.setid("-")

    return nil
}
Salin selepas log masuk

Tetapi output terraform adalah peta kosong, bagaimana saya boleh membetulkannya, tolong bantu :)

outputs:

output = {
  "roles" = tomap(null) /* of map of string */
  "id" = tostring(null)
}
Salin selepas log masuk

Keluaran yang dijangkakan adalah seperti berikut

Outputs:

output = {
  "roles" = { foo    = {name = "abc" env = "dev" id= 465 project = "e-1"}
              boo    = {name = "efg" env = "prd" id= 82 project = "e-2"}       
            },
  "id" = "-"
}
Salin selepas log masuk

Penyelesaian

Versi lama terraform sdk yang anda gunakan tidak mencapai apa yang anda cuba lakukan di sini. Pemetaan hanya boleh daripada jenis primitif:

. typestringtypeinttypebool

Untuk mencipta struktur ini anda perlu

berhijrah ke rangka kerja baharu yang dibina untuk sistem jenis terraform moden dan bukannya (seperti yang berlaku dengan sdkv2) sistem jenis terraform klasik v0.11 dan lebih awal.

Dalam rangka kerja pemalam terraform, struktur yang setara dengan apa yang anda cuba huraikan di sini ialah

mapnestedattribute, dan yang berikut menerangkan struktur seni bina yang anda tunjukkan dalam soalan anda:

schema.mapnestedattribute{
    nestedobject: schema.nestedattributeobject{
        attributes: map[string]schema.attribute{
            "name": schema.stringattribute{
                // ...
            },
            "env": schema.stringattribute{
                // ...
            },
            "id": schema.numberattribute{
                // ...
            },
            "project": schema.stringattribute{
                // ...
            },
        },
    },
}
Salin selepas log masuk

Ini mewakili pemetaan objek dengan sifat yang diberikan, jadi jenis skema di atas adalah bersamaan dengan kekangan jenis berikut, yang boleh digunakan menggunakan sintaks kekangan jenis

bahasa terraform:

map(
  object({
    name    = string
    env     = string
    id      = number
    project = string
  })
)
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk mencipta skema penyedia sumber data rupa bumi tersuai untuk peta nilai peta?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!