Maison > Article > développement back-end > Comment désorganiser une structure ou une carte d'objet 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.
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)
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]
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"` }
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 ?
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{})
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")
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!