/* * Copyright (c) Citrix Systems, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1) Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2) Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Linq; using Newtonsoft.Json; namespace XenAPI { /// /// Cluster member metadata /// public partial class Cluster_host : XenObject { #region Constructors public Cluster_host() { } public Cluster_host(string uuid, XenRef cluster, XenRef host, bool enabled, XenRef PIF, bool joined, List allowed_operations, Dictionary current_operations, Dictionary other_config) { this.uuid = uuid; this.cluster = cluster; this.host = host; this.enabled = enabled; this.PIF = PIF; this.joined = joined; this.allowed_operations = allowed_operations; this.current_operations = current_operations; this.other_config = other_config; } /// /// Creates a new Cluster_host from a Hashtable. /// Note that the fields not contained in the Hashtable /// will be created with their default values. /// /// public Cluster_host(Hashtable table) : this() { UpdateFrom(table); } /// /// Creates a new Cluster_host from a Proxy_Cluster_host. /// /// public Cluster_host(Proxy_Cluster_host proxy) { UpdateFrom(proxy); } #endregion /// /// Updates each field of this instance with the value of /// the corresponding field of a given Cluster_host. /// public override void UpdateFrom(Cluster_host record) { uuid = record.uuid; cluster = record.cluster; host = record.host; enabled = record.enabled; PIF = record.PIF; joined = record.joined; allowed_operations = record.allowed_operations; current_operations = record.current_operations; other_config = record.other_config; } internal void UpdateFrom(Proxy_Cluster_host proxy) { uuid = proxy.uuid == null ? null : proxy.uuid; cluster = proxy.cluster == null ? null : XenRef.Create(proxy.cluster); host = proxy.host == null ? null : XenRef.Create(proxy.host); enabled = (bool)proxy.enabled; PIF = proxy.PIF == null ? null : XenRef.Create(proxy.PIF); joined = (bool)proxy.joined; allowed_operations = proxy.allowed_operations == null ? null : Helper.StringArrayToEnumList(proxy.allowed_operations); current_operations = proxy.current_operations == null ? null : Maps.convert_from_proxy_string_cluster_host_operation(proxy.current_operations); other_config = proxy.other_config == null ? null : Maps.convert_from_proxy_string_string(proxy.other_config); } /// /// Given a Hashtable with field-value pairs, it updates the fields of this Cluster_host /// with the values listed in the Hashtable. Note that only the fields contained /// in the Hashtable will be updated and the rest will remain the same. /// /// public void UpdateFrom(Hashtable table) { if (table.ContainsKey("uuid")) uuid = Marshalling.ParseString(table, "uuid"); if (table.ContainsKey("cluster")) cluster = Marshalling.ParseRef(table, "cluster"); if (table.ContainsKey("host")) host = Marshalling.ParseRef(table, "host"); if (table.ContainsKey("enabled")) enabled = Marshalling.ParseBool(table, "enabled"); if (table.ContainsKey("PIF")) PIF = Marshalling.ParseRef(table, "PIF"); if (table.ContainsKey("joined")) joined = Marshalling.ParseBool(table, "joined"); if (table.ContainsKey("allowed_operations")) allowed_operations = Helper.StringArrayToEnumList(Marshalling.ParseStringArray(table, "allowed_operations")); if (table.ContainsKey("current_operations")) current_operations = Maps.convert_from_proxy_string_cluster_host_operation(Marshalling.ParseHashTable(table, "current_operations")); if (table.ContainsKey("other_config")) other_config = Maps.convert_from_proxy_string_string(Marshalling.ParseHashTable(table, "other_config")); } public Proxy_Cluster_host ToProxy() { Proxy_Cluster_host result_ = new Proxy_Cluster_host(); result_.uuid = uuid ?? ""; result_.cluster = cluster ?? ""; result_.host = host ?? ""; result_.enabled = enabled; result_.PIF = PIF ?? ""; result_.joined = joined; result_.allowed_operations = allowed_operations == null ? new string[] {} : Helper.ObjectListToStringArray(allowed_operations); result_.current_operations = Maps.convert_to_proxy_string_cluster_host_operation(current_operations); result_.other_config = Maps.convert_to_proxy_string_string(other_config); return result_; } public bool DeepEquals(Cluster_host other, bool ignoreCurrentOperations) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; if (!ignoreCurrentOperations && !Helper.AreEqual2(this.current_operations, other.current_operations)) return false; return Helper.AreEqual2(this._uuid, other._uuid) && Helper.AreEqual2(this._cluster, other._cluster) && Helper.AreEqual2(this._host, other._host) && Helper.AreEqual2(this._enabled, other._enabled) && Helper.AreEqual2(this._PIF, other._PIF) && Helper.AreEqual2(this._joined, other._joined) && Helper.AreEqual2(this._allowed_operations, other._allowed_operations) && Helper.AreEqual2(this._other_config, other._other_config); } public override string SaveChanges(Session session, string opaqueRef, Cluster_host server) { if (opaqueRef == null) { System.Diagnostics.Debug.Assert(false, "Cannot create instances of this type on the server"); return ""; } else { throw new InvalidOperationException("This type has no read/write properties"); } } /// /// Get a record containing the current state of the given Cluster_host. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static Cluster_host get_record(Session session, string _cluster_host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.cluster_host_get_record(session.opaque_ref, _cluster_host); else return new Cluster_host(session.XmlRpcProxy.cluster_host_get_record(session.opaque_ref, _cluster_host ?? "").parse()); } /// /// Get a reference to the Cluster_host instance with the specified UUID. /// Experimental. First published in XenServer 7.5. /// /// The session /// UUID of object to return public static XenRef get_by_uuid(Session session, string _uuid) { if (session.JsonRpcClient != null) return session.JsonRpcClient.cluster_host_get_by_uuid(session.opaque_ref, _uuid); else return XenRef.Create(session.XmlRpcProxy.cluster_host_get_by_uuid(session.opaque_ref, _uuid ?? "").parse()); } /// /// Get the uuid field of the given Cluster_host. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static string get_uuid(Session session, string _cluster_host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.cluster_host_get_uuid(session.opaque_ref, _cluster_host); else return session.XmlRpcProxy.cluster_host_get_uuid(session.opaque_ref, _cluster_host ?? "").parse(); } /// /// Get the cluster field of the given Cluster_host. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static XenRef get_cluster(Session session, string _cluster_host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.cluster_host_get_cluster(session.opaque_ref, _cluster_host); else return XenRef.Create(session.XmlRpcProxy.cluster_host_get_cluster(session.opaque_ref, _cluster_host ?? "").parse()); } /// /// Get the host field of the given Cluster_host. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static XenRef get_host(Session session, string _cluster_host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.cluster_host_get_host(session.opaque_ref, _cluster_host); else return XenRef.Create(session.XmlRpcProxy.cluster_host_get_host(session.opaque_ref, _cluster_host ?? "").parse()); } /// /// Get the enabled field of the given Cluster_host. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static bool get_enabled(Session session, string _cluster_host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.cluster_host_get_enabled(session.opaque_ref, _cluster_host); else return (bool)session.XmlRpcProxy.cluster_host_get_enabled(session.opaque_ref, _cluster_host ?? "").parse(); } /// /// Get the PIF field of the given Cluster_host. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static XenRef get_PIF(Session session, string _cluster_host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.cluster_host_get_pif(session.opaque_ref, _cluster_host); else return XenRef.Create(session.XmlRpcProxy.cluster_host_get_pif(session.opaque_ref, _cluster_host ?? "").parse()); } /// /// Get the joined field of the given Cluster_host. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static bool get_joined(Session session, string _cluster_host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.cluster_host_get_joined(session.opaque_ref, _cluster_host); else return (bool)session.XmlRpcProxy.cluster_host_get_joined(session.opaque_ref, _cluster_host ?? "").parse(); } /// /// Get the allowed_operations field of the given Cluster_host. /// /// The session /// The opaque_ref of the given cluster_host public static List get_allowed_operations(Session session, string _cluster_host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.cluster_host_get_allowed_operations(session.opaque_ref, _cluster_host); else return Helper.StringArrayToEnumList(session.XmlRpcProxy.cluster_host_get_allowed_operations(session.opaque_ref, _cluster_host ?? "").parse()); } /// /// Get the current_operations field of the given Cluster_host. /// /// The session /// The opaque_ref of the given cluster_host public static Dictionary get_current_operations(Session session, string _cluster_host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.cluster_host_get_current_operations(session.opaque_ref, _cluster_host); else return Maps.convert_from_proxy_string_cluster_host_operation(session.XmlRpcProxy.cluster_host_get_current_operations(session.opaque_ref, _cluster_host ?? "").parse()); } /// /// Get the other_config field of the given Cluster_host. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static Dictionary get_other_config(Session session, string _cluster_host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.cluster_host_get_other_config(session.opaque_ref, _cluster_host); else return Maps.convert_from_proxy_string_string(session.XmlRpcProxy.cluster_host_get_other_config(session.opaque_ref, _cluster_host ?? "").parse()); } /// /// Add a new host to an existing cluster. /// Experimental. First published in XenServer 7.5. /// /// The session /// Cluster to join /// new cluster member /// Network interface to use for communication public static XenRef create(Session session, string _cluster, string _host, string _pif) { if (session.JsonRpcClient != null) return session.JsonRpcClient.cluster_host_create(session.opaque_ref, _cluster, _host, _pif); else return XenRef.Create(session.XmlRpcProxy.cluster_host_create(session.opaque_ref, _cluster ?? "", _host ?? "", _pif ?? "").parse()); } /// /// Add a new host to an existing cluster. /// Experimental. First published in XenServer 7.5. /// /// The session /// Cluster to join /// new cluster member /// Network interface to use for communication public static XenRef async_create(Session session, string _cluster, string _host, string _pif) { if (session.JsonRpcClient != null) return session.JsonRpcClient.async_cluster_host_create(session.opaque_ref, _cluster, _host, _pif); else return XenRef.Create(session.XmlRpcProxy.async_cluster_host_create(session.opaque_ref, _cluster ?? "", _host ?? "", _pif ?? "").parse()); } /// /// Remove a host from an existing cluster. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static void destroy(Session session, string _cluster_host) { if (session.JsonRpcClient != null) session.JsonRpcClient.cluster_host_destroy(session.opaque_ref, _cluster_host); else session.XmlRpcProxy.cluster_host_destroy(session.opaque_ref, _cluster_host ?? "").parse(); } /// /// Remove a host from an existing cluster. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static XenRef async_destroy(Session session, string _cluster_host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.async_cluster_host_destroy(session.opaque_ref, _cluster_host); else return XenRef.Create(session.XmlRpcProxy.async_cluster_host_destroy(session.opaque_ref, _cluster_host ?? "").parse()); } /// /// Enable cluster membership for a disabled cluster host. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static void enable(Session session, string _cluster_host) { if (session.JsonRpcClient != null) session.JsonRpcClient.cluster_host_enable(session.opaque_ref, _cluster_host); else session.XmlRpcProxy.cluster_host_enable(session.opaque_ref, _cluster_host ?? "").parse(); } /// /// Enable cluster membership for a disabled cluster host. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static XenRef async_enable(Session session, string _cluster_host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.async_cluster_host_enable(session.opaque_ref, _cluster_host); else return XenRef.Create(session.XmlRpcProxy.async_cluster_host_enable(session.opaque_ref, _cluster_host ?? "").parse()); } /// /// Remove a host from an existing cluster forcefully. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static void force_destroy(Session session, string _cluster_host) { if (session.JsonRpcClient != null) session.JsonRpcClient.cluster_host_force_destroy(session.opaque_ref, _cluster_host); else session.XmlRpcProxy.cluster_host_force_destroy(session.opaque_ref, _cluster_host ?? "").parse(); } /// /// Remove a host from an existing cluster forcefully. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static XenRef async_force_destroy(Session session, string _cluster_host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.async_cluster_host_force_destroy(session.opaque_ref, _cluster_host); else return XenRef.Create(session.XmlRpcProxy.async_cluster_host_force_destroy(session.opaque_ref, _cluster_host ?? "").parse()); } /// /// Disable cluster membership for an enabled cluster host. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static void disable(Session session, string _cluster_host) { if (session.JsonRpcClient != null) session.JsonRpcClient.cluster_host_disable(session.opaque_ref, _cluster_host); else session.XmlRpcProxy.cluster_host_disable(session.opaque_ref, _cluster_host ?? "").parse(); } /// /// Disable cluster membership for an enabled cluster host. /// Experimental. First published in XenServer 7.5. /// /// The session /// The opaque_ref of the given cluster_host public static XenRef async_disable(Session session, string _cluster_host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.async_cluster_host_disable(session.opaque_ref, _cluster_host); else return XenRef.Create(session.XmlRpcProxy.async_cluster_host_disable(session.opaque_ref, _cluster_host ?? "").parse()); } /// /// Return a list of all the Cluster_hosts known to the system. /// Experimental. First published in XenServer 7.5. /// /// The session public static List> get_all(Session session) { if (session.JsonRpcClient != null) return session.JsonRpcClient.cluster_host_get_all(session.opaque_ref); else return XenRef.Create(session.XmlRpcProxy.cluster_host_get_all(session.opaque_ref).parse()); } /// /// Get all the Cluster_host Records at once, in a single XML RPC call /// /// The session public static Dictionary, Cluster_host> get_all_records(Session session) { if (session.JsonRpcClient != null) return session.JsonRpcClient.cluster_host_get_all_records(session.opaque_ref); else return XenRef.Create(session.XmlRpcProxy.cluster_host_get_all_records(session.opaque_ref).parse()); } /// /// Unique identifier/object reference /// Experimental. First published in XenServer 7.5. /// public virtual string uuid { get { return _uuid; } set { if (!Helper.AreEqual(value, _uuid)) { _uuid = value; NotifyPropertyChanged("uuid"); } } } private string _uuid = ""; /// /// Reference to the Cluster object /// Experimental. First published in XenServer 7.5. /// [JsonConverter(typeof(XenRefConverter))] public virtual XenRef cluster { get { return _cluster; } set { if (!Helper.AreEqual(value, _cluster)) { _cluster = value; NotifyPropertyChanged("cluster"); } } } private XenRef _cluster = new XenRef("OpaqueRef:NULL"); /// /// Reference to the Host object /// Experimental. First published in XenServer 7.5. /// [JsonConverter(typeof(XenRefConverter))] public virtual XenRef host { get { return _host; } set { if (!Helper.AreEqual(value, _host)) { _host = value; NotifyPropertyChanged("host"); } } } private XenRef _host = new XenRef("OpaqueRef:NULL"); /// /// Whether the cluster host believes that clustering should be enabled on this host /// Experimental. First published in XenServer 7.5. /// public virtual bool enabled { get { return _enabled; } set { if (!Helper.AreEqual(value, _enabled)) { _enabled = value; NotifyPropertyChanged("enabled"); } } } private bool _enabled = false; /// /// Reference to the PIF object /// Experimental. First published in XenServer 7.5. /// [JsonConverter(typeof(XenRefConverter))] public virtual XenRef PIF { get { return _PIF; } set { if (!Helper.AreEqual(value, _PIF)) { _PIF = value; NotifyPropertyChanged("PIF"); } } } private XenRef _PIF = new XenRef("OpaqueRef:NULL"); /// /// Whether the cluster host has joined the cluster /// Experimental. First published in XenServer 7.5. /// public virtual bool joined { get { return _joined; } set { if (!Helper.AreEqual(value, _joined)) { _joined = value; NotifyPropertyChanged("joined"); } } } private bool _joined = true; /// /// list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client. /// public virtual List allowed_operations { get { return _allowed_operations; } set { if (!Helper.AreEqual(value, _allowed_operations)) { _allowed_operations = value; NotifyPropertyChanged("allowed_operations"); } } } private List _allowed_operations = new List() {}; /// /// links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task. /// public virtual Dictionary current_operations { get { return _current_operations; } set { if (!Helper.AreEqual(value, _current_operations)) { _current_operations = value; NotifyPropertyChanged("current_operations"); } } } private Dictionary _current_operations = new Dictionary() {}; /// /// Additional configuration /// Experimental. First published in XenServer 7.5. /// [JsonConverter(typeof(StringStringMapConverter))] public virtual Dictionary other_config { get { return _other_config; } set { if (!Helper.AreEqual(value, _other_config)) { _other_config = value; NotifyPropertyChanged("other_config"); } } } private Dictionary _other_config = new Dictionary() {}; } }