Taskserv Quick Guide
π Quick Start
Create a New Taskserv (Interactive)
nu provisioning/tools/create-taskserv-helper.nu interactive
Create a New Taskserv (Direct)
nu provisioning/tools/create-taskserv-helper.nu create my-api \
--category development \
--port 8080 \
--description "My REST API service"
π 5-Minute Setup
1. Choose Your Method
- Interactive:
nu provisioning/tools/create-taskserv-helper.nu interactive - Command Line: Use the direct command above
- Manual: Follow the structure guide below
2. Basic Structure
my-service/
βββ kcl/
β βββ kcl.mod # Package definition
β βββ my-service.k # Main schema
β βββ version.k # Version info
βββ default/
β βββ defs.toml # Default config
β βββ install-*.sh # Install script
βββ README.md # Documentation
3. Essential Files
kcl.mod (package definition):
[package]
name = "my-service"
version = "1.0.0"
description = "My service"
[dependencies]
k8s = { oci = "oci://ghcr.io/kcl-lang/k8s", tag = "1.30" }
my-service.k (main schema):
schema MyService {
name: str = "my-service"
version: str = "latest"
port: int = 8080
replicas: int = 1
}
my_service_config: MyService = MyService {}
4. Test Your Taskserv
# Discover your taskserv
nu -c "use provisioning/core/nulib/taskservs/discover.nu *; get-taskserv-info my-service"
# Test layer resolution
nu -c "use provisioning/workspace/tools/layer-utils.nu *; test_layer_resolution my-service wuji upcloud"
# Deploy with check
provisioning/core/cli/provisioning taskserv create my-service --infra wuji --check
π― Common Patterns
Web Service
schema WebService {
name: str
version: str = "latest"
port: int = 8080
replicas: int = 1
ingress: {
enabled: bool = true
hostname: str
tls: bool = false
}
resources: {
cpu: str = "100m"
memory: str = "128Mi"
}
}
Database Service
schema DatabaseService {
name: str
version: str = "latest"
port: int = 5432
persistence: {
enabled: bool = true
size: str = "10Gi"
storage_class: str = "ssd"
}
auth: {
database: str = "app"
username: str = "user"
password_secret: str
}
}
Background Worker
schema BackgroundWorker {
name: str
version: str = "latest"
replicas: int = 1
job: {
schedule?: str # Cron format for scheduled jobs
parallelism: int = 1
completions: int = 1
}
resources: {
cpu: str = "500m"
memory: str = "512Mi"
}
}
π οΈ CLI Shortcuts
Discovery
# List all taskservs
nu -c "use provisioning/core/nulib/taskservs/discover.nu *; discover-taskservs | select name group"
# Search taskservs
nu -c "use provisioning/core/nulib/taskservs/discover.nu *; search-taskservs redis"
# Show stats
nu -c "use provisioning/workspace/tools/layer-utils.nu *; show_layer_stats"
Development
# Check KCL syntax
kcl check provisioning/extensions/taskservs/{category}/{name}/kcl/{name}.k
# Generate configuration
provisioning/core/cli/provisioning taskserv generate {name} --infra {infra}
# Version management
provisioning/core/cli/provisioning taskserv versions {name}
provisioning/core/cli/provisioning taskserv check-updates
Testing
# Dry run deployment
provisioning/core/cli/provisioning taskserv create {name} --infra {infra} --check
# Layer resolution debug
nu -c "use provisioning/workspace/tools/layer-utils.nu *; test_layer_resolution {name} {infra} {provider}"
π Categories Reference
| Category | Examples | Use Case |
|---|---|---|
| container-runtime | containerd, crio, podman | Container runtime engines |
| databases | postgres, redis | Database services |
| development | coder, gitea, desktop | Development tools |
| infrastructure | kms, webhook, os | System infrastructure |
| kubernetes | kubernetes | Kubernetes orchestration |
| networking | cilium, coredns, etcd | Network services |
| storage | rook-ceph, external-nfs | Storage solutions |
π§ Troubleshooting
Taskserv Not Found
# Check if discovered
nu -c "use provisioning/core/nulib/taskservs/discover.nu *; discover-taskservs | where name == my-service"
# Verify kcl.mod exists
ls provisioning/extensions/taskservs/{category}/my-service/kcl/kcl.mod
Layer Resolution Issues
# Debug resolution
nu -c "use provisioning/workspace/tools/layer-utils.nu *; test_layer_resolution my-service wuji upcloud"
# Check template exists
ls provisioning/workspace/templates/taskservs/{category}/my-service.k
KCL Syntax Errors
# Check syntax
kcl check provisioning/extensions/taskservs/{category}/my-service/kcl/my-service.k
# Format code
kcl fmt provisioning/extensions/taskservs/{category}/my-service/kcl/
π‘ Pro Tips
- Use existing taskservs as templates - Copy and modify similar services
- Test with βcheck first - Always use dry run before actual deployment
- Follow naming conventions - Use kebab-case for consistency
- Document thoroughly - Good docs save time later
- Version your schemas - Include version.k for compatibility tracking
π Next Steps
- Read the full Taskserv Developer Guide
- Explore existing taskservs in
provisioning/extensions/taskservs/ - Check out templates in
provisioning/workspace/templates/taskservs/ - Join the development community for support