pulumi 3.216.0a1768343796__py3-none-any.whl → 3.217.0__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.
pulumi/__init__.py CHANGED
@@ -60,6 +60,7 @@ from .metadata import (
60
60
  get_project,
61
61
  get_stack,
62
62
  get_root_directory,
63
+ require_pulumi_version,
63
64
  )
64
65
 
65
66
  from .resource import (
@@ -161,6 +162,7 @@ __all__ = [
161
162
  "get_project",
162
163
  "get_stack",
163
164
  "get_root_directory",
165
+ "require_pulumi_version",
164
166
  # resource
165
167
  "Alias",
166
168
  "Resource",
pulumi/_version.py CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  from semver import VersionInfo
16
16
 
17
- _VERSION = "3.216.0"
17
+ _VERSION = "3.217.0"
18
18
 
19
19
  version = VersionInfo.parse(_VERSION)
20
20
  """Version is the Pulumi SDK's release version."""
@@ -35,6 +35,12 @@ class LanguageServer(LanguageRuntimeServicer):
35
35
  def __init__(self, program: PulumiFn) -> None:
36
36
  self.program = program
37
37
 
38
+ def About(self, request, context):
39
+ return language_pb2.AboutResponse(
40
+ executable=sys.executable,
41
+ version=f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}",
42
+ )
43
+
38
44
  def GetRequiredPlugins(self, request, context):
39
45
  return language_pb2.GetRequiredPluginsResponse()
40
46
 
@@ -219,9 +219,19 @@ class DynamicResourceProviderServicer(ResourceProviderServicer):
219
219
 
220
220
  loop = asyncio.new_event_loop()
221
221
  outs_proto = loop.run_until_complete(rpc.serialize_properties(outs, {}))
222
- loop.close()
223
222
 
224
223
  fields = {"id": result.id, "properties": outs_proto}
224
+
225
+ # If the provider returned explicit inputs, use them for subsequent diffs.
226
+ # This allows the provider to update inputs to match refreshed outputs.
227
+ if result.inputs is not None:
228
+ inputs = result.inputs.copy()
229
+ inputs[PROVIDER_KEY] = props[PROVIDER_KEY]
230
+ inputs_proto = loop.run_until_complete(rpc.serialize_properties(inputs, {}))
231
+ fields["inputs"] = inputs_proto
232
+
233
+ loop.close()
234
+
225
235
  return proto.ReadResponse(**fields)
226
236
 
227
237
  def __init__(self):
pulumi/dynamic/dynamic.py CHANGED
@@ -167,13 +167,22 @@ class ReadResult:
167
167
  The current property state read from the live environment.
168
168
  """
169
169
 
170
+ inputs: Optional[dict[str, Any]]
171
+ """
172
+ The input properties to use for subsequent diffs. If not provided, inputs will remain unchanged.
173
+ This is useful when a refresh operation detects drift and wants to update the inputs to match
174
+ the current outputs, ensuring subsequent diffs compare against the refreshed state.
175
+ """
176
+
170
177
  def __init__(
171
178
  self,
172
179
  id_: Optional[str] = None,
173
180
  outs: Optional[dict[str, Any]] = None,
181
+ inputs: Optional[dict[str, Any]] = None,
174
182
  ) -> None:
175
183
  self.id = id_
176
184
  self.outs = outs
185
+ self.inputs = inputs
177
186
 
178
187
 
179
188
  class UpdateResult:
pulumi/metadata.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2018, Pulumi Corporation.
1
+ # Copyright 2016-2026, Pulumi Corporation.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -41,3 +41,17 @@ def get_root_directory() -> str:
41
41
  Returns the current root directory.
42
42
  """
43
43
  return settings.get_root_directory()
44
+
45
+
46
+ def require_pulumi_version(rg: str) -> None:
47
+ """
48
+ Checks if the engine we are connected to is compatible with the passed in version range. If the version is not
49
+ compatible with the specified range, an exception is raised.
50
+
51
+ :param str rg: The range to check. The supported syntax for the range is that of
52
+ https://pkg.go.dev/github.com/blang/semver#ParseRange. For example ">=3.0.0", or "!3.1.2". Ranges can be
53
+ AND-ed together by concatenating with spaces ">=3.5.0 !3.7.7", meaning greater-or-equal to 3.5.0 and not
54
+ exactly 3.7.7. Ranges can be OR-ed with the `||` operator: "<3.4.0 || >3.8.0", meaning less-than 3.4.0 or
55
+ greater-than 3.8.0.
56
+ """
57
+ settings.require_pulumi_version(rg)
pulumi/provider/server.py CHANGED
@@ -17,7 +17,8 @@ instance as a gRPC server so that it can be used as a Pulumi plugin.
17
17
 
18
18
  """
19
19
 
20
- from typing import Optional, TypeVar, Any, cast
20
+ from typing import Optional, TypeVar, Any, cast, Union
21
+ import types
21
22
  import argparse
22
23
  import asyncio
23
24
  import sys
@@ -41,6 +42,7 @@ from pulumi.runtime.proto import (
41
42
  ResourceProviderServicer,
42
43
  status_pb2,
43
44
  errors_pb2,
45
+ alias_pb2,
44
46
  )
45
47
  from pulumi.runtime.resource_hooks import _binding_from_proto
46
48
  from pulumi.runtime.stack import wait_for_rpcs
@@ -237,6 +239,38 @@ class ProviderServicer(ResourceProviderServicer):
237
239
  is_secret=_as_future(is_secret),
238
240
  )
239
241
 
242
+ @staticmethod
243
+ def _alias_from_proto(alias: alias_pb2.Alias) -> Union[str | pulumi.Alias]:
244
+ if alias.urn:
245
+ return alias.urn
246
+ else:
247
+ spec = alias.spec
248
+ name: Union[str, types.EllipsisType] = ...
249
+ resource_type: Union[str, types.EllipsisType] = ...
250
+ parent_urn: Union[str, types.EllipsisType] = ...
251
+ stack: Union[str, types.EllipsisType] = ...
252
+ project: Union[str, types.EllipsisType] = ...
253
+
254
+ if spec.name:
255
+ name = spec.name
256
+ if spec.type:
257
+ resource_type = spec.type
258
+ if spec.parentUrn:
259
+ parent_urn = spec.parentUrn
260
+ if spec.stack:
261
+ stack = spec.stack
262
+ if spec.project:
263
+ project = spec.project
264
+ no_parent = spec.noParent
265
+
266
+ return pulumi.Alias(
267
+ name=name, # type: ignore
268
+ type_=resource_type, # type: ignore
269
+ parent=None if no_parent else parent_urn, # type: ignore
270
+ stack=stack, # type: ignore
271
+ project=project, # type: ignore
272
+ )
273
+
240
274
  @staticmethod
241
275
  def _construct_options(request: proto.ConstructRequest) -> pulumi.ResourceOptions:
242
276
  parent = None
@@ -264,7 +298,7 @@ class ProviderServicer(ResourceProviderServicer):
264
298
  resource_hooks = _binding_from_proto(request.resource_hooks)
265
299
 
266
300
  return pulumi.ResourceOptions(
267
- aliases=list(request.aliases),
301
+ aliases=[ProviderServicer._alias_from_proto(a) for a in request.aliases],
268
302
  depends_on=[DependencyResource(urn) for urn in request.dependencies],
269
303
  protect=request.protect,
270
304
  providers={
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2018, Pulumi Corporation.
1
+ # Copyright 2016-2026, Pulumi Corporation.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -41,6 +41,7 @@ from .settings import (
41
41
  reset_options,
42
42
  get_root_resource,
43
43
  get_root_directory,
44
+ require_pulumi_version,
44
45
  )
45
46
 
46
47
  from .stack import (
@@ -94,6 +95,7 @@ __all__ = [
94
95
  "reset_options",
95
96
  "get_root_resource",
96
97
  "get_root_directory",
98
+ "require_pulumi_version",
97
99
  # stack
98
100
  "run_in_stack",
99
101
  "register_stack_transformation",
@@ -15,7 +15,7 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
15
15
  from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
16
16
 
17
17
 
18
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13pulumi/engine.proto\x12\tpulumirpc\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"y\n\nLogRequest\x12(\n\x08severity\x18\x01 \x01(\x0e\x32\x16.pulumirpc.LogSeverity\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x0b\n\x03urn\x18\x03 \x01(\t\x12\x10\n\x08streamId\x18\x04 \x01(\x05\x12\x11\n\tephemeral\x18\x05 \x01(\x08\"\x18\n\x16GetRootResourceRequest\"&\n\x17GetRootResourceResponse\x12\x0b\n\x03urn\x18\x01 \x01(\t\"%\n\x16SetRootResourceRequest\x12\x0b\n\x03urn\x18\x01 \x01(\t\"\x19\n\x17SetRootResourceResponse\"Q\n\x15StartDebuggingRequest\x12\'\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0f\n\x07message\x18\x02 \x01(\t\"9\n\x19\x43heckPulumiVersionRequest\x12\x1c\n\x14pulumi_version_range\x18\x01 \x01(\t\"\x1c\n\x1a\x43heckPulumiVersionResponse*:\n\x0bLogSeverity\x12\t\n\x05\x44\x45\x42UG\x10\x00\x12\x08\n\x04INFO\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\t\n\x05\x45RROR\x10\x03\x32\xab\x03\n\x06\x45ngine\x12\x36\n\x03Log\x12\x15.pulumirpc.LogRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Z\n\x0fGetRootResource\x12!.pulumirpc.GetRootResourceRequest\x1a\".pulumirpc.GetRootResourceResponse\"\x00\x12Z\n\x0fSetRootResource\x12!.pulumirpc.SetRootResourceRequest\x1a\".pulumirpc.SetRootResourceResponse\"\x00\x12L\n\x0eStartDebugging\x12 .pulumirpc.StartDebuggingRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x12\x43heckPulumiVersion\x12$.pulumirpc.CheckPulumiVersionRequest\x1a%.pulumirpc.CheckPulumiVersionResponse\"\x00\x42\x34Z2github.com/pulumi/pulumi/sdk/v3/proto/go;pulumirpcb\x06proto3')
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13pulumi/engine.proto\x12\tpulumirpc\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"y\n\nLogRequest\x12(\n\x08severity\x18\x01 \x01(\x0e\x32\x16.pulumirpc.LogSeverity\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x0b\n\x03urn\x18\x03 \x01(\t\x12\x10\n\x08streamId\x18\x04 \x01(\x05\x12\x11\n\tephemeral\x18\x05 \x01(\x08\"\x18\n\x16GetRootResourceRequest\"&\n\x17GetRootResourceResponse\x12\x0b\n\x03urn\x18\x01 \x01(\t\"%\n\x16SetRootResourceRequest\x12\x0b\n\x03urn\x18\x01 \x01(\t\"\x19\n\x17SetRootResourceResponse\"Q\n\x15StartDebuggingRequest\x12\'\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0f\n\x07message\x18\x02 \x01(\t\";\n\x1bRequirePulumiVersionRequest\x12\x1c\n\x14pulumi_version_range\x18\x01 \x01(\t\"\x1e\n\x1cRequirePulumiVersionResponse*:\n\x0bLogSeverity\x12\t\n\x05\x44\x45\x42UG\x10\x00\x12\x08\n\x04INFO\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\t\n\x05\x45RROR\x10\x03\x32\xb1\x03\n\x06\x45ngine\x12\x36\n\x03Log\x12\x15.pulumirpc.LogRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Z\n\x0fGetRootResource\x12!.pulumirpc.GetRootResourceRequest\x1a\".pulumirpc.GetRootResourceResponse\"\x00\x12Z\n\x0fSetRootResource\x12!.pulumirpc.SetRootResourceRequest\x1a\".pulumirpc.SetRootResourceResponse\"\x00\x12L\n\x0eStartDebugging\x12 .pulumirpc.StartDebuggingRequest\x1a\x16.google.protobuf.Empty\"\x00\x12i\n\x14RequirePulumiVersion\x12&.pulumirpc.RequirePulumiVersionRequest\x1a\'.pulumirpc.RequirePulumiVersionResponse\"\x00\x42\x34Z2github.com/pulumi/pulumi/sdk/v3/proto/go;pulumirpcb\x06proto3')
19
19
 
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
21
21
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'pulumi.engine_pb2', globals())
@@ -23,8 +23,8 @@ if _descriptor._USE_C_DESCRIPTORS == False:
23
23
 
24
24
  DESCRIPTOR._options = None
25
25
  DESCRIPTOR._serialized_options = b'Z2github.com/pulumi/pulumi/sdk/v3/proto/go;pulumirpc'
26
- _LOGSEVERITY._serialized_start=520
27
- _LOGSEVERITY._serialized_end=578
26
+ _LOGSEVERITY._serialized_start=524
27
+ _LOGSEVERITY._serialized_end=582
28
28
  _LOGREQUEST._serialized_start=93
29
29
  _LOGREQUEST._serialized_end=214
30
30
  _GETROOTRESOURCEREQUEST._serialized_start=216
@@ -37,10 +37,10 @@ if _descriptor._USE_C_DESCRIPTORS == False:
37
37
  _SETROOTRESOURCERESPONSE._serialized_end=346
38
38
  _STARTDEBUGGINGREQUEST._serialized_start=348
39
39
  _STARTDEBUGGINGREQUEST._serialized_end=429
40
- _CHECKPULUMIVERSIONREQUEST._serialized_start=431
41
- _CHECKPULUMIVERSIONREQUEST._serialized_end=488
42
- _CHECKPULUMIVERSIONRESPONSE._serialized_start=490
43
- _CHECKPULUMIVERSIONRESPONSE._serialized_end=518
44
- _ENGINE._serialized_start=581
45
- _ENGINE._serialized_end=1008
40
+ _REQUIREPULUMIVERSIONREQUEST._serialized_start=431
41
+ _REQUIREPULUMIVERSIONREQUEST._serialized_end=490
42
+ _REQUIREPULUMIVERSIONRESPONSE._serialized_start=492
43
+ _REQUIREPULUMIVERSIONRESPONSE._serialized_end=522
44
+ _ENGINE._serialized_start=585
45
+ _ENGINE._serialized_end=1018
46
46
  # @@protoc_insertion_point(module_scope)
@@ -178,7 +178,7 @@ class StartDebuggingRequest(google.protobuf.message.Message):
178
178
  global___StartDebuggingRequest = StartDebuggingRequest
179
179
 
180
180
  @typing.final
181
- class CheckPulumiVersionRequest(google.protobuf.message.Message):
181
+ class RequirePulumiVersionRequest(google.protobuf.message.Message):
182
182
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
183
183
 
184
184
  PULUMI_VERSION_RANGE_FIELD_NUMBER: builtins.int
@@ -196,10 +196,10 @@ class CheckPulumiVersionRequest(google.protobuf.message.Message):
196
196
  ) -> None: ...
197
197
  def ClearField(self, field_name: typing.Literal["pulumi_version_range", b"pulumi_version_range"]) -> None: ...
198
198
 
199
- global___CheckPulumiVersionRequest = CheckPulumiVersionRequest
199
+ global___RequirePulumiVersionRequest = RequirePulumiVersionRequest
200
200
 
201
201
  @typing.final
202
- class CheckPulumiVersionResponse(google.protobuf.message.Message):
202
+ class RequirePulumiVersionResponse(google.protobuf.message.Message):
203
203
  """empty"""
204
204
 
205
205
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
@@ -208,4 +208,4 @@ class CheckPulumiVersionResponse(google.protobuf.message.Message):
208
208
  self,
209
209
  ) -> None: ...
210
210
 
211
- global___CheckPulumiVersionResponse = CheckPulumiVersionResponse
211
+ global___RequirePulumiVersionResponse = RequirePulumiVersionResponse
@@ -38,10 +38,10 @@ class EngineStub(object):
38
38
  request_serializer=pulumi_dot_engine__pb2.StartDebuggingRequest.SerializeToString,
39
39
  response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
40
40
  )
41
- self.CheckPulumiVersion = channel.unary_unary(
42
- '/pulumirpc.Engine/CheckPulumiVersion',
43
- request_serializer=pulumi_dot_engine__pb2.CheckPulumiVersionRequest.SerializeToString,
44
- response_deserializer=pulumi_dot_engine__pb2.CheckPulumiVersionResponse.FromString,
41
+ self.RequirePulumiVersion = channel.unary_unary(
42
+ '/pulumirpc.Engine/RequirePulumiVersion',
43
+ request_serializer=pulumi_dot_engine__pb2.RequirePulumiVersionRequest.SerializeToString,
44
+ response_deserializer=pulumi_dot_engine__pb2.RequirePulumiVersionResponse.FromString,
45
45
  )
46
46
 
47
47
 
@@ -81,8 +81,8 @@ class EngineServicer(object):
81
81
  context.set_details('Method not implemented!')
82
82
  raise NotImplementedError('Method not implemented!')
83
83
 
84
- def CheckPulumiVersion(self, request, context):
85
- """CheckPulumiVersion checks that the version of the engine satisfies the passed in range.
84
+ def RequirePulumiVersion(self, request, context):
85
+ """RequirePulumiVersion checks that the version of the engine satisfies the passed in range.
86
86
  """
87
87
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
88
88
  context.set_details('Method not implemented!')
@@ -111,10 +111,10 @@ def add_EngineServicer_to_server(servicer, server):
111
111
  request_deserializer=pulumi_dot_engine__pb2.StartDebuggingRequest.FromString,
112
112
  response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
113
113
  ),
114
- 'CheckPulumiVersion': grpc.unary_unary_rpc_method_handler(
115
- servicer.CheckPulumiVersion,
116
- request_deserializer=pulumi_dot_engine__pb2.CheckPulumiVersionRequest.FromString,
117
- response_serializer=pulumi_dot_engine__pb2.CheckPulumiVersionResponse.SerializeToString,
114
+ 'RequirePulumiVersion': grpc.unary_unary_rpc_method_handler(
115
+ servicer.RequirePulumiVersion,
116
+ request_deserializer=pulumi_dot_engine__pb2.RequirePulumiVersionRequest.FromString,
117
+ response_serializer=pulumi_dot_engine__pb2.RequirePulumiVersionResponse.SerializeToString,
118
118
  ),
119
119
  }
120
120
  generic_handler = grpc.method_handlers_generic_handler(
@@ -198,7 +198,7 @@ class Engine(object):
198
198
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
199
199
 
200
200
  @staticmethod
201
- def CheckPulumiVersion(request,
201
+ def RequirePulumiVersion(request,
202
202
  target,
203
203
  options=(),
204
204
  channel_credentials=None,
@@ -208,8 +208,8 @@ class Engine(object):
208
208
  wait_for_ready=None,
209
209
  timeout=None,
210
210
  metadata=None):
211
- return grpc.experimental.unary_unary(request, target, '/pulumirpc.Engine/CheckPulumiVersion',
212
- pulumi_dot_engine__pb2.CheckPulumiVersionRequest.SerializeToString,
213
- pulumi_dot_engine__pb2.CheckPulumiVersionResponse.FromString,
211
+ return grpc.experimental.unary_unary(request, target, '/pulumirpc.Engine/RequirePulumiVersion',
212
+ pulumi_dot_engine__pb2.RequirePulumiVersionRequest.SerializeToString,
213
+ pulumi_dot_engine__pb2.RequirePulumiVersionResponse.FromString,
214
214
  options, channel_credentials,
215
215
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -68,11 +68,11 @@ class EngineStub:
68
68
  should notify the user of how to connect to the debugger.
69
69
  """
70
70
 
71
- CheckPulumiVersion: grpc.UnaryUnaryMultiCallable[
72
- pulumi.engine_pb2.CheckPulumiVersionRequest,
73
- pulumi.engine_pb2.CheckPulumiVersionResponse,
71
+ RequirePulumiVersion: grpc.UnaryUnaryMultiCallable[
72
+ pulumi.engine_pb2.RequirePulumiVersionRequest,
73
+ pulumi.engine_pb2.RequirePulumiVersionResponse,
74
74
  ]
75
- """CheckPulumiVersion checks that the version of the engine satisfies the passed in range."""
75
+ """RequirePulumiVersion checks that the version of the engine satisfies the passed in range."""
76
76
 
77
77
  class EngineAsyncStub:
78
78
  """Engine is an auxiliary service offered to language and resource provider plugins. Its main purpose today is
@@ -108,11 +108,11 @@ class EngineAsyncStub:
108
108
  should notify the user of how to connect to the debugger.
109
109
  """
110
110
 
111
- CheckPulumiVersion: grpc.aio.UnaryUnaryMultiCallable[
112
- pulumi.engine_pb2.CheckPulumiVersionRequest,
113
- pulumi.engine_pb2.CheckPulumiVersionResponse,
111
+ RequirePulumiVersion: grpc.aio.UnaryUnaryMultiCallable[
112
+ pulumi.engine_pb2.RequirePulumiVersionRequest,
113
+ pulumi.engine_pb2.RequirePulumiVersionResponse,
114
114
  ]
115
- """CheckPulumiVersion checks that the version of the engine satisfies the passed in range."""
115
+ """RequirePulumiVersion checks that the version of the engine satisfies the passed in range."""
116
116
 
117
117
  class EngineServicer(metaclass=abc.ABCMeta):
118
118
  """Engine is an auxiliary service offered to language and resource provider plugins. Its main purpose today is
@@ -157,11 +157,11 @@ class EngineServicer(metaclass=abc.ABCMeta):
157
157
  """
158
158
 
159
159
 
160
- def CheckPulumiVersion(
160
+ def RequirePulumiVersion(
161
161
  self,
162
- request: pulumi.engine_pb2.CheckPulumiVersionRequest,
162
+ request: pulumi.engine_pb2.RequirePulumiVersionRequest,
163
163
  context: _ServicerContext,
164
- ) -> typing.Union[pulumi.engine_pb2.CheckPulumiVersionResponse, collections.abc.Awaitable[pulumi.engine_pb2.CheckPulumiVersionResponse]]:
165
- """CheckPulumiVersion checks that the version of the engine satisfies the passed in range."""
164
+ ) -> typing.Union[pulumi.engine_pb2.RequirePulumiVersionResponse, collections.abc.Awaitable[pulumi.engine_pb2.RequirePulumiVersionResponse]]:
165
+ """RequirePulumiVersion checks that the version of the engine satisfies the passed in range."""
166
166
 
167
167
  def add_EngineServicer_to_server(servicer: EngineServicer, server: typing.Union[grpc.Server, grpc.aio.Server]) -> None: ...
@@ -1255,7 +1255,7 @@ class LinkRequest(google.protobuf.message.Message):
1255
1255
  @property
1256
1256
  def packages(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___LinkRequest.LinkDependency]:
1257
1257
  """Local dependencies that should be linked into the program or plugin's language specific project files.
1258
- Each dependency has a path to a a language specific artifact. This can be a binary artifact like a
1258
+ Each dependency has a path to a language specific artifact. This can be a binary artifact like a
1259
1259
  Python wheel or a tar.gz for Node.js, or a source directory.
1260
1260
  """
1261
1261
 
@@ -210,7 +210,7 @@ class LanguageRuntimeServicer(object):
210
210
 
211
211
  def RunPlugin(self, request, context):
212
212
  """`RunPlugin` is used to execute a program written in this host's language that implements a Pulumi
213
- [plugin](plugins). It it is plugins what [](pulumirpc.LanguageRuntime.Run) is to programs. Since a plugin is not
213
+ [plugin](plugins). It is to plugins what [](pulumirpc.LanguageRuntime.Run) is to programs. Since a plugin is not
214
214
  expected to terminate until instructed/for a long time, this method returns a stream of
215
215
  [](pulumirpc.RunPluginResponse) messages containing information about standard error and output, as well as the
216
216
  exit code of the plugin when it does terminate.
@@ -139,7 +139,7 @@ class LanguageRuntimeStub:
139
139
  pulumi.language_pb2.RunPluginResponse,
140
140
  ]
141
141
  """`RunPlugin` is used to execute a program written in this host's language that implements a Pulumi
142
- [plugin](plugins). It it is plugins what [](pulumirpc.LanguageRuntime.Run) is to programs. Since a plugin is not
142
+ [plugin](plugins). It is to plugins what [](pulumirpc.LanguageRuntime.Run) is to programs. Since a plugin is not
143
143
  expected to terminate until instructed/for a long time, this method returns a stream of
144
144
  [](pulumirpc.RunPluginResponse) messages containing information about standard error and output, as well as the
145
145
  exit code of the plugin when it does terminate.
@@ -309,7 +309,7 @@ class LanguageRuntimeAsyncStub:
309
309
  pulumi.language_pb2.RunPluginResponse,
310
310
  ]
311
311
  """`RunPlugin` is used to execute a program written in this host's language that implements a Pulumi
312
- [plugin](plugins). It it is plugins what [](pulumirpc.LanguageRuntime.Run) is to programs. Since a plugin is not
312
+ [plugin](plugins). It is to plugins what [](pulumirpc.LanguageRuntime.Run) is to programs. Since a plugin is not
313
313
  expected to terminate until instructed/for a long time, this method returns a stream of
314
314
  [](pulumirpc.RunPluginResponse) messages containing information about standard error and output, as well as the
315
315
  exit code of the plugin when it does terminate.
@@ -501,7 +501,7 @@ class LanguageRuntimeServicer(metaclass=abc.ABCMeta):
501
501
  context: _ServicerContext,
502
502
  ) -> typing.Union[collections.abc.Iterator[pulumi.language_pb2.RunPluginResponse], collections.abc.AsyncIterator[pulumi.language_pb2.RunPluginResponse]]:
503
503
  """`RunPlugin` is used to execute a program written in this host's language that implements a Pulumi
504
- [plugin](plugins). It it is plugins what [](pulumirpc.LanguageRuntime.Run) is to programs. Since a plugin is not
504
+ [plugin](plugins). It is to plugins what [](pulumirpc.LanguageRuntime.Run) is to programs. Since a plugin is not
505
505
  expected to terminate until instructed/for a long time, this method returns a stream of
506
506
  [](pulumirpc.RunPluginResponse) messages containing information about standard error and output, as well as the
507
507
  exit code of the plugin when it does terminate.