Skip to content

Commit 569bcc4

Browse files
authored
Update Python examples to use fn_output forms where appropriate (pulumi#1095)
* Update aws-django-voting-app * Update azure-py-aks-helm * Update azure-py-eks * Update azure-py-appservice-docker * Update azure-py-appservice * Update azure-py-cosmosdb-logicapp * Update azure-py-minecraft-server/ * Updated azure-py-webserver * Update classic-azure-py-msi-keyvault-rbac * Update classic-azure-py-webserver-component * Update libvirt-py-vm * Undo workaround
1 parent 53ede48 commit 569bcc4

File tree

11 files changed

+108
-119
lines changed

11 files changed

+108
-119
lines changed

aws-py-django-voting-app/__main__.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@
167167
name="votes",
168168
opts=pulumi.ResourceOptions(provider=mysql_provider))
169169

170-
# Creating a user which will be used to manage MySQL tables
170+
# Creating a user which will be used to manage MySQL tables
171171
mysql_user = mysql.User("mysql-standard-user",
172172
user=sql_user_name,
173173
host="%", # "%" indicates that the connection is allowed to come from anywhere
@@ -214,15 +214,22 @@
214214

215215
# Creating a Docker image from "./frontend/Dockerfile", which we will use
216216
# to upload our app
217-
def get_registry_info(rid):
218-
creds = aws.ecr.get_credentials(registry_id=rid)
217+
218+
def get_registry_info(creds):
219219
decoded = base64.b64decode(creds.authorization_token).decode()
220220
parts = decoded.split(':')
221221
if len(parts) != 2:
222222
raise Exception("Invalid credentials")
223-
return docker.ImageRegistry(creds.proxy_endpoint, parts[0], parts[1])
224223

225-
app_registry = app_ecr_repo.registry_id.apply(get_registry_info)
224+
username = parts[0]
225+
password = parts[1]
226+
return docker.ImageRegistry(
227+
server=creds.proxy_endpoint,
228+
username=username,
229+
password=password)
230+
231+
app_registry = aws.ecr.get_credentials_output(app_ecr_repo.registry_id) \
232+
.apply(get_registry_info)
226233

227234
django_image = docker.Image("django-dockerimage",
228235
image_name=app_ecr_repo.repository_url,
@@ -237,8 +244,8 @@ def get_registry_info(rid):
237244
name="django-log-group"
238245
)
239246

240-
# Creating a task definition for the first Django instance. This task definition
241-
# will migrate the database, create a site admin account, and will automatcially
247+
# Creating a task definition for the first Django instance. This task definition
248+
# will migrate the database, create a site admin account, and will automatcially
242249
# exit when it is finished.
243250
django_database_task_definition = aws.ecs.TaskDefinition("django-database-task-definition",
244251
family="django_database_task_definition-family",
@@ -253,9 +260,9 @@ def get_registry_info(rid):
253260
django_secret_key,
254261
mysql_database.name,
255262
sql_admin_name,
256-
sql_admin_password,
263+
sql_admin_password,
257264
django_admin_name,
258-
django_admin_password,
265+
django_admin_password,
259266
mysql_rds_server.address,
260267
mysql_rds_server.port).apply(lambda args: json.dumps([{
261268
"name": "django-container",
@@ -282,7 +289,7 @@ def get_registry_info(rid):
282289
"options": {
283290
"awslogs-group": "django-log-group",
284291
"awslogs-region": "us-west-2",
285-
"awslogs-stream-prefix": "djangoApp-database",
292+
"awslogs-stream-prefix": "djangoApp-database",
286293
},
287294
},
288295
"command": ["/mysite/setupDatabase.sh"]
@@ -323,7 +330,7 @@ def get_registry_info(rid):
323330
django_secret_key,
324331
mysql_database.name,
325332
sql_user_name,
326-
sql_user_password,
333+
sql_user_password,
327334
mysql_rds_server.address,
328335
mysql_rds_server.port).apply(lambda args: json.dumps([{
329336
"name": "django-container",
@@ -348,7 +355,7 @@ def get_registry_info(rid):
348355
"options": {
349356
"awslogs-group": "django-log-group",
350357
"awslogs-region": "us-west-2",
351-
"awslogs-stream-prefix": "djangoApp-site",
358+
"awslogs-stream-prefix": "djangoApp-site",
352359
},
353360
},
354361
}])))

azure-py-aks-helm/cluster.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,9 @@
6565
})
6666

6767

68-
creds = pulumi.Output.all(resource_group.name, k8s_cluster.name).apply(
69-
lambda args:
70-
containerservice.list_managed_cluster_user_credentials(
71-
resource_group_name=args[0],
72-
resource_name=args[1]))
73-
68+
creds = containerservice.list_managed_cluster_user_credentials_output(
69+
resource_group_name=resource_group.name,
70+
resource_name=k8s_cluster.name)
7471

7572
kubeconfig = creds.kubeconfigs[0].value.apply(
7673
lambda enc: base64.b64decode(enc).decode())

azure-py-aks/__main__.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,9 @@
6565
"secret": ad_sp_password.value
6666
})
6767

68-
creds = pulumi.Output.all(resource_group.name, managed_cluster.name).apply(
69-
lambda args:
70-
containerservice.list_managed_cluster_user_credentials(
71-
resource_group_name=args[0],
72-
resource_name=args[1]))
68+
creds = containerservice.list_managed_cluster_user_credentials_output(
69+
resource_group_name=resource_group.name,
70+
resource_name=managed_cluster.name)
7371

7472
# Export kubeconfig
7573
encoded = creds.kubeconfigs[0].value

azure-py-appservice-docker/__main__.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,8 @@
5858
),
5959
admin_user_enabled=True)
6060

61-
credentials = pulumi.Output.all(resource_group.name, registry.name).apply(
62-
lambda args: containerregistry.list_registry_credentials(resource_group_name=args[0],
63-
registry_name=args[1]))
61+
credentials = containerregistry.list_registry_credentials_output(resource_group_name=resource_group.name,
62+
registry_name=registry.name)
6463
admin_username = credentials.username
6564
admin_password = credentials.passwords[0]["value"]
6665

azure-py-appservice/__main__.py

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -43,31 +43,25 @@
4343
type=storage.BlobType.BLOCK,
4444
source=asset.FileArchive("wwwroot"))
4545

46-
47-
def get_sas(args):
48-
blob_sas = storage.list_storage_account_service_sas(
49-
account_name=storage_account.name,
50-
protocols=storage.HttpProtocol.HTTPS,
51-
shared_access_start_time="2021-01-01",
52-
shared_access_expiry_time="2030-01-01",
53-
resource=storage.SignedResource.C,
54-
resource_group_name=args[3],
55-
permissions=storage.Permissions.R,
56-
canonicalized_resource="/blob/" + args[0] + "/" + args[1],
57-
content_type="application/json",
58-
cache_control="max-age=5",
59-
content_disposition="inline",
60-
content_encoding="deflate",
61-
)
62-
return f"https://{args[0]}.blob.core.windows.net/{args[1]}/{args[2]}?{blob_sas.service_sas_token}"
63-
64-
65-
signed_blob_url = Output.all(
66-
storage_account.name,
67-
storage_container.name,
68-
blob.name,
69-
resource_group.name,
70-
).apply(get_sas)
46+
blob_sas = storage.list_storage_account_service_sas_output(
47+
account_name=storage_account.name,
48+
protocols=storage.HttpProtocol.HTTPS,
49+
shared_access_start_time="2021-01-01",
50+
shared_access_expiry_time="2030-01-01",
51+
resource=storage.SignedResource.C,
52+
resource_group_name=resource_group.name,
53+
permissions=storage.Permissions.R,
54+
canonicalized_resource=Output.concat("/blob/", storage_account.name, "/", storage_container.name),
55+
content_type="application/json",
56+
cache_control="max-age=5",
57+
content_disposition="inline",
58+
content_encoding="deflate")
59+
60+
signed_blob_url = Output.concat(
61+
"https://", storage_account.name, ".blob.core.windows.net/",
62+
storage_container.name, "/",
63+
blob.name, "?",
64+
blob_sas.service_sas_token)
7165

7266
app_insights = insights.Component(
7367
"appservice-ai",
@@ -90,9 +84,12 @@ def get_sas(args):
9084
name="S0",
9185
))
9286

93-
connection_string = Output.all(sql_server.name, database.name, username, pwd) \
94-
.apply(lambda
95-
args: f"Server=tcp:{args[0]}.database.windows.net;initial catalog={args[1]};user ID={args[2]};password={args[3]};Min Pool Size=0;Max Pool Size=30;Persist Security Info=true;")
87+
connection_string = Output.concat(
88+
"Server=tcp:", sql_server.name, ".database.windows.net;initial ",
89+
"catalog=", database.name,
90+
";user ID=", username,
91+
";password=", pwd,
92+
";Min Pool Size=0;Max Pool Size=30;Persist Security Info=true;")
9693

9794
app = web.WebApp(
9895
"appservice-as",

azure-py-cosmosdb-logicapp/__main__.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,16 @@
5656
)
5757
))
5858

59-
account_keys = pulumi.Output.all(cosmosdb_account.name, resource_group.name).apply(
60-
lambda arg: documentdb.list_database_account_keys(account_name=arg[0], resource_group_name=arg[1]))
59+
account_keys = documentdb.list_database_account_keys_output(
60+
account_name=cosmosdb_account.name,
61+
resource_group_name=resource_group.name)
6162

6263
client_config = pulumi.Output.from_input(authorization.get_client_config())
6364

64-
api_id = pulumi.Output.all(client_config.subscription_id, resource_group.location).apply(
65-
lambda arg: f"/subscriptions/{arg[0]}/providers/Microsoft.Web/locations/{arg[1]}/managedApis/documentdb")
65+
api_id = pulumi.Output.concat(
66+
"/subscriptions/", client_config.subscription_id,
67+
"/providers/Microsoft.Web/locations/", resource_group.location,
68+
"/managedApis/documentdb")
6669

6770
# API Connection to be used in a Logic App
6871
connection = web.Connection(
@@ -137,11 +140,12 @@
137140
),
138141
})
139142

140-
callback_urls = pulumi.Output.all(resource_group.name, workflow.name).apply(
141-
lambda arg: logic.list_workflow_trigger_callback_url(
142-
resource_group_name=arg[0],
143-
workflow_name=arg[1],
144-
trigger_name="Receive_post"))
143+
144+
callback_urls = logic.list_workflow_trigger_callback_url_output(
145+
resource_group_name=resource_group.name,
146+
workflow_name=workflow.name,
147+
trigger_name="Receive_post")
148+
145149

146150
# Export the HTTP endpoint
147151
pulumi.export("endpoint", callback_urls.value)

azure-py-minecraft-server/__main__.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,10 @@ def decode_key(key):
108108
)
109109

110110
# Get IP address as an output.
111-
combined_output = Output.all(server.id, public_ip.name, resource_group.name)
112-
public_ip_addr = combined_output.apply(
113-
lambda lst: network.get_public_ip_address(
114-
public_ip_address_name=lst[1],
115-
resource_group_name=lst[2]))
111+
public_ip_addr = server.id.apply(lambda _:
112+
network.get_public_ip_address_output(
113+
public_ip_address_name=public_ip.name,
114+
resource_group_name=resource_group.name))
116115

117116
# Create connection object to server.
118117
conn = provisioners.ConnectionArgs(

azure-py-webserver/__main__.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,8 @@
7676
),
7777
))
7878

79-
combined_output = Output.all(vm.id, public_ip.name, resource_group.name)
80-
public_ip_addr = combined_output.apply(
81-
lambda lst: network.get_public_ip_address(
82-
public_ip_address_name=lst[1],
83-
resource_group_name=lst[2]))
79+
public_ip_addr = vm.id.apply(lambda _: network.get_public_ip_address_output(
80+
public_ip_address_name=public_ip.name,
81+
resource_group_name=resource_group.name))
82+
8483
export("public_ip", public_ip_addr.ip_address)

classic-azure-py-msi-keyvault-rbac/__main__.py

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -91,29 +91,24 @@ def createFirewallRules(arg):
9191
)]
9292
)
9393

94-
def get_sas(args):
95-
blob_sas = storage.get_account_blob_container_sas(
96-
connection_string=args[1],
97-
start="2020-01-01",
98-
expiry="2030-01-01",
99-
container_name=args[2],
100-
permissions=storage.GetAccountBlobContainerSASPermissionsArgs(
101-
read=True,
102-
write=False,
103-
delete=False,
104-
list=False,
105-
add=False,
106-
create=False,
107-
)
108-
)
109-
return f"https://{args[0]}.blob.core.windows.net/{args[2]}/{args[3]}{blob_sas.sas}"
110-
111-
signed_blob_url = Output.all(
112-
storage_account.name,
113-
storage_account.primary_connection_string,
114-
storage_account.name,
115-
blob.name
116-
).apply(get_sas)
94+
blob_sas = storage.get_account_blob_container_sas_output(
95+
connection_string=storage_account.primary_connection_string,
96+
start="2020-01-01",
97+
expiry="2030-01-01",
98+
container_name=container_storage_account.name,
99+
permissions=storage.GetAccountBlobContainerSASPermissionsArgs(
100+
read=True,
101+
write=False,
102+
delete=False,
103+
list=False,
104+
add=False,
105+
create=False))
106+
107+
signed_blob_url = Output.concat(
108+
"https://", storage_account.name, ".blob.core.windows.net/",
109+
storage_account.name, "/",
110+
blob.name,
111+
blob_sas.sas)
117112

118113
secret = keyvault.Secret(
119114
"deployment-zip",
@@ -172,5 +167,3 @@ def get_sas(args):
172167
export("endpoint", app.default_site_hostname.apply(
173168
lambda endpoint: "https://" + endpoint
174169
))
175-
176-

classic-azure-py-webserver-component/webserver.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,11 @@ def __init__(self, name: str, args: WebServerArgs, opts: ResourceOptions = None)
7979
opts=child_opts,
8080
)
8181

82-
# The public IP address is not allocated until the VM is running, so we wait
83-
# for that resource to create, and then lookup the IP address again to report
84-
# its public IP.
85-
combined_output = Output.all(
86-
vm.id, public_ip.name, public_ip.resource_group_name
87-
)
88-
self.public_ip_addr = combined_output.apply(
89-
lambda lst: network.get_public_ip(name=lst[1], resource_group_name=lst[2]).ip_address
90-
)
82+
# The public IP address is not allocated until the VM is
83+
# running, so we wait for that resource to create, and then
84+
# lookup the IP address again to report its public IP.
85+
self.public_ip_addr = vm.id.apply(lambda _: network.get_public_ip_output(
86+
name=public_ip.name,
87+
resource_group_name=public_ip.resource_group_name).ip_address)
88+
9189
self.register_outputs({})

0 commit comments

Comments
 (0)