---
# Source: metallb/charts/frr-k8s/templates/service-accounts.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metallb-frr-k8s-controller
  namespace: "metallb-system"
  labels:
    helm.sh/chart: frr-k8s-0.0.25
    app.kubernetes.io/name: frr-k8s
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.0.25"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
---
# Source: metallb/templates/service-accounts.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metallb-controller
  namespace: "metallb-system"
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
---
# Source: metallb/templates/service-accounts.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metallb-speaker
  namespace: "metallb-system"
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: speaker
---
# Source: metallb/charts/frr-k8s/templates/webhooks.yaml
apiVersion: v1
kind: Secret
metadata:
  name: frr-k8s-webhook-server-cert
  namespace: "metallb-system"
---
# Source: metallb/templates/webhooks.yaml
apiVersion: v1
kind: Secret
metadata:
  name: metallb-webhook-cert
  namespace: "metallb-system"
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
---
# Source: metallb/charts/frr-k8s/templates/controller.yaml
# FRR expects to have these files owned by frr:frr on startup.
# Having them in a ConfigMap allows us to modify behaviors: for example enabling more daemons on startup.
apiVersion: v1
kind: ConfigMap
metadata:
  name: metallb-frr-k8s-frr-startup
  namespace: "metallb-system"
  labels:
    helm.sh/chart: frr-k8s-0.0.25
    app.kubernetes.io/name: frr-k8s
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.0.25"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: frr-k8s
data:
  daemons: |
    # This file tells the frr package which daemons to start.
    #
    # Sample configurations for these daemons can be found in
    # /usr/share/doc/frr/examples/.
    #
    # ATTENTION:
    #
    # When activating a daemon for the first time, a config file, even if it is
    # empty, has to be present *and* be owned by the user and group "frr", else
    # the daemon will not be started by /etc/init.d/frr. The permissions should
    # be u=rw,g=r,o=.
    # When using "vtysh" such a config file is also needed. It should be owned by
    # group "frrvty" and set to ug=rw,o= though. Check /etc/pam.d/frr, too.
    #
    # The watchfrr and zebra daemons are always started.
    #
    bgpd=yes
    ospfd=no
    ospf6d=no
    ripd=no
    ripngd=no
    isisd=no
    pimd=no
    ldpd=no
    nhrpd=no
    eigrpd=no
    babeld=no
    sharpd=no
    pbrd=no
    bfdd=yes
    fabricd=no
    vrrpd=no

    #
    # If this option is set the /etc/init.d/frr script automatically loads
    # the config via "vtysh -b" when the servers are started.
    # Check /etc/pam.d/frr if you intend to use "vtysh"!
    #
    vtysh_enable=yes
    zebra_options="  -A 127.0.0.1 -K 120 -s 90000000 --limit-fds 100000"
    bgpd_options="   -A 127.0.0.1  -p 0 --limit-fds 100000"
    ospfd_options="  -A 127.0.0.1"
    ospf6d_options=" -A ::1"
    ripd_options="   -A 127.0.0.1"
    ripngd_options=" -A ::1"
    isisd_options="  -A 127.0.0.1"
    pimd_options="   -A 127.0.0.1"
    ldpd_options="   -A 127.0.0.1"
    nhrpd_options="  -A 127.0.0.1"
    eigrpd_options=" -A 127.0.0.1"
    babeld_options=" -A 127.0.0.1"
    sharpd_options=" -A 127.0.0.1"
    pbrd_options="   -A 127.0.0.1"
    staticd_options="-A 127.0.0.1 --limit-fds 100000"
    bfdd_options="   -A 127.0.0.1 --limit-fds 100000"
    fabricd_options="-A 127.0.0.1"
    vrrpd_options="  -A 127.0.0.1"

    # configuration profile
    #
    #frr_profile="traditional"
    #frr_profile="datacenter"

    #
    # This is the maximum number of FD's that will be available.
    # Upon startup this is read by the control files and ulimit
    # is called. Uncomment and use a reasonable value for your
    # setup if you are expecting a large number of peers in
    # say BGP.
    #MAX_FDS=1024

    # The list of daemons to watch is automatically generated by the init script.
    #watchfrr_options=""

    # for debugging purposes, you can specify a "wrap" command to start instead
    # of starting the daemon directly, e.g. to use valgrind on ospfd:
    #   ospfd_wrap="/usr/bin/valgrind"
    # or you can use "all_wrap" for all daemons, e.g. to use perf record:
    #   all_wrap="/usr/bin/perf record --call-graph -"
    # the normal daemon command is added to this at the end.
  vtysh.conf: |+
    service integrated-vtysh-config
  frr.conf: |+
    ! This file gets overriden the first time the speaker renders a config.
    ! So anything configured here is only temporary.
    frr version 8.0
    frr defaults traditional
    hostname Router
    line vty
    log stdout informational
---
# Source: metallb/templates/exclude-l2-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: metallb-excludel2
  namespace: "metallb-system"
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
data:
  excludel2.yaml: |
    announcedInterfacesToExclude:
    - ^docker.*
    - ^cbr.*
    - ^dummy.*
    - ^virbr.*
    - ^lxcbr.*
    - ^veth.*
    - ^lo$
    - ^cali.*
    - ^tunl.*
    - ^flannel.*
    - ^kube-ipvs.*
    - ^cni.*
    - ^nodelocaldns.*
    - ^lxc.*
---
# Source: metallb/charts/crds/templates/crds.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.19.0
  name: bfdprofiles.metallb.io
spec:
  group: metallb.io
  names:
    kind: BFDProfile
    listKind: BFDProfileList
    plural: bfdprofiles
    singular: bfdprofile
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - jsonPath: .spec.passiveMode
          name: Passive Mode
          type: boolean
        - jsonPath: .spec.transmitInterval
          name: Transmit Interval
          type: integer
        - jsonPath: .spec.receiveInterval
          name: Receive Interval
          type: integer
        - jsonPath: .spec.detectMultiplier
          name: Multiplier
          type: integer
      name: v1beta1
      schema:
        openAPIV3Schema:
          description: |-
            BFDProfile represents the settings of the bfd session that can be
            optionally associated with a BGP session.
          properties:
            apiVersion:
              description: |-
                APIVersion defines the versioned schema of this representation of an object.
                Servers should convert recognized schemas to the latest internal value, and
                may reject unrecognized values.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
              type: string
            kind:
              description: |-
                Kind is a string value representing the REST resource this object represents.
                Servers may infer this from the endpoint the client submits requests to.
                Cannot be updated.
                In CamelCase.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
              type: string
            metadata:
              type: object
            spec:
              description: BFDProfileSpec defines the desired state of BFDProfile.
              properties:
                detectMultiplier:
                  description: |-
                    Configures the detection multiplier to determine
                    packet loss. The remote transmission interval will be multiplied
                    by this value to determine the connection loss detection timer.
                  format: int32
                  maximum: 255
                  minimum: 2
                  type: integer
                echoInterval:
                  description: |-
                    Configures the minimal echo receive transmission
                    interval that this system is capable of handling in milliseconds.
                    Defaults to 50ms
                  format: int32
                  maximum: 60000
                  minimum: 10
                  type: integer
                echoMode:
                  description: |-
                    Enables or disables the echo transmission mode.
                    This mode is disabled by default, and not supported on multi
                    hops setups.
                  type: boolean
                minimumTtl:
                  description: |-
                    For multi hop sessions only: configure the minimum
                    expected TTL for an incoming BFD control packet.
                  format: int32
                  maximum: 254
                  minimum: 1
                  type: integer
                passiveMode:
                  description: |-
                    Mark session as passive: a passive session will not
                    attempt to start the connection and will wait for control packets
                    from peer before it begins replying.
                  type: boolean
                receiveInterval:
                  description: |-
                    The minimum interval that this system is capable of
                    receiving control packets in milliseconds.
                    Defaults to 300ms.
                  format: int32
                  maximum: 60000
                  minimum: 10
                  type: integer
                transmitInterval:
                  description: |-
                    The minimum transmission interval (less jitter)
                    that this system wants to use to send BFD control packets in
                    milliseconds. Defaults to 300ms
                  format: int32
                  maximum: 60000
                  minimum: 10
                  type: integer
              type: object
            status:
              description: BFDProfileStatus defines the observed state of BFDProfile.
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
---
# Source: metallb/charts/crds/templates/crds.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.19.0
  name: bgpadvertisements.metallb.io
spec:
  group: metallb.io
  names:
    kind: BGPAdvertisement
    listKind: BGPAdvertisementList
    plural: bgpadvertisements
    singular: bgpadvertisement
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - jsonPath: .spec.ipAddressPools
          name: IPAddressPools
          type: string
        - jsonPath: .spec.ipAddressPoolSelectors
          name: IPAddressPool Selectors
          type: string
        - jsonPath: .spec.peers
          name: Peers
          type: string
        - jsonPath: .spec.nodeSelectors
          name: Node Selectors
          priority: 10
          type: string
      name: v1beta1
      schema:
        openAPIV3Schema:
          description: |-
            BGPAdvertisement allows to advertise the IPs coming
            from the selected IPAddressPools via BGP, setting the parameters of the
            BGP Advertisement.
          properties:
            apiVersion:
              description: |-
                APIVersion defines the versioned schema of this representation of an object.
                Servers should convert recognized schemas to the latest internal value, and
                may reject unrecognized values.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
              type: string
            kind:
              description: |-
                Kind is a string value representing the REST resource this object represents.
                Servers may infer this from the endpoint the client submits requests to.
                Cannot be updated.
                In CamelCase.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
              type: string
            metadata:
              type: object
            spec:
              description: BGPAdvertisementSpec defines the desired state of BGPAdvertisement.
              properties:
                aggregationLength:
                  default: 32
                  description: The aggregation-length advertisement option lets you “roll up” the /32s into a larger prefix. Defaults to 32. Works for IPv4 addresses.
                  format: int32
                  minimum: 1
                  type: integer
                aggregationLengthV6:
                  default: 128
                  description: The aggregation-length advertisement option lets you “roll up” the /128s into a larger prefix. Defaults to 128. Works for IPv6 addresses.
                  format: int32
                  type: integer
                communities:
                  description: |-
                    The BGP communities to be associated with the announcement. Each item can be a standard community of the
                    form 1234:1234, a large community of the form large:1234:1234:1234 or the name of an alias defined in the
                    Community CRD.
                  items:
                    type: string
                  type: array
                ipAddressPoolSelectors:
                  description: |-
                    A selector for the IPAddressPools which would get advertised via this advertisement.
                    If no IPAddressPool is selected by this or by the list, the advertisement is applied to all the IPAddressPools.
                  items:
                    description: |-
                      A label selector is a label query over a set of resources. The result of matchLabels and
                      matchExpressions are ANDed. An empty label selector matches all objects. A null
                      label selector matches no objects.
                    properties:
                      matchExpressions:
                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                        items:
                          description: |-
                            A label selector requirement is a selector that contains values, a key, and an operator that
                            relates the key and values.
                          properties:
                            key:
                              description: key is the label key that the selector applies to.
                              type: string
                            operator:
                              description: |-
                                operator represents a key's relationship to a set of values.
                                Valid operators are In, NotIn, Exists and DoesNotExist.
                              type: string
                            values:
                              description: |-
                                values is an array of string values. If the operator is In or NotIn,
                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                the values array must be empty. This array is replaced during a strategic
                                merge patch.
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                          required:
                            - key
                            - operator
                          type: object
                        type: array
                        x-kubernetes-list-type: atomic
                      matchLabels:
                        additionalProperties:
                          type: string
                        description: |-
                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                        type: object
                    type: object
                    x-kubernetes-map-type: atomic
                  type: array
                ipAddressPools:
                  description: The list of IPAddressPools to advertise via this advertisement, selected by name.
                  items:
                    type: string
                  type: array
                localPref:
                  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.
                  format: int32
                  type: integer
                nodeSelectors:
                  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.
                  items:
                    description: |-
                      A label selector is a label query over a set of resources. The result of matchLabels and
                      matchExpressions are ANDed. An empty label selector matches all objects. A null
                      label selector matches no objects.
                    properties:
                      matchExpressions:
                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                        items:
                          description: |-
                            A label selector requirement is a selector that contains values, a key, and an operator that
                            relates the key and values.
                          properties:
                            key:
                              description: key is the label key that the selector applies to.
                              type: string
                            operator:
                              description: |-
                                operator represents a key's relationship to a set of values.
                                Valid operators are In, NotIn, Exists and DoesNotExist.
                              type: string
                            values:
                              description: |-
                                values is an array of string values. If the operator is In or NotIn,
                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                the values array must be empty. This array is replaced during a strategic
                                merge patch.
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                          required:
                            - key
                            - operator
                          type: object
                        type: array
                        x-kubernetes-list-type: atomic
                      matchLabels:
                        additionalProperties:
                          type: string
                        description: |-
                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                        type: object
                    type: object
                    x-kubernetes-map-type: atomic
                  type: array
                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.
                  items:
                    type: string
                  type: array
                serviceSelectors:
                  description: |-
                    ServiceSelectors limits the set of services that will be advertised via this advertisement.
                    If empty, all services from the selected pools are advertised.
                    This field is mutually exclusive with aggregationLength and aggregationLengthV6 -
                    services can only be selected when using the default /32 (IPv4) or /128 (IPv6) aggregation.
                  items:
                    description: |-
                      A label selector is a label query over a set of resources. The result of matchLabels and
                      matchExpressions are ANDed. An empty label selector matches all objects. A null
                      label selector matches no objects.
                    properties:
                      matchExpressions:
                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                        items:
                          description: |-
                            A label selector requirement is a selector that contains values, a key, and an operator that
                            relates the key and values.
                          properties:
                            key:
                              description: key is the label key that the selector applies to.
                              type: string
                            operator:
                              description: |-
                                operator represents a key's relationship to a set of values.
                                Valid operators are In, NotIn, Exists and DoesNotExist.
                              type: string
                            values:
                              description: |-
                                values is an array of string values. If the operator is In or NotIn,
                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                the values array must be empty. This array is replaced during a strategic
                                merge patch.
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                          required:
                            - key
                            - operator
                          type: object
                        type: array
                        x-kubernetes-list-type: atomic
                      matchLabels:
                        additionalProperties:
                          type: string
                        description: |-
                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                        type: object
                    type: object
                    x-kubernetes-map-type: atomic
                  type: array
              type: object
              x-kubernetes-validations:
                - message: serviceSelectors and aggregationLength are mutually exclusive, can only be used together with default aggregationLength (32) and aggregationLengthV6 (128)
                  rule: '!has(self.serviceSelectors) || self.serviceSelectors.size() == 0 || ((!has(self.aggregationLength) || self.aggregationLength == 32) && (!has(self.aggregationLengthV6) || self.aggregationLengthV6 == 128))'
            status:
              description: BGPAdvertisementStatus defines the observed state of BGPAdvertisement.
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
---
# Source: metallb/charts/crds/templates/crds.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.19.0
  name: bgppeers.metallb.io
spec:
  conversion:
    strategy: Webhook
    webhook:
      clientConfig:
        service:
          name: metallb-webhook-service
          namespace: metallb-system
          path: /convert
      conversionReviewVersions:
        - v1beta1
        - v1beta2
  group: metallb.io
  names:
    kind: BGPPeer
    listKind: BGPPeerList
    plural: bgppeers
    singular: bgppeer
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - jsonPath: .spec.peerAddress
          name: Address
          type: string
        - jsonPath: .spec.peerASN
          name: ASN
          type: string
        - jsonPath: .spec.bfdProfile
          name: BFD Profile
          type: string
        - jsonPath: .spec.ebgpMultiHop
          name: Multi Hops
          type: string
      deprecated: true
      deprecationWarning: v1beta1 is deprecated, please use v1beta2
      name: v1beta1
      schema:
        openAPIV3Schema:
          description: BGPPeer is the Schema for the peers API.
          properties:
            apiVersion:
              description: |-
                APIVersion defines the versioned schema of this representation of an object.
                Servers should convert recognized schemas to the latest internal value, and
                may reject unrecognized values.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
              type: string
            kind:
              description: |-
                Kind is a string value representing the REST resource this object represents.
                Servers may infer this from the endpoint the client submits requests to.
                Cannot be updated.
                In CamelCase.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
              type: string
            metadata:
              type: object
            spec:
              description: BGPPeerSpec defines the desired state of Peer.
              properties:
                bfdProfile:
                  type: string
                ebgpMultiHop:
                  description: EBGP peer is multi-hops away
                  type: boolean
                holdTime:
                  description: Requested BGP hold time, per RFC4271.
                  type: string
                keepaliveTime:
                  description: Requested BGP keepalive time, per RFC4271.
                  type: string
                myASN:
                  description: AS number to use for the local end of the session.
                  format: int64
                  maximum: 4294967295
                  minimum: 0
                  type: integer
                nodeSelectors:
                  description: |-
                    Only connect to this peer on nodes that match one of these
                    selectors.
                  items:
                    properties:
                      matchExpressions:
                        items:
                          properties:
                            key:
                              type: string
                            operator:
                              type: string
                            values:
                              items:
                                type: string
                              minItems: 1
                              type: array
                          required:
                            - key
                            - operator
                            - values
                          type: object
                        type: array
                      matchLabels:
                        additionalProperties:
                          type: string
                        type: object
                    type: object
                  type: array
                password:
                  description: Authentication password for routers enforcing TCP MD5 authenticated sessions
                  type: string
                peerASN:
                  description: AS number to expect from the remote end of the session.
                  format: int64
                  maximum: 4294967295
                  minimum: 0
                  type: integer
                peerAddress:
                  description: Address to dial when establishing the session.
                  type: string
                peerPort:
                  description: Port to dial when establishing the session.
                  maximum: 16384
                  minimum: 0
                  type: integer
                routerID:
                  description: BGP router ID to advertise to the peer
                  type: string
                sourceAddress:
                  description: Source address to use when establishing the session.
                  type: string
              required:
                - myASN
                - peerASN
                - peerAddress
              type: object
            status:
              description: BGPPeerStatus defines the observed state of Peer.
              type: object
          type: object
      served: true
      storage: false
      subresources:
        status: {}
    - additionalPrinterColumns:
        - jsonPath: .spec.peerAddress
          name: Address
          type: string
        - jsonPath: .spec.peerASN
          name: ASN
          type: string
        - jsonPath: .spec.bfdProfile
          name: BFD Profile
          type: string
        - jsonPath: .spec.ebgpMultiHop
          name: Multi Hops
          type: string
      name: v1beta2
      schema:
        openAPIV3Schema:
          description: BGPPeer is the Schema for the peers API.
          properties:
            apiVersion:
              description: |-
                APIVersion defines the versioned schema of this representation of an object.
                Servers should convert recognized schemas to the latest internal value, and
                may reject unrecognized values.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
              type: string
            kind:
              description: |-
                Kind is a string value representing the REST resource this object represents.
                Servers may infer this from the endpoint the client submits requests to.
                Cannot be updated.
                In CamelCase.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
              type: string
            metadata:
              type: object
            spec:
              description: BGPPeerSpec defines the desired state of Peer.
              properties:
                bfdProfile:
                  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.
                  type: string
                connectTime:
                  description: Requested BGP connect time, controls how long BGP waits between connection attempts to a neighbor.
                  type: string
                  x-kubernetes-validations:
                    - message: connect time should be between 1 seconds to 65535
                      rule: duration(self).getSeconds() >= 1 && duration(self).getSeconds() <= 65535
                    - message: connect time should contain a whole number of seconds
                      rule: duration(self).getMilliseconds() % 1000 == 0
                disableMP:
                  default: false
                  description: |-
                    To set if we want to disable MP BGP that will separate IPv4 and IPv6 route exchanges into distinct BGP sessions.
                    Deprecated: DisableMP is deprecated in favor of dualStackAddressFamily.
                  type: boolean
                dualStackAddressFamily:
                  default: false
                  description: |-
                    To set if we want to enable the neighbor not only for the ipfamily related to its session,
                    but also the other one. This allows to advertise/receive IPv4 prefixes over IPv6 sessions and vice versa.
                  type: boolean
                dynamicASN:
                  description: |-
                    DynamicASN detects the AS number to use for the remote end of the session
                    without explicitly setting it via the ASN field. Limited to:
                    internal - if the neighbor's ASN is different than MyASN connection is denied.
                    external - if the neighbor's ASN is the same as MyASN the connection is denied.
                    ASN and DynamicASN are mutually exclusive and one of them must be specified.
                  enum:
                    - internal
                    - external
                  type: string
                ebgpMultiHop:
                  description: To set if the BGPPeer is multi-hops away. Needed for FRR-based modes (FRR-K8s, FRR) only.
                  type: boolean
                enableGracefulRestart:
                  description: |-
                    EnableGracefulRestart allows BGP peer to continue to forward data packets
                    along known routes while the routing protocol information is being
                    restored. This field is immutable because it requires restart of the BGP
                    session. Supported for FRR-based modes (FRR-K8s, FRR) only.
                  type: boolean
                  x-kubernetes-validations:
                    - message: EnableGracefulRestart cannot be changed after creation
                      rule: self == oldSelf
                holdTime:
                  description: Requested BGP hold time, per RFC4271.
                  type: string
                interface:
                  description: |-
                    Interface is the node interface over which the unnumbered BGP peering will
                    be established. No API validation takes place as that string value
                    represents an interface name on the host and if user provides an invalid
                    value, only the actual BGP session will not be established.
                    Address and Interface are mutually exclusive and one of them must be specified.
                  type: string
                keepaliveTime:
                  description: Requested BGP keepalive time, per RFC4271.
                  type: string
                localASN:
                  description: |-
                    LocalASN allows advertising a different AS number to the peer using BGP's
                    local-as feature. When set, MetalLB will advertise this ASN to the peer
                    via "neighbor <peer> local-as <ASN> no-prepend replace-as", overriding
                    the router-level MyASN for this specific session.
                    Not supported in native BGP mode.
                  format: int64
                  maximum: 4294967295
                  minimum: 1
                  type: integer
                myASN:
                  description: AS number to use for the local end of the session.
                  format: int64
                  maximum: 4294967295
                  minimum: 0
                  type: integer
                nodeSelectors:
                  description: |-
                    Only connect to this peer on nodes that match one of these
                    selectors.
                  items:
                    description: |-
                      A label selector is a label query over a set of resources. The result of matchLabels and
                      matchExpressions are ANDed. An empty label selector matches all objects. A null
                      label selector matches no objects.
                    properties:
                      matchExpressions:
                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                        items:
                          description: |-
                            A label selector requirement is a selector that contains values, a key, and an operator that
                            relates the key and values.
                          properties:
                            key:
                              description: key is the label key that the selector applies to.
                              type: string
                            operator:
                              description: |-
                                operator represents a key's relationship to a set of values.
                                Valid operators are In, NotIn, Exists and DoesNotExist.
                              type: string
                            values:
                              description: |-
                                values is an array of string values. If the operator is In or NotIn,
                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                the values array must be empty. This array is replaced during a strategic
                                merge patch.
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                          required:
                            - key
                            - operator
                          type: object
                        type: array
                        x-kubernetes-list-type: atomic
                      matchLabels:
                        additionalProperties:
                          type: string
                        description: |-
                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                        type: object
                    type: object
                    x-kubernetes-map-type: atomic
                  type: array
                password:
                  description: Authentication password for routers enforcing TCP MD5 authenticated sessions
                  type: string
                passwordSecret:
                  description: |-
                    passwordSecret is name of the authentication secret for BGP Peer.
                    the secret must be of type "kubernetes.io/basic-auth", and created in the
                    same namespace as the MetalLB deployment. The password is stored in the
                    secret as the key "password".
                  properties:
                    name:
                      description: name is unique within a namespace to reference a secret resource.
                      type: string
                    namespace:
                      description: namespace defines the space within which the secret name must be unique.
                      type: string
                  type: object
                  x-kubernetes-map-type: atomic
                peerASN:
                  description: |-
                    AS number to expect from the remote end of the session.
                    ASN and DynamicASN are mutually exclusive and one of them must be specified.
                  format: int64
                  maximum: 4294967295
                  minimum: 0
                  type: integer
                peerAddress:
                  description: Address to dial when establishing the session.
                  type: string
                peerPort:
                  default: 179
                  description: Port to dial when establishing the session.
                  maximum: 16384
                  minimum: 1
                  type: integer
                routerID:
                  description: BGP router ID to advertise to the peer
                  type: string
                sourceAddress:
                  description: Source address to use when establishing the session.
                  type: string
                vrf:
                  description: |-
                    To set if we want to peer with the BGPPeer using an interface belonging to
                    a host vrf
                  type: string
              required:
                - myASN
              type: object
            status:
              description: BGPPeerStatus defines the observed state of Peer.
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
---
# Source: metallb/charts/crds/templates/crds.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.19.0
  name: communities.metallb.io
spec:
  group: metallb.io
  names:
    kind: Community
    listKind: CommunityList
    plural: communities
    singular: community
  scope: Namespaced
  versions:
    - name: v1beta1
      schema:
        openAPIV3Schema:
          description: |-
            Community is a collection of aliases for communities.
            Users can define named aliases to be used in the BGPPeer CRD.
          properties:
            apiVersion:
              description: |-
                APIVersion defines the versioned schema of this representation of an object.
                Servers should convert recognized schemas to the latest internal value, and
                may reject unrecognized values.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
              type: string
            kind:
              description: |-
                Kind is a string value representing the REST resource this object represents.
                Servers may infer this from the endpoint the client submits requests to.
                Cannot be updated.
                In CamelCase.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
              type: string
            metadata:
              type: object
            spec:
              description: CommunitySpec defines the desired state of Community.
              properties:
                communities:
                  items:
                    properties:
                      name:
                        description: The name of the alias for the community.
                        type: string
                      value:
                        description: |-
                          The BGP community value corresponding to the given name. Can be a standard community of the form 1234:1234
                          or a large community of the form large:1234:1234:1234.
                        type: string
                    type: object
                  type: array
              type: object
            status:
              description: CommunityStatus defines the observed state of Community.
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
---
# Source: metallb/charts/crds/templates/crds.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.19.0
  name: configurationstates.metallb.io
spec:
  group: metallb.io
  names:
    kind: ConfigurationState
    listKind: ConfigurationStateList
    plural: configurationstates
    singular: configurationstate
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - jsonPath: .status.result
          name: Result
          type: string
        - jsonPath: .status.errorSummary
          name: ErrorSummary
          type: string
        - jsonPath: .metadata.creationTimestamp
          name: Age
          type: date
      name: v1beta1
      schema:
        openAPIV3Schema:
          description: |-
            ConfigurationState is a status-only CRD that reports configuration validation results from MetalLB components.
            Labels:
              - metallb.io/component-type: "controller" or "speaker"
              - metallb.io/node-name: node name (only for speaker)
          properties:
            apiVersion:
              description: |-
                APIVersion defines the versioned schema of this representation of an object.
                Servers should convert recognized schemas to the latest internal value, and
                may reject unrecognized values.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
              type: string
            kind:
              description: |-
                Kind is a string value representing the REST resource this object represents.
                Servers may infer this from the endpoint the client submits requests to.
                Cannot be updated.
                In CamelCase.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
              type: string
            metadata:
              type: object
            status:
              description: ConfigurationStateStatus defines the observed state of ConfigurationState.
              properties:
                conditions:
                  description: Conditions contains the status conditions from the reconcilers running in this component.
                  items:
                    description: Condition contains details for one aspect of the current state of this API Resource.
                    properties:
                      lastTransitionTime:
                        description: |-
                          lastTransitionTime is the last time the condition transitioned from one status to another.
                          This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
                        format: date-time
                        type: string
                      message:
                        description: |-
                          message is a human readable message indicating details about the transition.
                          This may be an empty string.
                        maxLength: 32768
                        type: string
                      observedGeneration:
                        description: |-
                          observedGeneration represents the .metadata.generation that the condition was set based upon.
                          For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
                          with respect to the current state of the instance.
                        format: int64
                        minimum: 0
                        type: integer
                      reason:
                        description: |-
                          reason contains a programmatic identifier indicating the reason for the condition's last transition.
                          Producers of specific condition types may define expected values and meanings for this field,
                          and whether the values are considered a guaranteed API.
                          The value should be a CamelCase string.
                          This field may not be empty.
                        maxLength: 1024
                        minLength: 1
                        pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
                        type: string
                      status:
                        description: status of the condition, one of True, False, Unknown.
                        enum:
                          - "True"
                          - "False"
                          - Unknown
                        type: string
                      type:
                        description: type of condition in CamelCase or in foo.example.com/CamelCase.
                        maxLength: 316
                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                        type: string
                    required:
                      - lastTransitionTime
                      - message
                      - reason
                      - status
                      - type
                    type: object
                  type: array
                  x-kubernetes-list-map-keys:
                    - type
                  x-kubernetes-list-type: map
                errorSummary:
                  description: |-
                    ErrorSummary contains the aggregated error messages from reconciliation failures.
                    This field is empty when Result is "Valid".
                  type: string
                result:
                  description: Result indicates the configuration validation result.
                  enum:
                    - Valid
                    - Invalid
                    - Unknown
                  type: string
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
---
# Source: metallb/charts/crds/templates/crds.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.19.0
  name: ipaddresspools.metallb.io
spec:
  group: metallb.io
  names:
    kind: IPAddressPool
    listKind: IPAddressPoolList
    plural: ipaddresspools
    singular: ipaddresspool
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - jsonPath: .spec.autoAssign
          name: Auto Assign
          type: boolean
        - jsonPath: .spec.avoidBuggyIPs
          name: Avoid Buggy IPs
          type: boolean
        - jsonPath: .spec.addresses
          name: Addresses
          type: string
      name: v1beta1
      schema:
        openAPIV3Schema:
          description: |-
            IPAddressPool represents a pool of IP addresses that can be allocated
            to LoadBalancer services.
          properties:
            apiVersion:
              description: |-
                APIVersion defines the versioned schema of this representation of an object.
                Servers should convert recognized schemas to the latest internal value, and
                may reject unrecognized values.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
              type: string
            kind:
              description: |-
                Kind is a string value representing the REST resource this object represents.
                Servers may infer this from the endpoint the client submits requests to.
                Cannot be updated.
                In CamelCase.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
              type: string
            metadata:
              type: object
            spec:
              description: IPAddressPoolSpec defines the desired state of IPAddressPool.
              properties:
                addresses:
                  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.
                  items:
                    type: string
                  type: array
                autoAssign:
                  default: true
                  description: |-
                    AutoAssign flag used to prevent MetallB from automatic allocation
                    for a pool.
                  type: boolean
                avoidBuggyIPs:
                  default: false
                  description: |-
                    AvoidBuggyIPs prevents addresses ending with .0 and .255
                    to be used by a pool.
                  type: boolean
                serviceAllocation:
                  description: |-
                    AllocateTo makes ip pool allocation to specific namespace and/or service.
                    The controller will use the pool with lowest value of priority in case of
                    multiple matches. A pool with no priority set will be used only if the
                    pools with priority can't be used. If multiple matching IPAddressPools are
                    available it will check for the availability of IPs sorting the matching
                    IPAddressPools by priority, starting from the highest to the lowest. If
                    multiple IPAddressPools have the same priority, choice will be random.
                  properties:
                    namespaceSelectors:
                      description: |-
                        NamespaceSelectors list of label selectors to select namespace(s) for ip pool,
                        an alternative to using namespace list.
                      items:
                        description: |-
                          A label selector is a label query over a set of resources. The result of matchLabels and
                          matchExpressions are ANDed. An empty label selector matches all objects. A null
                          label selector matches no objects.
                        properties:
                          matchExpressions:
                            description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                            items:
                              description: |-
                                A label selector requirement is a selector that contains values, a key, and an operator that
                                relates the key and values.
                              properties:
                                key:
                                  description: key is the label key that the selector applies to.
                                  type: string
                                operator:
                                  description: |-
                                    operator represents a key's relationship to a set of values.
                                    Valid operators are In, NotIn, Exists and DoesNotExist.
                                  type: string
                                values:
                                  description: |-
                                    values is an array of string values. If the operator is In or NotIn,
                                    the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                    the values array must be empty. This array is replaced during a strategic
                                    merge patch.
                                  items:
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: atomic
                              required:
                                - key
                                - operator
                              type: object
                            type: array
                            x-kubernetes-list-type: atomic
                          matchLabels:
                            additionalProperties:
                              type: string
                            description: |-
                              matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                              map is equivalent to an element of matchExpressions, whose key field is "key", the
                              operator is "In", and the values array contains only "value". The requirements are ANDed.
                            type: object
                        type: object
                        x-kubernetes-map-type: atomic
                      type: array
                    namespaces:
                      description: Namespaces list of namespace(s) on which ip pool can be attached.
                      items:
                        type: string
                      type: array
                    priority:
                      description: Priority priority given for ip pool while ip allocation on a service.
                      type: integer
                    serviceSelectors:
                      description: |-
                        ServiceSelectors list of label selector to select service(s) for which ip pool
                        can be used for ip allocation.
                      items:
                        description: |-
                          A label selector is a label query over a set of resources. The result of matchLabels and
                          matchExpressions are ANDed. An empty label selector matches all objects. A null
                          label selector matches no objects.
                        properties:
                          matchExpressions:
                            description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                            items:
                              description: |-
                                A label selector requirement is a selector that contains values, a key, and an operator that
                                relates the key and values.
                              properties:
                                key:
                                  description: key is the label key that the selector applies to.
                                  type: string
                                operator:
                                  description: |-
                                    operator represents a key's relationship to a set of values.
                                    Valid operators are In, NotIn, Exists and DoesNotExist.
                                  type: string
                                values:
                                  description: |-
                                    values is an array of string values. If the operator is In or NotIn,
                                    the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                    the values array must be empty. This array is replaced during a strategic
                                    merge patch.
                                  items:
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: atomic
                              required:
                                - key
                                - operator
                              type: object
                            type: array
                            x-kubernetes-list-type: atomic
                          matchLabels:
                            additionalProperties:
                              type: string
                            description: |-
                              matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                              map is equivalent to an element of matchExpressions, whose key field is "key", the
                              operator is "In", and the values array contains only "value". The requirements are ANDed.
                            type: object
                        type: object
                        x-kubernetes-map-type: atomic
                      type: array
                  type: object
              required:
                - addresses
              type: object
            status:
              description: IPAddressPoolStatus defines the observed state of IPAddressPool.
              properties:
                assignedIPv4:
                  description: AssignedIPv4 is the number of assigned IPv4 addresses.
                  format: int64
                  type: integer
                assignedIPv6:
                  description: AssignedIPv6 is the number of assigned IPv6 addresses.
                  format: int64
                  type: integer
                availableIPv4:
                  description: AvailableIPv4 is the number of available IPv4 addresses.
                  format: int64
                  type: integer
                availableIPv6:
                  description: AvailableIPv6 is the number of available IPv6 addresses.
                  format: int64
                  type: integer
              required:
                - assignedIPv4
                - assignedIPv6
                - availableIPv4
                - availableIPv6
              type: object
          required:
            - spec
          type: object
      served: true
      storage: true
      subresources:
        status: {}
---
# Source: metallb/charts/crds/templates/crds.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.19.0
  name: l2advertisements.metallb.io
spec:
  group: metallb.io
  names:
    kind: L2Advertisement
    listKind: L2AdvertisementList
    plural: l2advertisements
    singular: l2advertisement
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - jsonPath: .spec.ipAddressPools
          name: IPAddressPools
          type: string
        - jsonPath: .spec.ipAddressPoolSelectors
          name: IPAddressPool Selectors
          type: string
        - jsonPath: .spec.interfaces
          name: Interfaces
          type: string
        - jsonPath: .spec.nodeSelectors
          name: Node Selectors
          priority: 10
          type: string
      name: v1beta1
      schema:
        openAPIV3Schema:
          description: |-
            L2Advertisement allows to advertise the LoadBalancer IPs provided
            by the selected pools via L2.
          properties:
            apiVersion:
              description: |-
                APIVersion defines the versioned schema of this representation of an object.
                Servers should convert recognized schemas to the latest internal value, and
                may reject unrecognized values.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
              type: string
            kind:
              description: |-
                Kind is a string value representing the REST resource this object represents.
                Servers may infer this from the endpoint the client submits requests to.
                Cannot be updated.
                In CamelCase.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
              type: string
            metadata:
              type: object
            spec:
              description: L2AdvertisementSpec defines the desired state of L2Advertisement.
              properties:
                interfaces:
                  description: |-
                    A list of interfaces to announce from. The LB IP will be announced only from these interfaces.
                    If the field is not set, we advertise from all the interfaces on the host.
                  items:
                    type: string
                  type: array
                ipAddressPoolSelectors:
                  description: |-
                    A selector for the IPAddressPools which would get advertised via this advertisement.
                    If no IPAddressPool is selected by this or by the list, the advertisement is applied to all the IPAddressPools.
                  items:
                    description: |-
                      A label selector is a label query over a set of resources. The result of matchLabels and
                      matchExpressions are ANDed. An empty label selector matches all objects. A null
                      label selector matches no objects.
                    properties:
                      matchExpressions:
                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                        items:
                          description: |-
                            A label selector requirement is a selector that contains values, a key, and an operator that
                            relates the key and values.
                          properties:
                            key:
                              description: key is the label key that the selector applies to.
                              type: string
                            operator:
                              description: |-
                                operator represents a key's relationship to a set of values.
                                Valid operators are In, NotIn, Exists and DoesNotExist.
                              type: string
                            values:
                              description: |-
                                values is an array of string values. If the operator is In or NotIn,
                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                the values array must be empty. This array is replaced during a strategic
                                merge patch.
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                          required:
                            - key
                            - operator
                          type: object
                        type: array
                        x-kubernetes-list-type: atomic
                      matchLabels:
                        additionalProperties:
                          type: string
                        description: |-
                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                        type: object
                    type: object
                    x-kubernetes-map-type: atomic
                  type: array
                ipAddressPools:
                  description: The list of IPAddressPools to advertise via this advertisement, selected by name.
                  items:
                    type: string
                  type: array
                nodeSelectors:
                  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.
                  items:
                    description: |-
                      A label selector is a label query over a set of resources. The result of matchLabels and
                      matchExpressions are ANDed. An empty label selector matches all objects. A null
                      label selector matches no objects.
                    properties:
                      matchExpressions:
                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                        items:
                          description: |-
                            A label selector requirement is a selector that contains values, a key, and an operator that
                            relates the key and values.
                          properties:
                            key:
                              description: key is the label key that the selector applies to.
                              type: string
                            operator:
                              description: |-
                                operator represents a key's relationship to a set of values.
                                Valid operators are In, NotIn, Exists and DoesNotExist.
                              type: string
                            values:
                              description: |-
                                values is an array of string values. If the operator is In or NotIn,
                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                the values array must be empty. This array is replaced during a strategic
                                merge patch.
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                          required:
                            - key
                            - operator
                          type: object
                        type: array
                        x-kubernetes-list-type: atomic
                      matchLabels:
                        additionalProperties:
                          type: string
                        description: |-
                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                        type: object
                    type: object
                    x-kubernetes-map-type: atomic
                  type: array
                serviceSelectors:
                  description: |-
                    ServiceSelectors limits the set of services that will be advertised via this advertisement.
                    If empty, all services from the selected pools are advertised.
                  items:
                    description: |-
                      A label selector is a label query over a set of resources. The result of matchLabels and
                      matchExpressions are ANDed. An empty label selector matches all objects. A null
                      label selector matches no objects.
                    properties:
                      matchExpressions:
                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                        items:
                          description: |-
                            A label selector requirement is a selector that contains values, a key, and an operator that
                            relates the key and values.
                          properties:
                            key:
                              description: key is the label key that the selector applies to.
                              type: string
                            operator:
                              description: |-
                                operator represents a key's relationship to a set of values.
                                Valid operators are In, NotIn, Exists and DoesNotExist.
                              type: string
                            values:
                              description: |-
                                values is an array of string values. If the operator is In or NotIn,
                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                the values array must be empty. This array is replaced during a strategic
                                merge patch.
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                          required:
                            - key
                            - operator
                          type: object
                        type: array
                        x-kubernetes-list-type: atomic
                      matchLabels:
                        additionalProperties:
                          type: string
                        description: |-
                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                        type: object
                    type: object
                    x-kubernetes-map-type: atomic
                  type: array
              type: object
            status:
              description: L2AdvertisementStatus defines the observed state of L2Advertisement.
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
---
# Source: metallb/charts/crds/templates/crds.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.19.0
  name: servicebgpstatuses.metallb.io
spec:
  group: metallb.io
  names:
    kind: ServiceBGPStatus
    listKind: ServiceBGPStatusList
    plural: servicebgpstatuses
    singular: servicebgpstatus
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - jsonPath: .status.node
          name: Node
          type: string
        - jsonPath: .status.serviceName
          name: Service Name
          type: string
        - jsonPath: .status.serviceNamespace
          name: Service Namespace
          type: string
      name: v1beta1
      schema:
        openAPIV3Schema:
          description: ServiceBGPStatus exposes the BGP peers a service is configured to be advertised to, per relevant node.
          properties:
            apiVersion:
              description: |-
                APIVersion defines the versioned schema of this representation of an object.
                Servers should convert recognized schemas to the latest internal value, and
                may reject unrecognized values.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
              type: string
            kind:
              description: |-
                Kind is a string value representing the REST resource this object represents.
                Servers may infer this from the endpoint the client submits requests to.
                Cannot be updated.
                In CamelCase.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
              type: string
            metadata:
              type: object
            spec:
              description: ServiceBGPStatusSpec defines the desired state of ServiceBGPStatus.
              type: object
            status:
              description: MetalLBServiceBGPStatus defines the observed state of ServiceBGPStatus.
              properties:
                node:
                  description: Node indicates the node announcing the service.
                  type: string
                  x-kubernetes-validations:
                    - message: Value is immutable
                      rule: self == oldSelf
                peers:
                  description: |-
                    Peers indicate the BGP peers for which the service is configured to be advertised to.
                    The service being actually advertised to a given peer depends on the session state and is not indicated here.
                  items:
                    type: string
                  type: array
                serviceName:
                  description: ServiceName indicates the service this status represents.
                  type: string
                  x-kubernetes-validations:
                    - message: Value is immutable
                      rule: self == oldSelf
                serviceNamespace:
                  description: ServiceNamespace indicates the namespace of the service.
                  type: string
                  x-kubernetes-validations:
                    - message: Value is immutable
                      rule: self == oldSelf
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
---
# Source: metallb/charts/crds/templates/crds.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.19.0
  name: servicel2statuses.metallb.io
spec:
  group: metallb.io
  names:
    kind: ServiceL2Status
    listKind: ServiceL2StatusList
    plural: servicel2statuses
    singular: servicel2status
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - jsonPath: .status.node
          name: Allocated Node
          type: string
        - jsonPath: .status.serviceName
          name: Service Name
          type: string
        - jsonPath: .status.serviceNamespace
          name: Service Namespace
          type: string
      name: v1beta1
      schema:
        openAPIV3Schema:
          description: ServiceL2Status reveals the actual traffic status of loadbalancer services in layer2 mode.
          properties:
            apiVersion:
              description: |-
                APIVersion defines the versioned schema of this representation of an object.
                Servers should convert recognized schemas to the latest internal value, and
                may reject unrecognized values.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
              type: string
            kind:
              description: |-
                Kind is a string value representing the REST resource this object represents.
                Servers may infer this from the endpoint the client submits requests to.
                Cannot be updated.
                In CamelCase.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
              type: string
            metadata:
              type: object
            spec:
              description: ServiceL2StatusSpec defines the desired state of ServiceL2Status.
              type: object
            status:
              description: MetalLBServiceL2Status defines the observed state of ServiceL2Status.
              properties:
                interfaces:
                  description: Interfaces indicates the interfaces that receive the directed traffic
                  items:
                    description: InterfaceInfo defines interface info of layer2 announcement.
                    properties:
                      name:
                        description: Name the name of network interface card
                        type: string
                    type: object
                  type: array
                node:
                  description: Node indicates the node that receives the directed traffic
                  type: string
                  x-kubernetes-validations:
                    - message: Value is immutable
                      rule: self == oldSelf
                serviceName:
                  description: ServiceName indicates the service this status represents
                  type: string
                  x-kubernetes-validations:
                    - message: Value is immutable
                      rule: self == oldSelf
                serviceNamespace:
                  description: ServiceNamespace indicates the namespace of the service
                  type: string
                  x-kubernetes-validations:
                    - message: Value is immutable
                      rule: self == oldSelf
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
---
# Source: metallb/charts/frr-k8s/charts/crds/templates/frrk8s.metallb.io_bgpsessionstates.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.17.3
  name: bgpsessionstates.frrk8s.metallb.io
spec:
  group: frrk8s.metallb.io
  names:
    kind: BGPSessionState
    listKind: BGPSessionStateList
    plural: bgpsessionstates
    singular: bgpsessionstate
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .status.node
      name: Node
      type: string
    - jsonPath: .status.peer
      name: Peer
      type: string
    - jsonPath: .status.vrf
      name: VRF
      type: string
    - jsonPath: .status.bgpStatus
      name: BGP
      type: string
    - jsonPath: .status.bfdStatus
      name: BFD
      type: string
    name: v1beta1
    schema:
      openAPIV3Schema:
        description: BGPSessionState exposes the status of a BGP Session from the
          FRR instance running on the node.
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: BGPSessionStateSpec defines the desired state of BGPSessionState.
            type: object
          status:
            description: BGPSessionStateStatus defines the observed state of BGPSessionState.
            properties:
              bfdStatus:
                type: string
              bgpStatus:
                type: string
              node:
                type: string
              peer:
                type: string
              vrf:
                type: string
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
---
# Source: metallb/charts/frr-k8s/charts/crds/templates/frrk8s.metallb.io_frrconfigurations.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.17.3
  name: frrconfigurations.frrk8s.metallb.io
spec:
  group: frrk8s.metallb.io
  names:
    kind: FRRConfiguration
    listKind: FRRConfigurationList
    plural: frrconfigurations
    singular: frrconfiguration
  scope: Namespaced
  versions:
  - name: v1beta1
    schema:
      openAPIV3Schema:
        description: FRRConfiguration is a piece of FRR configuration.
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: FRRConfigurationSpec defines the desired state of FRRConfiguration.
            properties:
              bgp:
                description: BGP is the configuration related to the BGP protocol.
                properties:
                  bfdProfiles:
                    description: BFDProfiles is the list of bfd profiles to be used
                      when configuring the neighbors.
                    items:
                      description: |-
                        BFDProfile is the configuration related to the BFD protocol associated
                        to a BGP session.
                      properties:
                        detectMultiplier:
                          description: |-
                            Configures the detection multiplier to determine
                            packet loss. The remote transmission interval will be multiplied
                            by this value to determine the connection loss detection timer.
                          format: int32
                          maximum: 255
                          minimum: 2
                          type: integer
                        echoInterval:
                          description: |-
                            Configures the minimal echo receive transmission
                            interval that this system is capable of handling in milliseconds.
                            Defaults to 50ms
                          format: int32
                          maximum: 60000
                          minimum: 10
                          type: integer
                        echoMode:
                          description: |-
                            Enables or disables the echo transmission mode.
                            This mode is disabled by default, and not supported on multi
                            hops setups.
                          type: boolean
                        minimumTtl:
                          description: |-
                            For multi hop sessions only: configure the minimum
                            expected TTL for an incoming BFD control packet.
                          format: int32
                          maximum: 254
                          minimum: 1
                          type: integer
                        name:
                          description: |-
                            The name of the BFD Profile to be referenced in other parts
                            of the configuration.
                          type: string
                        passiveMode:
                          description: |-
                            Mark session as passive: a passive session will not
                            attempt to start the connection and will wait for control packets
                            from peer before it begins replying.
                          type: boolean
                        receiveInterval:
                          description: |-
                            The minimum interval that this system is capable of
                            receiving control packets in milliseconds.
                            Defaults to 300ms.
                          format: int32
                          maximum: 60000
                          minimum: 10
                          type: integer
                        transmitInterval:
                          description: |-
                            The minimum transmission interval (less jitter)
                            that this system wants to use to send BFD control packets in
                            milliseconds. Defaults to 300ms
                          format: int32
                          maximum: 60000
                          minimum: 10
                          type: integer
                      required:
                      - name
                      type: object
                    type: array
                  routers:
                    description: Routers is the list of routers we want FRR to configure
                      (one per VRF).
                    items:
                      description: Router represent a neighbor router we want FRR
                        to connect to.
                      properties:
                        asn:
                          description: ASN is the AS number to use for the local end
                            of the session.
                          format: int64
                          maximum: 4294967295
                          minimum: 0
                          type: integer
                        id:
                          description: ID is the BGP router ID
                          type: string
                        imports:
                          description: Imports is the list of imported VRFs we want
                            for this router / vrf.
                          items:
                            description: Import represents the possible imported VRFs
                              to a given router.
                            properties:
                              vrf:
                                description: Vrf is the vrf we want to import from
                                type: string
                            type: object
                          type: array
                        neighbors:
                          description: Neighbors is the list of neighbors we want
                            to establish BGP sessions with.
                          items:
                            description: Neighbor represents a BGP Neighbor we want
                              FRR to connect to.
                            properties:
                              address:
                                description: Address is the IP address to establish
                                  the session with.
                                type: string
                              asn:
                                description: |-
                                  ASN is the AS number to use for the local end of the session.
                                  ASN and DynamicASN are mutually exclusive and one of them must be specified.
                                format: int64
                                maximum: 4294967295
                                minimum: 0
                                type: integer
                              bfdProfile:
                                description: |-
                                  BFDProfile is 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.
                                type: string
                              connectTime:
                                description: Requested BGP connect time, controls
                                  how long BGP waits between connection attempts to
                                  a neighbor.
                                type: string
                                x-kubernetes-validations:
                                - message: connect time should be between 1 seconds
                                    to 65535
                                  rule: duration(self).getSeconds() >= 1 && duration(self).getSeconds()
                                    <= 65535
                                - message: connect time should contain a whole number
                                    of seconds
                                  rule: duration(self).getMilliseconds() % 1000 ==
                                    0
                              disableMP:
                                default: false
                                description: |-
                                  DisableMP is no longer used and has no effect.
                                  Use DualStackAddressFamily instead to enable the neighbor for both IPv4 and IPv6 address families.

                                  Deprecated: This field is ignored. Use DualStackAddressFamily instead.
                                type: boolean
                              dualStackAddressFamily:
                                default: false
                                description: |-
                                  To set if we want to enable the neighbor not only for the ipfamily related to its session,
                                  but also the other one. This allows to advertise/receive IPv4 prefixes over IPv6 sessions and vice versa.
                                type: boolean
                              dynamicASN:
                                description: |-
                                  DynamicASN detects the AS number to use for the local end of the session
                                  without explicitly setting it via the ASN field. Limited to:
                                  internal - if the neighbor's ASN is different than the router's the connection is denied.
                                  external - if the neighbor's ASN is the same as the router's the connection is denied.
                                  ASN and DynamicASN are mutually exclusive and one of them must be specified.
                                enum:
                                - internal
                                - external
                                type: string
                              ebgpMultiHop:
                                description: EBGPMultiHop indicates if the BGPPeer
                                  is multi-hops away.
                                type: boolean
                              enableGracefulRestart:
                                description: |-
                                  EnableGracefulRestart allows BGP peer to continue to forward data packets along
                                  known routes while the routing protocol information is being restored. If
                                  the session is already established, the configuration will have effect
                                  after reconnecting to the peer
                                type: boolean
                              holdTime:
                                description: |-
                                  HoldTime is the requested BGP hold time, per RFC4271.
                                  Defaults to 180s.
                                type: string
                              interface:
                                description: |-
                                  Interface is the node interface over which the unnumbered BGP peering will
                                  be established. No API validation takes place as that string value
                                  represents an interface name on the host and if user provides an invalid
                                  value, only the actual BGP session will not be established.
                                  Address and Interface are mutually exclusive and one of them must be specified.
                                  Note: when enabling unnumbered, the neighbor will be enabled for both
                                  IPv4 and IPv6 address families.
                                type: string
                              keepaliveTime:
                                description: |-
                                  KeepaliveTime is the requested BGP keepalive time, per RFC4271.
                                  Defaults to 60s.
                                type: string
                              localASN:
                                description: |-
                                  LocalASN allows advertising a different AS number to the peer using BGP's
                                  local-as feature. When set, FRR will advertise this ASN to the peer
                                  via "neighbor <peer> local-as <ASN> no-prepend replace-as", overriding
                                  the router-level ASN for this specific session.
                                  Note: this field is only applicable to eBGP sessions (where the peer ASN differs
                                  from the router ASN). Setting it on an iBGP session is rejected.
                                format: int64
                                maximum: 4294967295
                                minimum: 1
                                type: integer
                              password:
                                description: |-
                                  Password to be used for establishing the BGP session.
                                  Password and PasswordSecret are mutually exclusive.
                                type: string
                              passwordSecret:
                                description: |-
                                  PasswordSecret is name of the authentication secret for the neighbor.
                                  the secret must be of type "kubernetes.io/basic-auth", and created in the
                                  same namespace as the frr-k8s daemon. The password is stored in the
                                  secret as the key "password".
                                  Password and PasswordSecret are mutually exclusive.
                                properties:
                                  name:
                                    description: name is unique within a namespace
                                      to reference a secret resource.
                                    type: string
                                  namespace:
                                    description: namespace defines the space within
                                      which the secret name must be unique.
                                    type: string
                                type: object
                                x-kubernetes-map-type: atomic
                              port:
                                description: |-
                                  Port is the port to dial when establishing the session.
                                  Defaults to 179.
                                maximum: 16384
                                minimum: 0
                                type: integer
                              sourceaddress:
                                description: |-
                                  SourceAddress is the IPv4 or IPv6 source address to use for the BGP
                                  session to this neighbour, may be specified as either an IP address
                                  directly or as an interface name
                                type: string
                              toAdvertise:
                                description: |-
                                  ToAdvertise represents the list of prefixes to advertise to the given neighbor
                                  and the associated properties.
                                properties:
                                  allowed:
                                    description: |-
                                      Allowed is is the list of prefixes allowed to be propagated to
                                      this neighbor. They must match the prefixes defined in the router.
                                    properties:
                                      mode:
                                        default: filtered
                                        description: |-
                                          Mode is the mode to use when handling the prefixes.
                                          When set to "filtered", only the prefixes in the given list will be allowed.
                                          When set to "all", all the prefixes configured on the router will be allowed.
                                        enum:
                                        - all
                                        - filtered
                                        type: string
                                      prefixes:
                                        items:
                                          type: string
                                        type: array
                                    type: object
                                  withCommunity:
                                    description: |-
                                      PrefixesWithCommunity is a list of prefixes that are associated to a
                                      bgp community when being advertised. The prefixes associated to a given local pref
                                      must be in the prefixes allowed to be advertised.
                                    items:
                                      description: CommunityPrefixes is a list of
                                        prefixes associated to a community.
                                      properties:
                                        community:
                                          description: Community is the community
                                            associated to the prefixes.
                                          type: string
                                        prefixes:
                                          description: Prefixes is the list of prefixes
                                            associated to the community.
                                          format: cidr
                                          items:
                                            type: string
                                          minItems: 1
                                          type: array
                                      type: object
                                    type: array
                                  withLocalPref:
                                    description: |-
                                      PrefixesWithLocalPref is a list of prefixes that are associated to a local
                                      preference when being advertised. The prefixes associated to a given local pref
                                      must be in the prefixes allowed to be advertised.
                                    items:
                                      description: LocalPrefPrefixes is a list of
                                        prefixes associated to a local preference.
                                      properties:
                                        localPref:
                                          description: LocalPref is the local preference
                                            associated to the prefixes.
                                          format: int32
                                          type: integer
                                        prefixes:
                                          description: Prefixes is the list of prefixes
                                            associated to the local preference.
                                          format: cidr
                                          items:
                                            type: string
                                          minItems: 1
                                          type: array
                                      type: object
                                    type: array
                                type: object
                              toReceive:
                                description: ToReceive represents the list of prefixes
                                  to receive from the given neighbor.
                                properties:
                                  allowed:
                                    description: |-
                                      Allowed is the list of prefixes allowed to be received from
                                      this neighbor.
                                    properties:
                                      mode:
                                        default: filtered
                                        description: |-
                                          Mode is the mode to use when handling the prefixes.
                                          When set to "filtered", only the prefixes in the given list will be allowed.
                                          When set to "all", all the prefixes configured on the router will be allowed.
                                        enum:
                                        - all
                                        - filtered
                                        type: string
                                      prefixes:
                                        items:
                                          description: PrefixSelector is a filter
                                            of prefixes to receive.
                                          properties:
                                            ge:
                                              description: |-
                                                The prefix length modifier. This selector accepts any matching prefix with length
                                                greater or equal the given value.
                                              format: int32
                                              maximum: 128
                                              minimum: 1
                                              type: integer
                                            le:
                                              description: |-
                                                The prefix length modifier. This selector accepts any matching prefix with length
                                                less or equal the given value.
                                              format: int32
                                              maximum: 128
                                              minimum: 1
                                              type: integer
                                            prefix:
                                              format: cidr
                                              type: string
                                          type: object
                                        type: array
                                    type: object
                                type: object
                            type: object
                          type: array
                        prefixes:
                          description: Prefixes is the list of prefixes we want to
                            advertise from this router instance.
                          items:
                            type: string
                          type: array
                        vrf:
                          description: VRF is the host vrf used to establish sessions
                            from this router.
                          type: string
                      required:
                      - asn
                      type: object
                    type: array
                type: object
              nodeSelector:
                description: |-
                  NodeSelector limits the nodes that will attempt to apply this config.
                  When specified, the configuration will be considered only on nodes
                  whose labels match the specified selectors.
                  When it is not specified all nodes will attempt to apply this config.
                properties:
                  matchExpressions:
                    description: matchExpressions is a list of label selector requirements.
                      The requirements are ANDed.
                    items:
                      description: |-
                        A label selector requirement is a selector that contains values, a key, and an operator that
                        relates the key and values.
                      properties:
                        key:
                          description: key is the label key that the selector applies
                            to.
                          type: string
                        operator:
                          description: |-
                            operator represents a key's relationship to a set of values.
                            Valid operators are In, NotIn, Exists and DoesNotExist.
                          type: string
                        values:
                          description: |-
                            values is an array of string values. If the operator is In or NotIn,
                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
                            the values array must be empty. This array is replaced during a strategic
                            merge patch.
                          items:
                            type: string
                          type: array
                          x-kubernetes-list-type: atomic
                      required:
                      - key
                      - operator
                      type: object
                    type: array
                    x-kubernetes-list-type: atomic
                  matchLabels:
                    additionalProperties:
                      type: string
                    description: |-
                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                      map is equivalent to an element of matchExpressions, whose key field is "key", the
                      operator is "In", and the values array contains only "value". The requirements are ANDed.
                    type: object
                type: object
                x-kubernetes-map-type: atomic
              raw:
                description: |-
                  Raw is a snippet of raw frr configuration that gets appended to the
                  one rendered translating the type safe API.
                properties:
                  priority:
                    description: |-
                      Priority is the order with this configuration is appended to the
                      bottom of the rendered configuration. A higher value means the
                      raw config is appended later in the configuration file.
                    type: integer
                  rawConfig:
                    description: |-
                      Config is a raw FRR configuration to be appended to the configuration
                      rendered via the k8s api.
                    type: string
                type: object
            type: object
          status:
            description: FRRConfigurationStatus defines the observed state of FRRConfiguration.
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
---
# Source: metallb/charts/frr-k8s/charts/crds/templates/frrk8s.metallb.io_frrk8sconfigurations.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.17.3
  name: frrk8sconfigurations.frrk8s.metallb.io
spec:
  group: frrk8s.metallb.io
  names:
    kind: FRRK8sConfiguration
    listKind: FRRK8sConfigurationList
    plural: frrk8sconfigurations
    singular: frrk8sconfiguration
  scope: Namespaced
  versions:
  - name: v1beta1
    schema:
      openAPIV3Schema:
        description: |-
          FRRK8sConfiguration holds the FRR Operator configuration with global
          settings for the K8s and FRR.
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: FRRK8sConfigurationSpec defines the desired state of FRRK8sConfiguration.
            properties:
              logLevel:
                description: |-
                  LogLevel sets the logging verbosity for the FRR-K8s components at runtime.
                  When configured, this value overrides the defaults established by the --log-level CLI flag.
                  Valid values are: all, debug, info, warn, error, none.
                enum:
                - all
                - debug
                - info
                - warn
                - error
                - none
                type: string
            type: object
          status:
            description: FRRK8sConfigurationStatus defines the observed state of FRRK8sConfiguration.
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
---
# Source: metallb/charts/frr-k8s/charts/crds/templates/frrk8s.metallb.io_frrnodestates.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.17.3
  name: frrnodestates.frrk8s.metallb.io
spec:
  group: frrk8s.metallb.io
  names:
    kind: FRRNodeState
    listKind: FRRNodeStateList
    plural: frrnodestates
    singular: frrnodestate
  scope: Cluster
  versions:
  - name: v1beta1
    schema:
      openAPIV3Schema:
        description: FRRNodeState exposes the status of the FRR instance running on
          each node.
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: FRRNodeStateSpec defines the desired state of FRRNodeState.
            type: object
          status:
            description: FRRNodeStateStatus defines the observed state of FRRNodeState.
            properties:
              lastConversionResult:
                description: LastConversionResult is the status of the last translation
                  between the `FRRConfiguration`s resources and FRR's configuration,
                  contains "success" or an error.
                type: string
              lastReloadResult:
                description: LastReloadResult represents the status of the last configuration
                  update operation by FRR, contains "success" or an error.
                type: string
              runningConfig:
                description: RunningConfig represents the current FRR running config,
                  which is the configuration the FRR instance is currently running
                  with.
                type: string
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
---
# Source: metallb/charts/frr-k8s/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: metallb-frr-k8s-controller
  labels:
    helm.sh/chart: frr-k8s-0.0.25
    app.kubernetes.io/name: frr-k8s
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.0.25"
    app.kubernetes.io/managed-by: Helm
rules:
- apiGroups: ["frrk8s.metallb.io"]
  resources: ["frrk8sconfigurations"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["frrk8s.metallb.io"]
  resources: ["frrconfigurations"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["frrk8s.metallb.io"]
  resources: ["frrnodestates"]
  verbs: ["get", "list", "watch", "create", "delete", "patch", "update"]
- apiGroups: ["frrk8s.metallb.io"]
  resources: ["frrnodestates/status"]
  verbs: ["get", "patch", "update"]
- apiGroups: ["frrk8s.metallb.io"]
  resources: ["bgpsessionstates"]
  verbs: ["get", "list", "watch", "create", "delete", "patch", "update"]
- apiGroups: ["frrk8s.metallb.io"]
  resources: ["bgpsessionstates/status"]
  verbs: ["get", "patch", "update"]
- apiGroups: [""]
  resources: ["nodes"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["authentication.k8s.io"]
  resources: ["tokenreviews"]
  verbs: ["create"]
- apiGroups: ["authorization.k8s.io"]
  resources: ["subjectaccessreviews"]
  verbs: ["create"]
- apiGroups: ["admissionregistration.k8s.io"]
  resources: ["validatingwebhookconfigurations"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["admissionregistration.k8s.io"]
  resourceNames: ["frr-k8s-validating-webhook-configuration"]
  resources: ["validatingwebhookconfigurations"]
  verbs: ["update"]
---
# Source: metallb/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: metallb:controller
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
rules:
- apiGroups: [""]
  resources: ["services", "namespaces"]
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources: ["nodes"]
  verbs: ["list"]
- apiGroups: [""]
  resources: ["services/status"]
  verbs: ["update"]
- apiGroups: [""]
  resources: ["events"]
  verbs: ["create", "patch"]
- apiGroups: ["admissionregistration.k8s.io"]
  resources: ["validatingwebhookconfigurations"]
  resourceNames: ["metallb-webhook-configuration"]
  verbs: ["create", "delete", "get", "list", "patch", "update", "watch"]
- apiGroups: ["admissionregistration.k8s.io"]
  resources: ["validatingwebhookconfigurations"]
  verbs: ["list", "watch"]
- apiGroups: ["apiextensions.k8s.io"]
  resources: ["customresourcedefinitions"]
  resourceNames: ["bfdprofiles.metallb.io","bgpadvertisements.metallb.io",
    "bgppeers.metallb.io","ipaddresspools.metallb.io","l2advertisements.metallb.io","communities.metallb.io","configurationstates.metallb.io"]
  verbs: ["create", "delete", "get", "list", "patch", "update", "watch"]
- apiGroups: ["apiextensions.k8s.io"]
  resources: ["customresourcedefinitions"]
  verbs: ["list", "watch"]
- apiGroups: ["metallb.io"]
  resources: ["configurationstates"]
  verbs: ["create", "delete", "get", "list", "patch", "update", "watch"]
- apiGroups: ["metallb.io"]
  resources: ["configurationstates/status"]
  verbs: ["get", "patch", "update"]
- apiGroups: ["authentication.k8s.io"]
  resources: ["tokenreviews"]
  verbs: ["create"]
- apiGroups: ["authorization.k8s.io"]
  resources: ["subjectaccessreviews"]
  verbs: ["create"]
---
# Source: metallb/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: metallb:speaker
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
rules:
- apiGroups: [""]
  resources: ["services", "endpoints", "nodes", "namespaces"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["discovery.k8s.io"]
  resources: ["endpointslices"]
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources: ["events"]
  verbs: ["create", "patch"]
- apiGroups: ["metallb.io"]
  resources: ["servicel2statuses","servicel2statuses/status","configurationstates","configurationstates/status"]
  verbs: ["*"]
- apiGroups: ["authentication.k8s.io"]
  resources: ["tokenreviews"]
  verbs: ["create"]
- apiGroups: ["authorization.k8s.io"]
  resources: ["subjectaccessreviews"]
  verbs: ["create"]
- apiGroups: ["frrk8s.metallb.io"]
  resources: ["frrconfigurations"]
  verbs: ["get", "list", "watch","create","update","delete"]
---
# Source: metallb/charts/frr-k8s/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: metallb-frr-k8s-controller
  labels:
    helm.sh/chart: frr-k8s-0.0.25
    app.kubernetes.io/name: frr-k8s
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.0.25"
    app.kubernetes.io/managed-by: Helm
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: metallb-frr-k8s-controller
subjects:
- kind: ServiceAccount
  name: metallb-frr-k8s-controller
  namespace: "metallb-system"
---
# Source: metallb/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: metallb:controller
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
subjects:
- kind: ServiceAccount
  name: metallb-controller
  namespace: metallb-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: metallb:controller
---
# Source: metallb/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: metallb:speaker
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
subjects:
- kind: ServiceAccount
  name: metallb-speaker
  namespace: metallb-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: metallb:speaker
---
# Source: metallb/charts/frr-k8s/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: metallb-frr-k8s-controller
  namespace: "metallb-system"
  labels:
    helm.sh/chart: frr-k8s-0.0.25
    app.kubernetes.io/name: frr-k8s
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.0.25"
    app.kubernetes.io/managed-by: Helm
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "list", "watch","update"]
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get","list","watch"]
---
# Source: metallb/charts/frr-k8s/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: metallb-frr-k8s-nodestate-cleaner
  namespace: "metallb-system"
  labels:
    helm.sh/chart: frr-k8s-0.0.25
    app.kubernetes.io/name: frr-k8s
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.0.25"
    app.kubernetes.io/managed-by: Helm
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["frrk8s.metallb.io"]
  resources: ["frrnodestates"]
  verbs: ["get", "list", "watch", "delete"]
---
# Source: metallb/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: metallb-pod-lister
  namespace: "metallb-system"
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["list", "get"]
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources: ["configmaps"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["metallb.io"]
  resources: ["bfdprofiles"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["metallb.io"]
  resources: ["bgppeers"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["metallb.io"]
  resources: ["l2advertisements"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["metallb.io"]
  resources: ["bgpadvertisements"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["metallb.io"]
  resources: ["ipaddresspools"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["metallb.io"]
  resources: ["communities"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["metallb.io"]
  resources: ["servicebgpstatuses","servicebgpstatuses/status"]
  verbs: ["*"]
---
# Source: metallb/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: metallb-controller
  namespace: "metallb-system"
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["create", "get", "list", "watch"]
- apiGroups: [""]
  resources: ["secrets"]
  resourceNames: ["metallb-memberlist"]
  verbs: ["list"]
- apiGroups: ["apps"]
  resources: ["deployments"]
  resourceNames: ["metallb-controller"]
  verbs: ["get"]
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["create", "delete", "get", "list", "patch", "update", "watch"]
- apiGroups: ["metallb.io"]
  resources: ["ipaddresspools"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["metallb.io"]
  resources: ["ipaddresspools/status"]
  verbs: ["update"]
- apiGroups: ["metallb.io"]
  resources: ["bgppeers"]
  verbs: ["get", "list"]
- apiGroups: ["metallb.io"]
  resources: ["bgpadvertisements"]
  verbs: ["get", "list"]
- apiGroups: ["metallb.io"]
  resources: ["l2advertisements"]
  verbs: ["get", "list"]
- apiGroups: ["metallb.io"]
  resources: ["communities"]
  verbs: ["get", "list","watch"]
- apiGroups: ["metallb.io"]
  resources: ["bfdprofiles"]
  verbs: ["get", "list","watch"]
---
# Source: metallb/charts/frr-k8s/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: metallb-frr-k8s-controller
  namespace: "metallb-system"
  labels:
    helm.sh/chart: frr-k8s-0.0.25
    app.kubernetes.io/name: frr-k8s
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.0.25"
    app.kubernetes.io/managed-by: Helm
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: metallb-frr-k8s-controller
subjects:
- kind: ServiceAccount
  name: metallb-frr-k8s-controller
---
# Source: metallb/charts/frr-k8s/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: metallb-frr-k8s-nodestate-cleaner
  namespace: "metallb-system"
  labels:
    helm.sh/chart: frr-k8s-0.0.25
    app.kubernetes.io/name: frr-k8s
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.0.25"
    app.kubernetes.io/managed-by: Helm
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: metallb-frr-k8s-nodestate-cleaner
subjects:
- kind: ServiceAccount
  name: metallb-frr-k8s-controller
---
# Source: metallb/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: metallb-pod-lister
  namespace: "metallb-system"
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: metallb-pod-lister
subjects:
- kind: ServiceAccount
  name: metallb-controller
- kind: ServiceAccount
  name: metallb-speaker
---
# Source: metallb/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: metallb-controller
  namespace: "metallb-system"
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: metallb-controller
subjects:
- kind: ServiceAccount
  name: metallb-controller
---
# Source: metallb/charts/frr-k8s/templates/webhooks.yaml
apiVersion: v1
kind: Service
metadata:
  name: frr-k8s-webhook-service
  namespace: "metallb-system"
spec:
  ports:
  - port: 443
    targetPort: webhook
  selector:
    app.kubernetes.io/component: statuscleaner
---
# Source: metallb/templates/webhooks.yaml
apiVersion: v1
kind: Service
metadata:
  name: metallb-webhook-service
  namespace: "metallb-system"
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
spec:
  ports:
  - port: 443
    targetPort: 9443
  selector:
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/component: controller
---
# Source: metallb/charts/frr-k8s/templates/controller.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: metallb-frr-k8s
  namespace: "metallb-system"
  labels:
    helm.sh/chart: frr-k8s-0.0.25
    app.kubernetes.io/name: frr-k8s
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.0.25"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: frr-k8s
    app: "frr-k8s"
spec:
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app.kubernetes.io/name: frr-k8s
      app.kubernetes.io/instance: metallb
      app.kubernetes.io/component: frr-k8s
  template:
    metadata:
      labels:
        app.kubernetes.io/name: frr-k8s
        app.kubernetes.io/instance: metallb
        app.kubernetes.io/component: frr-k8s
        app: "frr-k8s"
    spec:
      serviceAccountName: metallb-frr-k8s-controller
      terminationGracePeriodSeconds: 0
      hostNetwork: true
      volumes:
        - name: frr-sockets
          emptyDir: {}
        - name: frr-startup
          configMap:
            name: metallb-frr-k8s-frr-startup
        - name: frr-conf
          emptyDir: {}
        - name: reloader
          emptyDir: {}
        - name: metrics
          emptyDir: {}
        - name: frr-status
          emptyDir: {}
        - name: frr-lib
          emptyDir: {}
        - name: frr-tmp
          emptyDir: {}
      initContainers:
        # Copies the initial config files with the right permissions to the shared volume.
        - name: cp-frr-files
          image: quay.io/frrouting/frr:10.4.3
          securityContext:
            runAsUser: 100
            runAsGroup: 101
          command: ["/bin/sh", "-c", "cp -rLf /tmp/frr/* /etc/frr/"]
          volumeMounts:
            - name: frr-startup
              mountPath: /tmp/frr
            - name: frr-conf
              mountPath: /etc/frr
        # Copies the reloader to the shared volume between the speaker and reloader.
        - name: cp-reloader
          image: quay.io/metallb/frr-k8s:v0.0.25
          command: ["/bin/sh", "-c", "cp -f /frr-reloader.sh /etc/frr_reloader/"]
          volumeMounts:
            - name: reloader
              mountPath: /etc/frr_reloader
        # Copies the metrics exporter
        - name: cp-metrics
          image: quay.io/metallb/frr-k8s:v0.0.25
          command: ["/bin/sh", "-c", "cp -f /frr-metrics /etc/frr_metrics/"]
          volumeMounts:
            - name: metrics
              mountPath: /etc/frr_metrics
        - name: cp-frr-status
          image: quay.io/metallb/frr-k8s:v0.0.25
          command: ["/bin/sh", "-c", "cp -f /frr-status /etc/frr_status/"]
          volumeMounts:
            - name: frr-status
              mountPath: /etc/frr_status
      shareProcessNamespace: true
      containers:
      - name: controller
        image: quay.io/metallb/frr-k8s:v0.0.25
        command:
          - /frr-k8s
        args:
        - "--node-name=$(NODE_NAME)"
        - "--namespace=$(NAMESPACE)"
        - "--metrics-bind-address=0.0.0.0:9140"
        - --log-level=info
        env:
        - name: FRR_CONFIG_FILE
          value: /etc/frr_reloader/frr.conf
        - name: FRR_RELOADER_PID_FILE
          value: /etc/frr_reloader/reloader.pid
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        ports:
          - containerPort: 9140
            name: metricshttps
        livenessProbe:
          httpGet:
            path: /healthz
            port: 7572
            host: 127.0.0.1
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 1
          successThreshold: 1
          failureThreshold: 3
        readinessProbe:
          httpGet:
            path: /readyz
            port: 7572
            host: 127.0.0.1
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 1
          successThreshold: 1
          failureThreshold: 3
        securityContext:
          allowPrivilegeEscalation: false
          readOnlyRootFilesystem: true
          capabilities:
            drop:
            - ALL
            add:
            - NET_RAW
        volumeMounts:
          - name: reloader
            mountPath: /etc/frr_reloader
      - name: frr
        securityContext:
          allowPrivilegeEscalation: false
          readOnlyRootFilesystem: true
          capabilities:
            add:
            - NET_ADMIN
            - NET_RAW
            - SYS_ADMIN
            - NET_BIND_SERVICE
        image: quay.io/frrouting/frr:10.4.3
        env:
          - name: TINI_SUBREAPER
            value: "true"
        volumeMounts:
          - name: frr-sockets
            mountPath: /var/run/frr
          - name: frr-conf
            mountPath: /etc/frr
          - name: frr-lib
            mountPath: /var/lib/frr
          - name: frr-tmp
            mountPath: /var/tmp/frr
        command:
          - /bin/sh
          - -c
          - /sbin/tini -- /usr/lib/frr/docker-start
        livenessProbe:
          httpGet:
            path: /livez
            port: 9141
            scheme: HTTPS
          periodSeconds: 10
          failureThreshold: 3
        startupProbe:
          httpGet:
            path: /livez
            port: 9141
            scheme: HTTPS
          failureThreshold: 30
          periodSeconds: 5
      - name: reloader
        image: quay.io/frrouting/frr:10.4.3
        command: ["/etc/frr_reloader/frr-reloader.sh"]
        volumeMounts:
          - name: frr-sockets
            mountPath: /var/run/frr
          - name: frr-conf
            mountPath: /etc/frr
          - name: reloader
            mountPath: /etc/frr_reloader
      - name: frr-metrics
        image: quay.io/frrouting/frr:10.4.3
        command: ["/etc/frr_metrics/frr-metrics"]
        args:
          - --metrics-port=9141
          - --metrics-bind-address=0.0.0.0
        ports:
          - containerPort: 9141
            name: frrmetricshttps
        volumeMounts:
          - name: frr-sockets
            mountPath: /var/run/frr
          - name: frr-conf
            mountPath: /etc/frr
          - name: metrics
            mountPath: /etc/frr_metrics
      - name: frr-status
        args:
          - --node-name=$(NODE_NAME)
          - --namespace=$(NAMESPACE)
          - --pod-name=$(POD_NAME)
          - --log-level=info
          - --poll-interval=2m
        command:
          - /etc/frr_status/frr-status
        env:
          - name: NODE_NAME
            valueFrom:
              fieldRef:
                fieldPath: spec.nodeName
          - name: NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
        image: quay.io/frrouting/frr:10.4.3
        volumeMounts:
          - mountPath: /var/run/frr
            name: frr-sockets
          - mountPath: /etc/frr
            name: frr-conf
          - mountPath: /etc/frr_status
            name: frr-status
      nodeSelector:
        "kubernetes.io/os": linux
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
        operator: Exists
      - key: node-role.kubernetes.io/control-plane
        effect: NoSchedule
        operator: Exists
---
# Source: metallb/templates/speaker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: metallb-speaker
  namespace: "metallb-system"
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: speaker
spec:
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app.kubernetes.io/name: metallb
      app.kubernetes.io/instance: metallb
      app.kubernetes.io/component: speaker
  template:
    metadata:
      labels:
        app.kubernetes.io/name: metallb
        app.kubernetes.io/instance: metallb
        app.kubernetes.io/component: speaker
    spec:
      serviceAccountName: metallb-speaker
      terminationGracePeriodSeconds: 0
      hostNetwork: true
      volumes:
        - name: memberlist
          secret:
            secretName: metallb-memberlist
            defaultMode: 420
        - name: metallb-excludel2
          configMap:
            defaultMode: 256
            name: metallb-excludel2
        - name: memberlist-config
          configMap:
            name: metallb-memberlist-config
            optional: true
      containers:
      - name: speaker
        image: quay.io/metallb/speaker:v0.16.1
        args:
        - --port=9120
        - --log-level=info
        env:
        - name: METALLB_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: METALLB_HOST
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
        - name: METALLB_ML_BIND_ADDR
          valueFrom:
            fieldRef:
              fieldPath: status.podIP

        - name: METALLB_ML_LABELS
          value: "app.kubernetes.io/name=metallb,app.kubernetes.io/component=speaker"
        - name: METALLB_ML_BIND_PORT
          value: "7946"
        - name: METALLB_ML_SECRET_KEY_PATH
          value: "/etc/ml_secret_key"
        - name: METALLB_BGP_TYPE
          value: frr-k8s
        - name: METALLB_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        ports:
        - name: metricshttps
          containerPort: 9120
        - name: memberlist-tcp
          containerPort: 7946
          protocol: TCP
        - name: memberlist-udp
          containerPort: 7946
          protocol: UDP
        livenessProbe:
          httpGet:
            path: /healthz
            port: 17472
            host: 127.0.0.1
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 1
          successThreshold: 1
          failureThreshold: 3
        readinessProbe:
          httpGet:
            path: /readyz
            port: 17472
            host: 127.0.0.1
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 1
          successThreshold: 1
          failureThreshold: 3
        securityContext:
          allowPrivilegeEscalation: false
          readOnlyRootFilesystem: true
          capabilities:
            drop:
            - ALL
            add:
            - NET_RAW
        volumeMounts:
          - name: memberlist-config
            mountPath: /etc/metallb/memberlist
            readOnly: true
          - name: memberlist
            mountPath: /etc/ml_secret_key
          - name: metallb-excludel2
            mountPath: /etc/metallb
      nodeSelector:
        "kubernetes.io/os": linux
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
        operator: Exists
      - key: node-role.kubernetes.io/control-plane
        effect: NoSchedule
        operator: Exists
---
# Source: metallb/charts/frr-k8s/templates/status-cleaner.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metallb-frr-k8s-statuscleaner
  namespace: "metallb-system"
  labels:
    helm.sh/chart: frr-k8s-0.0.25
    app.kubernetes.io/name: frr-k8s
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.0.25"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: statuscleaner
    app: "frr-k8s"
spec:
  selector:
    matchLabels:
      app.kubernetes.io/component: statuscleaner
  template:
    metadata:
      annotations:
        kubectl.kubernetes.io/default-container: frr-k8s-statuscleaner
      labels:
        app.kubernetes.io/component: statuscleaner
    spec:
      containers:
      - command:
        - /statuscleaner
        args:
        - --webhook-port=19443
        - --log-level=info
        - "--namespace=$(NAMESPACE)"
        env:
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        image: quay.io/metallb/frr-k8s:v0.0.25
        name: frr-k8s-statuscleaner
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop:
              - ALL
          readOnlyRootFilesystem: true
        ports:
        - containerPort: 19443
          name: webhook
        livenessProbe:
          httpGet:
            path: /healthz
            port: webhook
            scheme: HTTPS
          initialDelaySeconds: 10
          periodSeconds: 10
          failureThreshold: 3
        readinessProbe:
          httpGet:
            path: /healthz
            port: webhook
            scheme: HTTPS
          initialDelaySeconds: 10
          periodSeconds: 10
          failureThreshold: 3
        volumeMounts:
        - name: cert
          mountPath: /tmp/k8s-webhook-server/serving-certs
          readOnly: true
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
        operator: Exists
      - key: node-role.kubernetes.io/control-plane
        effect: NoSchedule
        operator: Exists
      volumes:
        - name: cert
          secret:
            defaultMode: 420
            secretName: frr-k8s-webhook-server-cert
      serviceAccountName: metallb-frr-k8s-controller
      terminationGracePeriodSeconds: 10
      hostNetwork: true
---
# Source: metallb/templates/controller.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metallb-controller
  namespace: "metallb-system"
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
spec:
  strategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app.kubernetes.io/name: metallb
      app.kubernetes.io/instance: metallb
      app.kubernetes.io/component: controller
  template:
    metadata:
      labels:
        app.kubernetes.io/name: metallb
        app.kubernetes.io/instance: metallb
        app.kubernetes.io/component: controller
    spec:
      serviceAccountName: metallb-controller
      terminationGracePeriodSeconds: 0
      securityContext:
        fsGroup: 65534
        runAsNonRoot: true
        runAsUser: 65534
      containers:
      - name: controller
        image: quay.io/metallb/controller:v0.16.1
        args:
        - --port=9120
        - --log-level=info
        - --webhook-mode=enabled
        env:
        - name: METALLB_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: METALLB_ML_SECRET_NAME
          value: metallb-memberlist
        - name: METALLB_DEPLOYMENT
          value: metallb-controller
        - name: METALLB_BGP_TYPE
          value: frr-k8s
        ports:
        - name: metricshttps
          containerPort: 9120
        - containerPort: 9443
          name: webhook-server
          protocol: TCP
        volumeMounts:
        - mountPath: /tmp/k8s-webhook-server/serving-certs
          name: cert
          readOnly: true
        livenessProbe:
          httpGet:
            path: /healthz
            port: 17472
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 1
          successThreshold: 1
          failureThreshold: 3
        readinessProbe:
          httpGet:
            path: /readyz
            port: 17472
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 1
          successThreshold: 1
          failureThreshold: 3
        securityContext:
          allowPrivilegeEscalation: false
          readOnlyRootFilesystem: true
          capabilities:
            drop:
            - ALL
      nodeSelector:
        "kubernetes.io/os": linux
      volumes:
      - name: cert
        secret:
          defaultMode: 420
          secretName: metallb-webhook-cert
---
# Source: metallb/charts/frr-k8s/templates/webhooks.yaml
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: frr-k8s-validating-webhook-configuration
webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    service:
      name: frr-k8s-webhook-service
      namespace: metallb-system
      path: /validate-frrk8s-metallb-io-v1beta1-frrconfiguration
  failurePolicy: Fail
  name: frrconfigurationsvalidationwebhook.metallb.io
  rules:
  - apiGroups:
    - frrk8s.metallb.io
    apiVersions:
    - v1beta1
    operations:
    - CREATE
    - UPDATE
    resources:
    - frrconfigurations
  sideEffects: None
---
# Source: metallb/templates/webhooks.yaml
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: metallb-webhook-configuration
  labels:
    helm.sh/chart: metallb-0.16.1
    app.kubernetes.io/name: metallb
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/version: "v0.16.1"
    app.kubernetes.io/managed-by: Helm
webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    service:
      name: metallb-webhook-service
      namespace: metallb-system
      path: /validate-metallb-io-v1beta2-bgppeer
  failurePolicy: Fail
  name: bgppeervalidationwebhook.metallb.io
  rules:
  - apiGroups:
    - metallb.io
    apiVersions:
    - v1beta2
    operations:
    - CREATE
    - UPDATE
    resources:
    - bgppeers
  sideEffects: None
- admissionReviewVersions:
  - v1
  clientConfig:
    service:
      name: metallb-webhook-service
      namespace: metallb-system
      path: /validate-metallb-io-v1beta1-ipaddresspool
  failurePolicy: Fail
  name: ipaddresspoolvalidationwebhook.metallb.io
  rules:
  - apiGroups:
    - metallb.io
    apiVersions:
    - v1beta1
    operations:
    - CREATE
    - UPDATE
    resources:
    - ipaddresspools
  sideEffects: None
- admissionReviewVersions:
  - v1
  clientConfig:
    service:
      name: metallb-webhook-service
      namespace: metallb-system
      path: /validate-metallb-io-v1beta1-bgpadvertisement
  failurePolicy: Fail
  name: bgpadvertisementvalidationwebhook.metallb.io
  rules:
  - apiGroups:
    - metallb.io
    apiVersions:
    - v1beta1
    operations:
    - CREATE
    - UPDATE
    resources:
    - bgpadvertisements
  sideEffects: None
- admissionReviewVersions:
  - v1
  clientConfig:
    service:
      name: metallb-webhook-service
      namespace: metallb-system
      path: /validate-metallb-io-v1beta1-community
  failurePolicy: Fail
  name: communityvalidationwebhook.metallb.io
  rules:
  - apiGroups:
    - metallb.io
    apiVersions:
    - v1beta1
    operations:
    - CREATE
    - UPDATE
    resources:
    - communities
  sideEffects: None
- admissionReviewVersions:
  - v1
  clientConfig:
    service:
      name: metallb-webhook-service
      namespace: metallb-system
      path: /validate-metallb-io-v1beta1-bfdprofile
  failurePolicy: Fail
  name: bfdprofilevalidationwebhook.metallb.io
  rules:
  - apiGroups:
    - metallb.io
    apiVersions:
    - v1beta1
    operations:
    - CREATE
    - DELETE
    resources:
    - bfdprofiles
  sideEffects: None
- admissionReviewVersions:
  - v1
  clientConfig:
    service:
      name: metallb-webhook-service
      namespace: metallb-system
      path: /validate-metallb-io-v1beta1-l2advertisement
  failurePolicy: Fail
  name: l2advertisementvalidationwebhook.metallb.io
  rules:
  - apiGroups:
    - metallb.io
    apiVersions:
    - v1beta1
    operations:
    - CREATE
    - UPDATE
    resources:
    - l2advertisements
  sideEffects: None
