provisioning/docs/src/development/taskservs/taskserv-quick-guide.md

249 lines
6.2 KiB
Markdown
Raw Normal View History

2026-01-14 04:53:21 +00:00
# Taskserv Quick Guide
## 🚀 Quick Start
### Create a New Taskserv (Interactive)
2026-01-14 04:53:58 +00:00
```nushell
2026-01-14 04:53:21 +00:00
nu provisioning/tools/create-taskserv-helper.nu interactive
```
### Create a New Taskserv (Direct)
2026-01-14 04:53:58 +00:00
```nushell
2026-01-14 04:53:21 +00:00
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
2026-01-14 04:53:58 +00:00
```bash
2026-01-14 04:53:21 +00:00
my-service/
├── nickel/
│ ├── manifest.toml # Package definition
│ ├── my-service.ncl # Main schema
│ └── version.ncl # Version info
├── default/
│ ├── defs.toml # Default config
│ └── install-*.sh # Install script
└── README.md # Documentation
```
### 3. Essential Files
**manifest.toml** (package definition):
2026-01-14 04:53:58 +00:00
```toml
2026-01-14 04:53:21 +00:00
[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.ncl** (main schema):
2026-01-14 04:53:58 +00:00
```javascript
2026-01-14 04:53:21 +00:00
let MyService = {
name | String,
version | String,
port | Number,
replicas | Number,
} in
{
my_service_config = {
name = "my-service",
version = "latest",
port = 8080,
replicas = 1,
}
}
```
### 4. Test Your Taskserv
2026-01-14 04:53:58 +00:00
```bash
2026-01-14 04:53:21 +00:00
# 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
2026-01-14 04:53:58 +00:00
```javascript
2026-01-14 04:53:21 +00:00
let WebService = {
name | String,
version | String | default = "latest",
port | Number | default = 8080,
replicas | Number | default = 1,
ingress | {
enabled | Bool | default = true,
hostname | String,
tls | Bool | default = false,
},
resources | {
cpu | String | default = "100m",
memory | String | default = "128Mi",
},
} in
WebService
```
### Database Service
2026-01-14 04:53:58 +00:00
```javascript
2026-01-14 04:53:21 +00:00
let DatabaseService = {
name | String,
version | String | default = "latest",
port | Number | default = 5432,
persistence | {
enabled | Bool | default = true,
size | String | default = "10Gi",
storage_class | String | default = "ssd",
},
auth | {
database | String | default = "app",
username | String | default = "user",
password_secret | String,
},
} in
DatabaseService
```
### Background Worker
2026-01-14 04:53:58 +00:00
```javascript
2026-01-14 04:53:21 +00:00
let BackgroundWorker = {
name | String,
version | String | default = "latest",
replicas | Number | default = 1,
job | {
schedule | String | optional, # Cron format for scheduled jobs
parallelism | Number | default = 1,
completions | Number | default = 1,
},
resources | {
cpu | String | default = "500m",
memory | String | default = "512Mi",
},
} in
BackgroundWorker
```
## 🛠️ CLI Shortcuts
### Discovery
2026-01-14 04:53:58 +00:00
```bash
2026-01-14 04:53:21 +00:00
# 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
2026-01-14 04:53:58 +00:00
```bash
2026-01-14 04:53:21 +00:00
# Check Nickel syntax
nickel typecheck provisioning/extensions/taskservs/{category}/{name}/schemas/{name}.ncl
# 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
2026-01-14 04:53:58 +00:00
```bash
2026-01-14 04:53:21 +00:00
# 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
2026-01-14 04:53:58 +00:00
```bash
2026-01-14 04:53:21 +00:00
# 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
2026-01-14 04:53:58 +00:00
```bash
2026-01-14 04:53:21 +00:00
# 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.ncl
```
### Nickel Syntax Errors
2026-01-14 04:53:58 +00:00
```nickel
2026-01-14 04:53:21 +00:00
# Check syntax
nickel typecheck provisioning/extensions/taskservs/{category}/my-service/schemas/my-service.ncl
# Format code
nickel format provisioning/extensions/taskservs/{category}/my-service/schemas/
```
## 💡 Pro Tips
1. **Use existing taskservs as templates** - Copy and modify similar services
2. **Test with --check first** - Always use dry run before actual deployment
3. **Follow naming conventions** - Use kebab-case for consistency
4. **Document thoroughly** - Good docs save time later
5. **Version your schemas** - Include version.ncl for compatibility tracking
## 🔗 Next Steps
1. Read the full [Taskserv Developer Guide](TASKSERV_DEVELOPER_GUIDE.md)
2. Explore existing taskservs in `provisioning/extensions/taskservs/`
3. Check out templates in `provisioning/workspace/templates/taskservs/`
4. Join the development community for support