limited-wire-44163
08/06/2024, 1:34 PMinstances =[]
instances.append(pulumi.Output.all(instance.name,instance.id).apply(lambda args: f"{args[0]}:{args[1]}") )
pulumi.export('my_vms', {f"VM_{i}": vm for i,vm in enumerate(self.instances)})
so I get something like {'VM_1': 'vmname:id', 'VM_0': 'vmname:id'}
stack2
stack_ref = pulumi.StackReference("stack1")
my_vms= stack_ref.outputs['my_vms']
some code that for each vm creates other resources
future-hairdresser-70637
08/06/2024, 2:06 PMlimited-wire-44163
08/06/2024, 2:55 PMstack_ref = pulumi.StackReference("stack1")
my_vms= stack_ref.outputs['my_vms']
myinstance=mypackage.myresource('somename',my_vms)
myinstance.start()
class myresource(pulumi.ComponentResource): #removed other code lines
def __init__(self,name,vms, opts = None):
super().__init__('abc:service:vmsstuff',name, None,opts)
self.child_opts = pulumi.ResourceOptions(parent=self)
self.vms: pulumi.Output = vms
def start(self):
self.vms.apply(lambda my_vms: self.vms_loop(my_vms,sec_group_backend))
def vms_loop(self,vms,sec_group_backend):
for vm in vms:
vm_name = vms[vm].split(":")[0]
id = vms[vm].split(":")[1]
self.attach_port(vm_name,id,sec_group_backend)
def attach_port(self,vm_name,vm_id,sec_group_backend):
cross_subnet_port=self.create_port(vm_name,sec_group_backend)
interface = openstack.compute.InterfaceAttach(vm_name,
instance_id=vm_id,
port_id=cross_subnet_port.id,
opts = pulumi.ResourceOptions(parent=cross_subnet_port,deleted_with=cross_subnet_port))
def create_port(self,vm_name: str,sec_group_backend) -> openstack.networking.Port :
port = openstack.networking.Port(f"{vm_name}_cross_subnet_port",
network_id=openstack.networking.get_network(name=self.existing_network).id,
admin_state_up=True,
security_group_ids=[sec_group_backend.id],
opts = self.child_opts)
return port
limited-wire-44163
08/06/2024, 2:56 PMfuture-hairdresser-70637
08/06/2024, 2:57 PMfuture-hairdresser-70637
08/06/2024, 4:50 PMpulumi.StackReference("stack1")
should be "fully qualified" i.e. {org}/{program}/{stack}
future-hairdresser-70637
08/06/2024, 5:51 PM[]
of aws.ec2.Instance
you could
pulumi.export('instances', instances)
future-hairdresser-70637
08/06/2024, 6:25 PMrob/stack1/dev
import pulumi
# hardcode some instance data
instances = [
"web:ami-03e31863b8e1f70a5",
"api:ami-03e31863b8e1f70a5",
"db:ami-03e31863b8e1f70a5",
]
# export
pulumi.export('instances', {f"VM_{i}": vm for i, vm in enumerate(instances)})
stack 2 is rob/stack2/dev
import pulumi
stack1_ref = pulumi.StackReference("rob/stack1/dev")
myinstance=network.Network('somename', stack1_ref.get_output('instances'))
myinstance.start()
### in network.py
import pulumi
class Network(pulumi.ComponentResource): #removed other code lines
def __init__(self, name, vms, opts=None):
super().__init__('abc:service:vmsstuff', name, None, opts)
self.child_opts = pulumi.ResourceOptions(parent=self)
self.vms: pulumi.Output = vms
def start(self):
self.vms.apply(lambda my_vms: self.vms_loop(my_vms))
def vms_loop(self, vms):
for vm in vms:
vm_name = vms[vm].split(":")[0]
id = vms[vm].split(":")[1]
print(vm_name)
print(id)
limited-wire-44163
08/07/2024, 9:58 AMdef start(my_vms):
myinstance = mypackage.myresource('somename',my_vms)
myinstance.start()
project = pulumi.get_project()
org = pulumi.get_organization()
stack_ref = pulumi.StackReference(f"{org}/{project}/stack1")
my_vms= stack_ref.outputs['my_vms']
my_vms.apply(lambda my_vms: start(my_vms))
class myresource(pulumi.ComponentResource):
def __init__(self, name, vms, opts=None):
self.vms: dict = vms
def start(self):
self.vms_loop(sec_group_backend)
def vms_loop(self,sec_group_backend):
for vm in self.vms:
port = openstack.networking.Port(args)
future-hairdresser-70637
08/07/2024, 11:23 AMapply
if you used ``get_output()``
my_vms = stack_ref.get_output('my_vms')
instead of
my_vms = stack_ref.outputs['my_vms']
limited-wire-44163
08/08/2024, 2:45 PMin vms_loop
for vm in self.vms:
File ".venv/lib/python3.10/site-packages/pulumi/output.py", line 273, in __iter__
raise TypeError(
TypeError: 'Output' object is not iterable, consider iterating the underlying value inside an 'apply'