groups:
  - name: "Container Images"
    description: "Image to be used for container"
  - name: "Workload Configuration"
    description: "Configure Storage for IPFS"
  - name: "Storage"
    description: "Configure Storage for IPFS"
  - name: "IPFS Configuration"
    description: "Configure Storage for IPFS"

portals:
  web_portal:
    protocols:
      - "http"
    host:
      - "$node_ip"
    ports:
      - "$variable-service.apiPort"
    path: "/webui"

questions:
  - variable: updateStrategy
    label: "IPFS update strategy"
    group: "Workload Configuration"
    schema:
      type: string
      default: "Recreate"
      enum:
        - value: "RollingUpdate"
          description: "Create new pods and then kill old ones"
        - value: "Recreate"
          description: "Kill existing pods before creating new ones"

  - variable: environmentVariables
    label: "IPFS image environment"
    group: "IPFS Configuration"
    schema:
      type: list
      default: []
      items:
        - variable: environmentVariable
          label: "Environment Variable"
          schema:
            type: dict
            attrs:
              - variable: name
                label: "Name"
                schema:
                  type: string
              - variable: value
                label: "Value"
                schema:
                  type: string

  - variable: service
    description: "IPFS Service Configuration"
    label: "IPFS Service Configuration"
    group: "IPFS Configuration"
    schema:
      type: dict
      required: true
      attrs:
        - variable: swarmPort
          label: "Swarm Port to use for IPFS (Public)"
          schema:
            type: int
            min: 9000
            max: 65535
            default: 9401
            required: true
        - variable: apiPort
          label: "API Port to use for IPFS (local)"
          schema:
            type: int
            min: 9000
            max: 65535
            default: 9501
            required: true
        - variable: gatewayPort
          label: "Gateway Port to use for IPFS (local)"
          schema:
            type: int
            min: 9000
            max: 65535
            default: 9880
            required: true

  - variable: appVolumeMounts
    label: "IPFS Storage"
    group: "Storage"
    schema:
      type: dict
      attrs:
        - variable: staging
          label: "Staging Volume"
          schema:
            type: dict
            attrs:
              - variable: datasetName
                label: "IPFS Staging Volume Dataset Name"
                schema:
                  type: string
                  hidden: true
                  $ref:
                    - "normalize/ixVolume"
                  show_if: [["hostPathEnabled", "=", false]]
                  default: "ix-ipfs-staging"
                  editable: false
              - variable: mountPath
                label: "IPFS Staging Mount Path"
                description: "Path where the volume will be mounted inside the pod"
                schema:
                  type: path
                  hidden: true
                  editable: false
                  default: "/export"
              - variable: hostPathEnabled
                label: "Enable Host Path for IPFS Staging Volume"
                schema:
                  type: boolean
                  default: false
                  show_subquestions_if: true
                  subquestions:
                    - variable: hostPath
                      label: "Host Path for IPFS Staging Volume"
                      schema:
                        type: hostpath
                        required: true
        - variable: data
          label: "Data Volume"
          schema:
            type: dict
            attrs:
              - variable: datasetName
                label: "IPFS Data Volume Name"
                schema:
                  type: string
                  hidden: true
                  $ref:
                    - "normalize/ixVolume"
                  show_if: [["hostPathEnabled", "=", false]]
                  default: "ix-ipfs-data"
                  editable: false
              - variable: mountPath
                label: "IPFS Data Mount Path"
                description: "Path where the volume will be mounted inside the pod"
                schema:
                  type: path
                  hidden: true
                  editable: false
                  default: "/data/ipfs"
              - variable: hostPathEnabled
                label: "Enable Host Path for IPFS Data Volume"
                schema:
                  type: boolean
                  default: false
                  show_subquestions_if: true
                  subquestions:
                    - variable: hostPath
                      label: "Host Path for IPFS Data Volume"
                      schema:
                        type: hostpath
                        required: true
