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.
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)
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]
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"` }
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?
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{})
Juga berfungsi hebat dengan ujian go menggunakan pakej ujian terbina dalam:
assert.NotEmpty(t, serverConnectInfo["host"]) assert.Equal(t, serverConnectInfo["user"], "root")
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!