sparse-intern-71089
11/05/2021, 6:58 PMred-match-15116
11/05/2021, 7:08 PMfaint-whale-905
11/05/2021, 7:10 PMred-match-15116
11/05/2021, 7:14 PMon_event
callback on the up
, preview
, etc. methodsfaint-whale-905
11/05/2021, 7:45 PMred-match-15116
11/05/2021, 11:11 PMfaint-whale-905
11/07/2021, 4:12 PMfaint-whale-905
11/07/2021, 4:12 PMred-match-15116
11/08/2021, 2:10 AMprint_id_on_create
function is passed to the on_event
callback on stack.up
import sys
from pulumi import automation as auto
import pulumi_random as random
# This is the pulumi program in "inline function" form
def pulumi_program():
random.RandomString("my_rando_string", length=16, special=True)
def print_id_on_create(evt: auto.EngineEvent):
# Check if it's a ResOutputsEvent. This event is emitted after an operation on a resource has completed.
if evt.res_outputs_event:
meta = evt.res_outputs_event.metadata
# Only print when a resource of type "random:index/randomString:RandomString" is created.
if meta["type"] == "random:index/randomString:RandomString" \
and meta["op"] == auto.OpType.CREATE:
print("\n--------")
print(f"{meta['type']} created")
# meta.new contains the new state for the resource.
# We can get whatever output we want from `outputs`.
print(f"resource_id: {meta['new']['outputs']['id']}")
print(f"urn: {meta['new']['urn']}")
print("--------\n")
# To destroy our program, we can run python main.py destroy
destroy = False
args = sys.argv[1:]
if len(args) > 0:
if args[0] == "destroy":
destroy = True
project_name = "print_on_create"
# We use a simple stack name here, but recommend using auto.fully_qualified_stack_name for maximum specificity.
stack_name = "dev"
# stack_name = auto.fully_qualified_stack_name("myOrgOrUser", project_name, stack_name)
# create or select a stack matching the specified name and project.
# this will set up a workspace with everything necessary to run our inline program (pulumi_program)
stack = auto.create_or_select_stack(stack_name=stack_name,
project_name=project_name,
program=pulumi_program)
print("stack initialized")
# for inline programs, we must manage plugins ourselves
print("installing plugins... ", end="")
stack.workspace.install_plugin("random", "v4.3.1")
print("done.")
print("refreshing stack... ", end="")
stack.refresh()
print("done.")
if destroy:
print("destroying stack... ", end="")
stack.destroy()
print("done.")
sys.exit()
print("updating stack...")
up_res = stack.up(on_event=print_id_on_create)
print("stack update complete")
red-match-15116
11/08/2021, 2:13 AMprint_id_on_create
will instead become:
def print_id_on_create(evt: auto.EngineEvent):
# Check if it's a ResOutputsEvent. This event is emitted after an operation on a resource has completed.
if evt.res_outputs_event:
meta = evt.res_outputs_event.metadata
# Only print when a resource of type "random:index/randomString:RandomString" is created.
if meta.type == "random:index/randomString:RandomString" \
and meta.op == auto.OpType.CREATE:
print("\n--------")
print(f"{meta.type} created")
# meta.new contains the new state for the resource.
# We can get whatever output we want from `outputs`.
print(f"resource_id: {meta.new.outputs['id']}")
print(f"urn: {meta.new.urn}")
print("--------\n")
Note that the properties on meta
can now be accessed as meta.type
instead of meta['type']
faint-whale-905
11/08/2021, 6:48 PMauto.create_or_select_stack
faint-whale-905
11/08/2021, 6:49 PM___main___.py
faint-whale-905
11/08/2021, 6:50 PMdef pulumi_program():
random.RandomString("my_rando_string", length=16, special=True)
def print_id_on_create(evt: auto.EngineEvent):
print("THERE")
# Check if it's a ResOutputsEvent. This event is emitted after an operation on a resource has completed.
if evt.res_outputs_event:
meta = evt.res_outputs_event.metadata
# Only print when a resource of type "random:index/randomString:RandomString" is created.
if meta["op"] == auto.OpType.CREATE:
print("\n--------")
print(f"{meta['type']} created")
# meta.new contains the new state for the resource.
# We can get whatever output we want from `outputs`.
print(f"resource_id: {meta['new']['outputs']['id']}")
print(f"urn: {meta['new']['urn']}")
print("--------\n")
def main():
stack_name = pulumi.get_stack()
if not stack_name.startswith("rds-") or not stack_name[2:]:
raise ValueError("Stack name must be the format \"rds-<environment>-<service>\"")
imported = False
environment = EnvironmentMap[pulumi.get_stack().split("-")[1]]
pulumi_lw = pulumi.automation.LocalWorkspace(work_dir='../')
config = pulumi_lw.get_all_config(stack_name=stack_name)
json_config = None
for key in config.keys():
json_config= json.loads(config[key].value)
config_handler = ConfigHandler(json_config)
config_handler.get_regions()
project_name = pulumi.get_project()
stack = auto.create_or_select_stack(stack_name=stack_name, project_name=project_name, program=pulumi_program)
for region in ConfigHandler.regions:
aws_provider = provider.Provider(resource_name=f"rds-{region}", region=region, profile=environment)
for instance in ConfigHandler.parent_key['regions'][region].keys():
instance_config = ConfigHandler.parent_key['regions'][region][instance]
identifier = instance_config['identifier']
resource = RDSResource(instance_config, region, environment, aws_provider, identifier, imported=imported).get_resource()
if resource:
preview_res = stack.preview(on_event=print_id_on_create)
if __name__ == "__main__":
main()
faint-whale-905
11/08/2021, 6:53 PMpulumi preview
just hangs. The first time I ran it, I was prompted to allow Python to accept incoming connections. I denied that, so I think its just hanging waiting on some inbound connectionred-match-15116
11/08/2021, 11:49 PMred-match-15116
11/09/2021, 1:43 AMred-match-15116
11/09/2021, 1:44 AMpulumi_program
function that is passed into create_or_select_stack
)red-match-15116
11/09/2021, 1:48 AMrandom.RandomString
resource. Yours will likely create an RDS resourceNo matter how you like to participate in developer communities, Pulumi wants to meet you there. If you want to meet other Pulumi users to share use-cases and best practices, contribute code or documentation, see us at an event, or just tell a story about something cool you did with Pulumi, you are part of our community.
Powered by