From e50e9f709dc2166927d06b1f463ced6bb4242bf0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 16 Jul 2024 20:16:20 +0000 Subject: [PATCH] Update Helm release metallb to v0.14.7 Signed-off-by: Renovate Bot --- class/defaults.yml | 2 +- .../metallb/charts/crds/templates/crds.yaml | 1104 +++++++++-------- .../metallb/templates/controller.yaml | 13 +- .../metallb/templates/exclude-l2-config.yaml | 27 + .../metallb/templates/rbac.yaml | 63 +- .../metallb/templates/service-accounts.yaml | 10 +- .../metallb/templates/speaker.yaml | 248 +++- .../metallb/templates/webhooks.yaml | 36 +- .../metallb/charts/crds/templates/crds.yaml | 1104 +++++++++-------- .../metallb/templates/controller.yaml | 13 +- .../metallb/templates/exclude-l2-config.yaml | 27 + .../metallb/templates/rbac.yaml | 63 +- .../metallb/templates/service-accounts.yaml | 10 +- .../metallb/templates/speaker.yaml | 248 +++- .../metallb/templates/webhooks.yaml | 36 +- .../metallb/charts/crds/templates/crds.yaml | 1104 +++++++++-------- .../metallb/templates/controller.yaml | 13 +- .../metallb/templates/exclude-l2-config.yaml | 27 + .../metallb/templates/rbac.yaml | 63 +- .../metallb/templates/service-accounts.yaml | 10 +- .../metallb/templates/speaker.yaml | 248 +++- .../metallb/templates/webhooks.yaml | 36 +- 22 files changed, 2653 insertions(+), 1852 deletions(-) create mode 100644 tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/exclude-l2-config.yaml create mode 100644 tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/exclude-l2-config.yaml create mode 100644 tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/exclude-l2-config.yaml diff --git a/class/defaults.yml b/class/defaults.yml index 7ed14e1..8188d4b 100644 --- a/class/defaults.yml +++ b/class/defaults.yml @@ -8,7 +8,7 @@ parameters: charts: metallb: source: https://metallb.github.io/metallb - version: 0.13.9 + version: 0.14.7 helm_values: speaker: secretName: ${metallb:speaker:secretname} diff --git a/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/charts/crds/templates/crds.yaml b/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/charts/crds/templates/crds.yaml index 8c3698d..4949488 100644 --- a/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/charts/crds/templates/crds.yaml +++ b/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/charts/crds/templates/crds.yaml @@ -2,223 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null - name: addresspools.metallb.io -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlGWlRDQ0EwMmdBd0lCQWdJVU5GRW1XcTM3MVpKdGkrMmlSQzk1WmpBV1MxZ3dEUVlKS29aSWh2Y05BUUVMDQpCUUF3UWpFTE1Ba0dBMVVFQmhNQ1dGZ3hGVEFUQmdOVkJBY01ERVJsWm1GMWJIUWdRMmwwZVRFY01Cb0dBMVVFDQpDZ3dUUkdWbVlYVnNkQ0JEYjIxd1lXNTVJRXgwWkRBZUZ3MHlNakEzTVRrd09UTXlNek5hRncweU1qQTRNVGd3DQpPVE15TXpOYU1FSXhDekFKQmdOVkJBWVRBbGhZTVJVd0V3WURWUVFIREF4RVpXWmhkV3gwSUVOcGRIa3hIREFhDQpCZ05WQkFvTUUwUmxabUYxYkhRZ1EyOXRjR0Z1ZVNCTWRHUXdnZ0lpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElDDQpEd0F3Z2dJS0FvSUNBUUNxVFpxMWZRcC9vYkdlenhES0o3OVB3Ny94azJwellualNzMlkzb1ZYSm5sRmM4YjVlDQpma2ZZQnY2bndscW1keW5PL2phWFBaQmRQSS82aFdOUDBkdVhadEtWU0NCUUpyZzEyOGNXb3F0MGNTN3pLb1VpDQpvcU1tQ0QvRXVBeFFNZjhRZDF2c1gvVllkZ0poVTZBRXJLZEpIaXpFOUJtUkNkTDBGMW1OVW55Rk82UnRtWFZUDQpidkxsTDVYeTc2R0FaQVBLOFB4aVlDa0NtbDdxN0VnTWNiOXlLWldCYmlxQ3VkTXE5TGJLNmdKNzF6YkZnSXV4DQo1L1pXK2JraTB2RlplWk9ZODUxb1psckFUNzJvMDI4NHNTWW9uN0pHZVZkY3NoUnh5R1VpSFpSTzdkaXZVTDVTDQpmM2JmSDFYbWY1ZDQzT0NWTWRuUUV2NWVaOG8zeWVLa3ZrbkZQUGVJMU9BbjdGbDlFRVNNR2dhOGFaSG1URSttDQpsLzlMSmdDYjBnQmtPT0M0WnV4bWh2aERKV1EzWnJCS3pMQlNUZXN0NWlLNVlwcXRWVVk2THRyRW9FelVTK1lsDQpwWndXY2VQWHlHeHM5ZURsR3lNVmQraW15Y3NTU1UvVno2Mmx6MnZCS21NTXBkYldDQWhud0RsRTVqU2dyMjRRDQp0eGNXLys2N3d5KzhuQlI3UXdqVTFITndVRjBzeERWdEwrZ1NHVERnSEVZSlhZelYvT05zMy94TkpoVFNPSkxNDQpoeXNVdyttaGdackdhbUdXcHVIVU1DUitvTWJzMTc1UkcrQjJnUFFHVytPTjJnUTRyOXN2b0ZBNHBBQm8xd1dLDQpRYjRhY3pmeVVscElBOVFoSmFsZEY3S3dPSHVlV3gwRUNrNXg0T2tvVDBvWVp0dzFiR0JjRGtaSmF3SURBUUFCDQpvMU13VVRBZEJnTlZIUTRFRmdRVW90UlNIUm9IWTEyRFZ4R0NCdEhpb1g2ZmVFQXdId1lEVlIwakJCZ3dGb0FVDQpvdFJTSFJvSFkxMkRWeEdDQnRIaW9YNmZlRUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFOQmdrcWhraUc5dzBCDQpBUXNGQUFPQ0FnRUFSbkpsWWRjMTFHd0VxWnh6RDF2R3BDR2pDN2VWTlQ3aVY1d3IybXlybHdPYi9aUWFEa0xYDQpvVStaOVVXT1VlSXJTdzUydDdmQUpvVVAwSm5iYkMveVIrU1lqUGhvUXNiVHduOTc2ZldBWTduM3FMOXhCd1Y0DQphek41OXNjeUp0dlhMeUtOL2N5ak1ReDRLajBIMFg0bWJ6bzVZNUtzWWtYVU0vOEFPdWZMcEd0S1NGVGgrSEFDDQpab1Q5YnZHS25adnNHd0tYZFF0Wnh0akhaUjVqK3U3ZGtQOTJBT051RFNabS8rWVV4b2tBK09JbzdSR3BwSHNXDQo1ZTdNY0FTVXRtb1FORXd6dVFoVkJaRWQ1OGtKYjUrV0VWbGNzanlXNnRTbzErZ25tTWNqR1BsMWgxR2hVbjV4DQpFY0lWRnBIWXM5YWo1NmpBSjk1MVQvZjhMaWxmTlVnanBLQ0c1bnl0SUt3emxhOHNtdGlPdm1UNEpYbXBwSkI2DQo4bmdHRVluVjUrUTYwWFJ2OEhSSGp1VG9CRHVhaERrVDA2R1JGODU1d09FR2V4bkZpMXZYWUxLVllWb1V2MXRKDQo4dVdUR1pwNllDSVJldlBqbzg5ZytWTlJSaVFYUThJd0dybXE5c0RoVTlqTjA0SjdVL1RvRDFpNHE3VnlsRUc5DQorV1VGNkNLaEdBeTJIaEhwVncyTGFoOS9lUzdZMUZ1YURrWmhPZG1laG1BOCtqdHNZamJadnR5Mm1SWlF0UUZzDQpUU1VUUjREbUR2bVVPRVRmeStpRHdzK2RkWXVNTnJGeVVYV2dkMnpBQU4ydVl1UHFGY2pRcFNPODFzVTJTU3R3DQoxVzAyeUtYOGJEYmZFdjBzbUh3UzliQnFlSGo5NEM1Mjg0YXpsdTBmaUdpTm1OUEM4ckJLRmhBPQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ== - service: - name: metallb-webhook-service - namespace: syn-metallb - path: /convert - conversionReviewVersions: - - v1alpha1 - - v1beta1 - group: metallb.io - names: - kind: AddressPool - listKind: AddressPoolList - plural: addresspools - singular: addresspool - scope: Namespaced - versions: - - deprecated: true - deprecationWarning: metallb.io v1alpha1 AddressPool is deprecated - name: v1alpha1 - schema: - openAPIV3Schema: - description: AddressPool is the Schema for the addresspools 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: AddressPoolSpec defines the desired state of AddressPool. - 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 - bgpAdvertisements: - description: When an IP is allocated from this pool, how should - it be translated into BGP announcements? - items: - properties: - aggregationLength: - default: 32 - description: "The aggregation-length advertisement option\ - \ lets you \u201Croll up\u201D the /32s into a larger prefix." - format: int32 - minimum: 1 - type: integer - aggregationLengthV6: - default: 128 - description: Optional, defaults to 128 (i.e. no aggregation) - if not specified. - format: int32 - type: integer - communities: - description: BGP communities - items: - type: string - type: array - localPref: - description: 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 - type: object - type: array - protocol: - description: Protocol can be used to select how the announcement - is done. - enum: - - layer2 - - bgp - type: string - required: - - addresses - - protocol - type: object - status: - description: AddressPoolStatus defines the observed state of AddressPool. - type: object - required: - - spec - type: object - served: true - storage: false - subresources: - status: {} - - deprecated: true - deprecationWarning: metallb.io v1beta1 AddressPool is deprecated, consider using - IPAddressPool - name: v1beta1 - schema: - openAPIV3Schema: - description: AddressPool represents a pool of IP addresses that can be allocated - to LoadBalancer services. AddressPool is deprecated and being replaced - by IPAddressPool. - 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: AddressPoolSpec defines the desired state of AddressPool. - 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 - bgpAdvertisements: - description: Drives how an IP allocated from this pool should translated - into BGP announcements. - items: - properties: - aggregationLength: - default: 32 - description: "The aggregation-length advertisement option\ - \ lets you \u201Croll up\u201D the /32s into a larger prefix." - format: int32 - minimum: 1 - type: integer - aggregationLengthV6: - default: 128 - description: Optional, defaults to 128 (i.e. no aggregation) - if not specified. - format: int32 - type: integer - communities: - description: BGP communities to be associated with the given - advertisement. - items: - type: string - type: array - localPref: - description: 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 - type: object - type: array - protocol: - description: Protocol can be used to select how the announcement - is done. - enum: - - layer2 - - bgp - type: string - required: - - addresses - - protocol - type: object - status: - description: AddressPoolStatus defines the observed state of AddressPool. - type: object - required: - - spec - type: object - served: true - storage: true - subresources: - status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: bfdprofiles.metallb.io spec: group: metallb.io @@ -229,22 +13,40 @@ spec: singular: bfdprofile scope: Namespaced versions: - - name: v1beta1 + - 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. + 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' + 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' + 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 @@ -252,48 +54,57 @@ 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. + 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 + 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. + 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.' + 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 + 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.' + 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. + 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 + 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 @@ -307,19 +118,12 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: bgpadvertisements.metallb.io spec: group: metallb.io @@ -330,22 +134,42 @@ spec: singular: bgpadvertisement scope: Namespaced versions: - - name: v1beta1 + - 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. + 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' + 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' + 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 @@ -368,63 +192,66 @@ spec: format: int32 type: integer communities: - description: The BGP communities to be associated with the announcement. - Each item can be a community of the form 1234:1234 or the name - of an alias defined in the Community CRD. + 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. + 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. + 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. + 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. + 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. + 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. + 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, @@ -433,9 +260,9 @@ spec: 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. + 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: @@ -443,57 +270,59 @@ spec: 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. + 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. + 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. + 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. + 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. + 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. + 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 @@ -506,19 +335,12 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: bgppeers.metallb.io spec: conversion: @@ -541,21 +363,38 @@ spec: singular: bgppeer scope: Namespaced versions: - - name: v1beta1 + - 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: 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' + 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' + 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 @@ -580,8 +419,9 @@ spec: minimum: 0 type: integer nodeSelectors: - description: Only connect to this peer on nodes that match one of - these selectors. + description: |- + Only connect to this peer on nodes that match one of these + selectors. items: properties: matchExpressions: @@ -645,21 +485,38 @@ spec: storage: false subresources: status: {} - - name: v1beta2 + - 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' + 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' + 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 @@ -671,10 +528,35 @@ spec: 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. + type: boolean ebgpMultiHop: description: To set if the BGPPeer is multi-hops away. Needed for FRR mode 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 mode 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 @@ -688,75 +570,80 @@ spec: minimum: 0 type: integer nodeSelectors: - description: Only connect to this peer on nodes that match one of - these selectors. + 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. + 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. + 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. + 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. + 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. + 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". + 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 + description: name is unique within a namespace to reference a secret resource. type: string namespace: - description: Namespace defines the space within which the secret + 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. format: int32 @@ -779,8 +666,9 @@ spec: 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 + description: |- + To set if we want to peer with the BGPPeer using an interface belonging to + a host vrf type: string required: - myASN @@ -795,19 +683,77 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.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: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 name: ipaddresspools.metallb.io spec: group: metallb.io @@ -818,22 +764,37 @@ spec: singular: ipaddresspool scope: Namespaced versions: - - name: v1beta1 + - 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. + 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' + 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' + 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 @@ -841,49 +802,52 @@ 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. + 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. + 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. + 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. + 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. + 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. + 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 + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. properties: key: @@ -891,35 +855,36 @@ spec: 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. + 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. + 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. + 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 @@ -932,20 +897,21 @@ spec: 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. + 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. + 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 + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. properties: key: @@ -953,35 +919,36 @@ spec: 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. + 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. + 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. + 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: @@ -997,19 +964,12 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: l2advertisements.metallb.io spec: group: metallb.io @@ -1020,22 +980,41 @@ spec: singular: l2advertisement scope: Namespaced versions: - - name: v1beta1 + - 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 + 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' + 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' + 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 @@ -1043,63 +1022,65 @@ 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. + 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. + 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. + 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. + 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. + 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. + 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. + 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, @@ -1112,52 +1093,54 @@ spec: 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. + 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. + 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. + 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. + 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. + 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: @@ -1168,75 +1151,94 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null - name: communities.metallb.io + controller-gen.kubebuilder.io/version: v0.14.0 + name: servicel2statuses.metallb.io spec: group: metallb.io names: - kind: Community - listKind: CommunityList - plural: communities - singular: community + kind: ServiceL2Status + listKind: ServiceL2StatusList + plural: servicel2statuses + singular: servicel2status scope: Namespaced versions: - - name: v1beta1 + - 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: Community is a collection of aliases for communities. Users - can define named aliases to be used in the BGPPeer CRD. + 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' + 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' + 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. + description: ServiceL2StatusSpec defines the desired state of ServiceL2Status. + type: object + status: + description: MetalLBServiceL2Status defines the observed state of ServiceL2Status. properties: - communities: + interfaces: + description: Interfaces indicates the interfaces that receive the + directed traffic items: + description: InterfaceInfo defines interface info of layer2 announcement. properties: name: - description: The name of the alias for the community. - type: string - value: - description: The BGP community value corresponding to the - given name. + description: Name the name of network interface card type: string type: object type: array - type: object - status: - description: CommunityStatus defines the observed state of Community. + 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: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] diff --git a/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/controller.yaml b/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/controller.yaml index 1391e13..c2cb3da 100644 --- a/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/controller.yaml +++ b/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/controller.yaml @@ -6,9 +6,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-controller + namespace: syn-metallb spec: selector: matchLabels: @@ -28,13 +29,15 @@ spec: - args: - --port=7472 - --log-level=info - - --cert-service-name=metallb-webhook-service + - --tls-min-version=VersionTLS12 env: - name: METALLB_ML_SECRET_NAME value: metallb-memberlist - name: METALLB_DEPLOYMENT value: metallb-controller - image: quay.io/metallb/controller:v0.13.9 + - name: METALLB_BGP_TYPE + value: frr + image: quay.io/metallb/controller:v0.14.7 livenessProbe: failureThreshold: 3 httpGet: @@ -82,4 +85,4 @@ spec: - name: cert secret: defaultMode: 420 - secretName: webhook-server-cert + secretName: metallb-webhook-cert diff --git a/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/exclude-l2-config.yaml b/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/exclude-l2-config.yaml new file mode 100644 index 0000000..56aa96d --- /dev/null +++ b/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/exclude-l2-config.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +data: + excludel2.yaml: | + announcedInterfacesToExclude: + - ^docker.* + - ^cbr.* + - ^dummy.* + - ^virbr.* + - ^lxcbr.* + - ^veth.* + - ^lo$ + - ^cali.* + - ^tunl.* + - ^flannel.* + - ^kube-ipvs.* + - ^cni.* + - ^nodelocaldns.* +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/instance: metallb + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: metallb + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 + name: metallb-excludel2 + namespace: syn-metallb diff --git a/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/rbac.yaml b/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/rbac.yaml index cc119b1..200d709 100644 --- a/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/rbac.yaml +++ b/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/rbac.yaml @@ -5,8 +5,8 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb:controller rules: - apiGroups: @@ -18,6 +18,12 @@ rules: - get - list - watch + - apiGroups: + - '' + resources: + - nodes + verbs: + - list - apiGroups: - '' resources: @@ -57,7 +63,6 @@ rules: - apiGroups: - apiextensions.k8s.io resourceNames: - - addresspools.metallb.io - bfdprofiles.metallb.io - bgpadvertisements.metallb.io - bgppeers.metallb.io @@ -89,8 +94,8 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb:speaker rules: - apiGroups: @@ -119,6 +124,13 @@ rules: verbs: - create - patch + - apiGroups: + - metallb.io + resources: + - servicel2statuses + - servicel2statuses/status + verbs: + - '*' --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -127,8 +139,8 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb:controller roleRef: apiGroup: rbac.authorization.k8s.io @@ -146,8 +158,8 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb:speaker roleRef: apiGroup: rbac.authorization.k8s.io @@ -165,9 +177,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-pod-lister + namespace: syn-metallb rules: - apiGroups: - '' @@ -175,6 +188,7 @@ rules: - pods verbs: - list + - get - apiGroups: - '' resources: @@ -184,9 +198,9 @@ rules: - list - watch - apiGroups: - - metallb.io + - '' resources: - - addresspools + - configmaps verbs: - get - list @@ -247,9 +261,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-controller + namespace: syn-metallb rules: - apiGroups: - '' @@ -288,14 +303,6 @@ rules: - patch - update - watch - - apiGroups: - - metallb.io - resources: - - addresspools - verbs: - - get - - list - - watch - apiGroups: - metallb.io resources: @@ -349,9 +356,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-pod-lister + namespace: syn-metallb roleRef: apiGroup: rbac.authorization.k8s.io kind: Role @@ -367,9 +375,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-controller + namespace: syn-metallb roleRef: apiGroup: rbac.authorization.k8s.io kind: Role diff --git a/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/service-accounts.yaml b/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/service-accounts.yaml index fc4d8c3..62556a2 100644 --- a/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/service-accounts.yaml +++ b/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/service-accounts.yaml @@ -6,9 +6,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-controller + namespace: syn-metallb --- apiVersion: v1 kind: ServiceAccount @@ -18,6 +19,7 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-speaker + namespace: syn-metallb diff --git a/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/speaker.yaml b/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/speaker.yaml index bb77aed..79f9a3e 100644 --- a/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/speaker.yaml +++ b/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/speaker.yaml @@ -1,3 +1,108 @@ +apiVersion: v1 +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 -s 90000000" + bgpd_options=" -A 127.0.0.1 -p 0" + 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" + bfdd_options=" -A 127.0.0.1" + 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. + 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 file /etc/frr/frr.log informational + vtysh.conf: | + service integrated-vtysh-config +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: speaker + app.kubernetes.io/instance: metallb + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: metallb + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 + name: metallb-frr-startup + namespace: syn-metallb +--- apiVersion: apps/v1 kind: DaemonSet metadata: @@ -6,9 +111,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-speaker + namespace: syn-metallb spec: selector: matchLabels: @@ -45,7 +151,17 @@ spec: value: '7946' - name: METALLB_ML_SECRET_KEY_PATH value: /etc/ml_secret_key - image: quay.io/metallb/speaker:v0.13.9 + - name: FRR_CONFIG_FILE + value: /etc/frr_reloader/frr.conf + - name: FRR_RELOADER_PID_FILE + value: /etc/frr_reloader/reloader.pid + - name: METALLB_BGP_TYPE + value: frr + - name: METALLB_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + image: quay.io/metallb/speaker:v0.14.7 livenessProbe: failureThreshold: 3 httpGet: @@ -85,10 +201,121 @@ spec: volumeMounts: - mountPath: /etc/ml_secret_key name: memberlist + - mountPath: /etc/frr_reloader + name: reloader + - mountPath: /etc/metallb + name: metallb-excludel2 + - command: + - /bin/sh + - -c + - | + /sbin/tini -- /usr/lib/frr/docker-start & + attempts=0 + until [[ -f /etc/frr/frr.log || $attempts -eq 60 ]]; do + sleep 1 + attempts=$(( $attempts + 1 )) + done + tail -f /etc/frr/frr.log + env: + - name: TINI_SUBREAPER + value: 'true' + image: quay.io/frrouting/frr:9.1.0 + livenessProbe: + failureThreshold: 3 + httpGet: + path: livez + port: 7473 + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + name: frr + securityContext: + capabilities: + add: + - NET_ADMIN + - NET_RAW + - SYS_ADMIN + - NET_BIND_SERVICE + startupProbe: + failureThreshold: 30 + httpGet: + path: /livez + port: 7473 + periodSeconds: 5 + volumeMounts: + - mountPath: /var/run/frr + name: frr-sockets + - mountPath: /etc/frr + name: frr-conf + - command: + - /etc/frr_reloader/frr-reloader.sh + image: quay.io/frrouting/frr:9.1.0 + name: reloader + volumeMounts: + - mountPath: /var/run/frr + name: frr-sockets + - mountPath: /etc/frr + name: frr-conf + - mountPath: /etc/frr_reloader + name: reloader + - args: + - --metrics-port=7473 + command: + - /etc/frr_metrics/frr-metrics + env: + - name: VTYSH_HISTFILE + value: /dev/null + image: quay.io/frrouting/frr:9.1.0 + name: frr-metrics + ports: + - containerPort: 7473 + name: monitoring + volumeMounts: + - mountPath: /var/run/frr + name: frr-sockets + - mountPath: /etc/frr + name: frr-conf + - mountPath: /etc/frr_metrics + name: metrics hostNetwork: true + initContainers: + - command: + - /bin/sh + - -c + - cp -rLf /tmp/frr/* /etc/frr/ + image: quay.io/frrouting/frr:9.1.0 + name: cp-frr-files + securityContext: + runAsGroup: 101 + runAsUser: 100 + volumeMounts: + - mountPath: /tmp/frr + name: frr-startup + - mountPath: /etc/frr + name: frr-conf + - command: + - /cp-tool + - /frr-reloader.sh + - /etc/frr_reloader/frr-reloader.sh + image: quay.io/metallb/speaker:v0.14.7 + name: cp-reloader + volumeMounts: + - mountPath: /etc/frr_reloader + name: reloader + - command: + - /cp-tool + - /frr-metrics + - /etc/frr_metrics/frr-metrics + image: quay.io/metallb/speaker:v0.14.7 + name: cp-metrics + volumeMounts: + - mountPath: /etc/frr_metrics + name: metrics nodeSelector: kubernetes.io/os: linux serviceAccountName: metallb-speaker + shareProcessNamespace: true terminationGracePeriodSeconds: 0 tolerations: - effect: NoSchedule @@ -102,5 +329,20 @@ spec: secret: defaultMode: 420 secretName: metallb-memberlist + - configMap: + defaultMode: 256 + name: metallb-excludel2 + name: metallb-excludel2 + - emptyDir: {} + name: frr-sockets + - configMap: + name: metallb-frr-startup + name: frr-startup + - emptyDir: {} + name: frr-conf + - emptyDir: {} + name: reloader + - emptyDir: {} + name: metrics updateStrategy: type: RollingUpdate diff --git a/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/webhooks.yaml b/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/webhooks.yaml index 9caf69c..23661b3 100644 --- a/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/webhooks.yaml +++ b/tests/golden/addresses/metallb/metallb/10_metallb_helmchart/metallb/templates/webhooks.yaml @@ -5,9 +5,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 - name: webhook-server-cert + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 + name: metallb-webhook-cert + namespace: syn-metallb --- apiVersion: v1 kind: Service @@ -16,9 +17,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-webhook-service + namespace: syn-metallb spec: ports: - port: 443 @@ -35,30 +37,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-webhook-configuration webhooks: - - admissionReviewVersions: - - v1 - clientConfig: - service: - name: metallb-webhook-service - namespace: syn-metallb - path: /validate-metallb-io-v1beta1-addresspool - failurePolicy: Fail - name: addresspoolvalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta1 - operations: - - CREATE - - UPDATE - resources: - - addresspools - sideEffects: None - admissionReviewVersions: - v1 clientConfig: diff --git a/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/charts/crds/templates/crds.yaml b/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/charts/crds/templates/crds.yaml index 8c3698d..4949488 100644 --- a/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/charts/crds/templates/crds.yaml +++ b/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/charts/crds/templates/crds.yaml @@ -2,223 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null - name: addresspools.metallb.io -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlGWlRDQ0EwMmdBd0lCQWdJVU5GRW1XcTM3MVpKdGkrMmlSQzk1WmpBV1MxZ3dEUVlKS29aSWh2Y05BUUVMDQpCUUF3UWpFTE1Ba0dBMVVFQmhNQ1dGZ3hGVEFUQmdOVkJBY01ERVJsWm1GMWJIUWdRMmwwZVRFY01Cb0dBMVVFDQpDZ3dUUkdWbVlYVnNkQ0JEYjIxd1lXNTVJRXgwWkRBZUZ3MHlNakEzTVRrd09UTXlNek5hRncweU1qQTRNVGd3DQpPVE15TXpOYU1FSXhDekFKQmdOVkJBWVRBbGhZTVJVd0V3WURWUVFIREF4RVpXWmhkV3gwSUVOcGRIa3hIREFhDQpCZ05WQkFvTUUwUmxabUYxYkhRZ1EyOXRjR0Z1ZVNCTWRHUXdnZ0lpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElDDQpEd0F3Z2dJS0FvSUNBUUNxVFpxMWZRcC9vYkdlenhES0o3OVB3Ny94azJwellualNzMlkzb1ZYSm5sRmM4YjVlDQpma2ZZQnY2bndscW1keW5PL2phWFBaQmRQSS82aFdOUDBkdVhadEtWU0NCUUpyZzEyOGNXb3F0MGNTN3pLb1VpDQpvcU1tQ0QvRXVBeFFNZjhRZDF2c1gvVllkZ0poVTZBRXJLZEpIaXpFOUJtUkNkTDBGMW1OVW55Rk82UnRtWFZUDQpidkxsTDVYeTc2R0FaQVBLOFB4aVlDa0NtbDdxN0VnTWNiOXlLWldCYmlxQ3VkTXE5TGJLNmdKNzF6YkZnSXV4DQo1L1pXK2JraTB2RlplWk9ZODUxb1psckFUNzJvMDI4NHNTWW9uN0pHZVZkY3NoUnh5R1VpSFpSTzdkaXZVTDVTDQpmM2JmSDFYbWY1ZDQzT0NWTWRuUUV2NWVaOG8zeWVLa3ZrbkZQUGVJMU9BbjdGbDlFRVNNR2dhOGFaSG1URSttDQpsLzlMSmdDYjBnQmtPT0M0WnV4bWh2aERKV1EzWnJCS3pMQlNUZXN0NWlLNVlwcXRWVVk2THRyRW9FelVTK1lsDQpwWndXY2VQWHlHeHM5ZURsR3lNVmQraW15Y3NTU1UvVno2Mmx6MnZCS21NTXBkYldDQWhud0RsRTVqU2dyMjRRDQp0eGNXLys2N3d5KzhuQlI3UXdqVTFITndVRjBzeERWdEwrZ1NHVERnSEVZSlhZelYvT05zMy94TkpoVFNPSkxNDQpoeXNVdyttaGdackdhbUdXcHVIVU1DUitvTWJzMTc1UkcrQjJnUFFHVytPTjJnUTRyOXN2b0ZBNHBBQm8xd1dLDQpRYjRhY3pmeVVscElBOVFoSmFsZEY3S3dPSHVlV3gwRUNrNXg0T2tvVDBvWVp0dzFiR0JjRGtaSmF3SURBUUFCDQpvMU13VVRBZEJnTlZIUTRFRmdRVW90UlNIUm9IWTEyRFZ4R0NCdEhpb1g2ZmVFQXdId1lEVlIwakJCZ3dGb0FVDQpvdFJTSFJvSFkxMkRWeEdDQnRIaW9YNmZlRUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFOQmdrcWhraUc5dzBCDQpBUXNGQUFPQ0FnRUFSbkpsWWRjMTFHd0VxWnh6RDF2R3BDR2pDN2VWTlQ3aVY1d3IybXlybHdPYi9aUWFEa0xYDQpvVStaOVVXT1VlSXJTdzUydDdmQUpvVVAwSm5iYkMveVIrU1lqUGhvUXNiVHduOTc2ZldBWTduM3FMOXhCd1Y0DQphek41OXNjeUp0dlhMeUtOL2N5ak1ReDRLajBIMFg0bWJ6bzVZNUtzWWtYVU0vOEFPdWZMcEd0S1NGVGgrSEFDDQpab1Q5YnZHS25adnNHd0tYZFF0Wnh0akhaUjVqK3U3ZGtQOTJBT051RFNabS8rWVV4b2tBK09JbzdSR3BwSHNXDQo1ZTdNY0FTVXRtb1FORXd6dVFoVkJaRWQ1OGtKYjUrV0VWbGNzanlXNnRTbzErZ25tTWNqR1BsMWgxR2hVbjV4DQpFY0lWRnBIWXM5YWo1NmpBSjk1MVQvZjhMaWxmTlVnanBLQ0c1bnl0SUt3emxhOHNtdGlPdm1UNEpYbXBwSkI2DQo4bmdHRVluVjUrUTYwWFJ2OEhSSGp1VG9CRHVhaERrVDA2R1JGODU1d09FR2V4bkZpMXZYWUxLVllWb1V2MXRKDQo4dVdUR1pwNllDSVJldlBqbzg5ZytWTlJSaVFYUThJd0dybXE5c0RoVTlqTjA0SjdVL1RvRDFpNHE3VnlsRUc5DQorV1VGNkNLaEdBeTJIaEhwVncyTGFoOS9lUzdZMUZ1YURrWmhPZG1laG1BOCtqdHNZamJadnR5Mm1SWlF0UUZzDQpUU1VUUjREbUR2bVVPRVRmeStpRHdzK2RkWXVNTnJGeVVYV2dkMnpBQU4ydVl1UHFGY2pRcFNPODFzVTJTU3R3DQoxVzAyeUtYOGJEYmZFdjBzbUh3UzliQnFlSGo5NEM1Mjg0YXpsdTBmaUdpTm1OUEM4ckJLRmhBPQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ== - service: - name: metallb-webhook-service - namespace: syn-metallb - path: /convert - conversionReviewVersions: - - v1alpha1 - - v1beta1 - group: metallb.io - names: - kind: AddressPool - listKind: AddressPoolList - plural: addresspools - singular: addresspool - scope: Namespaced - versions: - - deprecated: true - deprecationWarning: metallb.io v1alpha1 AddressPool is deprecated - name: v1alpha1 - schema: - openAPIV3Schema: - description: AddressPool is the Schema for the addresspools 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: AddressPoolSpec defines the desired state of AddressPool. - 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 - bgpAdvertisements: - description: When an IP is allocated from this pool, how should - it be translated into BGP announcements? - items: - properties: - aggregationLength: - default: 32 - description: "The aggregation-length advertisement option\ - \ lets you \u201Croll up\u201D the /32s into a larger prefix." - format: int32 - minimum: 1 - type: integer - aggregationLengthV6: - default: 128 - description: Optional, defaults to 128 (i.e. no aggregation) - if not specified. - format: int32 - type: integer - communities: - description: BGP communities - items: - type: string - type: array - localPref: - description: 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 - type: object - type: array - protocol: - description: Protocol can be used to select how the announcement - is done. - enum: - - layer2 - - bgp - type: string - required: - - addresses - - protocol - type: object - status: - description: AddressPoolStatus defines the observed state of AddressPool. - type: object - required: - - spec - type: object - served: true - storage: false - subresources: - status: {} - - deprecated: true - deprecationWarning: metallb.io v1beta1 AddressPool is deprecated, consider using - IPAddressPool - name: v1beta1 - schema: - openAPIV3Schema: - description: AddressPool represents a pool of IP addresses that can be allocated - to LoadBalancer services. AddressPool is deprecated and being replaced - by IPAddressPool. - 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: AddressPoolSpec defines the desired state of AddressPool. - 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 - bgpAdvertisements: - description: Drives how an IP allocated from this pool should translated - into BGP announcements. - items: - properties: - aggregationLength: - default: 32 - description: "The aggregation-length advertisement option\ - \ lets you \u201Croll up\u201D the /32s into a larger prefix." - format: int32 - minimum: 1 - type: integer - aggregationLengthV6: - default: 128 - description: Optional, defaults to 128 (i.e. no aggregation) - if not specified. - format: int32 - type: integer - communities: - description: BGP communities to be associated with the given - advertisement. - items: - type: string - type: array - localPref: - description: 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 - type: object - type: array - protocol: - description: Protocol can be used to select how the announcement - is done. - enum: - - layer2 - - bgp - type: string - required: - - addresses - - protocol - type: object - status: - description: AddressPoolStatus defines the observed state of AddressPool. - type: object - required: - - spec - type: object - served: true - storage: true - subresources: - status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: bfdprofiles.metallb.io spec: group: metallb.io @@ -229,22 +13,40 @@ spec: singular: bfdprofile scope: Namespaced versions: - - name: v1beta1 + - 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. + 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' + 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' + 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 @@ -252,48 +54,57 @@ 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. + 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 + 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. + 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.' + 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 + 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.' + 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. + 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 + 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 @@ -307,19 +118,12 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: bgpadvertisements.metallb.io spec: group: metallb.io @@ -330,22 +134,42 @@ spec: singular: bgpadvertisement scope: Namespaced versions: - - name: v1beta1 + - 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. + 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' + 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' + 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 @@ -368,63 +192,66 @@ spec: format: int32 type: integer communities: - description: The BGP communities to be associated with the announcement. - Each item can be a community of the form 1234:1234 or the name - of an alias defined in the Community CRD. + 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. + 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. + 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. + 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. + 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. + 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. + 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, @@ -433,9 +260,9 @@ spec: 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. + 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: @@ -443,57 +270,59 @@ spec: 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. + 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. + 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. + 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. + 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. + 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. + 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 @@ -506,19 +335,12 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: bgppeers.metallb.io spec: conversion: @@ -541,21 +363,38 @@ spec: singular: bgppeer scope: Namespaced versions: - - name: v1beta1 + - 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: 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' + 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' + 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 @@ -580,8 +419,9 @@ spec: minimum: 0 type: integer nodeSelectors: - description: Only connect to this peer on nodes that match one of - these selectors. + description: |- + Only connect to this peer on nodes that match one of these + selectors. items: properties: matchExpressions: @@ -645,21 +485,38 @@ spec: storage: false subresources: status: {} - - name: v1beta2 + - 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' + 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' + 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 @@ -671,10 +528,35 @@ spec: 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. + type: boolean ebgpMultiHop: description: To set if the BGPPeer is multi-hops away. Needed for FRR mode 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 mode 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 @@ -688,75 +570,80 @@ spec: minimum: 0 type: integer nodeSelectors: - description: Only connect to this peer on nodes that match one of - these selectors. + 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. + 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. + 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. + 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. + 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. + 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". + 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 + description: name is unique within a namespace to reference a secret resource. type: string namespace: - description: Namespace defines the space within which the secret + 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. format: int32 @@ -779,8 +666,9 @@ spec: 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 + description: |- + To set if we want to peer with the BGPPeer using an interface belonging to + a host vrf type: string required: - myASN @@ -795,19 +683,77 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.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: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 name: ipaddresspools.metallb.io spec: group: metallb.io @@ -818,22 +764,37 @@ spec: singular: ipaddresspool scope: Namespaced versions: - - name: v1beta1 + - 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. + 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' + 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' + 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 @@ -841,49 +802,52 @@ 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. + 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. + 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. + 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. + 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. + 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. + 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 + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. properties: key: @@ -891,35 +855,36 @@ spec: 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. + 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. + 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. + 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 @@ -932,20 +897,21 @@ spec: 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. + 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. + 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 + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. properties: key: @@ -953,35 +919,36 @@ spec: 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. + 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. + 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. + 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: @@ -997,19 +964,12 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: l2advertisements.metallb.io spec: group: metallb.io @@ -1020,22 +980,41 @@ spec: singular: l2advertisement scope: Namespaced versions: - - name: v1beta1 + - 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 + 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' + 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' + 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 @@ -1043,63 +1022,65 @@ 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. + 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. + 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. + 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. + 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. + 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. + 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. + 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, @@ -1112,52 +1093,54 @@ spec: 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. + 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. + 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. + 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. + 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. + 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: @@ -1168,75 +1151,94 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null - name: communities.metallb.io + controller-gen.kubebuilder.io/version: v0.14.0 + name: servicel2statuses.metallb.io spec: group: metallb.io names: - kind: Community - listKind: CommunityList - plural: communities - singular: community + kind: ServiceL2Status + listKind: ServiceL2StatusList + plural: servicel2statuses + singular: servicel2status scope: Namespaced versions: - - name: v1beta1 + - 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: Community is a collection of aliases for communities. Users - can define named aliases to be used in the BGPPeer CRD. + 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' + 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' + 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. + description: ServiceL2StatusSpec defines the desired state of ServiceL2Status. + type: object + status: + description: MetalLBServiceL2Status defines the observed state of ServiceL2Status. properties: - communities: + interfaces: + description: Interfaces indicates the interfaces that receive the + directed traffic items: + description: InterfaceInfo defines interface info of layer2 announcement. properties: name: - description: The name of the alias for the community. - type: string - value: - description: The BGP community value corresponding to the - given name. + description: Name the name of network interface card type: string type: object type: array - type: object - status: - description: CommunityStatus defines the observed state of Community. + 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: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] diff --git a/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/controller.yaml b/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/controller.yaml index 1391e13..c2cb3da 100644 --- a/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/controller.yaml +++ b/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/controller.yaml @@ -6,9 +6,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-controller + namespace: syn-metallb spec: selector: matchLabels: @@ -28,13 +29,15 @@ spec: - args: - --port=7472 - --log-level=info - - --cert-service-name=metallb-webhook-service + - --tls-min-version=VersionTLS12 env: - name: METALLB_ML_SECRET_NAME value: metallb-memberlist - name: METALLB_DEPLOYMENT value: metallb-controller - image: quay.io/metallb/controller:v0.13.9 + - name: METALLB_BGP_TYPE + value: frr + image: quay.io/metallb/controller:v0.14.7 livenessProbe: failureThreshold: 3 httpGet: @@ -82,4 +85,4 @@ spec: - name: cert secret: defaultMode: 420 - secretName: webhook-server-cert + secretName: metallb-webhook-cert diff --git a/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/exclude-l2-config.yaml b/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/exclude-l2-config.yaml new file mode 100644 index 0000000..56aa96d --- /dev/null +++ b/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/exclude-l2-config.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +data: + excludel2.yaml: | + announcedInterfacesToExclude: + - ^docker.* + - ^cbr.* + - ^dummy.* + - ^virbr.* + - ^lxcbr.* + - ^veth.* + - ^lo$ + - ^cali.* + - ^tunl.* + - ^flannel.* + - ^kube-ipvs.* + - ^cni.* + - ^nodelocaldns.* +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/instance: metallb + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: metallb + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 + name: metallb-excludel2 + namespace: syn-metallb diff --git a/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/rbac.yaml b/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/rbac.yaml index cc119b1..200d709 100644 --- a/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/rbac.yaml +++ b/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/rbac.yaml @@ -5,8 +5,8 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb:controller rules: - apiGroups: @@ -18,6 +18,12 @@ rules: - get - list - watch + - apiGroups: + - '' + resources: + - nodes + verbs: + - list - apiGroups: - '' resources: @@ -57,7 +63,6 @@ rules: - apiGroups: - apiextensions.k8s.io resourceNames: - - addresspools.metallb.io - bfdprofiles.metallb.io - bgpadvertisements.metallb.io - bgppeers.metallb.io @@ -89,8 +94,8 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb:speaker rules: - apiGroups: @@ -119,6 +124,13 @@ rules: verbs: - create - patch + - apiGroups: + - metallb.io + resources: + - servicel2statuses + - servicel2statuses/status + verbs: + - '*' --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -127,8 +139,8 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb:controller roleRef: apiGroup: rbac.authorization.k8s.io @@ -146,8 +158,8 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb:speaker roleRef: apiGroup: rbac.authorization.k8s.io @@ -165,9 +177,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-pod-lister + namespace: syn-metallb rules: - apiGroups: - '' @@ -175,6 +188,7 @@ rules: - pods verbs: - list + - get - apiGroups: - '' resources: @@ -184,9 +198,9 @@ rules: - list - watch - apiGroups: - - metallb.io + - '' resources: - - addresspools + - configmaps verbs: - get - list @@ -247,9 +261,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-controller + namespace: syn-metallb rules: - apiGroups: - '' @@ -288,14 +303,6 @@ rules: - patch - update - watch - - apiGroups: - - metallb.io - resources: - - addresspools - verbs: - - get - - list - - watch - apiGroups: - metallb.io resources: @@ -349,9 +356,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-pod-lister + namespace: syn-metallb roleRef: apiGroup: rbac.authorization.k8s.io kind: Role @@ -367,9 +375,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-controller + namespace: syn-metallb roleRef: apiGroup: rbac.authorization.k8s.io kind: Role diff --git a/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/service-accounts.yaml b/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/service-accounts.yaml index fc4d8c3..62556a2 100644 --- a/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/service-accounts.yaml +++ b/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/service-accounts.yaml @@ -6,9 +6,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-controller + namespace: syn-metallb --- apiVersion: v1 kind: ServiceAccount @@ -18,6 +19,7 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-speaker + namespace: syn-metallb diff --git a/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/speaker.yaml b/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/speaker.yaml index bb77aed..79f9a3e 100644 --- a/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/speaker.yaml +++ b/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/speaker.yaml @@ -1,3 +1,108 @@ +apiVersion: v1 +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 -s 90000000" + bgpd_options=" -A 127.0.0.1 -p 0" + 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" + bfdd_options=" -A 127.0.0.1" + 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. + 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 file /etc/frr/frr.log informational + vtysh.conf: | + service integrated-vtysh-config +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: speaker + app.kubernetes.io/instance: metallb + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: metallb + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 + name: metallb-frr-startup + namespace: syn-metallb +--- apiVersion: apps/v1 kind: DaemonSet metadata: @@ -6,9 +111,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-speaker + namespace: syn-metallb spec: selector: matchLabels: @@ -45,7 +151,17 @@ spec: value: '7946' - name: METALLB_ML_SECRET_KEY_PATH value: /etc/ml_secret_key - image: quay.io/metallb/speaker:v0.13.9 + - name: FRR_CONFIG_FILE + value: /etc/frr_reloader/frr.conf + - name: FRR_RELOADER_PID_FILE + value: /etc/frr_reloader/reloader.pid + - name: METALLB_BGP_TYPE + value: frr + - name: METALLB_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + image: quay.io/metallb/speaker:v0.14.7 livenessProbe: failureThreshold: 3 httpGet: @@ -85,10 +201,121 @@ spec: volumeMounts: - mountPath: /etc/ml_secret_key name: memberlist + - mountPath: /etc/frr_reloader + name: reloader + - mountPath: /etc/metallb + name: metallb-excludel2 + - command: + - /bin/sh + - -c + - | + /sbin/tini -- /usr/lib/frr/docker-start & + attempts=0 + until [[ -f /etc/frr/frr.log || $attempts -eq 60 ]]; do + sleep 1 + attempts=$(( $attempts + 1 )) + done + tail -f /etc/frr/frr.log + env: + - name: TINI_SUBREAPER + value: 'true' + image: quay.io/frrouting/frr:9.1.0 + livenessProbe: + failureThreshold: 3 + httpGet: + path: livez + port: 7473 + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + name: frr + securityContext: + capabilities: + add: + - NET_ADMIN + - NET_RAW + - SYS_ADMIN + - NET_BIND_SERVICE + startupProbe: + failureThreshold: 30 + httpGet: + path: /livez + port: 7473 + periodSeconds: 5 + volumeMounts: + - mountPath: /var/run/frr + name: frr-sockets + - mountPath: /etc/frr + name: frr-conf + - command: + - /etc/frr_reloader/frr-reloader.sh + image: quay.io/frrouting/frr:9.1.0 + name: reloader + volumeMounts: + - mountPath: /var/run/frr + name: frr-sockets + - mountPath: /etc/frr + name: frr-conf + - mountPath: /etc/frr_reloader + name: reloader + - args: + - --metrics-port=7473 + command: + - /etc/frr_metrics/frr-metrics + env: + - name: VTYSH_HISTFILE + value: /dev/null + image: quay.io/frrouting/frr:9.1.0 + name: frr-metrics + ports: + - containerPort: 7473 + name: monitoring + volumeMounts: + - mountPath: /var/run/frr + name: frr-sockets + - mountPath: /etc/frr + name: frr-conf + - mountPath: /etc/frr_metrics + name: metrics hostNetwork: true + initContainers: + - command: + - /bin/sh + - -c + - cp -rLf /tmp/frr/* /etc/frr/ + image: quay.io/frrouting/frr:9.1.0 + name: cp-frr-files + securityContext: + runAsGroup: 101 + runAsUser: 100 + volumeMounts: + - mountPath: /tmp/frr + name: frr-startup + - mountPath: /etc/frr + name: frr-conf + - command: + - /cp-tool + - /frr-reloader.sh + - /etc/frr_reloader/frr-reloader.sh + image: quay.io/metallb/speaker:v0.14.7 + name: cp-reloader + volumeMounts: + - mountPath: /etc/frr_reloader + name: reloader + - command: + - /cp-tool + - /frr-metrics + - /etc/frr_metrics/frr-metrics + image: quay.io/metallb/speaker:v0.14.7 + name: cp-metrics + volumeMounts: + - mountPath: /etc/frr_metrics + name: metrics nodeSelector: kubernetes.io/os: linux serviceAccountName: metallb-speaker + shareProcessNamespace: true terminationGracePeriodSeconds: 0 tolerations: - effect: NoSchedule @@ -102,5 +329,20 @@ spec: secret: defaultMode: 420 secretName: metallb-memberlist + - configMap: + defaultMode: 256 + name: metallb-excludel2 + name: metallb-excludel2 + - emptyDir: {} + name: frr-sockets + - configMap: + name: metallb-frr-startup + name: frr-startup + - emptyDir: {} + name: frr-conf + - emptyDir: {} + name: reloader + - emptyDir: {} + name: metrics updateStrategy: type: RollingUpdate diff --git a/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/webhooks.yaml b/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/webhooks.yaml index 9caf69c..23661b3 100644 --- a/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/webhooks.yaml +++ b/tests/golden/defaults/metallb/metallb/10_metallb_helmchart/metallb/templates/webhooks.yaml @@ -5,9 +5,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 - name: webhook-server-cert + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 + name: metallb-webhook-cert + namespace: syn-metallb --- apiVersion: v1 kind: Service @@ -16,9 +17,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-webhook-service + namespace: syn-metallb spec: ports: - port: 443 @@ -35,30 +37,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-webhook-configuration webhooks: - - admissionReviewVersions: - - v1 - clientConfig: - service: - name: metallb-webhook-service - namespace: syn-metallb - path: /validate-metallb-io-v1beta1-addresspool - failurePolicy: Fail - name: addresspoolvalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta1 - operations: - - CREATE - - UPDATE - resources: - - addresspools - sideEffects: None - admissionReviewVersions: - v1 clientConfig: diff --git a/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/charts/crds/templates/crds.yaml b/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/charts/crds/templates/crds.yaml index 8c3698d..4949488 100644 --- a/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/charts/crds/templates/crds.yaml +++ b/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/charts/crds/templates/crds.yaml @@ -2,223 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null - name: addresspools.metallb.io -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlGWlRDQ0EwMmdBd0lCQWdJVU5GRW1XcTM3MVpKdGkrMmlSQzk1WmpBV1MxZ3dEUVlKS29aSWh2Y05BUUVMDQpCUUF3UWpFTE1Ba0dBMVVFQmhNQ1dGZ3hGVEFUQmdOVkJBY01ERVJsWm1GMWJIUWdRMmwwZVRFY01Cb0dBMVVFDQpDZ3dUUkdWbVlYVnNkQ0JEYjIxd1lXNTVJRXgwWkRBZUZ3MHlNakEzTVRrd09UTXlNek5hRncweU1qQTRNVGd3DQpPVE15TXpOYU1FSXhDekFKQmdOVkJBWVRBbGhZTVJVd0V3WURWUVFIREF4RVpXWmhkV3gwSUVOcGRIa3hIREFhDQpCZ05WQkFvTUUwUmxabUYxYkhRZ1EyOXRjR0Z1ZVNCTWRHUXdnZ0lpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElDDQpEd0F3Z2dJS0FvSUNBUUNxVFpxMWZRcC9vYkdlenhES0o3OVB3Ny94azJwellualNzMlkzb1ZYSm5sRmM4YjVlDQpma2ZZQnY2bndscW1keW5PL2phWFBaQmRQSS82aFdOUDBkdVhadEtWU0NCUUpyZzEyOGNXb3F0MGNTN3pLb1VpDQpvcU1tQ0QvRXVBeFFNZjhRZDF2c1gvVllkZ0poVTZBRXJLZEpIaXpFOUJtUkNkTDBGMW1OVW55Rk82UnRtWFZUDQpidkxsTDVYeTc2R0FaQVBLOFB4aVlDa0NtbDdxN0VnTWNiOXlLWldCYmlxQ3VkTXE5TGJLNmdKNzF6YkZnSXV4DQo1L1pXK2JraTB2RlplWk9ZODUxb1psckFUNzJvMDI4NHNTWW9uN0pHZVZkY3NoUnh5R1VpSFpSTzdkaXZVTDVTDQpmM2JmSDFYbWY1ZDQzT0NWTWRuUUV2NWVaOG8zeWVLa3ZrbkZQUGVJMU9BbjdGbDlFRVNNR2dhOGFaSG1URSttDQpsLzlMSmdDYjBnQmtPT0M0WnV4bWh2aERKV1EzWnJCS3pMQlNUZXN0NWlLNVlwcXRWVVk2THRyRW9FelVTK1lsDQpwWndXY2VQWHlHeHM5ZURsR3lNVmQraW15Y3NTU1UvVno2Mmx6MnZCS21NTXBkYldDQWhud0RsRTVqU2dyMjRRDQp0eGNXLys2N3d5KzhuQlI3UXdqVTFITndVRjBzeERWdEwrZ1NHVERnSEVZSlhZelYvT05zMy94TkpoVFNPSkxNDQpoeXNVdyttaGdackdhbUdXcHVIVU1DUitvTWJzMTc1UkcrQjJnUFFHVytPTjJnUTRyOXN2b0ZBNHBBQm8xd1dLDQpRYjRhY3pmeVVscElBOVFoSmFsZEY3S3dPSHVlV3gwRUNrNXg0T2tvVDBvWVp0dzFiR0JjRGtaSmF3SURBUUFCDQpvMU13VVRBZEJnTlZIUTRFRmdRVW90UlNIUm9IWTEyRFZ4R0NCdEhpb1g2ZmVFQXdId1lEVlIwakJCZ3dGb0FVDQpvdFJTSFJvSFkxMkRWeEdDQnRIaW9YNmZlRUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFOQmdrcWhraUc5dzBCDQpBUXNGQUFPQ0FnRUFSbkpsWWRjMTFHd0VxWnh6RDF2R3BDR2pDN2VWTlQ3aVY1d3IybXlybHdPYi9aUWFEa0xYDQpvVStaOVVXT1VlSXJTdzUydDdmQUpvVVAwSm5iYkMveVIrU1lqUGhvUXNiVHduOTc2ZldBWTduM3FMOXhCd1Y0DQphek41OXNjeUp0dlhMeUtOL2N5ak1ReDRLajBIMFg0bWJ6bzVZNUtzWWtYVU0vOEFPdWZMcEd0S1NGVGgrSEFDDQpab1Q5YnZHS25adnNHd0tYZFF0Wnh0akhaUjVqK3U3ZGtQOTJBT051RFNabS8rWVV4b2tBK09JbzdSR3BwSHNXDQo1ZTdNY0FTVXRtb1FORXd6dVFoVkJaRWQ1OGtKYjUrV0VWbGNzanlXNnRTbzErZ25tTWNqR1BsMWgxR2hVbjV4DQpFY0lWRnBIWXM5YWo1NmpBSjk1MVQvZjhMaWxmTlVnanBLQ0c1bnl0SUt3emxhOHNtdGlPdm1UNEpYbXBwSkI2DQo4bmdHRVluVjUrUTYwWFJ2OEhSSGp1VG9CRHVhaERrVDA2R1JGODU1d09FR2V4bkZpMXZYWUxLVllWb1V2MXRKDQo4dVdUR1pwNllDSVJldlBqbzg5ZytWTlJSaVFYUThJd0dybXE5c0RoVTlqTjA0SjdVL1RvRDFpNHE3VnlsRUc5DQorV1VGNkNLaEdBeTJIaEhwVncyTGFoOS9lUzdZMUZ1YURrWmhPZG1laG1BOCtqdHNZamJadnR5Mm1SWlF0UUZzDQpUU1VUUjREbUR2bVVPRVRmeStpRHdzK2RkWXVNTnJGeVVYV2dkMnpBQU4ydVl1UHFGY2pRcFNPODFzVTJTU3R3DQoxVzAyeUtYOGJEYmZFdjBzbUh3UzliQnFlSGo5NEM1Mjg0YXpsdTBmaUdpTm1OUEM4ckJLRmhBPQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ== - service: - name: metallb-webhook-service - namespace: syn-metallb - path: /convert - conversionReviewVersions: - - v1alpha1 - - v1beta1 - group: metallb.io - names: - kind: AddressPool - listKind: AddressPoolList - plural: addresspools - singular: addresspool - scope: Namespaced - versions: - - deprecated: true - deprecationWarning: metallb.io v1alpha1 AddressPool is deprecated - name: v1alpha1 - schema: - openAPIV3Schema: - description: AddressPool is the Schema for the addresspools 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: AddressPoolSpec defines the desired state of AddressPool. - 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 - bgpAdvertisements: - description: When an IP is allocated from this pool, how should - it be translated into BGP announcements? - items: - properties: - aggregationLength: - default: 32 - description: "The aggregation-length advertisement option\ - \ lets you \u201Croll up\u201D the /32s into a larger prefix." - format: int32 - minimum: 1 - type: integer - aggregationLengthV6: - default: 128 - description: Optional, defaults to 128 (i.e. no aggregation) - if not specified. - format: int32 - type: integer - communities: - description: BGP communities - items: - type: string - type: array - localPref: - description: 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 - type: object - type: array - protocol: - description: Protocol can be used to select how the announcement - is done. - enum: - - layer2 - - bgp - type: string - required: - - addresses - - protocol - type: object - status: - description: AddressPoolStatus defines the observed state of AddressPool. - type: object - required: - - spec - type: object - served: true - storage: false - subresources: - status: {} - - deprecated: true - deprecationWarning: metallb.io v1beta1 AddressPool is deprecated, consider using - IPAddressPool - name: v1beta1 - schema: - openAPIV3Schema: - description: AddressPool represents a pool of IP addresses that can be allocated - to LoadBalancer services. AddressPool is deprecated and being replaced - by IPAddressPool. - 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: AddressPoolSpec defines the desired state of AddressPool. - 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 - bgpAdvertisements: - description: Drives how an IP allocated from this pool should translated - into BGP announcements. - items: - properties: - aggregationLength: - default: 32 - description: "The aggregation-length advertisement option\ - \ lets you \u201Croll up\u201D the /32s into a larger prefix." - format: int32 - minimum: 1 - type: integer - aggregationLengthV6: - default: 128 - description: Optional, defaults to 128 (i.e. no aggregation) - if not specified. - format: int32 - type: integer - communities: - description: BGP communities to be associated with the given - advertisement. - items: - type: string - type: array - localPref: - description: 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 - type: object - type: array - protocol: - description: Protocol can be used to select how the announcement - is done. - enum: - - layer2 - - bgp - type: string - required: - - addresses - - protocol - type: object - status: - description: AddressPoolStatus defines the observed state of AddressPool. - type: object - required: - - spec - type: object - served: true - storage: true - subresources: - status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: bfdprofiles.metallb.io spec: group: metallb.io @@ -229,22 +13,40 @@ spec: singular: bfdprofile scope: Namespaced versions: - - name: v1beta1 + - 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. + 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' + 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' + 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 @@ -252,48 +54,57 @@ 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. + 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 + 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. + 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.' + 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 + 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.' + 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. + 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 + 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 @@ -307,19 +118,12 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: bgpadvertisements.metallb.io spec: group: metallb.io @@ -330,22 +134,42 @@ spec: singular: bgpadvertisement scope: Namespaced versions: - - name: v1beta1 + - 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. + 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' + 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' + 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 @@ -368,63 +192,66 @@ spec: format: int32 type: integer communities: - description: The BGP communities to be associated with the announcement. - Each item can be a community of the form 1234:1234 or the name - of an alias defined in the Community CRD. + 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. + 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. + 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. + 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. + 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. + 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. + 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, @@ -433,9 +260,9 @@ spec: 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. + 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: @@ -443,57 +270,59 @@ spec: 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. + 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. + 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. + 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. + 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. + 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. + 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 @@ -506,19 +335,12 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: bgppeers.metallb.io spec: conversion: @@ -541,21 +363,38 @@ spec: singular: bgppeer scope: Namespaced versions: - - name: v1beta1 + - 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: 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' + 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' + 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 @@ -580,8 +419,9 @@ spec: minimum: 0 type: integer nodeSelectors: - description: Only connect to this peer on nodes that match one of - these selectors. + description: |- + Only connect to this peer on nodes that match one of these + selectors. items: properties: matchExpressions: @@ -645,21 +485,38 @@ spec: storage: false subresources: status: {} - - name: v1beta2 + - 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' + 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' + 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 @@ -671,10 +528,35 @@ spec: 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. + type: boolean ebgpMultiHop: description: To set if the BGPPeer is multi-hops away. Needed for FRR mode 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 mode 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 @@ -688,75 +570,80 @@ spec: minimum: 0 type: integer nodeSelectors: - description: Only connect to this peer on nodes that match one of - these selectors. + 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. + 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. + 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. + 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. + 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. + 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". + 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 + description: name is unique within a namespace to reference a secret resource. type: string namespace: - description: Namespace defines the space within which the secret + 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. format: int32 @@ -779,8 +666,9 @@ spec: 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 + description: |- + To set if we want to peer with the BGPPeer using an interface belonging to + a host vrf type: string required: - myASN @@ -795,19 +683,77 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.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: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 name: ipaddresspools.metallb.io spec: group: metallb.io @@ -818,22 +764,37 @@ spec: singular: ipaddresspool scope: Namespaced versions: - - name: v1beta1 + - 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. + 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' + 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' + 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 @@ -841,49 +802,52 @@ 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. + 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. + 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. + 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. + 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. + 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. + 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 + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. properties: key: @@ -891,35 +855,36 @@ spec: 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. + 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. + 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. + 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 @@ -932,20 +897,21 @@ spec: 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. + 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. + 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 + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. properties: key: @@ -953,35 +919,36 @@ spec: 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. + 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. + 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. + 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: @@ -997,19 +964,12 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: l2advertisements.metallb.io spec: group: metallb.io @@ -1020,22 +980,41 @@ spec: singular: l2advertisement scope: Namespaced versions: - - name: v1beta1 + - 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 + 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' + 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' + 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 @@ -1043,63 +1022,65 @@ 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. + 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. + 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. + 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. + 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. + 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. + 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. + 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, @@ -1112,52 +1093,54 @@ spec: 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. + 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. + 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. + 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. + 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. + 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: @@ -1168,75 +1151,94 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 - creationTimestamp: null - name: communities.metallb.io + controller-gen.kubebuilder.io/version: v0.14.0 + name: servicel2statuses.metallb.io spec: group: metallb.io names: - kind: Community - listKind: CommunityList - plural: communities - singular: community + kind: ServiceL2Status + listKind: ServiceL2StatusList + plural: servicel2statuses + singular: servicel2status scope: Namespaced versions: - - name: v1beta1 + - 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: Community is a collection of aliases for communities. Users - can define named aliases to be used in the BGPPeer CRD. + 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' + 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' + 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. + description: ServiceL2StatusSpec defines the desired state of ServiceL2Status. + type: object + status: + description: MetalLBServiceL2Status defines the observed state of ServiceL2Status. properties: - communities: + interfaces: + description: Interfaces indicates the interfaces that receive the + directed traffic items: + description: InterfaceInfo defines interface info of layer2 announcement. properties: name: - description: The name of the alias for the community. - type: string - value: - description: The BGP community value corresponding to the - given name. + description: Name the name of network interface card type: string type: object type: array - type: object - status: - description: CommunityStatus defines the observed state of Community. + 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: {} -status: - acceptedNames: - kind: '' - plural: '' - conditions: [] - storedVersions: [] diff --git a/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/controller.yaml b/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/controller.yaml index 1391e13..c2cb3da 100644 --- a/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/controller.yaml +++ b/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/controller.yaml @@ -6,9 +6,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-controller + namespace: syn-metallb spec: selector: matchLabels: @@ -28,13 +29,15 @@ spec: - args: - --port=7472 - --log-level=info - - --cert-service-name=metallb-webhook-service + - --tls-min-version=VersionTLS12 env: - name: METALLB_ML_SECRET_NAME value: metallb-memberlist - name: METALLB_DEPLOYMENT value: metallb-controller - image: quay.io/metallb/controller:v0.13.9 + - name: METALLB_BGP_TYPE + value: frr + image: quay.io/metallb/controller:v0.14.7 livenessProbe: failureThreshold: 3 httpGet: @@ -82,4 +85,4 @@ spec: - name: cert secret: defaultMode: 420 - secretName: webhook-server-cert + secretName: metallb-webhook-cert diff --git a/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/exclude-l2-config.yaml b/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/exclude-l2-config.yaml new file mode 100644 index 0000000..56aa96d --- /dev/null +++ b/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/exclude-l2-config.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +data: + excludel2.yaml: | + announcedInterfacesToExclude: + - ^docker.* + - ^cbr.* + - ^dummy.* + - ^virbr.* + - ^lxcbr.* + - ^veth.* + - ^lo$ + - ^cali.* + - ^tunl.* + - ^flannel.* + - ^kube-ipvs.* + - ^cni.* + - ^nodelocaldns.* +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/instance: metallb + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: metallb + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 + name: metallb-excludel2 + namespace: syn-metallb diff --git a/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/rbac.yaml b/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/rbac.yaml index cc119b1..200d709 100644 --- a/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/rbac.yaml +++ b/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/rbac.yaml @@ -5,8 +5,8 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb:controller rules: - apiGroups: @@ -18,6 +18,12 @@ rules: - get - list - watch + - apiGroups: + - '' + resources: + - nodes + verbs: + - list - apiGroups: - '' resources: @@ -57,7 +63,6 @@ rules: - apiGroups: - apiextensions.k8s.io resourceNames: - - addresspools.metallb.io - bfdprofiles.metallb.io - bgpadvertisements.metallb.io - bgppeers.metallb.io @@ -89,8 +94,8 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb:speaker rules: - apiGroups: @@ -119,6 +124,13 @@ rules: verbs: - create - patch + - apiGroups: + - metallb.io + resources: + - servicel2statuses + - servicel2statuses/status + verbs: + - '*' --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -127,8 +139,8 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb:controller roleRef: apiGroup: rbac.authorization.k8s.io @@ -146,8 +158,8 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb:speaker roleRef: apiGroup: rbac.authorization.k8s.io @@ -165,9 +177,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-pod-lister + namespace: syn-metallb rules: - apiGroups: - '' @@ -175,6 +188,7 @@ rules: - pods verbs: - list + - get - apiGroups: - '' resources: @@ -184,9 +198,9 @@ rules: - list - watch - apiGroups: - - metallb.io + - '' resources: - - addresspools + - configmaps verbs: - get - list @@ -247,9 +261,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-controller + namespace: syn-metallb rules: - apiGroups: - '' @@ -288,14 +303,6 @@ rules: - patch - update - watch - - apiGroups: - - metallb.io - resources: - - addresspools - verbs: - - get - - list - - watch - apiGroups: - metallb.io resources: @@ -349,9 +356,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-pod-lister + namespace: syn-metallb roleRef: apiGroup: rbac.authorization.k8s.io kind: Role @@ -367,9 +375,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-controller + namespace: syn-metallb roleRef: apiGroup: rbac.authorization.k8s.io kind: Role diff --git a/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/service-accounts.yaml b/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/service-accounts.yaml index fc4d8c3..62556a2 100644 --- a/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/service-accounts.yaml +++ b/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/service-accounts.yaml @@ -6,9 +6,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-controller + namespace: syn-metallb --- apiVersion: v1 kind: ServiceAccount @@ -18,6 +19,7 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-speaker + namespace: syn-metallb diff --git a/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/speaker.yaml b/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/speaker.yaml index bb77aed..79f9a3e 100644 --- a/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/speaker.yaml +++ b/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/speaker.yaml @@ -1,3 +1,108 @@ +apiVersion: v1 +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 -s 90000000" + bgpd_options=" -A 127.0.0.1 -p 0" + 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" + bfdd_options=" -A 127.0.0.1" + 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. + 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 file /etc/frr/frr.log informational + vtysh.conf: | + service integrated-vtysh-config +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: speaker + app.kubernetes.io/instance: metallb + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: metallb + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 + name: metallb-frr-startup + namespace: syn-metallb +--- apiVersion: apps/v1 kind: DaemonSet metadata: @@ -6,9 +111,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-speaker + namespace: syn-metallb spec: selector: matchLabels: @@ -45,7 +151,17 @@ spec: value: '7946' - name: METALLB_ML_SECRET_KEY_PATH value: /etc/ml_secret_key - image: quay.io/metallb/speaker:v0.13.9 + - name: FRR_CONFIG_FILE + value: /etc/frr_reloader/frr.conf + - name: FRR_RELOADER_PID_FILE + value: /etc/frr_reloader/reloader.pid + - name: METALLB_BGP_TYPE + value: frr + - name: METALLB_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + image: quay.io/metallb/speaker:v0.14.7 livenessProbe: failureThreshold: 3 httpGet: @@ -85,10 +201,121 @@ spec: volumeMounts: - mountPath: /etc/ml_secret_key name: memberlist + - mountPath: /etc/frr_reloader + name: reloader + - mountPath: /etc/metallb + name: metallb-excludel2 + - command: + - /bin/sh + - -c + - | + /sbin/tini -- /usr/lib/frr/docker-start & + attempts=0 + until [[ -f /etc/frr/frr.log || $attempts -eq 60 ]]; do + sleep 1 + attempts=$(( $attempts + 1 )) + done + tail -f /etc/frr/frr.log + env: + - name: TINI_SUBREAPER + value: 'true' + image: quay.io/frrouting/frr:9.1.0 + livenessProbe: + failureThreshold: 3 + httpGet: + path: livez + port: 7473 + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + name: frr + securityContext: + capabilities: + add: + - NET_ADMIN + - NET_RAW + - SYS_ADMIN + - NET_BIND_SERVICE + startupProbe: + failureThreshold: 30 + httpGet: + path: /livez + port: 7473 + periodSeconds: 5 + volumeMounts: + - mountPath: /var/run/frr + name: frr-sockets + - mountPath: /etc/frr + name: frr-conf + - command: + - /etc/frr_reloader/frr-reloader.sh + image: quay.io/frrouting/frr:9.1.0 + name: reloader + volumeMounts: + - mountPath: /var/run/frr + name: frr-sockets + - mountPath: /etc/frr + name: frr-conf + - mountPath: /etc/frr_reloader + name: reloader + - args: + - --metrics-port=7473 + command: + - /etc/frr_metrics/frr-metrics + env: + - name: VTYSH_HISTFILE + value: /dev/null + image: quay.io/frrouting/frr:9.1.0 + name: frr-metrics + ports: + - containerPort: 7473 + name: monitoring + volumeMounts: + - mountPath: /var/run/frr + name: frr-sockets + - mountPath: /etc/frr + name: frr-conf + - mountPath: /etc/frr_metrics + name: metrics hostNetwork: true + initContainers: + - command: + - /bin/sh + - -c + - cp -rLf /tmp/frr/* /etc/frr/ + image: quay.io/frrouting/frr:9.1.0 + name: cp-frr-files + securityContext: + runAsGroup: 101 + runAsUser: 100 + volumeMounts: + - mountPath: /tmp/frr + name: frr-startup + - mountPath: /etc/frr + name: frr-conf + - command: + - /cp-tool + - /frr-reloader.sh + - /etc/frr_reloader/frr-reloader.sh + image: quay.io/metallb/speaker:v0.14.7 + name: cp-reloader + volumeMounts: + - mountPath: /etc/frr_reloader + name: reloader + - command: + - /cp-tool + - /frr-metrics + - /etc/frr_metrics/frr-metrics + image: quay.io/metallb/speaker:v0.14.7 + name: cp-metrics + volumeMounts: + - mountPath: /etc/frr_metrics + name: metrics nodeSelector: kubernetes.io/os: linux serviceAccountName: metallb-speaker + shareProcessNamespace: true terminationGracePeriodSeconds: 0 tolerations: - effect: NoSchedule @@ -102,5 +329,20 @@ spec: secret: defaultMode: 420 secretName: metallb-memberlist + - configMap: + defaultMode: 256 + name: metallb-excludel2 + name: metallb-excludel2 + - emptyDir: {} + name: frr-sockets + - configMap: + name: metallb-frr-startup + name: frr-startup + - emptyDir: {} + name: frr-conf + - emptyDir: {} + name: reloader + - emptyDir: {} + name: metrics updateStrategy: type: RollingUpdate diff --git a/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/webhooks.yaml b/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/webhooks.yaml index 9caf69c..23661b3 100644 --- a/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/webhooks.yaml +++ b/tests/golden/legacy/metallb/metallb/10_metallb_helmchart/metallb/templates/webhooks.yaml @@ -5,9 +5,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 - name: webhook-server-cert + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 + name: metallb-webhook-cert + namespace: syn-metallb --- apiVersion: v1 kind: Service @@ -16,9 +17,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-webhook-service + namespace: syn-metallb spec: ports: - port: 443 @@ -35,30 +37,10 @@ metadata: app.kubernetes.io/instance: metallb app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: metallb - app.kubernetes.io/version: v0.13.9 - helm.sh/chart: metallb-0.13.9 + app.kubernetes.io/version: v0.14.7 + helm.sh/chart: metallb-0.14.7 name: metallb-webhook-configuration webhooks: - - admissionReviewVersions: - - v1 - clientConfig: - service: - name: metallb-webhook-service - namespace: syn-metallb - path: /validate-metallb-io-v1beta1-addresspool - failurePolicy: Fail - name: addresspoolvalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta1 - operations: - - CREATE - - UPDATE - resources: - - addresspools - sideEffects: None - admissionReviewVersions: - v1 clientConfig: