# Nested Provisioning Defaults
#
# Default values for nested provisioning
# Migrated from provisioning/kcl/nested_provisioning.k

let contracts = import "contracts.ncl" in

{
  default_volume = {
    name = "data-volume",
    type = 'local,
    mount_path = "/data",
    readonly = false,
    mount_mode = "755",
  } | contracts.VolumeConfig,

  default_network = {
    name = "default",
    type = 'bridge,
    subnet = "192.168.1.0/24",
    mtu = 1500,
    dhcp_enabled = true,
    allow_outbound = true,
    allow_inbound = false,
  } | contracts.NetworkConfig,

  default_nested_vm = {
    name = "nested-vm",
    parent_vm = "parent",
    cpu = 2,
    memory_mb = 2048,
    disk_gb = 20,
    nested_virt = true,
    base_image = "ubuntu-22.04",
    networks = [],
    auto_start = false,
    start_order = 100,
    restart_policy = 'always,
  } | contracts.NestedVmConfig,

  default_container = {
    name = "app-container",
    image = "nginx",
    tag = "latest",
    parent_vm = "vm",
    runtime = 'containerd,
    cpu_millicores = 1000,
    memory_mb = 512,
    disk_gb = 10,
    auto_start = false,
    restart_policy = 'unless_stopped,
  } | contracts.ContainerConfig,

  default_multi_tier = {
    name = "multi-tier-app",
    version = "1.0.0",
    networks = [],
    volumes = [],
    parent_vms = [],
    nested_vms = [],
    containers = [],
    replicas = 1,
    strategy = 'rolling,
    health_check_interval = 30,
  } | contracts.MultiTierDeployment,

  default_network_policy = {
    name = "default-policy",
    direction = 'both,
    protocol = 'all,
    action = 'allow,
    priority = 100,
  } | contracts.NetworkPolicy,

  default_provisioning_policy = {
    max_nesting_depth = 3,
    max_vms_per_parent = 10,
    max_containers_per_vm = 50,
    max_cpu_per_vm = 16,
    max_memory_per_vm = 32768,
    max_disk_per_vm = 500,
    default_network_type = "bridge",
    enable_ipv6 = false,
    enable_vlan_tagging = false,
    default_volume_type = "local",
    snapshot_retention_days = 30,
    enable_security_hardening = true,
    enable_network_isolation = true,
    require_auth_between_tiers = false,
  } | contracts.NestedProvisioningPolicy,
}
