Skip to content

CA-404512: Add feature flag to the new clustering interface #6217

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 13, 2025
Merged
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
2 changes: 2 additions & 0 deletions ocaml/xapi-types/features.ml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ type feature =
| USB_passthrough
| Network_sriov
| Corosync
| Cluster_address
| Zstd_export
| Pool_secret_rotation
| Certificate_verification
Expand Down Expand Up @@ -123,6 +124,7 @@ let keys_of_features =
; (USB_passthrough, ("restrict_usb_passthrough", Negative, "USB_passthrough"))
; (Network_sriov, ("restrict_network_sriov", Negative, "Network_sriov"))
; (Corosync, ("restrict_corosync", Negative, "Corosync"))
; (Cluster_address, ("restrict_cluster_address", Negative, "Cluster_address"))
; (Zstd_export, ("restrict_zstd_export", Negative, "Zstd_export"))
; ( Pool_secret_rotation
, ("restrict_pool_secret_rotation", Negative, "Pool_secret_rotation")
Expand Down
1 change: 1 addition & 0 deletions ocaml/xapi-types/features.mli
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ type feature =
| USB_passthrough (** Enable the use of USB passthrough. *)
| Network_sriov (** Enable the use of Network SRIOV. *)
| Corosync (** Enable the use of corosync. *)
| Cluster_address (** Enable the use of extended cluster address interface *)
| Zstd_export (** Enable the use of VM export with zstd compression. *)
| Pool_secret_rotation (** Enable Pool Secret Rotation *)
| Certificate_verification (** Used by XenCenter *)
Expand Down
9 changes: 2 additions & 7 deletions ocaml/xapi/xapi_cluster.ml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
*)

open Xapi_clustering
open Ipaddr_rpc_type

module D = Debug.Make (struct let name = "xapi_cluster" end)

Expand Down Expand Up @@ -65,12 +64,8 @@ let create ~__context ~pIF ~cluster_stack ~pool_auto_join ~token_timeout
let hostuuid = Inventory.lookup Inventory._installation_uuid in
let hostname = Db.Host.get_hostname ~__context ~self:host in
let member =
Extended
{
ip= Ipaddr.of_string_exn (ipstr_of_address ip_addr)
; hostuuid
; hostname
}
Xapi_cluster_host_helpers.get_cluster_host_address ~__context ~ip_addr
~hostuuid ~hostname
in
let token_timeout_ms = Int64.of_float (token_timeout *. 1000.0) in
let token_timeout_coefficient_ms =
Expand Down
8 changes: 8 additions & 0 deletions ocaml/xapi/xapi_cluster_helpers.ml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
* GNU Lesser General Public License for more details.
*)

module D = Debug.Make (struct let name = __MODULE__ end)

let finally = Xapi_stdext_pervasives.Pervasiveext.finally

let all_cluster_operations = [`add; `remove; `enable; `disable; `destroy]
Expand Down Expand Up @@ -104,6 +106,12 @@ let with_cluster_operation ~__context ~(self : [`Cluster] API.Ref.t) ~doc ~op
with _ -> ()
)

let cluster_address_enabled ~__context =
let r = Pool_features.is_enabled ~__context Features.Cluster_address in
D.debug "%s extended cluster address is %s" __FUNCTION__
(if r then "enabled" else "disabled") ;
r

let corosync3_enabled ~__context =
let pool = Helpers.get_pool ~__context in
let restrictions = Db.Pool.get_restrictions ~__context ~self:pool in
Expand Down
19 changes: 4 additions & 15 deletions ocaml/xapi/xapi_cluster_host.ml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
*)

open Xapi_clustering
open Ipaddr_rpc_type

module D = Debug.Make (struct let name = "xapi_cluster_host" end)

Expand Down Expand Up @@ -126,12 +125,8 @@ let join_internal ~__context ~self =
let host = Db.Cluster_host.get_host ~__context ~self in
let hostname = Db.Host.get_hostname ~__context ~self:host in
let member =
Extended
{
ip= Ipaddr.of_string_exn (ipstr_of_address ip_addr)
; hostuuid
; hostname
}
Xapi_cluster_host_helpers.get_cluster_host_address ~__context ~ip_addr
~hostuuid ~hostname
in
let ip_list =
List.filter_map
Expand Down Expand Up @@ -338,14 +333,8 @@ let enable ~__context ~self =
let hostuuid = Inventory.lookup Inventory._installation_uuid in
let hostname = Db.Host.get_hostname ~__context ~self:host in
let member =
Cluster_interface.(
Extended
{
ip= Ipaddr.of_string_exn (ipstr_of_address ip_addr)
; hostuuid
; hostname
}
)
Xapi_cluster_host_helpers.get_cluster_host_address ~__context ~ip_addr
~hostuuid ~hostname
in
let cluster_ref = Db.Cluster_host.get_cluster ~__context ~self in
let cluster_stack =
Expand Down
14 changes: 14 additions & 0 deletions ocaml/xapi/xapi_cluster_host_helpers.ml
Original file line number Diff line number Diff line change
Expand Up @@ -106,3 +106,17 @@ let with_cluster_host_operation ~__context ~(self : [`Cluster_host] API.Ref.t)
(Datamodel_common._cluster_host, Ref.string_of self)
with _ -> ()
)

let get_cluster_host_address ~__context ~ip_addr ~hostuuid ~hostname =
let open Ipaddr_rpc_type in
if Xapi_cluster_helpers.cluster_address_enabled ~__context then
Cluster_interface.(
Extended
{
ip= Ipaddr.of_string_exn (ipstr_of_address ip_addr)
; hostuuid
; hostname
}
)
else
Cluster_interface.(IPv4 (ipstr_of_address ip_addr))
Loading