# Include{groups}
questions:
# Include{global}
  - variable: ipAddressPools
    group: App Configuration
    label: IP Address Pools Object
    schema:
      type: list
      default: []
      items:
        - variable: ipAddressPoolsEntry
          label: IP Address Pool Entry
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: name
                label: Name
                description: Name of the IP address pool
                schema:
                  type: string
                  required: true
                  default: ""
              - variable: autoAssign
                label: Auto Assign
                description: AutoAssign flag used to prevent MetallB from automatic
                    allocation for a pool.
                schema:
                  type: boolean
                  default: true
              - variable: avoidBuggyIPs
                label: Avoid Buggy IPs
                description: AvoidBuggyIPs prevents addresses ending with .0 and .255
                    to be used by a pool.
                schema:
                  type: boolean
                  default: false
              - variable: addresses
                label: Addresses Pools
                description: A list of IP address ranges over which MetalLB has authority.
                    You can list multiple ranges in a single pool, they will all share
                    the same settings. Each range can be either a CIDR prefix, or an
                    explicit start-end range of IPs.
                schema:
                  type: list
                  default: []
                  items:
                    - variable: addressPoolEntry
                      label: Address Pool Entry
                      schema:
                        type: string
                        default: ""
                        required: true
  - variable: L2Advertisements
    group: App Configuration
    label: L2 Advertisements
    description: L2Advertisement allows to advertise the LoadBalancer IPs provided
        by the selected pools via L2.
    schema:
      type: list
      default: []
      items:
        - variable: L2AdvertisementEntry
          label: L2 Advertisement Entry
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: name
                label: Name
                description: Name of the L2 Advertisement
                schema:
                  type: string
                  required: true
                  default: ""
              - variable: addressPools
                label: Address Pools
                description: The list of IPAddressPools to advertise via this advertisement,
                    selected by name.
                schema:
                  type: list
                  default: []
                  items:
                    - variable: addressPoolEntry
                      label: Address Pool Entry
                      schema:
                        type: string
                        default: ""
                        required: true
              - variable: nodeSelectors
                label: Node Selectors
                description: NodeSelectors allows to limit the nodes to announce as
                    next hops for the LoadBalancer IP. When empty, all the nodes having  are
                    announced as next hops.
                schema:
                  type: list
                  default: []
                  items:
                    - variable: nodeSelectorEntry
                      label: Node Selector Entry
                      schema:
                        type: string
                        default: ""
                        required: true
  - variable: Communities
    group: App Configuration
    label: Communities
    description: Community is a collection of aliases for communities. Users can
      define named aliases to be used in the BGPPeer CRD.
    schema:
      type: list
      default: []
      items:
        - variable: CommunityEntry
          label: Community Entry
          schema:
            additional_attrs: true
            type: dict
            attrs:
            - variable: name
              label: Name
              description: The name of the alias for the community.
              schema:
                type: string
                required: true
                default: ""
            - variable: value
              label: Value
              description: The BGP community value corresponding to the given name.
              schema:
                type: string
                required: true
                default: ""
  - variable: Peers
    group: App Configuration
    label: Peers
    description: BGPPeer is the Schema for the peers API.
    schema:
      type: list
      default: []
      items:
        - variable: PeerEntry
          label: Peer Entry
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: name
                label: Name
                description: The name of the peer.
                schema:
                  type: string
                  required: true
                  default: ""
              - variable: bfdProfile
                label: BFD Profile
                description: The name of the BFD Profile to be used for the BFD session
                    associated to the BGP session. If not set, the BFD session won't
                    be set up.
                schema:
                  type: string
                  default: ""
              - variable: ebgpMultiHop
                label: EBGP MultiHop
                description: TTo set if the BGPPeer is multi-hops away. Needed for
                    FRR mode only.
                schema:
                  type: boolean
                  default: false
              - variable: holdTime
                label: Hold Time
                description: Requested BGP hold time, per RFC4271.
                schema:
                  type: int
              - variable: keepaliveTime
                label: Keep Alive Time
                description: Requested BGP keep alive time, per RFC4271.
                schema:
                  type: int
              - variable: myASN
                label: My ASN
                description: AS number to use for the local end of the session.
                schema:
                  type: int
              - variable: password
                label: Password
                description: Authentication password for routers enforcing TCP MD5
                    authenticated sessions
                schema:
                  type: string
                  private: true
                  default: ""
              - variable: peerASN
                label: Peer ASN
                description: AS number to expect from the remote end of the session.
                schema:
                  type: string
                  valid_chars: '^[0-9]*$'
                  default: ""
              - variable: peerAddress
                label: Peer Address
                description: Address to dial when establishing the session.
                schema:
                  type: string
                  default: ""
              - variable: peerPort
                label: Peer Port
                description: Port to dial when establishing the session.
                schema:
                  type: string
                  valid_chars: '^[0-9]*$'
                  default: ""
              - variable: routerID
                label: Router ID
                description: BGP router ID to advertise to the peer
                schema:
                  type: string
                  default: ""
              - variable: sourceAddress
                label: Source Address
                description: Source address to use when establishing the session.
                schema:
                  type: string
                  default: ""
              - variable: nodeSelectors
                label: Node Selectors
                description: Only connect to this peer on nodes that match one of
                    these selectors.
                schema:
                  type: list
                  default: []
                  items:
                    - variable: nodeSelectorEntry
                      label: Node Selector Entry
                      schema:
                        type: string
                        default: ""
                        required: true
  - variable: BGPAdvertisements
    group: App Configuration
    label: BGP Advertisements
    description: BGPAdvertisement allows to advertise the IPs coming from the
      selected IPAddressPools via BGP.
    schema:
      type: list
      default: []
      items:
        - variable: BGPAdvertisementEntry
          label: BGP Advertisement Entry
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: name
                label: Name
                description: Name of the BGP Advertisement
                schema:
                  type: string
                  required: true
                  default: ""
              - variable: addressPools
                label: Address Pools
                description: The list of IPAddressPools to advertise via this advertisement,
                    selected by name.
                schema:
                  type: list
                  default: []
                  items:
                    - variable: addressPoolEntry
                      label: Address Pool Entry
                      schema:
                        type: string
                        default: ""
                        required: true
              - variable: aggregationLength
                label: Aggregation Length
                description: The aggregation-length advertisement option lets you
                  "roll up" the /32s into a larger prefix. Defaults to 32. Works for
                  IPv4 addresses.
                schema:
                  type: string
                  valid_chars: '^[0-9]*$'
                  default: ""
              - variable: localpref
                label: Local Pref
                description: The BGP LOCAL_PREF attribute which is used by BGP best
                  path algorithm, Path with higher localpref is preferred over one
                  with lower localpref.
                schema:
                  type: string
                  valid_chars: '^[0-9]*$'
                  default: ""
              - variable: communities
                label: Communities
                description: The BGP communities to be associated with the announcement.
                    Each item can be a community of the form 1234:1234 or the name of
                    an alias defined in the Community CRD.
                schema:
                  type: list
                  default: []
                  items:
                    - variable: communityEntry
                      label: Community Entry
                      schema:
                        type: string
                        default: ""
                        required: true
              - variable: peers
                label: Peers
                description: Peers limits the BGPpeer to advertise the ips of the
                    selected pools to. When empty, the loadbalancer IP is announced
                    to all the BGPPeers configured.
                schema:
                  type: list
                  default: []
                  items:
                    - variable: peerEntry
                      label: Peer Entry
                      schema:
                        type: string
                        default: ""
                        required: true
