pulumi/sdk/python/lib/pulumi/provider/provider.py

138 lines
4.1 KiB
Python

# Copyright 2016-2021, Pulumi Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from typing import Optional, Sequence, Mapping, Any
from pulumi import ResourceOptions, Input, Inputs
class ConstructResult:
"""ConstructResult represents the results of a call to
`Provider.construct`.
"""
urn: Input[str]
"""The URN of the constructed resource."""
state: Inputs
"""Any state that was computed during construction."""
def __init__(self, urn: Input[str], state: Inputs) -> None:
self.urn = urn
self.state = state
class CheckFailure:
"""CheckFailure represents a single failure in the results of a call to `Provider.call`."""
property: str
"""The property that failed validation."""
reason: str
"""The reason that the property failed validation."""
def __init__(
self, property: str, reason: str # pylint: disable=redefined-builtin
) -> None:
self.property = property
self.reason = reason
class CallResult:
"""CallResult represents the results of a call to `Provider.call`."""
outputs: Inputs
"""The outputs returned by the invoked function, if any."""
failures: Optional[Sequence[CheckFailure]]
"""Any validation failures that occurred."""
def __init__(
self, outputs: Inputs, failures: Optional[Sequence[CheckFailure]] = None
) -> None:
self.outputs = outputs
self.failures = failures
class InvokeResult:
"""InvokeResult represents the results of a call to `Provider.invoke`."""
outputs: Mapping[str, Any]
"""The outputs returned by the invoked function, if any."""
failures: Optional[Sequence[CheckFailure]]
"""Any validation failures that occurred."""
def __init__(
self,
outputs: Mapping[str, Any],
failures: Optional[Sequence[CheckFailure]] = None,
) -> None:
self.outputs = outputs
self.failures = failures
class Provider:
"""Provider represents an object that implements the resources and
functions for a particular Pulumi package.
"""
version: str
schema: Optional[str]
def __init__(self, version: str, schema: Optional[str] = None) -> None:
"""
:param str version: The version of the provider. Must be valid semver.
:param Optional[str] schema: The JSON-encoded schema for this provider's package.
"""
self.version = version
self.schema = schema
def construct(
self,
name: str,
resource_type: str,
inputs: Inputs,
options: Optional[ResourceOptions] = None,
) -> ConstructResult:
"""Construct creates a new component resource.
:param str name: The name of the resource to create.
:param str resource_type: The type of the resource to create.
:param Inputs inputs: The inputs to the resource.
:param Optional[ResourceOptions] options: The options for the resource.
"""
raise Exception("Subclass of Provider must implement 'construct'")
def call(self, token: str, args: Inputs) -> CallResult:
"""Call calls the indicated function.
:param str token: The token of the function to call.
:param Inputs args: The inputs to the function.
"""
raise Exception(f"Unknown method {token}")
def invoke(self, token: str, args: Mapping[str, Any]) -> InvokeResult:
"""Invoke calls the indicated function.
:param str token: The token of the function to call.
:param Inputs args: The inputs to the function.
"""
raise Exception(f"Unknown function {token}")