Skip to content
This repository has been archived by the owner on Oct 12, 2023. It is now read-only.

Commit

Permalink
Core: Support cloud database infrastructure and AWS RDS (#1318)
Browse files Browse the repository at this point in the history
* Add config for managed cloud database

* Add the function to determine whether to create or use a cloud database;

* Support managed cloud database
  • Loading branch information
haojinIntel committed Apr 18, 2023
1 parent cb24436 commit cf71029
Show file tree
Hide file tree
Showing 12 changed files with 308 additions and 17 deletions.
16 changes: 16 additions & 0 deletions python/cloudtik/core/_private/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2654,6 +2654,22 @@ def _is_use_managed_cloud_storage(provider_config: Dict[str, Any]) -> bool:
return provider_config.get("use_managed_cloud_storage", False)


def is_managed_cloud_database(workspace_config: Dict[str, Any]) -> bool:
return _is_managed_cloud_database(workspace_config["provider"])


def _is_managed_cloud_database(provider_config: Dict[str, Any]) -> bool:
return provider_config.get("managed_cloud_database", False)


def is_use_managed_cloud_database(config: Dict[str, Any]) -> bool:
return _is_use_managed_cloud_database(config["provider"])


def _is_use_managed_cloud_database(provider_config: Dict[str, Any]) -> bool:
return provider_config.get("use_managed_cloud_database", False)


def is_worker_role_for_cloud_storage(config: Dict[str, Any]) -> bool:
return config["provider"].get("worker_role_for_cloud_storage", True)

Expand Down
21 changes: 16 additions & 5 deletions python/cloudtik/core/_private/workspace/workspace_operator.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from pipes import quote


from cloudtik.core._private.utils import validate_workspace_config, prepare_workspace_config, is_managed_cloud_storage, \
from cloudtik.core._private.utils import validate_workspace_config, prepare_workspace_config, is_managed_cloud_database, is_managed_cloud_storage, \
print_dict_info, decrypt_config, encrypt_config, NODE_INFO_NODE_IP
from cloudtik.core._private.providers import _get_workspace_provider_cls, _get_workspace_provider, \
_WORKSPACE_PROVIDERS, _PROVIDER_PRETTY_NAMES, _get_node_provider_cls
Expand Down Expand Up @@ -88,15 +88,17 @@ def _update_workspace_firewalls(config: Dict[str, Any]):
def delete_workspace(
config_file: str, yes: bool,
override_workspace_name: Optional[str] = None,
delete_managed_storage: bool = False):
delete_managed_storage: bool = False,
delete_managed_database: bool = False):
"""Destroys the workspace and associated Cloud resources."""
config = _load_workspace_config(config_file, override_workspace_name)
_delete_workspace(config, yes, delete_managed_storage)
_delete_workspace(config, yes, delete_managed_storage, delete_managed_database)


def _delete_workspace(config: Dict[str, Any],
yes: bool = False,
delete_managed_storage: bool = False):
delete_managed_storage: bool = False,
delete_managed_database: bool = False):
workspace_name = config["workspace_name"]
provider = _get_workspace_provider(config["provider"], workspace_name)
existence = provider.check_workspace_existence(config)
Expand All @@ -122,9 +124,18 @@ def _delete_workspace(config: Dict[str, Any],
cli_logger.print(
cf.bold("The managed cloud storage associated with this workspace will not be deleted."))

managed_cloud_database = is_managed_cloud_database(config)
if managed_cloud_database:
if delete_managed_database:
cli_logger.warning("WARNING: The managed cloud database associated with this workspace "
"and the data in it will all be deleted!")
else:
cli_logger.print(
cf.bold("The managed cloud database associated with this workspace will not be deleted."))

cli_logger.confirm(yes, "Are you sure that you want to delete workspace {}?",
config["workspace_name"], _abort=True)
provider.delete_workspace(config, delete_managed_storage)
provider.delete_workspace(config, delete_managed_storage, delete_managed_database)


def create_workspace(
Expand Down
5 changes: 5 additions & 0 deletions python/cloudtik/core/config-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,11 @@
"description": "Whether to assign worker with the role to access cloud storage.",
"default": true
},
"use_managed_cloud_database": {
"type": "boolean",
"description": "Whether to use managed cloud database of workspace.",
"default": false
},
"public_ip_bandwidth": {
"type": "integer",
"description": "Bandwidth of public ip in MB for node.",
Expand Down
5 changes: 5 additions & 0 deletions python/cloudtik/core/workspace-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,11 @@
"description": "Whether to create managed cloud storage of workspace.",
"default": true
},
"managed_cloud_database": {
"type": "boolean",
"description": "Whether to create managed cloud database of workspace.",
"default": false
},
"allowed_ssh_sources": {
"type": "array",
"items": {
Expand Down
5 changes: 4 additions & 1 deletion python/cloudtik/core/workspace_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ class Existence(Enum):
COMPLETED = 2
IN_COMPLETED = 3
STORAGE_ONLY = 4
DATABASE_ONLY = 5
STORAGE_AND_DATABASE_ONLY = 6


class WorkspaceProvider:
Expand All @@ -38,7 +40,8 @@ def create_workspace(self, config: Dict[str, Any]):
pass

def delete_workspace(self, config: Dict[str, Any],
delete_managed_storage: bool = False):
delete_managed_storage: bool = False,
delete_managed_database:bool = False):
"""Delete all the resources created for the workspace.
Managed cloud storage is not deleted by default unless delete_managed_storage is specified.
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ def create_workspace(self, config):
create_azure_workspace(config)

def delete_workspace(self, config,
delete_managed_storage: bool = False):
delete_managed_storage: bool = False,
delete_managed_database:bool = False):
delete_azure_workspace(config, delete_managed_storage)

def update_workspace_firewalls(self, config):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ def create_workspace(self, config):
create_kubernetes_workspace(config)

def delete_workspace(self, config,
delete_managed_storage: bool = False):
delete_managed_storage: bool = False,
delete_managed_database:bool = False):
delete_kubernetes_workspace(config, delete_managed_storage)

def update_workspace_firewalls(self, config):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ def create_workspace(self, config):
create_aliyun_workspace(config)

def delete_workspace(self, config,
delete_managed_storage: bool = False):
delete_managed_storage: bool = False,
delete_managed_database:bool = False):
delete_aliyun_workspace(config, delete_managed_storage)

def update_workspace_firewalls(self, config):
Expand Down
Loading

0 comments on commit cf71029

Please sign in to comment.