156 lines
5.6 KiB
Python
156 lines
5.6 KiB
Python
# Copyright 2016-2022, 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 List, Optional
|
||
|
||
from pulumi.automation._cmd import OnOutput
|
||
from pulumi.automation._output import OutputMap
|
||
from pulumi.automation._stack import (
|
||
DestroyResult,
|
||
OnEvent,
|
||
PreviewResult,
|
||
RefreshResult,
|
||
Stack,
|
||
UpResult,
|
||
UpdateSummary,
|
||
)
|
||
from pulumi.automation._workspace import Deployment
|
||
|
||
|
||
class RemoteStack:
|
||
"""
|
||
RemoteStack is an isolated, independencly configurable instance of a Pulumi program that is
|
||
operated on remotely (up/preview/refresh/destroy).
|
||
"""
|
||
|
||
__stack: Stack
|
||
|
||
@property
|
||
def name(self) -> str:
|
||
return self.__stack.name
|
||
|
||
def __init__(self, stack: Stack):
|
||
self.__stack = stack
|
||
|
||
def up(
|
||
self,
|
||
on_output: Optional[OnOutput] = None,
|
||
on_event: Optional[OnEvent] = None,
|
||
) -> UpResult:
|
||
"""
|
||
Creates or updates the resources in a stack by executing the program in the Workspace.
|
||
https://www.pulumi.com/docs/cli/commands/pulumi_up/
|
||
|
||
:param on_output: A function to process the stdout stream.
|
||
:param on_event: A function to process structured events from the Pulumi event stream.
|
||
:returns: UpResult
|
||
"""
|
||
return self.__stack.up(on_output=on_output, on_event=on_event)
|
||
|
||
def preview(
|
||
self,
|
||
on_output: Optional[OnOutput] = None,
|
||
on_event: Optional[OnEvent] = None,
|
||
) -> PreviewResult:
|
||
"""
|
||
Performs a dry-run update to a stack, returning pending changes.
|
||
https://www.pulumi.com/docs/cli/commands/pulumi_preview/
|
||
|
||
:param on_output: A function to process the stdout stream.
|
||
:param on_event: A function to process structured events from the Pulumi event stream.
|
||
:returns: PreviewResult
|
||
"""
|
||
return self.__stack.preview(on_output=on_output, on_event=on_event)
|
||
|
||
def refresh(
|
||
self,
|
||
on_output: Optional[OnOutput] = None,
|
||
on_event: Optional[OnEvent] = None,
|
||
) -> RefreshResult:
|
||
"""
|
||
Compares the current stack’s resource state with the state known to exist in the actual
|
||
cloud provider. Any such changes are adopted into the current stack.
|
||
|
||
:param on_output: A function to process the stdout stream.
|
||
:param on_event: A function to process structured events from the Pulumi event stream.
|
||
:returns: RefreshResult
|
||
"""
|
||
return self.__stack.refresh(on_output=on_output, on_event=on_event)
|
||
|
||
def destroy(
|
||
self,
|
||
on_output: Optional[OnOutput] = None,
|
||
on_event: Optional[OnEvent] = None,
|
||
) -> DestroyResult:
|
||
"""
|
||
Destroy deletes all resources in a stack, leaving all history and configuration intact.
|
||
|
||
:param on_output: A function to process the stdout stream.
|
||
:param on_event: A function to process structured events from the Pulumi event stream.
|
||
:returns: DestroyResult
|
||
"""
|
||
return self.__stack.destroy(on_output=on_output, on_event=on_event)
|
||
|
||
def outputs(self) -> OutputMap:
|
||
"""
|
||
Gets the current set of Stack outputs from the last Stack.up().
|
||
|
||
:returns: OutputMap
|
||
"""
|
||
return self.__stack.outputs()
|
||
|
||
def history(
|
||
self,
|
||
page_size: Optional[int] = None,
|
||
page: Optional[int] = None,
|
||
) -> List[UpdateSummary]:
|
||
"""
|
||
Returns a list summarizing all previous and current results from Stack lifecycle operations
|
||
(up/preview/refresh/destroy).
|
||
|
||
:param page_size: Paginate history entries (used in combination with page), defaults to all.
|
||
:param page: Paginate history entries (used in combination with page_size), defaults to all.
|
||
:param show_secrets: Show config secrets when they appear in history.
|
||
|
||
:returns: List[UpdateSummary]
|
||
"""
|
||
# Note: Find a way to allow show_secrets as an option that doesn't require loading the project.
|
||
return self.__stack.history(page_size=page_size, page=page, show_secrets=False)
|
||
|
||
def cancel(self) -> None:
|
||
"""
|
||
Cancel stops a stack's currently running update. It returns an error if no update is currently running.
|
||
Note that this operation is _very dangerous_, and may leave the stack in an inconsistent state
|
||
if a resource operation was pending when the update was canceled.
|
||
"""
|
||
self.__stack.cancel()
|
||
|
||
def export_stack(self) -> Deployment:
|
||
"""
|
||
export_stack exports the deployment state of the stack.
|
||
This can be combined with Stack.import_state to edit a stack's state (such as recovery from failed deployments).
|
||
|
||
:returns: Deployment
|
||
"""
|
||
return self.__stack.export_stack()
|
||
|
||
def import_stack(self, state: Deployment) -> None:
|
||
"""
|
||
import_stack imports the specified deployment state into a pre-existing stack.
|
||
This can be combined with Stack.export_state to edit a stack's state (such as recovery from failed deployments).
|
||
|
||
:param state: The deployment state to import.
|
||
"""
|
||
self.__stack.import_stack(state=state)
|