{
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": "string"
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "properties": {
        "channel": {
          "default": "stable",
          "description": "Channel defines the update channel to use for this update config",
          "type": "string"
        },
        "planSpec": {
          "description": "PlanSpec defines the plan spec to use for this update config",
          "properties": {
            "commands": {
              "description": "Commands are a collection of all of the commands that need to be executed\nin order for this plan to transition to Completed.",
              "items": {
                "description": "AutopilotPlanCommand is a command that can be run within a `Plan`",
                "properties": {
                  "airgapupdate": {
                    "description": "AirgapUpdate is the `AirgapUpdate` command which is responsible for updating a k0s airgap bundle.",
                    "properties": {
                      "workers": {
                        "description": "Workers defines how the k0s workers will be discovered and airgap updated.",
                        "properties": {
                          "discovery": {
                            "description": "Discovery details how nodes for this target should be discovered.",
                            "properties": {
                              "selector": {
                                "description": "Selector provides a kubernetes 'selector' means of identifying target signal nodes.",
                                "properties": {
                                  "fields": {
                                    "description": "Fields is a standard kubernetes field selector (key=value,key=value,...)",
                                    "type": "string"
                                  },
                                  "labels": {
                                    "description": "Labels is a standard kubernetes label selector (key=value,key=value,...)",
                                    "type": "string"
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              },
                              "static": {
                                "description": "Static provides a static means of identifying target signal nodes.",
                                "properties": {
                                  "nodes": {
                                    "description": "Nodes provides a static set of target signal nodes.",
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "limits": {
                            "default": {
                              "concurrent": 1
                            },
                            "description": "Limits impose various limits and restrictions on how discovery and execution should behave.",
                            "properties": {
                              "concurrent": {
                                "default": 1,
                                "description": "Concurrent specifies the number of concurrent target executions that can be performed\nwithin this target. (ie. '2' == at most have 2 execute at the same time)",
                                "type": "integer"
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          }
                        },
                        "required": [
                          "discovery"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "workers"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "k0supdate": {
                    "description": "K0sUpdate is the `K0sUpdate` command which is responsible for updating a k0s node (controller/worker)",
                    "properties": {
                      "forceupdate": {
                        "description": "ForceUpdate ensures that version checking is ignored and that all updates are applied.",
                        "type": "boolean"
                      },
                      "targets": {
                        "description": "Targets defines how the controllers/workers should be discovered and upgraded.",
                        "properties": {
                          "controllers": {
                            "description": "Controllers defines how k0s controllers will be discovered and executed.",
                            "properties": {
                              "discovery": {
                                "description": "Discovery details how nodes for this target should be discovered.",
                                "properties": {
                                  "selector": {
                                    "description": "Selector provides a kubernetes 'selector' means of identifying target signal nodes.",
                                    "properties": {
                                      "fields": {
                                        "description": "Fields is a standard kubernetes field selector (key=value,key=value,...)",
                                        "type": "string"
                                      },
                                      "labels": {
                                        "description": "Labels is a standard kubernetes label selector (key=value,key=value,...)",
                                        "type": "string"
                                      }
                                    },
                                    "type": "object",
                                    "additionalProperties": false
                                  },
                                  "static": {
                                    "description": "Static provides a static means of identifying target signal nodes.",
                                    "properties": {
                                      "nodes": {
                                        "description": "Nodes provides a static set of target signal nodes.",
                                        "items": {
                                          "type": "string"
                                        },
                                        "type": "array"
                                      }
                                    },
                                    "type": "object",
                                    "additionalProperties": false
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              },
                              "limits": {
                                "default": {
                                  "concurrent": 1
                                },
                                "description": "Limits impose various limits and restrictions on how discovery and execution should behave.",
                                "properties": {
                                  "concurrent": {
                                    "default": 1,
                                    "description": "Concurrent specifies the number of concurrent target executions that can be performed\nwithin this target. (ie. '2' == at most have 2 execute at the same time)",
                                    "type": "integer"
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              }
                            },
                            "required": [
                              "discovery"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "workers": {
                            "description": "Workers defines how k0s workers will be discovered and executed.",
                            "properties": {
                              "discovery": {
                                "description": "Discovery details how nodes for this target should be discovered.",
                                "properties": {
                                  "selector": {
                                    "description": "Selector provides a kubernetes 'selector' means of identifying target signal nodes.",
                                    "properties": {
                                      "fields": {
                                        "description": "Fields is a standard kubernetes field selector (key=value,key=value,...)",
                                        "type": "string"
                                      },
                                      "labels": {
                                        "description": "Labels is a standard kubernetes label selector (key=value,key=value,...)",
                                        "type": "string"
                                      }
                                    },
                                    "type": "object",
                                    "additionalProperties": false
                                  },
                                  "static": {
                                    "description": "Static provides a static means of identifying target signal nodes.",
                                    "properties": {
                                      "nodes": {
                                        "description": "Nodes provides a static set of target signal nodes.",
                                        "items": {
                                          "type": "string"
                                        },
                                        "type": "array"
                                      }
                                    },
                                    "type": "object",
                                    "additionalProperties": false
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              },
                              "limits": {
                                "default": {
                                  "concurrent": 1
                                },
                                "description": "Limits impose various limits and restrictions on how discovery and execution should behave.",
                                "properties": {
                                  "concurrent": {
                                    "default": 1,
                                    "description": "Concurrent specifies the number of concurrent target executions that can be performed\nwithin this target. (ie. '2' == at most have 2 execute at the same time)",
                                    "type": "integer"
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              }
                            },
                            "required": [
                              "discovery"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "targets"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            }
          },
          "required": [
            "commands"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "updateServer": {
          "default": "https://updates.k0sproject.io",
          "description": "UpdateServer defines the update server to use for this update config",
          "type": "string"
        },
        "upgradeStrategy": {
          "description": "UpdateStrategy defines the update strategy to use for this update config",
          "properties": {
            "cron": {
              "description": "Cron defines the cron expression for the cron upgrade strategy",
              "type": "string"
            },
            "periodic": {
              "description": "Periodic defines the periodic upgrade strategy",
              "properties": {
                "days": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "length": {
                  "type": "string"
                },
                "startTime": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "type": {
              "description": "Type defines the type of upgrade strategy",
              "enum": [
                "periodic",
                "cron"
              ],
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "required": [
    "spec"
  ],
  "type": "object"
}
