Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions data/data/install.openshift.io_installconfigs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2678,6 +2678,70 @@ spec:
use for instances in this cluster. Deprecated: use FlavorName
in DefaultMachinePlatform to define default flavor.'
type: string
controlPlaneLoadBalancer:
description: controlPlaneLoadBalancer defines how traffic destined to the OpenShift API and Ingress is routed to the servers. When omitted, this means no opinion and the platform is left to choose a reasonable default. This default is subject to change over time. The current default configuration uses VRRP.
type: object
required:
- type
properties:
bgp:
description: BGP refers to the list of BGP speaker configurations. We require a speaker configuration for every subnet where we want to peer. The list must contain at least one item.
type: object
properties:
speakers:
description: speakers is a list of BGP speaker configurations. We require a speaker configuration for every control plane subnet. The list must contain at least one item.
type: array
minItems: 1
items:
description: BGPSpeaker defines how a BGP speaker will be configured. Each speaker will result into a BGP protocol process with the specified ASN, for a unique subnet. Each speaker has a list of peers, which will be configured as BGP neighbors.
type: object
required:
- asn
- peers
- subnetCIDR
properties:
asn:
description: asn specifies the local autonomous system number that will be used to peer with remote routers.
type: integer
format: int32
maximum: 4294967295
minimum: 0
peers:
description: peers is a list of the BGP peers that need to be configured for a the speaker for a specific subnet.
type: array
minItems: 1
items:
description: BGPPeer describes the configuration of a BGP peering neighbor.
type: object
required:
- asn
- ip
properties:
asn:
description: asn specifies the remote autonomous system number to peer with the remote router.
type: integer
format: int32
maximum: 4294967295
minimum: 0
ip:
description: ip is the IP address of the BGP neighbor and has to be reachable from the node. It may be either IPv4 or IPv6.
type: string
format: ip
password:
description: password to be used with the tcp socket that is being used to connect to the remote peer
type: string
subnetCIDR:
description: subnetCIDR is the CIDR which this BGP configuration applies to.
type: string
x-kubernetes-list-map-keys:
- subnetCIDR
x-kubernetes-list-type: map
type:
description: type defines the type of load balancer which will be configured for the control plane VIPs. Permitted values are `VRRP` and `BGP`. When omitted, this means no opinion and the platform is left to choose a reasonable default.
type: string
enum:
- VRRP
- BGP
defaultMachinePlatform:
description: DefaultMachinePlatform is the default configuration
used when installing on OpenStack for machine pools which do
Expand Down
10 changes: 6 additions & 4 deletions data/data/openstack/masters/private-network.tf
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ resource "openstack_networking_port_v2" "masters" {
}

resource "openstack_networking_port_v2" "api_port" {
count = var.openstack_control_plane_load_balancer_type == "BGP" ? 0 : 1
name = "${var.cluster_id}-api-port"
description = local.description

Expand All @@ -89,6 +90,7 @@ resource "openstack_networking_port_v2" "api_port" {
}

resource "openstack_networking_port_v2" "ingress_port" {
count = var.openstack_control_plane_load_balancer_type == "BGP" ? 0 : 1
name = "${var.cluster_id}-ingress-port"
description = local.description

Expand Down Expand Up @@ -134,15 +136,15 @@ resource "openstack_networking_trunk_v2" "masters" {
// as expected.

resource "openstack_networking_floatingip_associate_v2" "api_fip" {
count = length(var.openstack_api_floating_ip) == 0 ? 0 : 1
port_id = openstack_networking_port_v2.api_port.id
count = (var.openstack_control_plane_load_balancer_type == "BGP" || length(var.openstack_api_floating_ip) == 0) ? 0 : 1
port_id = openstack_networking_port_v2.api_port[0].id
floating_ip = var.openstack_api_floating_ip
depends_on = [openstack_networking_router_interface_v2.nodes_router_interface]
}

resource "openstack_networking_floatingip_associate_v2" "ingress_fip" {
count = length(var.openstack_ingress_floating_ip) == 0 ? 0 : 1
port_id = openstack_networking_port_v2.ingress_port.id
count = (var.openstack_control_plane_load_balancer_type == "BGP" || length(var.openstack_ingress_floating_ip) == 0) ? 0 : 1
port_id = openstack_networking_port_v2.ingress_port[0].id
floating_ip = var.openstack_ingress_floating_ip
depends_on = [openstack_networking_router_interface_v2.nodes_router_interface]
}
Expand Down
25 changes: 25 additions & 0 deletions data/data/openstack/masters/sg-master.tf
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,31 @@ resource "openstack_networking_secgroup_rule_v2" "master_ingress_ssh" {
description = local.description
}

# TODO(pprinett) Try and remove this rule; BGP advertising might be egress-only
resource "openstack_networking_secgroup_rule_v2" "master_ingress_bgp" {
count = length(var.machine_v4_cidrs)
direction = "ingress"
ethertype = "IPv4"
protocol = "tcp"
port_range_min = 179
port_range_max = 179
remote_ip_prefix = element(var.machine_v4_cidrs, count.index)
security_group_id = openstack_networking_secgroup_v2.master.id
description = local.description
}

resource "openstack_networking_secgroup_rule_v2" "master_ingress_bfd" {
count = length(var.machine_v4_cidrs)
direction = "ingress"
ethertype = "IPv4"
protocol = "udp"
port_range_min = 3784
port_range_max = 3785
remote_ip_prefix = element(var.machine_v4_cidrs, count.index)
security_group_id = openstack_networking_secgroup_v2.master.id
description = local.description
}

resource "openstack_networking_secgroup_rule_v2" "master_ingress_dns_tcp" {
count = length(var.machine_v4_cidrs)
direction = "ingress"
Expand Down
6 changes: 6 additions & 0 deletions data/data/openstack/variables-openstack.tf
Original file line number Diff line number Diff line change
Expand Up @@ -374,3 +374,9 @@ variable "openstack_worker_server_group_policy" {
type = string
description = "Policy of the server groups for the worker nodes."
}

variable "openstack_control_plane_load_balancer_type" {
type = string
default = ""
description = "The load balancer for the control plane VIPs."
}
5 changes: 2 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -261,9 +261,8 @@ replace k8s.io/client-go => k8s.io/client-go v0.25.0
// Needed so that the InstallConfig CRD can be created. Later versions of controller-gen balk at using IPNet as a field.
replace sigs.k8s.io/controller-tools => sigs.k8s.io/controller-tools v0.3.1-0.20200617211605-651903477185

// Override the OpenShift API version in hive

replace github.com/openshift/api => github.com/openshift/api v0.0.0-20221004120407-c46852673d03
// Use BGP config from https://github.com/openshift/api/pull/1321
replace github.com/openshift/api => github.com/shiftstack/api v0.0.0-20221214020534-aa181038a087

replace github.com/terraform-providers/terraform-provider-nutanix => github.com/nutanix/terraform-provider-nutanix v1.5.0

Expand Down
15 changes: 2 additions & 13 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -323,11 +323,6 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI=
github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/dave/dst v0.26.2/go.mod h1:UMDJuIRPfyUCC78eFuB+SV/WI8oDeyFDvM/JR6NI3IU=
github.com/dave/gopackages v0.0.0-20170318123100-46e7023ec56e/go.mod h1:i00+b/gKdIDIxuLDFob7ustLAVqhsZRk2qVZrArELGQ=
github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg=
github.com/dave/kerr v0.0.0-20170318121727-bc25dd6abe8e/go.mod h1:qZqlPyPvfsDJt+3wHJ1EvSXDuVjFTK0j2p/ca+gtsb8=
github.com/dave/rebecca v0.9.1/go.mod h1:N6XYdMD/OKw3lkF3ywh8Z6wPGuwNFDNtWYEMFWEmXBA=
github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
Expand Down Expand Up @@ -753,7 +748,6 @@ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXi
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
github.com/google/pprof v0.0.0-20181127221834-b4f47329b966/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
Expand Down Expand Up @@ -1142,8 +1136,6 @@ github.com/opencontainers/runc v1.0.0-rc90/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2r
github.com/opencontainers/runc v1.1.2 h1:2VSZwLx5k/BfsBxMMipG/LYUnmqOD/BPkIVgQUcTlLw=
github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/selinux v1.5.2/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g=
github.com/openshift/api v0.0.0-20221004120407-c46852673d03 h1:e8oBXPs3eCJWIeEVw29l+GLvxdo3BPhdpkUd/FzPjeg=
github.com/openshift/api v0.0.0-20221004120407-c46852673d03/go.mod h1:JRz+ZvTqu9u7t6suhhPTacbFl5K65Y6rJbNM7HjWA3g=
github.com/openshift/assisted-image-service v0.0.0-20220506122314-2f689a1084b8 h1:oZ3VAWiM8tPRBM+vYI4GBmlrqyoqizcgZ7pBy5EX2K8=
github.com/openshift/assisted-image-service v0.0.0-20220506122314-2f689a1084b8/go.mod h1:bH4+AsmPy8mQQvtgedBm2Crs93TDWeXEMlIPrlEMpjA=
github.com/openshift/assisted-service v0.0.0-20220928142635-a40422bdea61 h1:HtUYJBAdRgfVYide0bq3GsT/4n5uPWteA1rIZVXEL7k=
Expand All @@ -1160,7 +1152,6 @@ github.com/openshift/baremetal-operator/pkg/hardwareutils v0.0.0-20220128094204-
github.com/openshift/baremetal-operator/pkg/hardwareutils v0.0.0-20220128094204-28771f489634/go.mod h1:/PSTQInIZmfuOmAp/pSgZAs4txs6T49woC0MYIa4QzE=
github.com/openshift/build-machinery-go v0.0.0-20200211121458-5e3d6e570160/go.mod h1:1CkcsT3aVebzRBzVTSbiKSkJMsC/CASqxesfqEMfJEc=
github.com/openshift/build-machinery-go v0.0.0-20200819073603-48aa266c95f7/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE=
github.com/openshift/build-machinery-go v0.0.0-20220913142420-e25cf57ea46d/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE=
github.com/openshift/client-go v0.0.0-20200827190008-3062137373b5/go.mod h1:5rGmrkQ8DJEUXA+AR3rEjfH+HFyg4/apY9iCQFgvPfE=
github.com/openshift/client-go v0.0.0-20211209144617-7385dd6338e3 h1:SG1aqwleU6bGD0X4mhkTNupjVnByMYYuW4XbnCPavQU=
github.com/openshift/client-go v0.0.0-20211209144617-7385dd6338e3/go.mod h1:cwhyki5lqBmrT0m8Im+9I7PGFaraOzcYPtEz93RcsGY=
Expand Down Expand Up @@ -1307,6 +1298,8 @@ github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdk
github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
github.com/shiftstack/api v0.0.0-20221214020534-aa181038a087 h1:j0S7GgLHaSd2j4JnLjdHuA1wDjdWcpElA03gforTzW0=
github.com/shiftstack/api v0.0.0-20221214020534-aa181038a087/go.mod h1:OW9hi5XDXOQWm/kRqUww6RVxZSf0nqrS4heerSmHBC4=
github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY=
Expand Down Expand Up @@ -1558,7 +1551,6 @@ go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
go4.org v0.0.0-20200104003542-c7e774b10ea0/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
goji.io v2.0.2+incompatible/go.mod h1:sbqFwrtqZACxLBTQcdgVjFh54yGVCvwq8+w49MVMMIk=
golang.org/x/arch v0.0.0-20180920145803-b19384d3c130/go.mod h1:cYlCBUl1MsqxdiKgmc4uh7TxZfWSFLOGSRR090WDxt8=
golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw=
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd h1:XcWmESyNjXJMLahc3mqVQJcgSTDxFxhETVlfk9uGc38=
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
Expand Down Expand Up @@ -1728,7 +1720,6 @@ golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20171026204733-164713f0dfce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181021155630-eda9bb28ed51/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
Expand Down Expand Up @@ -1921,7 +1912,6 @@ golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjs
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
Expand Down Expand Up @@ -2201,7 +2191,6 @@ gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
Expand Down
3 changes: 3 additions & 0 deletions pkg/asset/manifests/infrastructure.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,9 @@ func (i *Infrastructure) Generate(dependencies asset.Parents) error {
config.Spec.PlatformSpec.Type = configv1.NonePlatformType
case openstack.Name:
config.Spec.PlatformSpec.Type = configv1.OpenStackPlatformType
config.Spec.PlatformSpec.OpenStack = &configv1.OpenStackPlatformSpec{
ControlPlaneLoadBalancer: installConfig.Config.OpenStack.ControlPlaneLoadBalancer,
}
config.Status.PlatformStatus.OpenStack = &configv1.OpenStackPlatformStatus{
APIServerInternalIP: installConfig.Config.OpenStack.APIVIPs[0],
IngressIP: installConfig.Config.OpenStack.IngressVIPs[0],
Expand Down
7 changes: 7 additions & 0 deletions pkg/tfvars/openstack/openstack.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,11 @@ func TFVars(
workermpool = installConfig.Config.Compute[0].Platform.OpenStack
}

controlPlaneLoadBalancerType := installConfig.Config.Platform.OpenStack.ControlPlaneLoadBalancer.ControlPlaneLoadBalancerType
if controlPlaneLoadBalancerType == "" {
controlPlaneLoadBalancerType = "VRRP"
}

var zones []string
{
seen := make(map[string]struct{})
Expand Down Expand Up @@ -210,6 +215,7 @@ func TFVars(
MachinesNetwork string `json:"openstack_machines_network_id,omitempty"`
MasterAvailabilityZones []string `json:"openstack_master_availability_zones,omitempty"`
MasterRootVolumeAvailabilityZones []string `json:"openstack_master_root_volume_availability_zones,omitempty"`
ControlPlaneLoadBalancerType string `json:"openstack_control_plane_load_balancer_type,omitempty"`
}{
BaseImageName: imageName,
ExternalNetwork: installConfig.Config.Platform.OpenStack.ExternalNetwork,
Expand All @@ -235,6 +241,7 @@ func TFVars(
MachinesNetwork: machinesNetwork,
MasterAvailabilityZones: zones,
MasterRootVolumeAvailabilityZones: masterRootVolumeAvailabilityZones,
ControlPlaneLoadBalancerType: controlPlaneLoadBalancerType,
}, "", " ")
}

Expand Down
5 changes: 5 additions & 0 deletions pkg/types/openstack/loadbalancer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package openstack

import apiconfig "github.com/openshift/api/config/v1"

type ControlPlaneLoadBalancer = apiconfig.ControlPlaneLoadBalancer
5 changes: 5 additions & 0 deletions pkg/types/openstack/platform.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,9 @@ type Platform struct {
// The subnet and network specified in MachinesSubnet will not be deleted or modified by the installer.
// +optional
MachinesSubnet string `json:"machinesSubnet,omitempty"`

// ControlPlaneLoadBalancer defines how traffic designed for the control plane should be load balanced.
//
// +optional
ControlPlaneLoadBalancer ControlPlaneLoadBalancer `json:"controlPlaneLoadBalancer,omitempty"`
}
Loading