Skip to main content
Version: 1.0.1

App Garden Service

DEPRECATED: The App Garden service (client.apps) is deprecated and will be removed in a future release. The Docker Compose-based App Garden is being replaced by Kubernetes CRD-based extensions. Use the Extensions API (client.extensions) instead.

Migration guide:

Legacy (App Garden)New (Extensions API)
client.apps.list_deployments()client.extensions.list_extensions()
client.apps.deploy(template_id=..., name=...)client.extensions.create_extension(request)
client.apps.get_deployment(deployment_id)client.extensions.get_extension(name)
client.apps.stop_deployment(deployment_id)client.extensions.delete_extension(name)

See the Extensions Service documentation for full details.


The App Garden service allows you to deploy and manage containerized applications within the Kamiwaza platform. It provides a simple interface for deploying web applications, databases, and other services using Docker containers.

Overview

The App Garden is designed to make it easy to deploy applications alongside your AI workloads. It supports:

  • Docker-based container deployment
  • Pre-built application templates
  • Environment variable configuration
  • Automatic port allocation and routing
  • Instance scaling and management

Authentication

Note: App Garden endpoints do not require authentication, making them accessible for quick deployments and testing.

Quick Start

from kamiwaza_sdk import KamiwazaClient as kz

# Initialize client
client = kz("http://localhost:7777/api/")

# List available templates
templates = client.apps.list_templates()
for template in templates:
print(f"{template.name} - {template.description}")

# Deploy an application from a template
deployment = client.apps.deploy(
template_id=template.id,
name="my-postgres-db",
env_vars={"POSTGRES_PASSWORD": "mysecretpassword"}
)

print(f"Deployed: {deployment.name}")
print(f"Status: {deployment.status}")

Available Methods

Deployment Management

deploy(template_id, name, **kwargs)

Deploy a new application from a template.

Parameters:

  • template_id (UUID): The ID of the template to deploy
  • name (str): Name for your deployment
  • min_copies (int, optional): Minimum instances to maintain (default: 1)
  • starting_copies (int, optional): Initial number of instances (default: 1)
  • max_copies (int, optional): Maximum instances allowed
  • env_vars (dict, optional): Environment variables for the container

Returns: AppDeployment object with deployment details

list_deployments()

List all active application deployments.

Returns: List of AppDeployment objects

get_deployment(deployment_id)

Get details of a specific deployment.

Parameters:

  • deployment_id (UUID): The deployment ID

Returns: AppDeployment object

stop_deployment(deployment_id)

Stop and remove a deployment.

Parameters:

  • deployment_id (UUID): The deployment ID

Returns: Success message

Template Management

list_templates()

List all available application templates.

Returns: List of AppTemplate objects

search_templates(query)

Search for templates by name or description.

Parameters:

  • query (str): Search term

Returns: List of matching AppTemplate objects

Instance Management

list_instances(deployment_id)

List all running instances of a deployment.

Parameters:

  • deployment_id (UUID): The deployment ID

Returns: List of AppInstance objects with host and port information

Image Management

pull_images(deployment_id)

Pull Docker images for a deployment (useful for pre-loading).

Parameters:

  • deployment_id (UUID): The deployment ID

Returns: ImagePullResult with status information

Common Use Cases

Deploy a PostgreSQL Database

# Find PostgreSQL template
templates = client.apps.search_templates("postgres")
postgres_template = templates[0]

# Deploy with custom settings
deployment = client.apps.deploy(
template_id=postgres_template.id,
name="my-database",
env_vars={
"POSTGRES_PASSWORD": "secure_password",
"POSTGRES_DB": "myapp"
}
)

# Get connection details
instances = client.apps.list_instances(deployment.id)
for instance in instances:
print(f"Connect to: {instance.host_name}:{instance.listen_port}")

Deploy a Web Application

# Deploy a web app with scaling
deployment = client.apps.deploy(
template_id=web_template.id,
name="my-web-app",
min_copies=2,
max_copies=5,
env_vars={
"API_KEY": "your_api_key",
"DEBUG": "false"
}
)

Monitor Deployments

# List all deployments
deployments = client.apps.list_deployments()

for deployment in deployments:
print(f"\n{deployment.name}:")
print(f" Status: {deployment.status}")
print(f" Created: {deployment.created_at}")

# Check instances
instances = client.apps.list_instances(deployment.id)
print(f" Running instances: {len(instances)}")

Templates

Templates define the container configuration and requirements for applications. Each template includes:

  • Docker image reference
  • Default environment variables
  • Port configurations
  • Resource requirements
  • Risk tier classification

Templates are verified by the Kamiwaza team and categorized by risk level for security.

Error Handling

try:
deployment = client.apps.deploy(
template_id=template_id,
name="my-app"
)
except Exception as e:
print(f"Deployment failed: {e}")

Best Practices

  1. Use Templates: Prefer templates over custom images for better security and reliability
  2. Environment Variables: Store sensitive data like passwords in environment variables
  3. Scaling: Set appropriate min/max copies based on your load requirements
  4. Monitoring: Regularly check deployment status and instance health
  5. Cleanup: Stop unused deployments to free resources

See Also