首頁 > 後端開發 > Golang > 主體

如何解組 Pulumi auto.Result 物件結構或映射

WBOY
發布: 2024-02-10 12:30:17
轉載
1214 人瀏覽過

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

php小編西瓜分享如何解組 Pulumi auto.Result 物件結構或映射。 Pulumi 是一個跨雲端平台的基礎設施即程式碼工具,它允許開發人員使用程式語言來定義和管理雲端基礎架構。在使用 Pulumi 進行開發時,經常會遇到 auto.Result 對象,它通常包含多個屬性和嵌套結構。本文將介紹如何解組 Result 對象,以及如何對應到一個更易於使用的資料結構,以便更方便地處理和操作資料。

問題內容

我正在 go 中使用 pulumi 的自動化 api 將伺服器部署到 hetzner,但不知道如何從部署結果中取得產生的連線資訊。

這是截斷的程式碼:

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)
登入後複製

我能夠從 res.outputs 檢索結果,但它是一個字串。我知道伺服器部署和帶有連接詳細資訊的回應是成功的,因為當我登入 serverconnectinfo 時,它看起來像這樣:

serverconnectinfo map[host:123.456.789.10 port:22 privatekey:-----begin openssh private key-----
b3blbnnza...
-----end openssh private key-----
user:root]
登入後複製

基於網路上一些可疑的解決方案,我嘗試像 json 一樣對其進行編組,然後將其解組到 pulumi remote.connectionargs 實例中。這顯然不起作用,因為結構如下所示:

// 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"`
}
登入後複製

我正在考慮建立自己的結構,然後重試json 解組和編組解決方案,但似乎如果connectionargs 結構已經具有pulumi 標籤,則應該在某處存在某種pulumi.unmarshal 方法。我錯了嗎?反正我沒找到。

我也查看了文檔,但沒有看到任何有幫助的內容。也許我漏掉了一頁?

解決方法

正如peter 在評論中指出的那樣,res.outputs["server-connect-info"].value 是一個映射,並且正確地猜測我透過fmt.sprintf 來運行它。我真是太傻了。

這有效:

serverconnectinfo := res.outputs["server-connect-info"].value.(map[string]interface{})
登入後複製

使用內建測試包在 go 測試中也能很好地工作:

assert.NotEmpty(t, serverConnectInfo["host"])
assert.Equal(t, serverConnectInfo["user"], "root")
登入後複製

以上是如何解組 Pulumi auto.Result 物件結構或映射的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板