Cara unmarshal kereta Pulumi. Hasil struktur objek atau peta

WBOY
Lepaskan: 2024-02-10 12:30:17
ke hadapan
1214 orang telah melayarinya

如何解组 Pulumi auto.Result 对象结构或映射

editor php Xigua berkongsi cara untuk menyahmarshal auto Pulumi. Struktur objek atau pemetaan hasil. Pulumi ialah alat infrastruktur-sebagai-kod merentas awan yang membolehkan pembangun mentakrif dan mengurus infrastruktur awan menggunakan bahasa pengaturcaraan. Apabila membangun dengan Pulumi, anda sering menemui objek auto.Result, yang selalunya mengandungi berbilang sifat dan struktur bersarang. Artikel ini menerangkan cara untuk menyahmarshal objek Hasil dan memetakannya kepada struktur data yang lebih mesra pengguna untuk pemprosesan dan manipulasi data yang lebih mudah.

Kandungan soalan

Saya menggunakan api automasi pulumi in go untuk menggunakan pelayan ke hetzner, tetapi tidak tahu cara mendapatkan maklumat sambungan yang dijana daripada hasil penggunaan.

Ini ialah kod yang dipotong:

import (
    ...

    "github.com/pulumi/pulumi-command/sdk/go/command/remote"
    "github.com/pulumi/pulumi/sdk/v3/go/auto"
    "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

...

deployfunc := func(ctx *pulumi.context) error {
        // create ssh key pair, upload them to hetzner, get back a `*hcloud.sshkey`
        ...
        
        // `server` is a *hcloud.server object
        server, _ := deployservertohetzner(ctx, sshkey)

        // this is the info i want to retrieve from the result
        connectinfo := remote.connectionargs{
            host:       server.ipv4address,
            port:       pulumi.float64(22),
            user:       pulumi.string("root"),
            privatekey: sshkeypair.private,
        }

        ctx.export("server-connect-info", connectinfo)

        return nil
    }

stack, _ := auto.upsertstackinlinesource(ctx, stackname, projectname, deployfunc, opts...)

res, _ := stack.up(ctx)

// this is a string but i need it as either map or struct
serverconnectinfo := fmt.sprintf("%v", res.outputs["server-connect-info"].value)
Salin selepas log masuk

Saya dapat mendapatkannya daripada res.outputs 检索结果,但它是一个字符串。我知道服务器部署和带有连接详细信息的响应是成功的,因为当我登录 serverconnectinfo apabila ia kelihatan seperti ini:

serverconnectinfo map[host:123.456.789.10 port:22 privatekey:-----begin openssh private key-----
b3blbnnza...
-----end openssh private key-----
user:root]
Salin selepas log masuk

Berdasarkan beberapa penyelesaian yang meragukan dalam talian, saya cuba menyusunnya seperti json dan kemudian membongkarnya menjadi contoh pulumi remote.connectionargs. Ini jelas tidak berfungsi kerana strukturnya kelihatan seperti ini:

// From https://pkg.go.dev/github.com/pulumi/pulumi-command/[email protected]/go/command/remote#ConnectionArgs

type ConnectionArgs struct {
    ...
    Host pulumi.StringInput `pulumi:"host"`
    Port pulumi.Float64PtrInput `pulumi:"port"`
    PrivateKey pulumi.StringPtrInput `pulumi:"privateKey"`
    User pulumi.StringPtrInput `pulumi:"user"`
}
Salin selepas log masuk

Saya terfikir untuk membina struct saya sendiri dan mencuba semula penyelesaian json unmarshaling dan marshaling, tetapi nampaknya jika connectionargs 结构已经具有 pulumi 标签,则应该在某处存在某种 pulumi.unmarshal itulah caranya. Adakah saya salah? Bagaimanapun, saya tidak menemuinya.

Saya juga melihat dokumentasi tetapi tidak nampak apa-apa yang membantu. Mungkin saya terlepas halaman?

Penyelesaian

Seperti yang ditunjukkan oleh peter dalam komen, res.outputs["server-connect-info"].value 是一个映射,并且正确地猜测我通过 fmt.sprintf jalankannya. Betapa bodohnya saya.

Ini berfungsi:

serverconnectinfo := res.outputs["server-connect-info"].value.(map[string]interface{})
Salin selepas log masuk

Juga berfungsi hebat dengan ujian go menggunakan pakej ujian terbina dalam:

assert.NotEmpty(t, serverConnectInfo["host"])
assert.Equal(t, serverConnectInfo["user"], "root")
Salin selepas log masuk

Atas ialah kandungan terperinci Cara unmarshal kereta Pulumi. Hasil struktur objek atau 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