diff --git a/internal/installcfg/builder/builder.go b/internal/installcfg/builder/builder.go index 2bbb180410bb..4539065e742e 100644 --- a/internal/installcfg/builder/builder.go +++ b/internal/installcfg/builder/builder.go @@ -112,6 +112,18 @@ func (i *installConfigBuilder) getBasicInstallConfig(cluster *common.Cluster) (* SSHKey: cluster.SSHPublicKey, } + if cfg.ControlPlane.Replicas == 2 { + cfg.Arbiter = struct { + Hyperthreading string `json:"hyperthreading,omitempty"` + Name string `json:"name"` + Replicas int `json:"replicas"` + }{ + Hyperthreading: i.getHypethreadingConfiguration(cluster, "master"), + Name: string(models.HostRoleArbiter), + Replicas: 1, + } + } + cfg.Networking.NetworkType = networkType for _, network := range cluster.ClusterNetworks { diff --git a/internal/installcfg/installcfg.go b/internal/installcfg/installcfg.go index 36396f5a598d..8ba75ba084b0 100644 --- a/internal/installcfg/installcfg.go +++ b/internal/installcfg/installcfg.go @@ -233,6 +233,11 @@ type InstallerConfigBaremetal struct { Name string `json:"name"` Replicas int `json:"replicas"` } `json:"controlPlane"` + Arbiter struct { + Hyperthreading string `json:"hyperthreading,omitempty"` + Name string `json:"name"` + Replicas int `json:"replicas"` + } `json:"arbiter"` Platform Platform `json:"platform"` BootstrapInPlace *BootstrapInPlace `json:"bootstrapInPlace,omitempty"` FIPS bool `json:"fips"` diff --git a/models/host_role.go b/models/host_role.go index fad00d87b089..8dd82807e6f2 100644 --- a/models/host_role.go +++ b/models/host_role.go @@ -41,6 +41,9 @@ const ( // HostRoleBootstrap captures enum value "bootstrap" HostRoleBootstrap HostRole = "bootstrap" + + // HostRoleArbiter captures enum value "arbiter" + HostRoleArbiter HostRole = "arbiter" ) // for schema @@ -48,7 +51,7 @@ var hostRoleEnum []interface{} func init() { var res []HostRole - if err := json.Unmarshal([]byte(`["auto-assign","master","worker","bootstrap"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["auto-assign","master","worker","bootstrap","arbiter"]`), &res); err != nil { panic(err) } for _, v := range res { diff --git a/swagger.yaml b/swagger.yaml index a15774c19f56..19e24e7f5406 100644 --- a/swagger.yaml +++ b/swagger.yaml @@ -6609,6 +6609,7 @@ definitions: - 'master' - 'worker' - 'bootstrap' + - 'arbiter' host-validation-id: type: string diff --git a/vendor/github.com/openshift/assisted-service/models/host_role.go b/vendor/github.com/openshift/assisted-service/models/host_role.go index fad00d87b089..8dd82807e6f2 100644 --- a/vendor/github.com/openshift/assisted-service/models/host_role.go +++ b/vendor/github.com/openshift/assisted-service/models/host_role.go @@ -41,6 +41,9 @@ const ( // HostRoleBootstrap captures enum value "bootstrap" HostRoleBootstrap HostRole = "bootstrap" + + // HostRoleArbiter captures enum value "arbiter" + HostRoleArbiter HostRole = "arbiter" ) // for schema @@ -48,7 +51,7 @@ var hostRoleEnum []interface{} func init() { var res []HostRole - if err := json.Unmarshal([]byte(`["auto-assign","master","worker","bootstrap"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["auto-assign","master","worker","bootstrap","arbiter"]`), &res); err != nil { panic(err) } for _, v := range res {