late-energy-66663
02/08/2022, 2:33 PMMachine 1
hostname: <http://ec2-15-161-152-141.eu-south-1.compute.amazonaws.com|ec2-15-161-152-141.eu-south-1.compute.amazonaws.com>
Public ip : 15.161.152.141
Machine2
hostname: <http://ec2-15-160-154-234.eu-south-1.compute.amazonaws.com|ec2-15-160-154-234.eu-south-1.compute.amazonaws.com>
Public ip : 15.160.154.234
Current Code :
var nodeList []*ec2.Instance
for i := 1; i <= args.NumberOfNodes; i++ {
vm.Instance, err = ec2.NewInstance(ctx, fmt.Sprintf("machine-%d", i), &ec2.InstanceArgs{
Tags: pulumi.StringMap{"Name": pulumi.String(fmt.Sprintf("kafka-%d", i))},
//InstanceType: pulumi.String("t3.large"),
InstanceType: args.InstanceType,
VpcSecurityGroupIds: pulumi.StringArray{vm.SecurityGroup.ID()},
Ami: pulumi.String("ami-0f8ce9c417115413d"),
UserData: userData,
KeyName: deployer.KeyName,
})
if err != nil {
panic("error creating ec2 instance")
}
nodeList = append(nodeList, vm.Instance)
}
for k, v := range nodeList {
ctx.Export("publicIp"+strconv.Itoa(k), v.PublicIp)
ctx.Export("publicHostName"+strconv.Itoa(k), v.PublicDns)
}
Current Outputs:
publicHostName0: "<http://ec2-15-161-152-141.eu-south-1.compute.amazonaws.com|ec2-15-161-152-141.eu-south-1.compute.amazonaws.com>"
publicHostName1: "<http://ec2-15-160-154-234.eu-south-1.compute.amazonaws.com|ec2-15-160-154-234.eu-south-1.compute.amazonaws.com>"
publicIp0 : "15.161.152.141"
publicIp1 : "15.160.154.234"
bored-table-20691
02/08/2022, 3:16 PMlate-energy-66663
02/08/2022, 6:15 PMMachine 1
hostname: <http://ec2-15-161-152-141.eu-south-1.compute.amazonaws.com|ec2-15-161-152-141.eu-south-1.compute.amazonaws.com>
Public ip : 15.161.152.141
Machine2
hostname: <http://ec2-15-160-154-234.eu-south-1.compute.amazonaws.com|ec2-15-160-154-234.eu-south-1.compute.amazonaws.com>
Public ip : 15.160.154.234
bored-table-20691
02/08/2022, 6:28 PMctx.Export("machine-1-hostname", ...)
ctx.Export("machine-1-public-ip", ...)
ctx.Export("machine-2-hostname", ...)
ctx.Export("machine-2-public-ip", ...)
late-energy-66663
02/08/2022, 6:42 PMfor k, v := range nodeList {
ctx.Export("publicIp"+strconv.Itoa(k), v.PublicIp)
ctx.Export("publicHostName"+strconv.Itoa(k), v.PublicDns)
{
Machine 1: {
hostname: <http://ec2-15-161-152-141.eu-south-1.compute.amazonaws.com|ec2-15-161-152-141.eu-south-1.compute.amazonaws.com>
Public ip : 15.161.152.141
}
},
{
Machine 2: {
hostname: <http://ec2-15-161-152-142.eu-south-1.compute.amazonaws.com|ec2-15-161-152-142.eu-south-1.compute.amazonaws.com>
Public ip : 15.161.152.142
}
}
bored-table-20691
02/08/2022, 6:48 PMlate-energy-66663
02/08/2022, 6:49 PMbored-table-20691
02/08/2022, 7:02 PMvar nodeList []*ec2.Instance
...
var ips []pulumi.StringOutput
var dns []pulumi.StringOutput
for _, node := range nodeList {
ips = append(ips, node.PublicIp)
dns = append(ips, node.PublicDns)
}
jsonOut := pulumi.All(ips..., dns...).ApplyT(func (args []interface{}) (string, error) {
length := len(args) / 2
var output []map[string]string
for idx, _ := range args {
ip := args[idx].(string)
dns := args[idx+length].(string)
output = append(output, map[string]string{
"ip": ip,
"dns": dns,
}
}
outputBytes, err := json.Marshal(output)
if err != nil {
return nil, err
}
return string(outputBytes), nil
})
ctx.Export("machine-info", jsonOut)
late-energy-66663
02/08/2022, 7:14 PMpanic: interface conversion: interface {} is []pulumi.StringOutput, not string
goroutine 160 [running]:
bored-table-20691
02/14/2022, 4:15 AMlate-energy-66663
02/14/2022, 3:00 PMfunc NewVirtualMachine(ctx *pulumi.Context, name string, args *virtualmachines.VirtualMachinesArgs, opts ...pulumi.ResourceOption) (*virtualmachines.VirtualMachines, error) {
vm := &virtualmachines.VirtualMachines{}
err := ctx.RegisterComponentResource("virtual_machine", name, vm, opts...)
if err != nil {
return nil, err
}
stackName := ctx.Stack()
// Create a valid webserver security group
vm.SecurityGroup, err = ec2.NewSecurityGroup(ctx, "web-secgrp", &ec2.SecurityGroupArgs{
Ingress: ec2.SecurityGroupIngressArray{
ec2.SecurityGroupIngressArgs{
//Protocol: pulumi.String("tcp"),
Protocol: args.Protocol,
FromPort: <http://pulumi.Int|pulumi.Int>(80),
ToPort: <http://pulumi.Int|pulumi.Int>(80),
CidrBlocks: pulumi.StringArray{pulumi.String("0.0.0.0/0")},
},
},
})
if err != nil {
return nil, err
}
userData := pulumi.Sprintf(`#!/bin/bash
echo "Hello from stack %s" > index.html
nohup python -m SimpleHTTPServer 80 &`, stackName)
deployer, err := ec2.NewKeyPair(ctx, "deployer", &ec2.KeyPairArgs{
PublicKey: pulumi.String("ssh-rsa-key "),
})
if err != nil {
return nil, err
}
var nodeList []*ec2.Instance
var ips []pulumi.StringOutput
var dns []pulumi.StringOutput
for i := 1; i <= args.NumberOfNodes; i++ {
name := fmt.Sprintf("Machine-%d", i)
vm.Instance, err = ec2.NewInstance(ctx, name, &ec2.InstanceArgs{
Tags: pulumi.StringMap{"Name": pulumi.String(fmt.Sprintf("Machine-%d", i))},
//InstanceType: pulumi.String("t3.large"),
InstanceType: args.InstanceType,
VpcSecurityGroupIds: pulumi.StringArray{vm.SecurityGroup.ID()},
Ami: pulumi.String("ami-0f8ce9c417115413d"),
UserData: userData,
KeyName: deployer.KeyName,
})
if err != nil {
panic("error creating ec2 instance")
}
nodeList = append(nodeList, vm.Instance)
for _, node := range nodeList {
ips = append(ips, node.PublicIp)
dns = append(dns, node.PublicDns)
}
}
jsonOut := pulumi.All(ips, dns).ApplyT(func(args []interface{}) (string, error) {
length := len(args) / 2
var output []map[string]string
for idx, _ := range args {
ip := args[idx].(string)
dns := args[idx+length].(string)
output = append(output, map[string]string{
"ip": ip,
"dns": dns,
})
}
outputBytes, err := json.Marshal(output)
if err != nil {
return fmt.Sprintf("Not able to create json"), err
}
fmt.Println(string(outputBytes))
return string(outputBytes), nil
})
ctx.Export("machine-info", jsonOut)
return vm, nil
}
Get Deploy Function :
unc (v *virtualMachinesService) GetDeployVMFunc(vm *virtualmachines.CreateVmReq) pulumi.RunFunc {
return func(ctx *pulumi.Context) error {
fmt.Println(vm.Protocol)
_, err := NewVirtualMachine(ctx, "ec2-vms", &virtualmachines.VirtualMachinesArgs{
Protocol: pulumi.String(vm.Protocol),
NumberOfNodes: vm.NumberOfNodes,
InstanceType: pulumi.String(vm.InstanceType),
})
if err != nil {
return err
}
return nil
}
}
Deploy function :
// set out program for the deployment with the resulting network info
w.SetProgram(VirtualMachinesService.GetDeployVMFunc(vm))
fmt.Println("deploying vm webserver...")
// wire up our update to stream progress to stdout
stdoutStreamer := optup.ProgressStreams(os.Stdout)
res, err := s.Up(ctx, stdoutStreamer)
if err != nil {
fmt.Printf("Failed to deploy vm stack: %v\n", err)
os.Exit(1)
}
//time.Sleep(60 * time.Second)
for key, element := range res.Outputs {
fmt.Println("key", key, "=>", element.Value)
}
fmt.Println("Update succeeded!")
type VirtualMachines struct {
pulumi.ResourceState
PublicIP *ec2.Eip `pulumi:"publicip"`
NetworkInterface *ec2.NetworkInterface
VPC *ec2.Vpc
Instance *ec2.Instance `pulumi:"instance"`
Internet_gateway *ec2.InternetGateway
Route *ec2.Route
GetAvailabilityZones *ec2.AvailabilityZoneGroup
Subnet *ec2.Subnet
SecurityGroup *ec2.SecurityGroup
}
jsonOut := pulumi.All(ips, dns).ApplyT(func(args []interface{}) (string, error) {
Error:
panic: interface conversion: interface {} is []pulumi.StringOutput, not string
goroutine 160 [running]
bored-table-20691
02/14/2022, 4:58 PMApplyT
function?late-energy-66663
02/14/2022, 5:53 PM+ pulumi:pulumi:Stack prod-prod-dev creating
+ virtual_machine ec2-vms creating
+ aws:ec2:KeyPair deployer creating
+ aws:ec2:SecurityGroup web-secgrp creating
+ aws:ec2:KeyPair deployer created
+ aws:ec2:SecurityGroup web-secgrp created
+ aws:ec2:Instance Machine-1 creating
+ aws:ec2:Instance Machine-2 creating
+ aws:ec2:Instance Machine-3 creating
+ aws:ec2:Instance Machine-2 created
+ aws:ec2:Instance Machine-3 created
+ aws:ec2:Instance Machine-1 created
panic: interface conversion: interface {} is []pulumi.StringOutput, not string
goroutine 213 [running]:
<http://github.com/services.NewVirtualMachine.func1(0xc0001acce0|github.com/services.NewVirtualMachine.func1(0xc0001acce0>, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0)
Documents/github.com/services/virtual_machines.go:208 +0x489
reflect.Value.call(0x2869700, 0x2d3f6a8, 0x13, 0x2cda1e6, 0x4, 0xc000ec4348, 0x1, 0x1, 0x1010f7b, 0xc000081a28, ...)
/usr/local/go/src/reflect/value.go:476 +0x8e7
reflect.Value.Call(0x2869700, 0x2d3f6a8, 0x13, 0xc000ec4348, 0x1, 0x1, 0x2749b40, 0xc000eba888, 0xc000081b90)
/usr/local/go/src/reflect/value.go:337 +0xb9
<http://github.com/pulumi/pulumi/sdk/v3/go/pulumi.makeContextful.func1(0xc000ec4330|github.com/pulumi/pulumi/sdk/v3/go/pulumi.makeContextful.func1(0xc000ec4330>, 0x2, 0x2, 0xc000ec4330, 0x2a6ec0, 0x2842ea0)
/Users/go/pkg/mod/github.com/pulumi/pulumi/sdk/v3@v3.19.0/go/pulumi/types.go:362 +0x7c
reflect.Value.call(0xc000dbc300, 0xc000c63b90, 0x13, 0x2cda1e6, 0x4, 0xc000081f60, 0x2, 0x2, 0x296c2a0, 0x2749b40, ...)
/usr/local/go/src/reflect/value.go:476 +0x8e7
reflect.Value.Call(0xc000dbc300, 0xc000c63b90, 0x13, 0xc000d31760, 0x2, 0x2, 0xc000ec4300, 0x3, 0x3)
/usr/local/go/src/reflect/value.go:337 +0xb9
<http://github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1(0xc0007fa690|github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1(0xc0007fa690>, 0x30297d8, 0xc0001b4050, 0x3043708, 0xc0007fa700, 0xc000dbc300, 0xc000c63b90, 0x13)
/Users/go/pkg/mod/github.com/pulumi/pulumi/sdk/v3@v3.19.0/go/pulumi/types.go:470 +0x2f1
created by <http://github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext|github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext>
/Users/go/pkg/mod/github.com/pulumi/pulumi/sdk/v3@v3.19.0/go/pulumi/types.go:458 +0x1f6
exit status 2
bored-table-20691
02/14/2022, 5:53 PMDocuments/github.com/services/virtual_machines.go:208
This line, which line is it? And can you share the full function for ApplyT
?late-energy-66663
02/14/2022, 5:57 PMvirtual_machines.go
file have all the function I mentioned in the above commentsbored-table-20691
02/14/2022, 5:57 PMlate-energy-66663
02/14/2022, 5:57 PMfunc NewVirtualMachine(ctx *pulumi.Context, name string, args *virtualmachines.VirtualMachinesArgs, opts ...pulumi.ResourceOption) (*virtualmachines.VirtualMachines, error) {
vm := &virtualmachines.VirtualMachines{}
err := ctx.RegisterComponentResource("virtual_machine", name, vm, opts...)
if err != nil {
return nil, err
}
stackName := ctx.Stack()
// Create a valid webserver security group
vm.SecurityGroup, err = ec2.NewSecurityGroup(ctx, "web-secgrp", &ec2.SecurityGroupArgs{
Ingress: ec2.SecurityGroupIngressArray{
ec2.SecurityGroupIngressArgs{
//Protocol: pulumi.String("tcp"),
Protocol: args.Protocol,
FromPort: <http://pulumi.Int|pulumi.Int>(80),
ToPort: <http://pulumi.Int|pulumi.Int>(80),
CidrBlocks: pulumi.StringArray{pulumi.String("0.0.0.0/0")},
},
},
})
if err != nil {
return nil, err
}
userData := pulumi.Sprintf(`#!/bin/bash
echo "Hello from stack %s" > index.html
nohup python -m SimpleHTTPServer 80 &`, stackName)
deployer, err := ec2.NewKeyPair(ctx, "deployer", &ec2.KeyPairArgs{
PublicKey: pulumi.String("ssh-rsa-key "),
})
if err != nil {
return nil, err
}
var nodeList []*ec2.Instance
var ips []pulumi.StringOutput
var dns []pulumi.StringOutput
for i := 1; i <= args.NumberOfNodes; i++ {
name := fmt.Sprintf("Machine-%d", i)
vm.Instance, err = ec2.NewInstance(ctx, name, &ec2.InstanceArgs{
Tags: pulumi.StringMap{"Name": pulumi.String(fmt.Sprintf("Machine-%d", i))},
//InstanceType: pulumi.String("t3.large"),
InstanceType: args.InstanceType,
VpcSecurityGroupIds: pulumi.StringArray{vm.SecurityGroup.ID()},
Ami: pulumi.String("ami-0f8ce9c417115413d"),
UserData: userData,
KeyName: deployer.KeyName,
})
if err != nil {
panic("error creating ec2 instance")
}
nodeList = append(nodeList, vm.Instance)
for _, node := range nodeList {
ips = append(ips, node.PublicIp)
dns = append(dns, node.PublicDns)
}
}
jsonOut := pulumi.All(ips, dns).ApplyT(func(args []interface{}) (string, error) {
length := len(args) / 2
var output []map[string]string
for idx, _ := range args {
ip := args[idx].(string)
dns := args[idx+length].(string)
output = append(output, map[string]string{
"ip": ip,
"dns": dns,
})
}
outputBytes, err := json.Marshal(output)
if err != nil {
return fmt.Sprintf("Not able to create json"), err
}
fmt.Println(string(outputBytes))
return string(outputBytes), nil
})
ctx.Export("machine-info", jsonOut)
return vm, nil
}
bored-table-20691
02/14/2022, 5:57 PMlate-energy-66663
02/14/2022, 5:58 PMfor idx, _ := range args {
ip := args[idx].(string)
dns := args[idx+length].(string)
output = append(output, map[string]string{
"ip": ip,
"dns": dns,
})
}
ip := args[idx].(string)
bored-table-20691
02/14/2022, 5:59 PMoutputs := []pulumi.StringOutput
for _, node := range nodeList {
outputs = append(outputs, node.PublicIp, node.PublicDns)
}
jsonOut := pulumi.All(outputs...).ApplyT(func(args []interface{}) (string, error) {
length := len(args)
for idx := 0; idx < length; idx += 2 {
ip := args[idx].(string)
dns := args[idx+1].(string)
output = append(output, map[string]string{
"ip": ip,
"dns": dns,
})
}
outputBytes, err := json.Marshal(output)
if err != nil {
return fmt.Sprintf("Not able to create json"), err
}
fmt.Println(string(outputBytes))
return string(outputBytes), nil
})
ctx.Export("machine-info", jsonOut)
return vm, nil
}
late-energy-66663
02/14/2022, 7:06 PMfor _, nodes := range nodeList {
jsonout := pulumi.All(nodes.PublicIp, nodes.PublicDns).ApplyT(func(args []interface{}) (string, error) {
var output []map[string]string
ip := args[0].(string)
dns := args[1].(string)
output = append(output, map[string]string{
"ip": ip,
"dns": dns,
})
outputBytes, err := json.Marshal(output)
if err != nil {
return fmt.Sprintf("Not able to create json"), err
}
return string(outputBytes), nil
})
// fmt.Println(jsonout)
ctx.Export("machine-info", jsonout)
}
bored-table-20691
02/14/2022, 7:10 PMlate-energy-66663
02/14/2022, 7:16 PMjsonOut := pulumi.All(outputs...).ApplyT(func(args []interface{}) (string, error) {
Cannot use ‘outputs’ (type []pulumi.StringOutput) as the type []interface{}bored-table-20691
02/14/2022, 7:17 PMoutputs := []interface{}{}
late-energy-66663
02/14/2022, 7:17 PMbored-table-20691
02/14/2022, 7:18 PMpulumi.All
accepts a variable argument list, and will wait until they’re all resolved.
If you pass in just outputs
- then it waits for that value to be resolved (which it is, immediately, since it’s not a future). outputs…
passes each element as an argument, allowing you to wait for each one.late-energy-66663
02/14/2022, 7:18 PMctx.RegisterResourceOutputs(vm, pulumi.Map{
"PublicIP": vm.Instance.PublicIp,
ctx.Export
, Cant we use ctx.RegisterResourceOutputs
and use the output some wherebored-table-20691
02/14/2022, 7:24 PMctx.Export
exports it as a stack output, so that other stacks can use it as stack references, or if you need some other automation otuside your stack to access it.RegisterResourceOutputs
call registers it as an output of a component resource.late-energy-66663
02/14/2022, 7:29 PMcall registers it as an output of a component resource
, so what impact it has on the program as wholebored-table-20691
02/14/2022, 7:29 PMlate-energy-66663
02/14/2022, 7:29 PMbored-table-20691
02/14/2022, 7:31 PMlate-energy-66663
02/14/2022, 7:31 PMctx.RegisterResourceOutputs(vm, pulumi.Map{
"PublicIP": vm.Instance.PublicIp,
}
bored-table-20691
02/14/2022, 7:43 PMlate-energy-66663
02/14/2022, 7:51 PM+ aws:ec2:Instance Machine-4 creating
+ aws:ec2:Instance Machine-4 created
+ aws:ec2:Instance Machine-5 created
[{"dns":"<http://ec2-15-161-190-245.eu-south-1.compute.amazonaws.com|ec2-15-161-190-245.eu-south-1.compute.amazonaws.com>","ip":"15.161.190.245"},{"dns":"<http://ec2-15-161-197-181.eu-south-1.compute.amazonaws.com|ec2-15-161-197-181.eu-south-1.compute.amazonaws.com>","ip":"15.161.197.181"},{"dns":"<http://ec2-15-161-107-21.eu-south-1.compute.amazonaws.com|ec2-15-161-107-21.eu-south-1.compute.amazonaws.com>","ip":"15.161.107.21"},{"dns":"<http://ec2-15-160-211-73.eu-south-1.compute.amazonaws.com|ec2-15-160-211-73.eu-south-1.compute.amazonaws.com>","ip":"15.160.211.73"},{"dns":"<http://ec2-15-161-228-178.eu-south-1.compute.amazonaws.com|ec2-15-161-228-178.eu-south-1.compute.amazonaws.com>","ip":"15.161.228.178"}]
virtual_machine ec2-vms
pulumi:pulumi:Stack prod-prod-dev
Outputs:
+ machine-info: "[{\"dns\":\"<http://ec2-15-161-190-245.eu-south-1.compute.amazonaws.com|ec2-15-161-190-245.eu-south-1.compute.amazonaws.com>\",\"ip\":\"15.161.190.245\"},{\"dns\":\"<http://ec2-15-161-197-181.eu-south-1.compute.amazonaws.com|ec2-15-161-197-181.eu-south-1.compute.amazonaws.com>\",\"ip\":\"15.161.197.181\"},{\"dns\":\"<http://ec2-15-161-107-21.eu-south-1.compute.amazonaws.com|ec2-15-161-107-21.eu-south-1.compute.amazonaws.com>\",\"ip\":\"15.161.107.21\"},{\"dns\":\"<http://ec2-15-160-211-73.eu-south-1.compute.amazonaws.com|ec2-15-160-211-73.eu-south-1.compute.amazonaws.com>\",\"ip\":\"15.160.211.73\"},{\"dns\":\"<http://ec2-15-161-228-178.eu-south-1.compute.amazonaws.com|ec2-15-161-228-178.eu-south-1.compute.amazonaws.com>\",\"ip\":\"15.161.228.178\"}]"
Resources:
+ 2 created
7 unchanged
Duration: 16s
key machine-info => [{"dns":"<http://ec2-15-161-190-245.eu-south-1.compute.amazonaws.com|ec2-15-161-190-245.eu-south-1.compute.amazonaws.com>","ip":"15.161.190.245"},{"dns":"<http://ec2-15-161-197-181.eu-south-1.compute.amazonaws.com|ec2-15-161-197-181.eu-south-1.compute.amazonaws.com>","ip":"15.161.197.181"},{"dns":"<http://ec2-15-161-107-21.eu-south-1.compute.amazonaws.com|ec2-15-161-107-21.eu-south-1.compute.amazonaws.com>","ip":"15.161.107.21"},{"dns":"<http://ec2-15-160-211-73.eu-south-1.compute.amazonaws.com|ec2-15-160-211-73.eu-south-1.compute.amazonaws.com>","ip":"15.160.211.73"},{"dns":"<http://ec2-15-161-228-178.eu-south-1.compute.amazonaws.com|ec2-15-161-228-178.eu-south-1.compute.amazonaws.com>","ip":"15.161.228.178"}]
Update succeeded!
bored-table-20691
02/14/2022, 7:55 PMlate-energy-66663
02/14/2022, 7:59 PMjsonOut
is of pulumi.Output . Can I use it directly to store value to some struct or do I have export it first which we did and can be seen on the outputbored-table-20691
02/14/2022, 8:01 PMlate-energy-66663
02/14/2022, 8:06 PMres, err := s.Up(ctx, stdoutStreamer)
if err != nil {
fmt.Printf("Failed to deploy vm stack: %v\n", err)
os.Exit(1)
}
//time.Sleep(60 * time.Second)
for key, element := range res.Outputs {
fmt.Println("key", key, "=>", element.Value)
}
bored-table-20691
02/14/2022, 8:09 PMpulumi stack output
late-energy-66663
02/14/2022, 8:12 PMApplyT
output to some STRUCT which can then be use in the program like using the struct value to some other programs.
pulumi.All(outputs...).ApplyT(func(args []interface{}) (vm.struct
, error)
something like abovebored-table-20691
02/14/2022, 8:18 PMApplyT
will always be a future.late-energy-66663
02/14/2022, 8:18 PMctx.export
for i := 1; i <= 3; i++ {
name := fmt.Sprintf("Machine-%d", i)
vm.Instance, err = ec2.NewInstance(ctx, name, &ec2.InstanceArgs{
Tags: pulumi.StringMap{"Name": pulumi.String(fmt.Sprintf("Machine-%d", i))},
//InstanceType: pulumi.String("t3.large"),
InstanceType: args.InstanceType,
VpcSecurityGroupIds: pulumi.StringArray{vm.SecurityGroup.ID()},
Ami: pulumi.String("ami-0f8ce9c417115413d"),
UserData: userData,
KeyName: deployer.KeyName,
})
I have updated the code we discussed last week , adding the new slice which picks the name of the node and trying to append it to the output slice interface . But some how not getting the desired result where the name is also added as part of dns, ip . Just wondering where i am missing the trick . really Appreciate for the advise
nodeName = append(nodeName, pulumi.Sprintf(name))
nodeList = append(nodeList, vm.Instance)
}
//var outputs []pulumi.StringOutput
outputs := []interface{}{}
for _, names := range nodeName {
for _, node := range nodeList {
outputs = append(outputs, node.PublicIp, node.PublicDns, names)
}
}
jsonOut := pulumi.All(outputs...).ApplyT(func(args []interface{}) (string, error) {
length := len(args)
fmt.Println(length)
var output []map[string]string
for idx := 0; idx < length; idx += 3 {
ip := args[idx].(string)
dns := args[idx+1].(string)
name := args[idx+2].(string)
output = append(output, map[string]string{
"ip": ip,
"dns": dns,
"name": name,
})
}
outputBytes, err := json.Marshal(output)
if err != nil {
return fmt.Sprintf("Not able to create json"), err
}
fmt.Println(string(outputBytes))
return string(outputBytes), nil
})
ctx.Export("machine-info", jsonOut)
return vm, nil
}
bored-table-20691
02/22/2022, 1:58 PMnodeName
and nodeList
are the same length):
for idx, node := range nodeList {
outputs = append(outputs, node.PublicIp, node.PublicDns, nodeName[idx])
}
And then in the ApplyT
function, it would be similar to what you have in your code above.late-energy-66663
02/22/2022, 5:19 PM