components:
  schemas:
    AccessPoint:
      description: Access Point
      properties:
        device:
          type: string
        flags:
          format: uint32
          minimum: 0
          type: integer
        hwAddress:
          type: string
        rsnFlags:
          format: uint32
          minimum: 0
          type: integer
        ssid:
          type: string
        strength:
          format: uint8
          maximum: 255
          minimum: 0
          type: integer
        wpaFlags:
          format: uint32
          minimum: 0
          type: integer
      required:
      - device
      - ssid
      - hwAddress
      - strength
      - flags
      - rsnFlags
      - wpaFlags
      type: object
    AccessValue:
      description: Allows to specify explicit enablement of remote access for supported services
      oneOf:
      - const: enabled
        description: Explicitly enabled
        type: string
      - const: default
        description: Default system configuration behavior that is product specific
        type: string
    Action:
      oneOf:
      - enum:
        - activateStorage
        - install
        type: string
      - additionalProperties: false
        description: Performs an iSCSI discovery, finding nodes from the given portal.
        properties:
          discoverISCSI:
            $ref: '#/components/schemas/DiscoverConfig'
        required:
        - discoverISCSI
        type: object
      - additionalProperties: false
        description: |-
          Probes hardware and refreshes services (storage, DASD, software, etc).

          If `only` is not given, it probes everything.
        properties:
          probe:
            properties:
              only:
                items:
                  $ref: '#/components/schemas/Scope'
                type:
                - array
                - 'null'
            type: object
        required:
        - probe
        type: object
      - additionalProperties: false
        properties:
          configureL10n:
            $ref: '#/components/schemas/l10n.SystemConfig'
        required:
        - configureL10n
        type: object
      - additionalProperties: false
        properties:
          finish:
            $ref: '#/components/schemas/FinishMethod'
        required:
        - finish
        type: object
    AddonConfig:
      description: Addon settings for registration
      properties:
        id:
          description: ID of the addon.
          examples:
          - sle-ha
          type: string
        registrationCode:
          description: Registration code for the addon. Free extensions do not require a registration code.
          type:
          - string
          - 'null'
        version:
          description: |-
            Optional version of the addon. It is mandatory if there are multiple available versions.
            If not specified, the version is found from the available addons.
          type:
          - string
          - 'null'
      required:
      - id
      title: List of add-ons to activate
      type: object
    AddonInfo:
      description: Addon registration
      properties:
        available:
          description: Whether the addon is mirrored on the RMT server, on SCC it is always `true`
          type: boolean
        description:
          description: Short description of the addon (translated)
          type: string
        free:
          description: Whether a registration code is required for registering the addon
          type: boolean
        id:
          description: Addon identifier
          type: string
        label:
          description: User visible name
          type: string
        recommended:
          description: Whether the addon is recommended for the users
          type: boolean
        registration:
          allOf:
          - $ref: '#/components/schemas/AddonRegistration'
          description: Whether the addon is registered
        release:
          description: Release status of the addon, e.g. "beta"
          type: string
        version:
          description: Version of the addon
          type: string
      required:
      - id
      - version
      - label
      - available
      - free
      - recommended
      - description
      - release
      - registration
      type: object
    AddonRegistration:
      oneOf:
      - properties:
          code:
            type:
            - string
            - 'null'
          status:
            const: registered
            type: string
        required:
        - status
        type: object
      - properties:
          status:
            const: notRegistered
            type: string
        required:
        - status
        type: object
    AnswerRule:
      description: |-
        Defines the answer to use for any question which matches the rule.

        If the rule matches with the question ([class](Self::class),
        [text](Self::text) or [data](Self::data), it applies the specified `answer`).
      properties:
        action:
          description: Action to use for answering the question.
          type: string
        class:
          description: Question class (see [QuestionSpec::class]).
          examples:
          - multipathActivation
          type:
          - string
          - 'null'
        data:
          additionalProperties:
            type: string
          description: |-
            A question can include custom data. If any of the entries matches,
            the rule is applied (see [QuestionSpec::data]).
          type:
          - object
          - 'null'
        text:
          description: Question text (see [QuestionSpec::text]).
          type:
          - string
          - 'null'
        value:
          description: Value to use for the question (e.g. password or string input, depending on the question type).
          type:
          - string
          - 'null'
      required:
      - action
      title: Automatic answer to questions
      type: object
    AuthResponse:
      $schema: https://json-schema.org/draft/2020-12/schema
      properties:
        token:
          description: Bearer token to use on subsequent calls
          type: string
      required:
      - token
      title: AuthResponse
      type: object
    BondSettings:
      properties:
        mode:
          type: string
        options:
          type:
          - string
          - 'null'
        ports:
          items:
            type: string
          type: array
      required:
      - mode
      type: object
    BootloaderSystemInfo:
      additionalProperties: false
      description: API description of the bootloader system
      properties:
        availableBootloaders:
          description: Possible bootloaders to select in the current system.
          items:
            $ref: '#/components/schemas/BootloaderSystemInfoBootloader'
          type: array
      required:
      - availableBootloaders
      title: System
      type: object
    BootloaderSystemInfoBootloader:
      additionalProperties: false
      properties:
        encryptionAuth:
          description: Encryption authentication methods that can be managed by the bootloader in this system.
          items:
            $ref: '#/components/schemas/BootloaderSystemInfoEncryptionAuthMethod'
          type: array
        type:
          $ref: '#/components/schemas/BootloaderSystemInfoBootloaderType'
      required:
      - type
      - encryptionAuth
      type: object
    BootloaderSystemInfoBootloaderType:
      enum:
      - grub2
      - grub2-bls
      - systemd-boot
    BootloaderSystemInfoEncryptionAuthMethod:
      enum:
      - password
      - tpm
    BridgeSettings:
      properties:
        forwardDelay:
          format: uint32
          minimum: 0
          type:
          - integer
          - 'null'
        helloTime:
          format: uint32
          minimum: 0
          type:
          - integer
          - 'null'
        maxAge:
          format: uint32
          minimum: 0
          type:
          - integer
          - 'null'
        ports:
          items:
            type: string
          type: array
        priority:
          format: uint32
          minimum: 0
          type:
          - integer
          - 'null'
        stp:
          type:
          - boolean
          - 'null'
      type: object
    Config:
      additionalProperties: false
      description: Profile definition for automated installation.
      properties:
        $schema:
          description: The schema location is ignored by the installer, it always uses the built-in schema, but it can be useful for automatic validation and code completion in some editors.
          title: URL of the JSON validation schema
          type: string
        access:
          anyOf:
          - $ref: '#/components/schemas/access.Config'
          - type: 'null'
          description: Remote access configuration (SSH, Web Console).
        bootloader:
          anyOf:
          - $ref: '#/components/schemas/bootloader.Config'
          - type: 'null'
          description: Bootloader configuration.
        dasd:
          $ref: '#/components/schemas/DasdConfig'
        files:
          description: User-defined files to deploy after installation just before post install scripts.
          items:
            $ref: '#/components/schemas/UserFile'
          type:
          - array
          - 'null'
        hostname:
          anyOf:
          - $ref: '#/components/schemas/hostname.Config'
          - type: 'null'
          description: Hostname configuration.
        iscsi:
          $ref: '#/components/schemas/IscsiConfig'
        l10n:
          anyOf:
          - $ref: '#/components/schemas/l10n.Config'
          - type: 'null'
          description: Localization configuration (keyboard, language, timezone).
        legacyAutoyastStorage:
          description: Accepts all options of the AutoYaST partitioning section (i.e., XML to JSON).
        localization:
          $ref: '#/components/schemas/l10n.Config'
          deprecated: true
          description: 'Deprecated: use l10n instead.'
          title: Localization settings (old schema)
        network:
          anyOf:
          - $ref: '#/components/schemas/network.Config'
          - type: 'null'
          description: Network configuration (interfaces, connections, state).
        ntp:
          anyOf:
          - $ref: '#/components/schemas/ntp.Config'
          - type: 'null'
          description: NTP time synchronization configuration.
        product:
          anyOf:
          - $ref: '#/components/schemas/ProductConfig'
          - type: 'null'
          description: Product related configuration
        proxy:
          anyOf:
          - $ref: '#/components/schemas/proxy.Config'
          - type: 'null'
          description: Network proxy configuration.
        questions:
          anyOf:
          - $ref: '#/components/schemas/questions.Config'
          - type: 'null'
          description: Automated question answering rules and policy.
        root:
          anyOf:
          - $ref: '#/components/schemas/RootUserConfig'
          - type: 'null'
        scripts:
          anyOf:
          - $ref: '#/components/schemas/ScriptsConfig'
          - type: 'null'
          description: User-defined scripts to run at different points of the installation.
        security:
          anyOf:
          - $ref: '#/components/schemas/security.Config'
          - type: 'null'
          description: Security configuration (e.g. SSL certificate fingerprints).
        software:
          anyOf:
          - $ref: '#/components/schemas/SoftwareConfig'
          - type: 'null'
          description: Software related configuration
        storage:
          $ref: '#/components/schemas/StorageConfig'
        user:
          anyOf:
          - $ref: '#/components/schemas/FirstUserConfig'
          - type: 'null'
        zfcp:
          $ref: '#/components/schemas/ZfcpConfig'
      title: Profile
      type: object
    ConnectionState:
      oneOf:
      - const: unknown
        description: The connection state is unknown.
        type: string
      - const: activating
        description: The connection is getting activated.
        type: string
      - const: activated
        description: The connection is activated.
        type: string
      - const: deactivating
        description: The connection is getting deactivated.
        type: string
      - const: deactivated
        description: The connection is deactivated.
        type: string
    ConnectivityState:
      description: Network connectivity state.
      oneOf:
      - const: unknown
        description: The connectivity state is unknown.
        type: string
      - const: none
        description: No connectivity.
        type: string
      - const: portal
        description: The network is behind a captive portal and cannot reach the full internet.
        type: string
      - const: limited
        description: The network is connected but it has no access to the full internet.
        type: string
      - const: full
        description: The network is connected and it has access to the full internet.
        type: string
    DasdConfig:
      additionalProperties: false
      description: DASD config.
      properties:
        devices:
          description: List of DASD devices.
          items:
            $ref: '#/components/schemas/DasdConfigDevice'
          type: array
      title: Config
      type: object
    DasdConfigDevice:
      additionalProperties: false
      properties:
        channel:
          description: DASD device channel.
          type: string
        diag:
          description: If device have set diag flag. If not specified then it keep what device has before.
          type: boolean
        format:
          description: If device should be formatted. If not specified then it format device only if not already formatted.
          type: boolean
        state:
          default: active
          description: Specify target state of device. Either activate it or deactivate it.
          enum:
          - active
          - offline
      required:
      - channel
      type: object
    DasdSystemInfo:
      additionalProperties: false
      description: API description of the DASD system
      properties:
        devices:
          description: DASD devices
          items:
            $ref: '#/components/schemas/DasdSystemInfoDevice'
          type: array
      required:
      - devices
      title: System
      type: object
    DasdSystemInfoDevice:
      additionalProperties: false
      properties:
        accessType:
          type: string
        active:
          type: boolean
        channel:
          type: string
        deviceName:
          type: string
        diag:
          type: boolean
        formatted:
          type: boolean
        partitionInfo:
          type: string
        status:
          type: string
        type:
          type: string
      required:
      - channel
      - deviceName
      - type
      - diag
      - accessType
      - partitionInfo
      - status
      - active
      - formatted
      type: object
    DesktopSelection:
      description: Desktop selection mode for a product
      enum:
      - optional
      - suggested
      type: string
    Device:
      description: Network device
      properties:
        busPath:
          description: Physical location of the device, e.g. "pci-0000:c5:00.3".
          type:
          - string
          - 'null'
        carrier:
          description: Whether the device currently has a link (carrier).
          type:
          - boolean
          - 'null'
        connection:
          type:
          - string
          - 'null'
        driver:
          description: Kernel driver in use, e.g. "e1000e".
          type:
          - string
          - 'null'
        ipConfig:
          anyOf:
          - $ref: '#/components/schemas/IpConfig'
          - type: 'null'
        macAddress:
          type: string
        mtu:
          format: uint32
          minimum: 0
          type:
          - integer
          - 'null'
        name:
          type: string
        speed:
          description: |-
            Link speed in Mb/s, when the device reports one.

            Only wired devices report a speed, and only while the link is up.
          format: uint32
          minimum: 0
          type:
          - integer
          - 'null'
        state:
          $ref: '#/components/schemas/DeviceState'
        type:
          $ref: '#/components/schemas/DeviceType'
      required:
      - name
      - type
      - macAddress
      - state
      type: object
    DeviceState:
      description: Network device state.
      oneOf:
      - const: unknown
        description: The device's state is unknown.
        type: string
      - const: unmanaged
        description: The device is recognized but not managed by Agama.
        type: string
      - const: unavailable
        description: The device is detected but it cannot be used (wireless switched off, missing firmware, etc.).
        type: string
      - const: connecting
        description: The device is connecting to the network.
        type: string
      - const: connected
        description: The device is successfully connected to the network.
        type: string
      - const: disconnecting
        description: The device is disconnecting from the network.
        type: string
      - const: disconnected
        description: The device is disconnected from the network.
        type: string
      - const: failed
        description: The device failed to connect to a network.
        type: string
    DeviceType:
      enum:
      - loopback
      - ethernet
      - wireless
      - dummy
      - bond
      - vlan
      - bridge
      type: string
    Dhcp4Settings:
      properties:
        client_id:
          $ref: '#/components/schemas/DhcpClientId'
        hostname:
          type:
          - string
          - 'null'
        iaid:
          $ref: '#/components/schemas/DhcpIaid'
        send_hostname:
          type:
          - boolean
          - 'null'
        send_release:
          type:
          - boolean
          - 'null'
      required:
      - client_id
      - iaid
      type: object
    Dhcp6Settings:
      properties:
        duid:
          $ref: '#/components/schemas/DhcpDuid'
        hostname:
          type:
          - string
          - 'null'
        iaid:
          $ref: '#/components/schemas/DhcpIaid'
        send_hostname:
          type:
          - boolean
          - 'null'
        send_release:
          type:
          - boolean
          - 'null'
      required:
      - duid
      - iaid
      type: object
    DhcpClientId:
      oneOf:
      - enum:
        - Mac
        - PermMac
        - Ipv6Duid
        - Duid
        - Stable
        - None
        - Unset
        type: string
      - additionalProperties: false
        properties:
          Id:
            type: string
        required:
        - Id
        type: object
    DhcpDuid:
      oneOf:
      - enum:
        - Lease
        - Llt
        - Ll
        - StableLlt
        - StableLl
        - StableUuid
        - Unset
        type: string
      - additionalProperties: false
        properties:
          Id:
            type: string
        required:
        - Id
        type: object
    DhcpIaid:
      oneOf:
      - enum:
        - Mac
        - PermMac
        - Ifname
        - Stable
        - Unset
        type: string
      - additionalProperties: false
        properties:
          Id:
            type: string
        required:
        - Id
        type: object
    DiscoverConfig:
      properties:
        address:
          type: string
        initiatorPassword:
          type:
          - string
          - 'null'
        initiatorUsername:
          type:
          - string
          - 'null'
        password:
          type:
          - string
          - 'null'
        port:
          format: uint32
          minimum: 0
          type: integer
        username:
          type:
          - string
          - 'null'
      required:
      - address
      - port
      type: object
    FinishMethod:
      description: Finish method
      oneOf:
      - const: halt
        description: Halt the system
        type: string
      - const: reboot
        description: Reboots the system
        type: string
      - const: stop
        description: Do nothing at the end of the installation
        type: string
      - const: poweroff
        description: Poweroff the system
        type: string
    FirstUserConfig:
      description: |-
        First user settings

        Holds the settings for the first user.
      properties:
        fullName:
          description: First user's full name
          examples:
          - Jane Doe
          type:
          - string
          - 'null'
        hashedPassword:
          default: false
          description: Whether the password is hashed or is plain text
          type: boolean
        password:
          description: User password
          examples:
          - nots3cr3t
          type: string
        sshPublicKey:
          anyOf:
          - $ref: '#/components/schemas/StringOrList'
          - type: 'null'
          deprecated: true
        sshPublicKeys:
          anyOf:
          - $ref: '#/components/schemas/StringOrList'
          - type: 'null'
        userName:
          description: First user's username
          examples:
          - jane.doe
          type:
          - string
          - 'null'
      title: First user settings
      type: object
    HardwareInfo:
      description: Represents the hardware information of the underlying system.
      properties:
        cpu:
          description: CPU description.
          type:
          - string
          - 'null'
        memory:
          description: Memory size (in bytes).
          format: uint64
          minimum: 0
          type:
          - integer
          - 'null'
        model:
          description: Computer model.
          type:
          - string
          - 'null'
      type: object
    IEEE8021XSettings:
      description: IEEE 802.1x (EAP) settings
      properties:
        anonymousIdentity:
          description: Anonymous identity string for EAP authentication methods
          type:
          - string
          - 'null'
        caCert:
          description: Path to CA certificate
          type:
          - string
          - 'null'
        caCertPassword:
          description: Password string for CA certificate if it is encrypted
          type:
          - string
          - 'null'
        clientCert:
          description: Path to client certificate
          type:
          - string
          - 'null'
        clientCertPassword:
          description: Password string for client certificate if it is encrypted
          type:
          - string
          - 'null'
        eap:
          description: List of EAP methods used
          items:
            type: string
          type: array
        identity:
          description: Identity string, often for example the user's login name
          type:
          - string
          - 'null'
        password:
          description: Password string used for EAP authentication
          type:
          - string
          - 'null'
        peapLabel:
          description: Force the use of the new PEAP label during key derivation
          type: boolean
        peapVersion:
          description: Which PEAP version is used when PEAP is set as the EAP method in the 'eap' property
          type:
          - string
          - 'null'
        phase2Auth:
          description: Phase 2 inner auth method
          type:
          - string
          - 'null'
        privateKey:
          description: Path to private key
          type:
          - string
          - 'null'
        privateKeyPassword:
          description: Password string for private key if it is encrypted
          type:
          - string
          - 'null'
      required:
      - eap
      type: object
    InitScript:
      anyOf:
      - description: File or script content, starting with a shebang for scripts.
        properties:
          content:
            type: string
        required:
        - content
        type: object
      - description: Absolute or relative URL to fetch the file or script from.
        properties:
          url:
            type: string
        required:
        - url
        type: object
      description: |-
        Represents a script that runs during the first boot of the target system,
        once the installation is finished.
      properties:
        name:
          description: Script name, to be used as file name.
          type: string
      required:
      - name
      type: object
    IpConfig:
      properties:
        addresses:
          items:
            $ref: '#/components/schemas/IpInet'
          type: array
        dhcp4Settings:
          anyOf:
          - $ref: '#/components/schemas/Dhcp4Settings'
          - type: 'null'
        dhcp6Settings:
          anyOf:
          - $ref: '#/components/schemas/Dhcp6Settings'
          - type: 'null'
        dnsPriority4:
          format: int32
          type:
          - integer
          - 'null'
        dnsPriority6:
          format: int32
          type:
          - integer
          - 'null'
        dnsSearchList:
          items:
            type: string
          type: array
        gateway4:
          format: ip
          type:
          - string
          - 'null'
        gateway6:
          format: ip
          type:
          - string
          - 'null'
        ignoreAutoDns:
          type: boolean
        ignoreAutoRoutes4:
          type:
          - boolean
          - 'null'
        ignoreAutoRoutes6:
          type:
          - boolean
          - 'null'
        ip6Privacy:
          format: int32
          type:
          - integer
          - 'null'
        linkLocal4:
          $ref: '#/components/schemas/LinkLocal'
        method4:
          anyOf:
          - $ref: '#/components/schemas/Ipv4Method'
          - type: 'null'
        method6:
          anyOf:
          - $ref: '#/components/schemas/Ipv6Method'
          - type: 'null'
        nameservers:
          items:
            format: ip
            type: string
          type: array
        neverDefault4:
          type:
          - boolean
          - 'null'
        neverDefault6:
          type:
          - boolean
          - 'null'
        routes4:
          items:
            $ref: '#/components/schemas/IpRoute'
          type: array
        routes6:
          items:
            $ref: '#/components/schemas/IpRoute'
          type: array
      required:
      - ignoreAutoDns
      - linkLocal4
      type: object
    IpInet:
      description: An IP address (IPv4 or IPv6) with prefix length in CIDR notation
      examples:
      - 192.168.1.254/24
      - 2001:db8::/32
      type: string
    IpRoute:
      properties:
        destination:
          $ref: '#/components/schemas/IpInet'
        metric:
          format: uint32
          minimum: 0
          type:
          - integer
          - 'null'
        nextHop:
          type:
          - string
          - 'null'
      required:
      - destination
      type: object
    Ipv4Method:
      enum:
      - disabled
      - auto
      - manual
      - linkLocal
      - shared
      type: string
    Ipv6Method:
      enum:
      - disabled
      - auto
      - manual
      - linkLocal
      - ignore
      - dhcp
      - shared
      type: string
    IscsiConfig:
      additionalProperties: false
      description: iSCSI config.
      properties:
        initiator:
          description: Initiator name.
          type: string
        targets:
          description: List of targets.
          items:
            $ref: '#/components/schemas/IscsiConfigTarget'
          type: array
      title: Config
      type: object
    IscsiConfigAuthentication:
      additionalProperties: false
      properties:
        password:
          type: string
        username:
          type: string
      required:
      - username
      - password
      type: object
    IscsiConfigTarget:
      additionalProperties: false
      properties:
        address:
          description: IP address.
          type: string
        authByInitiator:
          $ref: '#/components/schemas/IscsiConfigAuthentication'
        authByTarget:
          $ref: '#/components/schemas/IscsiConfigAuthentication'
        interface:
          type: string
        name:
          type: string
        port:
          minimum: 0
          type: integer
        startup:
          enum:
          - onboot
          - manual
          - automatic
      required:
      - address
      - port
      - name
      - interface
      type: object
    IscsiSystemInfo:
      additionalProperties: false
      description: API description of the iSCSI system
      properties:
        initiator:
          additionalProperties: false
          properties:
            ibft:
              type: boolean
            name:
              type: string
          required:
          - name
          - ibft
          title: Initiator
          type: object
        targets:
          items:
            $ref: '#/components/schemas/IscsiSystemInfoTarget'
          type: array
      required:
      - initiator
      - targets
      title: System
      type: object
    IscsiSystemInfoTarget:
      additionalProperties: false
      properties:
        address:
          type: string
        connected:
          description: Whether the node is connected (there is a session).
          type: boolean
        ibft:
          description: Whether the target was initiated by iBFT.
          type: boolean
        interface:
          type: string
        locked:
          description: Whether the node is locked (cannot be deactivated)
          type: boolean
        name:
          type: string
        port:
          type: number
        startup:
          enum:
          - onboot
          - manual
          - automatic
      required:
      - name
      - address
      - port
      - interface
      - ibft
      - startup
      - connected
      - locked
      type: object
    IssueWithScope:
      properties:
        class:
          type: string
        description:
          type: string
        details:
          type:
          - string
          - 'null'
        scope:
          $ref: '#/components/schemas/Scope'
      required:
      - scope
      - class
      - description
      type: object
    Keymap:
      properties:
        description:
          description: Keymap description
          type: string
        id:
          allOf:
          - $ref: '#/components/schemas/KeymapId'
          description: Keymap identifier (e.g., "us")
      required:
      - id
      - description
      type: object
    KeymapId:
      description: |-
        Keymap layout identifier

        ```
        use agama_locale_data::KeymapId;
        use std::str::FromStr;

        let id: KeymapId = "es(ast)".parse().unwrap();
        assert_eq!(id.layout, "es");
        assert_eq!(id.variant, Some("ast".to_string()));
        assert_eq!(id.dashed(), "es-ast".to_string());

        let id_with_dashes: KeymapId = "es-ast".parse().unwrap();
        assert_eq!(id, id_with_dashes);
        ```
      properties:
        layout:
          description: Keyboard layout (e.g., "es" in "es(ast)")
          type: string
        variant:
          description: Keyboard variante (e.g., "ast" in "es(ast)")
          type:
          - string
          - 'null'
      required:
      - layout
      type: object
    License:
      description: |-
        Represents a product license.

        It contains the license ID and name, in the current system language.
      properties:
        id:
          description: License ID.
          type: string
        name:
          description: License name.
          type: string
      required:
      - id
      - name
      type: object
    LicenseContent:
      description: |-
        Represents a license content.

        It contains the license ID, name and body. The name is extracted from the first paragraph of
        the license text; the body is the rest of it.
      properties:
        body:
          description: License text.
          type: string
        id:
          description: License ID.
          type: string
        language:
          description: License language.
          type: string
        name:
          description: License name.
          type: string
      required:
      - id
      - name
      - body
      - language
      type: object
    LinkLocal:
      enum:
      - default
      - auto
      - disabled
      - enabled
      - fallback
      type: string
    LocaleEntry:
      description: Represents a locale, including the localized language and territory.
      properties:
        consolefont:
          description: Console font
          type:
          - string
          - 'null'
        id:
          description: The locale code (e.g., "es_ES.UTF-8").
          type: string
        language:
          description: Localized language name (e.g., "Spanish", "Español", etc.)
          type: string
        territory:
          description: Localized territory name (e.g., "Spain", "España", etc.)
          type: string
      required:
      - id
      - language
      - territory
      type: object
    LoginRequest:
      $schema: https://json-schema.org/draft/2020-12/schema
      properties:
        password:
          description: User password
          type: string
      required:
      - password
      title: LoginRequest
      type: object
    MatchSettings:
      properties:
        driver:
          items:
            type: string
          type: array
        interface:
          items:
            type: string
          type: array
        kernel:
          items:
            type: string
          type: array
        path:
          items:
            type: string
          type: array
      type: object
    NetworkConnection:
      description: Represents the configuration details for a network connection
      properties:
        addresses:
          description: List of assigned IP addresses
          items:
            $ref: '#/components/schemas/IpInet'
          type: array
        autoconnect:
          description: Specifies if the connection should automatically connect
          type:
          - boolean
          - 'null'
        bond:
          anyOf:
          - $ref: '#/components/schemas/BondSettings'
          - type: 'null'
          description: Bonding settings if part of a bond
        bridge:
          anyOf:
          - $ref: '#/components/schemas/BridgeSettings'
          - type: 'null'
          description: Bridge settings if part of a bridge
        customMacAddress:
          description: Custom MAC address of the connection's interface
          type:
          - string
          - 'null'
        dnsSearchList:
          description: List of search domains for DNS resolution
          items:
            type: string
          type: array
        gateway4:
          description: Gateway IP address for the IPv4 connection
          examples:
          - 192.168.122.1
          format: ip
          type:
          - string
          - 'null'
        gateway6:
          description: Gateway IP address for the IPv6 connection
          examples:
          - ::ffff:c0a8:7a01
          format: ip
          type:
          - string
          - 'null'
        id:
          description: Unique identifier for the network connection
          type: string
        ieee8021x:
          anyOf:
          - $ref: '#/components/schemas/IEEE8021XSettings'
          - type: 'null'
          description: IEEE 802.1X settings
        ignoreAutoDns:
          description: Specifies whether to ignore automatically assigned DNS settings
          type:
          - boolean
          - 'null'
        interface:
          description: Network interface associated with the connection
          type:
          - string
          - 'null'
        macAddress:
          description: MAC address of the connection's interface
          type:
          - string
          - 'null'
        match:
          anyOf:
          - $ref: '#/components/schemas/MatchSettings'
          - type: 'null'
          description: Match settings for the network connection
        method4:
          anyOf:
          - $ref: '#/components/schemas/Ipv4Method'
          - type: 'null'
          description: IPv4 method used for the network connection
        method6:
          anyOf:
          - $ref: '#/components/schemas/Ipv6Method'
          - type: 'null'
          description: IPv6 method used for the network connection
        mtu:
          description: Maximum Transmission Unit (MTU) for the connection
          format: uint32
          minimum: 0
          type: integer
        nameservers:
          description: List of DNS server IP addresses
          items:
            format: ip
            type: string
          type: array
        parent:
          description: Identifier for the parent connection, if this connection is part of a bond
          type:
          - string
          - 'null'
        persistent:
          description: Specifies whether the connection should be persisted or not
          type:
          - boolean
          - 'null'
        status:
          anyOf:
          - $ref: '#/components/schemas/Status2'
          - type: 'null'
          description: Current status of the network connection
        vlan:
          anyOf:
          - $ref: '#/components/schemas/VlanSettings'
          - type: 'null'
          description: VLAN settings for the connection
        wireless:
          anyOf:
          - $ref: '#/components/schemas/WirelessSettings'
          - type: 'null'
          description: Wireless settings for the connection
      required:
      - id
      type: object
    NetworkConnectionWithState:
      description: Represents the configuration details for a network connection
      properties:
        addresses:
          description: List of assigned IP addresses
          items:
            $ref: '#/components/schemas/IpInet'
          type: array
        autoconnect:
          description: Specifies if the connection should automatically connect
          type:
          - boolean
          - 'null'
        bond:
          anyOf:
          - $ref: '#/components/schemas/BondSettings'
          - type: 'null'
          description: Bonding settings if part of a bond
        bridge:
          anyOf:
          - $ref: '#/components/schemas/BridgeSettings'
          - type: 'null'
          description: Bridge settings if part of a bridge
        customMacAddress:
          description: Custom MAC address of the connection's interface
          type:
          - string
          - 'null'
        dnsSearchList:
          description: List of search domains for DNS resolution
          items:
            type: string
          type: array
        gateway4:
          description: Gateway IP address for the IPv4 connection
          examples:
          - 192.168.122.1
          format: ip
          type:
          - string
          - 'null'
        gateway6:
          description: Gateway IP address for the IPv6 connection
          examples:
          - ::ffff:c0a8:7a01
          format: ip
          type:
          - string
          - 'null'
        id:
          description: Unique identifier for the network connection
          type: string
        ieee8021x:
          anyOf:
          - $ref: '#/components/schemas/IEEE8021XSettings'
          - type: 'null'
          description: IEEE 802.1X settings
        ignoreAutoDns:
          description: Specifies whether to ignore automatically assigned DNS settings
          type:
          - boolean
          - 'null'
        interface:
          description: Network interface associated with the connection
          type:
          - string
          - 'null'
        macAddress:
          description: MAC address of the connection's interface
          type:
          - string
          - 'null'
        match:
          anyOf:
          - $ref: '#/components/schemas/MatchSettings'
          - type: 'null'
          description: Match settings for the network connection
        method4:
          anyOf:
          - $ref: '#/components/schemas/Ipv4Method'
          - type: 'null'
          description: IPv4 method used for the network connection
        method6:
          anyOf:
          - $ref: '#/components/schemas/Ipv6Method'
          - type: 'null'
          description: IPv6 method used for the network connection
        mtu:
          description: Maximum Transmission Unit (MTU) for the connection
          format: uint32
          minimum: 0
          type: integer
        nameservers:
          description: List of DNS server IP addresses
          items:
            format: ip
            type: string
          type: array
        parent:
          description: Identifier for the parent connection, if this connection is part of a bond
          type:
          - string
          - 'null'
        persistent:
          description: Specifies whether the connection should be persisted or not
          type:
          - boolean
          - 'null'
        state:
          $ref: '#/components/schemas/ConnectionState'
        status:
          anyOf:
          - $ref: '#/components/schemas/Status2'
          - type: 'null'
          description: Current status of the network connection
        vlan:
          anyOf:
          - $ref: '#/components/schemas/VlanSettings'
          - type: 'null'
          description: VLAN settings for the connection
        wireless:
          anyOf:
          - $ref: '#/components/schemas/WirelessSettings'
          - type: 'null'
          description: Wireless settings for the connection
      required:
      - id
      - state
      type: object
    NetworkConnectionsCollection:
      items:
        $ref: '#/components/schemas/NetworkConnection'
      type: array
    NetworkConnectionsWithStateCollection:
      items:
        $ref: '#/components/schemas/NetworkConnectionWithState'
      type: array
    Patch:
      description: Patch for the config.
      properties:
        update:
          anyOf:
          - $ref: '#/components/schemas/Config'
          - type: 'null'
          description: Update for the current config.
      type: object
    Pattern:
      properties:
        category:
          description: Pattern category (e.g., "Production")
          type: string
        description:
          description: Pattern description
          type: string
        desktop:
          description: Whether the pattern represents a desktop (e.g., gnome).
          type: boolean
        name:
          description: Pattern name (eg., "aaa_base", "gnome")
          type: string
        order:
          description: Pattern order
          type: string
        preselected:
          description: Whether the pattern is selected by default
          type: boolean
        summary:
          description: Pattern summary
          type: string
      required:
      - name
      - category
      - description
      - summary
      - order
      - preselected
      - desktop
      type: object
    PatternsConfig:
      anyOf:
      - description: List of user-selected patterns to install.
        items:
          type: string
        type: array
      - allOf:
        - $ref: '#/components/schemas/PatternsMap'
        description: Modifications for the list of user-selected patterns to install.
      description: List or modification map of user-selected patterns to install.
    PatternsMap:
      description: Modifications for the list of user-selected patterns to install
      properties:
        add:
          description: List of user-selected patterns to add to the list.
          items:
            type: string
          type:
          - array
          - 'null'
        remove:
          description: List of user-selected patterns to remove from the list.
          items:
            type: string
          type:
          - array
          - 'null'
      type: object
    Policy:
      oneOf:
      - const: auto
        description: Automatically answer questions.
        type: string
      - const: user
        description: Ask the user.
        type: string
    PostPartitioningScript:
      anyOf:
      - description: File or script content, starting with a shebang for scripts.
        properties:
          content:
            type: string
        required:
        - content
        type: object
      - description: Absolute or relative URL to fetch the file or script from.
        properties:
          url:
            type: string
        required:
        - url
        type: object
      description: Represents a script that runs after partitioning.
      properties:
        name:
          description: Script name, to be used as file name.
          type: string
      required:
      - name
      type: object
    PostScript:
      anyOf:
      - description: File or script content, starting with a shebang for scripts.
        properties:
          content:
            type: string
        required:
        - content
        type: object
      - description: Absolute or relative URL to fetch the file or script from.
        properties:
          url:
            type: string
        required:
        - url
        type: object
      description: Represents a script that runs after the installation finishes.
      properties:
        chroot:
          description: Whether the script should be run in a chroot environment.
          type:
          - boolean
          - 'null'
        name:
          description: Script name, to be used as file name.
          type: string
      required:
      - name
      type: object
    PreScript:
      anyOf:
      - description: File or script content, starting with a shebang for scripts.
        properties:
          content:
            type: string
        required:
        - content
        type: object
      - description: Absolute or relative URL to fetch the file or script from.
        properties:
          url:
            type: string
        required:
        - url
        type: object
      description: Represents a script that runs before the installation starts.
      properties:
        name:
          description: Script name, to be used as file name.
          type: string
      required:
      - name
      type: object
    ProblemDetails:
      description: |-
        Problem Details for HTTP APIs (RFC 9457)

        This enum represents different types of API errors following RFC 9457.
        Each variant contains only the fields relevant to that specific error type.

        The `type` field (used for i18n) is determined by the enum variant,
        and the HTTP status code is determined by the server.

        # Examples

        Deserializing a schema validation error from JSON:

        ```
        # use agama_utils::api::ProblemDetails;
        let json = r#"{
          "type": "tag:agama.opensuse.org,2026:problems/schema-validation-failed",
          "title": "Schema Validation Failed",
          "detail": "The provided configuration does not match the required schema",
          "errors": ["/network/hostname: is required"]
        }"#;

        let problem: ProblemDetails = serde_json::from_str(json).unwrap();
        match problem {
            ProblemDetails::SchemaValidationFailed { errors, .. } => {
                assert_eq!(errors.len(), 1);
            }
            _ => panic!("Expected SchemaValidationFailed"),
        }
        ```
      oneOf:
      - description: Schema validation failed (HTTP 400)
        properties:
          detail:
            description: Detailed explanation
            type:
            - string
            - 'null'
          errors:
            description: List of validation error messages
            items:
              type: string
            type: array
          title:
            description: Short summary
            type: string
          type:
            const: tag:agama.opensuse.org,2026:problems/schema-validation-failed
            type: string
        required:
        - type
        - title
        - errors
        type: object
      - description: Invalid JSON in request body (HTTP 400)
        properties:
          detail:
            type:
            - string
            - 'null'
          title:
            type: string
          type:
            const: tag:agama.opensuse.org,2026:problems/invalid-json
            type: string
        required:
        - type
        - title
        type: object
      - description: Internal server error (HTTP 500)
        properties:
          detail:
            type: string
          title:
            type: string
          type:
            const: tag:agama.opensuse.org,2026:problems/internal-error
            type: string
        required:
        - type
        - title
        - detail
        type: object
      - description: Unauthorized - authentication required (HTTP 401)
        properties:
          detail:
            type: string
          title:
            type: string
          type:
            const: tag:agama.opensuse.org,2026:problems/unauthorized
            type: string
        required:
        - type
        - title
        - detail
        type: object
      - description: Generic error without specific type (HTTP 500)
        properties:
          detail:
            type: string
          title:
            type: string
          type:
            const: about:blank
            type: string
        required:
        - type
        - title
        - detail
        type: object
      - description: Generic client error (HTTP 400)
        properties:
          detail:
            type: string
          title:
            type: string
          type:
            const: tag:agama.opensuse.org,2026:problems/bad-request
            type: string
        required:
        - type
        - title
        - detail
        type: object
    Product:
      description: Represents a software product
      properties:
        description:
          description: Product description (translated to the current UI language)
          type: string
        desktopSelection:
          anyOf:
          - $ref: '#/components/schemas/DesktopSelection'
          - type: 'null'
          description: Desktop selection mode
        icon:
          description: Product icon (e.g., "default.svg")
          type: string
        id:
          description: Product ID (eg., "SLES", "Tumbleweed", etc.)
          type: string
        licenses:
          default: []
          description: License IDs (a product may require accepting more than one).
          items:
            type: string
          type: array
        modes:
          default: []
          description: Product modes (names and descriptions are translated to the current UI language)
          items:
            $ref: '#/components/schemas/ProductMode'
          type: array
        name:
          description: Product name (e.g., "openSUSE Tumbleweed")
          type: string
        registration:
          description: Registration requirement
          type: boolean
      required:
      - id
      - name
      - description
      - icon
      - registration
      type: object
    ProductConfig:
      additionalProperties: false
      description: Software settings for installation
      properties:
        addons:
          description: List of product addons to register and install.
          items:
            $ref: '#/components/schemas/AddonConfig'
          type:
          - array
          - 'null'
        id:
          description: ID of the product to install (e.g., "SLES", "Tumbleweed", etc.).
          examples:
          - Tumbleweed
          - MicroOS
          - Slowroll
          - openSUSE_Leap
          - SLES
          - Kalpa
          type:
          - string
          - 'null'
        mode:
          description: The mode from the products.d/foo.yaml file.
          type:
          - string
          - 'null'
        registrationCode:
          description: Product registration code.
          type:
          - string
          - 'null'
        registrationEmail:
          description: Product registration email.
          type:
          - string
          - 'null'
        registrationUrl:
          description: URL of the registration server.
          format: uri
          type:
          - string
          - 'null'
      title: Product to install
      type: object
    ProductMode:
      properties:
        description:
          type: string
        id:
          type: string
        name:
          type: string
      required:
      - id
      - name
      - description
      type: object
    Progress:
      properties:
        index:
          description: Index of the current step
          format: uint
          minimum: 0
          type: integer
        scope:
          allOf:
          - $ref: '#/components/schemas/Scope'
          description: Scope of the progress
        size:
          description: Max number of steps
          format: uint
          minimum: 0
          type: integer
        step:
          description: Current step
          type: string
        steps:
          description: List of steps
          items:
            type: string
          type: array
      required:
      - scope
      - size
      - steps
      - step
      - index
      type: object
    Proposal:
      properties:
        access:
          $ref: '#/components/schemas/access.ExtendedConfig'
        hostname:
          anyOf:
          - $ref: '#/components/schemas/hostname.Proposal'
          - type: 'null'
        l10n:
          anyOf:
          - $ref: '#/components/schemas/l10n.Proposal'
          - type: 'null'
        network:
          $ref: '#/components/schemas/network.Proposal'
        software:
          anyOf:
          - $ref: '#/components/schemas/software.Proposal'
          - type: 'null'
        storage:
          $ref: '#/components/schemas/StorageProposal'
        users:
          anyOf:
          - $ref: '#/components/schemas/users.Config'
          - type: 'null'
      required:
      - network
      - access
      type: object
    Question:
      description: Represents a question including its [specification](QuestionSpec) and [answer](QuestionAnswer).
      properties:
        actions:
          description: List of available actions.
          items:
            $ref: '#/components/schemas/questions.Action'
          type: array
        answer:
          anyOf:
          - $ref: '#/components/schemas/questions.Answer'
          - type: 'null'
          description: Question answer.
        class:
          description: |-
            Question class (e.g., "autoyastUnsupported"). It works as a hint for
            the UI or to match pre-defined answers. The values that are understood
            by Agama's UI are documented [in the Questions
            page](https://agama-project.github.io/docs/user/reference/profile/answers).
          type: string
        data:
          additionalProperties:
            type: string
          description: Additional data that can be set for any question.
          type: object
        defaultAction:
          description: Default action.
          type:
          - string
          - 'null'
        field:
          allOf:
          - $ref: '#/components/schemas/QuestionField'
          default:
            type: none
          description: |-
            Optionally, a question might define an additional field (e.g., a
            password, a selector, etc.).
        id:
          description: Question ID.
          format: uint32
          minimum: 0
          type: integer
        text:
          description: Question text.
          type: string
      required:
      - id
      - text
      - class
      - actions
      type: object
    QuestionField:
      description: |-
        Question field.

        Apart from the actions, a question can include a field. The field can go
        from a string to a selector.

        The field is usually presented as a control in a form.
      oneOf:
      - description: No field.
        properties:
          type:
            const: none
            type: string
        required:
        - type
        type: object
      - description: A simple string field.
        properties:
          type:
            const: string
            type: string
        required:
        - type
        type: object
      - description: A password field.
        properties:
          type:
            const: password
            type: string
        required:
        - type
        type: object
      - description: A selector field.
        properties:
          options:
            items:
              $ref: '#/components/schemas/SelectionOption'
            type: array
          type:
            const: select
            type: string
        required:
        - type
        - options
        type: object
    QuestionSpec:
      description: |-
        Defines how a question should look like.

        A question is composed by a set of actions and, optionally, and additional
        field. For instance, a question to decrypt a device using a password would have:

        * a pair of actions, "decrypt" and "skip".
        * a password field.

        In other cases, like a simple "yes/no" questions, the field would not be needed.
      properties:
        actions:
          description: List of available actions.
          items:
            $ref: '#/components/schemas/questions.Action'
          type: array
        class:
          description: |-
            Question class (e.g., "autoyastUnsupported"). It works as a hint for
            the UI or to match pre-defined answers. The values that are understood
            by Agama's UI are documented [in the Questions
            page](https://agama-project.github.io/docs/user/reference/profile/answers).
          type: string
        data:
          additionalProperties:
            type: string
          description: Additional data that can be set for any question.
          type: object
        defaultAction:
          description: Default action.
          type:
          - string
          - 'null'
        field:
          allOf:
          - $ref: '#/components/schemas/QuestionField'
          default:
            type: none
          description: |-
            Optionally, a question might define an additional field (e.g., a
            password, a selector, etc.).
        text:
          description: Question text.
          type: string
      required:
      - text
      - class
      - actions
      type: object
    RegistrationInfo:
      properties:
        addons:
          description: Available add-ons.
          items:
            $ref: '#/components/schemas/AddonInfo'
          type: array
        code:
          description: Registration code.
          type:
          - string
          - 'null'
        email:
          description: Registration e-mail.
          type:
          - string
          - 'null'
        url:
          description: URL of the registration server.
          format: uri
          type:
          - string
          - 'null'
      required:
      - addons
      type: object
    RepositoryConfig:
      description: Parameters for creating new a repository
      properties:
        alias:
          description: repository alias. Has to be unique
          type: string
        allowUnsigned:
          description: Whenever repository can be unsigned. Default is false
          type:
          - boolean
          - 'null'
        enabled:
          description: Whether the repository is enabled, if missing the repository is enabled
          type:
          - boolean
          - 'null'
        gpgFingerprints:
          description: |-
            List of fingerprints for GPG keys used for repository signing. If specified,
            the new list of fingerprints overrides the existing ones instead of merging
            with them. By default empty.
          items:
            type: string
          type:
          - array
          - 'null'
        name:
          description: repository name, if not specified the alias is used
          type:
          - string
          - 'null'
        priority:
          description: Repository priority, lower number means higher priority, the default priority is 99
          format: int32
          type:
          - integer
          - 'null'
        productDir:
          description: product directory (currently not used, valid only for multiproduct DVDs)
          type:
          - string
          - 'null'
        url:
          description: Repository url (raw format without expanded variables)
          type: string
      required:
      - alias
      - url
      type: object
    RootUserConfig:
      description: |-
        Root user settings

        Holds the settings for the root user.
      properties:
        hashedPassword:
          default: false
          description: Whether the password is hashed or is plain text
          type: boolean
        password:
          description: User password
          examples:
          - nots3cr3t
          type: string
        sshPublicKey:
          anyOf:
          - $ref: '#/components/schemas/StringOrList'
          - type: 'null'
          deprecated: true
          description: Root SSH public key
        sshPublicKeys:
          anyOf:
          - $ref: '#/components/schemas/StringOrList'
          - type: 'null'
          description: Root SSH public key
      title: Root authentication settings
      type: object
    SSLFingerprint:
      properties:
        algorithm:
          allOf:
          - $ref: '#/components/schemas/SSLFingerprintAlgorithm'
          default: SHA256
          description: |-
            Algorithm used to compute SSL certificate fingerprint.
            Supported options are "SHA1" and "SHA256"
        fingerprint:
          description: |-
            The string value for SSL certificate fingerprint.
            Example value is "F6:7A:ED:BB:BC:94:CF:55:9D:B3:BA:74:7A:87:05:EF:67:4E:C2:DB"
          examples:
          - A8:DE:08:B1:57:52:FE:70:DF:D5:31:EA:E3:53:BB:39:EE:01:FF:B9
          type: string
      required:
      - fingerprint
      type: object
    SSLFingerprintAlgorithm:
      enum:
      - SHA1
      - SHA256
      type: string
    Scope:
      description: Scope to distinguish each service.
      enum:
      - access
      - bootloader
      - manager
      - network
      - ntp
      - hostname
      - l10n
      - product
      - proxy
      - questions
      - security
      - software
      - storage
      - files
      - iscsi
      - dasd
      - zfcp
      - users
      type: string
    ScriptsConfig:
      properties:
        init:
          description: User-defined init scripts
          items:
            $ref: '#/components/schemas/InitScript'
          type:
          - array
          - 'null'
        post:
          description: User-defined post-installation scripts
          items:
            $ref: '#/components/schemas/PostScript'
          type:
          - array
          - 'null'
        postPartitioning:
          description: User-defined post-partitioning scripts
          items:
            $ref: '#/components/schemas/PostPartitioningScript'
          type:
          - array
          - 'null'
        pre:
          description: User-defined pre-installation scripts
          items:
            $ref: '#/components/schemas/PreScript'
          type:
          - array
          - 'null'
      title: User-defined installation scripts
      type: object
    SelectedBy:
      description: Represents the reason why a pattern is selected.
      oneOf:
      - enum:
        - removed
        type: string
      - const: user
        description: The pattern was selected by the user.
        type: string
      - const: auto
        description: The pattern was selected automatically.
        type: string
      - const: none
        description: The pattern has not been selected.
        type: string
    SelectionOption:
      description: Selector option.
      properties:
        id:
          type: string
        label:
          type: string
      required:
      - id
      - label
      type: object
    SoftwareConfig:
      description: Software settings for installation
      properties:
        extraRepositories:
          description: List of user specified repositories to use on top of default ones.
          items:
            $ref: '#/components/schemas/RepositoryConfig'
          type:
          - array
          - 'null'
        onlyRequired:
          description: Flag indicating if only hard requirements should be used by solver.
          type:
          - boolean
          - 'null'
        packages:
          description: List of user selected packages to install.
          examples:
          - - vim
          items:
            type: string
          type:
          - array
          - 'null'
        patterns:
          anyOf:
          - $ref: '#/components/schemas/PatternsConfig'
          - type: 'null'
          description: List of user selected patterns to install.
          examples:
          - - minimal_base
      type: object
    Source:
      description: NTP source configuration.
      properties:
        address:
          description: NTP server or pool address.
          examples:
          - 0.opensuse.pool.ntp.org
          - ntp.example.com
          type: string
        iburst:
          default: false
          description: Send a burst of packets for faster initial synchronization.
          type: boolean
        offline:
          default: false
          description: Start with the source marked as offline (can be activated later).
          type: boolean
        type:
          allOf:
          - $ref: '#/components/schemas/SourceType'
          description: 'Type of NTP source: pool (pool of servers), server (single server), or peer (symmetric association).'
      required:
      - type
      - address
      title: NTP source
      type: object
    SourceType:
      description: NTP source type (pool, server, or peer).
      enum:
      - pool
      - server
      - peer
      type: string
    Stage:
      description: Represents the current state of the installation process.
      oneOf:
      - const: configuring
        description: Configuring the installation
        type: string
      - const: installing
        description: Installing the system
        type: string
      - const: finished
        description: Installation finished
        type: string
      - const: failed
        description: Installation failed
        type: string
    StateSettings:
      description: |-
        Network general settings for the installation like enabling wireless, networking and
        allowing to enable or disable the copy of the network settings to the
        target system
      properties:
        connectivity:
          anyOf:
          - $ref: '#/components/schemas/ConnectivityState'
          - type: 'null'
        copyNetwork:
          type:
          - boolean
          - 'null'
        networkingEnabled:
          type:
          - boolean
          - 'null'
        wirelessEnabled:
          type:
          - boolean
          - 'null'
      type: object
    Status:
      properties:
        progresses:
          description: Active progresses
          items:
            $ref: '#/components/schemas/Progress'
          type: array
        stage:
          allOf:
          - $ref: '#/components/schemas/Stage'
          description: Stage of the installation
        tasks:
          description: Active tasks
          items:
            $ref: '#/components/schemas/Task'
          type: array
      required:
      - stage
      - tasks
      - progresses
      type: object
    Status2:
      enum:
      - up
      - down
      - removed
      - keep
      type: string
    StorageConfig:
      $comment: Based on doc/auto_storage.md
      additionalProperties: false
      description: Storage config.
      properties:
        boot:
          $ref: '#/components/schemas/StorageConfigBoot'
        drives:
          description: Drives (disks, BIOS RAIDs and multipath devices).
          items:
            $ref: '#/components/schemas/StorageConfigDriveElement'
          type: array
        mdRaids:
          description: MD RAIDs.
          items:
            $ref: '#/components/schemas/StorageConfigMdRaidElement'
          type: array
        volumeGroups:
          description: LVM volume groups.
          items:
            $ref: '#/components/schemas/StorageConfigVolumeGroup'
          type: array
      title: Config
      type: object
    StorageConfigAdvancedLogicalVolumesGenerator:
      additionalProperties: false
      description: Automatically creates the default or mandatory logical volumes configured by the selected product.
      properties:
        generate:
          additionalProperties: false
          properties:
            encryption:
              $ref: '#/components/schemas/StorageConfigEncryption'
            logicalVolumes:
              enum:
              - default
              - mandatory
            stripeSize:
              $ref: '#/components/schemas/StorageConfigSizeValue'
            stripes:
              $ref: '#/components/schemas/StorageConfigLogicalVolumeStripes'
          required:
          - logicalVolumes
          type: object
      required:
      - generate
      type: object
    StorageConfigAdvancedPartitionsGenerator:
      additionalProperties: false
      description: Creates the default or mandatory partitions configured by the selected product.
      properties:
        generate:
          additionalProperties: false
          properties:
            encryption:
              $ref: '#/components/schemas/StorageConfigEncryption'
            partitions:
              enum:
              - default
              - mandatory
          required:
          - partitions
          type: object
      required:
      - generate
      type: object
    StorageConfigAdvancedPhysicalVolumesGenerator:
      additionalProperties: false
      description: Automatically creates the needed physical volumes in the indicated devices.
      properties:
        generate:
          additionalProperties: false
          properties:
            encryption:
              $ref: '#/components/schemas/StorageConfigEncryption'
            spacePolicy:
              default: useNeeded
              description: 'Policy for creating physical volumes: either using all the available space or only the needed space for allocating the logical volumes.'
              enum:
              - useNeeded
              - useAvailable
            targetDevices:
              items:
                $ref: '#/components/schemas/StorageConfigAlias'
              type: array
          required:
          - targetDevices
          type: object
      required:
      - generate
      type: object
    StorageConfigAlias:
      description: Alias used to reference a device.
      type: string
    StorageConfigBaseName:
      description: Device base name.
      examples:
      - system
      pattern: ^[^/]+$
      type: string
    StorageConfigBoot:
      additionalProperties: false
      description: Allows configuring boot partitions automatically.
      properties:
        configure:
          description: Whether to configure partitions for booting.
          type: boolean
        device:
          $ref: '#/components/schemas/StorageConfigAlias'
      required:
      - configure
      type: object
    StorageConfigDeleteLogicalVolumeAdvancedSearch:
      additionalProperties: false
      properties:
        condition:
          $ref: '#/components/schemas/StorageConfigLogicalVolumeSearchCondition'
        ifNotFound:
          $ref: '#/components/schemas/StorageConfigSearchActions'
        max:
          $ref: '#/components/schemas/StorageConfigSearchMax'
        sort:
          $ref: '#/components/schemas/StorageConfigLogicalVolumeSearchSort'
      type: object
    StorageConfigDeleteLogicalVolumeSearch:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSearchAll'
      - $ref: '#/components/schemas/StorageConfigSearchName'
      - $ref: '#/components/schemas/StorageConfigDeleteLogicalVolumeAdvancedSearch'
    StorageConfigDeletePartitionAdvancedSearch:
      additionalProperties: false
      properties:
        condition:
          $ref: '#/components/schemas/StorageConfigPartitionSearchCondition'
        ifNotFound:
          $ref: '#/components/schemas/StorageConfigSearchActions'
        max:
          $ref: '#/components/schemas/StorageConfigSearchMax'
        sort:
          $ref: '#/components/schemas/StorageConfigPartitionSearchSort'
      type: object
    StorageConfigDeletePartitionSearch:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSearchAll'
      - $ref: '#/components/schemas/StorageConfigSearchName'
      - $ref: '#/components/schemas/StorageConfigDeletePartitionAdvancedSearch'
    StorageConfigDriveAdvancedSearch:
      additionalProperties: false
      properties:
        condition:
          $ref: '#/components/schemas/StorageConfigDriveSearchCondition'
        ifNotFound:
          $ref: '#/components/schemas/StorageConfigSearchActions'
        max:
          $ref: '#/components/schemas/StorageConfigSearchMax'
        sort:
          $ref: '#/components/schemas/StorageConfigDriveSearchSort'
      type: object
    StorageConfigDriveElement:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigNonPartitionedDrive'
      - $ref: '#/components/schemas/StorageConfigPartitionedDrive'
    StorageConfigDriveSearch:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSearchAll'
      - $ref: '#/components/schemas/StorageConfigSearchName'
      - $ref: '#/components/schemas/StorageConfigDriveAdvancedSearch'
    StorageConfigDriveSearchCondition:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSearchConditionName'
      - $ref: '#/components/schemas/StorageConfigSearchConditionSize'
      - $ref: '#/components/schemas/StorageConfigSearchConditionDriver'
      - $ref: '#/components/schemas/StorageConfigSearchConditionBoss'
      - $ref: '#/components/schemas/StorageConfigSearchConditionFilesystem'
      - $ref: '#/components/schemas/StorageConfigSearchConditionPartitions'
      - $ref: '#/components/schemas/StorageConfigDriveSearchConditionAnd'
      - $ref: '#/components/schemas/StorageConfigDriveSearchConditionOr'
      - $ref: '#/components/schemas/StorageConfigDriveSearchConditionNot'
    StorageConfigDriveSearchConditionAnd:
      additionalProperties: false
      properties:
        and:
          description: Matches when all the nested conditions match.
          items:
            $ref: '#/components/schemas/StorageConfigDriveSearchCondition'
          minItems: 2
          type: array
      required:
      - and
      type: object
    StorageConfigDriveSearchConditionNot:
      additionalProperties: false
      properties:
        not:
          $ref: '#/components/schemas/StorageConfigDriveSearchCondition'
          description: Matches when the nested condition does not match.
      required:
      - not
      type: object
    StorageConfigDriveSearchConditionOr:
      additionalProperties: false
      properties:
        or:
          description: Matches when any of the nested conditions matches.
          items:
            $ref: '#/components/schemas/StorageConfigDriveSearchCondition'
          minItems: 2
          type: array
      required:
      - or
      type: object
    StorageConfigDriveSearchSort:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigDriveSearchSortCriterion'
      - items:
          $ref: '#/components/schemas/StorageConfigDriveSearchSortCriterion'
        type: array
    StorageConfigDriveSearchSortCriterion:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigDriveSearchSortCriterionShort'
      - $ref: '#/components/schemas/StorageConfigDriveSearchSortCriterionFull'
    StorageConfigDriveSearchSortCriterionFull:
      additionalProperties: false
      maxProperties: 1
      minProperties: 1
      properties:
        name:
          $ref: '#/components/schemas/StorageConfigSearchSortCriterionOrder'
        size:
          $ref: '#/components/schemas/StorageConfigSearchSortCriterionOrder'
      type: object
    StorageConfigDriveSearchSortCriterionShort:
      enum:
      - name
      - size
    StorageConfigEncryption:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigEncryptionLuks1'
      - $ref: '#/components/schemas/StorageConfigEncryptionLuks2'
      - $ref: '#/components/schemas/StorageConfigEncryptionPervasiveLuks2'
      - $ref: '#/components/schemas/StorageConfigEncryptionTpmFde'
      - $ref: '#/components/schemas/StorageConfigEncryptionSwap'
    StorageConfigEncryptionCipher:
      description: The value must be compatible with the --cipher argument of the command cryptsetup.
      type: string
    StorageConfigEncryptionKeySize:
      description: The value (in bits) has to be a multiple of 8. The possible key sizes are limited by the used cipher.
      multipleOf: 8
      type: integer
    StorageConfigEncryptionLuks1:
      additionalProperties: false
      description: LUKS1 encryption.
      properties:
        luks1:
          additionalProperties: false
          properties:
            cipher:
              $ref: '#/components/schemas/StorageConfigEncryptionCipher'
            keySize:
              $ref: '#/components/schemas/StorageConfigEncryptionKeySize'
            password:
              $ref: '#/components/schemas/StorageConfigEncryptionPassword'
          required:
          - password
          type: object
      required:
      - luks1
      type: object
    StorageConfigEncryptionLuks2:
      additionalProperties: false
      description: LUKS2 encryption.
      properties:
        luks2:
          additionalProperties: false
          properties:
            cipher:
              $ref: '#/components/schemas/StorageConfigEncryptionCipher'
            keySize:
              $ref: '#/components/schemas/StorageConfigEncryptionKeySize'
            label:
              description: LUKS2 label.
              type: string
            password:
              $ref: '#/components/schemas/StorageConfigEncryptionPassword'
            pbkdFunction:
              $ref: '#/components/schemas/StorageConfigEncryptionPbkdFunction'
            tpm:
              default: false
              description: Whether to use TPM2 unlocking.
              type: boolean
          required:
          - password
          type: object
      required:
      - luks2
      type: object
    StorageConfigEncryptionPassword:
      description: Password to use when creating a new encryption device.
      type: string
    StorageConfigEncryptionPbkdFunction:
      enum:
      - pbkdf2
      - argon2i
      - argon2id
    StorageConfigEncryptionPervasiveLuks2:
      additionalProperties: false
      description: LUKS2 pervasive encryption.
      properties:
        pervasiveLuks2:
          additionalProperties: false
          properties:
            apqns:
              description: List of APQNs used to generate secure keys.
              items:
                examples:
                - '01.0001'
                - '01.0002'
                type: string
              type: array
            keyType:
              description: Type of the generated secure key.
              enum:
              - EP11-AES
              - CCA-AESCIPHER
              - CCA-AESDATA
            password:
              $ref: '#/components/schemas/StorageConfigEncryptionPassword'
          required:
          - password
          type: object
      required:
      - pervasiveLuks2
      type: object
    StorageConfigEncryptionSwap:
      description: Swap encryptions. The snake case names are deprecated.
      enum:
      - protected_swap
      - secure_swap
      - random_swap
      - protectedSwap
      - secureSwap
      - randomSwap
    StorageConfigEncryptionTpmFde:
      additionalProperties: false
      deprecated: true
      description: TPM-Based Full Disk Encryption.
      properties:
        tpmFde:
          additionalProperties: false
          properties:
            password:
              $ref: '#/components/schemas/StorageConfigEncryptionPassword'
          required:
          - password
          type: object
      required:
      - tpmFde
      type: object
    StorageConfigFilesystem:
      additionalProperties: false
      properties:
        label:
          description: File system label.
          type: string
        mkfsExtraArguments:
          description: Additional arguments injected as-is to the mkfs command when creating the file system.
          type: string
        mkfsOptions:
          deprecated: true
          description: Deprecated in favor of mkfsExtraArguments
          items:
            type: string
          type: array
        mountBy:
          description: How to mount the device.
          enum:
          - device
          - id
          - label
          - path
          - uuid
          title: Mount by
        mountOptions:
          description: Options to add to the fourth field of fstab.
          items:
            type: string
          type: array
        path:
          description: Mount path.
          examples:
          - /var/log
          type: string
        reuseIfPossible:
          default: false
          description: Try to reuse the existing file system. In some cases the file system could not be reused, for example, if the device is re-encrypted.
          type: boolean
        type:
          $ref: '#/components/schemas/StorageConfigFilesystemType'
      type: object
    StorageConfigFilesystemCondition:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigFilesystemConditionType'
      - $ref: '#/components/schemas/StorageConfigFilesystemConditionLabel'
      - $ref: '#/components/schemas/StorageConfigFilesystemConditionAnd'
      - $ref: '#/components/schemas/StorageConfigFilesystemConditionOr'
      - $ref: '#/components/schemas/StorageConfigFilesystemConditionNot'
      description: Matches formatted devices whose file system satisfies the condition.
    StorageConfigFilesystemConditionAnd:
      additionalProperties: false
      properties:
        and:
          description: Matches when all the nested conditions match.
          items:
            $ref: '#/components/schemas/StorageConfigFilesystemCondition'
          minItems: 2
          type: array
      required:
      - and
      type: object
    StorageConfigFilesystemConditionLabel:
      additionalProperties: false
      properties:
        label:
          description: File system label.
          type: string
      required:
      - label
      type: object
    StorageConfigFilesystemConditionNot:
      additionalProperties: false
      properties:
        not:
          $ref: '#/components/schemas/StorageConfigFilesystemCondition'
          description: Matches when the nested condition does not match.
      required:
      - not
      type: object
    StorageConfigFilesystemConditionOr:
      additionalProperties: false
      properties:
        or:
          description: Matches when any of the nested conditions matches.
          items:
            $ref: '#/components/schemas/StorageConfigFilesystemCondition'
          minItems: 2
          type: array
      required:
      - or
      type: object
    StorageConfigFilesystemConditionType:
      additionalProperties: false
      properties:
        type:
          $ref: '#/components/schemas/StorageConfigFilesystemTypeAny'
      required:
      - type
      type: object
    StorageConfigFilesystemType:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigFilesystemTypeAny'
      - $ref: '#/components/schemas/StorageConfigFilesystemTypeBtrfs'
    StorageConfigFilesystemTypeAny:
      enum:
      - bcachefs
      - btrfs
      - exfat
      - ext2
      - ext3
      - ext4
      - f2fs
      - jfs
      - nfs
      - nilfs2
      - ntfs
      - reiserfs
      - swap
      - tmpfs
      - vfat
      - xfs
    StorageConfigFilesystemTypeBtrfs:
      additionalProperties: false
      description: Btrfs file system.
      properties:
        btrfs:
          additionalProperties: false
          properties:
            snapshots:
              description: Whether to configrue Btrfs snapshots.
              type: boolean
          type: object
      required:
      - btrfs
      type: object
    StorageConfigLogicalVolume:
      additionalProperties: false
      properties:
        encryption:
          $ref: '#/components/schemas/StorageConfigEncryption'
        filesystem:
          $ref: '#/components/schemas/StorageConfigFilesystem'
        name:
          $ref: '#/components/schemas/StorageConfigBaseName'
        search:
          $ref: '#/components/schemas/StorageConfigLogicalVolumeSearch'
        size:
          $ref: '#/components/schemas/StorageConfigSize'
        stripeSize:
          $ref: '#/components/schemas/StorageConfigSizeValue'
        stripes:
          $ref: '#/components/schemas/StorageConfigLogicalVolumeStripes'
      type: object
    StorageConfigLogicalVolumeAdvancedSearch:
      additionalProperties: false
      properties:
        condition:
          $ref: '#/components/schemas/StorageConfigLogicalVolumeSearchCondition'
        ifNotFound:
          $ref: '#/components/schemas/StorageConfigSearchCreatableActions'
        max:
          $ref: '#/components/schemas/StorageConfigSearchMax'
        sort:
          $ref: '#/components/schemas/StorageConfigLogicalVolumeSearchSort'
      type: object
    StorageConfigLogicalVolumeElement:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSimpleVolumesGenerator'
      - $ref: '#/components/schemas/StorageConfigAdvancedLogicalVolumesGenerator'
      - $ref: '#/components/schemas/StorageConfigLogicalVolume'
      - $ref: '#/components/schemas/StorageConfigThinPoolLogicalVolume'
      - $ref: '#/components/schemas/StorageConfigThinLogicalVolume'
      - $ref: '#/components/schemas/StorageConfigLogicalVolumeToDelete'
      - $ref: '#/components/schemas/StorageConfigLogicalVolumeToDeleteIfNeeded'
    StorageConfigLogicalVolumeSearch:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSearchAll'
      - $ref: '#/components/schemas/StorageConfigSearchName'
      - $ref: '#/components/schemas/StorageConfigLogicalVolumeAdvancedSearch'
    StorageConfigLogicalVolumeSearchCondition:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSearchConditionName'
      - $ref: '#/components/schemas/StorageConfigSearchConditionSize'
      - $ref: '#/components/schemas/StorageConfigSearchConditionFilesystem'
      - $ref: '#/components/schemas/StorageConfigLogicalVolumeSearchConditionAnd'
      - $ref: '#/components/schemas/StorageConfigLogicalVolumeSearchConditionOr'
      - $ref: '#/components/schemas/StorageConfigLogicalVolumeSearchConditionNot'
    StorageConfigLogicalVolumeSearchConditionAnd:
      additionalProperties: false
      properties:
        and:
          description: Matches when all the nested conditions match.
          items:
            $ref: '#/components/schemas/StorageConfigLogicalVolumeSearchCondition'
          minItems: 2
          type: array
      required:
      - and
      type: object
    StorageConfigLogicalVolumeSearchConditionNot:
      additionalProperties: false
      properties:
        not:
          $ref: '#/components/schemas/StorageConfigLogicalVolumeSearchCondition'
          description: Matches when the nested condition does not match.
      required:
      - not
      type: object
    StorageConfigLogicalVolumeSearchConditionOr:
      additionalProperties: false
      properties:
        or:
          description: Matches when any of the nested conditions matches.
          items:
            $ref: '#/components/schemas/StorageConfigLogicalVolumeSearchCondition'
          minItems: 2
          type: array
      required:
      - or
      type: object
    StorageConfigLogicalVolumeSearchSort:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigLogicalVolumeSearchSortCriterion'
      - items:
          $ref: '#/components/schemas/StorageConfigLogicalVolumeSearchSortCriterion'
        type: array
    StorageConfigLogicalVolumeSearchSortCriterion:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigLogicalVolumeSearchSortCriterionShort'
      - $ref: '#/components/schemas/StorageConfigLogicalVolumeSearchSortCriterionFull'
    StorageConfigLogicalVolumeSearchSortCriterionFull:
      additionalProperties: false
      maxProperties: 1
      minProperties: 1
      properties:
        name:
          $ref: '#/components/schemas/StorageConfigSearchSortCriterionOrder'
        size:
          $ref: '#/components/schemas/StorageConfigSearchSortCriterionOrder'
      type: object
    StorageConfigLogicalVolumeSearchSortCriterionShort:
      enum:
      - name
      - size
    StorageConfigLogicalVolumeStripes:
      description: Number of stripes.
      maximum: 128
      minimum: 1
      type: integer
    StorageConfigLogicalVolumeToDelete:
      additionalProperties: false
      properties:
        delete:
          const: true
          description: Delete the logical volume.
        search:
          $ref: '#/components/schemas/StorageConfigDeleteLogicalVolumeSearch'
      required:
      - delete
      - search
      type: object
    StorageConfigLogicalVolumeToDeleteIfNeeded:
      additionalProperties: false
      properties:
        deleteIfNeeded:
          const: true
          description: Delete the logical volume if needed to make space.
        search:
          $ref: '#/components/schemas/StorageConfigDeleteLogicalVolumeSearch'
        size:
          $ref: '#/components/schemas/StorageConfigSize'
      required:
      - deleteIfNeeded
      - search
      type: object
    StorageConfigMdRaidAdvancedSearch:
      additionalProperties: false
      properties:
        condition:
          $ref: '#/components/schemas/StorageConfigMdRaidSearchCondition'
        ifNotFound:
          $ref: '#/components/schemas/StorageConfigSearchCreatableActions'
        max:
          $ref: '#/components/schemas/StorageConfigSearchMax'
        sort:
          $ref: '#/components/schemas/StorageConfigMdRaidSearchSort'
      type: object
    StorageConfigMdRaidDevices:
      description: Devices used by the MD RAID.
      items:
        $ref: '#/components/schemas/StorageConfigAlias'
      type: array
    StorageConfigMdRaidElement:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigNonPartitionedMdRaid'
      - $ref: '#/components/schemas/StorageConfigPartitionedMdRaid'
    StorageConfigMdRaidLevel:
      enum:
      - raid0
      - raid1
      - raid5
      - raid6
      - raid10
      title: MD level
    StorageConfigMdRaidParity:
      description: Only applies to raid5, raid6 and raid10
      enum:
      - left_asymmetric
      - left_symmetric
      - right_asymmetric
      - right_symmetric
      - first
      - last
      - near_2
      - offset_2
      - far_2
      - near_3
      - offset_3
      - far_3
      title: MD parity
    StorageConfigMdRaidSearch:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSearchAll'
      - $ref: '#/components/schemas/StorageConfigSearchName'
      - $ref: '#/components/schemas/StorageConfigMdRaidAdvancedSearch'
    StorageConfigMdRaidSearchCondition:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSearchConditionName'
      - $ref: '#/components/schemas/StorageConfigSearchConditionSize'
      - $ref: '#/components/schemas/StorageConfigSearchConditionFilesystem'
      - $ref: '#/components/schemas/StorageConfigSearchConditionPartitions'
      - $ref: '#/components/schemas/StorageConfigMdRaidSearchConditionAnd'
      - $ref: '#/components/schemas/StorageConfigMdRaidSearchConditionOr'
      - $ref: '#/components/schemas/StorageConfigMdRaidSearchConditionNot'
    StorageConfigMdRaidSearchConditionAnd:
      additionalProperties: false
      properties:
        and:
          description: Matches when all the nested conditions match.
          items:
            $ref: '#/components/schemas/StorageConfigMdRaidSearchCondition'
          minItems: 2
          type: array
      required:
      - and
      type: object
    StorageConfigMdRaidSearchConditionNot:
      additionalProperties: false
      properties:
        not:
          $ref: '#/components/schemas/StorageConfigMdRaidSearchCondition'
          description: Matches when the nested condition does not match.
      required:
      - not
      type: object
    StorageConfigMdRaidSearchConditionOr:
      additionalProperties: false
      properties:
        or:
          description: Matches when any of the nested conditions matches.
          items:
            $ref: '#/components/schemas/StorageConfigMdRaidSearchCondition'
          minItems: 2
          type: array
      required:
      - or
      type: object
    StorageConfigMdRaidSearchSort:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigMdRaidSearchSortCriterion'
      - items:
          $ref: '#/components/schemas/StorageConfigMdRaidSearchSortCriterion'
        type: array
    StorageConfigMdRaidSearchSortCriterion:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigMdRaidSearchSortCriterionShort'
      - $ref: '#/components/schemas/StorageConfigMdRaidSearchSortCriterionFull'
    StorageConfigMdRaidSearchSortCriterionFull:
      additionalProperties: false
      maxProperties: 1
      minProperties: 1
      properties:
        name:
          $ref: '#/components/schemas/StorageConfigSearchSortCriterionOrder'
        size:
          $ref: '#/components/schemas/StorageConfigSearchSortCriterionOrder'
      type: object
    StorageConfigMdRaidSearchSortCriterionShort:
      enum:
      - name
      - size
    StorageConfigNonPartitionedDrive:
      additionalProperties: false
      description: Drive without a partition table (e.g., directly formatted).
      properties:
        alias:
          $ref: '#/components/schemas/StorageConfigAlias'
        encryption:
          $ref: '#/components/schemas/StorageConfigEncryption'
        filesystem:
          $ref: '#/components/schemas/StorageConfigFilesystem'
        search:
          $ref: '#/components/schemas/StorageConfigDriveSearch'
      type: object
    StorageConfigNonPartitionedMdRaid:
      additionalProperties: false
      description: MD RAID without a partition table (e.g., directly formatted).
      properties:
        alias:
          $ref: '#/components/schemas/StorageConfigAlias'
        chunkSize:
          $ref: '#/components/schemas/StorageConfigSizeValue'
        devices:
          $ref: '#/components/schemas/StorageConfigMdRaidDevices'
        encryption:
          $ref: '#/components/schemas/StorageConfigEncryption'
        filesystem:
          $ref: '#/components/schemas/StorageConfigFilesystem'
        level:
          $ref: '#/components/schemas/StorageConfigMdRaidLevel'
        name:
          $ref: '#/components/schemas/StorageConfigBaseName'
        parity:
          $ref: '#/components/schemas/StorageConfigMdRaidParity'
        search:
          $ref: '#/components/schemas/StorageConfigMdRaidSearch'
      type: object
    StorageConfigPartitionAdvancedSearch:
      additionalProperties: false
      properties:
        condition:
          $ref: '#/components/schemas/StorageConfigPartitionSearchCondition'
        ifNotFound:
          $ref: '#/components/schemas/StorageConfigSearchCreatableActions'
        max:
          $ref: '#/components/schemas/StorageConfigSearchMax'
        sort:
          $ref: '#/components/schemas/StorageConfigPartitionSearchSort'
      type: object
    StorageConfigPartitionElement:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSimpleVolumesGenerator'
      - $ref: '#/components/schemas/StorageConfigAdvancedPartitionsGenerator'
      - $ref: '#/components/schemas/StorageConfigRegularPartition'
      - $ref: '#/components/schemas/StorageConfigPartitionToDelete'
      - $ref: '#/components/schemas/StorageConfigPartitionToDeleteIfNeeded'
    StorageConfigPartitionIdAny:
      description: Any partition id managed by libstorage-ng. Some ids are only valid for a given partition table type.
      enum:
      - dos12
      - dos16
      - ntfs
      - dos32
      - extended
      - diag
      - prep
      - swap
      - linux
      - irst
      - lvm
      - raid
      - xbootldr
      - esp
      - bios_boot
      - windows_basic_data
      - microsoft_reserved
      - linux_home
      - linux_server_data
      - linux_root_arm
      - linux_root_aarch64
      - linux_root_ppc32
      - linux_root_ppc64be
      - linux_root_ppc64le
      - linux_root_riscv32
      - linux_root_riscv64
      - linux_root_s390
      - linux_root_s390x
      - linux_root_x86
      - linux_root_x86_64
      - linux_usr_arm
      - linux_usr_aarch64
      - linux_usr_ppc32
      - linux_usr_ppc64be
      - linux_usr_ppc64le
      - linux_usr_riscv32
      - linux_usr_riscv64
      - linux_usr_s390
      - linux_usr_s390x
      - linux_usr_x86
      - linux_usr_x86_64
      title: Partition id
    StorageConfigPartitionSearch:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSearchAll'
      - $ref: '#/components/schemas/StorageConfigSearchName'
      - $ref: '#/components/schemas/StorageConfigPartitionAdvancedSearch'
    StorageConfigPartitionSearchCondition:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSearchConditionName'
      - $ref: '#/components/schemas/StorageConfigSearchConditionSize'
      - $ref: '#/components/schemas/StorageConfigSearchConditionPartitionNumber'
      - $ref: '#/components/schemas/StorageConfigSearchConditionPartitionId'
      - $ref: '#/components/schemas/StorageConfigSearchConditionFilesystem'
      - $ref: '#/components/schemas/StorageConfigPartitionSearchConditionAnd'
      - $ref: '#/components/schemas/StorageConfigPartitionSearchConditionOr'
      - $ref: '#/components/schemas/StorageConfigPartitionSearchConditionNot'
    StorageConfigPartitionSearchConditionAnd:
      additionalProperties: false
      properties:
        and:
          description: Matches when all the nested conditions match.
          items:
            $ref: '#/components/schemas/StorageConfigPartitionSearchCondition'
          minItems: 2
          type: array
      required:
      - and
      type: object
    StorageConfigPartitionSearchConditionNot:
      additionalProperties: false
      properties:
        not:
          $ref: '#/components/schemas/StorageConfigPartitionSearchCondition'
          description: Matches when the nested condition does not match.
      required:
      - not
      type: object
    StorageConfigPartitionSearchConditionOr:
      additionalProperties: false
      properties:
        or:
          description: Matches when any of the nested conditions matches.
          items:
            $ref: '#/components/schemas/StorageConfigPartitionSearchCondition'
          minItems: 2
          type: array
      required:
      - or
      type: object
    StorageConfigPartitionSearchSort:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigPartitionSearchSortCriterion'
      - items:
          $ref: '#/components/schemas/StorageConfigPartitionSearchSortCriterion'
        type: array
    StorageConfigPartitionSearchSortCriterion:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigPartitionSearchSortCriterionShort'
      - $ref: '#/components/schemas/StorageConfigPartitionSearchSortCriterionFull'
    StorageConfigPartitionSearchSortCriterionFull:
      additionalProperties: false
      maxProperties: 1
      minProperties: 1
      properties:
        name:
          $ref: '#/components/schemas/StorageConfigSearchSortCriterionOrder'
        number:
          $ref: '#/components/schemas/StorageConfigSearchSortCriterionOrder'
        size:
          $ref: '#/components/schemas/StorageConfigSearchSortCriterionOrder'
      type: object
    StorageConfigPartitionSearchSortCriterionShort:
      enum:
      - name
      - size
      - number
    StorageConfigPartitionToDelete:
      additionalProperties: false
      properties:
        delete:
          const: true
          description: Delete the partition.
        search:
          $ref: '#/components/schemas/StorageConfigDeletePartitionSearch'
      required:
      - delete
      - search
      type: object
    StorageConfigPartitionToDeleteIfNeeded:
      additionalProperties: false
      properties:
        deleteIfNeeded:
          const: true
          description: Delete the partition if needed to make space.
        search:
          $ref: '#/components/schemas/StorageConfigDeletePartitionSearch'
        size:
          $ref: '#/components/schemas/StorageConfigSize'
      required:
      - deleteIfNeeded
      - search
      type: object
    StorageConfigPartitionedDrive:
      additionalProperties: false
      properties:
        alias:
          $ref: '#/components/schemas/StorageConfigAlias'
        partitions:
          items:
            $ref: '#/components/schemas/StorageConfigPartitionElement'
          type: array
        ptableType:
          $ref: '#/components/schemas/StorageConfigPtableType'
        search:
          $ref: '#/components/schemas/StorageConfigDriveSearch'
      required:
      - partitions
      type: object
    StorageConfigPartitionedMdRaid:
      additionalProperties: false
      properties:
        alias:
          $ref: '#/components/schemas/StorageConfigAlias'
        chunkSize:
          $ref: '#/components/schemas/StorageConfigSizeValue'
        devices:
          $ref: '#/components/schemas/StorageConfigMdRaidDevices'
        level:
          $ref: '#/components/schemas/StorageConfigMdRaidLevel'
        name:
          $ref: '#/components/schemas/StorageConfigBaseName'
        parity:
          $ref: '#/components/schemas/StorageConfigMdRaidParity'
        partitions:
          items:
            $ref: '#/components/schemas/StorageConfigPartitionElement'
          type: array
        ptableType:
          $ref: '#/components/schemas/StorageConfigPtableType'
        search:
          $ref: '#/components/schemas/StorageConfigMdRaidSearch'
      required:
      - partitions
      type: object
    StorageConfigPartitionsCount:
      additionalProperties: false
      anyOf:
      - required:
        - min
      - required:
        - max
      properties:
        condition:
          $ref: '#/components/schemas/StorageConfigPartitionSearchCondition'
          description: Optional condition; omit to count all partitions.
        max:
          description: Maximum number of matching partitions (must be >= 1).
          minimum: 1
          type: integer
        min:
          description: Minimum number of matching partitions (must be >= 1).
          minimum: 1
          type: integer
      type: object
    StorageConfigPartitionsQuantifier:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigPartitionsQuantifierAny'
      - $ref: '#/components/schemas/StorageConfigPartitionsQuantifierNone'
      - $ref: '#/components/schemas/StorageConfigPartitionsQuantifierAll'
      - $ref: '#/components/schemas/StorageConfigPartitionsQuantifierCount'
      description: Matches devices whose partitions satisfy the quantifier.
    StorageConfigPartitionsQuantifierAll:
      additionalProperties: false
      properties:
        all:
          $ref: '#/components/schemas/StorageConfigPartitionSearchCondition'
          description: Matches when there is at least one partition and all partitions satisfy the condition.
      required:
      - all
      type: object
    StorageConfigPartitionsQuantifierAny:
      additionalProperties: false
      properties:
        any:
          $ref: '#/components/schemas/StorageConfigPartitionSearchCondition'
          description: Matches when at least one partition satisfies the condition.
      required:
      - any
      type: object
    StorageConfigPartitionsQuantifierCount:
      additionalProperties: false
      properties:
        count:
          $ref: '#/components/schemas/StorageConfigPartitionsCount'
      required:
      - count
      type: object
    StorageConfigPartitionsQuantifierNone:
      additionalProperties: false
      properties:
        none:
          $ref: '#/components/schemas/StorageConfigPartitionSearchCondition'
          description: Matches when no partition satisfies the condition.
      required:
      - none
      type: object
    StorageConfigPhysicalVolumeElement:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigAlias'
      - $ref: '#/components/schemas/StorageConfigSimplePhysicalVolumesGenerator'
      - $ref: '#/components/schemas/StorageConfigAdvancedPhysicalVolumesGenerator'
    StorageConfigPtableType:
      $comment: The partition table is created only if all the current partitions are deleted.
      description: Partition table type.
      enum:
      - gpt
      - msdos
      - dasd
    StorageConfigRegularPartition:
      additionalProperties: false
      properties:
        alias:
          $ref: '#/components/schemas/StorageConfigAlias'
        encryption:
          $ref: '#/components/schemas/StorageConfigEncryption'
        filesystem:
          $ref: '#/components/schemas/StorageConfigFilesystem'
        id:
          enum:
          - linux
          - swap
          - lvm
          - raid
          - esp
          - prep
          - bios_boot
          title: Partition id
        search:
          $ref: '#/components/schemas/StorageConfigPartitionSearch'
        size:
          $ref: '#/components/schemas/StorageConfigSize'
      type: object
    StorageConfigSearchActions:
      default: error
      description: How to handle the section if the device is not found.
      enum:
      - skip
      - error
    StorageConfigSearchAll:
      const: '*'
      description: Shortcut to match all devices if there is any (equivalent to specify no conditions and to skip the entry if no device is found).
    StorageConfigSearchConditionBoss:
      additionalProperties: false
      properties:
        boss:
          description: Whether the device is a BOSS (Boot Optimized Storage Solution) device, a technology introduced by Dell. Use false to match any other device.
          type: boolean
      required:
      - boss
      type: object
    StorageConfigSearchConditionDriver:
      additionalProperties: false
      properties:
        driver:
          description: Matches devices handled by the given kernel driver, as reported by hwinfo. A device can be handled by several drivers; the condition matches if any of them is the given one. Do not confuse with driver_modules, which values usually use underscore (virtio-pci vs virtio_pci) and subfix (ahci vs ahci_mod).
          examples:
          - ahci
          - sd
          type: string
      required:
      - driver
      type: object
    StorageConfigSearchConditionFilesystem:
      additionalProperties: false
      properties:
        filesystem:
          anyOf:
          - $ref: '#/components/schemas/StorageConfigSearchFilesystemPresence'
          - $ref: '#/components/schemas/StorageConfigFilesystemCondition'
      required:
      - filesystem
      type: object
    StorageConfigSearchConditionName:
      additionalProperties: false
      properties:
        name:
          $ref: '#/components/schemas/StorageConfigSearchName'
      required:
      - name
      type: object
    StorageConfigSearchConditionPartitionId:
      additionalProperties: false
      properties:
        id:
          $ref: '#/components/schemas/StorageConfigPartitionIdAny'
      required:
      - id
      type: object
    StorageConfigSearchConditionPartitionNumber:
      additionalProperties: false
      properties:
        number:
          description: Partition number (e.g., 1 for vda1).
          minimum: 1
          type: integer
      required:
      - number
      type: object
    StorageConfigSearchConditionPartitions:
      additionalProperties: false
      properties:
        partitions:
          anyOf:
          - $ref: '#/components/schemas/StorageConfigSearchPartitionsPresence'
          - $ref: '#/components/schemas/StorageConfigPartitionsQuantifier'
      required:
      - partitions
      type: object
    StorageConfigSearchConditionSize:
      additionalProperties: false
      properties:
        size:
          anyOf:
          - $ref: '#/components/schemas/StorageConfigSizeValue'
          - $ref: '#/components/schemas/StorageConfigSearchConditionSizeEqual'
          - $ref: '#/components/schemas/StorageConfigSearchConditionSizeGreater'
          - $ref: '#/components/schemas/StorageConfigSearchConditionSizeLess'
      required:
      - size
      type: object
    StorageConfigSearchConditionSizeEqual:
      additionalProperties: false
      properties:
        equal:
          $ref: '#/components/schemas/StorageConfigSizeValue'
      required:
      - equal
      type: object
    StorageConfigSearchConditionSizeGreater:
      additionalProperties: false
      properties:
        greater:
          $ref: '#/components/schemas/StorageConfigSizeValue'
      required:
      - greater
      type: object
    StorageConfigSearchConditionSizeLess:
      additionalProperties: false
      properties:
        less:
          $ref: '#/components/schemas/StorageConfigSizeValue'
      required:
      - less
      type: object
    StorageConfigSearchCreatableActions:
      default: error
      description: How to handle the section if the device is not found.
      enum:
      - skip
      - error
      - create
    StorageConfigSearchFilesystemPresence:
      description: 'Shortcut to match by filesystem presence: "any" matches formatted devices, "none" matches unformatted ones.'
      enum:
      - any
      - none
    StorageConfigSearchMax:
      description: Maximum devices to match.
      minimum: 1
      type: integer
    StorageConfigSearchName:
      description: Search by device name
      examples:
      - /dev/vda
      - /dev/disk/by-id/ata-WDC_WD3200AAKS-75L9
      type: string
    StorageConfigSearchPartitionsPresence:
      description: 'Shortcut to match by partitions presence: "any" matches devices with at least one partition, "none" matches devices with no partitions.'
      enum:
      - any
      - none
    StorageConfigSearchSortCriterionOrder:
      description: Direction of sorting at the search results
      enum:
      - asc
      - desc
    StorageConfigSimplePhysicalVolumesGenerator:
      additionalProperties: false
      description: Automatically creates the needed physical volumes in the indicated devices.
      properties:
        generate:
          items:
            $ref: '#/components/schemas/StorageConfigAlias'
          type: array
      required:
      - generate
      type: object
    StorageConfigSimpleVolumesGenerator:
      additionalProperties: false
      description: Automatically creates the default or mandatory volumes configured by the selected product.
      properties:
        generate:
          enum:
          - default
          - mandatory
      required:
      - generate
      type: object
    StorageConfigSize:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSizeValue'
      - description: Lower size limit and optionally upper size limit.
        examples:
        - - 1024
          - current
        - - 1 GiB
          - 5 GiB
        - - 1024
          - 2 GiB
        - - 2 GiB
        items:
          $ref: '#/components/schemas/StorageConfigSizeValueWithCurrent'
        maxItems: 2
        minItems: 1
        title: Size tuple
        type: array
      - additionalProperties: false
        description: Size range.
        properties:
          max:
            $ref: '#/components/schemas/StorageConfigSizeValueWithCurrent'
          min:
            $ref: '#/components/schemas/StorageConfigSizeValueWithCurrent'
        required:
        - min
        title: Size range
        type: object
      title: Size
    StorageConfigSizeBytes:
      description: Size in bytes.
      examples:
      - 1024
      - 2048
      minimum: 0
      type: integer
    StorageConfigSizeString:
      description: Human readable size.
      examples:
      - 2 GiB
      - 1.5 TB
      - 1TIB
      - 1073741824 b
      - '1073741824'
      pattern: ^[0-9]+(\.[0-9]+)?(\s*([KkMmGgTtPpEeZzYy][iI]?)?[Bb])?$
      type: string
    StorageConfigSizeValue:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSizeString'
      - $ref: '#/components/schemas/StorageConfigSizeBytes'
    StorageConfigSizeValueWithCurrent:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSizeValue'
      - const: current
        description: The current size of the device.
        title: Size current
    StorageConfigThinLogicalVolume:
      additionalProperties: false
      properties:
        encryption:
          $ref: '#/components/schemas/StorageConfigEncryption'
        filesystem:
          $ref: '#/components/schemas/StorageConfigFilesystem'
        name:
          $ref: '#/components/schemas/StorageConfigBaseName'
        size:
          $ref: '#/components/schemas/StorageConfigSize'
        usedPool:
          $ref: '#/components/schemas/StorageConfigAlias'
      required:
      - usedPool
      type: object
    StorageConfigThinPoolLogicalVolume:
      additionalProperties: false
      properties:
        alias:
          $ref: '#/components/schemas/StorageConfigAlias'
        encryption:
          $ref: '#/components/schemas/StorageConfigEncryption'
        name:
          $ref: '#/components/schemas/StorageConfigBaseName'
        pool:
          const: true
          description: LVM thin pool.
        size:
          $ref: '#/components/schemas/StorageConfigSize'
        stripeSize:
          $ref: '#/components/schemas/StorageConfigSizeValue'
        stripes:
          $ref: '#/components/schemas/StorageConfigLogicalVolumeStripes'
      required:
      - pool
      type: object
    StorageConfigVolumeGroup:
      additionalProperties: false
      description: LVM volume group.
      properties:
        extentSize:
          $ref: '#/components/schemas/StorageConfigSizeValue'
        logicalVolumes:
          items:
            $ref: '#/components/schemas/StorageConfigLogicalVolumeElement'
          type: array
        name:
          $ref: '#/components/schemas/StorageConfigBaseName'
        physicalVolumes:
          description: Devices to use as physical volumes.
          items:
            $ref: '#/components/schemas/StorageConfigPhysicalVolumeElement'
          type: array
        search:
          $ref: '#/components/schemas/StorageConfigVolumeGroupSearch'
      required:
      - name
      type: object
    StorageConfigVolumeGroupAdvancedSearch:
      additionalProperties: false
      properties:
        condition:
          $ref: '#/components/schemas/StorageConfigVolumeGroupSearchCondition'
        ifNotFound:
          $ref: '#/components/schemas/StorageConfigSearchCreatableActions'
        max:
          $ref: '#/components/schemas/StorageConfigSearchMax'
        sort:
          $ref: '#/components/schemas/StorageConfigVolumeGroupSearchSort'
      type: object
    StorageConfigVolumeGroupSearch:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSearchAll'
      - $ref: '#/components/schemas/StorageConfigSearchName'
      - $ref: '#/components/schemas/StorageConfigVolumeGroupAdvancedSearch'
    StorageConfigVolumeGroupSearchCondition:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigSearchConditionName'
      - $ref: '#/components/schemas/StorageConfigSearchConditionSize'
      - $ref: '#/components/schemas/StorageConfigVolumeGroupSearchConditionAnd'
      - $ref: '#/components/schemas/StorageConfigVolumeGroupSearchConditionOr'
      - $ref: '#/components/schemas/StorageConfigVolumeGroupSearchConditionNot'
    StorageConfigVolumeGroupSearchConditionAnd:
      additionalProperties: false
      properties:
        and:
          description: Matches when all the nested conditions match.
          items:
            $ref: '#/components/schemas/StorageConfigVolumeGroupSearchCondition'
          minItems: 2
          type: array
      required:
      - and
      type: object
    StorageConfigVolumeGroupSearchConditionNot:
      additionalProperties: false
      properties:
        not:
          $ref: '#/components/schemas/StorageConfigVolumeGroupSearchCondition'
          description: Matches when the nested condition does not match.
      required:
      - not
      type: object
    StorageConfigVolumeGroupSearchConditionOr:
      additionalProperties: false
      properties:
        or:
          description: Matches when any of the nested conditions matches.
          items:
            $ref: '#/components/schemas/StorageConfigVolumeGroupSearchCondition'
          minItems: 2
          type: array
      required:
      - or
      type: object
    StorageConfigVolumeGroupSearchSort:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigVolumeGroupSearchSortCriterion'
      - items:
          $ref: '#/components/schemas/StorageConfigVolumeGroupSearchSortCriterion'
        type: array
    StorageConfigVolumeGroupSearchSortCriterion:
      anyOf:
      - $ref: '#/components/schemas/StorageConfigVolumeGroupSearchSortCriterionShort'
      - $ref: '#/components/schemas/StorageConfigVolumeGroupSearchSortCriterionFull'
    StorageConfigVolumeGroupSearchSortCriterionFull:
      additionalProperties: false
      maxProperties: 1
      minProperties: 1
      properties:
        name:
          $ref: '#/components/schemas/StorageConfigSearchSortCriterionOrder'
        size:
          $ref: '#/components/schemas/StorageConfigSearchSortCriterionOrder'
      type: object
    StorageConfigVolumeGroupSearchSortCriterionShort:
      enum:
      - name
      - size
    StorageDevice:
      additionalProperties: false
      description: Schema to describe a device both in 'system' and 'proposal'.
      properties:
        block:
          $ref: '#/components/schemas/StorageDeviceBlock'
        class:
          $ref: '#/components/schemas/StorageDeviceDeviceClass'
        description:
          type: string
        drive:
          $ref: '#/components/schemas/StorageDeviceDrive'
        filesystem:
          $ref: '#/components/schemas/StorageDeviceFilesystem'
        logicalVolumes:
          items:
            $ref: '#/components/schemas/StorageDevice'
          type: array
        md:
          $ref: '#/components/schemas/StorageDeviceMd'
        multipath:
          $ref: '#/components/schemas/StorageDeviceMultipath'
        name:
          type: string
        partition:
          $ref: '#/components/schemas/StorageDevicePartition'
        partitionTable:
          $ref: '#/components/schemas/StorageDevicePartitionTable'
        partitions:
          items:
            $ref: '#/components/schemas/StorageDevice'
          type: array
        sid:
          type: integer
        volumeGroup:
          $ref: '#/components/schemas/StorageDeviceVolumeGroup'
      required:
      - sid
      - name
      title: Device
      type: object
    StorageDeviceBlock:
      additionalProperties: false
      properties:
        encrypted:
          type: boolean
        shrinking:
          $ref: '#/components/schemas/StorageDeviceShrinkInfo'
        size:
          type: integer
        start:
          type: integer
        systems:
          items:
            type: string
          type: array
        udevIds:
          items:
            type: string
          type: array
        udevPaths:
          items:
            type: string
          type: array
      required:
      - start
      - size
      - shrinking
      type: object
    StorageDeviceDeviceClass:
      enum:
      - drive
      - mdRaid
      - partition
      - volumeGroup
      - logicalVolume
      title: Device class
    StorageDeviceDrive:
      additionalProperties: false
      properties:
        bus:
          type: string
        busId:
          type: string
        drivers:
          items:
            type: string
          type: array
        info:
          $ref: '#/components/schemas/StorageDeviceDriveInfo'
        model:
          type: string
        transport:
          type: string
        type:
          $ref: '#/components/schemas/StorageDeviceDriveType'
        vendor:
          type: string
      type: object
    StorageDeviceDriveInfo:
      additionalProperties: false
      properties:
        boss:
          type: boolean
        sdCard:
          type: boolean
      type: object
    StorageDeviceDriveType:
      enum:
      - disk
      - raid
      - multipath
      - dasd
      title: Drive type
    StorageDeviceFilesystem:
      additionalProperties: false
      properties:
        label:
          type: string
        mountPath:
          type: string
        sid:
          type: integer
        type:
          $ref: '#/components/schemas/StorageDeviceFilesystemType'
      required:
      - sid
      - type
      type: object
    StorageDeviceFilesystemType:
      enum:
      - bcachefs
      - btrfs
      - btrfsSnapshots
      - btrfsImmutable
      - exfat
      - ext2
      - ext3
      - ext4
      - f2fs
      - jfs
      - nfs
      - nilfs2
      - ntfs
      - reiserfs
      - swap
      - tmpfs
      - vfat
      - xfs
      title: Filesystem type
    StorageDeviceMd:
      additionalProperties: false
      properties:
        devices:
          items:
            type: integer
          type: array
        level:
          $ref: '#/components/schemas/StorageDeviceMdRaidLevel'
        uuid:
          type: string
      required:
      - level
      - devices
      type: object
    StorageDeviceMdRaidLevel:
      enum:
      - raid0
      - raid1
      - raid5
      - raid6
      - raid10
      title: MD level
    StorageDeviceMultipath:
      additionalProperties: false
      properties:
        wireNames:
          items:
            type: string
          type: array
      required:
      - wireNames
      type: object
    StorageDevicePartition:
      additionalProperties: false
      properties:
        efi:
          type: boolean
        id:
          $ref: '#/components/schemas/StorageDevicePartitionId'
      required:
      - efi
      type: object
    StorageDevicePartitionId:
      enum:
      - dos12
      - dos16
      - ntfs
      - dos32
      - extended
      - diag
      - prep
      - swap
      - linux
      - irst
      - lvm
      - raid
      - xbootldr
      - esp
      - bios_boot
      - windows_basic_data
      - microsoft_reserved
      - linux_home
      - linux_server_data
      - linux_root_arm
      - linux_root_aarch64
      - linux_root_ppc32
      - linux_root_ppc64be
      - linux_root_ppc64le
      - linux_root_riscv32
      - linux_root_riscv64
      - linux_root_s390
      - linux_root_s390x
      - linux_root_x86
      - linux_root_x86_64
      - linux_usr_arm
      - linux_usr_aarch64
      - linux_usr_ppc32
      - linux_usr_ppc64be
      - linux_usr_ppc64le
      - linux_usr_riscv32
      - linux_usr_riscv64
      - linux_usr_s390
      - linux_usr_s390x
      - linux_usr_x86
      - linux_usr_x86_64
      title: Partition id
    StorageDevicePartitionTable:
      additionalProperties: false
      properties:
        type:
          $ref: '#/components/schemas/StorageDevicePtableType'
        unusedSlots:
          items:
            $ref: '#/components/schemas/StorageDeviceUnusedSlot'
          type: array
      required:
      - type
      - unusedSlots
      type: object
    StorageDevicePtableType:
      enum:
      - gpt
      - msdos
      - dasd
      title: Partition table type
    StorageDeviceShrinkInfo:
      additionalProperties: false
      properties:
        minSize:
          type: integer
        reasons:
          items:
            type: string
          type: array
        supported:
          type: boolean
      required:
      - supported
      type: object
    StorageDeviceUnusedSlot:
      additionalProperties: false
      properties:
        size:
          type: integer
        start:
          type: integer
      required:
      - start
      - size
      type: object
    StorageDeviceVolumeGroup:
      additionalProperties: false
      properties:
        physicalVolumes:
          items:
            type: integer
          type: array
        size:
          type: integer
      required:
      - size
      - physicalVolumes
      type: object
    StorageModelConfig:
      additionalProperties: false
      description: Config model
      properties:
        boot:
          $ref: '#/components/schemas/StorageModelConfigBoot'
        drives:
          items:
            $ref: '#/components/schemas/StorageModelConfigDrive'
          type: array
        encryption:
          $ref: '#/components/schemas/StorageModelConfigEncryption'
        mdRaids:
          items:
            $ref: '#/components/schemas/StorageModelConfigMdRaid'
          type: array
        volumeGroups:
          items:
            $ref: '#/components/schemas/StorageModelConfigVolumeGroup'
          type: array
      title: Config
      type: object
    StorageModelConfigBoot:
      additionalProperties: false
      properties:
        bootloader:
          $ref: '#/components/schemas/StorageModelConfigBootloaderType'
        configure:
          type: boolean
        device:
          $ref: '#/components/schemas/StorageModelConfigBootDevice'
      required:
      - configure
      type: object
    StorageModelConfigBootDevice:
      additionalProperties: false
      properties:
        default:
          type: boolean
        name:
          type: string
      required:
      - default
      type: object
    StorageModelConfigBootloaderType:
      enum:
      - grub2
      - grub2-bls
      - systemd-boot
    StorageModelConfigDrive:
      additionalProperties: false
      properties:
        filesystem:
          $ref: '#/components/schemas/StorageModelConfigFilesystem'
        mountPath:
          type: string
        name:
          type: string
        partitions:
          items:
            $ref: '#/components/schemas/StorageModelConfigPartition'
          type: array
        ptableType:
          $ref: '#/components/schemas/StorageModelConfigPtableType'
        spacePolicy:
          $ref: '#/components/schemas/StorageModelConfigSpacePolicy'
      required:
      - name
      type: object
    StorageModelConfigEncryption:
      additionalProperties: false
      properties:
        password:
          type: string
        tpm:
          type: boolean
      required:
      - password
      type: object
    StorageModelConfigFilesystem:
      additionalProperties: false
      properties:
        default:
          type: boolean
        label:
          type: string
        mkfsExtraArguments:
          type: string
        mountOptions:
          items:
            type: string
          type: array
        reuse:
          type: boolean
        type:
          $ref: '#/components/schemas/StorageModelConfigFilesystemType'
      required:
      - default
      type: object
    StorageModelConfigFilesystemType:
      enum:
      - bcachefs
      - btrfs
      - btrfsImmutable
      - btrfsSnapshots
      - exfat
      - ext2
      - ext3
      - ext4
      - f2fs
      - jfs
      - nfs
      - nilfs2
      - ntfs
      - reiserfs
      - swap
      - tmpfs
      - vfat
      - xfs
    StorageModelConfigLogicalVolume:
      additionalProperties: false
      properties:
        delete:
          type: boolean
        deleteIfNeeded:
          type: boolean
        filesystem:
          $ref: '#/components/schemas/StorageModelConfigFilesystem'
        lvName:
          type: string
        mountPath:
          type: string
        name:
          type: string
        resize:
          type: boolean
        resizeIfNeeded:
          type: boolean
        size:
          $ref: '#/components/schemas/StorageModelConfigSize'
        stripeSize:
          type: integer
        stripes:
          type: integer
      type: object
    StorageModelConfigMdRaid:
      $comment: So far, drive and RAID are still identical. Let's reuse the definition.
      $ref: '#/components/schemas/StorageModelConfigDrive'
    StorageModelConfigPartition:
      additionalProperties: false
      properties:
        delete:
          type: boolean
        deleteIfNeeded:
          type: boolean
        filesystem:
          $ref: '#/components/schemas/StorageModelConfigFilesystem'
        id:
          $ref: '#/components/schemas/StorageModelConfigPartitionId'
        mountPath:
          type: string
        name:
          type: string
        resize:
          type: boolean
        resizeIfNeeded:
          type: boolean
        size:
          $ref: '#/components/schemas/StorageModelConfigSize'
      type: object
    StorageModelConfigPartitionId:
      enum:
      - linux
      - swap
      - lvm
      - raid
      - esp
      - prep
      - bios_boot
    StorageModelConfigPtableType:
      enum:
      - gpt
      - msdos
      - dasd
    StorageModelConfigSize:
      additionalProperties: false
      properties:
        default:
          type: boolean
        max:
          minimum: 0
          type: integer
        min:
          minimum: 0
          type: integer
      required:
      - default
      - min
      type: object
    StorageModelConfigSpacePolicy:
      enum:
      - delete
      - resize
      - keep
      - custom
    StorageModelConfigVolumeGroup:
      additionalProperties: false
      properties:
        extentSize:
          type: integer
        logicalVolumes:
          items:
            $ref: '#/components/schemas/StorageModelConfigLogicalVolume'
          type: array
        name:
          type: string
        spacePolicy:
          $ref: '#/components/schemas/StorageModelConfigSpacePolicy'
        targetDevices:
          items:
            type: string
          type: array
        targetDevicesPolicy:
          enum:
          - useNeeded
          - useAvailable
        vgName:
          type: string
      required:
      - vgName
      type: object
    StorageProposal:
      additionalProperties: false
      description: API description of the storage proposal.
      properties:
        actions:
          description: Sorted list of actions to execute during the commit phase.
          items:
            $ref: '#/components/schemas/StorageProposalAction'
          type: array
        devices:
          description: Expected layout of the system after the commit phase.
          items:
            $ref: '#/components/schemas/StorageDevice'
          type: array
      title: Proposal
      type: object
    StorageProposalAction:
      additionalProperties: false
      properties:
        delete:
          type: boolean
        device:
          type: integer
        resize:
          type: boolean
        subvol:
          type: boolean
        text:
          type: string
      required:
      - device
      - text
      type: object
    StorageSystemInfo:
      additionalProperties: false
      description: API description of the system
      properties:
        availableDrives:
          description: SIDs of the available drives
          items:
            type: integer
          type: array
        availableMdRaids:
          description: SIDs of the available MD RAIDs
          items:
            type: integer
          type: array
        availableVolumeGroups:
          description: SIDs of the available LVM volume groups
          items:
            type: integer
          type: array
        candidateDrives:
          description: SIDs of the drives that are candidate for installation
          items:
            type: integer
          type: array
        candidateMdRaids:
          description: SIDs of the MD RAIDs that are candidate for installation
          items:
            type: integer
          type: array
        devices:
          description: All relevant devices on the system
          items:
            $ref: '#/components/schemas/StorageDevice'
          type: array
        issues:
          items:
            $ref: '#/components/schemas/StorageSystemInfoIssue'
          type: array
        productMountPoints:
          description: Meaningful mount points for the current product
          items:
            type: string
          type: array
        volumeTemplates:
          description: Volumes defined by the product as templates
          items:
            $ref: '#/components/schemas/StorageSystemInfoVolume'
          type: array
      title: System
      type: object
    StorageSystemInfoEncryptionMethod:
      enum:
      - luks2
      - tpmFde
      title: Encryption method
    StorageSystemInfoIssue:
      additionalProperties: false
      properties:
        class:
          type: string
        description:
          type: string
        details:
          type: string
      required:
      - description
      type: object
    StorageSystemInfoVolume:
      additionalProperties: false
      properties:
        autoSize:
          type: boolean
        fsType:
          $ref: '#/components/schemas/StorageDeviceFilesystemType'
        maxSize:
          type: integer
        minSize:
          type: integer
        mountOptions:
          items:
            type: string
          type: array
        mountPath:
          type: string
        outline:
          $ref: '#/components/schemas/StorageSystemInfoVolumeOutline'
      required:
      - mountPath
      - minSize
      - autoSize
      type: object
    StorageSystemInfoVolumeOutline:
      additionalProperties: false
      properties:
        adjustByRam:
          type: boolean
        fsTypes:
          items:
            $ref: '#/components/schemas/StorageDeviceFilesystemType'
          type: array
        required:
          type: boolean
        sizeRelevantVolumes:
          items:
            type: string
          type: array
        snapshotsAffectSizes:
          type: boolean
        supportAutoSize:
          type: boolean
      required:
      - required
      - supportAutoSize
      type: object
    StringOrList:
      anyOf:
      - type: string
      - items:
          type: string
        type: array
    SystemInfo:
      description: Global information of the system where the installer is running.
      properties:
        bootloader:
          $ref: '#/components/schemas/BootloaderSystemInfo'
        dasd:
          $ref: '#/components/schemas/DasdSystemInfo'
        hardware:
          allOf:
          - $ref: '#/components/schemas/HardwareInfo'
          description: Hardware information
        hostname:
          $ref: '#/components/schemas/hostname.SystemInfo'
        iscsi:
          $ref: '#/components/schemas/IscsiSystemInfo'
        l10n:
          $ref: '#/components/schemas/l10n.SystemInfo'
        licenses:
          description: List of available licenses (in the current system language).
          items:
            $ref: '#/components/schemas/License'
          type: array
        network:
          $ref: '#/components/schemas/network.SystemInfo'
        products:
          description: List of known products.
          items:
            $ref: '#/components/schemas/Product'
          type: array
        software:
          $ref: '#/components/schemas/SystemInfo2'
        storage:
          $ref: '#/components/schemas/StorageSystemInfo'
        zfcp:
          $ref: '#/components/schemas/ZfcpSystemInfo'
      required:
      - products
      - licenses
      - hardware
      - hostname
      - l10n
      - software
      - network
      type: object
    SystemInfo2:
      description: |-
        Software-related information of the system where the installer
        is running.
      properties:
        patterns:
          description: List of known patterns.
          items:
            $ref: '#/components/schemas/Pattern'
          type: array
        registration:
          anyOf:
          - $ref: '#/components/schemas/RegistrationInfo'
          - type: 'null'
          description: Registration information
      required:
      - patterns
      type: object
    Task:
      description: Represents a background task.
      properties:
        description:
          description: Human-readable description of what the task does
          type: string
        id:
          description: Id of the task
          format: uint
          minimum: 0
          type: integer
        name:
          description: Short name identifying the task (e.g., "storage_config")
          type: string
        scope:
          allOf:
          - $ref: '#/components/schemas/Scope'
          description: Scope that originated the task
      required:
      - id
      - name
      - description
      - scope
      type: object
    TimezoneEntry:
      description: Represents a timezone, including each part as localized.
      properties:
        country:
          description: Localized name of the territory this timezone is associated to
          type:
          - string
          - 'null'
        id:
          allOf:
          - $ref: '#/components/schemas/TimezoneId'
          description: Timezone identifier (e.g. "Atlantic/Canary").
        parts:
          description: Localized parts (e.g., "Atlántico", "Canarias").
          items:
            type: string
          type: array
      required:
      - id
      - parts
      type: object
    TimezoneId:
      type: string
    UpdateQuestion:
      description: |-
        Represents an update operation over the list of questions.

        It is used by the HTTP layer only.
      oneOf:
      - additionalProperties: false
        description: Answer the question with the given answer.
        properties:
          answer:
            description: |-
              Question answer.

              It includes the action and, optionally, and additional value which depends
              on the question field.
            properties:
              action:
                description: Action to use for answering the question.
                type: string
              id:
                format: uint32
                minimum: 0
                type: integer
              value:
                description: Value to use for the question (e.g. password or string input, depending on the question type).
                type:
                - string
                - 'null'
            required:
            - id
            - action
            title: Predefined question action
            type: object
        required:
        - answer
        type: object
      - additionalProperties: false
        description: Remove the question.
        properties:
          delete:
            properties:
              id:
                format: uint32
                minimum: 0
                type: integer
            required:
            - id
            type: object
        required:
        - delete
        type: object
    UserFile:
      anyOf:
      - description: File or script content, starting with a shebang for scripts.
        properties:
          content:
            type: string
        required:
        - content
        type: object
      - description: Absolute or relative URL to fetch the file or script from.
        properties:
          url:
            type: string
        required:
        - url
        type: object
      description: Represents individual settings for single file deployment
      properties:
        destination:
          description: Destination path where file should be deployed (e.g., "/etc/config.d/my.conf").
          type: string
        group:
          default: root
          description: Group owning the file on installed system. The group has to already exist.
          type: string
        permissions:
          default: '0644'
          description: Permissions for file on installed system (e.g., "0644").
          type: string
        user:
          default: root
          description: User owning the file on installed system. The user has to already exist.
          type: string
      required:
      - destination
      title: User-defined file to deploy
      type: object
    VlanFlag:
      description: VLAN flags controlling behavior
      oneOf:
      - const: reorder-headers
        description: Reorder Ethernet headers to make packets look less like VLAN packets
        type: string
      - const: gvrp
        description: GARP VLAN Registration Protocol - dynamically register/deregister VLANs
        type: string
      - const: loose-binding
        description: Allow changing master device while connection is active
        type: string
      - const: mvrp
        description: Multiple VLAN Registration Protocol - next generation of GVRP
        type: string
    VlanSettings:
      properties:
        flags:
          items:
            $ref: '#/components/schemas/VlanFlag'
          type:
          - array
          - 'null'
        id:
          format: uint32
          minimum: 0
          type: integer
        parent:
          type: string
        protocol:
          type:
          - string
          - 'null'
      required:
      - parent
      - id
      type: object
    WirelessSettings:
      description: Wireless configuration
      properties:
        band:
          description: Frequency band of the wireless network
          type:
          - string
          - 'null'
        bssid:
          description: Only allow connection to this mac address
          type:
          - string
          - 'null'
        channel:
          description: Wireless channel of the wireless network
          format: uint32
          minimum: 0
          type: integer
        groupAlgorithms:
          description: A list of group/broadcast encryption algorithms
          items:
            type: string
          type: array
        hidden:
          description: Indicates that the wireless network is not broadcasting its SSID
          type: boolean
        mode:
          description: Wireless network mode
          type: string
        pairwiseAlgorithms:
          description: A list of pairwise encryption algorithms
          items:
            type: string
          type: array
        password:
          description: Password of the wireless network
          type:
          - string
          - 'null'
        pmf:
          description: Indicates whether Protected Management Frames must be enabled for the connection
          format: int32
          type: integer
        security:
          description: Security method/key management
          type: string
        ssid:
          description: SSID of the wireless network
          type: string
        wpaProtocolVersions:
          description: A list of allowed WPA protocol versions
          items:
            type: string
          type: array
      required:
      - security
      - ssid
      - mode
      type: object
    ZfcpConfig:
      additionalProperties: false
      description: zFCP config.
      properties:
        controllers:
          description: List of zFCP controllers.
          items:
            description: zFCP controller channel id.
            type: string
          type: array
        devices:
          description: List of zFCP devices.
          items:
            $ref: '#/components/schemas/ZfcpConfigDevice'
          type: array
      title: Config
      type: object
    ZfcpConfigDevice:
      additionalProperties: false
      properties:
        active:
          default: true
          description: Whether to activate the device.
          type: boolean
        channel:
          description: zFCP controller channel id.
          examples:
          - 0.0.fa00
          type: string
        lun:
          description: LUN of the SCSI device.
          examples:
          - '0x4010403300000000'
          type: string
        wwpn:
          description: WWPN of the target port.
          examples:
          - '0x500507630300c562'
          type: string
      required:
      - channel
      - wwpn
      - lun
      type: object
    ZfcpSystemInfo:
      additionalProperties: false
      description: API description of the zFCP system
      properties:
        controllers:
          description: zFCP controllers
          items:
            $ref: '#/components/schemas/ZfcpSystemInfoController'
          type: array
        devices:
          description: zFCP devices
          items:
            $ref: '#/components/schemas/ZfcpSystemInfoDevice'
          type: array
        lunScan:
          description: Whether automatic LUN scan is active in the system.
          type: boolean
      required:
      - lunScan
      - controllers
      - devices
      title: System
      type: object
    ZfcpSystemInfoController:
      additionalProperties: false
      properties:
        active:
          type: boolean
        channel:
          type: string
        lunScan:
          description: Whether the controller automatically scans LUNs.
          type: boolean
        wwpns:
          description: All available WWPNs.
          items:
            type: string
          type: array
      required:
      - channel
      - wwpns
      - lunScan
      - active
      type: object
    ZfcpSystemInfoDevice:
      additionalProperties: false
      properties:
        active:
          type: boolean
        channel:
          type: string
        deviceName:
          description: Device name assigned by the kernel once it is active.
          type: string
        lun:
          type: string
        wwpn:
          type: string
      required:
      - channel
      - wwpn
      - lun
      - active
      type: object
    access.Config:
      description: |-
        Remote Access configuration.

        Allows to explicitly specify how machine has to be accessed after installation.
      properties:
        ssh:
          anyOf:
          - $ref: '#/components/schemas/AccessValue'
          - type: 'null'
          description: Allows to specify if ssh access has to be enabled after installation or keep product defaults.
        webConsole:
          anyOf:
          - $ref: '#/components/schemas/AccessValue'
          - type: 'null'
          description: Allows to specify if web console access has to be enabled after installation or keep product defaults.
      type: object
    access.ExtendedConfig:
      description: Remote Access extended configuration that is resolved
      properties:
        ssh:
          allOf:
          - $ref: '#/components/schemas/AccessValue'
          description: Remote access to SSH
        webConsole:
          allOf:
          - $ref: '#/components/schemas/AccessValue'
          description: Remote access to Web Console
      required:
      - ssh
      - webConsole
      type: object
    bootloader.Config:
      description: Bootloader configuration.
      properties:
        extraKernelParams:
          description: Bootloader extra kernel parameters.
          type:
          - string
          - 'null'
        stopOnBootMenu:
          description: Whether bootloader should stop on boot menu.
          type:
          - boolean
          - 'null'
        timeout:
          description: Bootloader timeout.
          format: uint32
          minimum: 0
          type:
          - integer
          - 'null'
        updateNvram:
          description: Whether bootloader should update persistent RAM.
          type:
          - boolean
          - 'null'
      title: Bootloader settings
      type: object
    hostname.Config:
      description: Hostname config.
      properties:
        hostname:
          description: System transient hostname.
          examples:
          - agama-host
          type:
          - string
          - 'null'
        static:
          description: System static hostname.
          examples:
          - agama-host.example.com
          type:
          - string
          - 'null'
        transient:
          deprecated: true
          description: System transient hostname.
          examples:
          - agama-host
          type:
          - string
          - 'null'
      title: Hostname settings
      type: object
    hostname.Proposal:
      description: Describes what Agama proposes for the target system.
      properties:
        hostname:
          type: string
        static:
          type:
          - string
          - 'null'
      required:
      - hostname
      type: object
    hostname.SystemInfo:
      description: Describes the current system hostname information
      properties:
        hostname:
          type: string
        static:
          type:
          - string
          - 'null'
      required:
      - hostname
      type: object
    l10n.Config:
      description: Localization config.
      properties:
        keyboard:
          deprecated: true
          description: Keymap (e.g., "us", "cz(qwerty)", etc.).
          examples:
          - us
          - en
          - es
          type:
          - string
          - 'null'
        keymap:
          description: Keymap (e.g., "us", "cz(qwerty)", etc.).
          examples:
          - us
          - en
          - es
          type:
          - string
          - 'null'
        language:
          deprecated: true
          description: Locale (e.g., "en_US.UTF-8").
          examples:
          - en_US.UTF-8
          - en_US
          type:
          - string
          - 'null'
        locale:
          description: Locale (e.g., "en_US.UTF-8").
          examples:
          - en_US.UTF-8
          - en_US
          type:
          - string
          - 'null'
        timezone:
          description: Timezone (e.g., "Europe/Berlin").
          examples:
          - Europe/Berlin
          type:
          - string
          - 'null'
      title: Localization settings
      type: object
    l10n.Proposal:
      description: Describes what Agama proposes for the target system.
      properties:
        keymap:
          description: Keymap (e.g., "us", "cz(qwerty)", etc.).
          type: string
        locale:
          description: Locale (e.g., "en_US.UTF-8").
          type: string
        timezone:
          description: Timezone (e.g., "Europe/Berlin").
          type: string
      required:
      - keymap
      - locale
      - timezone
      type: object
    l10n.SystemConfig:
      properties:
        keymap:
          type:
          - string
          - 'null'
        locale:
          type:
          - string
          - 'null'
      type: object
    l10n.SystemInfo:
      description: Localization-related information of the system where the installer is running.
      properties:
        keymap:
          description: Keymap of the system where Agama is running.
          type: string
        keymaps:
          description: List of known keymaps.
          items:
            $ref: '#/components/schemas/Keymap'
          type: array
        locale:
          description: Locale of the system where Agama is running.
          type: string
        locales:
          description: List of know locales.
          items:
            $ref: '#/components/schemas/LocaleEntry'
          type: array
        timezone:
          description: Timezone of the system where Agama is running.
          type: string
        timezones:
          description: List of known timezones.
          items:
            $ref: '#/components/schemas/TimezoneEntry'
          type: array
      required:
      - locales
      - timezones
      - keymaps
      - locale
      - keymap
      - timezone
      type: object
    network.Config:
      description: Network config settings for installation
      properties:
        connections:
          anyOf:
          - $ref: '#/components/schemas/NetworkConnectionsCollection'
          - type: 'null'
          description: Connections to use in the installation
        state:
          anyOf:
          - $ref: '#/components/schemas/StateSettings'
          - type: 'null'
          description: Network general settings
      type: object
    network.Proposal:
      description: Network proposal settings for installation
      properties:
        connections:
          allOf:
          - $ref: '#/components/schemas/NetworkConnectionsCollection'
          description: Connections to use in the installation
        state:
          allOf:
          - $ref: '#/components/schemas/StateSettings'
          description: General network settings
      required:
      - connections
      - state
      type: object
    network.SystemInfo:
      description: Network settings for installation
      properties:
        accessPoints:
          items:
            $ref: '#/components/schemas/AccessPoint'
          type: array
        connections:
          allOf:
          - $ref: '#/components/schemas/NetworkConnectionsWithStateCollection'
          description: Connections to use in the installation
        devices:
          items:
            $ref: '#/components/schemas/Device'
          type: array
        state:
          $ref: '#/components/schemas/StateSettings'
      required:
      - accessPoints
      - connections
      - devices
      - state
      type: object
    ntp.Config:
      description: NTP configuration.
      properties:
        sources:
          description: NTP sources.
          items:
            $ref: '#/components/schemas/Source'
          type:
          - array
          - 'null'
      title: NTP configuration
      type: object
    proxy.Config:
      description: Proxy config.
      properties:
        enabled:
          description: Whether proxy is enabled.
          type:
          - boolean
          - 'null'
        ftp:
          description: URL to be used for the FTP proxy.
          type:
          - string
          - 'null'
        gopher:
          description: URL to be used for the Gopher proxy.
          type:
          - string
          - 'null'
        http:
          description: URL to be used for the HTTP proxy.
          examples:
          - http://proxy.provider.de:3128/
          type:
          - string
          - 'null'
        https:
          description: URL to be used for the HTTPS proxy.
          type:
          - string
          - 'null'
        noProxy:
          description: Comma-separated list of domains/hosts to bypass proxy for.
          type:
          - string
          - 'null'
        socks:
          description: URL to be used for the SOCKS proxy.
          type:
          - string
          - 'null'
        socks5:
          description: SOCKS5 server address.
          examples:
          - office-proxy.example.com:8881
          type:
          - string
          - 'null'
      title: Proxy settings
      type: object
    questions.Action:
      description: |-
        Question action.

        They are usually presented as the button in a form.
      properties:
        id:
          description: Action value.
          type: string
        label:
          description: Description of the action.
          type: string
      required:
      - id
      - label
      type: object
    questions.Answer:
      description: |-
        Question answer.

        It includes the action and, optionally, and additional value which depends
        on the question field.
      properties:
        action:
          description: Action to use for answering the question.
          type: string
        value:
          description: Value to use for the question (e.g. password or string input, depending on the question type).
          type:
          - string
          - 'null'
      required:
      - action
      title: Predefined question action
      type: object
    questions.Config:
      description: Questions configuration.
      properties:
        answers:
          description: List of answers to automatically use for matching questions.
          items:
            $ref: '#/components/schemas/AnswerRule'
          type:
          - array
          - 'null'
        policy:
          anyOf:
          - $ref: '#/components/schemas/Policy'
          - type: 'null'
          description: 'Policy to answer questions: "auto" to automatically answer questions or "user" to ask the user.'
      title: How to handle Agama questions
      type: object
    security.Config:
      description: Security settings
      properties:
        sslCertificates:
          description: List of SSL certificates to add to the system.
          items:
            $ref: '#/components/schemas/SSLFingerprint'
          type:
          - array
          - 'null'
      title: Security settings
      type: object
    software.Proposal:
      description: Describes what Agama proposes for the target system.
      properties:
        patterns:
          additionalProperties:
            $ref: '#/components/schemas/SelectedBy'
          description: |-
            Patterns selection. It is represented as a hash map where the key is the pattern's name
            and the value why the pattern is selected.
          type: object
        registration:
          description: |-
            Registration proposal. Maybe same as config?
            TODO: implement it
          type: 'null'
        usedSpace:
          description: Space required for installation in KiB.
          format: int64
          type: integer
      type: object
    users.Config:
      description: |-
        User settings

        Holds the user settings for the installation.
      properties:
        root:
          anyOf:
          - $ref: '#/components/schemas/RootUserConfig'
          - type: 'null'
        user:
          anyOf:
          - $ref: '#/components/schemas/FirstUserConfig'
          - type: 'null'
      type: object
  securitySchemes:
    bearerAuth:
      bearerFormat: JWT
      description: JWT token obtained from the authentication endpoint
      scheme: bearer
      type: http
externalDocs:
  description: Full Agama documentation
  url: https://agama-project.github.io
info:
  contact:
    email: agama-devel@lists.opensuse.org
    name: Agama Project Team
    url: https://github.com/agama-project/agama
  description: Complete HTTP API for the Agama installer. See https://agama-project.github.io for more information.
  license:
    name: GPL-2.0
    url: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
  title: Agama HTTP API
  version: 0.1.0
openapi: 3.1.0
paths:
  /api/action:
    post:
      description: Executes an installation action such as starting the installation process or probing hardware. Some actions may be blocked if there are pending issues or if the system is busy.
      operationId: executeAction
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Action'
        required: true
      responses:
        '200':
          description: no content
        '400':
          content:
            text/plain:
              schema:
                type: string
          description: Failed to parse the request body as JSON
        '415':
          content:
            text/plain:
              schema:
                type: string
          description: 'Expected request with `Content-Type: application/json`'
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Action blocked by backend state (e.g., pending issues or system busy)
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal server error
      summary: Execute action
      tags:
      - Actions
  /api/auth:
    delete:
      description: Invalidates the current session by clearing the authentication cookie. After logout, the token should no longer be used for authenticated requests.
      operationId: logout
      responses:
        '200':
          description: no content
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unauthorized - invalid or missing token
      summary: End user session
      tags:
      - Authentication
    get:
      description: Verifies that the current authentication token is valid. Returns 200 if the user is authenticated, 401 otherwise. Use this endpoint to check if a session is still active.
      operationId: checkSession
      responses:
        '200':
          description: no content
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unauthorized - invalid or missing token
      summary: Check session status
      tags:
      - Authentication
    post:
      description: Authenticates the user with the provided password and returns a JWT bearer token. The token should be included in the Authorization header for subsequent requests. Also sets an HttpOnly session cookie for browser-based clients.
      operationId: login
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthResponse'
          description: Authentication successful, returns bearer token
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Authentication failed - invalid credentials
      security: []
      summary: Authenticate user
      tags:
      - Authentication
  /api/config:
    get:
      description: Returns the current user-defined configuration.
      operationId: getConfiguration
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Config'
          description: Configuration retrieved successfully
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal server error
      summary: Get configuration
      tags:
      - Configuration
    patch:
      description: Partially updates the configuration. Only the specified fields will be changed, all other fields remain unchanged. This is the preferred method for making incremental configuration changes.
      operationId: patchConfiguration
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Patch'
        description: Patch for the config.
        required: true
      responses:
        '200':
          description: no content
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Invalid configuration schema or malformed JSON
        '415':
          content:
            text/plain:
              schema:
                type: string
          description: 'Expected request with `Content-Type: application/json`'
        '422':
          content:
            text/plain:
              schema:
                type: string
          description: Failed to deserialize the JSON body into the target type
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal server error
      summary: Patch configuration
      tags:
      - Configuration
    put:
      description: Replaces the entire configuration. Any fields not included in the request will be removed from the configuration. For partial updates, use PATCH instead. The request body should be a JSON object conforming to the Config schema.
      operationId: updateConfiguration
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Config'
        description: Profile definition for automated installation.
        required: true
      responses:
        '200':
          description: no content
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Invalid configuration schema or malformed JSON
        '415':
          content:
            text/plain:
              schema:
                type: string
          description: 'Expected request with `Content-Type: application/json`'
        '422':
          content:
            text/plain:
              schema:
                type: string
          description: Failed to deserialize the JSON body into the target type
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal server error
      summary: Update configuration
      tags:
      - Configuration
  /api/extended_config:
    get:
      description: Returns the extended configuration including computed defaults and system-generated values. Use this endpoint to see the complete configuration including values not explicitly set by the user.
      operationId: getExtendedConfiguration
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Config'
          description: Extended configuration retrieved successfully
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal server error
      summary: Get extended configuration
      tags:
      - Configuration
  /api/issues:
    get:
      description: Returns the list of all current issues detected during the installation process. Issues represent problems or warnings that may need to be addressed before proceeding with the installation.
      operationId: listIssues
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/IssueWithScope'
                type: array
          description: List of issues with their scopes
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal server error
      summary: List issues
      tags:
      - Issues & Questions
  /api/licenses/{id}:
    get:
      description: Returns the content of a specific license. The license is always returned in the current system language (see the ConfigureL10n action).
      operationId: getLicenseById
      parameters:
      - description: License identifier (e.g., "license.final")
        in: path
        name: id
        required: true
        schema:
          description: License identifier (e.g., "license.final")
          type: string
        style: simple
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LicenseContent'
          description: License retrieved successfully
        '404':
          description: no content
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal server error
      summary: Get license by ID
      tags:
      - System & Monitoring
  /api/proposal:
    get:
      description: Returns the proposed configuration for the target system. The proposal is generated based on the current configuration and represents how the system will be configured when installed.
      operationId: getInstallationProposal
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
          description: Proposal successfully retrieved
        '404':
          description: no content
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal server error
      summary: Get installation proposal
      tags:
      - Configuration
  /api/questions:
    get:
      description: Returns all pending questions that require user input. Questions represent interactive prompts where the installer needs additional information or decisions from the user.
      operationId: listQuestions
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/Question'
                type: array
          description: List of pending questions
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal server error
      summary: List questions
      tags:
      - Issues & Questions
    patch:
      description: Updates the question collection by answering or removing a question. Use this endpoint to provide an answer to a pending question or to dismiss it.
      operationId: updateQuestion
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateQuestion'
        description: |-
          Represents an update operation over the list of questions.

          It is used by the HTTP layer only.
        required: true
      responses:
        '200':
          description: no content
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Malformed JSON
        '415':
          content:
            text/plain:
              schema:
                type: string
          description: 'Expected request with `Content-Type: application/json`'
        '422':
          content:
            text/plain:
              schema:
                type: string
          description: Failed to deserialize the JSON body into the target type
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal server error
      summary: Update question
      tags:
      - Issues & Questions
    post:
      description: Registers a new question for user interaction. The question will be added to the list of pending questions and can be answered or deleted later.
      operationId: createQuestion
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuestionSpec'
        description: |-
          Defines how a question should look like.

          A question is composed by a set of actions and, optionally, and additional
          field. For instance, a question to decrypt a device using a password would have:

          * a pair of actions, "decrypt" and "skip".
          * a password field.

          In other cases, like a simple "yes/no" questions, the field would not be needed.
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Question'
          description: Question created successfully
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Malformed JSON
        '415':
          content:
            text/plain:
              schema:
                type: string
          description: 'Expected request with `Content-Type: application/json`'
        '422':
          content:
            text/plain:
              schema:
                type: string
          description: Failed to deserialize the JSON body into the target type
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal server error
      summary: Create question
      tags:
      - Issues & Questions
  /api/status:
    get:
      description: Returns the current status of the installation process, including the current stage and the progress of the ongoing actions. This endpoint can be polled to monitor installation progress.
      operationId: getInstallerStatus
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Status'
          description: Status of the installation
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal server error
      summary: Get installer status
      tags:
      - System & Monitoring
  /api/system:
    get:
      description: Returns detailed information about the installation system including hardware details, platform information, and system capabilities. It includes Agama specific information like the list of available products for installation.
      operationId: getSystemInfo
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SystemInfo'
          description: System information retrieved successfully
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal server error
      summary: Get system information
      tags:
      - System & Monitoring
security:
- bearerAuth: []
servers:
- description: Agama instance URL
  url: '{agamaUrl}'
  variables:
    agamaUrl:
      default: https://agama.local
      description: URL of the Agama instance
tags:
- description: User authentication and session management
  name: Authentication
- description: System information, installation status, and progress monitoring
  name: System & Monitoring
- description: System configuration management
  name: Configuration
- description: Installation actions and commands
  name: Actions
- description: Problem tracking and interactive questions
  name: Issues & Questions
