Переглянути джерело

Finalize Machinaris-1.1.0

- Add support for enabling cactus, chives, cryptodoge, flax, flora, hddcoin, maize, nchain, stacoin and stor coins into machinaris
-- Add deployment for each coin with environment variables and volume mounts
-- Add questions to configure them & turn them on/off on-demand
- Revert to my initial cluster IP based implementation as it cannot co-exist with hostnetwork + we cannot change coin ports otherwise blockchain network won't be able to communicate
- Updates to common/library
Muhammad Rehan 4 роки тому
батько
коміт
9bdeba303e

+ 3 - 3
Makefile

@@ -1,4 +1,4 @@
 
-validate:
-	@helm dependency update ./test/machinaris/1.0.11
-	@helm template --values ./test/machinaris/1.0.11/ix_values.yaml machinaris ./test/machinaris/1.0.11 --debug
+validate-machinaris:
+	@helm dependency update ./charts/machinaris/${v}
+	@helm template --values ./charts/machinaris/${v}/test_values.yaml machinaris ./charts/machinaris/${v} --debug

+ 23 - 0
charts/machinaris/1.1.0/.helmignore

@@ -0,0 +1,23 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+# OWNERS file for Kubernetes
+OWNERS

+ 17 - 0
charts/machinaris/1.1.0/Chart.yaml

@@ -0,0 +1,17 @@
+apiVersion: v1
+appVersion: v0.6.6
+dependencies:
+- name: common
+  repository: file://../../../library/common/2105.0.0
+  version: 2105.0.0
+description: Global, Versioned, peer-to-peer filesystem.
+home: https://github.com/guydavis/machinaris
+icon: https://raw.githubusercontent.com/guydavis/machinaris/main/web/static/favicon.ico
+keywords:
+- storage
+- crypto
+- blockchain
+name: machinaris
+sources:
+- https://github.com/guydavis/machinaris
+version: 1.1.0

+ 9 - 0
charts/machinaris/1.1.0/README.md

@@ -0,0 +1,9 @@
+Machinaris
+=====
+
+[MACHINARIS](https://github.com/guydavis/machinaris) is an easy-to-use WebUI for Chia plotting and farming. Includes Chia, Plotman, MadMax, Chiadog, and Flax in a single Docker image.
+
+Introduction
+------------
+
+This chart bootstraps MACHINARIS deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.

+ 4 - 0
charts/machinaris/1.1.0/app-readme.md

@@ -0,0 +1,4 @@
+Machinaris
+=====
+
+[MACHINARIS](https://github.com/guydavis/machinaris) is an easy-to-use WebUI for Chia plotting and farming. Includes Chia, Plotman, MadMax, Chiadog, and Flax in a single Docker image.

BIN
charts/machinaris/1.1.0/charts/common-2105.0.0.tgz


+ 16 - 0
charts/machinaris/1.1.0/ix_values.yaml

@@ -0,0 +1,16 @@
+image:
+  pullPolicy: IfNotPresent
+  repository: ghcr.io/guydavis/machinaris
+  tag: v0.6.6
+updateStrategy: Recreate
+coins:
+  - cactus
+  - chives
+  - cryptodoge
+  - flax
+  - flora
+  - hddcoin
+  - maize
+  - nchain
+  - stacoin
+  - stor

+ 1857 - 0
charts/machinaris/1.1.0/questions.yaml

@@ -0,0 +1,1857 @@
+groups:
+  - name: "Networking"
+    description: "Configure Networking for Machinaris"
+  - name: "Machinaris Configuration"
+    description: "Machinaris configuration"
+  - name: "Storage"
+    description: "Configure Storage for Machinaris"
+  - name: "Machinaris Environment Variables"
+    description: "Set the environment that will be visible to the container"
+  - name: "Resource Limits"
+    description: "Set CPU/memory limits for Kubernetes Pod"
+  - name: "Configure Coins"
+    description: "Configure different coins"
+
+portals:
+  web_portal:
+    protocols:
+      - "http"
+    host:
+      - "$node_ip"
+    ports:
+      - "$variable-machinaris_ui_port"
+
+questions:
+  - variable: timezone
+    label: "Configure timezone"
+    group: "Machinaris Configuration"
+    description: "Configure timezone for machinaris"
+    schema:
+      type: string
+      $ref:
+        - "definitions/timezone"
+
+  - variable: nodeIP
+    description: "LAN IP address of your TrueNAS server"
+    group: "Machinaris Configuration"
+    label: "Worker Address"
+    schema:
+      type: string
+      $ref:
+        - "definitions/nodeIP"
+
+  - variable: machinaris_ui_port
+    label: "Machinaris Web UI"
+    group: "Networking"
+    description: "Web UI Port for Machinaris"
+    schema:
+      type: int
+      min: 9000
+      max: 65535
+      default: 9003
+  - variable: appVolumeMounts
+    label: "Machinaris 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: "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: "/root/.chia"
+              - variable: hostPathEnabled
+                label: "Enable Custom Host Path for Machinaris Configuration Volume"
+                schema:
+                  type: boolean
+                  default: false
+                  show_subquestions_if: true
+                  subquestions:
+                    - variable: hostPath
+                      label: "Host Path for Machinaris Configuration Volume"
+                      schema:
+                        type: hostpath
+                        required: true
+        - variable: plots
+          label: "Plot Volume"
+          schema:
+            type: dict
+            attrs:
+              - variable: datasetName
+                label: "Plots Volume Name"
+                schema:
+                  type: string
+                  hidden: true
+                  $ref:
+                    - "normalize/ixVolume"
+                  show_if: [["hostPathEnabled", "=", false]]
+                  default: "plots"
+                  editable: false
+              - variable: mountPath
+                label: "Plots Mount Path"
+                description: "Path where the volume will be mounted inside the pod"
+                schema:
+                  type: path
+                  hidden: true
+                  editable: false
+                  default: "/plots"
+              - variable: hostPathEnabled
+                label: "Enable Custom Host Path for Machinaris Plots Volume"
+                schema:
+                  type: boolean
+                  default: false
+                  show_subquestions_if: true
+                  subquestions:
+                    - variable: hostPath
+                      label: "Host Path for Machinaris Plots Volume"
+                      schema:
+                        type: hostpath
+                        required: true
+        - variable: plotting
+          label: "Plotting Temp Volume"
+          schema:
+            type: dict
+            attrs:
+              - variable: datasetName
+                label: "Plotting Volume Name"
+                schema:
+                  type: string
+                  hidden: true
+                  $ref:
+                    - "normalize/ixVolume"
+                  show_if: [["hostPathEnabled", "=", false]]
+                  default: "plotting"
+                  editable: false
+              - variable: mountPath
+                label: "Plotting Mount Path"
+                description: "Path where the volume will be mounted inside the pod"
+                schema:
+                  type: path
+                  hidden: true
+                  editable: false
+                  default: "/plotting"
+              - variable: hostPathEnabled
+                label: "Enable Custom Host Path for Machinaris Plotting Temp Volume"
+                schema:
+                  type: boolean
+                  default: false
+                  show_subquestions_if: true
+                  subquestions:
+                    - variable: hostPath
+                      label: "Host Path for Machinaris Plotting Volume"
+                      schema:
+                        type: hostpath
+                        required: true
+
+  - variable: extraAppVolumeMounts
+    label: "Machinaris Extra Host Path Volumes"
+    group: "Storage"
+    schema:
+      type: list
+      items:
+        - variable: extraAppVolume
+          label: "Machinaris Host Path Volume"
+          description: "Add an extra host path volume for machinaris 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
+
+  - variable: environmentVariables
+    label: "Environment Variables for Machinaris"
+    group: "Machinaris Environment Variables"
+    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: enableResourceLimits
+    label: "Enable Pod resource limits"
+    group: "Resource Limits"
+    schema:
+      type: boolean
+  - variable: cpuLimit
+    label: "CPU limit"
+    group: "Resource Limits"
+    schema:
+      type: string
+      show_if: [["enableResourceLimits", "=", true]]
+      valid_chars: "^\\d+(?:\\.\\d+(?!.*m$)|m?$)"
+  - variable: memLimit
+    label: "Memory limit"
+    group: "Resource Limits"
+    schema:
+      type: string
+      show_if: [["enableResourceLimits", "=", true]]
+      valid_chars: "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$"
+
+  # Cactus Configurations
+  - variable: cactusEnabled
+    label: "Enable Cactus"
+    group: "Configure Coins"
+    schema:
+      type: boolean
+      default: false
+  - variable: cactus
+    label: "Configure Cactus"
+    group: "Configure Coins"
+    schema:
+      type: dict
+      show_if: [["cactusEnabled", "=", true]]
+      attrs:
+        - variable: apiPort
+          label: "API Port"
+          description: "API port on the pod"
+          schema:
+            type: int
+            editable: false
+            default: 8936
+        - variable: ports
+          label: "Ports"
+          description: "Container ports that are also forwarded on the host"
+          schema:
+            type: list
+            items:
+              - variable: apiPort
+                label: "API Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 8936
+              - variable: blockchainPort
+                label: "Blockchain Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 11444
+              - variable: farmingPort
+                label: "Farming Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 11447
+
+        - variable: volumeMounts
+          label: "Storage Configurations"
+          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: "cactus-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: false
+                        default: "/root/.chia"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Configuration Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Configuration Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+              - variable: mnemonic
+                label: "Mnemonic Volume"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: datasetName
+                      label: "Mnemonic Volume Dataset Name"
+                      schema:
+                        type: string
+                        hidden: true
+                        $ref:
+                          - "normalize/ixVolume"
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "config"
+                        editable: false
+                    - variable: datasetSubPath
+                      label: "Subpath in the Dataset"
+                      schema:
+                        type: string
+                        hidden: true
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "mnemonic.txt"
+                        editable: false
+                    - variable: mountPath
+                      label: "Mnemonic Mount Path"
+                      description: "Path where the volume will be mounted inside the pod"
+                      schema:
+                        type: path
+                        hidden: true
+                        editable: false
+                        default: "/root/.chia/mnemonic.txt:ro"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Mnemonic Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Mnemonic Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+
+  # Chives Configurations
+  - variable: chivesEnabled
+    label: "Enable Chives"
+    group: "Configure Coins"
+    schema:
+      type: boolean
+      default: false
+  - variable: chives
+    label: "Configure Chives"
+    group: "Configure Coins"
+    schema:
+      type: dict
+      show_if: [["chivesEnabled", "=", true]]
+      attrs:
+        - variable: apiPort
+          label: "API Port"
+          description: "API port on the pod"
+          schema:
+            type: int
+            editable: false
+            default: 8931
+        - variable: ports
+          label: "Ports"
+          description: "Container ports that are also forwarded on the host"
+          schema:
+            type: list
+            items:
+              - variable: apiPort
+                label: "API Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 8931
+              - variable: blockchainPort
+                label: "Blockchain Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 9699
+              - variable: farmingPort
+                label: "Farming Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 9647
+
+        - variable: volumeMounts
+          label: "Storage Configurations"
+          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: "chives-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: false
+                        default: "/root/.chia"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Configuration Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Configuration Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+              - variable: mnemonic
+                label: "Mnemonic Volume"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: datasetName
+                      label: "Mnemonic Volume Dataset Name"
+                      schema:
+                        type: string
+                        hidden: true
+                        $ref:
+                          - "normalize/ixVolume"
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "config"
+                        editable: false
+                    - variable: datasetSubPath
+                      label: "Subpath in the Dataset"
+                      schema:
+                        type: string
+                        hidden: true
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "mnemonic.txt"
+                        editable: false
+                    - variable: mountPath
+                      label: "Mnemonic Mount Path"
+                      description: "Path where the volume will be mounted inside the pod"
+                      schema:
+                        type: path
+                        hidden: true
+                        editable: false
+                        default: "/root/.chia/mnemonic.txt:ro"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Mnemonic Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Mnemonic Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+
+  # Cryptodoge Configurations
+  - variable: cryptodogeEnabled
+    label: "Enable Cryptodoge"
+    group: "Configure Coins"
+    schema:
+      type: boolean
+      default: false
+  - variable: cryptodoge
+    label: "Configure Cryptodoge"
+    group: "Configure Coins"
+    schema:
+      type: dict
+      show_if: [["cryptodogeEnabled", "=", true]]
+      attrs:
+        - variable: apiPort
+          label: "API Port"
+          description: "API port on the pod"
+          schema:
+            type: int
+            editable: false
+            default: 8937
+        - variable: ports
+          label: "Ports"
+          description: "Container ports that are also forwarded on the host"
+          schema:
+            type: list
+            items:
+              - variable: apiPort
+                label: "API Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 8937
+              - variable: blockchainPort
+                label: "Blockchain Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 15994
+              - variable: farmingPort
+                label: "Farming Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 16895
+
+        - variable: volumeMounts
+          label: "Storage Configurations"
+          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: "cryptodoge-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: false
+                        default: "/root/.chia"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Configuration Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Configuration Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+              - variable: mnemonic
+                label: "Mnemonic Volume"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: datasetName
+                      label: "Mnemonic Volume Dataset Name"
+                      schema:
+                        type: string
+                        hidden: true
+                        $ref:
+                          - "normalize/ixVolume"
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "config"
+                        editable: false
+                    - variable: datasetSubPath
+                      label: "Subpath in the Dataset"
+                      schema:
+                        type: string
+                        hidden: true
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "mnemonic.txt"
+                        editable: false
+                    - variable: mountPath
+                      label: "Mnemonic Mount Path"
+                      description: "Path where the volume will be mounted inside the pod"
+                      schema:
+                        type: path
+                        hidden: true
+                        editable: false
+                        default: "/root/.chia/mnemonic.txt:ro"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Mnemonic Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Mnemonic Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+
+  # Flax Configurations
+  - variable: flaxEnabled
+    label: "Enable Flax"
+    group: "Configure Coins"
+    schema:
+      type: boolean
+      default: false
+  - variable: flax
+    label: "Configure Flax"
+    group: "Configure Coins"
+    schema:
+      type: dict
+      show_if: [["flaxEnabled", "=", true]]
+      attrs:
+        - variable: apiPort
+          label: "API Port"
+          description: "API port on the pod"
+          schema:
+            type: int
+            editable: false
+            default: 8928
+        - variable: ports
+          label: "Ports"
+          description: "Container ports that are also forwarded on the host"
+          schema:
+            type: list
+            items:
+              - variable: apiPort
+                label: "API Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 8928
+              - variable: blockchainPort
+                label: "Blockchain Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 6888
+              - variable: farmingPort
+                label: "Farming Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 6885
+
+        - variable: volumeMounts
+          label: "Storage Configurations"
+          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: "flax-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: false
+                        default: "/root/.chia"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Configuration Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Configuration Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+              - variable: mnemonic
+                label: "Mnemonic Volume"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: datasetName
+                      label: "Mnemonic Volume Dataset Name"
+                      schema:
+                        type: string
+                        hidden: true
+                        $ref:
+                          - "normalize/ixVolume"
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "config"
+                        editable: false
+                    - variable: datasetSubPath
+                      label: "Subpath in the Dataset"
+                      schema:
+                        type: string
+                        hidden: true
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "mnemonic.txt"
+                        editable: false
+                    - variable: mountPath
+                      label: "Mnemonic Mount Path"
+                      description: "Path where the volume will be mounted inside the pod"
+                      schema:
+                        type: path
+                        hidden: true
+                        editable: false
+                        default: "/root/.chia/mnemonic.txt:ro"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Mnemonic Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Mnemonic Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+
+  # Flora Configurations
+  - variable: floraEnabled
+    label: "Enable Flora"
+    group: "Configure Coins"
+    schema:
+      type: boolean
+      default: false
+  - variable: flora
+    label: "Configure Flora"
+    group: "Configure Coins"
+    schema:
+      type: dict
+      show_if: [["floraEnabled", "=", true]]
+      attrs:
+        - variable: apiPort
+          label: "API Port"
+          description: "API port on the pod"
+          schema:
+            type: int
+            editable: false
+            default: 8932
+        - variable: ports
+          label: "Ports"
+          description: "Container ports that are also forwarded on the host"
+          schema:
+            type: list
+            items:
+              - variable: apiPort
+                label: "API Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 8932
+              - variable: blockchainPort
+                label: "Blockchain Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 18644
+              - variable: farmingPort
+                label: "Farming Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 18647
+
+        - variable: volumeMounts
+          label: "Storage Configurations"
+          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: "flora-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: false
+                        default: "/root/.chia"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Configuration Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Configuration Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+              - variable: mnemonic
+                label: "Mnemonic Volume"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: datasetName
+                      label: "Mnemonic Volume Dataset Name"
+                      schema:
+                        type: string
+                        hidden: true
+                        $ref:
+                          - "normalize/ixVolume"
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "config"
+                        editable: false
+                    - variable: datasetSubPath
+                      label: "Subpath in the Dataset"
+                      schema:
+                        type: string
+                        hidden: true
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "mnemonic.txt"
+                        editable: false
+                    - variable: mountPath
+                      label: "Mnemonic Mount Path"
+                      description: "Path where the volume will be mounted inside the pod"
+                      schema:
+                        type: path
+                        hidden: true
+                        editable: false
+                        default: "/root/.chia/mnemonic.txt:ro"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Mnemonic Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Mnemonic Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+
+  # HDDCoin Configurations
+  - variable: hddcoinEnabled
+    label: "Enable HDDCoin"
+    group: "Configure Coins"
+    schema:
+      type: boolean
+      default: false
+  - variable: hddcoin
+    label: "Configure HDDCoin"
+    group: "Configure Coins"
+    schema:
+      type: dict
+      show_if: [["hddcoinEnabled", "=", true]]
+      attrs:
+        - variable: apiPort
+          label: "API Port"
+          description: "API port on the pod"
+          schema:
+            type: int
+            editable: false
+            default: 8930
+        - variable: ports
+          label: "Ports"
+          description: "Container ports that are also forwarded on the host"
+          schema:
+            type: list
+            items:
+              - variable: apiPort
+                label: "API Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 8930
+              - variable: blockchainPort
+                label: "Blockchain Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 28444
+              - variable: farmingPort
+                label: "Farming Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 28447
+
+        - variable: volumeMounts
+          label: "Storage Configurations"
+          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: "hddcoin-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: false
+                        default: "/root/.chia"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Configuration Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Configuration Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+              - variable: mnemonic
+                label: "Mnemonic Volume"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: datasetName
+                      label: "Mnemonic Volume Dataset Name"
+                      schema:
+                        type: string
+                        hidden: true
+                        $ref:
+                          - "normalize/ixVolume"
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "config"
+                        editable: false
+                    - variable: datasetSubPath
+                      label: "Subpath in the Dataset"
+                      schema:
+                        type: string
+                        hidden: true
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "mnemonic.txt"
+                        editable: false
+                    - variable: mountPath
+                      label: "Mnemonic Mount Path"
+                      description: "Path where the volume will be mounted inside the pod"
+                      schema:
+                        type: path
+                        hidden: true
+                        editable: false
+                        default: "/root/.chia/mnemonic.txt:ro"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Mnemonic Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Mnemonic Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+
+  # Maize Configurations
+  - variable: maizeEnabled
+    label: "Enable Maize"
+    group: "Configure Coins"
+    schema:
+      type: boolean
+      default: false
+  - variable: maize
+    label: "Configure Maize"
+    group: "Configure Coins"
+    schema:
+      type: dict
+      show_if: [["maizeEnabled", "=", true]]
+      attrs:
+        - variable: apiPort
+          label: "API Port"
+          description: "API port on the pod"
+          schema:
+            type: int
+            editable: false
+            default: 8933
+        - variable: ports
+          label: "Ports"
+          description: "Container ports that are also forwarded on the host"
+          schema:
+            type: list
+            items:
+              - variable: apiPort
+                label: "API Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 8933
+              - variable: blockchainPort
+                label: "Blockchain Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 8644
+              - variable: farmingPort
+                label: "Farming Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 8647
+
+        - variable: volumeMounts
+          label: "Storage Configurations"
+          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: "maize-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: false
+                        default: "/root/.chia"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Configuration Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Configuration Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+              - variable: mnemonic
+                label: "Mnemonic Volume"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: datasetName
+                      label: "Mnemonic Volume Dataset Name"
+                      schema:
+                        type: string
+                        hidden: true
+                        $ref:
+                          - "normalize/ixVolume"
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "config"
+                        editable: false
+                    - variable: datasetSubPath
+                      label: "Subpath in the Dataset"
+                      schema:
+                        type: string
+                        hidden: true
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "mnemonic.txt"
+                        editable: false
+                    - variable: mountPath
+                      label: "Mnemonic Mount Path"
+                      description: "Path where the volume will be mounted inside the pod"
+                      schema:
+                        type: path
+                        hidden: true
+                        editable: false
+                        default: "/root/.chia/mnemonic.txt:ro"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Mnemonic Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Mnemonic Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+
+  # N-Chain Configurations
+  - variable: nchainEnabled
+    label: "Enable N-Chain"
+    group: "Configure Coins"
+    schema:
+      type: boolean
+      default: false
+  - variable: nchain
+    label: "Configure N-Chain"
+    group: "Configure Coins"
+    schema:
+      type: dict
+      show_if: [["nchainEnabled", "=", true]]
+      attrs:
+        - variable: apiPort
+          label: "API Port"
+          description: "API port on the pod"
+          schema:
+            type: int
+            editable: false
+            default: 8929
+        - variable: ports
+          label: "Ports"
+          description: "Container ports that are also forwarded on the host"
+          schema:
+            type: list
+            items:
+              - variable: apiPort
+                label: "API Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 8929
+              - variable: blockchainPort
+                label: "Blockchain Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 58445
+              - variable: farmingPort
+                label: "Farming Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 38447
+
+        - variable: volumeMounts
+          label: "Storage Configurations"
+          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: "nchain-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: false
+                        default: "/root/.chia"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Configuration Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Configuration Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+              - variable: mnemonic
+                label: "Mnemonic Volume"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: datasetName
+                      label: "Mnemonic Volume Dataset Name"
+                      schema:
+                        type: string
+                        hidden: true
+                        $ref:
+                          - "normalize/ixVolume"
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "config"
+                        editable: false
+                    - variable: datasetSubPath
+                      label: "Subpath in the Dataset"
+                      schema:
+                        type: string
+                        hidden: true
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "mnemonic.txt"
+                        editable: false
+                    - variable: mountPath
+                      label: "Mnemonic Mount Path"
+                      description: "Path where the volume will be mounted inside the pod"
+                      schema:
+                        type: path
+                        hidden: true
+                        editable: false
+                        default: "/root/.chia/mnemonic.txt:ro"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Mnemonic Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Mnemonic Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+
+  # Stacoin Configurations
+  - variable: stacoinEnabled
+    label: "Enable Stacoin"
+    group: "Configure Coins"
+    schema:
+      type: boolean
+      default: false
+  - variable: stacoin
+    label: "Configure Stacoin"
+    group: "Configure Coins"
+    schema:
+      type: dict
+      show_if: [["stacoinEnabled", "=", true]]
+      attrs:
+        - variable: apiPort
+          label: "API Port"
+          description: "API port on the pod"
+          schema:
+            type: int
+            editable: false
+            default: 8934
+        - variable: ports
+          label: "Ports"
+          description: "Container ports that are also forwarded on the host"
+          schema:
+            type: list
+            items:
+              - variable: apiPort
+                label: "API Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 8934
+              - variable: blockchainPort
+                label: "Blockchain Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 1999
+              - variable: farmingPort
+                label: "Farming Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 1692
+
+        - variable: volumeMounts
+          label: "Storage Configurations"
+          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: "stacoin-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: false
+                        default: "/root/.chia"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Configuration Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Configuration Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+              - variable: mnemonic
+                label: "Mnemonic Volume"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: datasetName
+                      label: "Mnemonic Volume Dataset Name"
+                      schema:
+                        type: string
+                        hidden: true
+                        $ref:
+                          - "normalize/ixVolume"
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "config"
+                        editable: false
+                    - variable: datasetSubPath
+                      label: "Subpath in the Dataset"
+                      schema:
+                        type: string
+                        hidden: true
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "mnemonic.txt"
+                        editable: false
+                    - variable: mountPath
+                      label: "Mnemonic Mount Path"
+                      description: "Path where the volume will be mounted inside the pod"
+                      schema:
+                        type: path
+                        hidden: true
+                        editable: false
+                        default: "/root/.chia/mnemonic.txt:ro"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Mnemonic Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Mnemonic Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+
+  # Stor Configurations
+  - variable: storEnabled
+    label: "Enable Stor"
+    group: "Configure Coins"
+    schema:
+      type: boolean
+      default: true
+  - variable: stor
+    label: "Configure Stor"
+    group: "Configure Coins"
+    schema:
+      type: dict
+      show_if: [["storEnabled", "=", true]]
+      attrs:
+        - variable: apiPort
+          label: "API Port"
+          description: "API port on the pod"
+          schema:
+            type: int
+            editable: false
+            default: 8935
+        - variable: ports
+          label: "Ports"
+          description: "Container ports that are also forwarded on the host"
+          schema:
+            type: list
+            items:
+              - variable: apiPort
+                label: "API Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 8935
+              - variable: blockchainPort
+                label: "Blockchain Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 8668
+              - variable: farmingPort
+                label: "Farming Port"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: protocol
+                      label: "Protocol"
+                      schema:
+                        editable: false
+                        type: string
+                        default: TCP
+                    - variable: containerPort
+                      label: "Host/Container Port"
+                      schema:
+                        editable: false
+                        type: int
+                        default: 8337
+
+        - variable: volumeMounts
+          label: "Storage Configurations"
+          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: "stor-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: false
+                        default: "/root/.chia"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Configuration Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Configuration Volume"
+                            schema:
+                              type: hostpath
+                              required: true
+              - variable: mnemonic
+                label: "Mnemonic Volume"
+                schema:
+                  type: dict
+                  attrs:
+                    - variable: datasetName
+                      label: "Mnemonic Volume Dataset Name"
+                      schema:
+                        type: string
+                        hidden: true
+                        $ref:
+                          - "normalize/ixVolume"
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "config"
+                        editable: false
+                    - variable: datasetSubPath
+                      label: "Subpath in the Dataset"
+                      schema:
+                        type: string
+                        hidden: true
+                        show_if: [["hostPathEnabled", "=", false]]
+                        default: "mnemonic.txt"
+                        editable: false
+                    - variable: mountPath
+                      label: "Mnemonic Mount Path"
+                      description: "Path where the volume will be mounted inside the pod"
+                      schema:
+                        type: path
+                        hidden: true
+                        editable: false
+                        default: "/root/.chia/mnemonic.txt:ro"
+                    - variable: hostPathEnabled
+                      label: "Enable Custom Host Path for Mnemonic Volume"
+                      schema:
+                        type: boolean
+                        default: false
+                        show_subquestions_if: true
+                        subquestions:
+                          - variable: hostPath
+                            label: "Host Path for Mnemonic Volume"
+                            schema:
+                              type: hostpath
+                              required: true

+ 6 - 0
charts/machinaris/1.1.0/requirements.lock

@@ -0,0 +1,6 @@
+dependencies:
+- name: common
+  repository: file://../../../library/common/2105.0.0
+  version: 2105.0.0
+digest: sha256:11522ab36487826700d7ad0f86f713a4bb5d35248014bcef690fe94acbc09ef6
+generated: "2021-05-17T18:26:46.201544+05:00"

+ 13 - 6
test/machinaris/1.0.11/templates/coins-deployment.yaml → charts/machinaris/1.1.0/templates/coins-deployment.yaml

@@ -1,6 +1,11 @@
 {{- $ref := . }}
-{{- range $coin := $ref.Values.coins }}
-{{ $_ := set $ref "common" (dict "nameSuffix" $coin.name) }}
+{{- range $coinName := $ref.Values.coins }}
+{{- $coinEnabled := get $ref.Values (printf "%vEnabled" $coinName) }}
+{{- if $coinEnabled }}
+{{- $coin := get $ref.Values $coinName }}
+{{- $_ := set $ref "common" (dict "nameSuffix" $coinName) }}
+{{- $_ := set $coin.volumeMounts "plots" $ref.Values.appVolumeMounts.plots }}
+{{- $_ := set $coin.volumeMounts "plotting" $ref.Values.appVolumeMounts.plotting }}
 apiVersion: {{ template "common.capabilities.deployment.apiVersion" $ref }}
 kind: Deployment
 metadata:
@@ -16,6 +21,7 @@ spec:
       name: {{ template "common.names.fullname" $ref }}
       labels: {{ include "common.labels.selectorLabels" $ref | nindent 8 }}
     spec:
+      hostNetwork: true
       containers:
         - name: {{ $ref.Chart.Name }}
           {{ if $ref.Values.enableResourceLimits }}
@@ -27,7 +33,7 @@ spec:
           tty: true
           {{ include "common.containers.imageConfig" (dict "repository" $ref.Values.image.repository "tag" $ref.Values.image.tag "pullPolicy" $ref.Values.image.pullPolicy "postfix" $ref.common.nameSuffix) | nindent 10 }}
           {{ include "common.containers.configurePorts" $coin | nindent 10 }}
-          volumeMounts: {{ include "common.storage.configureAppVolumeMountsInContainer" $ref.Values | nindent 12 }}
+          volumeMounts: {{ include "common.storage.configureAppVolumeMountsInContainer" (dict "appVolumeMounts" $coin.appVolumeMounts "ixVolumes" $ref.Values.ixVolumes) | nindent 12 }}
           {{ range $index, $hostPathConfiguration := $ref.Values.extraAppVolumeMounts }}
             - name: extrappvolume-{{ $index }}
               mountPath: {{ $hostPathConfiguration.mountPath }}
@@ -37,15 +43,16 @@ spec:
           {{ $envList = mustAppend $envList (dict "name" "worker_address" "value" $ref.Values.nodeIP) }}
           {{ $envList = mustAppend $envList (dict "name" "controller_host" "value" $ref.Values.nodeIP) }}
           {{ $envList = mustAppend $envList (dict "name" "worker_api_port" "value" $coin.apiPort) }}
-          {{ $envList = mustAppend $envList (dict "name" "blockchains" "value" $coin.name) }}
+          {{ $envList = mustAppend $envList (dict "name" "blockchains" "value" $coinName) }}
           {{ $envList = mustAppend $envList (dict "name" "plots_dir" "value" $ref.Values.appVolumeMounts.plots.mountPath) }}
           {{ $envList = mustAppend $envList (dict "name" "mode" "value" "fullnode") }}
           {{ include "common.containers.allEnvironmentVariables" (dict "environmentVariables" $envList) | nindent 10 }}
-      volumes: {{ include "common.storage.configureAppVolumes" $ref.Values | nindent 8 }}
+      volumes: {{ include "common.storage.configureAppVolumes" (dict "appVolumeMounts" $coin.volumeMounts "ixVolumes" $ref.Values.ixVolumes) | nindent 8 }}
       {{ range $index, $hostPathConfiguration := $ref.Values.extraAppVolumeMounts }}
-        - name: extrappvolume-{{ $coin.name }}-{{ $index }}
+        - name: extrappvolume-{{ $coinName }}-{{ $index }}
           hostPath:
             path: {{ $hostPathConfiguration.hostPath }}
       {{ end }}
 ---
 {{- end }}
+{{- end }}

+ 63 - 0
charts/machinaris/1.1.0/templates/deployment.yaml

@@ -0,0 +1,63 @@
+{{- if hasKey . "common" }}
+{{- $_ := unset .common "nameSuffix" }}
+{{- end }}
+apiVersion: {{ template "common.capabilities.deployment.apiVersion" . }}
+kind: Deployment
+metadata:
+  name: {{ template "common.names.fullname" . }}
+  labels: {{ include "common.labels" . | nindent 4 }}
+spec:
+  strategy:
+    type: {{ .Values.updateStrategy }}
+  selector:
+    matchLabels: {{ include "common.labels.selectorLabels" . | nindent 6 }}
+  template:
+    metadata:
+      name: {{ template "common.names.fullname" . }}
+      labels: {{ include "common.labels.selectorLabels" . | nindent 8 }}
+    spec:
+      # FIXME: Let's please remove hostnetwork when upstream hostport issue is sorted out with kube-router
+      hostNetwork: true
+      containers:
+        - name: {{ .Chart.Name }}
+          {{ if .Values.enableResourceLimits }}
+          resources:
+            limits:
+              cpu: {{ .Values.cpuLimit }}
+              memory: {{ .Values.memLimit }}
+          {{ end }}
+          tty: true
+          {{ include "common.containers.imageConfig" .Values.image | nindent 10 }}
+          volumeMounts: {{ include "common.storage.configureAppVolumeMountsInContainer" .Values | nindent 12 }}
+          {{ range $index, $hostPathConfiguration := .Values.extraAppVolumeMounts }}
+            - name: extrappvolume-{{ $index }}
+              mountPath: {{ $hostPathConfiguration.mountPath }}
+          {{ end }}
+          ports:
+            - name: chia-network
+              protocol: TCP
+              containerPort: 8444
+              hostPort: 8444
+            - name: machinaris-ui
+              protocol: TCP
+              containerPort: 8926
+            - name: machinaris-api
+              protocol: TCP
+              containerPort: 8927
+              hostPort: 8927
+            - protocol: TCP
+              containerPort: 8447
+              hostPort: 8447
+          {{ $envList := (default list .Values.environmentVariables) }}
+          {{ $envList = mustAppend $envList (dict "name" "TZ" "value" $.Values.timezone) }}
+          {{ $envList = mustAppend $envList (dict "name" "worker_address" "value" $.Values.nodeIP) }}
+          {{ $envList = mustAppend $envList (dict "name" "mode" "value" "fullnode") }}
+          {{ $envList = mustAppend $envList (dict "name" "plots_dir" "value" $.Values.appVolumeMounts.plots.mountPath) }}
+          {{ $envList = mustAppend $envList (dict "name" "blockchains" "value" "chia") }}
+          {{ include "common.containers.allEnvironmentVariables" (dict "environmentVariables" $envList) | nindent 10 }}
+      volumes: {{ include "common.storage.configureAppVolumes" .Values | nindent 8 }}
+      {{ range $index, $hostPathConfiguration := .Values.extraAppVolumeMounts }}
+        - name: extrappvolume-{{ $index }}
+          hostPath:
+            path: {{ $hostPathConfiguration.hostPath }}
+      {{ end }}

+ 6 - 0
charts/machinaris/1.1.0/templates/service.yaml

@@ -0,0 +1,6 @@
+{{ $svc := .Values }}
+{{ $ports := list }}
+{{ $ports = mustAppend $ports (dict "name" "pms" "port" $svc.machinaris_ui_port "nodePort" $svc.machinaris_ui_port "targetPort" "machinaris-ui") }}
+{{ $params := . }}
+{{ $_ := set $params "commonService" (dict "ports" $ports "type" "NodePort" ) }}
+{{ include "common.classes.service" $params }}

+ 37 - 0
charts/machinaris/1.1.0/test_values.yaml

@@ -0,0 +1,37 @@
+appVolumeMounts:
+  config:
+    emptyDir: true
+    mountPath: /root/.chia
+  plots:
+    emptyDir: true
+    mountPath: /plots
+  plotting:
+    emptyDir: true
+    mountPath: /plotting
+image:
+  pullPolicy: IfNotPresent
+  repository: ghcr.io/guydavis/machinaris
+  tag: v0.6.6
+machinaris_ui_port: 31003
+timezone: America/Edmonton
+updateStrategy: Recreate
+nodeIP: 127.0.0.1
+coins:
+  - cactus
+cactusEnabled: true
+cactus:
+  apiPort: 8935
+  ports:
+    - protocol: TCP
+      containerPort: 8935
+    - protocol: TCP
+      containerPort: 8668
+    - protocol: TCP
+      containerPort: 8337
+  volumeMounts:
+    cactus-config:
+      emptyDir: true
+      mountPath: /root/.chia
+    mnemonic:
+      emptyDir: true
+      mountPath: /root/.chia/mnemonic.txt

+ 1 - 1
library/common/2101.0.0/templates/lib/storage/_appStorage.tpl

@@ -41,7 +41,7 @@ Define hostPath for appVolumes
     {{- include "common.schema.validateKeys" (dict "values" $values "checkKeys" (list "ixVolumes")) -}}
     {{- include "common.schema.validateKeys" (dict "values" $av "checkKeys" (list "datasetName")) -}}
     {{- $volDict := dict "datasetName" $av.datasetName "ixVolumes" $values.ixVolumes -}}
-    path: {{ include "common.storage.retrieveHostPathFromiXVolume" $volDict }}
+    path: {{ include "common.storage.retrieveHostPathFromiXVolume" $volDict }}{{- if $av.datasetSubPath -}}{{- printf "/%s" $av.datasetSubPath -}}{{- end -}}
     {{ end }}
   {{ end }}
 {{ end }}

+ 7 - 7
library/common/2105.0.0/templates/lib/storage/_appStorage.tpl

@@ -29,23 +29,23 @@ Define hostPath for appVolumes
 {{- $values := . -}}
 {{- if $values.appVolumeMounts -}}
 {{- range $name, $av := $values.appVolumeMounts -}}
-{{ if (default true $av.enabled) -}}
+{{ if (default true $av.enabled) }}
 - name: {{ $name }}
-  {{- if or $av.emptyDir $.emptyDirVolumes }}
+  {{ if or $av.emptyDir $.emptyDirVolumes }}
   emptyDir: {}
   {{- else -}}
   hostPath:
-    {{- if $av.hostPathEnabled }}
+    {{ if $av.hostPathEnabled }}
     path: {{ required "hostPath not set" $av.hostPath }}
     {{ else }}
     {{- include "common.schema.validateKeys" (dict "values" $values "checkKeys" (list "ixVolumes")) -}}
     {{- include "common.schema.validateKeys" (dict "values" $av "checkKeys" (list "datasetName")) -}}
     {{- $volDict := dict "datasetName" $av.datasetName "ixVolumes" $values.ixVolumes -}}
-    path: {{ include "common.storage.retrieveHostPathFromiXVolume" $volDict }}
-    {{ end -}}
-  {{- end -}}
+    path: {{ include "common.storage.retrieveHostPathFromiXVolume" $volDict }}{{- if $av.datasetSubPath -}}{{- printf "/%s" $av.datasetSubPath -}}{{- end -}}
+    {{ end }}
+  {{ end }}
 {{ end }}
-{{ end -}}
+{{- end -}}
 {{- end -}}
 {{- end -}}
 

+ 1 - 1
test/machinaris/1.0.11/Chart.yaml

@@ -1,5 +1,5 @@
 apiVersion: v1
-appVersion: v0.6.4
+appVersion: v0.6.1
 dependencies:
 - name: common
   repository: file://../../../library/common/2112.0.0

BIN
test/machinaris/1.0.11/charts/common-2105.0.0.tgz


+ 1 - 84
test/machinaris/1.0.11/ix_values.yaml

@@ -1,88 +1,5 @@
 image:
   pullPolicy: IfNotPresent
   repository: ghcr.io/guydavis/machinaris
-  tag: v0.6.4
-appVolumeMounts:
-  config:
-    emptyDir: true
-    mountPath: /data
-  plots:
-    emptyDir: true
-    mountPath: /plots
-coins:
- - name: cactus
-   apiPort: 8936
-   ports:
-    - protocol: TCP
-      containerPort: 8936
-    - protocol: TCP
-      containerPort: 11444
-    - protocol: TCP
-      containerPort: 11447
- - name: chives
-   apiPort: 8931
-   ports:
-    - protocol: TCP
-      containerPort: 8931
-    - protocol: TCP
-      containerPort: 9699
-    - protocol: TCP
-      containerPort: 9647
- - name: flax
-   apiPort: 8928
-   ports:
-    - protocol: TCP
-      containerPort: 8928
-    - protocol: TCP
-      containerPort: 6888
-    - protocol: TCP
-      containerPort: 6885
- - name: flora
-   apiPort: 8936
-   ports:
-    - protocol: TCP
-      containerPort: 8932
-    - protocol: TCP
-      containerPort: 18644
-    - protocol: TCP
-      containerPort: 18647
- - name: hddcoin
-   apiPort: 8936
-   ports:
-    - protocol: TCP
-      containerPort: 8930
-    - protocol: TCP
-      containerPort: 28444
-    - protocol: TCP
-      containerPort: 28447
- - name: nchain
-   apiPort: 8936
-   ports:
-    - protocol: TCP
-      containerPort: 8929
-    - protocol: TCP
-      containerPort: 58445
-    - protocol: TCP
-      containerPort: 38447
- - name: stacoin
-   apiPort: 8936
-   ports:
-    - protocol: TCP
-      containerPort: 8934
-    - protocol: TCP
-      containerPort: 1999
-    - protocol: TCP
-      containerPort: 1692
- - name: stor
-   apiPort: 8936
-   ports:
-    - protocol: TCP
-      containerPort: 8935
-    - protocol: TCP
-      containerPort: 8668
-    - protocol: TCP
-      containerPort: 8337
-machinaris_ui_port: 31003
-timezone: America/Edmonton
+  tag: v0.6.1
 updateStrategy: Recreate
-nodeIP: 127.0.0.1

+ 0 - 1
test/machinaris/1.0.11/templates/service.yaml

@@ -4,4 +4,3 @@
 {{ $params := . }}
 {{ $_ := set $params "commonService" (dict "ports" $ports "type" "NodePort" ) }}
 {{ include "common.classes.service" $params }}
-{{  }}

+ 1 - 1
test/machinaris/1.0.11/test_values.yaml

@@ -8,7 +8,7 @@ appVolumeMounts:
 image:
   pullPolicy: IfNotPresent
   repository: ghcr.io/guydavis/machinaris
-  tag: v0.6.4
+  tag: v0.6.1
 machinaris_ui_port: 31003
 timezone: America/Edmonton
 updateStrategy: Recreate