pulumi-gcp 8.7.0a1730183903__py3-none-any.whl → 8.7.0a1730196225__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. pulumi_gcp/__init__.py +70 -0
  2. pulumi_gcp/accesscontextmanager/service_perimeter.py +2 -0
  3. pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_egress_policy.py +4 -0
  4. pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_ingress_policy.py +4 -0
  5. pulumi_gcp/accesscontextmanager/service_perimeter_egress_policy.py +4 -0
  6. pulumi_gcp/accesscontextmanager/service_perimeter_ingress_policy.py +4 -0
  7. pulumi_gcp/accesscontextmanager/service_perimeters.py +2 -0
  8. pulumi_gcp/apigee/__init__.py +2 -0
  9. pulumi_gcp/apigee/_inputs.py +108 -0
  10. pulumi_gcp/apigee/app_group.py +811 -0
  11. pulumi_gcp/apigee/developer.py +757 -0
  12. pulumi_gcp/apigee/outputs.py +64 -0
  13. pulumi_gcp/artifactregistry/get_docker_image.py +40 -0
  14. pulumi_gcp/bigquery/connection.py +12 -12
  15. pulumi_gcp/bigquery/job.py +6 -6
  16. pulumi_gcp/cloudrunv2/get_service.py +12 -1
  17. pulumi_gcp/cloudrunv2/service.py +92 -0
  18. pulumi_gcp/compute/_inputs.py +214 -116
  19. pulumi_gcp/compute/backend_service.py +76 -0
  20. pulumi_gcp/compute/get_backend_service.py +12 -1
  21. pulumi_gcp/compute/get_instance.py +29 -1
  22. pulumi_gcp/compute/get_instance_template.py +29 -1
  23. pulumi_gcp/compute/get_region_instance_group_manager.py +0 -18
  24. pulumi_gcp/compute/get_region_instance_template.py +29 -1
  25. pulumi_gcp/compute/instance.py +89 -0
  26. pulumi_gcp/compute/instance_from_machine_image.py +82 -0
  27. pulumi_gcp/compute/instance_from_template.py +82 -0
  28. pulumi_gcp/compute/instance_template.py +75 -0
  29. pulumi_gcp/compute/network_firewall_policy_association.py +76 -50
  30. pulumi_gcp/compute/network_firewall_policy_rule.py +149 -103
  31. pulumi_gcp/compute/outputs.py +170 -80
  32. pulumi_gcp/compute/region_backend_service.py +94 -0
  33. pulumi_gcp/compute/region_instance_template.py +75 -0
  34. pulumi_gcp/compute/region_network_endpoint_group.py +6 -4
  35. pulumi_gcp/compute/region_network_firewall_policy_association.py +104 -54
  36. pulumi_gcp/compute/region_network_firewall_policy_rule.py +160 -107
  37. pulumi_gcp/config/__init__.pyi +4 -0
  38. pulumi_gcp/config/vars.py +8 -0
  39. pulumi_gcp/container/attached_cluster.py +9 -6
  40. pulumi_gcp/container/outputs.py +2 -2
  41. pulumi_gcp/datastream/stream.py +2 -2
  42. pulumi_gcp/diagflow/_inputs.py +472 -2
  43. pulumi_gcp/diagflow/cx_agent.py +64 -4
  44. pulumi_gcp/diagflow/cx_flow.py +30 -0
  45. pulumi_gcp/diagflow/outputs.py +378 -2
  46. pulumi_gcp/gkehub/feature.py +2 -4
  47. pulumi_gcp/iam/workload_identity_pool_provider.py +56 -0
  48. pulumi_gcp/looker/instance.py +104 -2
  49. pulumi_gcp/monitoring/_inputs.py +23 -0
  50. pulumi_gcp/monitoring/get_secret_version.py +22 -3
  51. pulumi_gcp/monitoring/outputs.py +16 -0
  52. pulumi_gcp/networkconnectivity/__init__.py +1 -0
  53. pulumi_gcp/networkconnectivity/_inputs.py +148 -0
  54. pulumi_gcp/networkconnectivity/group.py +764 -0
  55. pulumi_gcp/networkconnectivity/outputs.py +125 -0
  56. pulumi_gcp/networkconnectivity/spoke.py +144 -0
  57. pulumi_gcp/networksecurity/server_tls_policy.py +2 -2
  58. pulumi_gcp/oracledatabase/__init__.py +20 -0
  59. pulumi_gcp/oracledatabase/_inputs.py +4745 -0
  60. pulumi_gcp/oracledatabase/autonomous_database.py +983 -0
  61. pulumi_gcp/oracledatabase/cloud_exadata_infrastructure.py +842 -0
  62. pulumi_gcp/oracledatabase/cloud_vm_cluster.py +1086 -0
  63. pulumi_gcp/oracledatabase/get_autonomous_database.py +290 -0
  64. pulumi_gcp/oracledatabase/get_autonomous_databases.py +150 -0
  65. pulumi_gcp/oracledatabase/get_cloud_exadata_infrastructure.py +257 -0
  66. pulumi_gcp/oracledatabase/get_cloud_exadata_infrastructures.py +150 -0
  67. pulumi_gcp/oracledatabase/get_cloud_vm_cluster.py +290 -0
  68. pulumi_gcp/oracledatabase/get_cloud_vm_clusters.py +150 -0
  69. pulumi_gcp/oracledatabase/get_db_nodes.py +245 -0
  70. pulumi_gcp/oracledatabase/get_db_servers.py +245 -0
  71. pulumi_gcp/oracledatabase/outputs.py +9304 -0
  72. pulumi_gcp/organizations/folder.py +7 -7
  73. pulumi_gcp/organizations/project.py +7 -7
  74. pulumi_gcp/orgpolicy/_inputs.py +3 -3
  75. pulumi_gcp/orgpolicy/outputs.py +2 -2
  76. pulumi_gcp/privilegedaccessmanager/get_entitlement.py +46 -2
  77. pulumi_gcp/provider.py +40 -0
  78. pulumi_gcp/pulumi-plugin.json +1 -1
  79. pulumi_gcp/secretmanager/get_regional_secret_version.py +24 -5
  80. pulumi_gcp/secretmanager/get_regional_secret_version_access.py +24 -5
  81. pulumi_gcp/secretmanager/get_secret_version.py +22 -3
  82. pulumi_gcp/secretmanager/get_secret_version_access.py +22 -3
  83. pulumi_gcp/secretmanager/regional_secret.py +2 -2
  84. pulumi_gcp/siteverification/get_token.py +0 -16
  85. pulumi_gcp/siteverification/owner.py +0 -16
  86. pulumi_gcp/spanner/_inputs.py +29 -5
  87. pulumi_gcp/spanner/outputs.py +20 -3
  88. pulumi_gcp/sql/_inputs.py +6 -6
  89. pulumi_gcp/sql/outputs.py +4 -4
  90. pulumi_gcp/sql/user.py +28 -21
  91. pulumi_gcp/storage/_inputs.py +36 -0
  92. pulumi_gcp/storage/bucket.py +47 -0
  93. pulumi_gcp/storage/get_bucket.py +12 -1
  94. pulumi_gcp/storage/outputs.py +40 -0
  95. pulumi_gcp/transcoder/__init__.py +11 -0
  96. pulumi_gcp/transcoder/_inputs.py +3991 -0
  97. pulumi_gcp/transcoder/job.py +2134 -0
  98. pulumi_gcp/transcoder/job_template.py +1524 -0
  99. pulumi_gcp/transcoder/outputs.py +2918 -0
  100. pulumi_gcp/vertex/ai_deployment_resource_pool.py +2 -2
  101. pulumi_gcp/vmwareengine/_inputs.py +440 -0
  102. pulumi_gcp/vmwareengine/cluster.py +100 -2
  103. pulumi_gcp/vmwareengine/get_cluster.py +12 -1
  104. pulumi_gcp/vmwareengine/outputs.py +615 -0
  105. pulumi_gcp/workstations/_inputs.py +54 -0
  106. pulumi_gcp/workstations/outputs.py +32 -0
  107. pulumi_gcp/workstations/workstation_config.py +205 -0
  108. {pulumi_gcp-8.7.0a1730183903.dist-info → pulumi_gcp-8.7.0a1730196225.dist-info}/METADATA +1 -1
  109. {pulumi_gcp-8.7.0a1730183903.dist-info → pulumi_gcp-8.7.0a1730196225.dist-info}/RECORD +111 -89
  110. {pulumi_gcp-8.7.0a1730183903.dist-info → pulumi_gcp-8.7.0a1730196225.dist-info}/WHEEL +1 -1
  111. {pulumi_gcp-8.7.0a1730183903.dist-info → pulumi_gcp-8.7.0a1730196225.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,1524 @@
1
+ # coding=utf-8
2
+ # *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
3
+ # *** Do not edit by hand unless you're certain you know what you are doing! ***
4
+
5
+ import copy
6
+ import warnings
7
+ import sys
8
+ import pulumi
9
+ import pulumi.runtime
10
+ from typing import Any, Mapping, Optional, Sequence, Union, overload
11
+ if sys.version_info >= (3, 11):
12
+ from typing import NotRequired, TypedDict, TypeAlias
13
+ else:
14
+ from typing_extensions import NotRequired, TypedDict, TypeAlias
15
+ from .. import _utilities
16
+ from . import outputs
17
+ from ._inputs import *
18
+
19
+ __all__ = ['JobTemplateArgs', 'JobTemplate']
20
+
21
+ @pulumi.input_type
22
+ class JobTemplateArgs:
23
+ def __init__(__self__, *,
24
+ job_template_id: pulumi.Input[str],
25
+ location: pulumi.Input[str],
26
+ config: Optional[pulumi.Input['JobTemplateConfigArgs']] = None,
27
+ labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
28
+ project: Optional[pulumi.Input[str]] = None):
29
+ """
30
+ The set of arguments for constructing a JobTemplate resource.
31
+ :param pulumi.Input[str] job_template_id: ID to use for the Transcoding job template.
32
+ :param pulumi.Input[str] location: The location of the transcoding job template resource.
33
+
34
+
35
+ - - -
36
+ :param pulumi.Input['JobTemplateConfigArgs'] config: The configuration for this template.
37
+ Structure is documented below.
38
+ :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: The labels associated with this job template. You can use these to organize and group your job templates.
39
+
40
+ **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
41
+ Please refer to the field `effective_labels` for all of the labels present on the resource.
42
+ :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
43
+ If it is not provided, the provider project is used.
44
+ """
45
+ pulumi.set(__self__, "job_template_id", job_template_id)
46
+ pulumi.set(__self__, "location", location)
47
+ if config is not None:
48
+ pulumi.set(__self__, "config", config)
49
+ if labels is not None:
50
+ pulumi.set(__self__, "labels", labels)
51
+ if project is not None:
52
+ pulumi.set(__self__, "project", project)
53
+
54
+ @property
55
+ @pulumi.getter(name="jobTemplateId")
56
+ def job_template_id(self) -> pulumi.Input[str]:
57
+ """
58
+ ID to use for the Transcoding job template.
59
+ """
60
+ return pulumi.get(self, "job_template_id")
61
+
62
+ @job_template_id.setter
63
+ def job_template_id(self, value: pulumi.Input[str]):
64
+ pulumi.set(self, "job_template_id", value)
65
+
66
+ @property
67
+ @pulumi.getter
68
+ def location(self) -> pulumi.Input[str]:
69
+ """
70
+ The location of the transcoding job template resource.
71
+
72
+
73
+ - - -
74
+ """
75
+ return pulumi.get(self, "location")
76
+
77
+ @location.setter
78
+ def location(self, value: pulumi.Input[str]):
79
+ pulumi.set(self, "location", value)
80
+
81
+ @property
82
+ @pulumi.getter
83
+ def config(self) -> Optional[pulumi.Input['JobTemplateConfigArgs']]:
84
+ """
85
+ The configuration for this template.
86
+ Structure is documented below.
87
+ """
88
+ return pulumi.get(self, "config")
89
+
90
+ @config.setter
91
+ def config(self, value: Optional[pulumi.Input['JobTemplateConfigArgs']]):
92
+ pulumi.set(self, "config", value)
93
+
94
+ @property
95
+ @pulumi.getter
96
+ def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
97
+ """
98
+ The labels associated with this job template. You can use these to organize and group your job templates.
99
+
100
+ **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
101
+ Please refer to the field `effective_labels` for all of the labels present on the resource.
102
+ """
103
+ return pulumi.get(self, "labels")
104
+
105
+ @labels.setter
106
+ def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
107
+ pulumi.set(self, "labels", value)
108
+
109
+ @property
110
+ @pulumi.getter
111
+ def project(self) -> Optional[pulumi.Input[str]]:
112
+ """
113
+ The ID of the project in which the resource belongs.
114
+ If it is not provided, the provider project is used.
115
+ """
116
+ return pulumi.get(self, "project")
117
+
118
+ @project.setter
119
+ def project(self, value: Optional[pulumi.Input[str]]):
120
+ pulumi.set(self, "project", value)
121
+
122
+
123
+ @pulumi.input_type
124
+ class _JobTemplateState:
125
+ def __init__(__self__, *,
126
+ config: Optional[pulumi.Input['JobTemplateConfigArgs']] = None,
127
+ effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
128
+ job_template_id: Optional[pulumi.Input[str]] = None,
129
+ labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
130
+ location: Optional[pulumi.Input[str]] = None,
131
+ name: Optional[pulumi.Input[str]] = None,
132
+ project: Optional[pulumi.Input[str]] = None,
133
+ pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None):
134
+ """
135
+ Input properties used for looking up and filtering JobTemplate resources.
136
+ :param pulumi.Input['JobTemplateConfigArgs'] config: The configuration for this template.
137
+ Structure is documented below.
138
+ :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
139
+ :param pulumi.Input[str] job_template_id: ID to use for the Transcoding job template.
140
+ :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: The labels associated with this job template. You can use these to organize and group your job templates.
141
+
142
+ **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
143
+ Please refer to the field `effective_labels` for all of the labels present on the resource.
144
+ :param pulumi.Input[str] location: The location of the transcoding job template resource.
145
+
146
+
147
+ - - -
148
+ :param pulumi.Input[str] name: The resource name of the job template.
149
+ :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
150
+ If it is not provided, the provider project is used.
151
+ :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource
152
+ and default labels configured on the provider.
153
+ """
154
+ if config is not None:
155
+ pulumi.set(__self__, "config", config)
156
+ if effective_labels is not None:
157
+ pulumi.set(__self__, "effective_labels", effective_labels)
158
+ if job_template_id is not None:
159
+ pulumi.set(__self__, "job_template_id", job_template_id)
160
+ if labels is not None:
161
+ pulumi.set(__self__, "labels", labels)
162
+ if location is not None:
163
+ pulumi.set(__self__, "location", location)
164
+ if name is not None:
165
+ pulumi.set(__self__, "name", name)
166
+ if project is not None:
167
+ pulumi.set(__self__, "project", project)
168
+ if pulumi_labels is not None:
169
+ pulumi.set(__self__, "pulumi_labels", pulumi_labels)
170
+
171
+ @property
172
+ @pulumi.getter
173
+ def config(self) -> Optional[pulumi.Input['JobTemplateConfigArgs']]:
174
+ """
175
+ The configuration for this template.
176
+ Structure is documented below.
177
+ """
178
+ return pulumi.get(self, "config")
179
+
180
+ @config.setter
181
+ def config(self, value: Optional[pulumi.Input['JobTemplateConfigArgs']]):
182
+ pulumi.set(self, "config", value)
183
+
184
+ @property
185
+ @pulumi.getter(name="effectiveLabels")
186
+ def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
187
+ """
188
+ All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
189
+ """
190
+ return pulumi.get(self, "effective_labels")
191
+
192
+ @effective_labels.setter
193
+ def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
194
+ pulumi.set(self, "effective_labels", value)
195
+
196
+ @property
197
+ @pulumi.getter(name="jobTemplateId")
198
+ def job_template_id(self) -> Optional[pulumi.Input[str]]:
199
+ """
200
+ ID to use for the Transcoding job template.
201
+ """
202
+ return pulumi.get(self, "job_template_id")
203
+
204
+ @job_template_id.setter
205
+ def job_template_id(self, value: Optional[pulumi.Input[str]]):
206
+ pulumi.set(self, "job_template_id", value)
207
+
208
+ @property
209
+ @pulumi.getter
210
+ def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
211
+ """
212
+ The labels associated with this job template. You can use these to organize and group your job templates.
213
+
214
+ **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
215
+ Please refer to the field `effective_labels` for all of the labels present on the resource.
216
+ """
217
+ return pulumi.get(self, "labels")
218
+
219
+ @labels.setter
220
+ def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
221
+ pulumi.set(self, "labels", value)
222
+
223
+ @property
224
+ @pulumi.getter
225
+ def location(self) -> Optional[pulumi.Input[str]]:
226
+ """
227
+ The location of the transcoding job template resource.
228
+
229
+
230
+ - - -
231
+ """
232
+ return pulumi.get(self, "location")
233
+
234
+ @location.setter
235
+ def location(self, value: Optional[pulumi.Input[str]]):
236
+ pulumi.set(self, "location", value)
237
+
238
+ @property
239
+ @pulumi.getter
240
+ def name(self) -> Optional[pulumi.Input[str]]:
241
+ """
242
+ The resource name of the job template.
243
+ """
244
+ return pulumi.get(self, "name")
245
+
246
+ @name.setter
247
+ def name(self, value: Optional[pulumi.Input[str]]):
248
+ pulumi.set(self, "name", value)
249
+
250
+ @property
251
+ @pulumi.getter
252
+ def project(self) -> Optional[pulumi.Input[str]]:
253
+ """
254
+ The ID of the project in which the resource belongs.
255
+ If it is not provided, the provider project is used.
256
+ """
257
+ return pulumi.get(self, "project")
258
+
259
+ @project.setter
260
+ def project(self, value: Optional[pulumi.Input[str]]):
261
+ pulumi.set(self, "project", value)
262
+
263
+ @property
264
+ @pulumi.getter(name="pulumiLabels")
265
+ def pulumi_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
266
+ """
267
+ The combination of labels configured directly on the resource
268
+ and default labels configured on the provider.
269
+ """
270
+ return pulumi.get(self, "pulumi_labels")
271
+
272
+ @pulumi_labels.setter
273
+ def pulumi_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
274
+ pulumi.set(self, "pulumi_labels", value)
275
+
276
+
277
+ class JobTemplate(pulumi.CustomResource):
278
+ @overload
279
+ def __init__(__self__,
280
+ resource_name: str,
281
+ opts: Optional[pulumi.ResourceOptions] = None,
282
+ config: Optional[pulumi.Input[Union['JobTemplateConfigArgs', 'JobTemplateConfigArgsDict']]] = None,
283
+ job_template_id: Optional[pulumi.Input[str]] = None,
284
+ labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
285
+ location: Optional[pulumi.Input[str]] = None,
286
+ project: Optional[pulumi.Input[str]] = None,
287
+ __props__=None):
288
+ """
289
+ Transcoding Job Template Resource
290
+
291
+ To get more information about JobTemplate, see:
292
+
293
+ * [API documentation](https://cloud.google.com/transcoder/docs/reference/rest/v1/projects.locations.jobTemplates)
294
+ * How-to Guides
295
+ * [Transcoder](https://cloud.google.com/transcoder/docs/)
296
+
297
+ ## Example Usage
298
+
299
+ ### Transcoder Job Template Basic
300
+
301
+ ```python
302
+ import pulumi
303
+ import pulumi_gcp as gcp
304
+
305
+ default = gcp.transcoder.JobTemplate("default",
306
+ job_template_id="example-job-template",
307
+ location="us-central1",
308
+ config={
309
+ "inputs": [{
310
+ "key": "input0",
311
+ }],
312
+ "edit_lists": [{
313
+ "key": "atom0",
314
+ "inputs": ["input0"],
315
+ "start_time_offset": "0s",
316
+ }],
317
+ "ad_breaks": [{
318
+ "start_time_offset": "3.500s",
319
+ }],
320
+ "elementary_streams": [
321
+ {
322
+ "key": "video-stream0",
323
+ "video_stream": {
324
+ "h264": {
325
+ "width_pixels": 640,
326
+ "height_pixels": 360,
327
+ "bitrate_bps": 550000,
328
+ "frame_rate": 60,
329
+ "pixel_format": "yuv420p",
330
+ "rate_control_mode": "vbr",
331
+ "crf_level": 21,
332
+ "gop_duration": "3s",
333
+ "vbv_size_bits": 550000,
334
+ "vbv_fullness_bits": 495000,
335
+ "entropy_coder": "cabac",
336
+ "profile": "high",
337
+ "preset": "veryfast",
338
+ },
339
+ },
340
+ },
341
+ {
342
+ "key": "video-stream1",
343
+ "video_stream": {
344
+ "h264": {
345
+ "width_pixels": 1280,
346
+ "height_pixels": 720,
347
+ "bitrate_bps": 550000,
348
+ "frame_rate": 60,
349
+ "pixel_format": "yuv420p",
350
+ "rate_control_mode": "vbr",
351
+ "crf_level": 21,
352
+ "gop_duration": "3s",
353
+ "vbv_size_bits": 2500000,
354
+ "vbv_fullness_bits": 2250000,
355
+ "entropy_coder": "cabac",
356
+ "profile": "high",
357
+ "preset": "veryfast",
358
+ },
359
+ },
360
+ },
361
+ {
362
+ "key": "audio-stream0",
363
+ "audio_stream": {
364
+ "codec": "aac",
365
+ "bitrate_bps": 64000,
366
+ "channel_count": 2,
367
+ "channel_layouts": [
368
+ "fl",
369
+ "fr",
370
+ ],
371
+ "sample_rate_hertz": 48000,
372
+ },
373
+ },
374
+ ],
375
+ "mux_streams": [
376
+ {
377
+ "key": "sd",
378
+ "file_name": "sd.mp4",
379
+ "container": "mp4",
380
+ "elementary_streams": [
381
+ "video-stream0",
382
+ "audio-stream0",
383
+ ],
384
+ },
385
+ {
386
+ "key": "hd",
387
+ "file_name": "hd.mp4",
388
+ "container": "mp4",
389
+ "elementary_streams": [
390
+ "video-stream1",
391
+ "audio-stream0",
392
+ ],
393
+ },
394
+ ],
395
+ },
396
+ labels={
397
+ "label": "key",
398
+ })
399
+ ```
400
+ ### Transcoder Job Template Overlays
401
+
402
+ ```python
403
+ import pulumi
404
+ import pulumi_gcp as gcp
405
+
406
+ default = gcp.transcoder.JobTemplate("default",
407
+ job_template_id="example-job-template",
408
+ location="us-central1",
409
+ config={
410
+ "inputs": [{
411
+ "key": "input0",
412
+ "uri": "gs://example/example.mp4",
413
+ }],
414
+ "output": {
415
+ "uri": "gs://example/outputs/",
416
+ },
417
+ "edit_lists": [{
418
+ "key": "atom0",
419
+ "inputs": ["input0"],
420
+ "start_time_offset": "0s",
421
+ }],
422
+ "ad_breaks": [{
423
+ "start_time_offset": "3.500s",
424
+ }],
425
+ "overlays": [{
426
+ "animations": [{
427
+ "animation_fade": {
428
+ "fade_type": "FADE_IN",
429
+ "start_time_offset": "1.500s",
430
+ "end_time_offset": "3.500s",
431
+ "xy": {
432
+ "x": 1,
433
+ "y": 0.5,
434
+ },
435
+ },
436
+ }],
437
+ "image": {
438
+ "uri": "gs://example/overlay.png",
439
+ },
440
+ }],
441
+ "elementary_streams": [
442
+ {
443
+ "key": "video-stream0",
444
+ "video_stream": {
445
+ "h264": {
446
+ "width_pixels": 640,
447
+ "height_pixels": 360,
448
+ "bitrate_bps": 550000,
449
+ "frame_rate": 60,
450
+ "pixel_format": "yuv420p",
451
+ "rate_control_mode": "vbr",
452
+ "crf_level": 21,
453
+ "gop_duration": "3s",
454
+ "vbv_size_bits": 550000,
455
+ "vbv_fullness_bits": 495000,
456
+ "entropy_coder": "cabac",
457
+ "profile": "high",
458
+ "preset": "veryfast",
459
+ },
460
+ },
461
+ },
462
+ {
463
+ "key": "video-stream1",
464
+ "video_stream": {
465
+ "h264": {
466
+ "width_pixels": 1280,
467
+ "height_pixels": 720,
468
+ "bitrate_bps": 550000,
469
+ "frame_rate": 60,
470
+ "pixel_format": "yuv420p",
471
+ "rate_control_mode": "vbr",
472
+ "crf_level": 21,
473
+ "gop_duration": "3s",
474
+ "vbv_size_bits": 2500000,
475
+ "vbv_fullness_bits": 2250000,
476
+ "entropy_coder": "cabac",
477
+ "profile": "high",
478
+ "preset": "veryfast",
479
+ },
480
+ },
481
+ },
482
+ {
483
+ "key": "audio-stream0",
484
+ "audio_stream": {
485
+ "codec": "aac",
486
+ "bitrate_bps": 64000,
487
+ "channel_count": 2,
488
+ "channel_layouts": [
489
+ "fl",
490
+ "fr",
491
+ ],
492
+ "sample_rate_hertz": 48000,
493
+ },
494
+ },
495
+ ],
496
+ "mux_streams": [
497
+ {
498
+ "key": "sd",
499
+ "file_name": "sd.mp4",
500
+ "container": "mp4",
501
+ "elementary_streams": [
502
+ "video-stream0",
503
+ "audio-stream0",
504
+ ],
505
+ },
506
+ {
507
+ "key": "hd",
508
+ "file_name": "hd.mp4",
509
+ "container": "mp4",
510
+ "elementary_streams": [
511
+ "video-stream1",
512
+ "audio-stream0",
513
+ ],
514
+ },
515
+ ],
516
+ },
517
+ labels={
518
+ "label": "key",
519
+ })
520
+ ```
521
+ ### Transcoder Job Template Encryptions
522
+
523
+ ```python
524
+ import pulumi
525
+ import pulumi_gcp as gcp
526
+
527
+ encryption_key = gcp.secretmanager.Secret("encryption_key",
528
+ secret_id="transcoder-encryption-key",
529
+ replication={
530
+ "auto": {},
531
+ })
532
+ encryption_key_secret_version = gcp.secretmanager.SecretVersion("encryption_key",
533
+ secret=encryption_key.name,
534
+ secret_data="4A67F2C1B8E93A4F6D3E7890A1BC23DF")
535
+ default = gcp.transcoder.JobTemplate("default",
536
+ job_template_id="example-job-template",
537
+ location="us-central1",
538
+ config={
539
+ "elementary_streams": [
540
+ {
541
+ "key": "es_video",
542
+ "video_stream": {
543
+ "h264": {
544
+ "profile": "main",
545
+ "height_pixels": 600,
546
+ "width_pixels": 800,
547
+ "bitrate_bps": 1000000,
548
+ "frame_rate": 60,
549
+ },
550
+ },
551
+ },
552
+ {
553
+ "key": "es_audio",
554
+ "audio_stream": {
555
+ "codec": "aac",
556
+ "channel_count": 2,
557
+ "bitrate_bps": 160000,
558
+ },
559
+ },
560
+ ],
561
+ "encryptions": [
562
+ {
563
+ "id": "aes-128",
564
+ "secret_manager_key_source": {
565
+ "secret_version": encryption_key_secret_version.name,
566
+ },
567
+ "drm_systems": {
568
+ "clearkey": {},
569
+ },
570
+ "aes128": {},
571
+ },
572
+ {
573
+ "id": "cenc",
574
+ "secret_manager_key_source": {
575
+ "secret_version": encryption_key_secret_version.name,
576
+ },
577
+ "drm_systems": {
578
+ "widevine": {},
579
+ },
580
+ "mpeg_cenc": {
581
+ "scheme": "cenc",
582
+ },
583
+ },
584
+ {
585
+ "id": "cbcs",
586
+ "secret_manager_key_source": {
587
+ "secret_version": encryption_key_secret_version.name,
588
+ },
589
+ "drm_systems": {
590
+ "widevine": {},
591
+ },
592
+ "mpeg_cenc": {
593
+ "scheme": "cbcs",
594
+ },
595
+ },
596
+ ],
597
+ "mux_streams": [
598
+ {
599
+ "key": "ts_aes128",
600
+ "container": "ts",
601
+ "elementary_streams": [
602
+ "es_video",
603
+ "es_audio",
604
+ ],
605
+ "segment_settings": {
606
+ "segment_duration": "6s",
607
+ },
608
+ "encryption_id": "aes-128",
609
+ },
610
+ {
611
+ "key": "fmp4_cenc_video",
612
+ "container": "fmp4",
613
+ "elementary_streams": ["es_video"],
614
+ "segment_settings": {
615
+ "segment_duration": "6s",
616
+ },
617
+ "encryption_id": "cenc",
618
+ },
619
+ {
620
+ "key": "fmp4_cenc_audio",
621
+ "container": "fmp4",
622
+ "elementary_streams": ["es_audio"],
623
+ "segment_settings": {
624
+ "segment_duration": "6s",
625
+ },
626
+ "encryption_id": "cenc",
627
+ },
628
+ {
629
+ "key": "fmp4_cbcs_video",
630
+ "container": "fmp4",
631
+ "elementary_streams": ["es_video"],
632
+ "segment_settings": {
633
+ "segment_duration": "6s",
634
+ },
635
+ "encryption_id": "cbcs",
636
+ },
637
+ {
638
+ "key": "fmp4_cbcs_audio",
639
+ "container": "fmp4",
640
+ "elementary_streams": ["es_audio"],
641
+ "segment_settings": {
642
+ "segment_duration": "6s",
643
+ },
644
+ "encryption_id": "cbcs",
645
+ },
646
+ ],
647
+ "manifests": [
648
+ {
649
+ "file_name": "manifest_aes128.m3u8",
650
+ "type": "HLS",
651
+ "mux_streams": ["ts_aes128"],
652
+ },
653
+ {
654
+ "file_name": "manifest_cenc.mpd",
655
+ "type": "DASH",
656
+ "mux_streams": [
657
+ "fmp4_cenc_video",
658
+ "fmp4_cenc_audio",
659
+ ],
660
+ },
661
+ {
662
+ "file_name": "manifest_cbcs.mpd",
663
+ "type": "DASH",
664
+ "mux_streams": [
665
+ "fmp4_cbcs_video",
666
+ "fmp4_cbcs_audio",
667
+ ],
668
+ },
669
+ ],
670
+ },
671
+ labels={
672
+ "label": "key",
673
+ })
674
+ ```
675
+ ### Transcoder Job Template Pubsub
676
+
677
+ ```python
678
+ import pulumi
679
+ import pulumi_gcp as gcp
680
+
681
+ transcoder_notifications = gcp.pubsub.Topic("transcoder_notifications", name="transcoder-notifications")
682
+ default = gcp.transcoder.JobTemplate("default",
683
+ job_template_id="example-job-template",
684
+ location="us-central1",
685
+ config={
686
+ "inputs": [{
687
+ "key": "input0",
688
+ "uri": "gs://example/example.mp4",
689
+ }],
690
+ "output": {
691
+ "uri": "gs://example/outputs/",
692
+ },
693
+ "edit_lists": [{
694
+ "key": "atom0",
695
+ "inputs": ["input0"],
696
+ "start_time_offset": "0s",
697
+ }],
698
+ "ad_breaks": [{
699
+ "start_time_offset": "3.500s",
700
+ }],
701
+ "elementary_streams": [
702
+ {
703
+ "key": "video-stream0",
704
+ "video_stream": {
705
+ "h264": {
706
+ "width_pixels": 640,
707
+ "height_pixels": 360,
708
+ "bitrate_bps": 550000,
709
+ "frame_rate": 60,
710
+ "pixel_format": "yuv420p",
711
+ "rate_control_mode": "vbr",
712
+ "crf_level": 21,
713
+ "gop_duration": "3s",
714
+ "vbv_size_bits": 550000,
715
+ "vbv_fullness_bits": 495000,
716
+ "entropy_coder": "cabac",
717
+ "profile": "high",
718
+ "preset": "veryfast",
719
+ },
720
+ },
721
+ },
722
+ {
723
+ "key": "video-stream1",
724
+ "video_stream": {
725
+ "h264": {
726
+ "width_pixels": 1280,
727
+ "height_pixels": 720,
728
+ "bitrate_bps": 550000,
729
+ "frame_rate": 60,
730
+ "pixel_format": "yuv420p",
731
+ "rate_control_mode": "vbr",
732
+ "crf_level": 21,
733
+ "gop_duration": "3s",
734
+ "vbv_size_bits": 2500000,
735
+ "vbv_fullness_bits": 2250000,
736
+ "entropy_coder": "cabac",
737
+ "profile": "high",
738
+ "preset": "veryfast",
739
+ },
740
+ },
741
+ },
742
+ {
743
+ "key": "audio-stream0",
744
+ "audio_stream": {
745
+ "codec": "aac",
746
+ "bitrate_bps": 64000,
747
+ "channel_count": 2,
748
+ "channel_layouts": [
749
+ "fl",
750
+ "fr",
751
+ ],
752
+ "sample_rate_hertz": 48000,
753
+ },
754
+ },
755
+ ],
756
+ "mux_streams": [
757
+ {
758
+ "key": "sd",
759
+ "file_name": "sd.mp4",
760
+ "container": "mp4",
761
+ "elementary_streams": [
762
+ "video-stream0",
763
+ "audio-stream0",
764
+ ],
765
+ },
766
+ {
767
+ "key": "hd",
768
+ "file_name": "hd.mp4",
769
+ "container": "mp4",
770
+ "elementary_streams": [
771
+ "video-stream1",
772
+ "audio-stream0",
773
+ ],
774
+ },
775
+ ],
776
+ "pubsub_destination": {
777
+ "topic": transcoder_notifications.id,
778
+ },
779
+ },
780
+ labels={
781
+ "label": "key",
782
+ })
783
+ ```
784
+
785
+ ## Import
786
+
787
+ JobTemplate can be imported using any of these accepted formats:
788
+
789
+ * `projects/{{project}}/locations/{{location}}/jobTemplates/{{job_template_id}}`
790
+
791
+ * `{{project}}/{{location}}/{{job_template_id}}`
792
+
793
+ * `{{location}}/{{job_template_id}}`
794
+
795
+ When using the `pulumi import` command, JobTemplate can be imported using one of the formats above. For example:
796
+
797
+ ```sh
798
+ $ pulumi import gcp:transcoder/jobTemplate:JobTemplate default projects/{{project}}/locations/{{location}}/jobTemplates/{{job_template_id}}
799
+ ```
800
+
801
+ ```sh
802
+ $ pulumi import gcp:transcoder/jobTemplate:JobTemplate default {{project}}/{{location}}/{{job_template_id}}
803
+ ```
804
+
805
+ ```sh
806
+ $ pulumi import gcp:transcoder/jobTemplate:JobTemplate default {{location}}/{{job_template_id}}
807
+ ```
808
+
809
+ :param str resource_name: The name of the resource.
810
+ :param pulumi.ResourceOptions opts: Options for the resource.
811
+ :param pulumi.Input[Union['JobTemplateConfigArgs', 'JobTemplateConfigArgsDict']] config: The configuration for this template.
812
+ Structure is documented below.
813
+ :param pulumi.Input[str] job_template_id: ID to use for the Transcoding job template.
814
+ :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: The labels associated with this job template. You can use these to organize and group your job templates.
815
+
816
+ **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
817
+ Please refer to the field `effective_labels` for all of the labels present on the resource.
818
+ :param pulumi.Input[str] location: The location of the transcoding job template resource.
819
+
820
+
821
+ - - -
822
+ :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
823
+ If it is not provided, the provider project is used.
824
+ """
825
+ ...
826
+ @overload
827
+ def __init__(__self__,
828
+ resource_name: str,
829
+ args: JobTemplateArgs,
830
+ opts: Optional[pulumi.ResourceOptions] = None):
831
+ """
832
+ Transcoding Job Template Resource
833
+
834
+ To get more information about JobTemplate, see:
835
+
836
+ * [API documentation](https://cloud.google.com/transcoder/docs/reference/rest/v1/projects.locations.jobTemplates)
837
+ * How-to Guides
838
+ * [Transcoder](https://cloud.google.com/transcoder/docs/)
839
+
840
+ ## Example Usage
841
+
842
+ ### Transcoder Job Template Basic
843
+
844
+ ```python
845
+ import pulumi
846
+ import pulumi_gcp as gcp
847
+
848
+ default = gcp.transcoder.JobTemplate("default",
849
+ job_template_id="example-job-template",
850
+ location="us-central1",
851
+ config={
852
+ "inputs": [{
853
+ "key": "input0",
854
+ }],
855
+ "edit_lists": [{
856
+ "key": "atom0",
857
+ "inputs": ["input0"],
858
+ "start_time_offset": "0s",
859
+ }],
860
+ "ad_breaks": [{
861
+ "start_time_offset": "3.500s",
862
+ }],
863
+ "elementary_streams": [
864
+ {
865
+ "key": "video-stream0",
866
+ "video_stream": {
867
+ "h264": {
868
+ "width_pixels": 640,
869
+ "height_pixels": 360,
870
+ "bitrate_bps": 550000,
871
+ "frame_rate": 60,
872
+ "pixel_format": "yuv420p",
873
+ "rate_control_mode": "vbr",
874
+ "crf_level": 21,
875
+ "gop_duration": "3s",
876
+ "vbv_size_bits": 550000,
877
+ "vbv_fullness_bits": 495000,
878
+ "entropy_coder": "cabac",
879
+ "profile": "high",
880
+ "preset": "veryfast",
881
+ },
882
+ },
883
+ },
884
+ {
885
+ "key": "video-stream1",
886
+ "video_stream": {
887
+ "h264": {
888
+ "width_pixels": 1280,
889
+ "height_pixels": 720,
890
+ "bitrate_bps": 550000,
891
+ "frame_rate": 60,
892
+ "pixel_format": "yuv420p",
893
+ "rate_control_mode": "vbr",
894
+ "crf_level": 21,
895
+ "gop_duration": "3s",
896
+ "vbv_size_bits": 2500000,
897
+ "vbv_fullness_bits": 2250000,
898
+ "entropy_coder": "cabac",
899
+ "profile": "high",
900
+ "preset": "veryfast",
901
+ },
902
+ },
903
+ },
904
+ {
905
+ "key": "audio-stream0",
906
+ "audio_stream": {
907
+ "codec": "aac",
908
+ "bitrate_bps": 64000,
909
+ "channel_count": 2,
910
+ "channel_layouts": [
911
+ "fl",
912
+ "fr",
913
+ ],
914
+ "sample_rate_hertz": 48000,
915
+ },
916
+ },
917
+ ],
918
+ "mux_streams": [
919
+ {
920
+ "key": "sd",
921
+ "file_name": "sd.mp4",
922
+ "container": "mp4",
923
+ "elementary_streams": [
924
+ "video-stream0",
925
+ "audio-stream0",
926
+ ],
927
+ },
928
+ {
929
+ "key": "hd",
930
+ "file_name": "hd.mp4",
931
+ "container": "mp4",
932
+ "elementary_streams": [
933
+ "video-stream1",
934
+ "audio-stream0",
935
+ ],
936
+ },
937
+ ],
938
+ },
939
+ labels={
940
+ "label": "key",
941
+ })
942
+ ```
943
+ ### Transcoder Job Template Overlays
944
+
945
+ ```python
946
+ import pulumi
947
+ import pulumi_gcp as gcp
948
+
949
+ default = gcp.transcoder.JobTemplate("default",
950
+ job_template_id="example-job-template",
951
+ location="us-central1",
952
+ config={
953
+ "inputs": [{
954
+ "key": "input0",
955
+ "uri": "gs://example/example.mp4",
956
+ }],
957
+ "output": {
958
+ "uri": "gs://example/outputs/",
959
+ },
960
+ "edit_lists": [{
961
+ "key": "atom0",
962
+ "inputs": ["input0"],
963
+ "start_time_offset": "0s",
964
+ }],
965
+ "ad_breaks": [{
966
+ "start_time_offset": "3.500s",
967
+ }],
968
+ "overlays": [{
969
+ "animations": [{
970
+ "animation_fade": {
971
+ "fade_type": "FADE_IN",
972
+ "start_time_offset": "1.500s",
973
+ "end_time_offset": "3.500s",
974
+ "xy": {
975
+ "x": 1,
976
+ "y": 0.5,
977
+ },
978
+ },
979
+ }],
980
+ "image": {
981
+ "uri": "gs://example/overlay.png",
982
+ },
983
+ }],
984
+ "elementary_streams": [
985
+ {
986
+ "key": "video-stream0",
987
+ "video_stream": {
988
+ "h264": {
989
+ "width_pixels": 640,
990
+ "height_pixels": 360,
991
+ "bitrate_bps": 550000,
992
+ "frame_rate": 60,
993
+ "pixel_format": "yuv420p",
994
+ "rate_control_mode": "vbr",
995
+ "crf_level": 21,
996
+ "gop_duration": "3s",
997
+ "vbv_size_bits": 550000,
998
+ "vbv_fullness_bits": 495000,
999
+ "entropy_coder": "cabac",
1000
+ "profile": "high",
1001
+ "preset": "veryfast",
1002
+ },
1003
+ },
1004
+ },
1005
+ {
1006
+ "key": "video-stream1",
1007
+ "video_stream": {
1008
+ "h264": {
1009
+ "width_pixels": 1280,
1010
+ "height_pixels": 720,
1011
+ "bitrate_bps": 550000,
1012
+ "frame_rate": 60,
1013
+ "pixel_format": "yuv420p",
1014
+ "rate_control_mode": "vbr",
1015
+ "crf_level": 21,
1016
+ "gop_duration": "3s",
1017
+ "vbv_size_bits": 2500000,
1018
+ "vbv_fullness_bits": 2250000,
1019
+ "entropy_coder": "cabac",
1020
+ "profile": "high",
1021
+ "preset": "veryfast",
1022
+ },
1023
+ },
1024
+ },
1025
+ {
1026
+ "key": "audio-stream0",
1027
+ "audio_stream": {
1028
+ "codec": "aac",
1029
+ "bitrate_bps": 64000,
1030
+ "channel_count": 2,
1031
+ "channel_layouts": [
1032
+ "fl",
1033
+ "fr",
1034
+ ],
1035
+ "sample_rate_hertz": 48000,
1036
+ },
1037
+ },
1038
+ ],
1039
+ "mux_streams": [
1040
+ {
1041
+ "key": "sd",
1042
+ "file_name": "sd.mp4",
1043
+ "container": "mp4",
1044
+ "elementary_streams": [
1045
+ "video-stream0",
1046
+ "audio-stream0",
1047
+ ],
1048
+ },
1049
+ {
1050
+ "key": "hd",
1051
+ "file_name": "hd.mp4",
1052
+ "container": "mp4",
1053
+ "elementary_streams": [
1054
+ "video-stream1",
1055
+ "audio-stream0",
1056
+ ],
1057
+ },
1058
+ ],
1059
+ },
1060
+ labels={
1061
+ "label": "key",
1062
+ })
1063
+ ```
1064
+ ### Transcoder Job Template Encryptions
1065
+
1066
+ ```python
1067
+ import pulumi
1068
+ import pulumi_gcp as gcp
1069
+
1070
+ encryption_key = gcp.secretmanager.Secret("encryption_key",
1071
+ secret_id="transcoder-encryption-key",
1072
+ replication={
1073
+ "auto": {},
1074
+ })
1075
+ encryption_key_secret_version = gcp.secretmanager.SecretVersion("encryption_key",
1076
+ secret=encryption_key.name,
1077
+ secret_data="4A67F2C1B8E93A4F6D3E7890A1BC23DF")
1078
+ default = gcp.transcoder.JobTemplate("default",
1079
+ job_template_id="example-job-template",
1080
+ location="us-central1",
1081
+ config={
1082
+ "elementary_streams": [
1083
+ {
1084
+ "key": "es_video",
1085
+ "video_stream": {
1086
+ "h264": {
1087
+ "profile": "main",
1088
+ "height_pixels": 600,
1089
+ "width_pixels": 800,
1090
+ "bitrate_bps": 1000000,
1091
+ "frame_rate": 60,
1092
+ },
1093
+ },
1094
+ },
1095
+ {
1096
+ "key": "es_audio",
1097
+ "audio_stream": {
1098
+ "codec": "aac",
1099
+ "channel_count": 2,
1100
+ "bitrate_bps": 160000,
1101
+ },
1102
+ },
1103
+ ],
1104
+ "encryptions": [
1105
+ {
1106
+ "id": "aes-128",
1107
+ "secret_manager_key_source": {
1108
+ "secret_version": encryption_key_secret_version.name,
1109
+ },
1110
+ "drm_systems": {
1111
+ "clearkey": {},
1112
+ },
1113
+ "aes128": {},
1114
+ },
1115
+ {
1116
+ "id": "cenc",
1117
+ "secret_manager_key_source": {
1118
+ "secret_version": encryption_key_secret_version.name,
1119
+ },
1120
+ "drm_systems": {
1121
+ "widevine": {},
1122
+ },
1123
+ "mpeg_cenc": {
1124
+ "scheme": "cenc",
1125
+ },
1126
+ },
1127
+ {
1128
+ "id": "cbcs",
1129
+ "secret_manager_key_source": {
1130
+ "secret_version": encryption_key_secret_version.name,
1131
+ },
1132
+ "drm_systems": {
1133
+ "widevine": {},
1134
+ },
1135
+ "mpeg_cenc": {
1136
+ "scheme": "cbcs",
1137
+ },
1138
+ },
1139
+ ],
1140
+ "mux_streams": [
1141
+ {
1142
+ "key": "ts_aes128",
1143
+ "container": "ts",
1144
+ "elementary_streams": [
1145
+ "es_video",
1146
+ "es_audio",
1147
+ ],
1148
+ "segment_settings": {
1149
+ "segment_duration": "6s",
1150
+ },
1151
+ "encryption_id": "aes-128",
1152
+ },
1153
+ {
1154
+ "key": "fmp4_cenc_video",
1155
+ "container": "fmp4",
1156
+ "elementary_streams": ["es_video"],
1157
+ "segment_settings": {
1158
+ "segment_duration": "6s",
1159
+ },
1160
+ "encryption_id": "cenc",
1161
+ },
1162
+ {
1163
+ "key": "fmp4_cenc_audio",
1164
+ "container": "fmp4",
1165
+ "elementary_streams": ["es_audio"],
1166
+ "segment_settings": {
1167
+ "segment_duration": "6s",
1168
+ },
1169
+ "encryption_id": "cenc",
1170
+ },
1171
+ {
1172
+ "key": "fmp4_cbcs_video",
1173
+ "container": "fmp4",
1174
+ "elementary_streams": ["es_video"],
1175
+ "segment_settings": {
1176
+ "segment_duration": "6s",
1177
+ },
1178
+ "encryption_id": "cbcs",
1179
+ },
1180
+ {
1181
+ "key": "fmp4_cbcs_audio",
1182
+ "container": "fmp4",
1183
+ "elementary_streams": ["es_audio"],
1184
+ "segment_settings": {
1185
+ "segment_duration": "6s",
1186
+ },
1187
+ "encryption_id": "cbcs",
1188
+ },
1189
+ ],
1190
+ "manifests": [
1191
+ {
1192
+ "file_name": "manifest_aes128.m3u8",
1193
+ "type": "HLS",
1194
+ "mux_streams": ["ts_aes128"],
1195
+ },
1196
+ {
1197
+ "file_name": "manifest_cenc.mpd",
1198
+ "type": "DASH",
1199
+ "mux_streams": [
1200
+ "fmp4_cenc_video",
1201
+ "fmp4_cenc_audio",
1202
+ ],
1203
+ },
1204
+ {
1205
+ "file_name": "manifest_cbcs.mpd",
1206
+ "type": "DASH",
1207
+ "mux_streams": [
1208
+ "fmp4_cbcs_video",
1209
+ "fmp4_cbcs_audio",
1210
+ ],
1211
+ },
1212
+ ],
1213
+ },
1214
+ labels={
1215
+ "label": "key",
1216
+ })
1217
+ ```
1218
+ ### Transcoder Job Template Pubsub
1219
+
1220
+ ```python
1221
+ import pulumi
1222
+ import pulumi_gcp as gcp
1223
+
1224
+ transcoder_notifications = gcp.pubsub.Topic("transcoder_notifications", name="transcoder-notifications")
1225
+ default = gcp.transcoder.JobTemplate("default",
1226
+ job_template_id="example-job-template",
1227
+ location="us-central1",
1228
+ config={
1229
+ "inputs": [{
1230
+ "key": "input0",
1231
+ "uri": "gs://example/example.mp4",
1232
+ }],
1233
+ "output": {
1234
+ "uri": "gs://example/outputs/",
1235
+ },
1236
+ "edit_lists": [{
1237
+ "key": "atom0",
1238
+ "inputs": ["input0"],
1239
+ "start_time_offset": "0s",
1240
+ }],
1241
+ "ad_breaks": [{
1242
+ "start_time_offset": "3.500s",
1243
+ }],
1244
+ "elementary_streams": [
1245
+ {
1246
+ "key": "video-stream0",
1247
+ "video_stream": {
1248
+ "h264": {
1249
+ "width_pixels": 640,
1250
+ "height_pixels": 360,
1251
+ "bitrate_bps": 550000,
1252
+ "frame_rate": 60,
1253
+ "pixel_format": "yuv420p",
1254
+ "rate_control_mode": "vbr",
1255
+ "crf_level": 21,
1256
+ "gop_duration": "3s",
1257
+ "vbv_size_bits": 550000,
1258
+ "vbv_fullness_bits": 495000,
1259
+ "entropy_coder": "cabac",
1260
+ "profile": "high",
1261
+ "preset": "veryfast",
1262
+ },
1263
+ },
1264
+ },
1265
+ {
1266
+ "key": "video-stream1",
1267
+ "video_stream": {
1268
+ "h264": {
1269
+ "width_pixels": 1280,
1270
+ "height_pixels": 720,
1271
+ "bitrate_bps": 550000,
1272
+ "frame_rate": 60,
1273
+ "pixel_format": "yuv420p",
1274
+ "rate_control_mode": "vbr",
1275
+ "crf_level": 21,
1276
+ "gop_duration": "3s",
1277
+ "vbv_size_bits": 2500000,
1278
+ "vbv_fullness_bits": 2250000,
1279
+ "entropy_coder": "cabac",
1280
+ "profile": "high",
1281
+ "preset": "veryfast",
1282
+ },
1283
+ },
1284
+ },
1285
+ {
1286
+ "key": "audio-stream0",
1287
+ "audio_stream": {
1288
+ "codec": "aac",
1289
+ "bitrate_bps": 64000,
1290
+ "channel_count": 2,
1291
+ "channel_layouts": [
1292
+ "fl",
1293
+ "fr",
1294
+ ],
1295
+ "sample_rate_hertz": 48000,
1296
+ },
1297
+ },
1298
+ ],
1299
+ "mux_streams": [
1300
+ {
1301
+ "key": "sd",
1302
+ "file_name": "sd.mp4",
1303
+ "container": "mp4",
1304
+ "elementary_streams": [
1305
+ "video-stream0",
1306
+ "audio-stream0",
1307
+ ],
1308
+ },
1309
+ {
1310
+ "key": "hd",
1311
+ "file_name": "hd.mp4",
1312
+ "container": "mp4",
1313
+ "elementary_streams": [
1314
+ "video-stream1",
1315
+ "audio-stream0",
1316
+ ],
1317
+ },
1318
+ ],
1319
+ "pubsub_destination": {
1320
+ "topic": transcoder_notifications.id,
1321
+ },
1322
+ },
1323
+ labels={
1324
+ "label": "key",
1325
+ })
1326
+ ```
1327
+
1328
+ ## Import
1329
+
1330
+ JobTemplate can be imported using any of these accepted formats:
1331
+
1332
+ * `projects/{{project}}/locations/{{location}}/jobTemplates/{{job_template_id}}`
1333
+
1334
+ * `{{project}}/{{location}}/{{job_template_id}}`
1335
+
1336
+ * `{{location}}/{{job_template_id}}`
1337
+
1338
+ When using the `pulumi import` command, JobTemplate can be imported using one of the formats above. For example:
1339
+
1340
+ ```sh
1341
+ $ pulumi import gcp:transcoder/jobTemplate:JobTemplate default projects/{{project}}/locations/{{location}}/jobTemplates/{{job_template_id}}
1342
+ ```
1343
+
1344
+ ```sh
1345
+ $ pulumi import gcp:transcoder/jobTemplate:JobTemplate default {{project}}/{{location}}/{{job_template_id}}
1346
+ ```
1347
+
1348
+ ```sh
1349
+ $ pulumi import gcp:transcoder/jobTemplate:JobTemplate default {{location}}/{{job_template_id}}
1350
+ ```
1351
+
1352
+ :param str resource_name: The name of the resource.
1353
+ :param JobTemplateArgs args: The arguments to use to populate this resource's properties.
1354
+ :param pulumi.ResourceOptions opts: Options for the resource.
1355
+ """
1356
+ ...
1357
+ def __init__(__self__, resource_name: str, *args, **kwargs):
1358
+ resource_args, opts = _utilities.get_resource_args_opts(JobTemplateArgs, pulumi.ResourceOptions, *args, **kwargs)
1359
+ if resource_args is not None:
1360
+ __self__._internal_init(resource_name, opts, **resource_args.__dict__)
1361
+ else:
1362
+ __self__._internal_init(resource_name, *args, **kwargs)
1363
+
1364
+ def _internal_init(__self__,
1365
+ resource_name: str,
1366
+ opts: Optional[pulumi.ResourceOptions] = None,
1367
+ config: Optional[pulumi.Input[Union['JobTemplateConfigArgs', 'JobTemplateConfigArgsDict']]] = None,
1368
+ job_template_id: Optional[pulumi.Input[str]] = None,
1369
+ labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
1370
+ location: Optional[pulumi.Input[str]] = None,
1371
+ project: Optional[pulumi.Input[str]] = None,
1372
+ __props__=None):
1373
+ opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
1374
+ if not isinstance(opts, pulumi.ResourceOptions):
1375
+ raise TypeError('Expected resource options to be a ResourceOptions instance')
1376
+ if opts.id is None:
1377
+ if __props__ is not None:
1378
+ raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
1379
+ __props__ = JobTemplateArgs.__new__(JobTemplateArgs)
1380
+
1381
+ __props__.__dict__["config"] = config
1382
+ if job_template_id is None and not opts.urn:
1383
+ raise TypeError("Missing required property 'job_template_id'")
1384
+ __props__.__dict__["job_template_id"] = job_template_id
1385
+ __props__.__dict__["labels"] = labels
1386
+ if location is None and not opts.urn:
1387
+ raise TypeError("Missing required property 'location'")
1388
+ __props__.__dict__["location"] = location
1389
+ __props__.__dict__["project"] = project
1390
+ __props__.__dict__["effective_labels"] = None
1391
+ __props__.__dict__["name"] = None
1392
+ __props__.__dict__["pulumi_labels"] = None
1393
+ secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["effectiveLabels", "pulumiLabels"])
1394
+ opts = pulumi.ResourceOptions.merge(opts, secret_opts)
1395
+ super(JobTemplate, __self__).__init__(
1396
+ 'gcp:transcoder/jobTemplate:JobTemplate',
1397
+ resource_name,
1398
+ __props__,
1399
+ opts)
1400
+
1401
+ @staticmethod
1402
+ def get(resource_name: str,
1403
+ id: pulumi.Input[str],
1404
+ opts: Optional[pulumi.ResourceOptions] = None,
1405
+ config: Optional[pulumi.Input[Union['JobTemplateConfigArgs', 'JobTemplateConfigArgsDict']]] = None,
1406
+ effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
1407
+ job_template_id: Optional[pulumi.Input[str]] = None,
1408
+ labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
1409
+ location: Optional[pulumi.Input[str]] = None,
1410
+ name: Optional[pulumi.Input[str]] = None,
1411
+ project: Optional[pulumi.Input[str]] = None,
1412
+ pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None) -> 'JobTemplate':
1413
+ """
1414
+ Get an existing JobTemplate resource's state with the given name, id, and optional extra
1415
+ properties used to qualify the lookup.
1416
+
1417
+ :param str resource_name: The unique name of the resulting resource.
1418
+ :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
1419
+ :param pulumi.ResourceOptions opts: Options for the resource.
1420
+ :param pulumi.Input[Union['JobTemplateConfigArgs', 'JobTemplateConfigArgsDict']] config: The configuration for this template.
1421
+ Structure is documented below.
1422
+ :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
1423
+ :param pulumi.Input[str] job_template_id: ID to use for the Transcoding job template.
1424
+ :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: The labels associated with this job template. You can use these to organize and group your job templates.
1425
+
1426
+ **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
1427
+ Please refer to the field `effective_labels` for all of the labels present on the resource.
1428
+ :param pulumi.Input[str] location: The location of the transcoding job template resource.
1429
+
1430
+
1431
+ - - -
1432
+ :param pulumi.Input[str] name: The resource name of the job template.
1433
+ :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
1434
+ If it is not provided, the provider project is used.
1435
+ :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource
1436
+ and default labels configured on the provider.
1437
+ """
1438
+ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))
1439
+
1440
+ __props__ = _JobTemplateState.__new__(_JobTemplateState)
1441
+
1442
+ __props__.__dict__["config"] = config
1443
+ __props__.__dict__["effective_labels"] = effective_labels
1444
+ __props__.__dict__["job_template_id"] = job_template_id
1445
+ __props__.__dict__["labels"] = labels
1446
+ __props__.__dict__["location"] = location
1447
+ __props__.__dict__["name"] = name
1448
+ __props__.__dict__["project"] = project
1449
+ __props__.__dict__["pulumi_labels"] = pulumi_labels
1450
+ return JobTemplate(resource_name, opts=opts, __props__=__props__)
1451
+
1452
+ @property
1453
+ @pulumi.getter
1454
+ def config(self) -> pulumi.Output['outputs.JobTemplateConfig']:
1455
+ """
1456
+ The configuration for this template.
1457
+ Structure is documented below.
1458
+ """
1459
+ return pulumi.get(self, "config")
1460
+
1461
+ @property
1462
+ @pulumi.getter(name="effectiveLabels")
1463
+ def effective_labels(self) -> pulumi.Output[Mapping[str, str]]:
1464
+ """
1465
+ All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
1466
+ """
1467
+ return pulumi.get(self, "effective_labels")
1468
+
1469
+ @property
1470
+ @pulumi.getter(name="jobTemplateId")
1471
+ def job_template_id(self) -> pulumi.Output[str]:
1472
+ """
1473
+ ID to use for the Transcoding job template.
1474
+ """
1475
+ return pulumi.get(self, "job_template_id")
1476
+
1477
+ @property
1478
+ @pulumi.getter
1479
+ def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]:
1480
+ """
1481
+ The labels associated with this job template. You can use these to organize and group your job templates.
1482
+
1483
+ **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
1484
+ Please refer to the field `effective_labels` for all of the labels present on the resource.
1485
+ """
1486
+ return pulumi.get(self, "labels")
1487
+
1488
+ @property
1489
+ @pulumi.getter
1490
+ def location(self) -> pulumi.Output[str]:
1491
+ """
1492
+ The location of the transcoding job template resource.
1493
+
1494
+
1495
+ - - -
1496
+ """
1497
+ return pulumi.get(self, "location")
1498
+
1499
+ @property
1500
+ @pulumi.getter
1501
+ def name(self) -> pulumi.Output[str]:
1502
+ """
1503
+ The resource name of the job template.
1504
+ """
1505
+ return pulumi.get(self, "name")
1506
+
1507
+ @property
1508
+ @pulumi.getter
1509
+ def project(self) -> pulumi.Output[str]:
1510
+ """
1511
+ The ID of the project in which the resource belongs.
1512
+ If it is not provided, the provider project is used.
1513
+ """
1514
+ return pulumi.get(self, "project")
1515
+
1516
+ @property
1517
+ @pulumi.getter(name="pulumiLabels")
1518
+ def pulumi_labels(self) -> pulumi.Output[Mapping[str, str]]:
1519
+ """
1520
+ The combination of labels configured directly on the resource
1521
+ and default labels configured on the provider.
1522
+ """
1523
+ return pulumi.get(self, "pulumi_labels")
1524
+