123 lines
4.5 KiB
Plaintext
Raw Normal View History

# | Batch operation instances (defaults only)
# | Migrated from: provisioning/kcl/batch.k
# | Pattern: Hybrid - defaults + makers + direct access (contracts available via import)
let contracts_lib = import "./contracts.ncl" in
let defaults_lib = import "./defaults.ncl" in
{
# ============================================================================
# SECTION 1: Direct access to defaults (for reference)
# Use when: Understanding default values, building custom instances manually
# Exported: YES - for inspection and custom building
# ============================================================================
defaults = defaults_lib,
# ============================================================================
# SECTION 2: Convenience makers (90% of use cases)
# Use when: Creating instances with overrides, simple customization
# Note: Not exported to TOML/JSON (functions aren't serializable)
# Import batch.ncl in Nickel code and use these functions
# ============================================================================
# Make a scheduler with optional overrides
make_scheduler | not_exported = fun overrides =>
defaults_lib.scheduler & overrides,
# Make a queue with optional overrides
make_queue | not_exported = fun overrides =>
defaults_lib.queue & overrides,
# Make a resource constraint with optional overrides
make_resource_constraint | not_exported = fun overrides =>
defaults_lib.resource_constraint & overrides,
# Make a metrics config with optional overrides
make_metrics | not_exported = fun overrides =>
defaults_lib.metrics & overrides,
# Make a provider mix config with optional overrides
make_provider_mix | not_exported = fun overrides =>
defaults_lib.provider_mix & overrides,
# Make a health check with optional overrides
make_health_check | not_exported = fun overrides =>
defaults_lib.health_check & overrides,
# Make an autoscaling config with optional overrides
make_autoscaling | not_exported = fun overrides =>
defaults_lib.autoscaling & overrides,
# Make an executor with optional overrides
make_executor | not_exported = fun overrides =>
defaults_lib.executor & overrides,
# ============================================================================
# SECTION 3: Default instances (bare defaults)
# Use when: Need unmodified default values
# Exported: YES - for direct use without customization
# ============================================================================
DefaultScheduler = defaults_lib.scheduler,
DefaultQueue = defaults_lib.queue,
DefaultResourceConstraint = defaults_lib.resource_constraint,
DefaultMetrics = defaults_lib.metrics,
DefaultProviderMixConfig = defaults_lib.provider_mix,
DefaultHealthCheck = defaults_lib.health_check,
DefaultAutoscaling = defaults_lib.autoscaling,
DefaultExecutor = defaults_lib.executor,
# Constant arrays
BatchOperationTypes = defaults_lib.operation_types,
BatchProviders = defaults_lib.providers,
# ============================================================================
# SECTION 4: Concrete production instance
# Ready-to-use production-grade configuration
# Exported: YES - production-ready configuration
# ============================================================================
DefaultBatchConfig = {
executor_id = "default_batch_executor",
name = "Default Batch Executor",
description = "Default configuration-driven batch executor for provisioning operations",
scheduler = {
strategy = "dependency_first",
resource_limits = {
"max_cpu_cores" = 8,
"max_memory_mb" = 16384,
"max_network_bandwidth" = 1000,
},
scheduling_interval = 10,
enable_preemption = false,
},
provider_config = {
primary_provider = "upcloud",
secondary_providers = ["aws", "local"],
provider_selection = "primary_first",
cross_provider_networking = {},
provider_limits = {},
},
queues = [],
resource_constraints = [],
autoscaling = {
enabled = true,
min_parallel = 2,
max_parallel = 8,
scale_up_threshold = 0.8,
scale_down_threshold = 0.2,
cooldown_period = 300,
scale_step = 1,
target_utilization = 0.7,
},
security_config = {},
audit_logging = true,
audit_log_path = "./logs/batch_audit.log",
webhook_endpoints = [],
api_endpoints = [],
performance_config = {
"io_threads" = "4",
"worker_threads" = "8",
"batch_size" = "100",
},
},
}