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

Add fly.io deployments #511

Merged
merged 7 commits into from
Jan 17, 2023
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix docs
mike0sv committed Dec 1, 2022

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit 2e5ad53026b030c19c28078112364670b00eb1dc
5 changes: 5 additions & 0 deletions mlem/contrib/flyio/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
"""fly.io Deployments support
Extension type: deployment

Implements MlemEnv, MlemDeployment and DeployState to work with fly.io
"""
15 changes: 14 additions & 1 deletion mlem/contrib/flyio/meta.py
Original file line number Diff line number Diff line change
@@ -21,7 +21,6 @@
)
from mlem.runtime.client import Client, HTTPClient

# TODO: did not find refenrence for possible values
FLYIO_STATE_MAPPING = {
"running": DeployStatus.RUNNING,
"deployed": DeployStatus.RUNNING,
@@ -40,31 +39,45 @@ class Config:

class FlyioSettings(BaseModel):
org: Optional[str] = None
"""Organization name"""
region: Optional[str] = None
"""Region name"""


class FlyioEnv(MlemEnv, FlyioSettings):
"""fly.io organization/account"""

type: ClassVar = "flyio"

access_token: Optional[str] = None
"""Access token for fly.io. Alternatively use `flyctl auth login`"""


class FlyioAppState(DeployState):
"""fly.io app state"""

type: ClassVar = "flyio"

fly_toml: Optional[str]
"""Contents of fly.toml file for app"""
app_name: Optional[str]
"""Application name"""
hostname: Optional[str]
"""Application hostname"""


class FlyioApp(MlemDeployment, FlyioSettings):
"""fly.io deployment"""

type: ClassVar = "flyio"

state_type: ClassVar = FlyioAppState
env_type: ClassVar = FlyioEnv

image: Optional[str]
"""Image name for docker image"""
app_name: Optional[str]
"""Application name. Leave empty for auto-generated one"""

# server: Server = None # TODO
def _get_client(self, state: FlyioAppState) -> Client:
3 changes: 3 additions & 0 deletions mlem/ext.py
Original file line number Diff line number Diff line change
@@ -119,6 +119,9 @@ class ExtensionLoader:
Extension("mlem.contrib.requirements", [], False),
Extension("mlem.contrib.venv", [], False),
Extension("mlem.contrib.git", ["pygit2"], True),
Extension(
"mlem.contrib.flyio", ["docker", "fastapi", "uvicorn"], False
),
)

_loaded_extensions: Dict[Extension, ModuleType] = {}
2 changes: 2 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
@@ -87,6 +87,7 @@
"kubernetes": ["docker", "kubernetes"],
"dvc": ["dvc~=2.0"],
"git": ["pygit2"],
"flyio": ["docker", "fastapi", "uvicorn"],
}

# add DVC extras
@@ -241,6 +242,7 @@
"core = mlem.config:MlemConfig",
"bitbucket = mlem.contrib.bitbucketfs:BitbucketConfig",
"docker = mlem.contrib.docker.context:DockerConfig",
"flyio = mlem.contrib.flyio.meta:FlyioConfig",
"heroku = mlem.contrib.heroku.config:HerokuConfig",
"pandas = mlem.contrib.pandas:PandasConfig",
"aws = mlem.contrib.sagemaker.config:AWSConfig",