groups:
  - name: Configuration
    description: WG-Easy application configuration
  - name: Storage
    description: Configure storage for WG-Easy
  - name: Networking
    description: Networking Configuration for WG-Easy
  - name: Advanced DNS Settings
    description: Configure DNS settings
  - name: Resource Limits
    description: Set CPU/memory limits for Kubernetes Pod

portals:
  web_portal:
    protocols:
      - http
    host:
      - $node_ip
    ports:
      - $variable-webUIPort
    path: /

questions:
  - variable: wgUDPPort
    label: WireGuard UPD Node Port for WG-Easy
    group: Networking
    schema:
      type: int
      min: 9000
      max: 65535
      default: 20920
      required: true
  - variable: webUIPort
    label: WebUI Node Port for WG-Easy
    group: Networking
    schema:
      type: int
      min: 9000
      max: 65535
      default: 20921
      required: true
  - variable: hostNetwork
    label: Host Network
    group: Networking
    schema:
      type: boolean
      default: true

  - variable: dnsConfig
    label: DNS Configuration
    group: Advanced DNS Settings
    schema:
      type: dict
      attrs:
        - variable: options
          label: DNS Options
          schema:
            type: list
            items:
              - variable: optionsEntry
                label: Option Entry Configuration
                schema:
                  type: dict
                  attrs:
                    - variable: name
                      label: Option Name
                      schema:
                        type: string
                        required: true
                    - variable: value
                      label: Option Value
                      schema:
                        type: string
                        required: true

  - variable: wgeasy
    label: WG-Easy Configuration
    group: Configuration
    schema:
      type: dict
      additional_attrs: true
      attrs:
        - variable: host
          label: Hostname or IP
          description: The public hostname or IP of your VPN server.
          schema:
            type: string
            required: true
            $ref:
              - "definitions/nodeIP"
        - variable: password
          label: Password for WebUI
          description: When set, requires a password when logging in to the Web UI.
          schema:
            type: string
            private: true
            default: ""
        - variable: keep_alive
          label: Persistent Keep Alive
          description: Value in seconds to keep the "connection" open. If this value is 0, then connections won't be kept alive.
          schema:
            type: int
            required: true
            default: 0
        - variable: client_mtu
          label: Clients MTU
          description: The MTU the clients will use.
          schema:
            type: int
            required: true
            default: 1420
        - variable: client_address_range
          label: Clients IP Address Range
          description: Clients IP address range.
          schema:
            type: string
            required: true
            default: 10.8.0.x
        - variable: client_dns_server
          label: Clients DNS Server
          description: Clients DNS Server.
          schema:
            type: string
            required: true
            default: "1.1.1.1"
        - variable: allowed_ips
          label: Allowed IPs
          description: Allowed IPs clients will use. If none provided, <0.0.0.0/0,::/0> will be used.
          schema:
            type: list
            default: []
            items:
              - variable: entry
                label: Allowed IP Entry
                schema:
                  type: string
                  required: true
                  default: ""

  - variable: environmentVariables
    label: WG-Easy Environment
    group: Configuration
    schema:
      type: list
      default: []
      items:
        - variable: environmentVariable
          label: Environment Variable
          schema:
            type: dict
            attrs:
              - variable: name
                label: Name
                schema:
                  type: string
                  required: true
                  default: ""
              - variable: value
                label: Value
                schema:
                  type: string
                  default: ""
                  required: true

  - variable: appVolumeMounts
    label: WG-Easy Storage
    group: Storage
    schema:
      type: dict
      attrs:
        - variable: config
          label: Configuration Volume
          schema:
            type: dict
            attrs:
              - variable: datasetName
                label: Configuration Volume Dataset Name
                schema:
                  type: string
                  hidden: true
                  $ref:
                    - normalize/ixVolume
                  show_if: [["hostPathEnabled", "=", false]]
                  default: ix-wg-easy_config
                  editable: false
              - variable: mountPath
                label: Configuration Mount Path
                description: Path where the volume will be mounted inside the pod
                schema:
                  type: path
                  hidden: true
                  editable: true
                  default: /etc/wireguard
              - variable: hostPathEnabled
                label: Enable Custom Host Path for WG-Easy Configuration Volume
                schema:
                  type: boolean
                  default: false
                  show_subquestions_if: true
                  subquestions:
                    - variable: hostPath
                      label: Host Path for WG-Easy Configuration Volume
                      schema:
                        type: hostpath
                        required: true
                        immutable: true
                        $ref:
                          - validations/lockedHostPath

  - variable: extraAppVolumeMounts
    label: Extra Host Path Volumes
    group: Storage
    schema:
      type: list
      items:
        - variable: extraAppVolume
          label: Host Path Volume
          description: Add an extra host path volume for WG-Easy application
          schema:
            type: dict
            attrs:
              - variable: mountPath
                label: Mount Path in Pod
                description: Path where the volume will be mounted inside the pod
                schema:
                  type: path
                  required: true
              - variable: hostPath
                label: Host Path
                description: Host path
                schema:
                  type: hostpath
                  required: true
                  $ref:
                    - validations/lockedHostPath

  - variable: enableResourceLimits
    label: Enable Pod resource limits
    group: Resource Limits
    schema:
      type: boolean
      default: false
  - variable: cpuLimit
    label: CPU Limit resource limits
    description: CPU resource limit allow  plain integer values with suffix m(milli) e.g 1000m, 100.
    group: Resource Limits
    schema:
      type: string
      show_if: [["enableResourceLimits", "=", true]]
      valid_chars: "^\\d+(?:\\.\\d+(?!.*m$)|m?$)"
      default: 4000m
  - variable: memLimit
    label: Memory Limit
    group: Resource Limits
    description: Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi
    schema:
      type: string
      show_if: [["enableResourceLimits", "=", true]]
      valid_chars: "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$"
      default: 8Gi
