Maison > développement back-end > Golang > le corps du texte

Comment désorganiser une structure ou une carte d'objet Pulumi auto.Result

WBOY
Libérer: 2024-02-10 12:30:17
avant
1188 Les gens l'ont consulté

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

L'éditeur php Xigua a expliqué comment désorganiser la structure ou le mappage de l'objet Pulumi auto.Result. Pulumi est un outil d'infrastructure en tant que code cross-cloud qui permet aux développeurs de définir et de gérer l'infrastructure cloud à l'aide de langages de programmation. Lors du développement avec Pulumi, vous rencontrez souvent des objets auto.Result, qui contiennent souvent plusieurs propriétés et structures imbriquées. Cet article explique comment désorganiser un objet Result et le mapper à une structure de données plus conviviale pour faciliter le traitement et la manipulation des données.

Contenu de la question

J'utilise l'API d'automatisation de pulumi pour déployer un serveur sur hetzner, mais je ne sais pas comment obtenir les informations de connexion générées à partir des résultats du déploiement.

Voici le code tronqué :

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)
Copier après la connexion

J'ai pu l'obtenir auprès de res.outputs 检索结果,但它是一个字符串。我知道服务器部署和带有连接详细信息的响应是成功的,因为当我登录 serverconnectinfo alors que cela ressemblait à ceci :

serverconnectinfo map[host:123.456.789.10 port:22 privatekey:-----begin openssh private key-----
b3blbnnza...
-----end openssh private key-----
user:root]
Copier après la connexion

Sur la base de solutions douteuses en ligne, j'ai essayé de le rassembler comme json, puis de le désorganiser dans une instance pulumi remote.connectionargs. Cela ne fonctionne évidemment pas car la structure ressemble à ceci :

// 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"`
}
Copier après la connexion

Je pensais créer ma propre structure et réessayer la solution de démarshalage et de marshaling json, mais il semble que si connectionargs 结构已经具有 pulumi 标签,则应该在某处存在某种 pulumi.unmarshal c'est la voie à suivre. ai-je tort? Quoi qu'il en soit, je ne l'ai pas trouvé.

J'ai également regardé la documentation mais je n'ai rien vu d'utile. Peut-être ai-je raté une page ?

Solution de contournement

Comme Peter l'a souligné dans les commentaires, res.outputs["server-connect-info"].value 是一个映射,并且正确地猜测我通过 fmt.sprintf exécutez-le. Comme j'étais stupide.

Ça marche :

serverconnectinfo := res.outputs["server-connect-info"].value.(map[string]interface{})
Copier après la connexion

Fonctionne également très bien avec les tests Go à l'aide du package de test intégré :

assert.NotEmpty(t, serverConnectInfo["host"])
assert.Equal(t, serverConnectInfo["user"], "root")
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!