#
# Copyright (c) 2015-2016 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#


module OvirtSDK4
  
  # 
  # These forward declarations are required in order to avoid circular dependencies.
  # 
  class AffinityRule < Struct
  end
  
  class AgentConfiguration < Struct
  end
  
  class Api < Struct
  end
  
  class ApiSummary < Struct
  end
  
  class ApiSummaryItem < Struct
  end
  
  class Bios < Struct
  end
  
  class BlockStatistic < Struct
  end
  
  class Bonding < Struct
  end
  
  class Boot < Struct
  end
  
  class BootMenu < Struct
  end
  
  class CloudInit < Struct
  end
  
  class Configuration < Struct
  end
  
  class Console < Struct
  end
  
  class Core < Struct
  end
  
  class Cpu < Struct
  end
  
  class CpuTopology < Struct
  end
  
  class CpuTune < Struct
  end
  
  class CpuType < Struct
  end
  
  class CustomProperty < Struct
  end
  
  class Display < Struct
  end
  
  class Dns < Struct
  end
  
  class DnsResolverConfiguration < Struct
  end
  
  class DynamicCpu < Struct
  end
  
  class EngineBackupInfo < Struct
  end
  
  class EntityProfileDetail < Struct
  end
  
  class ErrorHandling < Struct
  end
  
  class ExternalTemplateImport < Struct
  end
  
  class ExternalVmImport < Struct
  end
  
  class Fault < Struct
  end
  
  class FencingPolicy < Struct
  end
  
  class FopStatistic < Struct
  end
  
  class GlusterBrickMemoryInfo < Struct
  end
  
  class GlusterClient < Struct
  end
  
  class GracePeriod < Struct
  end
  
  class GuestOperatingSystem < Struct
  end
  
  class HardwareInformation < Struct
  end
  
  class HighAvailability < Struct
  end
  
  class HostDevicePassthrough < Struct
  end
  
  class HostNicVirtualFunctionsConfiguration < Struct
  end
  
  class HostedEngine < Struct
  end
  
  class Identified < Struct
  end
  
  class Image < Identified
  end
  
  class ImageTransfer < Identified
  end
  
  class Initialization < Struct
  end
  
  class Io < Struct
  end
  
  class Ip < Struct
  end
  
  class IpAddressAssignment < Struct
  end
  
  class IscsiBond < Identified
  end
  
  class IscsiDetails < Struct
  end
  
  class Job < Identified
  end
  
  class KatelloErratum < Identified
  end
  
  class Kernel < Struct
  end
  
  class Ksm < Struct
  end
  
  class LinkLayerDiscoveryProtocolElement < Identified
  end
  
  class LogicalUnit < Struct
  end
  
  class MDevType < Struct
  end
  
  class Mac < Struct
  end
  
  class MacPool < Identified
  end
  
  class MemoryOverCommit < Struct
  end
  
  class MemoryPolicy < Struct
  end
  
  class Method < Struct
  end
  
  class MigrationBandwidth < Struct
  end
  
  class MigrationOptions < Struct
  end
  
  class MigrationPolicy < Identified
  end
  
  class Network < Identified
  end
  
  class NetworkAttachment < Identified
  end
  
  class NetworkConfiguration < Struct
  end
  
  class NetworkFilter < Identified
  end
  
  class NetworkFilterParameter < Identified
  end
  
  class NetworkLabel < Identified
  end
  
  class NfsProfileDetail < EntityProfileDetail
  end
  
  class NicConfiguration < Struct
  end
  
  class NumaNode < Identified
  end
  
  class NumaNodePin < Struct
  end
  
  class OpenStackImage < Identified
  end
  
  class OpenStackNetwork < Identified
  end
  
  class OpenStackSubnet < Identified
  end
  
  class OpenStackVolumeType < Identified
  end
  
  class OpenstackVolumeAuthenticationKey < Identified
  end
  
  class OperatingSystem < Struct
  end
  
  class OperatingSystemInfo < Identified
  end
  
  class Option < Struct
  end
  
  class Package < Struct
  end
  
  class Payload < Struct
  end
  
  class Permission < Identified
  end
  
  class Permit < Identified
  end
  
  class PmProxy < Struct
  end
  
  class PortMirroring < Struct
  end
  
  class PowerManagement < Struct
  end
  
  class Product < Identified
  end
  
  class ProductInfo < Struct
  end
  
  class ProfileDetail < Struct
  end
  
  class Property < Struct
  end
  
  class ProxyTicket < Struct
  end
  
  class Qos < Identified
  end
  
  class Quota < Identified
  end
  
  class QuotaClusterLimit < Identified
  end
  
  class QuotaStorageLimit < Identified
  end
  
  class Range < Struct
  end
  
  class Rate < Struct
  end
  
  class RegistrationAffinityGroupMapping < Struct
  end
  
  class RegistrationAffinityLabelMapping < Struct
  end
  
  class RegistrationClusterMapping < Struct
  end
  
  class RegistrationConfiguration < Struct
  end
  
  class RegistrationDomainMapping < Struct
  end
  
  class RegistrationLunMapping < Struct
  end
  
  class RegistrationRoleMapping < Struct
  end
  
  class RegistrationVnicProfileMapping < Struct
  end
  
  class ReportedConfiguration < Struct
  end
  
  class ReportedDevice < Identified
  end
  
  class RngDevice < Struct
  end
  
  class Role < Identified
  end
  
  class SchedulingPolicy < Identified
  end
  
  class SchedulingPolicyUnit < Identified
  end
  
  class SeLinux < Struct
  end
  
  class SerialNumber < Struct
  end
  
  class Session < Identified
  end
  
  class SkipIfConnectivityBroken < Struct
  end
  
  class SkipIfSdActive < Struct
  end
  
  class SpecialObjects < Struct
  end
  
  class Spm < Struct
  end
  
  class Ssh < Identified
  end
  
  class SshPublicKey < Identified
  end
  
  class Sso < Struct
  end
  
  class Statistic < Identified
  end
  
  class Step < Identified
  end
  
  class StorageConnection < Identified
  end
  
  class StorageConnectionExtension < Identified
  end
  
  class StorageDomain < Identified
  end
  
  class StorageDomainLease < Struct
  end
  
  class SystemOption < Identified
  end
  
  class SystemOptionValue < Struct
  end
  
  class Tag < Identified
  end
  
  class TemplateVersion < Struct
  end
  
  class Ticket < Struct
  end
  
  class TimeZone < Struct
  end
  
  class TransparentHugePages < Struct
  end
  
  class UnmanagedNetwork < Identified
  end
  
  class Usb < Struct
  end
  
  class User < Identified
  end
  
  class UserOption < Identified
  end
  
  class Value < Struct
  end
  
  class VcpuPin < Struct
  end
  
  class Vendor < Identified
  end
  
  class Version < Identified
  end
  
  class VirtioScsi < Struct
  end
  
  class VirtualNumaNode < NumaNode
  end
  
  class Vlan < Struct
  end
  
  class VmBase < Identified
  end
  
  class VmPlacementPolicy < Struct
  end
  
  class VmPool < Identified
  end
  
  class VmSummary < Struct
  end
  
  class VnicPassThrough < Struct
  end
  
  class VnicProfile < Identified
  end
  
  class VnicProfileMapping < Struct
  end
  
  class VolumeGroup < Struct
  end
  
  class Weight < Identified
  end
  
  class Action < Identified
  end
  
  class AffinityGroup < Identified
  end
  
  class AffinityLabel < Identified
  end
  
  class Agent < Identified
  end
  
  class Application < Identified
  end
  
  class AuthorizedKey < Identified
  end
  
  class Backup < Identified
  end
  
  class Balance < Identified
  end
  
  class Bookmark < Identified
  end
  
  class BrickProfileDetail < EntityProfileDetail
  end
  
  class Certificate < Identified
  end
  
  class Checkpoint < Identified
  end
  
  class Cluster < Identified
  end
  
  class ClusterFeature < Identified
  end
  
  class ClusterLevel < Identified
  end
  
  class CpuProfile < Identified
  end
  
  class DataCenter < Identified
  end
  
  class Device < Identified
  end
  
  class Disk < Device
  end
  
  class DiskAttachment < Identified
  end
  
  class DiskProfile < Identified
  end
  
  class DiskSnapshot < Disk
  end
  
  class Domain < Identified
  end
  
  class Event < Identified
  end
  
  class EventSubscription < Identified
  end
  
  class ExternalComputeResource < Identified
  end
  
  class ExternalDiscoveredHost < Identified
  end
  
  class ExternalHost < Identified
  end
  
  class ExternalHostGroup < Identified
  end
  
  class ExternalNetworkProviderConfiguration < Identified
  end
  
  class ExternalProvider < Identified
  end
  
  class File < Identified
  end
  
  class Filter < Identified
  end
  
  class Floppy < Device
  end
  
  class GlusterBrickAdvancedDetails < Device
  end
  
  class GlusterHook < Identified
  end
  
  class GlusterMemoryPool < Identified
  end
  
  class GlusterServerHook < Identified
  end
  
  class GlusterVolume < Identified
  end
  
  class GlusterVolumeProfileDetails < Identified
  end
  
  class GraphicsConsole < Identified
  end
  
  class Group < Identified
  end
  
  class Hook < Identified
  end
  
  class Host < Identified
  end
  
  class HostCpuUnit < Identified
  end
  
  class HostDevice < Identified
  end
  
  class HostNic < Identified
  end
  
  class HostStorage < Identified
  end
  
  class Icon < Identified
  end
  
  class Nic < Device
  end
  
  class OpenStackProvider < ExternalProvider
  end
  
  class OpenStackVolumeProvider < OpenStackProvider
  end
  
  class Template < VmBase
  end
  
  class Vm < VmBase
  end
  
  class VmMediatedDevice < Device
  end
  
  class Watchdog < Device
  end
  
  class Cdrom < Device
  end
  
  class ExternalHostProvider < ExternalProvider
  end
  
  class GlusterBrick < GlusterBrickAdvancedDetails
  end
  
  class InstanceType < Template
  end
  
  class OpenStackImageProvider < OpenStackProvider
  end
  
  class OpenStackNetworkProvider < OpenStackProvider
  end
  
  class Snapshot < Vm
  end
  
  class AffinityRule < Struct
    
    # 
    # Returns the value of the `enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def enabled
      @enabled
    end
    
    # 
    # Sets the value of the `enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def enabled=(value)
      @enabled = value
    end
    
    # 
    # Returns the value of the `enforcing` attribute.
    # 
    # @return [Boolean]
    # 
    def enforcing
      @enforcing
    end
    
    # 
    # Sets the value of the `enforcing` attribute.
    # 
    # @param value [Boolean]
    # 
    def enforcing=(value)
      @enforcing = value
    end
    
    # 
    # Returns the value of the `positive` attribute.
    # 
    # @return [Boolean]
    # 
    def positive
      @positive
    end
    
    # 
    # Sets the value of the `positive` attribute.
    # 
    # @param value [Boolean]
    # 
    def positive=(value)
      @positive = value
    end
    
    # 
    # Creates a new instance of the {AffinityRule} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :enabled The value of attribute `enabled`.
    # 
    # @option opts [Boolean] :enforcing The value of attribute `enforcing`.
    # 
    # @option opts [Boolean] :positive The value of attribute `positive`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.enabled = opts[:enabled]
      self.enforcing = opts[:enforcing]
      self.positive = opts[:positive]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @enabled == other.enabled &&
      @enforcing == other.enforcing &&
      @positive == other.positive
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @enabled.hash +
      @enforcing.hash +
      @positive.hash
    end
    
  end
  
  class AgentConfiguration < Struct
    
    # 
    # Returns the value of the `address` attribute.
    # 
    # @return [String]
    # 
    def address
      @address
    end
    
    # 
    # Sets the value of the `address` attribute.
    # 
    # @param value [String]
    # 
    def address=(value)
      @address = value
    end
    
    # 
    # Returns the value of the `broker_type` attribute.
    # 
    # @return [MessageBrokerType]
    # 
    def broker_type
      @broker_type
    end
    
    # 
    # Sets the value of the `broker_type` attribute.
    # 
    # @param value [MessageBrokerType]
    # 
    def broker_type=(value)
      @broker_type = value
    end
    
    # 
    # Returns the value of the `network_mappings` attribute.
    # 
    # @return [String]
    # 
    def network_mappings
      @network_mappings
    end
    
    # 
    # Sets the value of the `network_mappings` attribute.
    # 
    # @param value [String]
    # 
    def network_mappings=(value)
      @network_mappings = value
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `port` attribute.
    # 
    # @return [Integer]
    # 
    def port
      @port
    end
    
    # 
    # Sets the value of the `port` attribute.
    # 
    # @param value [Integer]
    # 
    def port=(value)
      @port = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Creates a new instance of the {AgentConfiguration} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :address The value of attribute `address`.
    # 
    # @option opts [MessageBrokerType] :broker_type The value of attribute `broker_type`.
    # 
    # @option opts [String] :network_mappings The value of attribute `network_mappings`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [Integer] :port The value of attribute `port`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.address = opts[:address]
      self.broker_type = opts[:broker_type]
      self.network_mappings = opts[:network_mappings]
      self.password = opts[:password]
      self.port = opts[:port]
      self.username = opts[:username]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @address == other.address &&
      @broker_type == other.broker_type &&
      @network_mappings == other.network_mappings &&
      @password == other.password &&
      @port == other.port &&
      @username == other.username
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @address.hash +
      @broker_type.hash +
      @network_mappings.hash +
      @password.hash +
      @port.hash +
      @username.hash
    end
    
  end
  
  class Api < Struct
    
    # 
    # Returns the value of the `authenticated_user` attribute.
    # 
    # @return [User]
    # 
    def authenticated_user
      @authenticated_user
    end
    
    # 
    # Sets the value of the `authenticated_user` attribute.
    # 
    # @param value [User, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::User} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def authenticated_user=(value)
      if value.is_a?(Hash)
        value = User.new(value)
      end
      @authenticated_user = value
    end
    
    # 
    # Returns the value of the `effective_user` attribute.
    # 
    # @return [User]
    # 
    def effective_user
      @effective_user
    end
    
    # 
    # Sets the value of the `effective_user` attribute.
    # 
    # @param value [User, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::User} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def effective_user=(value)
      if value.is_a?(Hash)
        value = User.new(value)
      end
      @effective_user = value
    end
    
    # 
    # Returns the value of the `engine_backup` attribute.
    # 
    # @return [EngineBackupInfo]
    # 
    def engine_backup
      @engine_backup
    end
    
    # 
    # Sets the value of the `engine_backup` attribute.
    # 
    # @param value [EngineBackupInfo, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::EngineBackupInfo} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def engine_backup=(value)
      if value.is_a?(Hash)
        value = EngineBackupInfo.new(value)
      end
      @engine_backup = value
    end
    
    # 
    # Returns the value of the `product_info` attribute.
    # 
    # @return [ProductInfo]
    # 
    def product_info
      @product_info
    end
    
    # 
    # Sets the value of the `product_info` attribute.
    # 
    # @param value [ProductInfo, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ProductInfo} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def product_info=(value)
      if value.is_a?(Hash)
        value = ProductInfo.new(value)
      end
      @product_info = value
    end
    
    # 
    # Returns the value of the `special_objects` attribute.
    # 
    # @return [SpecialObjects]
    # 
    def special_objects
      @special_objects
    end
    
    # 
    # Sets the value of the `special_objects` attribute.
    # 
    # @param value [SpecialObjects, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SpecialObjects} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def special_objects=(value)
      if value.is_a?(Hash)
        value = SpecialObjects.new(value)
      end
      @special_objects = value
    end
    
    # 
    # Returns the value of the `summary` attribute.
    # 
    # @return [ApiSummary]
    # 
    def summary
      @summary
    end
    
    # 
    # Sets the value of the `summary` attribute.
    # 
    # @param value [ApiSummary, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ApiSummary} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def summary=(value)
      if value.is_a?(Hash)
        value = ApiSummary.new(value)
      end
      @summary = value
    end
    
    # 
    # Returns the value of the `time` attribute.
    # 
    # @return [DateTime]
    # 
    def time
      @time
    end
    
    # 
    # Sets the value of the `time` attribute.
    # 
    # @param value [DateTime]
    # 
    def time=(value)
      @time = value
    end
    
    # 
    # Creates a new instance of the {Api} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [User, Hash] :authenticated_user The value of attribute `authenticated_user`.
    # 
    # @option opts [User, Hash] :effective_user The value of attribute `effective_user`.
    # 
    # @option opts [EngineBackupInfo, Hash] :engine_backup The value of attribute `engine_backup`.
    # 
    # @option opts [ProductInfo, Hash] :product_info The value of attribute `product_info`.
    # 
    # @option opts [SpecialObjects, Hash] :special_objects The value of attribute `special_objects`.
    # 
    # @option opts [ApiSummary, Hash] :summary The value of attribute `summary`.
    # 
    # @option opts [DateTime] :time The value of attribute `time`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.authenticated_user = opts[:authenticated_user]
      self.effective_user = opts[:effective_user]
      self.engine_backup = opts[:engine_backup]
      self.product_info = opts[:product_info]
      self.special_objects = opts[:special_objects]
      self.summary = opts[:summary]
      self.time = opts[:time]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @authenticated_user == other.authenticated_user &&
      @effective_user == other.effective_user &&
      @engine_backup == other.engine_backup &&
      @product_info == other.product_info &&
      @special_objects == other.special_objects &&
      @summary == other.summary &&
      @time == other.time
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @authenticated_user.hash +
      @effective_user.hash +
      @engine_backup.hash +
      @product_info.hash +
      @special_objects.hash +
      @summary.hash +
      @time.hash
    end
    
  end
  
  class ApiSummary < Struct
    
    # 
    # Returns the value of the `hosts` attribute.
    # 
    # @return [ApiSummaryItem]
    # 
    def hosts
      @hosts
    end
    
    # 
    # Sets the value of the `hosts` attribute.
    # 
    # @param value [ApiSummaryItem, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ApiSummaryItem} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def hosts=(value)
      if value.is_a?(Hash)
        value = ApiSummaryItem.new(value)
      end
      @hosts = value
    end
    
    # 
    # Returns the value of the `storage_domains` attribute.
    # 
    # @return [ApiSummaryItem]
    # 
    def storage_domains
      @storage_domains
    end
    
    # 
    # Sets the value of the `storage_domains` attribute.
    # 
    # @param value [ApiSummaryItem, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ApiSummaryItem} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domains=(value)
      if value.is_a?(Hash)
        value = ApiSummaryItem.new(value)
      end
      @storage_domains = value
    end
    
    # 
    # Returns the value of the `users` attribute.
    # 
    # @return [ApiSummaryItem]
    # 
    def users
      @users
    end
    
    # 
    # Sets the value of the `users` attribute.
    # 
    # @param value [ApiSummaryItem, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ApiSummaryItem} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def users=(value)
      if value.is_a?(Hash)
        value = ApiSummaryItem.new(value)
      end
      @users = value
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [ApiSummaryItem]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param value [ApiSummaryItem, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ApiSummaryItem} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vms=(value)
      if value.is_a?(Hash)
        value = ApiSummaryItem.new(value)
      end
      @vms = value
    end
    
    # 
    # Creates a new instance of the {ApiSummary} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [ApiSummaryItem, Hash] :hosts The value of attribute `hosts`.
    # 
    # @option opts [ApiSummaryItem, Hash] :storage_domains The value of attribute `storage_domains`.
    # 
    # @option opts [ApiSummaryItem, Hash] :users The value of attribute `users`.
    # 
    # @option opts [ApiSummaryItem, Hash] :vms The value of attribute `vms`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.hosts = opts[:hosts]
      self.storage_domains = opts[:storage_domains]
      self.users = opts[:users]
      self.vms = opts[:vms]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @hosts == other.hosts &&
      @storage_domains == other.storage_domains &&
      @users == other.users &&
      @vms == other.vms
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @hosts.hash +
      @storage_domains.hash +
      @users.hash +
      @vms.hash
    end
    
  end
  
  class ApiSummaryItem < Struct
    
    # 
    # Returns the value of the `active` attribute.
    # 
    # @return [Integer]
    # 
    def active
      @active
    end
    
    # 
    # Sets the value of the `active` attribute.
    # 
    # @param value [Integer]
    # 
    def active=(value)
      @active = value
    end
    
    # 
    # Returns the value of the `total` attribute.
    # 
    # @return [Integer]
    # 
    def total
      @total
    end
    
    # 
    # Sets the value of the `total` attribute.
    # 
    # @param value [Integer]
    # 
    def total=(value)
      @total = value
    end
    
    # 
    # Creates a new instance of the {ApiSummaryItem} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :active The value of attribute `active`.
    # 
    # @option opts [Integer] :total The value of attribute `total`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.active = opts[:active]
      self.total = opts[:total]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @active == other.active &&
      @total == other.total
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @active.hash +
      @total.hash
    end
    
  end
  
  class Bios < Struct
    
    # 
    # Returns the value of the `boot_menu` attribute.
    # 
    # @return [BootMenu]
    # 
    def boot_menu
      @boot_menu
    end
    
    # 
    # Sets the value of the `boot_menu` attribute.
    # 
    # @param value [BootMenu, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::BootMenu} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def boot_menu=(value)
      if value.is_a?(Hash)
        value = BootMenu.new(value)
      end
      @boot_menu = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [BiosType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [BiosType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Creates a new instance of the {Bios} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [BootMenu, Hash] :boot_menu The value of attribute `boot_menu`.
    # 
    # @option opts [BiosType] :type The value of attribute `type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.boot_menu = opts[:boot_menu]
      self.type = opts[:type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @boot_menu == other.boot_menu &&
      @type == other.type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @boot_menu.hash +
      @type.hash
    end
    
  end
  
  class BlockStatistic < Struct
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Creates a new instance of the {BlockStatistic} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.statistics = opts[:statistics]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @statistics == other.statistics
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @statistics.hash
    end
    
  end
  
  class Bonding < Struct
    
    # 
    # Returns the value of the `active_slave` attribute.
    # 
    # @return [HostNic]
    # 
    def active_slave
      @active_slave
    end
    
    # 
    # Sets the value of the `active_slave` attribute.
    # 
    # @param value [HostNic, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostNic} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def active_slave=(value)
      if value.is_a?(Hash)
        value = HostNic.new(value)
      end
      @active_slave = value
    end
    
    # 
    # Returns the value of the `ad_partner_mac` attribute.
    # 
    # @return [Mac]
    # 
    def ad_partner_mac
      @ad_partner_mac
    end
    
    # 
    # Sets the value of the `ad_partner_mac` attribute.
    # 
    # @param value [Mac, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Mac} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def ad_partner_mac=(value)
      if value.is_a?(Hash)
        value = Mac.new(value)
      end
      @ad_partner_mac = value
    end
    
    # 
    # Returns the value of the `options` attribute.
    # 
    # @return [Array<Option>]
    # 
    def options
      @options
    end
    
    # 
    # Sets the value of the `options` attribute.
    # 
    # @param list [Array<Option>]
    # 
    def options=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Option.new(value)
          end
        end
      end
      @options = list
    end
    
    # 
    # Returns the value of the `slaves` attribute.
    # 
    # @return [Array<HostNic>]
    # 
    def slaves
      @slaves
    end
    
    # 
    # Sets the value of the `slaves` attribute.
    # 
    # @param list [Array<HostNic>]
    # 
    def slaves=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = HostNic.new(value)
          end
        end
      end
      @slaves = list
    end
    
    # 
    # Creates a new instance of the {Bonding} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [HostNic, Hash] :active_slave The value of attribute `active_slave`.
    # 
    # @option opts [Mac, Hash] :ad_partner_mac The value of attribute `ad_partner_mac`.
    # 
    # @option opts [Array<Option>, Array<Hash>] :options The values of attribute `options`.
    # 
    # @option opts [Array<HostNic>, Array<Hash>] :slaves The values of attribute `slaves`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.active_slave = opts[:active_slave]
      self.ad_partner_mac = opts[:ad_partner_mac]
      self.options = opts[:options]
      self.slaves = opts[:slaves]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @active_slave == other.active_slave &&
      @ad_partner_mac == other.ad_partner_mac &&
      @options == other.options &&
      @slaves == other.slaves
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @active_slave.hash +
      @ad_partner_mac.hash +
      @options.hash +
      @slaves.hash
    end
    
  end
  
  class Boot < Struct
    
    # 
    # Returns the value of the `devices` attribute.
    # 
    # @return [Array<BootDevice>]
    # 
    def devices
      @devices
    end
    
    # 
    # Sets the value of the `devices` attribute.
    # 
    # @param list [Array<BootDevice>]
    # 
    def devices=(list)
      @devices = list
    end
    
    # 
    # Creates a new instance of the {Boot} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<BootDevice>, Array<Hash>] :devices The values of attribute `devices`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.devices = opts[:devices]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @devices == other.devices
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @devices.hash
    end
    
  end
  
  class BootMenu < Struct
    
    # 
    # Returns the value of the `enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def enabled
      @enabled
    end
    
    # 
    # Sets the value of the `enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def enabled=(value)
      @enabled = value
    end
    
    # 
    # Creates a new instance of the {BootMenu} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :enabled The value of attribute `enabled`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.enabled = opts[:enabled]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @enabled == other.enabled
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @enabled.hash
    end
    
  end
  
  class CloudInit < Struct
    
    # 
    # Returns the value of the `authorized_keys` attribute.
    # 
    # @return [Array<AuthorizedKey>]
    # 
    def authorized_keys
      @authorized_keys
    end
    
    # 
    # Sets the value of the `authorized_keys` attribute.
    # 
    # @param list [Array<AuthorizedKey>]
    # 
    def authorized_keys=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = AuthorizedKey.new(value)
          end
        end
      end
      @authorized_keys = list
    end
    
    # 
    # Returns the value of the `files` attribute.
    # 
    # @return [Array<File>]
    # 
    def files
      @files
    end
    
    # 
    # Sets the value of the `files` attribute.
    # 
    # @param list [Array<File>]
    # 
    def files=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = File.new(value)
          end
        end
      end
      @files = list
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `network_configuration` attribute.
    # 
    # @return [NetworkConfiguration]
    # 
    def network_configuration
      @network_configuration
    end
    
    # 
    # Sets the value of the `network_configuration` attribute.
    # 
    # @param value [NetworkConfiguration, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::NetworkConfiguration} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def network_configuration=(value)
      if value.is_a?(Hash)
        value = NetworkConfiguration.new(value)
      end
      @network_configuration = value
    end
    
    # 
    # Returns the value of the `regenerate_ssh_keys` attribute.
    # 
    # @return [Boolean]
    # 
    def regenerate_ssh_keys
      @regenerate_ssh_keys
    end
    
    # 
    # Sets the value of the `regenerate_ssh_keys` attribute.
    # 
    # @param value [Boolean]
    # 
    def regenerate_ssh_keys=(value)
      @regenerate_ssh_keys = value
    end
    
    # 
    # Returns the value of the `timezone` attribute.
    # 
    # @return [String]
    # 
    def timezone
      @timezone
    end
    
    # 
    # Sets the value of the `timezone` attribute.
    # 
    # @param value [String]
    # 
    def timezone=(value)
      @timezone = value
    end
    
    # 
    # Returns the value of the `users` attribute.
    # 
    # @return [Array<User>]
    # 
    def users
      @users
    end
    
    # 
    # Sets the value of the `users` attribute.
    # 
    # @param list [Array<User>]
    # 
    def users=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = User.new(value)
          end
        end
      end
      @users = list
    end
    
    # 
    # Creates a new instance of the {CloudInit} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<AuthorizedKey>, Array<Hash>] :authorized_keys The values of attribute `authorized_keys`.
    # 
    # @option opts [Array<File>, Array<Hash>] :files The values of attribute `files`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [NetworkConfiguration, Hash] :network_configuration The value of attribute `network_configuration`.
    # 
    # @option opts [Boolean] :regenerate_ssh_keys The value of attribute `regenerate_ssh_keys`.
    # 
    # @option opts [String] :timezone The value of attribute `timezone`.
    # 
    # @option opts [Array<User>, Array<Hash>] :users The values of attribute `users`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.authorized_keys = opts[:authorized_keys]
      self.files = opts[:files]
      self.host = opts[:host]
      self.network_configuration = opts[:network_configuration]
      self.regenerate_ssh_keys = opts[:regenerate_ssh_keys]
      self.timezone = opts[:timezone]
      self.users = opts[:users]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @authorized_keys == other.authorized_keys &&
      @files == other.files &&
      @host == other.host &&
      @network_configuration == other.network_configuration &&
      @regenerate_ssh_keys == other.regenerate_ssh_keys &&
      @timezone == other.timezone &&
      @users == other.users
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @authorized_keys.hash +
      @files.hash +
      @host.hash +
      @network_configuration.hash +
      @regenerate_ssh_keys.hash +
      @timezone.hash +
      @users.hash
    end
    
  end
  
  class Configuration < Struct
    
    # 
    # Returns the value of the `data` attribute.
    # 
    # @return [String]
    # 
    def data
      @data
    end
    
    # 
    # Sets the value of the `data` attribute.
    # 
    # @param value [String]
    # 
    def data=(value)
      @data = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [ConfigurationType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [ConfigurationType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Creates a new instance of the {Configuration} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :data The value of attribute `data`.
    # 
    # @option opts [ConfigurationType] :type The value of attribute `type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.data = opts[:data]
      self.type = opts[:type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @data == other.data &&
      @type == other.type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @data.hash +
      @type.hash
    end
    
  end
  
  class Console < Struct
    
    # 
    # Returns the value of the `enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def enabled
      @enabled
    end
    
    # 
    # Sets the value of the `enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def enabled=(value)
      @enabled = value
    end
    
    # 
    # Creates a new instance of the {Console} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :enabled The value of attribute `enabled`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.enabled = opts[:enabled]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @enabled == other.enabled
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @enabled.hash
    end
    
  end
  
  class Core < Struct
    
    # 
    # Returns the value of the `index` attribute.
    # 
    # @return [Integer]
    # 
    def index
      @index
    end
    
    # 
    # Sets the value of the `index` attribute.
    # 
    # @param value [Integer]
    # 
    def index=(value)
      @index = value
    end
    
    # 
    # Returns the value of the `socket` attribute.
    # 
    # @return [Integer]
    # 
    def socket
      @socket
    end
    
    # 
    # Sets the value of the `socket` attribute.
    # 
    # @param value [Integer]
    # 
    def socket=(value)
      @socket = value
    end
    
    # 
    # Creates a new instance of the {Core} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :index The value of attribute `index`.
    # 
    # @option opts [Integer] :socket The value of attribute `socket`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.index = opts[:index]
      self.socket = opts[:socket]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @index == other.index &&
      @socket == other.socket
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @index.hash +
      @socket.hash
    end
    
  end
  
  class Cpu < Struct
    
    # 
    # Returns the value of the `architecture` attribute.
    # 
    # @return [Architecture]
    # 
    def architecture
      @architecture
    end
    
    # 
    # Sets the value of the `architecture` attribute.
    # 
    # @param value [Architecture]
    # 
    def architecture=(value)
      @architecture = value
    end
    
    # 
    # Returns the value of the `cores` attribute.
    # 
    # @return [Array<Core>]
    # 
    def cores
      @cores
    end
    
    # 
    # Sets the value of the `cores` attribute.
    # 
    # @param list [Array<Core>]
    # 
    def cores=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Core.new(value)
          end
        end
      end
      @cores = list
    end
    
    # 
    # Returns the value of the `cpu_tune` attribute.
    # 
    # @return [CpuTune]
    # 
    def cpu_tune
      @cpu_tune
    end
    
    # 
    # Sets the value of the `cpu_tune` attribute.
    # 
    # @param value [CpuTune, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::CpuTune} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu_tune=(value)
      if value.is_a?(Hash)
        value = CpuTune.new(value)
      end
      @cpu_tune = value
    end
    
    # 
    # Returns the value of the `level` attribute.
    # 
    # @return [Integer]
    # 
    def level
      @level
    end
    
    # 
    # Sets the value of the `level` attribute.
    # 
    # @param value [Integer]
    # 
    def level=(value)
      @level = value
    end
    
    # 
    # Returns the value of the `mode` attribute.
    # 
    # @return [CpuMode]
    # 
    def mode
      @mode
    end
    
    # 
    # Sets the value of the `mode` attribute.
    # 
    # @param value [CpuMode]
    # 
    def mode=(value)
      @mode = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `speed` attribute.
    # 
    # @return [Float]
    # 
    def speed
      @speed
    end
    
    # 
    # Sets the value of the `speed` attribute.
    # 
    # @param value [Float]
    # 
    def speed=(value)
      @speed = value
    end
    
    # 
    # Returns the value of the `topology` attribute.
    # 
    # @return [CpuTopology]
    # 
    def topology
      @topology
    end
    
    # 
    # Sets the value of the `topology` attribute.
    # 
    # @param value [CpuTopology, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::CpuTopology} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def topology=(value)
      if value.is_a?(Hash)
        value = CpuTopology.new(value)
      end
      @topology = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [String]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [String]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Creates a new instance of the {Cpu} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Architecture] :architecture The value of attribute `architecture`.
    # 
    # @option opts [Array<Core>, Array<Hash>] :cores The values of attribute `cores`.
    # 
    # @option opts [CpuTune, Hash] :cpu_tune The value of attribute `cpu_tune`.
    # 
    # @option opts [Integer] :level The value of attribute `level`.
    # 
    # @option opts [CpuMode] :mode The value of attribute `mode`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Float] :speed The value of attribute `speed`.
    # 
    # @option opts [CpuTopology, Hash] :topology The value of attribute `topology`.
    # 
    # @option opts [String] :type The value of attribute `type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.architecture = opts[:architecture]
      self.cores = opts[:cores]
      self.cpu_tune = opts[:cpu_tune]
      self.level = opts[:level]
      self.mode = opts[:mode]
      self.name = opts[:name]
      self.speed = opts[:speed]
      self.topology = opts[:topology]
      self.type = opts[:type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @architecture == other.architecture &&
      @cores == other.cores &&
      @cpu_tune == other.cpu_tune &&
      @level == other.level &&
      @mode == other.mode &&
      @name == other.name &&
      @speed == other.speed &&
      @topology == other.topology &&
      @type == other.type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @architecture.hash +
      @cores.hash +
      @cpu_tune.hash +
      @level.hash +
      @mode.hash +
      @name.hash +
      @speed.hash +
      @topology.hash +
      @type.hash
    end
    
  end
  
  class CpuTopology < Struct
    
    # 
    # Returns the value of the `cores` attribute.
    # 
    # @return [Integer]
    # 
    def cores
      @cores
    end
    
    # 
    # Sets the value of the `cores` attribute.
    # 
    # @param value [Integer]
    # 
    def cores=(value)
      @cores = value
    end
    
    # 
    # Returns the value of the `sockets` attribute.
    # 
    # @return [Integer]
    # 
    def sockets
      @sockets
    end
    
    # 
    # Sets the value of the `sockets` attribute.
    # 
    # @param value [Integer]
    # 
    def sockets=(value)
      @sockets = value
    end
    
    # 
    # Returns the value of the `threads` attribute.
    # 
    # @return [Integer]
    # 
    def threads
      @threads
    end
    
    # 
    # Sets the value of the `threads` attribute.
    # 
    # @param value [Integer]
    # 
    def threads=(value)
      @threads = value
    end
    
    # 
    # Creates a new instance of the {CpuTopology} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :cores The value of attribute `cores`.
    # 
    # @option opts [Integer] :sockets The value of attribute `sockets`.
    # 
    # @option opts [Integer] :threads The value of attribute `threads`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cores = opts[:cores]
      self.sockets = opts[:sockets]
      self.threads = opts[:threads]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cores == other.cores &&
      @sockets == other.sockets &&
      @threads == other.threads
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cores.hash +
      @sockets.hash +
      @threads.hash
    end
    
  end
  
  class CpuTune < Struct
    
    # 
    # Returns the value of the `vcpu_pins` attribute.
    # 
    # @return [Array<VcpuPin>]
    # 
    def vcpu_pins
      @vcpu_pins
    end
    
    # 
    # Sets the value of the `vcpu_pins` attribute.
    # 
    # @param list [Array<VcpuPin>]
    # 
    def vcpu_pins=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = VcpuPin.new(value)
          end
        end
      end
      @vcpu_pins = list
    end
    
    # 
    # Creates a new instance of the {CpuTune} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<VcpuPin>, Array<Hash>] :vcpu_pins The values of attribute `vcpu_pins`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.vcpu_pins = opts[:vcpu_pins]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @vcpu_pins == other.vcpu_pins
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @vcpu_pins.hash
    end
    
  end
  
  class CpuType < Struct
    
    # 
    # Returns the value of the `architecture` attribute.
    # 
    # @return [Architecture]
    # 
    def architecture
      @architecture
    end
    
    # 
    # Sets the value of the `architecture` attribute.
    # 
    # @param value [Architecture]
    # 
    def architecture=(value)
      @architecture = value
    end
    
    # 
    # Returns the value of the `level` attribute.
    # 
    # @return [Integer]
    # 
    def level
      @level
    end
    
    # 
    # Sets the value of the `level` attribute.
    # 
    # @param value [Integer]
    # 
    def level=(value)
      @level = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {CpuType} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Architecture] :architecture The value of attribute `architecture`.
    # 
    # @option opts [Integer] :level The value of attribute `level`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.architecture = opts[:architecture]
      self.level = opts[:level]
      self.name = opts[:name]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @architecture == other.architecture &&
      @level == other.level &&
      @name == other.name
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @architecture.hash +
      @level.hash +
      @name.hash
    end
    
  end
  
  class CustomProperty < Struct
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `regexp` attribute.
    # 
    # @return [String]
    # 
    def regexp
      @regexp
    end
    
    # 
    # Sets the value of the `regexp` attribute.
    # 
    # @param value [String]
    # 
    def regexp=(value)
      @regexp = value
    end
    
    # 
    # Returns the value of the `value` attribute.
    # 
    # @return [String]
    # 
    def value
      @value
    end
    
    # 
    # Sets the value of the `value` attribute.
    # 
    # @param value [String]
    # 
    def value=(value)
      @value = value
    end
    
    # 
    # Creates a new instance of the {CustomProperty} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :regexp The value of attribute `regexp`.
    # 
    # @option opts [String] :value The value of attribute `value`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.name = opts[:name]
      self.regexp = opts[:regexp]
      self.value = opts[:value]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @name == other.name &&
      @regexp == other.regexp &&
      @value == other.value
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @name.hash +
      @regexp.hash +
      @value.hash
    end
    
  end
  
  class Display < Struct
    
    # 
    # Returns the value of the `address` attribute.
    # 
    # @return [String]
    # 
    def address
      @address
    end
    
    # 
    # Sets the value of the `address` attribute.
    # 
    # @param value [String]
    # 
    def address=(value)
      @address = value
    end
    
    # 
    # Returns the value of the `allow_override` attribute.
    # 
    # @return [Boolean]
    # 
    def allow_override
      @allow_override
    end
    
    # 
    # Sets the value of the `allow_override` attribute.
    # 
    # @param value [Boolean]
    # 
    def allow_override=(value)
      @allow_override = value
    end
    
    # 
    # Returns the value of the `certificate` attribute.
    # 
    # @return [Certificate]
    # 
    def certificate
      @certificate
    end
    
    # 
    # Sets the value of the `certificate` attribute.
    # 
    # @param value [Certificate, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Certificate} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def certificate=(value)
      if value.is_a?(Hash)
        value = Certificate.new(value)
      end
      @certificate = value
    end
    
    # 
    # Returns the value of the `copy_paste_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def copy_paste_enabled
      @copy_paste_enabled
    end
    
    # 
    # Sets the value of the `copy_paste_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def copy_paste_enabled=(value)
      @copy_paste_enabled = value
    end
    
    # 
    # Returns the value of the `disconnect_action` attribute.
    # 
    # @return [String]
    # 
    def disconnect_action
      @disconnect_action
    end
    
    # 
    # Sets the value of the `disconnect_action` attribute.
    # 
    # @param value [String]
    # 
    def disconnect_action=(value)
      @disconnect_action = value
    end
    
    # 
    # Returns the value of the `disconnect_action_delay` attribute.
    # 
    # @return [Integer]
    # 
    def disconnect_action_delay
      @disconnect_action_delay
    end
    
    # 
    # Sets the value of the `disconnect_action_delay` attribute.
    # 
    # @param value [Integer]
    # 
    def disconnect_action_delay=(value)
      @disconnect_action_delay = value
    end
    
    # 
    # Returns the value of the `file_transfer_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def file_transfer_enabled
      @file_transfer_enabled
    end
    
    # 
    # Sets the value of the `file_transfer_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def file_transfer_enabled=(value)
      @file_transfer_enabled = value
    end
    
    # 
    # Returns the value of the `keyboard_layout` attribute.
    # 
    # @return [String]
    # 
    def keyboard_layout
      @keyboard_layout
    end
    
    # 
    # Sets the value of the `keyboard_layout` attribute.
    # 
    # @param value [String]
    # 
    def keyboard_layout=(value)
      @keyboard_layout = value
    end
    
    # 
    # Returns the value of the `monitors` attribute.
    # 
    # @return [Integer]
    # 
    def monitors
      @monitors
    end
    
    # 
    # Sets the value of the `monitors` attribute.
    # 
    # @param value [Integer]
    # 
    def monitors=(value)
      @monitors = value
    end
    
    # 
    # Returns the value of the `port` attribute.
    # 
    # @return [Integer]
    # 
    def port
      @port
    end
    
    # 
    # Sets the value of the `port` attribute.
    # 
    # @param value [Integer]
    # 
    def port=(value)
      @port = value
    end
    
    # 
    # Returns the value of the `proxy` attribute.
    # 
    # @return [String]
    # 
    def proxy
      @proxy
    end
    
    # 
    # Sets the value of the `proxy` attribute.
    # 
    # @param value [String]
    # 
    def proxy=(value)
      @proxy = value
    end
    
    # 
    # Returns the value of the `secure_port` attribute.
    # 
    # @return [Integer]
    # 
    def secure_port
      @secure_port
    end
    
    # 
    # Sets the value of the `secure_port` attribute.
    # 
    # @param value [Integer]
    # 
    def secure_port=(value)
      @secure_port = value
    end
    
    # 
    # Returns the value of the `single_qxl_pci` attribute.
    # 
    # @return [Boolean]
    # 
    def single_qxl_pci
      @single_qxl_pci
    end
    
    # 
    # Sets the value of the `single_qxl_pci` attribute.
    # 
    # @param value [Boolean]
    # 
    def single_qxl_pci=(value)
      @single_qxl_pci = value
    end
    
    # 
    # Returns the value of the `smartcard_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def smartcard_enabled
      @smartcard_enabled
    end
    
    # 
    # Sets the value of the `smartcard_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def smartcard_enabled=(value)
      @smartcard_enabled = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [DisplayType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [DisplayType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `video_type` attribute.
    # 
    # @return [VideoType]
    # 
    def video_type
      @video_type
    end
    
    # 
    # Sets the value of the `video_type` attribute.
    # 
    # @param value [VideoType]
    # 
    def video_type=(value)
      @video_type = value
    end
    
    # 
    # Creates a new instance of the {Display} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :address The value of attribute `address`.
    # 
    # @option opts [Boolean] :allow_override The value of attribute `allow_override`.
    # 
    # @option opts [Certificate, Hash] :certificate The value of attribute `certificate`.
    # 
    # @option opts [Boolean] :copy_paste_enabled The value of attribute `copy_paste_enabled`.
    # 
    # @option opts [String] :disconnect_action The value of attribute `disconnect_action`.
    # 
    # @option opts [Integer] :disconnect_action_delay The value of attribute `disconnect_action_delay`.
    # 
    # @option opts [Boolean] :file_transfer_enabled The value of attribute `file_transfer_enabled`.
    # 
    # @option opts [String] :keyboard_layout The value of attribute `keyboard_layout`.
    # 
    # @option opts [Integer] :monitors The value of attribute `monitors`.
    # 
    # @option opts [Integer] :port The value of attribute `port`.
    # 
    # @option opts [String] :proxy The value of attribute `proxy`.
    # 
    # @option opts [Integer] :secure_port The value of attribute `secure_port`.
    # 
    # @option opts [Boolean] :single_qxl_pci The value of attribute `single_qxl_pci`.
    # 
    # @option opts [Boolean] :smartcard_enabled The value of attribute `smartcard_enabled`.
    # 
    # @option opts [DisplayType] :type The value of attribute `type`.
    # 
    # @option opts [VideoType] :video_type The value of attribute `video_type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.address = opts[:address]
      self.allow_override = opts[:allow_override]
      self.certificate = opts[:certificate]
      self.copy_paste_enabled = opts[:copy_paste_enabled]
      self.disconnect_action = opts[:disconnect_action]
      self.disconnect_action_delay = opts[:disconnect_action_delay]
      self.file_transfer_enabled = opts[:file_transfer_enabled]
      self.keyboard_layout = opts[:keyboard_layout]
      self.monitors = opts[:monitors]
      self.port = opts[:port]
      self.proxy = opts[:proxy]
      self.secure_port = opts[:secure_port]
      self.single_qxl_pci = opts[:single_qxl_pci]
      self.smartcard_enabled = opts[:smartcard_enabled]
      self.type = opts[:type]
      self.video_type = opts[:video_type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @address == other.address &&
      @allow_override == other.allow_override &&
      @certificate == other.certificate &&
      @copy_paste_enabled == other.copy_paste_enabled &&
      @disconnect_action == other.disconnect_action &&
      @disconnect_action_delay == other.disconnect_action_delay &&
      @file_transfer_enabled == other.file_transfer_enabled &&
      @keyboard_layout == other.keyboard_layout &&
      @monitors == other.monitors &&
      @port == other.port &&
      @proxy == other.proxy &&
      @secure_port == other.secure_port &&
      @single_qxl_pci == other.single_qxl_pci &&
      @smartcard_enabled == other.smartcard_enabled &&
      @type == other.type &&
      @video_type == other.video_type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @address.hash +
      @allow_override.hash +
      @certificate.hash +
      @copy_paste_enabled.hash +
      @disconnect_action.hash +
      @disconnect_action_delay.hash +
      @file_transfer_enabled.hash +
      @keyboard_layout.hash +
      @monitors.hash +
      @port.hash +
      @proxy.hash +
      @secure_port.hash +
      @single_qxl_pci.hash +
      @smartcard_enabled.hash +
      @type.hash +
      @video_type.hash
    end
    
  end
  
  class Dns < Struct
    
    # 
    # Returns the value of the `search_domains` attribute.
    # 
    # @return [Array<Host>]
    # 
    def search_domains
      @search_domains
    end
    
    # 
    # Sets the value of the `search_domains` attribute.
    # 
    # @param list [Array<Host>]
    # 
    def search_domains=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Host.new(value)
          end
        end
      end
      @search_domains = list
    end
    
    # 
    # Returns the value of the `servers` attribute.
    # 
    # @return [Array<Host>]
    # 
    def servers
      @servers
    end
    
    # 
    # Sets the value of the `servers` attribute.
    # 
    # @param list [Array<Host>]
    # 
    def servers=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Host.new(value)
          end
        end
      end
      @servers = list
    end
    
    # 
    # Creates a new instance of the {Dns} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<Host>, Array<Hash>] :search_domains The values of attribute `search_domains`.
    # 
    # @option opts [Array<Host>, Array<Hash>] :servers The values of attribute `servers`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.search_domains = opts[:search_domains]
      self.servers = opts[:servers]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @search_domains == other.search_domains &&
      @servers == other.servers
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @search_domains.hash +
      @servers.hash
    end
    
  end
  
  class DnsResolverConfiguration < Struct
    
    # 
    # Returns the value of the `name_servers` attribute.
    # 
    # @return [Array<String>]
    # 
    def name_servers
      @name_servers
    end
    
    # 
    # Sets the value of the `name_servers` attribute.
    # 
    # @param list [Array<String>]
    # 
    def name_servers=(list)
      @name_servers = list
    end
    
    # 
    # Creates a new instance of the {DnsResolverConfiguration} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<String>, Array<Hash>] :name_servers The values of attribute `name_servers`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.name_servers = opts[:name_servers]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @name_servers == other.name_servers
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @name_servers.hash
    end
    
  end
  
  class DynamicCpu < Struct
    
    # 
    # Returns the value of the `cpu_tune` attribute.
    # 
    # @return [CpuTune]
    # 
    def cpu_tune
      @cpu_tune
    end
    
    # 
    # Sets the value of the `cpu_tune` attribute.
    # 
    # @param value [CpuTune, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::CpuTune} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu_tune=(value)
      if value.is_a?(Hash)
        value = CpuTune.new(value)
      end
      @cpu_tune = value
    end
    
    # 
    # Returns the value of the `topology` attribute.
    # 
    # @return [CpuTopology]
    # 
    def topology
      @topology
    end
    
    # 
    # Sets the value of the `topology` attribute.
    # 
    # @param value [CpuTopology, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::CpuTopology} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def topology=(value)
      if value.is_a?(Hash)
        value = CpuTopology.new(value)
      end
      @topology = value
    end
    
    # 
    # Creates a new instance of the {DynamicCpu} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [CpuTune, Hash] :cpu_tune The value of attribute `cpu_tune`.
    # 
    # @option opts [CpuTopology, Hash] :topology The value of attribute `topology`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cpu_tune = opts[:cpu_tune]
      self.topology = opts[:topology]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cpu_tune == other.cpu_tune &&
      @topology == other.topology
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cpu_tune.hash +
      @topology.hash
    end
    
  end
  
  class EngineBackupInfo < Struct
    
    # 
    # Returns the value of the `last_cinder_backup` attribute.
    # 
    # @return [DateTime]
    # 
    def last_cinder_backup
      @last_cinder_backup
    end
    
    # 
    # Sets the value of the `last_cinder_backup` attribute.
    # 
    # @param value [DateTime]
    # 
    def last_cinder_backup=(value)
      @last_cinder_backup = value
    end
    
    # 
    # Returns the value of the `last_db_backup` attribute.
    # 
    # @return [DateTime]
    # 
    def last_db_backup
      @last_db_backup
    end
    
    # 
    # Sets the value of the `last_db_backup` attribute.
    # 
    # @param value [DateTime]
    # 
    def last_db_backup=(value)
      @last_db_backup = value
    end
    
    # 
    # Returns the value of the `last_dwh_backup` attribute.
    # 
    # @return [DateTime]
    # 
    def last_dwh_backup
      @last_dwh_backup
    end
    
    # 
    # Sets the value of the `last_dwh_backup` attribute.
    # 
    # @param value [DateTime]
    # 
    def last_dwh_backup=(value)
      @last_dwh_backup = value
    end
    
    # 
    # Returns the value of the `last_engine_backup` attribute.
    # 
    # @return [DateTime]
    # 
    def last_engine_backup
      @last_engine_backup
    end
    
    # 
    # Sets the value of the `last_engine_backup` attribute.
    # 
    # @param value [DateTime]
    # 
    def last_engine_backup=(value)
      @last_engine_backup = value
    end
    
    # 
    # Returns the value of the `last_grafana_backup` attribute.
    # 
    # @return [DateTime]
    # 
    def last_grafana_backup
      @last_grafana_backup
    end
    
    # 
    # Sets the value of the `last_grafana_backup` attribute.
    # 
    # @param value [DateTime]
    # 
    def last_grafana_backup=(value)
      @last_grafana_backup = value
    end
    
    # 
    # Returns the value of the `last_keycloak_backup` attribute.
    # 
    # @return [DateTime]
    # 
    def last_keycloak_backup
      @last_keycloak_backup
    end
    
    # 
    # Sets the value of the `last_keycloak_backup` attribute.
    # 
    # @param value [DateTime]
    # 
    def last_keycloak_backup=(value)
      @last_keycloak_backup = value
    end
    
    # 
    # Creates a new instance of the {EngineBackupInfo} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [DateTime] :last_cinder_backup The value of attribute `last_cinder_backup`.
    # 
    # @option opts [DateTime] :last_db_backup The value of attribute `last_db_backup`.
    # 
    # @option opts [DateTime] :last_dwh_backup The value of attribute `last_dwh_backup`.
    # 
    # @option opts [DateTime] :last_engine_backup The value of attribute `last_engine_backup`.
    # 
    # @option opts [DateTime] :last_grafana_backup The value of attribute `last_grafana_backup`.
    # 
    # @option opts [DateTime] :last_keycloak_backup The value of attribute `last_keycloak_backup`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.last_cinder_backup = opts[:last_cinder_backup]
      self.last_db_backup = opts[:last_db_backup]
      self.last_dwh_backup = opts[:last_dwh_backup]
      self.last_engine_backup = opts[:last_engine_backup]
      self.last_grafana_backup = opts[:last_grafana_backup]
      self.last_keycloak_backup = opts[:last_keycloak_backup]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @last_cinder_backup == other.last_cinder_backup &&
      @last_db_backup == other.last_db_backup &&
      @last_dwh_backup == other.last_dwh_backup &&
      @last_engine_backup == other.last_engine_backup &&
      @last_grafana_backup == other.last_grafana_backup &&
      @last_keycloak_backup == other.last_keycloak_backup
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @last_cinder_backup.hash +
      @last_db_backup.hash +
      @last_dwh_backup.hash +
      @last_engine_backup.hash +
      @last_grafana_backup.hash +
      @last_keycloak_backup.hash
    end
    
  end
  
  class EntityProfileDetail < Struct
    
    # 
    # Returns the value of the `profile_details` attribute.
    # 
    # @return [Array<ProfileDetail>]
    # 
    def profile_details
      @profile_details
    end
    
    # 
    # Sets the value of the `profile_details` attribute.
    # 
    # @param list [Array<ProfileDetail>]
    # 
    def profile_details=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = ProfileDetail.new(value)
          end
        end
      end
      @profile_details = list
    end
    
    # 
    # Creates a new instance of the {EntityProfileDetail} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<ProfileDetail>, Array<Hash>] :profile_details The values of attribute `profile_details`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.profile_details = opts[:profile_details]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @profile_details == other.profile_details
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @profile_details.hash
    end
    
  end
  
  class ErrorHandling < Struct
    
    # 
    # Returns the value of the `on_error` attribute.
    # 
    # @return [MigrateOnError]
    # 
    def on_error
      @on_error
    end
    
    # 
    # Sets the value of the `on_error` attribute.
    # 
    # @param value [MigrateOnError]
    # 
    def on_error=(value)
      @on_error = value
    end
    
    # 
    # Creates a new instance of the {ErrorHandling} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [MigrateOnError] :on_error The value of attribute `on_error`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.on_error = opts[:on_error]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @on_error == other.on_error
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @on_error.hash
    end
    
  end
  
  class ExternalTemplateImport < Struct
    
    # 
    # Returns the value of the `clone` attribute.
    # 
    # @return [Boolean]
    # 
    def clone
      @clone
    end
    
    # 
    # Sets the value of the `clone` attribute.
    # 
    # @param value [Boolean]
    # 
    def clone=(value)
      @clone = value
    end
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `cpu_profile` attribute.
    # 
    # @return [CpuProfile]
    # 
    def cpu_profile
      @cpu_profile
    end
    
    # 
    # Sets the value of the `cpu_profile` attribute.
    # 
    # @param value [CpuProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::CpuProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu_profile=(value)
      if value.is_a?(Hash)
        value = CpuProfile.new(value)
      end
      @cpu_profile = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `quota` attribute.
    # 
    # @return [Quota]
    # 
    def quota
      @quota
    end
    
    # 
    # Sets the value of the `quota` attribute.
    # 
    # @param value [Quota, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Quota} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def quota=(value)
      if value.is_a?(Hash)
        value = Quota.new(value)
      end
      @quota = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `url` attribute.
    # 
    # @return [String]
    # 
    def url
      @url
    end
    
    # 
    # Sets the value of the `url` attribute.
    # 
    # @param value [String]
    # 
    def url=(value)
      @url = value
    end
    
    # 
    # Creates a new instance of the {ExternalTemplateImport} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :clone The value of attribute `clone`.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [CpuProfile, Hash] :cpu_profile The value of attribute `cpu_profile`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [Quota, Hash] :quota The value of attribute `quota`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [String] :url The value of attribute `url`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.clone = opts[:clone]
      self.cluster = opts[:cluster]
      self.cpu_profile = opts[:cpu_profile]
      self.host = opts[:host]
      self.quota = opts[:quota]
      self.storage_domain = opts[:storage_domain]
      self.template = opts[:template]
      self.url = opts[:url]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @clone == other.clone &&
      @cluster == other.cluster &&
      @cpu_profile == other.cpu_profile &&
      @host == other.host &&
      @quota == other.quota &&
      @storage_domain == other.storage_domain &&
      @template == other.template &&
      @url == other.url
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @clone.hash +
      @cluster.hash +
      @cpu_profile.hash +
      @host.hash +
      @quota.hash +
      @storage_domain.hash +
      @template.hash +
      @url.hash
    end
    
  end
  
  class ExternalVmImport < Struct
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `cpu_profile` attribute.
    # 
    # @return [CpuProfile]
    # 
    def cpu_profile
      @cpu_profile
    end
    
    # 
    # Sets the value of the `cpu_profile` attribute.
    # 
    # @param value [CpuProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::CpuProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu_profile=(value)
      if value.is_a?(Hash)
        value = CpuProfile.new(value)
      end
      @cpu_profile = value
    end
    
    # 
    # Returns the value of the `drivers_iso` attribute.
    # 
    # @return [File]
    # 
    def drivers_iso
      @drivers_iso
    end
    
    # 
    # Sets the value of the `drivers_iso` attribute.
    # 
    # @param value [File, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::File} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def drivers_iso=(value)
      if value.is_a?(Hash)
        value = File.new(value)
      end
      @drivers_iso = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `provider` attribute.
    # 
    # @return [ExternalVmProviderType]
    # 
    def provider
      @provider
    end
    
    # 
    # Sets the value of the `provider` attribute.
    # 
    # @param value [ExternalVmProviderType]
    # 
    def provider=(value)
      @provider = value
    end
    
    # 
    # Returns the value of the `quota` attribute.
    # 
    # @return [Quota]
    # 
    def quota
      @quota
    end
    
    # 
    # Sets the value of the `quota` attribute.
    # 
    # @param value [Quota, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Quota} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def quota=(value)
      if value.is_a?(Hash)
        value = Quota.new(value)
      end
      @quota = value
    end
    
    # 
    # Returns the value of the `sparse` attribute.
    # 
    # @return [Boolean]
    # 
    def sparse
      @sparse
    end
    
    # 
    # Sets the value of the `sparse` attribute.
    # 
    # @param value [Boolean]
    # 
    def sparse=(value)
      @sparse = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `url` attribute.
    # 
    # @return [String]
    # 
    def url
      @url
    end
    
    # 
    # Sets the value of the `url` attribute.
    # 
    # @param value [String]
    # 
    def url=(value)
      @url = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {ExternalVmImport} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [CpuProfile, Hash] :cpu_profile The value of attribute `cpu_profile`.
    # 
    # @option opts [File, Hash] :drivers_iso The value of attribute `drivers_iso`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [ExternalVmProviderType] :provider The value of attribute `provider`.
    # 
    # @option opts [Quota, Hash] :quota The value of attribute `quota`.
    # 
    # @option opts [Boolean] :sparse The value of attribute `sparse`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [String] :url The value of attribute `url`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cluster = opts[:cluster]
      self.cpu_profile = opts[:cpu_profile]
      self.drivers_iso = opts[:drivers_iso]
      self.host = opts[:host]
      self.name = opts[:name]
      self.password = opts[:password]
      self.provider = opts[:provider]
      self.quota = opts[:quota]
      self.sparse = opts[:sparse]
      self.storage_domain = opts[:storage_domain]
      self.url = opts[:url]
      self.username = opts[:username]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cluster == other.cluster &&
      @cpu_profile == other.cpu_profile &&
      @drivers_iso == other.drivers_iso &&
      @host == other.host &&
      @name == other.name &&
      @password == other.password &&
      @provider == other.provider &&
      @quota == other.quota &&
      @sparse == other.sparse &&
      @storage_domain == other.storage_domain &&
      @url == other.url &&
      @username == other.username &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cluster.hash +
      @cpu_profile.hash +
      @drivers_iso.hash +
      @host.hash +
      @name.hash +
      @password.hash +
      @provider.hash +
      @quota.hash +
      @sparse.hash +
      @storage_domain.hash +
      @url.hash +
      @username.hash +
      @vm.hash
    end
    
  end
  
  class Fault < Struct
    
    # 
    # Returns the value of the `detail` attribute.
    # 
    # @return [String]
    # 
    def detail
      @detail
    end
    
    # 
    # Sets the value of the `detail` attribute.
    # 
    # @param value [String]
    # 
    def detail=(value)
      @detail = value
    end
    
    # 
    # Returns the value of the `reason` attribute.
    # 
    # @return [String]
    # 
    def reason
      @reason
    end
    
    # 
    # Sets the value of the `reason` attribute.
    # 
    # @param value [String]
    # 
    def reason=(value)
      @reason = value
    end
    
    # 
    # Creates a new instance of the {Fault} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :detail The value of attribute `detail`.
    # 
    # @option opts [String] :reason The value of attribute `reason`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.detail = opts[:detail]
      self.reason = opts[:reason]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @detail == other.detail &&
      @reason == other.reason
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @detail.hash +
      @reason.hash
    end
    
  end
  
  class FencingPolicy < Struct
    
    # 
    # Returns the value of the `enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def enabled
      @enabled
    end
    
    # 
    # Sets the value of the `enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def enabled=(value)
      @enabled = value
    end
    
    # 
    # Returns the value of the `skip_if_connectivity_broken` attribute.
    # 
    # @return [SkipIfConnectivityBroken]
    # 
    def skip_if_connectivity_broken
      @skip_if_connectivity_broken
    end
    
    # 
    # Sets the value of the `skip_if_connectivity_broken` attribute.
    # 
    # @param value [SkipIfConnectivityBroken, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SkipIfConnectivityBroken} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def skip_if_connectivity_broken=(value)
      if value.is_a?(Hash)
        value = SkipIfConnectivityBroken.new(value)
      end
      @skip_if_connectivity_broken = value
    end
    
    # 
    # Returns the value of the `skip_if_gluster_bricks_up` attribute.
    # 
    # @return [Boolean]
    # 
    def skip_if_gluster_bricks_up
      @skip_if_gluster_bricks_up
    end
    
    # 
    # Sets the value of the `skip_if_gluster_bricks_up` attribute.
    # 
    # @param value [Boolean]
    # 
    def skip_if_gluster_bricks_up=(value)
      @skip_if_gluster_bricks_up = value
    end
    
    # 
    # Returns the value of the `skip_if_gluster_quorum_not_met` attribute.
    # 
    # @return [Boolean]
    # 
    def skip_if_gluster_quorum_not_met
      @skip_if_gluster_quorum_not_met
    end
    
    # 
    # Sets the value of the `skip_if_gluster_quorum_not_met` attribute.
    # 
    # @param value [Boolean]
    # 
    def skip_if_gluster_quorum_not_met=(value)
      @skip_if_gluster_quorum_not_met = value
    end
    
    # 
    # Returns the value of the `skip_if_sd_active` attribute.
    # 
    # @return [SkipIfSdActive]
    # 
    def skip_if_sd_active
      @skip_if_sd_active
    end
    
    # 
    # Sets the value of the `skip_if_sd_active` attribute.
    # 
    # @param value [SkipIfSdActive, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SkipIfSdActive} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def skip_if_sd_active=(value)
      if value.is_a?(Hash)
        value = SkipIfSdActive.new(value)
      end
      @skip_if_sd_active = value
    end
    
    # 
    # Creates a new instance of the {FencingPolicy} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :enabled The value of attribute `enabled`.
    # 
    # @option opts [SkipIfConnectivityBroken, Hash] :skip_if_connectivity_broken The value of attribute `skip_if_connectivity_broken`.
    # 
    # @option opts [Boolean] :skip_if_gluster_bricks_up The value of attribute `skip_if_gluster_bricks_up`.
    # 
    # @option opts [Boolean] :skip_if_gluster_quorum_not_met The value of attribute `skip_if_gluster_quorum_not_met`.
    # 
    # @option opts [SkipIfSdActive, Hash] :skip_if_sd_active The value of attribute `skip_if_sd_active`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.enabled = opts[:enabled]
      self.skip_if_connectivity_broken = opts[:skip_if_connectivity_broken]
      self.skip_if_gluster_bricks_up = opts[:skip_if_gluster_bricks_up]
      self.skip_if_gluster_quorum_not_met = opts[:skip_if_gluster_quorum_not_met]
      self.skip_if_sd_active = opts[:skip_if_sd_active]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @enabled == other.enabled &&
      @skip_if_connectivity_broken == other.skip_if_connectivity_broken &&
      @skip_if_gluster_bricks_up == other.skip_if_gluster_bricks_up &&
      @skip_if_gluster_quorum_not_met == other.skip_if_gluster_quorum_not_met &&
      @skip_if_sd_active == other.skip_if_sd_active
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @enabled.hash +
      @skip_if_connectivity_broken.hash +
      @skip_if_gluster_bricks_up.hash +
      @skip_if_gluster_quorum_not_met.hash +
      @skip_if_sd_active.hash
    end
    
  end
  
  class FopStatistic < Struct
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Creates a new instance of the {FopStatistic} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.name = opts[:name]
      self.statistics = opts[:statistics]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @name == other.name &&
      @statistics == other.statistics
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @name.hash +
      @statistics.hash
    end
    
  end
  
  class GlusterBrickMemoryInfo < Struct
    
    # 
    # Returns the value of the `memory_pools` attribute.
    # 
    # @return [Array<GlusterMemoryPool>]
    # 
    def memory_pools
      @memory_pools
    end
    
    # 
    # Sets the value of the `memory_pools` attribute.
    # 
    # @param list [Array<GlusterMemoryPool>]
    # 
    def memory_pools=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = GlusterMemoryPool.new(value)
          end
        end
      end
      @memory_pools = list
    end
    
    # 
    # Creates a new instance of the {GlusterBrickMemoryInfo} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<GlusterMemoryPool>, Array<Hash>] :memory_pools The values of attribute `memory_pools`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.memory_pools = opts[:memory_pools]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @memory_pools == other.memory_pools
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @memory_pools.hash
    end
    
  end
  
  class GlusterClient < Struct
    
    # 
    # Returns the value of the `bytes_read` attribute.
    # 
    # @return [Integer]
    # 
    def bytes_read
      @bytes_read
    end
    
    # 
    # Sets the value of the `bytes_read` attribute.
    # 
    # @param value [Integer]
    # 
    def bytes_read=(value)
      @bytes_read = value
    end
    
    # 
    # Returns the value of the `bytes_written` attribute.
    # 
    # @return [Integer]
    # 
    def bytes_written
      @bytes_written
    end
    
    # 
    # Sets the value of the `bytes_written` attribute.
    # 
    # @param value [Integer]
    # 
    def bytes_written=(value)
      @bytes_written = value
    end
    
    # 
    # Returns the value of the `client_port` attribute.
    # 
    # @return [Integer]
    # 
    def client_port
      @client_port
    end
    
    # 
    # Sets the value of the `client_port` attribute.
    # 
    # @param value [Integer]
    # 
    def client_port=(value)
      @client_port = value
    end
    
    # 
    # Returns the value of the `host_name` attribute.
    # 
    # @return [String]
    # 
    def host_name
      @host_name
    end
    
    # 
    # Sets the value of the `host_name` attribute.
    # 
    # @param value [String]
    # 
    def host_name=(value)
      @host_name = value
    end
    
    # 
    # Creates a new instance of the {GlusterClient} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :bytes_read The value of attribute `bytes_read`.
    # 
    # @option opts [Integer] :bytes_written The value of attribute `bytes_written`.
    # 
    # @option opts [Integer] :client_port The value of attribute `client_port`.
    # 
    # @option opts [String] :host_name The value of attribute `host_name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.bytes_read = opts[:bytes_read]
      self.bytes_written = opts[:bytes_written]
      self.client_port = opts[:client_port]
      self.host_name = opts[:host_name]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @bytes_read == other.bytes_read &&
      @bytes_written == other.bytes_written &&
      @client_port == other.client_port &&
      @host_name == other.host_name
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @bytes_read.hash +
      @bytes_written.hash +
      @client_port.hash +
      @host_name.hash
    end
    
  end
  
  class GracePeriod < Struct
    
    # 
    # Returns the value of the `expiry` attribute.
    # 
    # @return [Integer]
    # 
    def expiry
      @expiry
    end
    
    # 
    # Sets the value of the `expiry` attribute.
    # 
    # @param value [Integer]
    # 
    def expiry=(value)
      @expiry = value
    end
    
    # 
    # Creates a new instance of the {GracePeriod} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :expiry The value of attribute `expiry`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.expiry = opts[:expiry]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @expiry == other.expiry
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @expiry.hash
    end
    
  end
  
  class GuestOperatingSystem < Struct
    
    # 
    # Returns the value of the `architecture` attribute.
    # 
    # @return [String]
    # 
    def architecture
      @architecture
    end
    
    # 
    # Sets the value of the `architecture` attribute.
    # 
    # @param value [String]
    # 
    def architecture=(value)
      @architecture = value
    end
    
    # 
    # Returns the value of the `codename` attribute.
    # 
    # @return [String]
    # 
    def codename
      @codename
    end
    
    # 
    # Sets the value of the `codename` attribute.
    # 
    # @param value [String]
    # 
    def codename=(value)
      @codename = value
    end
    
    # 
    # Returns the value of the `distribution` attribute.
    # 
    # @return [String]
    # 
    def distribution
      @distribution
    end
    
    # 
    # Sets the value of the `distribution` attribute.
    # 
    # @param value [String]
    # 
    def distribution=(value)
      @distribution = value
    end
    
    # 
    # Returns the value of the `family` attribute.
    # 
    # @return [String]
    # 
    def family
      @family
    end
    
    # 
    # Sets the value of the `family` attribute.
    # 
    # @param value [String]
    # 
    def family=(value)
      @family = value
    end
    
    # 
    # Returns the value of the `kernel` attribute.
    # 
    # @return [Kernel]
    # 
    def kernel
      @kernel
    end
    
    # 
    # Sets the value of the `kernel` attribute.
    # 
    # @param value [Kernel, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Kernel} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def kernel=(value)
      if value.is_a?(Hash)
        value = Kernel.new(value)
      end
      @kernel = value
    end
    
    # 
    # Returns the value of the `version` attribute.
    # 
    # @return [Version]
    # 
    def version
      @version
    end
    
    # 
    # Sets the value of the `version` attribute.
    # 
    # @param value [Version, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Version} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def version=(value)
      if value.is_a?(Hash)
        value = Version.new(value)
      end
      @version = value
    end
    
    # 
    # Creates a new instance of the {GuestOperatingSystem} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :architecture The value of attribute `architecture`.
    # 
    # @option opts [String] :codename The value of attribute `codename`.
    # 
    # @option opts [String] :distribution The value of attribute `distribution`.
    # 
    # @option opts [String] :family The value of attribute `family`.
    # 
    # @option opts [Kernel, Hash] :kernel The value of attribute `kernel`.
    # 
    # @option opts [Version, Hash] :version The value of attribute `version`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.architecture = opts[:architecture]
      self.codename = opts[:codename]
      self.distribution = opts[:distribution]
      self.family = opts[:family]
      self.kernel = opts[:kernel]
      self.version = opts[:version]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @architecture == other.architecture &&
      @codename == other.codename &&
      @distribution == other.distribution &&
      @family == other.family &&
      @kernel == other.kernel &&
      @version == other.version
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @architecture.hash +
      @codename.hash +
      @distribution.hash +
      @family.hash +
      @kernel.hash +
      @version.hash
    end
    
  end
  
  class HardwareInformation < Struct
    
    # 
    # Returns the value of the `family` attribute.
    # 
    # @return [String]
    # 
    def family
      @family
    end
    
    # 
    # Sets the value of the `family` attribute.
    # 
    # @param value [String]
    # 
    def family=(value)
      @family = value
    end
    
    # 
    # Returns the value of the `manufacturer` attribute.
    # 
    # @return [String]
    # 
    def manufacturer
      @manufacturer
    end
    
    # 
    # Sets the value of the `manufacturer` attribute.
    # 
    # @param value [String]
    # 
    def manufacturer=(value)
      @manufacturer = value
    end
    
    # 
    # Returns the value of the `product_name` attribute.
    # 
    # @return [String]
    # 
    def product_name
      @product_name
    end
    
    # 
    # Sets the value of the `product_name` attribute.
    # 
    # @param value [String]
    # 
    def product_name=(value)
      @product_name = value
    end
    
    # 
    # Returns the value of the `serial_number` attribute.
    # 
    # @return [String]
    # 
    def serial_number
      @serial_number
    end
    
    # 
    # Sets the value of the `serial_number` attribute.
    # 
    # @param value [String]
    # 
    def serial_number=(value)
      @serial_number = value
    end
    
    # 
    # Returns the value of the `supported_rng_sources` attribute.
    # 
    # @return [Array<RngSource>]
    # 
    def supported_rng_sources
      @supported_rng_sources
    end
    
    # 
    # Sets the value of the `supported_rng_sources` attribute.
    # 
    # @param list [Array<RngSource>]
    # 
    def supported_rng_sources=(list)
      @supported_rng_sources = list
    end
    
    # 
    # Returns the value of the `uuid` attribute.
    # 
    # @return [String]
    # 
    def uuid
      @uuid
    end
    
    # 
    # Sets the value of the `uuid` attribute.
    # 
    # @param value [String]
    # 
    def uuid=(value)
      @uuid = value
    end
    
    # 
    # Returns the value of the `version` attribute.
    # 
    # @return [String]
    # 
    def version
      @version
    end
    
    # 
    # Sets the value of the `version` attribute.
    # 
    # @param value [String]
    # 
    def version=(value)
      @version = value
    end
    
    # 
    # Creates a new instance of the {HardwareInformation} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :family The value of attribute `family`.
    # 
    # @option opts [String] :manufacturer The value of attribute `manufacturer`.
    # 
    # @option opts [String] :product_name The value of attribute `product_name`.
    # 
    # @option opts [String] :serial_number The value of attribute `serial_number`.
    # 
    # @option opts [Array<RngSource>, Array<Hash>] :supported_rng_sources The values of attribute `supported_rng_sources`.
    # 
    # @option opts [String] :uuid The value of attribute `uuid`.
    # 
    # @option opts [String] :version The value of attribute `version`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.family = opts[:family]
      self.manufacturer = opts[:manufacturer]
      self.product_name = opts[:product_name]
      self.serial_number = opts[:serial_number]
      self.supported_rng_sources = opts[:supported_rng_sources]
      self.uuid = opts[:uuid]
      self.version = opts[:version]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @family == other.family &&
      @manufacturer == other.manufacturer &&
      @product_name == other.product_name &&
      @serial_number == other.serial_number &&
      @supported_rng_sources == other.supported_rng_sources &&
      @uuid == other.uuid &&
      @version == other.version
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @family.hash +
      @manufacturer.hash +
      @product_name.hash +
      @serial_number.hash +
      @supported_rng_sources.hash +
      @uuid.hash +
      @version.hash
    end
    
  end
  
  class HighAvailability < Struct
    
    # 
    # Returns the value of the `enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def enabled
      @enabled
    end
    
    # 
    # Sets the value of the `enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def enabled=(value)
      @enabled = value
    end
    
    # 
    # Returns the value of the `priority` attribute.
    # 
    # @return [Integer]
    # 
    def priority
      @priority
    end
    
    # 
    # Sets the value of the `priority` attribute.
    # 
    # @param value [Integer]
    # 
    def priority=(value)
      @priority = value
    end
    
    # 
    # Creates a new instance of the {HighAvailability} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :enabled The value of attribute `enabled`.
    # 
    # @option opts [Integer] :priority The value of attribute `priority`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.enabled = opts[:enabled]
      self.priority = opts[:priority]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @enabled == other.enabled &&
      @priority == other.priority
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @enabled.hash +
      @priority.hash
    end
    
  end
  
  class HostDevicePassthrough < Struct
    
    # 
    # Returns the value of the `enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def enabled
      @enabled
    end
    
    # 
    # Sets the value of the `enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def enabled=(value)
      @enabled = value
    end
    
    # 
    # Creates a new instance of the {HostDevicePassthrough} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :enabled The value of attribute `enabled`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.enabled = opts[:enabled]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @enabled == other.enabled
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @enabled.hash
    end
    
  end
  
  class HostNicVirtualFunctionsConfiguration < Struct
    
    # 
    # Returns the value of the `all_networks_allowed` attribute.
    # 
    # @return [Boolean]
    # 
    def all_networks_allowed
      @all_networks_allowed
    end
    
    # 
    # Sets the value of the `all_networks_allowed` attribute.
    # 
    # @param value [Boolean]
    # 
    def all_networks_allowed=(value)
      @all_networks_allowed = value
    end
    
    # 
    # Returns the value of the `max_number_of_virtual_functions` attribute.
    # 
    # @return [Integer]
    # 
    def max_number_of_virtual_functions
      @max_number_of_virtual_functions
    end
    
    # 
    # Sets the value of the `max_number_of_virtual_functions` attribute.
    # 
    # @param value [Integer]
    # 
    def max_number_of_virtual_functions=(value)
      @max_number_of_virtual_functions = value
    end
    
    # 
    # Returns the value of the `number_of_virtual_functions` attribute.
    # 
    # @return [Integer]
    # 
    def number_of_virtual_functions
      @number_of_virtual_functions
    end
    
    # 
    # Sets the value of the `number_of_virtual_functions` attribute.
    # 
    # @param value [Integer]
    # 
    def number_of_virtual_functions=(value)
      @number_of_virtual_functions = value
    end
    
    # 
    # Creates a new instance of the {HostNicVirtualFunctionsConfiguration} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :all_networks_allowed The value of attribute `all_networks_allowed`.
    # 
    # @option opts [Integer] :max_number_of_virtual_functions The value of attribute `max_number_of_virtual_functions`.
    # 
    # @option opts [Integer] :number_of_virtual_functions The value of attribute `number_of_virtual_functions`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.all_networks_allowed = opts[:all_networks_allowed]
      self.max_number_of_virtual_functions = opts[:max_number_of_virtual_functions]
      self.number_of_virtual_functions = opts[:number_of_virtual_functions]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @all_networks_allowed == other.all_networks_allowed &&
      @max_number_of_virtual_functions == other.max_number_of_virtual_functions &&
      @number_of_virtual_functions == other.number_of_virtual_functions
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @all_networks_allowed.hash +
      @max_number_of_virtual_functions.hash +
      @number_of_virtual_functions.hash
    end
    
  end
  
  class HostedEngine < Struct
    
    # 
    # Returns the value of the `active` attribute.
    # 
    # @return [Boolean]
    # 
    def active
      @active
    end
    
    # 
    # Sets the value of the `active` attribute.
    # 
    # @param value [Boolean]
    # 
    def active=(value)
      @active = value
    end
    
    # 
    # Returns the value of the `configured` attribute.
    # 
    # @return [Boolean]
    # 
    def configured
      @configured
    end
    
    # 
    # Sets the value of the `configured` attribute.
    # 
    # @param value [Boolean]
    # 
    def configured=(value)
      @configured = value
    end
    
    # 
    # Returns the value of the `global_maintenance` attribute.
    # 
    # @return [Boolean]
    # 
    def global_maintenance
      @global_maintenance
    end
    
    # 
    # Sets the value of the `global_maintenance` attribute.
    # 
    # @param value [Boolean]
    # 
    def global_maintenance=(value)
      @global_maintenance = value
    end
    
    # 
    # Returns the value of the `local_maintenance` attribute.
    # 
    # @return [Boolean]
    # 
    def local_maintenance
      @local_maintenance
    end
    
    # 
    # Sets the value of the `local_maintenance` attribute.
    # 
    # @param value [Boolean]
    # 
    def local_maintenance=(value)
      @local_maintenance = value
    end
    
    # 
    # Returns the value of the `score` attribute.
    # 
    # @return [Integer]
    # 
    def score
      @score
    end
    
    # 
    # Sets the value of the `score` attribute.
    # 
    # @param value [Integer]
    # 
    def score=(value)
      @score = value
    end
    
    # 
    # Creates a new instance of the {HostedEngine} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :active The value of attribute `active`.
    # 
    # @option opts [Boolean] :configured The value of attribute `configured`.
    # 
    # @option opts [Boolean] :global_maintenance The value of attribute `global_maintenance`.
    # 
    # @option opts [Boolean] :local_maintenance The value of attribute `local_maintenance`.
    # 
    # @option opts [Integer] :score The value of attribute `score`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.active = opts[:active]
      self.configured = opts[:configured]
      self.global_maintenance = opts[:global_maintenance]
      self.local_maintenance = opts[:local_maintenance]
      self.score = opts[:score]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @active == other.active &&
      @configured == other.configured &&
      @global_maintenance == other.global_maintenance &&
      @local_maintenance == other.local_maintenance &&
      @score == other.score
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @active.hash +
      @configured.hash +
      @global_maintenance.hash +
      @local_maintenance.hash +
      @score.hash
    end
    
  end
  
  class Identified < Struct
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {Identified} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.comment = opts[:comment]
      self.description = opts[:description]
      self.id = opts[:id]
      self.name = opts[:name]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @comment == other.comment &&
      @description == other.description &&
      @id == other.id &&
      @name == other.name
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @comment.hash +
      @description.hash +
      @id.hash +
      @name.hash
    end
    
  end
  
  class Image < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `size` attribute.
    # 
    # @return [Integer]
    # 
    def size
      @size
    end
    
    # 
    # Sets the value of the `size` attribute.
    # 
    # @param value [Integer]
    # 
    def size=(value)
      @size = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [ImageFileType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [ImageFileType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Creates a new instance of the {Image} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Integer] :size The value of attribute `size`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [ImageFileType] :type The value of attribute `type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.size = opts[:size]
      self.storage_domain = opts[:storage_domain]
      self.type = opts[:type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @size == other.size &&
      @storage_domain == other.storage_domain &&
      @type == other.type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @size.hash +
      @storage_domain.hash +
      @type.hash
    end
    
  end
  
  class ImageTransfer < Identified
    
    # 
    # Returns the value of the `active` attribute.
    # 
    # @return [Boolean]
    # 
    def active
      @active
    end
    
    # 
    # Sets the value of the `active` attribute.
    # 
    # @param value [Boolean]
    # 
    def active=(value)
      @active = value
    end
    
    # 
    # Returns the value of the `backup` attribute.
    # 
    # @return [Backup]
    # 
    def backup
      @backup
    end
    
    # 
    # Sets the value of the `backup` attribute.
    # 
    # @param value [Backup, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Backup} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def backup=(value)
      if value.is_a?(Hash)
        value = Backup.new(value)
      end
      @backup = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `direction` attribute.
    # 
    # @return [ImageTransferDirection]
    # 
    def direction
      @direction
    end
    
    # 
    # Sets the value of the `direction` attribute.
    # 
    # @param value [ImageTransferDirection]
    # 
    def direction=(value)
      @direction = value
    end
    
    # 
    # Returns the value of the `disk` attribute.
    # 
    # @return [Disk]
    # 
    def disk
      @disk
    end
    
    # 
    # Sets the value of the `disk` attribute.
    # 
    # @param value [Disk, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Disk} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def disk=(value)
      if value.is_a?(Hash)
        value = Disk.new(value)
      end
      @disk = value
    end
    
    # 
    # Returns the value of the `format` attribute.
    # 
    # @return [DiskFormat]
    # 
    def format
      @format
    end
    
    # 
    # Sets the value of the `format` attribute.
    # 
    # @param value [DiskFormat]
    # 
    def format=(value)
      @format = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `image` attribute.
    # 
    # @return [Image]
    # 
    def image
      @image
    end
    
    # 
    # Sets the value of the `image` attribute.
    # 
    # @param value [Image, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Image} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def image=(value)
      if value.is_a?(Hash)
        value = Image.new(value)
      end
      @image = value
    end
    
    # 
    # Returns the value of the `inactivity_timeout` attribute.
    # 
    # @return [Integer]
    # 
    def inactivity_timeout
      @inactivity_timeout
    end
    
    # 
    # Sets the value of the `inactivity_timeout` attribute.
    # 
    # @param value [Integer]
    # 
    def inactivity_timeout=(value)
      @inactivity_timeout = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `phase` attribute.
    # 
    # @return [ImageTransferPhase]
    # 
    def phase
      @phase
    end
    
    # 
    # Sets the value of the `phase` attribute.
    # 
    # @param value [ImageTransferPhase]
    # 
    def phase=(value)
      @phase = value
    end
    
    # 
    # Returns the value of the `proxy_url` attribute.
    # 
    # @return [String]
    # 
    def proxy_url
      @proxy_url
    end
    
    # 
    # Sets the value of the `proxy_url` attribute.
    # 
    # @param value [String]
    # 
    def proxy_url=(value)
      @proxy_url = value
    end
    
    # 
    # Returns the value of the `shallow` attribute.
    # 
    # @return [Boolean]
    # 
    def shallow
      @shallow
    end
    
    # 
    # Sets the value of the `shallow` attribute.
    # 
    # @param value [Boolean]
    # 
    def shallow=(value)
      @shallow = value
    end
    
    # 
    # Returns the value of the `snapshot` attribute.
    # 
    # @return [DiskSnapshot]
    # 
    def snapshot
      @snapshot
    end
    
    # 
    # Sets the value of the `snapshot` attribute.
    # 
    # @param value [DiskSnapshot, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DiskSnapshot} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def snapshot=(value)
      if value.is_a?(Hash)
        value = DiskSnapshot.new(value)
      end
      @snapshot = value
    end
    
    # 
    # Returns the value of the `timeout_policy` attribute.
    # 
    # @return [ImageTransferTimeoutPolicy]
    # 
    def timeout_policy
      @timeout_policy
    end
    
    # 
    # Sets the value of the `timeout_policy` attribute.
    # 
    # @param value [ImageTransferTimeoutPolicy]
    # 
    def timeout_policy=(value)
      @timeout_policy = value
    end
    
    # 
    # Returns the value of the `transfer_url` attribute.
    # 
    # @return [String]
    # 
    def transfer_url
      @transfer_url
    end
    
    # 
    # Sets the value of the `transfer_url` attribute.
    # 
    # @param value [String]
    # 
    def transfer_url=(value)
      @transfer_url = value
    end
    
    # 
    # Returns the value of the `transferred` attribute.
    # 
    # @return [Integer]
    # 
    def transferred
      @transferred
    end
    
    # 
    # Sets the value of the `transferred` attribute.
    # 
    # @param value [Integer]
    # 
    def transferred=(value)
      @transferred = value
    end
    
    # 
    # Creates a new instance of the {ImageTransfer} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :active The value of attribute `active`.
    # 
    # @option opts [Backup, Hash] :backup The value of attribute `backup`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [ImageTransferDirection] :direction The value of attribute `direction`.
    # 
    # @option opts [Disk, Hash] :disk The value of attribute `disk`.
    # 
    # @option opts [DiskFormat] :format The value of attribute `format`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Image, Hash] :image The value of attribute `image`.
    # 
    # @option opts [Integer] :inactivity_timeout The value of attribute `inactivity_timeout`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [ImageTransferPhase] :phase The value of attribute `phase`.
    # 
    # @option opts [String] :proxy_url The value of attribute `proxy_url`.
    # 
    # @option opts [Boolean] :shallow The value of attribute `shallow`.
    # 
    # @option opts [DiskSnapshot, Hash] :snapshot The value of attribute `snapshot`.
    # 
    # @option opts [ImageTransferTimeoutPolicy] :timeout_policy The value of attribute `timeout_policy`.
    # 
    # @option opts [String] :transfer_url The value of attribute `transfer_url`.
    # 
    # @option opts [Integer] :transferred The value of attribute `transferred`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.active = opts[:active]
      self.backup = opts[:backup]
      self.direction = opts[:direction]
      self.disk = opts[:disk]
      self.format = opts[:format]
      self.host = opts[:host]
      self.image = opts[:image]
      self.inactivity_timeout = opts[:inactivity_timeout]
      self.phase = opts[:phase]
      self.proxy_url = opts[:proxy_url]
      self.shallow = opts[:shallow]
      self.snapshot = opts[:snapshot]
      self.timeout_policy = opts[:timeout_policy]
      self.transfer_url = opts[:transfer_url]
      self.transferred = opts[:transferred]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @active == other.active &&
      @backup == other.backup &&
      @direction == other.direction &&
      @disk == other.disk &&
      @format == other.format &&
      @host == other.host &&
      @image == other.image &&
      @inactivity_timeout == other.inactivity_timeout &&
      @phase == other.phase &&
      @proxy_url == other.proxy_url &&
      @shallow == other.shallow &&
      @snapshot == other.snapshot &&
      @timeout_policy == other.timeout_policy &&
      @transfer_url == other.transfer_url &&
      @transferred == other.transferred
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @active.hash +
      @backup.hash +
      @direction.hash +
      @disk.hash +
      @format.hash +
      @host.hash +
      @image.hash +
      @inactivity_timeout.hash +
      @phase.hash +
      @proxy_url.hash +
      @shallow.hash +
      @snapshot.hash +
      @timeout_policy.hash +
      @transfer_url.hash +
      @transferred.hash
    end
    
  end
  
  class Initialization < Struct
    
    # 
    # Returns the value of the `active_directory_ou` attribute.
    # 
    # @return [String]
    # 
    def active_directory_ou
      @active_directory_ou
    end
    
    # 
    # Sets the value of the `active_directory_ou` attribute.
    # 
    # @param value [String]
    # 
    def active_directory_ou=(value)
      @active_directory_ou = value
    end
    
    # 
    # Returns the value of the `authorized_ssh_keys` attribute.
    # 
    # @return [String]
    # 
    def authorized_ssh_keys
      @authorized_ssh_keys
    end
    
    # 
    # Sets the value of the `authorized_ssh_keys` attribute.
    # 
    # @param value [String]
    # 
    def authorized_ssh_keys=(value)
      @authorized_ssh_keys = value
    end
    
    # 
    # Returns the value of the `cloud_init` attribute.
    # 
    # @return [CloudInit]
    # 
    def cloud_init
      @cloud_init
    end
    
    # 
    # Sets the value of the `cloud_init` attribute.
    # 
    # @param value [CloudInit, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::CloudInit} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cloud_init=(value)
      if value.is_a?(Hash)
        value = CloudInit.new(value)
      end
      @cloud_init = value
    end
    
    # 
    # Returns the value of the `cloud_init_network_protocol` attribute.
    # 
    # @return [CloudInitNetworkProtocol]
    # 
    def cloud_init_network_protocol
      @cloud_init_network_protocol
    end
    
    # 
    # Sets the value of the `cloud_init_network_protocol` attribute.
    # 
    # @param value [CloudInitNetworkProtocol]
    # 
    def cloud_init_network_protocol=(value)
      @cloud_init_network_protocol = value
    end
    
    # 
    # Returns the value of the `configuration` attribute.
    # 
    # @return [Configuration]
    # 
    def configuration
      @configuration
    end
    
    # 
    # Sets the value of the `configuration` attribute.
    # 
    # @param value [Configuration, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Configuration} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def configuration=(value)
      if value.is_a?(Hash)
        value = Configuration.new(value)
      end
      @configuration = value
    end
    
    # 
    # Returns the value of the `custom_script` attribute.
    # 
    # @return [String]
    # 
    def custom_script
      @custom_script
    end
    
    # 
    # Sets the value of the `custom_script` attribute.
    # 
    # @param value [String]
    # 
    def custom_script=(value)
      @custom_script = value
    end
    
    # 
    # Returns the value of the `dns_search` attribute.
    # 
    # @return [String]
    # 
    def dns_search
      @dns_search
    end
    
    # 
    # Sets the value of the `dns_search` attribute.
    # 
    # @param value [String]
    # 
    def dns_search=(value)
      @dns_search = value
    end
    
    # 
    # Returns the value of the `dns_servers` attribute.
    # 
    # @return [String]
    # 
    def dns_servers
      @dns_servers
    end
    
    # 
    # Sets the value of the `dns_servers` attribute.
    # 
    # @param value [String]
    # 
    def dns_servers=(value)
      @dns_servers = value
    end
    
    # 
    # Returns the value of the `domain` attribute.
    # 
    # @return [String]
    # 
    def domain
      @domain
    end
    
    # 
    # Sets the value of the `domain` attribute.
    # 
    # @param value [String]
    # 
    def domain=(value)
      @domain = value
    end
    
    # 
    # Returns the value of the `host_name` attribute.
    # 
    # @return [String]
    # 
    def host_name
      @host_name
    end
    
    # 
    # Sets the value of the `host_name` attribute.
    # 
    # @param value [String]
    # 
    def host_name=(value)
      @host_name = value
    end
    
    # 
    # Returns the value of the `input_locale` attribute.
    # 
    # @return [String]
    # 
    def input_locale
      @input_locale
    end
    
    # 
    # Sets the value of the `input_locale` attribute.
    # 
    # @param value [String]
    # 
    def input_locale=(value)
      @input_locale = value
    end
    
    # 
    # Returns the value of the `nic_configurations` attribute.
    # 
    # @return [Array<NicConfiguration>]
    # 
    def nic_configurations
      @nic_configurations
    end
    
    # 
    # Sets the value of the `nic_configurations` attribute.
    # 
    # @param list [Array<NicConfiguration>]
    # 
    def nic_configurations=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NicConfiguration.new(value)
          end
        end
      end
      @nic_configurations = list
    end
    
    # 
    # Returns the value of the `org_name` attribute.
    # 
    # @return [String]
    # 
    def org_name
      @org_name
    end
    
    # 
    # Sets the value of the `org_name` attribute.
    # 
    # @param value [String]
    # 
    def org_name=(value)
      @org_name = value
    end
    
    # 
    # Returns the value of the `regenerate_ids` attribute.
    # 
    # @return [Boolean]
    # 
    def regenerate_ids
      @regenerate_ids
    end
    
    # 
    # Sets the value of the `regenerate_ids` attribute.
    # 
    # @param value [Boolean]
    # 
    def regenerate_ids=(value)
      @regenerate_ids = value
    end
    
    # 
    # Returns the value of the `regenerate_ssh_keys` attribute.
    # 
    # @return [Boolean]
    # 
    def regenerate_ssh_keys
      @regenerate_ssh_keys
    end
    
    # 
    # Sets the value of the `regenerate_ssh_keys` attribute.
    # 
    # @param value [Boolean]
    # 
    def regenerate_ssh_keys=(value)
      @regenerate_ssh_keys = value
    end
    
    # 
    # Returns the value of the `root_password` attribute.
    # 
    # @return [String]
    # 
    def root_password
      @root_password
    end
    
    # 
    # Sets the value of the `root_password` attribute.
    # 
    # @param value [String]
    # 
    def root_password=(value)
      @root_password = value
    end
    
    # 
    # Returns the value of the `system_locale` attribute.
    # 
    # @return [String]
    # 
    def system_locale
      @system_locale
    end
    
    # 
    # Sets the value of the `system_locale` attribute.
    # 
    # @param value [String]
    # 
    def system_locale=(value)
      @system_locale = value
    end
    
    # 
    # Returns the value of the `timezone` attribute.
    # 
    # @return [String]
    # 
    def timezone
      @timezone
    end
    
    # 
    # Sets the value of the `timezone` attribute.
    # 
    # @param value [String]
    # 
    def timezone=(value)
      @timezone = value
    end
    
    # 
    # Returns the value of the `ui_language` attribute.
    # 
    # @return [String]
    # 
    def ui_language
      @ui_language
    end
    
    # 
    # Sets the value of the `ui_language` attribute.
    # 
    # @param value [String]
    # 
    def ui_language=(value)
      @ui_language = value
    end
    
    # 
    # Returns the value of the `user_locale` attribute.
    # 
    # @return [String]
    # 
    def user_locale
      @user_locale
    end
    
    # 
    # Sets the value of the `user_locale` attribute.
    # 
    # @param value [String]
    # 
    def user_locale=(value)
      @user_locale = value
    end
    
    # 
    # Returns the value of the `user_name` attribute.
    # 
    # @return [String]
    # 
    def user_name
      @user_name
    end
    
    # 
    # Sets the value of the `user_name` attribute.
    # 
    # @param value [String]
    # 
    def user_name=(value)
      @user_name = value
    end
    
    # 
    # Returns the value of the `windows_license_key` attribute.
    # 
    # @return [String]
    # 
    def windows_license_key
      @windows_license_key
    end
    
    # 
    # Sets the value of the `windows_license_key` attribute.
    # 
    # @param value [String]
    # 
    def windows_license_key=(value)
      @windows_license_key = value
    end
    
    # 
    # Creates a new instance of the {Initialization} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :active_directory_ou The value of attribute `active_directory_ou`.
    # 
    # @option opts [String] :authorized_ssh_keys The value of attribute `authorized_ssh_keys`.
    # 
    # @option opts [CloudInit, Hash] :cloud_init The value of attribute `cloud_init`.
    # 
    # @option opts [CloudInitNetworkProtocol] :cloud_init_network_protocol The value of attribute `cloud_init_network_protocol`.
    # 
    # @option opts [Configuration, Hash] :configuration The value of attribute `configuration`.
    # 
    # @option opts [String] :custom_script The value of attribute `custom_script`.
    # 
    # @option opts [String] :dns_search The value of attribute `dns_search`.
    # 
    # @option opts [String] :dns_servers The value of attribute `dns_servers`.
    # 
    # @option opts [String] :domain The value of attribute `domain`.
    # 
    # @option opts [String] :host_name The value of attribute `host_name`.
    # 
    # @option opts [String] :input_locale The value of attribute `input_locale`.
    # 
    # @option opts [Array<NicConfiguration>, Array<Hash>] :nic_configurations The values of attribute `nic_configurations`.
    # 
    # @option opts [String] :org_name The value of attribute `org_name`.
    # 
    # @option opts [Boolean] :regenerate_ids The value of attribute `regenerate_ids`.
    # 
    # @option opts [Boolean] :regenerate_ssh_keys The value of attribute `regenerate_ssh_keys`.
    # 
    # @option opts [String] :root_password The value of attribute `root_password`.
    # 
    # @option opts [String] :system_locale The value of attribute `system_locale`.
    # 
    # @option opts [String] :timezone The value of attribute `timezone`.
    # 
    # @option opts [String] :ui_language The value of attribute `ui_language`.
    # 
    # @option opts [String] :user_locale The value of attribute `user_locale`.
    # 
    # @option opts [String] :user_name The value of attribute `user_name`.
    # 
    # @option opts [String] :windows_license_key The value of attribute `windows_license_key`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.active_directory_ou = opts[:active_directory_ou]
      self.authorized_ssh_keys = opts[:authorized_ssh_keys]
      self.cloud_init = opts[:cloud_init]
      self.cloud_init_network_protocol = opts[:cloud_init_network_protocol]
      self.configuration = opts[:configuration]
      self.custom_script = opts[:custom_script]
      self.dns_search = opts[:dns_search]
      self.dns_servers = opts[:dns_servers]
      self.domain = opts[:domain]
      self.host_name = opts[:host_name]
      self.input_locale = opts[:input_locale]
      self.nic_configurations = opts[:nic_configurations]
      self.org_name = opts[:org_name]
      self.regenerate_ids = opts[:regenerate_ids]
      self.regenerate_ssh_keys = opts[:regenerate_ssh_keys]
      self.root_password = opts[:root_password]
      self.system_locale = opts[:system_locale]
      self.timezone = opts[:timezone]
      self.ui_language = opts[:ui_language]
      self.user_locale = opts[:user_locale]
      self.user_name = opts[:user_name]
      self.windows_license_key = opts[:windows_license_key]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @active_directory_ou == other.active_directory_ou &&
      @authorized_ssh_keys == other.authorized_ssh_keys &&
      @cloud_init == other.cloud_init &&
      @cloud_init_network_protocol == other.cloud_init_network_protocol &&
      @configuration == other.configuration &&
      @custom_script == other.custom_script &&
      @dns_search == other.dns_search &&
      @dns_servers == other.dns_servers &&
      @domain == other.domain &&
      @host_name == other.host_name &&
      @input_locale == other.input_locale &&
      @nic_configurations == other.nic_configurations &&
      @org_name == other.org_name &&
      @regenerate_ids == other.regenerate_ids &&
      @regenerate_ssh_keys == other.regenerate_ssh_keys &&
      @root_password == other.root_password &&
      @system_locale == other.system_locale &&
      @timezone == other.timezone &&
      @ui_language == other.ui_language &&
      @user_locale == other.user_locale &&
      @user_name == other.user_name &&
      @windows_license_key == other.windows_license_key
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @active_directory_ou.hash +
      @authorized_ssh_keys.hash +
      @cloud_init.hash +
      @cloud_init_network_protocol.hash +
      @configuration.hash +
      @custom_script.hash +
      @dns_search.hash +
      @dns_servers.hash +
      @domain.hash +
      @host_name.hash +
      @input_locale.hash +
      @nic_configurations.hash +
      @org_name.hash +
      @regenerate_ids.hash +
      @regenerate_ssh_keys.hash +
      @root_password.hash +
      @system_locale.hash +
      @timezone.hash +
      @ui_language.hash +
      @user_locale.hash +
      @user_name.hash +
      @windows_license_key.hash
    end
    
  end
  
  class Io < Struct
    
    # 
    # Returns the value of the `threads` attribute.
    # 
    # @return [Integer]
    # 
    def threads
      @threads
    end
    
    # 
    # Sets the value of the `threads` attribute.
    # 
    # @param value [Integer]
    # 
    def threads=(value)
      @threads = value
    end
    
    # 
    # Creates a new instance of the {Io} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :threads The value of attribute `threads`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.threads = opts[:threads]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @threads == other.threads
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @threads.hash
    end
    
  end
  
  class Ip < Struct
    
    # 
    # Returns the value of the `address` attribute.
    # 
    # @return [String]
    # 
    def address
      @address
    end
    
    # 
    # Sets the value of the `address` attribute.
    # 
    # @param value [String]
    # 
    def address=(value)
      @address = value
    end
    
    # 
    # Returns the value of the `gateway` attribute.
    # 
    # @return [String]
    # 
    def gateway
      @gateway
    end
    
    # 
    # Sets the value of the `gateway` attribute.
    # 
    # @param value [String]
    # 
    def gateway=(value)
      @gateway = value
    end
    
    # 
    # Returns the value of the `netmask` attribute.
    # 
    # @return [String]
    # 
    def netmask
      @netmask
    end
    
    # 
    # Sets the value of the `netmask` attribute.
    # 
    # @param value [String]
    # 
    def netmask=(value)
      @netmask = value
    end
    
    # 
    # Returns the value of the `version` attribute.
    # 
    # @return [IpVersion]
    # 
    def version
      @version
    end
    
    # 
    # Sets the value of the `version` attribute.
    # 
    # @param value [IpVersion]
    # 
    def version=(value)
      @version = value
    end
    
    # 
    # Creates a new instance of the {Ip} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :address The value of attribute `address`.
    # 
    # @option opts [String] :gateway The value of attribute `gateway`.
    # 
    # @option opts [String] :netmask The value of attribute `netmask`.
    # 
    # @option opts [IpVersion] :version The value of attribute `version`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.address = opts[:address]
      self.gateway = opts[:gateway]
      self.netmask = opts[:netmask]
      self.version = opts[:version]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @address == other.address &&
      @gateway == other.gateway &&
      @netmask == other.netmask &&
      @version == other.version
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @address.hash +
      @gateway.hash +
      @netmask.hash +
      @version.hash
    end
    
  end
  
  class IpAddressAssignment < Struct
    
    # 
    # Returns the value of the `assignment_method` attribute.
    # 
    # @return [BootProtocol]
    # 
    def assignment_method
      @assignment_method
    end
    
    # 
    # Sets the value of the `assignment_method` attribute.
    # 
    # @param value [BootProtocol]
    # 
    def assignment_method=(value)
      @assignment_method = value
    end
    
    # 
    # Returns the value of the `ip` attribute.
    # 
    # @return [Ip]
    # 
    def ip
      @ip
    end
    
    # 
    # Sets the value of the `ip` attribute.
    # 
    # @param value [Ip, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Ip} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def ip=(value)
      if value.is_a?(Hash)
        value = Ip.new(value)
      end
      @ip = value
    end
    
    # 
    # Creates a new instance of the {IpAddressAssignment} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [BootProtocol] :assignment_method The value of attribute `assignment_method`.
    # 
    # @option opts [Ip, Hash] :ip The value of attribute `ip`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.assignment_method = opts[:assignment_method]
      self.ip = opts[:ip]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @assignment_method == other.assignment_method &&
      @ip == other.ip
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @assignment_method.hash +
      @ip.hash
    end
    
  end
  
  class IscsiBond < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `data_center` attribute.
    # 
    # @return [DataCenter]
    # 
    def data_center
      @data_center
    end
    
    # 
    # Sets the value of the `data_center` attribute.
    # 
    # @param value [DataCenter, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DataCenter} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def data_center=(value)
      if value.is_a?(Hash)
        value = DataCenter.new(value)
      end
      @data_center = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `networks` attribute.
    # 
    # @return [Array<Network>]
    # 
    def networks
      @networks
    end
    
    # 
    # Sets the value of the `networks` attribute.
    # 
    # @param list [Array<Network>]
    # 
    def networks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Network.new(value)
          end
        end
      end
      @networks = list
    end
    
    # 
    # Returns the value of the `storage_connections` attribute.
    # 
    # @return [Array<StorageConnection>]
    # 
    def storage_connections
      @storage_connections
    end
    
    # 
    # Sets the value of the `storage_connections` attribute.
    # 
    # @param list [Array<StorageConnection>]
    # 
    def storage_connections=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = StorageConnection.new(value)
          end
        end
      end
      @storage_connections = list
    end
    
    # 
    # Creates a new instance of the {IscsiBond} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [DataCenter, Hash] :data_center The value of attribute `data_center`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Network>, Array<Hash>] :networks The values of attribute `networks`.
    # 
    # @option opts [Array<StorageConnection>, Array<Hash>] :storage_connections The values of attribute `storage_connections`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.data_center = opts[:data_center]
      self.networks = opts[:networks]
      self.storage_connections = opts[:storage_connections]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @data_center == other.data_center &&
      @networks == other.networks &&
      @storage_connections == other.storage_connections
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @data_center.hash +
      @networks.hash +
      @storage_connections.hash
    end
    
  end
  
  class IscsiDetails < Struct
    
    # 
    # Returns the value of the `address` attribute.
    # 
    # @return [String]
    # 
    def address
      @address
    end
    
    # 
    # Sets the value of the `address` attribute.
    # 
    # @param value [String]
    # 
    def address=(value)
      @address = value
    end
    
    # 
    # Returns the value of the `disk_id` attribute.
    # 
    # @return [String]
    # 
    def disk_id
      @disk_id
    end
    
    # 
    # Sets the value of the `disk_id` attribute.
    # 
    # @param value [String]
    # 
    def disk_id=(value)
      @disk_id = value
    end
    
    # 
    # Returns the value of the `initiator` attribute.
    # 
    # @return [String]
    # 
    def initiator
      @initiator
    end
    
    # 
    # Sets the value of the `initiator` attribute.
    # 
    # @param value [String]
    # 
    def initiator=(value)
      @initiator = value
    end
    
    # 
    # Returns the value of the `lun_mapping` attribute.
    # 
    # @return [Integer]
    # 
    def lun_mapping
      @lun_mapping
    end
    
    # 
    # Sets the value of the `lun_mapping` attribute.
    # 
    # @param value [Integer]
    # 
    def lun_mapping=(value)
      @lun_mapping = value
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `paths` attribute.
    # 
    # @return [Integer]
    # 
    def paths
      @paths
    end
    
    # 
    # Sets the value of the `paths` attribute.
    # 
    # @param value [Integer]
    # 
    def paths=(value)
      @paths = value
    end
    
    # 
    # Returns the value of the `port` attribute.
    # 
    # @return [Integer]
    # 
    def port
      @port
    end
    
    # 
    # Sets the value of the `port` attribute.
    # 
    # @param value [Integer]
    # 
    def port=(value)
      @port = value
    end
    
    # 
    # Returns the value of the `portal` attribute.
    # 
    # @return [String]
    # 
    def portal
      @portal
    end
    
    # 
    # Sets the value of the `portal` attribute.
    # 
    # @param value [String]
    # 
    def portal=(value)
      @portal = value
    end
    
    # 
    # Returns the value of the `product_id` attribute.
    # 
    # @return [String]
    # 
    def product_id
      @product_id
    end
    
    # 
    # Sets the value of the `product_id` attribute.
    # 
    # @param value [String]
    # 
    def product_id=(value)
      @product_id = value
    end
    
    # 
    # Returns the value of the `serial` attribute.
    # 
    # @return [String]
    # 
    def serial
      @serial
    end
    
    # 
    # Sets the value of the `serial` attribute.
    # 
    # @param value [String]
    # 
    def serial=(value)
      @serial = value
    end
    
    # 
    # Returns the value of the `size` attribute.
    # 
    # @return [Integer]
    # 
    def size
      @size
    end
    
    # 
    # Sets the value of the `size` attribute.
    # 
    # @param value [Integer]
    # 
    def size=(value)
      @size = value
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [String]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [String]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `storage_domain_id` attribute.
    # 
    # @return [String]
    # 
    def storage_domain_id
      @storage_domain_id
    end
    
    # 
    # Sets the value of the `storage_domain_id` attribute.
    # 
    # @param value [String]
    # 
    def storage_domain_id=(value)
      @storage_domain_id = value
    end
    
    # 
    # Returns the value of the `target` attribute.
    # 
    # @return [String]
    # 
    def target
      @target
    end
    
    # 
    # Sets the value of the `target` attribute.
    # 
    # @param value [String]
    # 
    def target=(value)
      @target = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Returns the value of the `vendor_id` attribute.
    # 
    # @return [String]
    # 
    def vendor_id
      @vendor_id
    end
    
    # 
    # Sets the value of the `vendor_id` attribute.
    # 
    # @param value [String]
    # 
    def vendor_id=(value)
      @vendor_id = value
    end
    
    # 
    # Returns the value of the `volume_group_id` attribute.
    # 
    # @return [String]
    # 
    def volume_group_id
      @volume_group_id
    end
    
    # 
    # Sets the value of the `volume_group_id` attribute.
    # 
    # @param value [String]
    # 
    def volume_group_id=(value)
      @volume_group_id = value
    end
    
    # 
    # Creates a new instance of the {IscsiDetails} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :address The value of attribute `address`.
    # 
    # @option opts [String] :disk_id The value of attribute `disk_id`.
    # 
    # @option opts [String] :initiator The value of attribute `initiator`.
    # 
    # @option opts [Integer] :lun_mapping The value of attribute `lun_mapping`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [Integer] :paths The value of attribute `paths`.
    # 
    # @option opts [Integer] :port The value of attribute `port`.
    # 
    # @option opts [String] :portal The value of attribute `portal`.
    # 
    # @option opts [String] :product_id The value of attribute `product_id`.
    # 
    # @option opts [String] :serial The value of attribute `serial`.
    # 
    # @option opts [Integer] :size The value of attribute `size`.
    # 
    # @option opts [String] :status The value of attribute `status`.
    # 
    # @option opts [String] :storage_domain_id The value of attribute `storage_domain_id`.
    # 
    # @option opts [String] :target The value of attribute `target`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # @option opts [String] :vendor_id The value of attribute `vendor_id`.
    # 
    # @option opts [String] :volume_group_id The value of attribute `volume_group_id`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.address = opts[:address]
      self.disk_id = opts[:disk_id]
      self.initiator = opts[:initiator]
      self.lun_mapping = opts[:lun_mapping]
      self.password = opts[:password]
      self.paths = opts[:paths]
      self.port = opts[:port]
      self.portal = opts[:portal]
      self.product_id = opts[:product_id]
      self.serial = opts[:serial]
      self.size = opts[:size]
      self.status = opts[:status]
      self.storage_domain_id = opts[:storage_domain_id]
      self.target = opts[:target]
      self.username = opts[:username]
      self.vendor_id = opts[:vendor_id]
      self.volume_group_id = opts[:volume_group_id]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @address == other.address &&
      @disk_id == other.disk_id &&
      @initiator == other.initiator &&
      @lun_mapping == other.lun_mapping &&
      @password == other.password &&
      @paths == other.paths &&
      @port == other.port &&
      @portal == other.portal &&
      @product_id == other.product_id &&
      @serial == other.serial &&
      @size == other.size &&
      @status == other.status &&
      @storage_domain_id == other.storage_domain_id &&
      @target == other.target &&
      @username == other.username &&
      @vendor_id == other.vendor_id &&
      @volume_group_id == other.volume_group_id
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @address.hash +
      @disk_id.hash +
      @initiator.hash +
      @lun_mapping.hash +
      @password.hash +
      @paths.hash +
      @port.hash +
      @portal.hash +
      @product_id.hash +
      @serial.hash +
      @size.hash +
      @status.hash +
      @storage_domain_id.hash +
      @target.hash +
      @username.hash +
      @vendor_id.hash +
      @volume_group_id.hash
    end
    
  end
  
  class Job < Identified
    
    # 
    # Returns the value of the `auto_cleared` attribute.
    # 
    # @return [Boolean]
    # 
    def auto_cleared
      @auto_cleared
    end
    
    # 
    # Sets the value of the `auto_cleared` attribute.
    # 
    # @param value [Boolean]
    # 
    def auto_cleared=(value)
      @auto_cleared = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `end_time` attribute.
    # 
    # @return [DateTime]
    # 
    def end_time
      @end_time
    end
    
    # 
    # Sets the value of the `end_time` attribute.
    # 
    # @param value [DateTime]
    # 
    def end_time=(value)
      @end_time = value
    end
    
    # 
    # Returns the value of the `external` attribute.
    # 
    # @return [Boolean]
    # 
    def external
      @external
    end
    
    # 
    # Sets the value of the `external` attribute.
    # 
    # @param value [Boolean]
    # 
    def external=(value)
      @external = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `last_updated` attribute.
    # 
    # @return [DateTime]
    # 
    def last_updated
      @last_updated
    end
    
    # 
    # Sets the value of the `last_updated` attribute.
    # 
    # @param value [DateTime]
    # 
    def last_updated=(value)
      @last_updated = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `owner` attribute.
    # 
    # @return [User]
    # 
    def owner
      @owner
    end
    
    # 
    # Sets the value of the `owner` attribute.
    # 
    # @param value [User, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::User} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def owner=(value)
      if value.is_a?(Hash)
        value = User.new(value)
      end
      @owner = value
    end
    
    # 
    # Returns the value of the `start_time` attribute.
    # 
    # @return [DateTime]
    # 
    def start_time
      @start_time
    end
    
    # 
    # Sets the value of the `start_time` attribute.
    # 
    # @param value [DateTime]
    # 
    def start_time=(value)
      @start_time = value
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [JobStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [JobStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `steps` attribute.
    # 
    # @return [Array<Step>]
    # 
    def steps
      @steps
    end
    
    # 
    # Sets the value of the `steps` attribute.
    # 
    # @param list [Array<Step>]
    # 
    def steps=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Step.new(value)
          end
        end
      end
      @steps = list
    end
    
    # 
    # Creates a new instance of the {Job} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :auto_cleared The value of attribute `auto_cleared`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [DateTime] :end_time The value of attribute `end_time`.
    # 
    # @option opts [Boolean] :external The value of attribute `external`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [DateTime] :last_updated The value of attribute `last_updated`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [User, Hash] :owner The value of attribute `owner`.
    # 
    # @option opts [DateTime] :start_time The value of attribute `start_time`.
    # 
    # @option opts [JobStatus] :status The value of attribute `status`.
    # 
    # @option opts [Array<Step>, Array<Hash>] :steps The values of attribute `steps`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.auto_cleared = opts[:auto_cleared]
      self.end_time = opts[:end_time]
      self.external = opts[:external]
      self.last_updated = opts[:last_updated]
      self.owner = opts[:owner]
      self.start_time = opts[:start_time]
      self.status = opts[:status]
      self.steps = opts[:steps]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @auto_cleared == other.auto_cleared &&
      @end_time == other.end_time &&
      @external == other.external &&
      @last_updated == other.last_updated &&
      @owner == other.owner &&
      @start_time == other.start_time &&
      @status == other.status &&
      @steps == other.steps
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @auto_cleared.hash +
      @end_time.hash +
      @external.hash +
      @last_updated.hash +
      @owner.hash +
      @start_time.hash +
      @status.hash +
      @steps.hash
    end
    
  end
  
  class KatelloErratum < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `issued` attribute.
    # 
    # @return [DateTime]
    # 
    def issued
      @issued
    end
    
    # 
    # Sets the value of the `issued` attribute.
    # 
    # @param value [DateTime]
    # 
    def issued=(value)
      @issued = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `packages` attribute.
    # 
    # @return [Array<Package>]
    # 
    def packages
      @packages
    end
    
    # 
    # Sets the value of the `packages` attribute.
    # 
    # @param list [Array<Package>]
    # 
    def packages=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Package.new(value)
          end
        end
      end
      @packages = list
    end
    
    # 
    # Returns the value of the `severity` attribute.
    # 
    # @return [String]
    # 
    def severity
      @severity
    end
    
    # 
    # Sets the value of the `severity` attribute.
    # 
    # @param value [String]
    # 
    def severity=(value)
      @severity = value
    end
    
    # 
    # Returns the value of the `solution` attribute.
    # 
    # @return [String]
    # 
    def solution
      @solution
    end
    
    # 
    # Sets the value of the `solution` attribute.
    # 
    # @param value [String]
    # 
    def solution=(value)
      @solution = value
    end
    
    # 
    # Returns the value of the `summary` attribute.
    # 
    # @return [String]
    # 
    def summary
      @summary
    end
    
    # 
    # Sets the value of the `summary` attribute.
    # 
    # @param value [String]
    # 
    def summary=(value)
      @summary = value
    end
    
    # 
    # Returns the value of the `title` attribute.
    # 
    # @return [String]
    # 
    def title
      @title
    end
    
    # 
    # Sets the value of the `title` attribute.
    # 
    # @param value [String]
    # 
    def title=(value)
      @title = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [String]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [String]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {KatelloErratum} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [DateTime] :issued The value of attribute `issued`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Package>, Array<Hash>] :packages The values of attribute `packages`.
    # 
    # @option opts [String] :severity The value of attribute `severity`.
    # 
    # @option opts [String] :solution The value of attribute `solution`.
    # 
    # @option opts [String] :summary The value of attribute `summary`.
    # 
    # @option opts [String] :title The value of attribute `title`.
    # 
    # @option opts [String] :type The value of attribute `type`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.host = opts[:host]
      self.issued = opts[:issued]
      self.packages = opts[:packages]
      self.severity = opts[:severity]
      self.solution = opts[:solution]
      self.summary = opts[:summary]
      self.title = opts[:title]
      self.type = opts[:type]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @host == other.host &&
      @issued == other.issued &&
      @packages == other.packages &&
      @severity == other.severity &&
      @solution == other.solution &&
      @summary == other.summary &&
      @title == other.title &&
      @type == other.type &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @host.hash +
      @issued.hash +
      @packages.hash +
      @severity.hash +
      @solution.hash +
      @summary.hash +
      @title.hash +
      @type.hash +
      @vm.hash
    end
    
  end
  
  class Kernel < Struct
    
    # 
    # Returns the value of the `version` attribute.
    # 
    # @return [Version]
    # 
    def version
      @version
    end
    
    # 
    # Sets the value of the `version` attribute.
    # 
    # @param value [Version, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Version} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def version=(value)
      if value.is_a?(Hash)
        value = Version.new(value)
      end
      @version = value
    end
    
    # 
    # Creates a new instance of the {Kernel} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Version, Hash] :version The value of attribute `version`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.version = opts[:version]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @version == other.version
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @version.hash
    end
    
  end
  
  class Ksm < Struct
    
    # 
    # Returns the value of the `enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def enabled
      @enabled
    end
    
    # 
    # Sets the value of the `enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def enabled=(value)
      @enabled = value
    end
    
    # 
    # Returns the value of the `merge_across_nodes` attribute.
    # 
    # @return [Boolean]
    # 
    def merge_across_nodes
      @merge_across_nodes
    end
    
    # 
    # Sets the value of the `merge_across_nodes` attribute.
    # 
    # @param value [Boolean]
    # 
    def merge_across_nodes=(value)
      @merge_across_nodes = value
    end
    
    # 
    # Creates a new instance of the {Ksm} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :enabled The value of attribute `enabled`.
    # 
    # @option opts [Boolean] :merge_across_nodes The value of attribute `merge_across_nodes`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.enabled = opts[:enabled]
      self.merge_across_nodes = opts[:merge_across_nodes]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @enabled == other.enabled &&
      @merge_across_nodes == other.merge_across_nodes
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @enabled.hash +
      @merge_across_nodes.hash
    end
    
  end
  
  class LinkLayerDiscoveryProtocolElement < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `oui` attribute.
    # 
    # @return [Integer]
    # 
    def oui
      @oui
    end
    
    # 
    # Sets the value of the `oui` attribute.
    # 
    # @param value [Integer]
    # 
    def oui=(value)
      @oui = value
    end
    
    # 
    # Returns the value of the `properties` attribute.
    # 
    # @return [Array<Property>]
    # 
    def properties
      @properties
    end
    
    # 
    # Sets the value of the `properties` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @properties = list
    end
    
    # 
    # Returns the value of the `subtype` attribute.
    # 
    # @return [Integer]
    # 
    def subtype
      @subtype
    end
    
    # 
    # Sets the value of the `subtype` attribute.
    # 
    # @param value [Integer]
    # 
    def subtype=(value)
      @subtype = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [Integer]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [Integer]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Creates a new instance of the {LinkLayerDiscoveryProtocolElement} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Integer] :oui The value of attribute `oui`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :properties The values of attribute `properties`.
    # 
    # @option opts [Integer] :subtype The value of attribute `subtype`.
    # 
    # @option opts [Integer] :type The value of attribute `type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.oui = opts[:oui]
      self.properties = opts[:properties]
      self.subtype = opts[:subtype]
      self.type = opts[:type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @oui == other.oui &&
      @properties == other.properties &&
      @subtype == other.subtype &&
      @type == other.type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @oui.hash +
      @properties.hash +
      @subtype.hash +
      @type.hash
    end
    
  end
  
  class LogicalUnit < Struct
    
    # 
    # Returns the value of the `active_paths` attribute.
    # 
    # @return [Integer]
    # 
    def active_paths
      @active_paths
    end
    
    # 
    # Sets the value of the `active_paths` attribute.
    # 
    # @param value [Integer]
    # 
    def active_paths=(value)
      @active_paths = value
    end
    
    # 
    # Returns the value of the `address` attribute.
    # 
    # @return [String]
    # 
    def address
      @address
    end
    
    # 
    # Sets the value of the `address` attribute.
    # 
    # @param value [String]
    # 
    def address=(value)
      @address = value
    end
    
    # 
    # Returns the value of the `discard_max_size` attribute.
    # 
    # @return [Integer]
    # 
    def discard_max_size
      @discard_max_size
    end
    
    # 
    # Sets the value of the `discard_max_size` attribute.
    # 
    # @param value [Integer]
    # 
    def discard_max_size=(value)
      @discard_max_size = value
    end
    
    # 
    # Returns the value of the `discard_zeroes_data` attribute.
    # 
    # @return [Boolean]
    # 
    def discard_zeroes_data
      @discard_zeroes_data
    end
    
    # 
    # Sets the value of the `discard_zeroes_data` attribute.
    # 
    # @param value [Boolean]
    # 
    def discard_zeroes_data=(value)
      @discard_zeroes_data = value
    end
    
    # 
    # Returns the value of the `disk_id` attribute.
    # 
    # @return [String]
    # 
    def disk_id
      @disk_id
    end
    
    # 
    # Sets the value of the `disk_id` attribute.
    # 
    # @param value [String]
    # 
    def disk_id=(value)
      @disk_id = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `lun_mapping` attribute.
    # 
    # @return [Integer]
    # 
    def lun_mapping
      @lun_mapping
    end
    
    # 
    # Sets the value of the `lun_mapping` attribute.
    # 
    # @param value [Integer]
    # 
    def lun_mapping=(value)
      @lun_mapping = value
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `paths` attribute.
    # 
    # @return [Integer]
    # 
    def paths
      @paths
    end
    
    # 
    # Sets the value of the `paths` attribute.
    # 
    # @param value [Integer]
    # 
    def paths=(value)
      @paths = value
    end
    
    # 
    # Returns the value of the `port` attribute.
    # 
    # @return [Integer]
    # 
    def port
      @port
    end
    
    # 
    # Sets the value of the `port` attribute.
    # 
    # @param value [Integer]
    # 
    def port=(value)
      @port = value
    end
    
    # 
    # Returns the value of the `portal` attribute.
    # 
    # @return [String]
    # 
    def portal
      @portal
    end
    
    # 
    # Sets the value of the `portal` attribute.
    # 
    # @param value [String]
    # 
    def portal=(value)
      @portal = value
    end
    
    # 
    # Returns the value of the `product_id` attribute.
    # 
    # @return [String]
    # 
    def product_id
      @product_id
    end
    
    # 
    # Sets the value of the `product_id` attribute.
    # 
    # @param value [String]
    # 
    def product_id=(value)
      @product_id = value
    end
    
    # 
    # Returns the value of the `serial` attribute.
    # 
    # @return [String]
    # 
    def serial
      @serial
    end
    
    # 
    # Sets the value of the `serial` attribute.
    # 
    # @param value [String]
    # 
    def serial=(value)
      @serial = value
    end
    
    # 
    # Returns the value of the `size` attribute.
    # 
    # @return [Integer]
    # 
    def size
      @size
    end
    
    # 
    # Sets the value of the `size` attribute.
    # 
    # @param value [Integer]
    # 
    def size=(value)
      @size = value
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [LunStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [LunStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `storage_domain_id` attribute.
    # 
    # @return [String]
    # 
    def storage_domain_id
      @storage_domain_id
    end
    
    # 
    # Sets the value of the `storage_domain_id` attribute.
    # 
    # @param value [String]
    # 
    def storage_domain_id=(value)
      @storage_domain_id = value
    end
    
    # 
    # Returns the value of the `target` attribute.
    # 
    # @return [String]
    # 
    def target
      @target
    end
    
    # 
    # Sets the value of the `target` attribute.
    # 
    # @param value [String]
    # 
    def target=(value)
      @target = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Returns the value of the `vendor_id` attribute.
    # 
    # @return [String]
    # 
    def vendor_id
      @vendor_id
    end
    
    # 
    # Sets the value of the `vendor_id` attribute.
    # 
    # @param value [String]
    # 
    def vendor_id=(value)
      @vendor_id = value
    end
    
    # 
    # Returns the value of the `volume_group_id` attribute.
    # 
    # @return [String]
    # 
    def volume_group_id
      @volume_group_id
    end
    
    # 
    # Sets the value of the `volume_group_id` attribute.
    # 
    # @param value [String]
    # 
    def volume_group_id=(value)
      @volume_group_id = value
    end
    
    # 
    # Creates a new instance of the {LogicalUnit} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :active_paths The value of attribute `active_paths`.
    # 
    # @option opts [String] :address The value of attribute `address`.
    # 
    # @option opts [Integer] :discard_max_size The value of attribute `discard_max_size`.
    # 
    # @option opts [Boolean] :discard_zeroes_data The value of attribute `discard_zeroes_data`.
    # 
    # @option opts [String] :disk_id The value of attribute `disk_id`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Integer] :lun_mapping The value of attribute `lun_mapping`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [Integer] :paths The value of attribute `paths`.
    # 
    # @option opts [Integer] :port The value of attribute `port`.
    # 
    # @option opts [String] :portal The value of attribute `portal`.
    # 
    # @option opts [String] :product_id The value of attribute `product_id`.
    # 
    # @option opts [String] :serial The value of attribute `serial`.
    # 
    # @option opts [Integer] :size The value of attribute `size`.
    # 
    # @option opts [LunStatus] :status The value of attribute `status`.
    # 
    # @option opts [String] :storage_domain_id The value of attribute `storage_domain_id`.
    # 
    # @option opts [String] :target The value of attribute `target`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # @option opts [String] :vendor_id The value of attribute `vendor_id`.
    # 
    # @option opts [String] :volume_group_id The value of attribute `volume_group_id`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.active_paths = opts[:active_paths]
      self.address = opts[:address]
      self.discard_max_size = opts[:discard_max_size]
      self.discard_zeroes_data = opts[:discard_zeroes_data]
      self.disk_id = opts[:disk_id]
      self.id = opts[:id]
      self.lun_mapping = opts[:lun_mapping]
      self.password = opts[:password]
      self.paths = opts[:paths]
      self.port = opts[:port]
      self.portal = opts[:portal]
      self.product_id = opts[:product_id]
      self.serial = opts[:serial]
      self.size = opts[:size]
      self.status = opts[:status]
      self.storage_domain_id = opts[:storage_domain_id]
      self.target = opts[:target]
      self.username = opts[:username]
      self.vendor_id = opts[:vendor_id]
      self.volume_group_id = opts[:volume_group_id]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @active_paths == other.active_paths &&
      @address == other.address &&
      @discard_max_size == other.discard_max_size &&
      @discard_zeroes_data == other.discard_zeroes_data &&
      @disk_id == other.disk_id &&
      @id == other.id &&
      @lun_mapping == other.lun_mapping &&
      @password == other.password &&
      @paths == other.paths &&
      @port == other.port &&
      @portal == other.portal &&
      @product_id == other.product_id &&
      @serial == other.serial &&
      @size == other.size &&
      @status == other.status &&
      @storage_domain_id == other.storage_domain_id &&
      @target == other.target &&
      @username == other.username &&
      @vendor_id == other.vendor_id &&
      @volume_group_id == other.volume_group_id
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @active_paths.hash +
      @address.hash +
      @discard_max_size.hash +
      @discard_zeroes_data.hash +
      @disk_id.hash +
      @id.hash +
      @lun_mapping.hash +
      @password.hash +
      @paths.hash +
      @port.hash +
      @portal.hash +
      @product_id.hash +
      @serial.hash +
      @size.hash +
      @status.hash +
      @storage_domain_id.hash +
      @target.hash +
      @username.hash +
      @vendor_id.hash +
      @volume_group_id.hash
    end
    
  end
  
  class MDevType < Struct
    
    # 
    # Returns the value of the `available_instances` attribute.
    # 
    # @return [Integer]
    # 
    def available_instances
      @available_instances
    end
    
    # 
    # Sets the value of the `available_instances` attribute.
    # 
    # @param value [Integer]
    # 
    def available_instances=(value)
      @available_instances = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `human_readable_name` attribute.
    # 
    # @return [String]
    # 
    def human_readable_name
      @human_readable_name
    end
    
    # 
    # Sets the value of the `human_readable_name` attribute.
    # 
    # @param value [String]
    # 
    def human_readable_name=(value)
      @human_readable_name = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {MDevType} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :available_instances The value of attribute `available_instances`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :human_readable_name The value of attribute `human_readable_name`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.available_instances = opts[:available_instances]
      self.description = opts[:description]
      self.human_readable_name = opts[:human_readable_name]
      self.name = opts[:name]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @available_instances == other.available_instances &&
      @description == other.description &&
      @human_readable_name == other.human_readable_name &&
      @name == other.name
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @available_instances.hash +
      @description.hash +
      @human_readable_name.hash +
      @name.hash
    end
    
  end
  
  class Mac < Struct
    
    # 
    # Returns the value of the `address` attribute.
    # 
    # @return [String]
    # 
    def address
      @address
    end
    
    # 
    # Sets the value of the `address` attribute.
    # 
    # @param value [String]
    # 
    def address=(value)
      @address = value
    end
    
    # 
    # Creates a new instance of the {Mac} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :address The value of attribute `address`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.address = opts[:address]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @address == other.address
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @address.hash
    end
    
  end
  
  class MacPool < Identified
    
    # 
    # Returns the value of the `allow_duplicates` attribute.
    # 
    # @return [Boolean]
    # 
    def allow_duplicates
      @allow_duplicates
    end
    
    # 
    # Sets the value of the `allow_duplicates` attribute.
    # 
    # @param value [Boolean]
    # 
    def allow_duplicates=(value)
      @allow_duplicates = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `default_pool` attribute.
    # 
    # @return [Boolean]
    # 
    def default_pool
      @default_pool
    end
    
    # 
    # Sets the value of the `default_pool` attribute.
    # 
    # @param value [Boolean]
    # 
    def default_pool=(value)
      @default_pool = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `ranges` attribute.
    # 
    # @return [Array<Range>]
    # 
    def ranges
      @ranges
    end
    
    # 
    # Sets the value of the `ranges` attribute.
    # 
    # @param list [Array<Range>]
    # 
    def ranges=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Range.new(value)
          end
        end
      end
      @ranges = list
    end
    
    # 
    # Creates a new instance of the {MacPool} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :allow_duplicates The value of attribute `allow_duplicates`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Boolean] :default_pool The value of attribute `default_pool`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [Array<Range>, Array<Hash>] :ranges The values of attribute `ranges`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.allow_duplicates = opts[:allow_duplicates]
      self.default_pool = opts[:default_pool]
      self.permissions = opts[:permissions]
      self.ranges = opts[:ranges]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @allow_duplicates == other.allow_duplicates &&
      @default_pool == other.default_pool &&
      @permissions == other.permissions &&
      @ranges == other.ranges
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @allow_duplicates.hash +
      @default_pool.hash +
      @permissions.hash +
      @ranges.hash
    end
    
  end
  
  class MemoryOverCommit < Struct
    
    # 
    # Returns the value of the `percent` attribute.
    # 
    # @return [Integer]
    # 
    def percent
      @percent
    end
    
    # 
    # Sets the value of the `percent` attribute.
    # 
    # @param value [Integer]
    # 
    def percent=(value)
      @percent = value
    end
    
    # 
    # Creates a new instance of the {MemoryOverCommit} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :percent The value of attribute `percent`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.percent = opts[:percent]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @percent == other.percent
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @percent.hash
    end
    
  end
  
  class MemoryPolicy < Struct
    
    # 
    # Returns the value of the `ballooning` attribute.
    # 
    # @return [Boolean]
    # 
    def ballooning
      @ballooning
    end
    
    # 
    # Sets the value of the `ballooning` attribute.
    # 
    # @param value [Boolean]
    # 
    def ballooning=(value)
      @ballooning = value
    end
    
    # 
    # Returns the value of the `guaranteed` attribute.
    # 
    # @return [Integer]
    # 
    def guaranteed
      @guaranteed
    end
    
    # 
    # Sets the value of the `guaranteed` attribute.
    # 
    # @param value [Integer]
    # 
    def guaranteed=(value)
      @guaranteed = value
    end
    
    # 
    # Returns the value of the `max` attribute.
    # 
    # @return [Integer]
    # 
    def max
      @max
    end
    
    # 
    # Sets the value of the `max` attribute.
    # 
    # @param value [Integer]
    # 
    def max=(value)
      @max = value
    end
    
    # 
    # Returns the value of the `over_commit` attribute.
    # 
    # @return [MemoryOverCommit]
    # 
    def over_commit
      @over_commit
    end
    
    # 
    # Sets the value of the `over_commit` attribute.
    # 
    # @param value [MemoryOverCommit, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MemoryOverCommit} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def over_commit=(value)
      if value.is_a?(Hash)
        value = MemoryOverCommit.new(value)
      end
      @over_commit = value
    end
    
    # 
    # Returns the value of the `transparent_huge_pages` attribute.
    # 
    # @return [TransparentHugePages]
    # 
    def transparent_huge_pages
      @transparent_huge_pages
    end
    
    # 
    # Sets the value of the `transparent_huge_pages` attribute.
    # 
    # @param value [TransparentHugePages, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::TransparentHugePages} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def transparent_huge_pages=(value)
      if value.is_a?(Hash)
        value = TransparentHugePages.new(value)
      end
      @transparent_huge_pages = value
    end
    
    # 
    # Creates a new instance of the {MemoryPolicy} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :ballooning The value of attribute `ballooning`.
    # 
    # @option opts [Integer] :guaranteed The value of attribute `guaranteed`.
    # 
    # @option opts [Integer] :max The value of attribute `max`.
    # 
    # @option opts [MemoryOverCommit, Hash] :over_commit The value of attribute `over_commit`.
    # 
    # @option opts [TransparentHugePages, Hash] :transparent_huge_pages The value of attribute `transparent_huge_pages`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.ballooning = opts[:ballooning]
      self.guaranteed = opts[:guaranteed]
      self.max = opts[:max]
      self.over_commit = opts[:over_commit]
      self.transparent_huge_pages = opts[:transparent_huge_pages]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @ballooning == other.ballooning &&
      @guaranteed == other.guaranteed &&
      @max == other.max &&
      @over_commit == other.over_commit &&
      @transparent_huge_pages == other.transparent_huge_pages
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @ballooning.hash +
      @guaranteed.hash +
      @max.hash +
      @over_commit.hash +
      @transparent_huge_pages.hash
    end
    
  end
  
  class Method < Struct
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [SsoMethod]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [SsoMethod]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Creates a new instance of the {Method} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [SsoMethod] :id The value of attribute `id`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.id = opts[:id]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @id == other.id
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @id.hash
    end
    
  end
  
  class MigrationBandwidth < Struct
    
    # 
    # Returns the value of the `assignment_method` attribute.
    # 
    # @return [MigrationBandwidthAssignmentMethod]
    # 
    def assignment_method
      @assignment_method
    end
    
    # 
    # Sets the value of the `assignment_method` attribute.
    # 
    # @param value [MigrationBandwidthAssignmentMethod]
    # 
    def assignment_method=(value)
      @assignment_method = value
    end
    
    # 
    # Returns the value of the `custom_value` attribute.
    # 
    # @return [Integer]
    # 
    def custom_value
      @custom_value
    end
    
    # 
    # Sets the value of the `custom_value` attribute.
    # 
    # @param value [Integer]
    # 
    def custom_value=(value)
      @custom_value = value
    end
    
    # 
    # Creates a new instance of the {MigrationBandwidth} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [MigrationBandwidthAssignmentMethod] :assignment_method The value of attribute `assignment_method`.
    # 
    # @option opts [Integer] :custom_value The value of attribute `custom_value`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.assignment_method = opts[:assignment_method]
      self.custom_value = opts[:custom_value]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @assignment_method == other.assignment_method &&
      @custom_value == other.custom_value
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @assignment_method.hash +
      @custom_value.hash
    end
    
  end
  
  class MigrationOptions < Struct
    
    # 
    # Returns the value of the `auto_converge` attribute.
    # 
    # @return [InheritableBoolean]
    # 
    def auto_converge
      @auto_converge
    end
    
    # 
    # Sets the value of the `auto_converge` attribute.
    # 
    # @param value [InheritableBoolean]
    # 
    def auto_converge=(value)
      @auto_converge = value
    end
    
    # 
    # Returns the value of the `bandwidth` attribute.
    # 
    # @return [MigrationBandwidth]
    # 
    def bandwidth
      @bandwidth
    end
    
    # 
    # Sets the value of the `bandwidth` attribute.
    # 
    # @param value [MigrationBandwidth, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MigrationBandwidth} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def bandwidth=(value)
      if value.is_a?(Hash)
        value = MigrationBandwidth.new(value)
      end
      @bandwidth = value
    end
    
    # 
    # Returns the value of the `compressed` attribute.
    # 
    # @return [InheritableBoolean]
    # 
    def compressed
      @compressed
    end
    
    # 
    # Sets the value of the `compressed` attribute.
    # 
    # @param value [InheritableBoolean]
    # 
    def compressed=(value)
      @compressed = value
    end
    
    # 
    # Returns the value of the `custom_parallel_migrations` attribute.
    # 
    # @return [Integer]
    # 
    def custom_parallel_migrations
      @custom_parallel_migrations
    end
    
    # 
    # Sets the value of the `custom_parallel_migrations` attribute.
    # 
    # @param value [Integer]
    # 
    def custom_parallel_migrations=(value)
      @custom_parallel_migrations = value
    end
    
    # 
    # Returns the value of the `encrypted` attribute.
    # 
    # @return [InheritableBoolean]
    # 
    def encrypted
      @encrypted
    end
    
    # 
    # Sets the value of the `encrypted` attribute.
    # 
    # @param value [InheritableBoolean]
    # 
    def encrypted=(value)
      @encrypted = value
    end
    
    # 
    # Returns the value of the `parallel_migrations_policy` attribute.
    # 
    # @return [ParallelMigrationsPolicy]
    # 
    def parallel_migrations_policy
      @parallel_migrations_policy
    end
    
    # 
    # Sets the value of the `parallel_migrations_policy` attribute.
    # 
    # @param value [ParallelMigrationsPolicy]
    # 
    def parallel_migrations_policy=(value)
      @parallel_migrations_policy = value
    end
    
    # 
    # Returns the value of the `policy` attribute.
    # 
    # @return [MigrationPolicy]
    # 
    def policy
      @policy
    end
    
    # 
    # Sets the value of the `policy` attribute.
    # 
    # @param value [MigrationPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MigrationPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def policy=(value)
      if value.is_a?(Hash)
        value = MigrationPolicy.new(value)
      end
      @policy = value
    end
    
    # 
    # Creates a new instance of the {MigrationOptions} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [InheritableBoolean] :auto_converge The value of attribute `auto_converge`.
    # 
    # @option opts [MigrationBandwidth, Hash] :bandwidth The value of attribute `bandwidth`.
    # 
    # @option opts [InheritableBoolean] :compressed The value of attribute `compressed`.
    # 
    # @option opts [Integer] :custom_parallel_migrations The value of attribute `custom_parallel_migrations`.
    # 
    # @option opts [InheritableBoolean] :encrypted The value of attribute `encrypted`.
    # 
    # @option opts [ParallelMigrationsPolicy] :parallel_migrations_policy The value of attribute `parallel_migrations_policy`.
    # 
    # @option opts [MigrationPolicy, Hash] :policy The value of attribute `policy`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.auto_converge = opts[:auto_converge]
      self.bandwidth = opts[:bandwidth]
      self.compressed = opts[:compressed]
      self.custom_parallel_migrations = opts[:custom_parallel_migrations]
      self.encrypted = opts[:encrypted]
      self.parallel_migrations_policy = opts[:parallel_migrations_policy]
      self.policy = opts[:policy]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @auto_converge == other.auto_converge &&
      @bandwidth == other.bandwidth &&
      @compressed == other.compressed &&
      @custom_parallel_migrations == other.custom_parallel_migrations &&
      @encrypted == other.encrypted &&
      @parallel_migrations_policy == other.parallel_migrations_policy &&
      @policy == other.policy
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @auto_converge.hash +
      @bandwidth.hash +
      @compressed.hash +
      @custom_parallel_migrations.hash +
      @encrypted.hash +
      @parallel_migrations_policy.hash +
      @policy.hash
    end
    
  end
  
  class MigrationPolicy < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {MigrationPolicy} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
    end
    
  end
  
  class Network < Identified
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `data_center` attribute.
    # 
    # @return [DataCenter]
    # 
    def data_center
      @data_center
    end
    
    # 
    # Sets the value of the `data_center` attribute.
    # 
    # @param value [DataCenter, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DataCenter} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def data_center=(value)
      if value.is_a?(Hash)
        value = DataCenter.new(value)
      end
      @data_center = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `display` attribute.
    # 
    # @return [Boolean]
    # 
    def display
      @display
    end
    
    # 
    # Sets the value of the `display` attribute.
    # 
    # @param value [Boolean]
    # 
    def display=(value)
      @display = value
    end
    
    # 
    # Returns the value of the `dns_resolver_configuration` attribute.
    # 
    # @return [DnsResolverConfiguration]
    # 
    def dns_resolver_configuration
      @dns_resolver_configuration
    end
    
    # 
    # Sets the value of the `dns_resolver_configuration` attribute.
    # 
    # @param value [DnsResolverConfiguration, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DnsResolverConfiguration} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def dns_resolver_configuration=(value)
      if value.is_a?(Hash)
        value = DnsResolverConfiguration.new(value)
      end
      @dns_resolver_configuration = value
    end
    
    # 
    # Returns the value of the `external_provider` attribute.
    # 
    # @return [OpenStackNetworkProvider]
    # 
    def external_provider
      @external_provider
    end
    
    # 
    # Sets the value of the `external_provider` attribute.
    # 
    # @param value [OpenStackNetworkProvider, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::OpenStackNetworkProvider} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def external_provider=(value)
      if value.is_a?(Hash)
        value = OpenStackNetworkProvider.new(value)
      end
      @external_provider = value
    end
    
    # 
    # Returns the value of the `external_provider_physical_network` attribute.
    # 
    # @return [Network]
    # 
    def external_provider_physical_network
      @external_provider_physical_network
    end
    
    # 
    # Sets the value of the `external_provider_physical_network` attribute.
    # 
    # @param value [Network, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Network} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def external_provider_physical_network=(value)
      if value.is_a?(Hash)
        value = Network.new(value)
      end
      @external_provider_physical_network = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `ip` attribute.
    # 
    # @return [Ip]
    # 
    def ip
      @ip
    end
    
    # 
    # Sets the value of the `ip` attribute.
    # 
    # @param value [Ip, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Ip} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def ip=(value)
      if value.is_a?(Hash)
        value = Ip.new(value)
      end
      @ip = value
    end
    
    # 
    # Returns the value of the `mtu` attribute.
    # 
    # @return [Integer]
    # 
    def mtu
      @mtu
    end
    
    # 
    # Sets the value of the `mtu` attribute.
    # 
    # @param value [Integer]
    # 
    def mtu=(value)
      @mtu = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `network_labels` attribute.
    # 
    # @return [Array<NetworkLabel>]
    # 
    def network_labels
      @network_labels
    end
    
    # 
    # Sets the value of the `network_labels` attribute.
    # 
    # @param list [Array<NetworkLabel>]
    # 
    def network_labels=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NetworkLabel.new(value)
          end
        end
      end
      @network_labels = list
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `port_isolation` attribute.
    # 
    # @return [Boolean]
    # 
    def port_isolation
      @port_isolation
    end
    
    # 
    # Sets the value of the `port_isolation` attribute.
    # 
    # @param value [Boolean]
    # 
    def port_isolation=(value)
      @port_isolation = value
    end
    
    # 
    # Returns the value of the `profile_required` attribute.
    # 
    # @return [Boolean]
    # 
    def profile_required
      @profile_required
    end
    
    # 
    # Sets the value of the `profile_required` attribute.
    # 
    # @param value [Boolean]
    # 
    def profile_required=(value)
      @profile_required = value
    end
    
    # 
    # Returns the value of the `qos` attribute.
    # 
    # @return [Qos]
    # 
    def qos
      @qos
    end
    
    # 
    # Sets the value of the `qos` attribute.
    # 
    # @param value [Qos, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Qos} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def qos=(value)
      if value.is_a?(Hash)
        value = Qos.new(value)
      end
      @qos = value
    end
    
    # 
    # Returns the value of the `required` attribute.
    # 
    # @return [Boolean]
    # 
    def required
      @required
    end
    
    # 
    # Sets the value of the `required` attribute.
    # 
    # @param value [Boolean]
    # 
    def required=(value)
      @required = value
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [NetworkStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [NetworkStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `stp` attribute.
    # 
    # @return [Boolean]
    # 
    def stp
      @stp
    end
    
    # 
    # Sets the value of the `stp` attribute.
    # 
    # @param value [Boolean]
    # 
    def stp=(value)
      @stp = value
    end
    
    # 
    # Returns the value of the `usages` attribute.
    # 
    # @return [Array<NetworkUsage>]
    # 
    def usages
      @usages
    end
    
    # 
    # Sets the value of the `usages` attribute.
    # 
    # @param list [Array<NetworkUsage>]
    # 
    def usages=(list)
      @usages = list
    end
    
    # 
    # Returns the value of the `vdsm_name` attribute.
    # 
    # @return [String]
    # 
    def vdsm_name
      @vdsm_name
    end
    
    # 
    # Sets the value of the `vdsm_name` attribute.
    # 
    # @param value [String]
    # 
    def vdsm_name=(value)
      @vdsm_name = value
    end
    
    # 
    # Returns the value of the `vlan` attribute.
    # 
    # @return [Vlan]
    # 
    def vlan
      @vlan
    end
    
    # 
    # Sets the value of the `vlan` attribute.
    # 
    # @param value [Vlan, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vlan} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vlan=(value)
      if value.is_a?(Hash)
        value = Vlan.new(value)
      end
      @vlan = value
    end
    
    # 
    # Returns the value of the `vnic_profiles` attribute.
    # 
    # @return [Array<VnicProfile>]
    # 
    def vnic_profiles
      @vnic_profiles
    end
    
    # 
    # Sets the value of the `vnic_profiles` attribute.
    # 
    # @param list [Array<VnicProfile>]
    # 
    def vnic_profiles=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = VnicProfile.new(value)
          end
        end
      end
      @vnic_profiles = list
    end
    
    # 
    # Creates a new instance of the {Network} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [DataCenter, Hash] :data_center The value of attribute `data_center`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Boolean] :display The value of attribute `display`.
    # 
    # @option opts [DnsResolverConfiguration, Hash] :dns_resolver_configuration The value of attribute `dns_resolver_configuration`.
    # 
    # @option opts [OpenStackNetworkProvider, Hash] :external_provider The value of attribute `external_provider`.
    # 
    # @option opts [Network, Hash] :external_provider_physical_network The value of attribute `external_provider_physical_network`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Ip, Hash] :ip The value of attribute `ip`.
    # 
    # @option opts [Integer] :mtu The value of attribute `mtu`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<NetworkLabel>, Array<Hash>] :network_labels The values of attribute `network_labels`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [Boolean] :port_isolation The value of attribute `port_isolation`.
    # 
    # @option opts [Boolean] :profile_required The value of attribute `profile_required`.
    # 
    # @option opts [Qos, Hash] :qos The value of attribute `qos`.
    # 
    # @option opts [Boolean] :required The value of attribute `required`.
    # 
    # @option opts [NetworkStatus] :status The value of attribute `status`.
    # 
    # @option opts [Boolean] :stp The value of attribute `stp`.
    # 
    # @option opts [Array<NetworkUsage>, Array<Hash>] :usages The values of attribute `usages`.
    # 
    # @option opts [String] :vdsm_name The value of attribute `vdsm_name`.
    # 
    # @option opts [Vlan, Hash] :vlan The value of attribute `vlan`.
    # 
    # @option opts [Array<VnicProfile>, Array<Hash>] :vnic_profiles The values of attribute `vnic_profiles`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cluster = opts[:cluster]
      self.data_center = opts[:data_center]
      self.display = opts[:display]
      self.dns_resolver_configuration = opts[:dns_resolver_configuration]
      self.external_provider = opts[:external_provider]
      self.external_provider_physical_network = opts[:external_provider_physical_network]
      self.ip = opts[:ip]
      self.mtu = opts[:mtu]
      self.network_labels = opts[:network_labels]
      self.permissions = opts[:permissions]
      self.port_isolation = opts[:port_isolation]
      self.profile_required = opts[:profile_required]
      self.qos = opts[:qos]
      self.required = opts[:required]
      self.status = opts[:status]
      self.stp = opts[:stp]
      self.usages = opts[:usages]
      self.vdsm_name = opts[:vdsm_name]
      self.vlan = opts[:vlan]
      self.vnic_profiles = opts[:vnic_profiles]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cluster == other.cluster &&
      @data_center == other.data_center &&
      @display == other.display &&
      @dns_resolver_configuration == other.dns_resolver_configuration &&
      @external_provider == other.external_provider &&
      @external_provider_physical_network == other.external_provider_physical_network &&
      @ip == other.ip &&
      @mtu == other.mtu &&
      @network_labels == other.network_labels &&
      @permissions == other.permissions &&
      @port_isolation == other.port_isolation &&
      @profile_required == other.profile_required &&
      @qos == other.qos &&
      @required == other.required &&
      @status == other.status &&
      @stp == other.stp &&
      @usages == other.usages &&
      @vdsm_name == other.vdsm_name &&
      @vlan == other.vlan &&
      @vnic_profiles == other.vnic_profiles
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cluster.hash +
      @data_center.hash +
      @display.hash +
      @dns_resolver_configuration.hash +
      @external_provider.hash +
      @external_provider_physical_network.hash +
      @ip.hash +
      @mtu.hash +
      @network_labels.hash +
      @permissions.hash +
      @port_isolation.hash +
      @profile_required.hash +
      @qos.hash +
      @required.hash +
      @status.hash +
      @stp.hash +
      @usages.hash +
      @vdsm_name.hash +
      @vlan.hash +
      @vnic_profiles.hash
    end
    
  end
  
  class NetworkAttachment < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `dns_resolver_configuration` attribute.
    # 
    # @return [DnsResolverConfiguration]
    # 
    def dns_resolver_configuration
      @dns_resolver_configuration
    end
    
    # 
    # Sets the value of the `dns_resolver_configuration` attribute.
    # 
    # @param value [DnsResolverConfiguration, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DnsResolverConfiguration} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def dns_resolver_configuration=(value)
      if value.is_a?(Hash)
        value = DnsResolverConfiguration.new(value)
      end
      @dns_resolver_configuration = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `host_nic` attribute.
    # 
    # @return [HostNic]
    # 
    def host_nic
      @host_nic
    end
    
    # 
    # Sets the value of the `host_nic` attribute.
    # 
    # @param value [HostNic, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostNic} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host_nic=(value)
      if value.is_a?(Hash)
        value = HostNic.new(value)
      end
      @host_nic = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `in_sync` attribute.
    # 
    # @return [Boolean]
    # 
    def in_sync
      @in_sync
    end
    
    # 
    # Sets the value of the `in_sync` attribute.
    # 
    # @param value [Boolean]
    # 
    def in_sync=(value)
      @in_sync = value
    end
    
    # 
    # Returns the value of the `ip_address_assignments` attribute.
    # 
    # @return [Array<IpAddressAssignment>]
    # 
    def ip_address_assignments
      @ip_address_assignments
    end
    
    # 
    # Sets the value of the `ip_address_assignments` attribute.
    # 
    # @param list [Array<IpAddressAssignment>]
    # 
    def ip_address_assignments=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = IpAddressAssignment.new(value)
          end
        end
      end
      @ip_address_assignments = list
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `network` attribute.
    # 
    # @return [Network]
    # 
    def network
      @network
    end
    
    # 
    # Sets the value of the `network` attribute.
    # 
    # @param value [Network, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Network} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def network=(value)
      if value.is_a?(Hash)
        value = Network.new(value)
      end
      @network = value
    end
    
    # 
    # Returns the value of the `properties` attribute.
    # 
    # @return [Array<Property>]
    # 
    def properties
      @properties
    end
    
    # 
    # Sets the value of the `properties` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @properties = list
    end
    
    # 
    # Returns the value of the `qos` attribute.
    # 
    # @return [Qos]
    # 
    def qos
      @qos
    end
    
    # 
    # Sets the value of the `qos` attribute.
    # 
    # @param value [Qos, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Qos} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def qos=(value)
      if value.is_a?(Hash)
        value = Qos.new(value)
      end
      @qos = value
    end
    
    # 
    # Returns the value of the `reported_configurations` attribute.
    # 
    # @return [Array<ReportedConfiguration>]
    # 
    def reported_configurations
      @reported_configurations
    end
    
    # 
    # Sets the value of the `reported_configurations` attribute.
    # 
    # @param list [Array<ReportedConfiguration>]
    # 
    def reported_configurations=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = ReportedConfiguration.new(value)
          end
        end
      end
      @reported_configurations = list
    end
    
    # 
    # Creates a new instance of the {NetworkAttachment} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [DnsResolverConfiguration, Hash] :dns_resolver_configuration The value of attribute `dns_resolver_configuration`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [HostNic, Hash] :host_nic The value of attribute `host_nic`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Boolean] :in_sync The value of attribute `in_sync`.
    # 
    # @option opts [Array<IpAddressAssignment>, Array<Hash>] :ip_address_assignments The values of attribute `ip_address_assignments`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Network, Hash] :network The value of attribute `network`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :properties The values of attribute `properties`.
    # 
    # @option opts [Qos, Hash] :qos The value of attribute `qos`.
    # 
    # @option opts [Array<ReportedConfiguration>, Array<Hash>] :reported_configurations The values of attribute `reported_configurations`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.dns_resolver_configuration = opts[:dns_resolver_configuration]
      self.host = opts[:host]
      self.host_nic = opts[:host_nic]
      self.in_sync = opts[:in_sync]
      self.ip_address_assignments = opts[:ip_address_assignments]
      self.network = opts[:network]
      self.properties = opts[:properties]
      self.qos = opts[:qos]
      self.reported_configurations = opts[:reported_configurations]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @dns_resolver_configuration == other.dns_resolver_configuration &&
      @host == other.host &&
      @host_nic == other.host_nic &&
      @in_sync == other.in_sync &&
      @ip_address_assignments == other.ip_address_assignments &&
      @network == other.network &&
      @properties == other.properties &&
      @qos == other.qos &&
      @reported_configurations == other.reported_configurations
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @dns_resolver_configuration.hash +
      @host.hash +
      @host_nic.hash +
      @in_sync.hash +
      @ip_address_assignments.hash +
      @network.hash +
      @properties.hash +
      @qos.hash +
      @reported_configurations.hash
    end
    
  end
  
  class NetworkConfiguration < Struct
    
    # 
    # Returns the value of the `dns` attribute.
    # 
    # @return [Dns]
    # 
    def dns
      @dns
    end
    
    # 
    # Sets the value of the `dns` attribute.
    # 
    # @param value [Dns, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Dns} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def dns=(value)
      if value.is_a?(Hash)
        value = Dns.new(value)
      end
      @dns = value
    end
    
    # 
    # Returns the value of the `nics` attribute.
    # 
    # @return [Array<Nic>]
    # 
    def nics
      @nics
    end
    
    # 
    # Sets the value of the `nics` attribute.
    # 
    # @param list [Array<Nic>]
    # 
    def nics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Nic.new(value)
          end
        end
      end
      @nics = list
    end
    
    # 
    # Creates a new instance of the {NetworkConfiguration} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Dns, Hash] :dns The value of attribute `dns`.
    # 
    # @option opts [Array<Nic>, Array<Hash>] :nics The values of attribute `nics`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.dns = opts[:dns]
      self.nics = opts[:nics]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @dns == other.dns &&
      @nics == other.nics
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @dns.hash +
      @nics.hash
    end
    
  end
  
  class NetworkFilter < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `version` attribute.
    # 
    # @return [Version]
    # 
    def version
      @version
    end
    
    # 
    # Sets the value of the `version` attribute.
    # 
    # @param value [Version, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Version} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def version=(value)
      if value.is_a?(Hash)
        value = Version.new(value)
      end
      @version = value
    end
    
    # 
    # Creates a new instance of the {NetworkFilter} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Version, Hash] :version The value of attribute `version`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.version = opts[:version]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @version == other.version
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @version.hash
    end
    
  end
  
  class NetworkFilterParameter < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `nic` attribute.
    # 
    # @return [Nic]
    # 
    def nic
      @nic
    end
    
    # 
    # Sets the value of the `nic` attribute.
    # 
    # @param value [Nic, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Nic} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def nic=(value)
      if value.is_a?(Hash)
        value = Nic.new(value)
      end
      @nic = value
    end
    
    # 
    # Returns the value of the `value` attribute.
    # 
    # @return [String]
    # 
    def value
      @value
    end
    
    # 
    # Sets the value of the `value` attribute.
    # 
    # @param value [String]
    # 
    def value=(value)
      @value = value
    end
    
    # 
    # Creates a new instance of the {NetworkFilterParameter} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Nic, Hash] :nic The value of attribute `nic`.
    # 
    # @option opts [String] :value The value of attribute `value`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.nic = opts[:nic]
      self.value = opts[:value]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @nic == other.nic &&
      @value == other.value
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @nic.hash +
      @value.hash
    end
    
  end
  
  class NetworkLabel < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `host_nic` attribute.
    # 
    # @return [HostNic]
    # 
    def host_nic
      @host_nic
    end
    
    # 
    # Sets the value of the `host_nic` attribute.
    # 
    # @param value [HostNic, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostNic} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host_nic=(value)
      if value.is_a?(Hash)
        value = HostNic.new(value)
      end
      @host_nic = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `network` attribute.
    # 
    # @return [Network]
    # 
    def network
      @network
    end
    
    # 
    # Sets the value of the `network` attribute.
    # 
    # @param value [Network, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Network} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def network=(value)
      if value.is_a?(Hash)
        value = Network.new(value)
      end
      @network = value
    end
    
    # 
    # Creates a new instance of the {NetworkLabel} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [HostNic, Hash] :host_nic The value of attribute `host_nic`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Network, Hash] :network The value of attribute `network`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.host_nic = opts[:host_nic]
      self.network = opts[:network]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @host_nic == other.host_nic &&
      @network == other.network
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @host_nic.hash +
      @network.hash
    end
    
  end
  
  class NfsProfileDetail < EntityProfileDetail
    
    # 
    # Returns the value of the `nfs_server_ip` attribute.
    # 
    # @return [String]
    # 
    def nfs_server_ip
      @nfs_server_ip
    end
    
    # 
    # Sets the value of the `nfs_server_ip` attribute.
    # 
    # @param value [String]
    # 
    def nfs_server_ip=(value)
      @nfs_server_ip = value
    end
    
    # 
    # Returns the value of the `profile_details` attribute.
    # 
    # @return [Array<ProfileDetail>]
    # 
    def profile_details
      @profile_details
    end
    
    # 
    # Sets the value of the `profile_details` attribute.
    # 
    # @param list [Array<ProfileDetail>]
    # 
    def profile_details=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = ProfileDetail.new(value)
          end
        end
      end
      @profile_details = list
    end
    
    # 
    # Creates a new instance of the {NfsProfileDetail} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :nfs_server_ip The value of attribute `nfs_server_ip`.
    # 
    # @option opts [Array<ProfileDetail>, Array<Hash>] :profile_details The values of attribute `profile_details`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.nfs_server_ip = opts[:nfs_server_ip]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @nfs_server_ip == other.nfs_server_ip
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @nfs_server_ip.hash
    end
    
  end
  
  class NicConfiguration < Struct
    
    # 
    # Returns the value of the `boot_protocol` attribute.
    # 
    # @return [BootProtocol]
    # 
    def boot_protocol
      @boot_protocol
    end
    
    # 
    # Sets the value of the `boot_protocol` attribute.
    # 
    # @param value [BootProtocol]
    # 
    def boot_protocol=(value)
      @boot_protocol = value
    end
    
    # 
    # Returns the value of the `ip` attribute.
    # 
    # @return [Ip]
    # 
    def ip
      @ip
    end
    
    # 
    # Sets the value of the `ip` attribute.
    # 
    # @param value [Ip, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Ip} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def ip=(value)
      if value.is_a?(Hash)
        value = Ip.new(value)
      end
      @ip = value
    end
    
    # 
    # Returns the value of the `ipv6` attribute.
    # 
    # @return [Ip]
    # 
    def ipv6
      @ipv6
    end
    
    # 
    # Sets the value of the `ipv6` attribute.
    # 
    # @param value [Ip, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Ip} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def ipv6=(value)
      if value.is_a?(Hash)
        value = Ip.new(value)
      end
      @ipv6 = value
    end
    
    # 
    # Returns the value of the `ipv6_boot_protocol` attribute.
    # 
    # @return [BootProtocol]
    # 
    def ipv6_boot_protocol
      @ipv6_boot_protocol
    end
    
    # 
    # Sets the value of the `ipv6_boot_protocol` attribute.
    # 
    # @param value [BootProtocol]
    # 
    def ipv6_boot_protocol=(value)
      @ipv6_boot_protocol = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `on_boot` attribute.
    # 
    # @return [Boolean]
    # 
    def on_boot
      @on_boot
    end
    
    # 
    # Sets the value of the `on_boot` attribute.
    # 
    # @param value [Boolean]
    # 
    def on_boot=(value)
      @on_boot = value
    end
    
    # 
    # Creates a new instance of the {NicConfiguration} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [BootProtocol] :boot_protocol The value of attribute `boot_protocol`.
    # 
    # @option opts [Ip, Hash] :ip The value of attribute `ip`.
    # 
    # @option opts [Ip, Hash] :ipv6 The value of attribute `ipv6`.
    # 
    # @option opts [BootProtocol] :ipv6_boot_protocol The value of attribute `ipv6_boot_protocol`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Boolean] :on_boot The value of attribute `on_boot`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.boot_protocol = opts[:boot_protocol]
      self.ip = opts[:ip]
      self.ipv6 = opts[:ipv6]
      self.ipv6_boot_protocol = opts[:ipv6_boot_protocol]
      self.name = opts[:name]
      self.on_boot = opts[:on_boot]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @boot_protocol == other.boot_protocol &&
      @ip == other.ip &&
      @ipv6 == other.ipv6 &&
      @ipv6_boot_protocol == other.ipv6_boot_protocol &&
      @name == other.name &&
      @on_boot == other.on_boot
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @boot_protocol.hash +
      @ip.hash +
      @ipv6.hash +
      @ipv6_boot_protocol.hash +
      @name.hash +
      @on_boot.hash
    end
    
  end
  
  class NumaNode < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `cpu` attribute.
    # 
    # @return [Cpu]
    # 
    def cpu
      @cpu
    end
    
    # 
    # Sets the value of the `cpu` attribute.
    # 
    # @param value [Cpu, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cpu} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu=(value)
      if value.is_a?(Hash)
        value = Cpu.new(value)
      end
      @cpu = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `index` attribute.
    # 
    # @return [Integer]
    # 
    def index
      @index
    end
    
    # 
    # Sets the value of the `index` attribute.
    # 
    # @param value [Integer]
    # 
    def index=(value)
      @index = value
    end
    
    # 
    # Returns the value of the `memory` attribute.
    # 
    # @return [Integer]
    # 
    def memory
      @memory
    end
    
    # 
    # Sets the value of the `memory` attribute.
    # 
    # @param value [Integer]
    # 
    def memory=(value)
      @memory = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `node_distance` attribute.
    # 
    # @return [String]
    # 
    def node_distance
      @node_distance
    end
    
    # 
    # Sets the value of the `node_distance` attribute.
    # 
    # @param value [String]
    # 
    def node_distance=(value)
      @node_distance = value
    end
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Creates a new instance of the {NumaNode} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Cpu, Hash] :cpu The value of attribute `cpu`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Integer] :index The value of attribute `index`.
    # 
    # @option opts [Integer] :memory The value of attribute `memory`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :node_distance The value of attribute `node_distance`.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cpu = opts[:cpu]
      self.host = opts[:host]
      self.index = opts[:index]
      self.memory = opts[:memory]
      self.node_distance = opts[:node_distance]
      self.statistics = opts[:statistics]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cpu == other.cpu &&
      @host == other.host &&
      @index == other.index &&
      @memory == other.memory &&
      @node_distance == other.node_distance &&
      @statistics == other.statistics
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cpu.hash +
      @host.hash +
      @index.hash +
      @memory.hash +
      @node_distance.hash +
      @statistics.hash
    end
    
  end
  
  class NumaNodePin < Struct
    
    # 
    # Returns the value of the `host_numa_node` attribute.
    # 
    # @return [NumaNode]
    # 
    def host_numa_node
      @host_numa_node
    end
    
    # 
    # Sets the value of the `host_numa_node` attribute.
    # 
    # @param value [NumaNode, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::NumaNode} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host_numa_node=(value)
      if value.is_a?(Hash)
        value = NumaNode.new(value)
      end
      @host_numa_node = value
    end
    
    # 
    # Returns the value of the `index` attribute.
    # 
    # @return [Integer]
    # 
    def index
      @index
    end
    
    # 
    # Sets the value of the `index` attribute.
    # 
    # @param value [Integer]
    # 
    def index=(value)
      @index = value
    end
    
    # 
    # Returns the value of the `pinned` attribute.
    # 
    # @return [Boolean]
    # 
    def pinned
      @pinned
    end
    
    # 
    # Sets the value of the `pinned` attribute.
    # 
    # @param value [Boolean]
    # 
    def pinned=(value)
      @pinned = value
    end
    
    # 
    # Creates a new instance of the {NumaNodePin} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [NumaNode, Hash] :host_numa_node The value of attribute `host_numa_node`.
    # 
    # @option opts [Integer] :index The value of attribute `index`.
    # 
    # @option opts [Boolean] :pinned The value of attribute `pinned`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.host_numa_node = opts[:host_numa_node]
      self.index = opts[:index]
      self.pinned = opts[:pinned]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @host_numa_node == other.host_numa_node &&
      @index == other.index &&
      @pinned == other.pinned
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @host_numa_node.hash +
      @index.hash +
      @pinned.hash
    end
    
  end
  
  class OpenStackImage < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `openstack_image_provider` attribute.
    # 
    # @return [OpenStackImageProvider]
    # 
    def openstack_image_provider
      @openstack_image_provider
    end
    
    # 
    # Sets the value of the `openstack_image_provider` attribute.
    # 
    # @param value [OpenStackImageProvider, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::OpenStackImageProvider} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def openstack_image_provider=(value)
      if value.is_a?(Hash)
        value = OpenStackImageProvider.new(value)
      end
      @openstack_image_provider = value
    end
    
    # 
    # Creates a new instance of the {OpenStackImage} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [OpenStackImageProvider, Hash] :openstack_image_provider The value of attribute `openstack_image_provider`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.openstack_image_provider = opts[:openstack_image_provider]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @openstack_image_provider == other.openstack_image_provider
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @openstack_image_provider.hash
    end
    
  end
  
  class OpenStackNetwork < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `openstack_network_provider` attribute.
    # 
    # @return [OpenStackNetworkProvider]
    # 
    def openstack_network_provider
      @openstack_network_provider
    end
    
    # 
    # Sets the value of the `openstack_network_provider` attribute.
    # 
    # @param value [OpenStackNetworkProvider, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::OpenStackNetworkProvider} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def openstack_network_provider=(value)
      if value.is_a?(Hash)
        value = OpenStackNetworkProvider.new(value)
      end
      @openstack_network_provider = value
    end
    
    # 
    # Creates a new instance of the {OpenStackNetwork} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [OpenStackNetworkProvider, Hash] :openstack_network_provider The value of attribute `openstack_network_provider`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.openstack_network_provider = opts[:openstack_network_provider]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @openstack_network_provider == other.openstack_network_provider
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @openstack_network_provider.hash
    end
    
  end
  
  class OpenStackSubnet < Identified
    
    # 
    # Returns the value of the `cidr` attribute.
    # 
    # @return [String]
    # 
    def cidr
      @cidr
    end
    
    # 
    # Sets the value of the `cidr` attribute.
    # 
    # @param value [String]
    # 
    def cidr=(value)
      @cidr = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `dns_servers` attribute.
    # 
    # @return [Array<String>]
    # 
    def dns_servers
      @dns_servers
    end
    
    # 
    # Sets the value of the `dns_servers` attribute.
    # 
    # @param list [Array<String>]
    # 
    def dns_servers=(list)
      @dns_servers = list
    end
    
    # 
    # Returns the value of the `gateway` attribute.
    # 
    # @return [String]
    # 
    def gateway
      @gateway
    end
    
    # 
    # Sets the value of the `gateway` attribute.
    # 
    # @param value [String]
    # 
    def gateway=(value)
      @gateway = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `ip_version` attribute.
    # 
    # @return [String]
    # 
    def ip_version
      @ip_version
    end
    
    # 
    # Sets the value of the `ip_version` attribute.
    # 
    # @param value [String]
    # 
    def ip_version=(value)
      @ip_version = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `openstack_network` attribute.
    # 
    # @return [OpenStackNetwork]
    # 
    def openstack_network
      @openstack_network
    end
    
    # 
    # Sets the value of the `openstack_network` attribute.
    # 
    # @param value [OpenStackNetwork, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::OpenStackNetwork} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def openstack_network=(value)
      if value.is_a?(Hash)
        value = OpenStackNetwork.new(value)
      end
      @openstack_network = value
    end
    
    # 
    # Creates a new instance of the {OpenStackSubnet} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :cidr The value of attribute `cidr`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Array<String>, Array<Hash>] :dns_servers The values of attribute `dns_servers`.
    # 
    # @option opts [String] :gateway The value of attribute `gateway`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :ip_version The value of attribute `ip_version`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [OpenStackNetwork, Hash] :openstack_network The value of attribute `openstack_network`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cidr = opts[:cidr]
      self.dns_servers = opts[:dns_servers]
      self.gateway = opts[:gateway]
      self.ip_version = opts[:ip_version]
      self.openstack_network = opts[:openstack_network]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cidr == other.cidr &&
      @dns_servers == other.dns_servers &&
      @gateway == other.gateway &&
      @ip_version == other.ip_version &&
      @openstack_network == other.openstack_network
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cidr.hash +
      @dns_servers.hash +
      @gateway.hash +
      @ip_version.hash +
      @openstack_network.hash
    end
    
  end
  
  class OpenStackVolumeType < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `openstack_volume_provider` attribute.
    # 
    # @return [OpenStackVolumeProvider]
    # 
    def openstack_volume_provider
      @openstack_volume_provider
    end
    
    # 
    # Sets the value of the `openstack_volume_provider` attribute.
    # 
    # @param value [OpenStackVolumeProvider, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::OpenStackVolumeProvider} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def openstack_volume_provider=(value)
      if value.is_a?(Hash)
        value = OpenStackVolumeProvider.new(value)
      end
      @openstack_volume_provider = value
    end
    
    # 
    # Returns the value of the `properties` attribute.
    # 
    # @return [Array<Property>]
    # 
    def properties
      @properties
    end
    
    # 
    # Sets the value of the `properties` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @properties = list
    end
    
    # 
    # Creates a new instance of the {OpenStackVolumeType} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [OpenStackVolumeProvider, Hash] :openstack_volume_provider The value of attribute `openstack_volume_provider`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :properties The values of attribute `properties`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.openstack_volume_provider = opts[:openstack_volume_provider]
      self.properties = opts[:properties]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @openstack_volume_provider == other.openstack_volume_provider &&
      @properties == other.properties
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @openstack_volume_provider.hash +
      @properties.hash
    end
    
  end
  
  class OpenstackVolumeAuthenticationKey < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `creation_date` attribute.
    # 
    # @return [DateTime]
    # 
    def creation_date
      @creation_date
    end
    
    # 
    # Sets the value of the `creation_date` attribute.
    # 
    # @param value [DateTime]
    # 
    def creation_date=(value)
      @creation_date = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `openstack_volume_provider` attribute.
    # 
    # @return [OpenStackVolumeProvider]
    # 
    def openstack_volume_provider
      @openstack_volume_provider
    end
    
    # 
    # Sets the value of the `openstack_volume_provider` attribute.
    # 
    # @param value [OpenStackVolumeProvider, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::OpenStackVolumeProvider} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def openstack_volume_provider=(value)
      if value.is_a?(Hash)
        value = OpenStackVolumeProvider.new(value)
      end
      @openstack_volume_provider = value
    end
    
    # 
    # Returns the value of the `usage_type` attribute.
    # 
    # @return [OpenstackVolumeAuthenticationKeyUsageType]
    # 
    def usage_type
      @usage_type
    end
    
    # 
    # Sets the value of the `usage_type` attribute.
    # 
    # @param value [OpenstackVolumeAuthenticationKeyUsageType]
    # 
    def usage_type=(value)
      @usage_type = value
    end
    
    # 
    # Returns the value of the `uuid` attribute.
    # 
    # @return [String]
    # 
    def uuid
      @uuid
    end
    
    # 
    # Sets the value of the `uuid` attribute.
    # 
    # @param value [String]
    # 
    def uuid=(value)
      @uuid = value
    end
    
    # 
    # Returns the value of the `value` attribute.
    # 
    # @return [String]
    # 
    def value
      @value
    end
    
    # 
    # Sets the value of the `value` attribute.
    # 
    # @param value [String]
    # 
    def value=(value)
      @value = value
    end
    
    # 
    # Creates a new instance of the {OpenstackVolumeAuthenticationKey} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [DateTime] :creation_date The value of attribute `creation_date`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [OpenStackVolumeProvider, Hash] :openstack_volume_provider The value of attribute `openstack_volume_provider`.
    # 
    # @option opts [OpenstackVolumeAuthenticationKeyUsageType] :usage_type The value of attribute `usage_type`.
    # 
    # @option opts [String] :uuid The value of attribute `uuid`.
    # 
    # @option opts [String] :value The value of attribute `value`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.creation_date = opts[:creation_date]
      self.openstack_volume_provider = opts[:openstack_volume_provider]
      self.usage_type = opts[:usage_type]
      self.uuid = opts[:uuid]
      self.value = opts[:value]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @creation_date == other.creation_date &&
      @openstack_volume_provider == other.openstack_volume_provider &&
      @usage_type == other.usage_type &&
      @uuid == other.uuid &&
      @value == other.value
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @creation_date.hash +
      @openstack_volume_provider.hash +
      @usage_type.hash +
      @uuid.hash +
      @value.hash
    end
    
  end
  
  class OperatingSystem < Struct
    
    # 
    # Returns the value of the `boot` attribute.
    # 
    # @return [Boot]
    # 
    def boot
      @boot
    end
    
    # 
    # Sets the value of the `boot` attribute.
    # 
    # @param value [Boot, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Boot} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def boot=(value)
      if value.is_a?(Hash)
        value = Boot.new(value)
      end
      @boot = value
    end
    
    # 
    # Returns the value of the `cmdline` attribute.
    # 
    # @return [String]
    # 
    def cmdline
      @cmdline
    end
    
    # 
    # Sets the value of the `cmdline` attribute.
    # 
    # @param value [String]
    # 
    def cmdline=(value)
      @cmdline = value
    end
    
    # 
    # Returns the value of the `custom_kernel_cmdline` attribute.
    # 
    # @return [String]
    # 
    def custom_kernel_cmdline
      @custom_kernel_cmdline
    end
    
    # 
    # Sets the value of the `custom_kernel_cmdline` attribute.
    # 
    # @param value [String]
    # 
    def custom_kernel_cmdline=(value)
      @custom_kernel_cmdline = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `initrd` attribute.
    # 
    # @return [String]
    # 
    def initrd
      @initrd
    end
    
    # 
    # Sets the value of the `initrd` attribute.
    # 
    # @param value [String]
    # 
    def initrd=(value)
      @initrd = value
    end
    
    # 
    # Returns the value of the `kernel` attribute.
    # 
    # @return [String]
    # 
    def kernel
      @kernel
    end
    
    # 
    # Sets the value of the `kernel` attribute.
    # 
    # @param value [String]
    # 
    def kernel=(value)
      @kernel = value
    end
    
    # 
    # Returns the value of the `reported_kernel_cmdline` attribute.
    # 
    # @return [String]
    # 
    def reported_kernel_cmdline
      @reported_kernel_cmdline
    end
    
    # 
    # Sets the value of the `reported_kernel_cmdline` attribute.
    # 
    # @param value [String]
    # 
    def reported_kernel_cmdline=(value)
      @reported_kernel_cmdline = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [String]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [String]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `version` attribute.
    # 
    # @return [Version]
    # 
    def version
      @version
    end
    
    # 
    # Sets the value of the `version` attribute.
    # 
    # @param value [Version, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Version} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def version=(value)
      if value.is_a?(Hash)
        value = Version.new(value)
      end
      @version = value
    end
    
    # 
    # Creates a new instance of the {OperatingSystem} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boot, Hash] :boot The value of attribute `boot`.
    # 
    # @option opts [String] :cmdline The value of attribute `cmdline`.
    # 
    # @option opts [String] :custom_kernel_cmdline The value of attribute `custom_kernel_cmdline`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :initrd The value of attribute `initrd`.
    # 
    # @option opts [String] :kernel The value of attribute `kernel`.
    # 
    # @option opts [String] :reported_kernel_cmdline The value of attribute `reported_kernel_cmdline`.
    # 
    # @option opts [String] :type The value of attribute `type`.
    # 
    # @option opts [Version, Hash] :version The value of attribute `version`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.boot = opts[:boot]
      self.cmdline = opts[:cmdline]
      self.custom_kernel_cmdline = opts[:custom_kernel_cmdline]
      self.description = opts[:description]
      self.initrd = opts[:initrd]
      self.kernel = opts[:kernel]
      self.reported_kernel_cmdline = opts[:reported_kernel_cmdline]
      self.type = opts[:type]
      self.version = opts[:version]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @boot == other.boot &&
      @cmdline == other.cmdline &&
      @custom_kernel_cmdline == other.custom_kernel_cmdline &&
      @description == other.description &&
      @initrd == other.initrd &&
      @kernel == other.kernel &&
      @reported_kernel_cmdline == other.reported_kernel_cmdline &&
      @type == other.type &&
      @version == other.version
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @boot.hash +
      @cmdline.hash +
      @custom_kernel_cmdline.hash +
      @description.hash +
      @initrd.hash +
      @kernel.hash +
      @reported_kernel_cmdline.hash +
      @type.hash +
      @version.hash
    end
    
  end
  
  class OperatingSystemInfo < Identified
    
    # 
    # Returns the value of the `architecture` attribute.
    # 
    # @return [Architecture]
    # 
    def architecture
      @architecture
    end
    
    # 
    # Sets the value of the `architecture` attribute.
    # 
    # @param value [Architecture]
    # 
    def architecture=(value)
      @architecture = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `large_icon` attribute.
    # 
    # @return [Icon]
    # 
    def large_icon
      @large_icon
    end
    
    # 
    # Sets the value of the `large_icon` attribute.
    # 
    # @param value [Icon, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Icon} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def large_icon=(value)
      if value.is_a?(Hash)
        value = Icon.new(value)
      end
      @large_icon = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `small_icon` attribute.
    # 
    # @return [Icon]
    # 
    def small_icon
      @small_icon
    end
    
    # 
    # Sets the value of the `small_icon` attribute.
    # 
    # @param value [Icon, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Icon} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def small_icon=(value)
      if value.is_a?(Hash)
        value = Icon.new(value)
      end
      @small_icon = value
    end
    
    # 
    # Returns the value of the `tpm_support` attribute.
    # 
    # @return [TpmSupport]
    # 
    def tpm_support
      @tpm_support
    end
    
    # 
    # Sets the value of the `tpm_support` attribute.
    # 
    # @param value [TpmSupport]
    # 
    def tpm_support=(value)
      @tpm_support = value
    end
    
    # 
    # Creates a new instance of the {OperatingSystemInfo} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Architecture] :architecture The value of attribute `architecture`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Icon, Hash] :large_icon The value of attribute `large_icon`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Icon, Hash] :small_icon The value of attribute `small_icon`.
    # 
    # @option opts [TpmSupport] :tpm_support The value of attribute `tpm_support`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.architecture = opts[:architecture]
      self.large_icon = opts[:large_icon]
      self.small_icon = opts[:small_icon]
      self.tpm_support = opts[:tpm_support]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @architecture == other.architecture &&
      @large_icon == other.large_icon &&
      @small_icon == other.small_icon &&
      @tpm_support == other.tpm_support
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @architecture.hash +
      @large_icon.hash +
      @small_icon.hash +
      @tpm_support.hash
    end
    
  end
  
  class Option < Struct
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [String]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [String]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `value` attribute.
    # 
    # @return [String]
    # 
    def value
      @value
    end
    
    # 
    # Sets the value of the `value` attribute.
    # 
    # @param value [String]
    # 
    def value=(value)
      @value = value
    end
    
    # 
    # Creates a new instance of the {Option} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :type The value of attribute `type`.
    # 
    # @option opts [String] :value The value of attribute `value`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.name = opts[:name]
      self.type = opts[:type]
      self.value = opts[:value]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @name == other.name &&
      @type == other.type &&
      @value == other.value
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @name.hash +
      @type.hash +
      @value.hash
    end
    
  end
  
  class Package < Struct
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {Package} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.name = opts[:name]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @name == other.name
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @name.hash
    end
    
  end
  
  class Payload < Struct
    
    # 
    # Returns the value of the `files` attribute.
    # 
    # @return [Array<File>]
    # 
    def files
      @files
    end
    
    # 
    # Sets the value of the `files` attribute.
    # 
    # @param list [Array<File>]
    # 
    def files=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = File.new(value)
          end
        end
      end
      @files = list
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [VmDeviceType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [VmDeviceType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `volume_id` attribute.
    # 
    # @return [String]
    # 
    def volume_id
      @volume_id
    end
    
    # 
    # Sets the value of the `volume_id` attribute.
    # 
    # @param value [String]
    # 
    def volume_id=(value)
      @volume_id = value
    end
    
    # 
    # Creates a new instance of the {Payload} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<File>, Array<Hash>] :files The values of attribute `files`.
    # 
    # @option opts [VmDeviceType] :type The value of attribute `type`.
    # 
    # @option opts [String] :volume_id The value of attribute `volume_id`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.files = opts[:files]
      self.type = opts[:type]
      self.volume_id = opts[:volume_id]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @files == other.files &&
      @type == other.type &&
      @volume_id == other.volume_id
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @files.hash +
      @type.hash +
      @volume_id.hash
    end
    
  end
  
  class Permission < Identified
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `data_center` attribute.
    # 
    # @return [DataCenter]
    # 
    def data_center
      @data_center
    end
    
    # 
    # Sets the value of the `data_center` attribute.
    # 
    # @param value [DataCenter, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DataCenter} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def data_center=(value)
      if value.is_a?(Hash)
        value = DataCenter.new(value)
      end
      @data_center = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `disk` attribute.
    # 
    # @return [Disk]
    # 
    def disk
      @disk
    end
    
    # 
    # Sets the value of the `disk` attribute.
    # 
    # @param value [Disk, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Disk} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def disk=(value)
      if value.is_a?(Hash)
        value = Disk.new(value)
      end
      @disk = value
    end
    
    # 
    # Returns the value of the `group` attribute.
    # 
    # @return [Group]
    # 
    def group
      @group
    end
    
    # 
    # Sets the value of the `group` attribute.
    # 
    # @param value [Group, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Group} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def group=(value)
      if value.is_a?(Hash)
        value = Group.new(value)
      end
      @group = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `role` attribute.
    # 
    # @return [Role]
    # 
    def role
      @role
    end
    
    # 
    # Sets the value of the `role` attribute.
    # 
    # @param value [Role, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Role} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def role=(value)
      if value.is_a?(Hash)
        value = Role.new(value)
      end
      @role = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `user` attribute.
    # 
    # @return [User]
    # 
    def user
      @user
    end
    
    # 
    # Sets the value of the `user` attribute.
    # 
    # @param value [User, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::User} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def user=(value)
      if value.is_a?(Hash)
        value = User.new(value)
      end
      @user = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `vm_pool` attribute.
    # 
    # @return [VmPool]
    # 
    def vm_pool
      @vm_pool
    end
    
    # 
    # Sets the value of the `vm_pool` attribute.
    # 
    # @param value [VmPool, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VmPool} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm_pool=(value)
      if value.is_a?(Hash)
        value = VmPool.new(value)
      end
      @vm_pool = value
    end
    
    # 
    # Creates a new instance of the {Permission} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [DataCenter, Hash] :data_center The value of attribute `data_center`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Disk, Hash] :disk The value of attribute `disk`.
    # 
    # @option opts [Group, Hash] :group The value of attribute `group`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Role, Hash] :role The value of attribute `role`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [User, Hash] :user The value of attribute `user`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [VmPool, Hash] :vm_pool The value of attribute `vm_pool`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cluster = opts[:cluster]
      self.data_center = opts[:data_center]
      self.disk = opts[:disk]
      self.group = opts[:group]
      self.host = opts[:host]
      self.role = opts[:role]
      self.storage_domain = opts[:storage_domain]
      self.template = opts[:template]
      self.user = opts[:user]
      self.vm = opts[:vm]
      self.vm_pool = opts[:vm_pool]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cluster == other.cluster &&
      @data_center == other.data_center &&
      @disk == other.disk &&
      @group == other.group &&
      @host == other.host &&
      @role == other.role &&
      @storage_domain == other.storage_domain &&
      @template == other.template &&
      @user == other.user &&
      @vm == other.vm &&
      @vm_pool == other.vm_pool
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cluster.hash +
      @data_center.hash +
      @disk.hash +
      @group.hash +
      @host.hash +
      @role.hash +
      @storage_domain.hash +
      @template.hash +
      @user.hash +
      @vm.hash +
      @vm_pool.hash
    end
    
  end
  
  class Permit < Identified
    
    # 
    # Returns the value of the `administrative` attribute.
    # 
    # @return [Boolean]
    # 
    def administrative
      @administrative
    end
    
    # 
    # Sets the value of the `administrative` attribute.
    # 
    # @param value [Boolean]
    # 
    def administrative=(value)
      @administrative = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `role` attribute.
    # 
    # @return [Role]
    # 
    def role
      @role
    end
    
    # 
    # Sets the value of the `role` attribute.
    # 
    # @param value [Role, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Role} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def role=(value)
      if value.is_a?(Hash)
        value = Role.new(value)
      end
      @role = value
    end
    
    # 
    # Creates a new instance of the {Permit} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :administrative The value of attribute `administrative`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Role, Hash] :role The value of attribute `role`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.administrative = opts[:administrative]
      self.role = opts[:role]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @administrative == other.administrative &&
      @role == other.role
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @administrative.hash +
      @role.hash
    end
    
  end
  
  class PmProxy < Struct
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [PmProxyType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [PmProxyType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Creates a new instance of the {PmProxy} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [PmProxyType] :type The value of attribute `type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.type = opts[:type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @type == other.type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @type.hash
    end
    
  end
  
  class PortMirroring < Struct
    
    # 
    # Creates a new instance of the {PortMirroring} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # 
    def initialize(opts = {})
      super(opts)
    end
    
  end
  
  class PowerManagement < Struct
    
    # 
    # Returns the value of the `address` attribute.
    # 
    # @return [String]
    # 
    def address
      @address
    end
    
    # 
    # Sets the value of the `address` attribute.
    # 
    # @param value [String]
    # 
    def address=(value)
      @address = value
    end
    
    # 
    # Returns the value of the `agents` attribute.
    # 
    # @return [Array<Agent>]
    # 
    def agents
      @agents
    end
    
    # 
    # Sets the value of the `agents` attribute.
    # 
    # @param list [Array<Agent>]
    # 
    def agents=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Agent.new(value)
          end
        end
      end
      @agents = list
    end
    
    # 
    # Returns the value of the `automatic_pm_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def automatic_pm_enabled
      @automatic_pm_enabled
    end
    
    # 
    # Sets the value of the `automatic_pm_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def automatic_pm_enabled=(value)
      @automatic_pm_enabled = value
    end
    
    # 
    # Returns the value of the `enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def enabled
      @enabled
    end
    
    # 
    # Sets the value of the `enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def enabled=(value)
      @enabled = value
    end
    
    # 
    # Returns the value of the `kdump_detection` attribute.
    # 
    # @return [Boolean]
    # 
    def kdump_detection
      @kdump_detection
    end
    
    # 
    # Sets the value of the `kdump_detection` attribute.
    # 
    # @param value [Boolean]
    # 
    def kdump_detection=(value)
      @kdump_detection = value
    end
    
    # 
    # Returns the value of the `options` attribute.
    # 
    # @return [Array<Option>]
    # 
    def options
      @options
    end
    
    # 
    # Sets the value of the `options` attribute.
    # 
    # @param list [Array<Option>]
    # 
    def options=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Option.new(value)
          end
        end
      end
      @options = list
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `pm_proxies` attribute.
    # 
    # @return [Array<PmProxy>]
    # 
    def pm_proxies
      @pm_proxies
    end
    
    # 
    # Sets the value of the `pm_proxies` attribute.
    # 
    # @param list [Array<PmProxy>]
    # 
    def pm_proxies=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = PmProxy.new(value)
          end
        end
      end
      @pm_proxies = list
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [PowerManagementStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [PowerManagementStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [String]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [String]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Creates a new instance of the {PowerManagement} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :address The value of attribute `address`.
    # 
    # @option opts [Array<Agent>, Array<Hash>] :agents The values of attribute `agents`.
    # 
    # @option opts [Boolean] :automatic_pm_enabled The value of attribute `automatic_pm_enabled`.
    # 
    # @option opts [Boolean] :enabled The value of attribute `enabled`.
    # 
    # @option opts [Boolean] :kdump_detection The value of attribute `kdump_detection`.
    # 
    # @option opts [Array<Option>, Array<Hash>] :options The values of attribute `options`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [Array<PmProxy>, Array<Hash>] :pm_proxies The values of attribute `pm_proxies`.
    # 
    # @option opts [PowerManagementStatus] :status The value of attribute `status`.
    # 
    # @option opts [String] :type The value of attribute `type`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.address = opts[:address]
      self.agents = opts[:agents]
      self.automatic_pm_enabled = opts[:automatic_pm_enabled]
      self.enabled = opts[:enabled]
      self.kdump_detection = opts[:kdump_detection]
      self.options = opts[:options]
      self.password = opts[:password]
      self.pm_proxies = opts[:pm_proxies]
      self.status = opts[:status]
      self.type = opts[:type]
      self.username = opts[:username]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @address == other.address &&
      @agents == other.agents &&
      @automatic_pm_enabled == other.automatic_pm_enabled &&
      @enabled == other.enabled &&
      @kdump_detection == other.kdump_detection &&
      @options == other.options &&
      @password == other.password &&
      @pm_proxies == other.pm_proxies &&
      @status == other.status &&
      @type == other.type &&
      @username == other.username
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @address.hash +
      @agents.hash +
      @automatic_pm_enabled.hash +
      @enabled.hash +
      @kdump_detection.hash +
      @options.hash +
      @password.hash +
      @pm_proxies.hash +
      @status.hash +
      @type.hash +
      @username.hash
    end
    
  end
  
  class Product < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {Product} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
    end
    
  end
  
  class ProductInfo < Struct
    
    # 
    # Returns the value of the `instance_id` attribute.
    # 
    # @return [String]
    # 
    def instance_id
      @instance_id
    end
    
    # 
    # Sets the value of the `instance_id` attribute.
    # 
    # @param value [String]
    # 
    def instance_id=(value)
      @instance_id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `vendor` attribute.
    # 
    # @return [String]
    # 
    def vendor
      @vendor
    end
    
    # 
    # Sets the value of the `vendor` attribute.
    # 
    # @param value [String]
    # 
    def vendor=(value)
      @vendor = value
    end
    
    # 
    # Returns the value of the `version` attribute.
    # 
    # @return [Version]
    # 
    def version
      @version
    end
    
    # 
    # Sets the value of the `version` attribute.
    # 
    # @param value [Version, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Version} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def version=(value)
      if value.is_a?(Hash)
        value = Version.new(value)
      end
      @version = value
    end
    
    # 
    # Creates a new instance of the {ProductInfo} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :instance_id The value of attribute `instance_id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :vendor The value of attribute `vendor`.
    # 
    # @option opts [Version, Hash] :version The value of attribute `version`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.instance_id = opts[:instance_id]
      self.name = opts[:name]
      self.vendor = opts[:vendor]
      self.version = opts[:version]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @instance_id == other.instance_id &&
      @name == other.name &&
      @vendor == other.vendor &&
      @version == other.version
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @instance_id.hash +
      @name.hash +
      @vendor.hash +
      @version.hash
    end
    
  end
  
  class ProfileDetail < Struct
    
    # 
    # Returns the value of the `block_statistics` attribute.
    # 
    # @return [Array<BlockStatistic>]
    # 
    def block_statistics
      @block_statistics
    end
    
    # 
    # Sets the value of the `block_statistics` attribute.
    # 
    # @param list [Array<BlockStatistic>]
    # 
    def block_statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = BlockStatistic.new(value)
          end
        end
      end
      @block_statistics = list
    end
    
    # 
    # Returns the value of the `duration` attribute.
    # 
    # @return [Integer]
    # 
    def duration
      @duration
    end
    
    # 
    # Sets the value of the `duration` attribute.
    # 
    # @param value [Integer]
    # 
    def duration=(value)
      @duration = value
    end
    
    # 
    # Returns the value of the `fop_statistics` attribute.
    # 
    # @return [Array<FopStatistic>]
    # 
    def fop_statistics
      @fop_statistics
    end
    
    # 
    # Sets the value of the `fop_statistics` attribute.
    # 
    # @param list [Array<FopStatistic>]
    # 
    def fop_statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = FopStatistic.new(value)
          end
        end
      end
      @fop_statistics = list
    end
    
    # 
    # Returns the value of the `profile_type` attribute.
    # 
    # @return [String]
    # 
    def profile_type
      @profile_type
    end
    
    # 
    # Sets the value of the `profile_type` attribute.
    # 
    # @param value [String]
    # 
    def profile_type=(value)
      @profile_type = value
    end
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Creates a new instance of the {ProfileDetail} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<BlockStatistic>, Array<Hash>] :block_statistics The values of attribute `block_statistics`.
    # 
    # @option opts [Integer] :duration The value of attribute `duration`.
    # 
    # @option opts [Array<FopStatistic>, Array<Hash>] :fop_statistics The values of attribute `fop_statistics`.
    # 
    # @option opts [String] :profile_type The value of attribute `profile_type`.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.block_statistics = opts[:block_statistics]
      self.duration = opts[:duration]
      self.fop_statistics = opts[:fop_statistics]
      self.profile_type = opts[:profile_type]
      self.statistics = opts[:statistics]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @block_statistics == other.block_statistics &&
      @duration == other.duration &&
      @fop_statistics == other.fop_statistics &&
      @profile_type == other.profile_type &&
      @statistics == other.statistics
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @block_statistics.hash +
      @duration.hash +
      @fop_statistics.hash +
      @profile_type.hash +
      @statistics.hash
    end
    
  end
  
  class Property < Struct
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `value` attribute.
    # 
    # @return [String]
    # 
    def value
      @value
    end
    
    # 
    # Sets the value of the `value` attribute.
    # 
    # @param value [String]
    # 
    def value=(value)
      @value = value
    end
    
    # 
    # Creates a new instance of the {Property} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :value The value of attribute `value`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.name = opts[:name]
      self.value = opts[:value]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @name == other.name &&
      @value == other.value
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @name.hash +
      @value.hash
    end
    
  end
  
  class ProxyTicket < Struct
    
    # 
    # Returns the value of the `value` attribute.
    # 
    # @return [String]
    # 
    def value
      @value
    end
    
    # 
    # Sets the value of the `value` attribute.
    # 
    # @param value [String]
    # 
    def value=(value)
      @value = value
    end
    
    # 
    # Creates a new instance of the {ProxyTicket} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :value The value of attribute `value`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.value = opts[:value]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @value == other.value
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @value.hash
    end
    
  end
  
  class Qos < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `cpu_limit` attribute.
    # 
    # @return [Integer]
    # 
    def cpu_limit
      @cpu_limit
    end
    
    # 
    # Sets the value of the `cpu_limit` attribute.
    # 
    # @param value [Integer]
    # 
    def cpu_limit=(value)
      @cpu_limit = value
    end
    
    # 
    # Returns the value of the `data_center` attribute.
    # 
    # @return [DataCenter]
    # 
    def data_center
      @data_center
    end
    
    # 
    # Sets the value of the `data_center` attribute.
    # 
    # @param value [DataCenter, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DataCenter} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def data_center=(value)
      if value.is_a?(Hash)
        value = DataCenter.new(value)
      end
      @data_center = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `inbound_average` attribute.
    # 
    # @return [Integer]
    # 
    def inbound_average
      @inbound_average
    end
    
    # 
    # Sets the value of the `inbound_average` attribute.
    # 
    # @param value [Integer]
    # 
    def inbound_average=(value)
      @inbound_average = value
    end
    
    # 
    # Returns the value of the `inbound_burst` attribute.
    # 
    # @return [Integer]
    # 
    def inbound_burst
      @inbound_burst
    end
    
    # 
    # Sets the value of the `inbound_burst` attribute.
    # 
    # @param value [Integer]
    # 
    def inbound_burst=(value)
      @inbound_burst = value
    end
    
    # 
    # Returns the value of the `inbound_peak` attribute.
    # 
    # @return [Integer]
    # 
    def inbound_peak
      @inbound_peak
    end
    
    # 
    # Sets the value of the `inbound_peak` attribute.
    # 
    # @param value [Integer]
    # 
    def inbound_peak=(value)
      @inbound_peak = value
    end
    
    # 
    # Returns the value of the `max_iops` attribute.
    # 
    # @return [Integer]
    # 
    def max_iops
      @max_iops
    end
    
    # 
    # Sets the value of the `max_iops` attribute.
    # 
    # @param value [Integer]
    # 
    def max_iops=(value)
      @max_iops = value
    end
    
    # 
    # Returns the value of the `max_read_iops` attribute.
    # 
    # @return [Integer]
    # 
    def max_read_iops
      @max_read_iops
    end
    
    # 
    # Sets the value of the `max_read_iops` attribute.
    # 
    # @param value [Integer]
    # 
    def max_read_iops=(value)
      @max_read_iops = value
    end
    
    # 
    # Returns the value of the `max_read_throughput` attribute.
    # 
    # @return [Integer]
    # 
    def max_read_throughput
      @max_read_throughput
    end
    
    # 
    # Sets the value of the `max_read_throughput` attribute.
    # 
    # @param value [Integer]
    # 
    def max_read_throughput=(value)
      @max_read_throughput = value
    end
    
    # 
    # Returns the value of the `max_throughput` attribute.
    # 
    # @return [Integer]
    # 
    def max_throughput
      @max_throughput
    end
    
    # 
    # Sets the value of the `max_throughput` attribute.
    # 
    # @param value [Integer]
    # 
    def max_throughput=(value)
      @max_throughput = value
    end
    
    # 
    # Returns the value of the `max_write_iops` attribute.
    # 
    # @return [Integer]
    # 
    def max_write_iops
      @max_write_iops
    end
    
    # 
    # Sets the value of the `max_write_iops` attribute.
    # 
    # @param value [Integer]
    # 
    def max_write_iops=(value)
      @max_write_iops = value
    end
    
    # 
    # Returns the value of the `max_write_throughput` attribute.
    # 
    # @return [Integer]
    # 
    def max_write_throughput
      @max_write_throughput
    end
    
    # 
    # Sets the value of the `max_write_throughput` attribute.
    # 
    # @param value [Integer]
    # 
    def max_write_throughput=(value)
      @max_write_throughput = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `outbound_average` attribute.
    # 
    # @return [Integer]
    # 
    def outbound_average
      @outbound_average
    end
    
    # 
    # Sets the value of the `outbound_average` attribute.
    # 
    # @param value [Integer]
    # 
    def outbound_average=(value)
      @outbound_average = value
    end
    
    # 
    # Returns the value of the `outbound_average_linkshare` attribute.
    # 
    # @return [Integer]
    # 
    def outbound_average_linkshare
      @outbound_average_linkshare
    end
    
    # 
    # Sets the value of the `outbound_average_linkshare` attribute.
    # 
    # @param value [Integer]
    # 
    def outbound_average_linkshare=(value)
      @outbound_average_linkshare = value
    end
    
    # 
    # Returns the value of the `outbound_average_realtime` attribute.
    # 
    # @return [Integer]
    # 
    def outbound_average_realtime
      @outbound_average_realtime
    end
    
    # 
    # Sets the value of the `outbound_average_realtime` attribute.
    # 
    # @param value [Integer]
    # 
    def outbound_average_realtime=(value)
      @outbound_average_realtime = value
    end
    
    # 
    # Returns the value of the `outbound_average_upperlimit` attribute.
    # 
    # @return [Integer]
    # 
    def outbound_average_upperlimit
      @outbound_average_upperlimit
    end
    
    # 
    # Sets the value of the `outbound_average_upperlimit` attribute.
    # 
    # @param value [Integer]
    # 
    def outbound_average_upperlimit=(value)
      @outbound_average_upperlimit = value
    end
    
    # 
    # Returns the value of the `outbound_burst` attribute.
    # 
    # @return [Integer]
    # 
    def outbound_burst
      @outbound_burst
    end
    
    # 
    # Sets the value of the `outbound_burst` attribute.
    # 
    # @param value [Integer]
    # 
    def outbound_burst=(value)
      @outbound_burst = value
    end
    
    # 
    # Returns the value of the `outbound_peak` attribute.
    # 
    # @return [Integer]
    # 
    def outbound_peak
      @outbound_peak
    end
    
    # 
    # Sets the value of the `outbound_peak` attribute.
    # 
    # @param value [Integer]
    # 
    def outbound_peak=(value)
      @outbound_peak = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [QosType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [QosType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Creates a new instance of the {Qos} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Integer] :cpu_limit The value of attribute `cpu_limit`.
    # 
    # @option opts [DataCenter, Hash] :data_center The value of attribute `data_center`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Integer] :inbound_average The value of attribute `inbound_average`.
    # 
    # @option opts [Integer] :inbound_burst The value of attribute `inbound_burst`.
    # 
    # @option opts [Integer] :inbound_peak The value of attribute `inbound_peak`.
    # 
    # @option opts [Integer] :max_iops The value of attribute `max_iops`.
    # 
    # @option opts [Integer] :max_read_iops The value of attribute `max_read_iops`.
    # 
    # @option opts [Integer] :max_read_throughput The value of attribute `max_read_throughput`.
    # 
    # @option opts [Integer] :max_throughput The value of attribute `max_throughput`.
    # 
    # @option opts [Integer] :max_write_iops The value of attribute `max_write_iops`.
    # 
    # @option opts [Integer] :max_write_throughput The value of attribute `max_write_throughput`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Integer] :outbound_average The value of attribute `outbound_average`.
    # 
    # @option opts [Integer] :outbound_average_linkshare The value of attribute `outbound_average_linkshare`.
    # 
    # @option opts [Integer] :outbound_average_realtime The value of attribute `outbound_average_realtime`.
    # 
    # @option opts [Integer] :outbound_average_upperlimit The value of attribute `outbound_average_upperlimit`.
    # 
    # @option opts [Integer] :outbound_burst The value of attribute `outbound_burst`.
    # 
    # @option opts [Integer] :outbound_peak The value of attribute `outbound_peak`.
    # 
    # @option opts [QosType] :type The value of attribute `type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cpu_limit = opts[:cpu_limit]
      self.data_center = opts[:data_center]
      self.inbound_average = opts[:inbound_average]
      self.inbound_burst = opts[:inbound_burst]
      self.inbound_peak = opts[:inbound_peak]
      self.max_iops = opts[:max_iops]
      self.max_read_iops = opts[:max_read_iops]
      self.max_read_throughput = opts[:max_read_throughput]
      self.max_throughput = opts[:max_throughput]
      self.max_write_iops = opts[:max_write_iops]
      self.max_write_throughput = opts[:max_write_throughput]
      self.outbound_average = opts[:outbound_average]
      self.outbound_average_linkshare = opts[:outbound_average_linkshare]
      self.outbound_average_realtime = opts[:outbound_average_realtime]
      self.outbound_average_upperlimit = opts[:outbound_average_upperlimit]
      self.outbound_burst = opts[:outbound_burst]
      self.outbound_peak = opts[:outbound_peak]
      self.type = opts[:type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cpu_limit == other.cpu_limit &&
      @data_center == other.data_center &&
      @inbound_average == other.inbound_average &&
      @inbound_burst == other.inbound_burst &&
      @inbound_peak == other.inbound_peak &&
      @max_iops == other.max_iops &&
      @max_read_iops == other.max_read_iops &&
      @max_read_throughput == other.max_read_throughput &&
      @max_throughput == other.max_throughput &&
      @max_write_iops == other.max_write_iops &&
      @max_write_throughput == other.max_write_throughput &&
      @outbound_average == other.outbound_average &&
      @outbound_average_linkshare == other.outbound_average_linkshare &&
      @outbound_average_realtime == other.outbound_average_realtime &&
      @outbound_average_upperlimit == other.outbound_average_upperlimit &&
      @outbound_burst == other.outbound_burst &&
      @outbound_peak == other.outbound_peak &&
      @type == other.type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cpu_limit.hash +
      @data_center.hash +
      @inbound_average.hash +
      @inbound_burst.hash +
      @inbound_peak.hash +
      @max_iops.hash +
      @max_read_iops.hash +
      @max_read_throughput.hash +
      @max_throughput.hash +
      @max_write_iops.hash +
      @max_write_throughput.hash +
      @outbound_average.hash +
      @outbound_average_linkshare.hash +
      @outbound_average_realtime.hash +
      @outbound_average_upperlimit.hash +
      @outbound_burst.hash +
      @outbound_peak.hash +
      @type.hash
    end
    
  end
  
  class Quota < Identified
    
    # 
    # Returns the value of the `cluster_hard_limit_pct` attribute.
    # 
    # @return [Integer]
    # 
    def cluster_hard_limit_pct
      @cluster_hard_limit_pct
    end
    
    # 
    # Sets the value of the `cluster_hard_limit_pct` attribute.
    # 
    # @param value [Integer]
    # 
    def cluster_hard_limit_pct=(value)
      @cluster_hard_limit_pct = value
    end
    
    # 
    # Returns the value of the `cluster_soft_limit_pct` attribute.
    # 
    # @return [Integer]
    # 
    def cluster_soft_limit_pct
      @cluster_soft_limit_pct
    end
    
    # 
    # Sets the value of the `cluster_soft_limit_pct` attribute.
    # 
    # @param value [Integer]
    # 
    def cluster_soft_limit_pct=(value)
      @cluster_soft_limit_pct = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `data_center` attribute.
    # 
    # @return [DataCenter]
    # 
    def data_center
      @data_center
    end
    
    # 
    # Sets the value of the `data_center` attribute.
    # 
    # @param value [DataCenter, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DataCenter} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def data_center=(value)
      if value.is_a?(Hash)
        value = DataCenter.new(value)
      end
      @data_center = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `disks` attribute.
    # 
    # @return [Array<Disk>]
    # 
    def disks
      @disks
    end
    
    # 
    # Sets the value of the `disks` attribute.
    # 
    # @param list [Array<Disk>]
    # 
    def disks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Disk.new(value)
          end
        end
      end
      @disks = list
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `quota_cluster_limits` attribute.
    # 
    # @return [Array<QuotaClusterLimit>]
    # 
    def quota_cluster_limits
      @quota_cluster_limits
    end
    
    # 
    # Sets the value of the `quota_cluster_limits` attribute.
    # 
    # @param list [Array<QuotaClusterLimit>]
    # 
    def quota_cluster_limits=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = QuotaClusterLimit.new(value)
          end
        end
      end
      @quota_cluster_limits = list
    end
    
    # 
    # Returns the value of the `quota_storage_limits` attribute.
    # 
    # @return [Array<QuotaStorageLimit>]
    # 
    def quota_storage_limits
      @quota_storage_limits
    end
    
    # 
    # Sets the value of the `quota_storage_limits` attribute.
    # 
    # @param list [Array<QuotaStorageLimit>]
    # 
    def quota_storage_limits=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = QuotaStorageLimit.new(value)
          end
        end
      end
      @quota_storage_limits = list
    end
    
    # 
    # Returns the value of the `storage_hard_limit_pct` attribute.
    # 
    # @return [Integer]
    # 
    def storage_hard_limit_pct
      @storage_hard_limit_pct
    end
    
    # 
    # Sets the value of the `storage_hard_limit_pct` attribute.
    # 
    # @param value [Integer]
    # 
    def storage_hard_limit_pct=(value)
      @storage_hard_limit_pct = value
    end
    
    # 
    # Returns the value of the `storage_soft_limit_pct` attribute.
    # 
    # @return [Integer]
    # 
    def storage_soft_limit_pct
      @storage_soft_limit_pct
    end
    
    # 
    # Sets the value of the `storage_soft_limit_pct` attribute.
    # 
    # @param value [Integer]
    # 
    def storage_soft_limit_pct=(value)
      @storage_soft_limit_pct = value
    end
    
    # 
    # Returns the value of the `users` attribute.
    # 
    # @return [Array<User>]
    # 
    def users
      @users
    end
    
    # 
    # Sets the value of the `users` attribute.
    # 
    # @param list [Array<User>]
    # 
    def users=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = User.new(value)
          end
        end
      end
      @users = list
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Creates a new instance of the {Quota} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :cluster_hard_limit_pct The value of attribute `cluster_hard_limit_pct`.
    # 
    # @option opts [Integer] :cluster_soft_limit_pct The value of attribute `cluster_soft_limit_pct`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [DataCenter, Hash] :data_center The value of attribute `data_center`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Array<Disk>, Array<Hash>] :disks The values of attribute `disks`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [Array<QuotaClusterLimit>, Array<Hash>] :quota_cluster_limits The values of attribute `quota_cluster_limits`.
    # 
    # @option opts [Array<QuotaStorageLimit>, Array<Hash>] :quota_storage_limits The values of attribute `quota_storage_limits`.
    # 
    # @option opts [Integer] :storage_hard_limit_pct The value of attribute `storage_hard_limit_pct`.
    # 
    # @option opts [Integer] :storage_soft_limit_pct The value of attribute `storage_soft_limit_pct`.
    # 
    # @option opts [Array<User>, Array<Hash>] :users The values of attribute `users`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cluster_hard_limit_pct = opts[:cluster_hard_limit_pct]
      self.cluster_soft_limit_pct = opts[:cluster_soft_limit_pct]
      self.data_center = opts[:data_center]
      self.disks = opts[:disks]
      self.permissions = opts[:permissions]
      self.quota_cluster_limits = opts[:quota_cluster_limits]
      self.quota_storage_limits = opts[:quota_storage_limits]
      self.storage_hard_limit_pct = opts[:storage_hard_limit_pct]
      self.storage_soft_limit_pct = opts[:storage_soft_limit_pct]
      self.users = opts[:users]
      self.vms = opts[:vms]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cluster_hard_limit_pct == other.cluster_hard_limit_pct &&
      @cluster_soft_limit_pct == other.cluster_soft_limit_pct &&
      @data_center == other.data_center &&
      @disks == other.disks &&
      @permissions == other.permissions &&
      @quota_cluster_limits == other.quota_cluster_limits &&
      @quota_storage_limits == other.quota_storage_limits &&
      @storage_hard_limit_pct == other.storage_hard_limit_pct &&
      @storage_soft_limit_pct == other.storage_soft_limit_pct &&
      @users == other.users &&
      @vms == other.vms
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cluster_hard_limit_pct.hash +
      @cluster_soft_limit_pct.hash +
      @data_center.hash +
      @disks.hash +
      @permissions.hash +
      @quota_cluster_limits.hash +
      @quota_storage_limits.hash +
      @storage_hard_limit_pct.hash +
      @storage_soft_limit_pct.hash +
      @users.hash +
      @vms.hash
    end
    
  end
  
  class QuotaClusterLimit < Identified
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `memory_limit` attribute.
    # 
    # @return [Float]
    # 
    def memory_limit
      @memory_limit
    end
    
    # 
    # Sets the value of the `memory_limit` attribute.
    # 
    # @param value [Float]
    # 
    def memory_limit=(value)
      @memory_limit = value
    end
    
    # 
    # Returns the value of the `memory_usage` attribute.
    # 
    # @return [Float]
    # 
    def memory_usage
      @memory_usage
    end
    
    # 
    # Sets the value of the `memory_usage` attribute.
    # 
    # @param value [Float]
    # 
    def memory_usage=(value)
      @memory_usage = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `quota` attribute.
    # 
    # @return [Quota]
    # 
    def quota
      @quota
    end
    
    # 
    # Sets the value of the `quota` attribute.
    # 
    # @param value [Quota, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Quota} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def quota=(value)
      if value.is_a?(Hash)
        value = Quota.new(value)
      end
      @quota = value
    end
    
    # 
    # Returns the value of the `vcpu_limit` attribute.
    # 
    # @return [Integer]
    # 
    def vcpu_limit
      @vcpu_limit
    end
    
    # 
    # Sets the value of the `vcpu_limit` attribute.
    # 
    # @param value [Integer]
    # 
    def vcpu_limit=(value)
      @vcpu_limit = value
    end
    
    # 
    # Returns the value of the `vcpu_usage` attribute.
    # 
    # @return [Integer]
    # 
    def vcpu_usage
      @vcpu_usage
    end
    
    # 
    # Sets the value of the `vcpu_usage` attribute.
    # 
    # @param value [Integer]
    # 
    def vcpu_usage=(value)
      @vcpu_usage = value
    end
    
    # 
    # Creates a new instance of the {QuotaClusterLimit} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Float] :memory_limit The value of attribute `memory_limit`.
    # 
    # @option opts [Float] :memory_usage The value of attribute `memory_usage`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Quota, Hash] :quota The value of attribute `quota`.
    # 
    # @option opts [Integer] :vcpu_limit The value of attribute `vcpu_limit`.
    # 
    # @option opts [Integer] :vcpu_usage The value of attribute `vcpu_usage`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cluster = opts[:cluster]
      self.memory_limit = opts[:memory_limit]
      self.memory_usage = opts[:memory_usage]
      self.quota = opts[:quota]
      self.vcpu_limit = opts[:vcpu_limit]
      self.vcpu_usage = opts[:vcpu_usage]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cluster == other.cluster &&
      @memory_limit == other.memory_limit &&
      @memory_usage == other.memory_usage &&
      @quota == other.quota &&
      @vcpu_limit == other.vcpu_limit &&
      @vcpu_usage == other.vcpu_usage
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cluster.hash +
      @memory_limit.hash +
      @memory_usage.hash +
      @quota.hash +
      @vcpu_limit.hash +
      @vcpu_usage.hash
    end
    
  end
  
  class QuotaStorageLimit < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `limit` attribute.
    # 
    # @return [Integer]
    # 
    def limit
      @limit
    end
    
    # 
    # Sets the value of the `limit` attribute.
    # 
    # @param value [Integer]
    # 
    def limit=(value)
      @limit = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `quota` attribute.
    # 
    # @return [Quota]
    # 
    def quota
      @quota
    end
    
    # 
    # Sets the value of the `quota` attribute.
    # 
    # @param value [Quota, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Quota} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def quota=(value)
      if value.is_a?(Hash)
        value = Quota.new(value)
      end
      @quota = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `usage` attribute.
    # 
    # @return [Float]
    # 
    def usage
      @usage
    end
    
    # 
    # Sets the value of the `usage` attribute.
    # 
    # @param value [Float]
    # 
    def usage=(value)
      @usage = value
    end
    
    # 
    # Creates a new instance of the {QuotaStorageLimit} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Integer] :limit The value of attribute `limit`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Quota, Hash] :quota The value of attribute `quota`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [Float] :usage The value of attribute `usage`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.limit = opts[:limit]
      self.quota = opts[:quota]
      self.storage_domain = opts[:storage_domain]
      self.usage = opts[:usage]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @limit == other.limit &&
      @quota == other.quota &&
      @storage_domain == other.storage_domain &&
      @usage == other.usage
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @limit.hash +
      @quota.hash +
      @storage_domain.hash +
      @usage.hash
    end
    
  end
  
  class Range < Struct
    
    # 
    # Returns the value of the `from` attribute.
    # 
    # @return [String]
    # 
    def from
      @from
    end
    
    # 
    # Sets the value of the `from` attribute.
    # 
    # @param value [String]
    # 
    def from=(value)
      @from = value
    end
    
    # 
    # Returns the value of the `to` attribute.
    # 
    # @return [String]
    # 
    def to
      @to
    end
    
    # 
    # Sets the value of the `to` attribute.
    # 
    # @param value [String]
    # 
    def to=(value)
      @to = value
    end
    
    # 
    # Creates a new instance of the {Range} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :from The value of attribute `from`.
    # 
    # @option opts [String] :to The value of attribute `to`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.from = opts[:from]
      self.to = opts[:to]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @from == other.from &&
      @to == other.to
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @from.hash +
      @to.hash
    end
    
  end
  
  class Rate < Struct
    
    # 
    # Returns the value of the `bytes` attribute.
    # 
    # @return [Integer]
    # 
    def bytes
      @bytes
    end
    
    # 
    # Sets the value of the `bytes` attribute.
    # 
    # @param value [Integer]
    # 
    def bytes=(value)
      @bytes = value
    end
    
    # 
    # Returns the value of the `period` attribute.
    # 
    # @return [Integer]
    # 
    def period
      @period
    end
    
    # 
    # Sets the value of the `period` attribute.
    # 
    # @param value [Integer]
    # 
    def period=(value)
      @period = value
    end
    
    # 
    # Creates a new instance of the {Rate} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :bytes The value of attribute `bytes`.
    # 
    # @option opts [Integer] :period The value of attribute `period`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.bytes = opts[:bytes]
      self.period = opts[:period]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @bytes == other.bytes &&
      @period == other.period
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @bytes.hash +
      @period.hash
    end
    
  end
  
  class RegistrationAffinityGroupMapping < Struct
    
    # 
    # Returns the value of the `from` attribute.
    # 
    # @return [AffinityGroup]
    # 
    def from
      @from
    end
    
    # 
    # Sets the value of the `from` attribute.
    # 
    # @param value [AffinityGroup, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::AffinityGroup} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def from=(value)
      if value.is_a?(Hash)
        value = AffinityGroup.new(value)
      end
      @from = value
    end
    
    # 
    # Returns the value of the `to` attribute.
    # 
    # @return [AffinityGroup]
    # 
    def to
      @to
    end
    
    # 
    # Sets the value of the `to` attribute.
    # 
    # @param value [AffinityGroup, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::AffinityGroup} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def to=(value)
      if value.is_a?(Hash)
        value = AffinityGroup.new(value)
      end
      @to = value
    end
    
    # 
    # Creates a new instance of the {RegistrationAffinityGroupMapping} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [AffinityGroup, Hash] :from The value of attribute `from`.
    # 
    # @option opts [AffinityGroup, Hash] :to The value of attribute `to`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.from = opts[:from]
      self.to = opts[:to]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @from == other.from &&
      @to == other.to
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @from.hash +
      @to.hash
    end
    
  end
  
  class RegistrationAffinityLabelMapping < Struct
    
    # 
    # Returns the value of the `from` attribute.
    # 
    # @return [AffinityLabel]
    # 
    def from
      @from
    end
    
    # 
    # Sets the value of the `from` attribute.
    # 
    # @param value [AffinityLabel, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::AffinityLabel} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def from=(value)
      if value.is_a?(Hash)
        value = AffinityLabel.new(value)
      end
      @from = value
    end
    
    # 
    # Returns the value of the `to` attribute.
    # 
    # @return [AffinityLabel]
    # 
    def to
      @to
    end
    
    # 
    # Sets the value of the `to` attribute.
    # 
    # @param value [AffinityLabel, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::AffinityLabel} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def to=(value)
      if value.is_a?(Hash)
        value = AffinityLabel.new(value)
      end
      @to = value
    end
    
    # 
    # Creates a new instance of the {RegistrationAffinityLabelMapping} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [AffinityLabel, Hash] :from The value of attribute `from`.
    # 
    # @option opts [AffinityLabel, Hash] :to The value of attribute `to`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.from = opts[:from]
      self.to = opts[:to]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @from == other.from &&
      @to == other.to
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @from.hash +
      @to.hash
    end
    
  end
  
  class RegistrationClusterMapping < Struct
    
    # 
    # Returns the value of the `from` attribute.
    # 
    # @return [Cluster]
    # 
    def from
      @from
    end
    
    # 
    # Sets the value of the `from` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def from=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @from = value
    end
    
    # 
    # Returns the value of the `to` attribute.
    # 
    # @return [Cluster]
    # 
    def to
      @to
    end
    
    # 
    # Sets the value of the `to` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def to=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @to = value
    end
    
    # 
    # Creates a new instance of the {RegistrationClusterMapping} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Cluster, Hash] :from The value of attribute `from`.
    # 
    # @option opts [Cluster, Hash] :to The value of attribute `to`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.from = opts[:from]
      self.to = opts[:to]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @from == other.from &&
      @to == other.to
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @from.hash +
      @to.hash
    end
    
  end
  
  class RegistrationConfiguration < Struct
    
    # 
    # Returns the value of the `affinity_group_mappings` attribute.
    # 
    # @return [Array<RegistrationAffinityGroupMapping>]
    # 
    def affinity_group_mappings
      @affinity_group_mappings
    end
    
    # 
    # Sets the value of the `affinity_group_mappings` attribute.
    # 
    # @param list [Array<RegistrationAffinityGroupMapping>]
    # 
    def affinity_group_mappings=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = RegistrationAffinityGroupMapping.new(value)
          end
        end
      end
      @affinity_group_mappings = list
    end
    
    # 
    # Returns the value of the `affinity_label_mappings` attribute.
    # 
    # @return [Array<RegistrationAffinityLabelMapping>]
    # 
    def affinity_label_mappings
      @affinity_label_mappings
    end
    
    # 
    # Sets the value of the `affinity_label_mappings` attribute.
    # 
    # @param list [Array<RegistrationAffinityLabelMapping>]
    # 
    def affinity_label_mappings=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = RegistrationAffinityLabelMapping.new(value)
          end
        end
      end
      @affinity_label_mappings = list
    end
    
    # 
    # Returns the value of the `cluster_mappings` attribute.
    # 
    # @return [Array<RegistrationClusterMapping>]
    # 
    def cluster_mappings
      @cluster_mappings
    end
    
    # 
    # Sets the value of the `cluster_mappings` attribute.
    # 
    # @param list [Array<RegistrationClusterMapping>]
    # 
    def cluster_mappings=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = RegistrationClusterMapping.new(value)
          end
        end
      end
      @cluster_mappings = list
    end
    
    # 
    # Returns the value of the `domain_mappings` attribute.
    # 
    # @return [Array<RegistrationDomainMapping>]
    # 
    def domain_mappings
      @domain_mappings
    end
    
    # 
    # Sets the value of the `domain_mappings` attribute.
    # 
    # @param list [Array<RegistrationDomainMapping>]
    # 
    def domain_mappings=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = RegistrationDomainMapping.new(value)
          end
        end
      end
      @domain_mappings = list
    end
    
    # 
    # Returns the value of the `lun_mappings` attribute.
    # 
    # @return [Array<RegistrationLunMapping>]
    # 
    def lun_mappings
      @lun_mappings
    end
    
    # 
    # Sets the value of the `lun_mappings` attribute.
    # 
    # @param list [Array<RegistrationLunMapping>]
    # 
    def lun_mappings=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = RegistrationLunMapping.new(value)
          end
        end
      end
      @lun_mappings = list
    end
    
    # 
    # Returns the value of the `role_mappings` attribute.
    # 
    # @return [Array<RegistrationRoleMapping>]
    # 
    def role_mappings
      @role_mappings
    end
    
    # 
    # Sets the value of the `role_mappings` attribute.
    # 
    # @param list [Array<RegistrationRoleMapping>]
    # 
    def role_mappings=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = RegistrationRoleMapping.new(value)
          end
        end
      end
      @role_mappings = list
    end
    
    # 
    # Returns the value of the `vnic_profile_mappings` attribute.
    # 
    # @return [Array<RegistrationVnicProfileMapping>]
    # 
    def vnic_profile_mappings
      @vnic_profile_mappings
    end
    
    # 
    # Sets the value of the `vnic_profile_mappings` attribute.
    # 
    # @param list [Array<RegistrationVnicProfileMapping>]
    # 
    def vnic_profile_mappings=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = RegistrationVnicProfileMapping.new(value)
          end
        end
      end
      @vnic_profile_mappings = list
    end
    
    # 
    # Creates a new instance of the {RegistrationConfiguration} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<RegistrationAffinityGroupMapping>, Array<Hash>] :affinity_group_mappings The values of attribute `affinity_group_mappings`.
    # 
    # @option opts [Array<RegistrationAffinityLabelMapping>, Array<Hash>] :affinity_label_mappings The values of attribute `affinity_label_mappings`.
    # 
    # @option opts [Array<RegistrationClusterMapping>, Array<Hash>] :cluster_mappings The values of attribute `cluster_mappings`.
    # 
    # @option opts [Array<RegistrationDomainMapping>, Array<Hash>] :domain_mappings The values of attribute `domain_mappings`.
    # 
    # @option opts [Array<RegistrationLunMapping>, Array<Hash>] :lun_mappings The values of attribute `lun_mappings`.
    # 
    # @option opts [Array<RegistrationRoleMapping>, Array<Hash>] :role_mappings The values of attribute `role_mappings`.
    # 
    # @option opts [Array<RegistrationVnicProfileMapping>, Array<Hash>] :vnic_profile_mappings The values of attribute `vnic_profile_mappings`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.affinity_group_mappings = opts[:affinity_group_mappings]
      self.affinity_label_mappings = opts[:affinity_label_mappings]
      self.cluster_mappings = opts[:cluster_mappings]
      self.domain_mappings = opts[:domain_mappings]
      self.lun_mappings = opts[:lun_mappings]
      self.role_mappings = opts[:role_mappings]
      self.vnic_profile_mappings = opts[:vnic_profile_mappings]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @affinity_group_mappings == other.affinity_group_mappings &&
      @affinity_label_mappings == other.affinity_label_mappings &&
      @cluster_mappings == other.cluster_mappings &&
      @domain_mappings == other.domain_mappings &&
      @lun_mappings == other.lun_mappings &&
      @role_mappings == other.role_mappings &&
      @vnic_profile_mappings == other.vnic_profile_mappings
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @affinity_group_mappings.hash +
      @affinity_label_mappings.hash +
      @cluster_mappings.hash +
      @domain_mappings.hash +
      @lun_mappings.hash +
      @role_mappings.hash +
      @vnic_profile_mappings.hash
    end
    
  end
  
  class RegistrationDomainMapping < Struct
    
    # 
    # Returns the value of the `from` attribute.
    # 
    # @return [Domain]
    # 
    def from
      @from
    end
    
    # 
    # Sets the value of the `from` attribute.
    # 
    # @param value [Domain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Domain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def from=(value)
      if value.is_a?(Hash)
        value = Domain.new(value)
      end
      @from = value
    end
    
    # 
    # Returns the value of the `to` attribute.
    # 
    # @return [Domain]
    # 
    def to
      @to
    end
    
    # 
    # Sets the value of the `to` attribute.
    # 
    # @param value [Domain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Domain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def to=(value)
      if value.is_a?(Hash)
        value = Domain.new(value)
      end
      @to = value
    end
    
    # 
    # Creates a new instance of the {RegistrationDomainMapping} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Domain, Hash] :from The value of attribute `from`.
    # 
    # @option opts [Domain, Hash] :to The value of attribute `to`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.from = opts[:from]
      self.to = opts[:to]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @from == other.from &&
      @to == other.to
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @from.hash +
      @to.hash
    end
    
  end
  
  class RegistrationLunMapping < Struct
    
    # 
    # Returns the value of the `from` attribute.
    # 
    # @return [Disk]
    # 
    def from
      @from
    end
    
    # 
    # Sets the value of the `from` attribute.
    # 
    # @param value [Disk, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Disk} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def from=(value)
      if value.is_a?(Hash)
        value = Disk.new(value)
      end
      @from = value
    end
    
    # 
    # Returns the value of the `to` attribute.
    # 
    # @return [Disk]
    # 
    def to
      @to
    end
    
    # 
    # Sets the value of the `to` attribute.
    # 
    # @param value [Disk, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Disk} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def to=(value)
      if value.is_a?(Hash)
        value = Disk.new(value)
      end
      @to = value
    end
    
    # 
    # Creates a new instance of the {RegistrationLunMapping} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Disk, Hash] :from The value of attribute `from`.
    # 
    # @option opts [Disk, Hash] :to The value of attribute `to`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.from = opts[:from]
      self.to = opts[:to]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @from == other.from &&
      @to == other.to
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @from.hash +
      @to.hash
    end
    
  end
  
  class RegistrationRoleMapping < Struct
    
    # 
    # Returns the value of the `from` attribute.
    # 
    # @return [Role]
    # 
    def from
      @from
    end
    
    # 
    # Sets the value of the `from` attribute.
    # 
    # @param value [Role, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Role} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def from=(value)
      if value.is_a?(Hash)
        value = Role.new(value)
      end
      @from = value
    end
    
    # 
    # Returns the value of the `to` attribute.
    # 
    # @return [Role]
    # 
    def to
      @to
    end
    
    # 
    # Sets the value of the `to` attribute.
    # 
    # @param value [Role, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Role} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def to=(value)
      if value.is_a?(Hash)
        value = Role.new(value)
      end
      @to = value
    end
    
    # 
    # Creates a new instance of the {RegistrationRoleMapping} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Role, Hash] :from The value of attribute `from`.
    # 
    # @option opts [Role, Hash] :to The value of attribute `to`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.from = opts[:from]
      self.to = opts[:to]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @from == other.from &&
      @to == other.to
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @from.hash +
      @to.hash
    end
    
  end
  
  class RegistrationVnicProfileMapping < Struct
    
    # 
    # Returns the value of the `from` attribute.
    # 
    # @return [VnicProfile]
    # 
    def from
      @from
    end
    
    # 
    # Sets the value of the `from` attribute.
    # 
    # @param value [VnicProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VnicProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def from=(value)
      if value.is_a?(Hash)
        value = VnicProfile.new(value)
      end
      @from = value
    end
    
    # 
    # Returns the value of the `to` attribute.
    # 
    # @return [VnicProfile]
    # 
    def to
      @to
    end
    
    # 
    # Sets the value of the `to` attribute.
    # 
    # @param value [VnicProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VnicProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def to=(value)
      if value.is_a?(Hash)
        value = VnicProfile.new(value)
      end
      @to = value
    end
    
    # 
    # Creates a new instance of the {RegistrationVnicProfileMapping} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [VnicProfile, Hash] :from The value of attribute `from`.
    # 
    # @option opts [VnicProfile, Hash] :to The value of attribute `to`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.from = opts[:from]
      self.to = opts[:to]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @from == other.from &&
      @to == other.to
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @from.hash +
      @to.hash
    end
    
  end
  
  class ReportedConfiguration < Struct
    
    # 
    # Returns the value of the `actual_value` attribute.
    # 
    # @return [String]
    # 
    def actual_value
      @actual_value
    end
    
    # 
    # Sets the value of the `actual_value` attribute.
    # 
    # @param value [String]
    # 
    def actual_value=(value)
      @actual_value = value
    end
    
    # 
    # Returns the value of the `expected_value` attribute.
    # 
    # @return [String]
    # 
    def expected_value
      @expected_value
    end
    
    # 
    # Sets the value of the `expected_value` attribute.
    # 
    # @param value [String]
    # 
    def expected_value=(value)
      @expected_value = value
    end
    
    # 
    # Returns the value of the `in_sync` attribute.
    # 
    # @return [Boolean]
    # 
    def in_sync
      @in_sync
    end
    
    # 
    # Sets the value of the `in_sync` attribute.
    # 
    # @param value [Boolean]
    # 
    def in_sync=(value)
      @in_sync = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {ReportedConfiguration} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :actual_value The value of attribute `actual_value`.
    # 
    # @option opts [String] :expected_value The value of attribute `expected_value`.
    # 
    # @option opts [Boolean] :in_sync The value of attribute `in_sync`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.actual_value = opts[:actual_value]
      self.expected_value = opts[:expected_value]
      self.in_sync = opts[:in_sync]
      self.name = opts[:name]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @actual_value == other.actual_value &&
      @expected_value == other.expected_value &&
      @in_sync == other.in_sync &&
      @name == other.name
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @actual_value.hash +
      @expected_value.hash +
      @in_sync.hash +
      @name.hash
    end
    
  end
  
  class ReportedDevice < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `ips` attribute.
    # 
    # @return [Array<Ip>]
    # 
    def ips
      @ips
    end
    
    # 
    # Sets the value of the `ips` attribute.
    # 
    # @param list [Array<Ip>]
    # 
    def ips=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Ip.new(value)
          end
        end
      end
      @ips = list
    end
    
    # 
    # Returns the value of the `mac` attribute.
    # 
    # @return [Mac]
    # 
    def mac
      @mac
    end
    
    # 
    # Sets the value of the `mac` attribute.
    # 
    # @param value [Mac, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Mac} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def mac=(value)
      if value.is_a?(Hash)
        value = Mac.new(value)
      end
      @mac = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [ReportedDeviceType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [ReportedDeviceType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {ReportedDevice} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Array<Ip>, Array<Hash>] :ips The values of attribute `ips`.
    # 
    # @option opts [Mac, Hash] :mac The value of attribute `mac`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [ReportedDeviceType] :type The value of attribute `type`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.ips = opts[:ips]
      self.mac = opts[:mac]
      self.type = opts[:type]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @ips == other.ips &&
      @mac == other.mac &&
      @type == other.type &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @ips.hash +
      @mac.hash +
      @type.hash +
      @vm.hash
    end
    
  end
  
  class RngDevice < Struct
    
    # 
    # Returns the value of the `rate` attribute.
    # 
    # @return [Rate]
    # 
    def rate
      @rate
    end
    
    # 
    # Sets the value of the `rate` attribute.
    # 
    # @param value [Rate, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Rate} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def rate=(value)
      if value.is_a?(Hash)
        value = Rate.new(value)
      end
      @rate = value
    end
    
    # 
    # Returns the value of the `source` attribute.
    # 
    # @return [RngSource]
    # 
    def source
      @source
    end
    
    # 
    # Sets the value of the `source` attribute.
    # 
    # @param value [RngSource]
    # 
    def source=(value)
      @source = value
    end
    
    # 
    # Creates a new instance of the {RngDevice} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Rate, Hash] :rate The value of attribute `rate`.
    # 
    # @option opts [RngSource] :source The value of attribute `source`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.rate = opts[:rate]
      self.source = opts[:source]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @rate == other.rate &&
      @source == other.source
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @rate.hash +
      @source.hash
    end
    
  end
  
  class Role < Identified
    
    # 
    # Returns the value of the `administrative` attribute.
    # 
    # @return [Boolean]
    # 
    def administrative
      @administrative
    end
    
    # 
    # Sets the value of the `administrative` attribute.
    # 
    # @param value [Boolean]
    # 
    def administrative=(value)
      @administrative = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `mutable` attribute.
    # 
    # @return [Boolean]
    # 
    def mutable
      @mutable
    end
    
    # 
    # Sets the value of the `mutable` attribute.
    # 
    # @param value [Boolean]
    # 
    def mutable=(value)
      @mutable = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `permits` attribute.
    # 
    # @return [Array<Permit>]
    # 
    def permits
      @permits
    end
    
    # 
    # Sets the value of the `permits` attribute.
    # 
    # @param list [Array<Permit>]
    # 
    def permits=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permit.new(value)
          end
        end
      end
      @permits = list
    end
    
    # 
    # Returns the value of the `user` attribute.
    # 
    # @return [User]
    # 
    def user
      @user
    end
    
    # 
    # Sets the value of the `user` attribute.
    # 
    # @param value [User, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::User} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def user=(value)
      if value.is_a?(Hash)
        value = User.new(value)
      end
      @user = value
    end
    
    # 
    # Creates a new instance of the {Role} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :administrative The value of attribute `administrative`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Boolean] :mutable The value of attribute `mutable`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Permit>, Array<Hash>] :permits The values of attribute `permits`.
    # 
    # @option opts [User, Hash] :user The value of attribute `user`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.administrative = opts[:administrative]
      self.mutable = opts[:mutable]
      self.permits = opts[:permits]
      self.user = opts[:user]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @administrative == other.administrative &&
      @mutable == other.mutable &&
      @permits == other.permits &&
      @user == other.user
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @administrative.hash +
      @mutable.hash +
      @permits.hash +
      @user.hash
    end
    
  end
  
  class SchedulingPolicy < Identified
    
    # 
    # Returns the value of the `balances` attribute.
    # 
    # @return [Array<Balance>]
    # 
    def balances
      @balances
    end
    
    # 
    # Sets the value of the `balances` attribute.
    # 
    # @param list [Array<Balance>]
    # 
    def balances=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Balance.new(value)
          end
        end
      end
      @balances = list
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `default_policy` attribute.
    # 
    # @return [Boolean]
    # 
    def default_policy
      @default_policy
    end
    
    # 
    # Sets the value of the `default_policy` attribute.
    # 
    # @param value [Boolean]
    # 
    def default_policy=(value)
      @default_policy = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `filters` attribute.
    # 
    # @return [Array<Filter>]
    # 
    def filters
      @filters
    end
    
    # 
    # Sets the value of the `filters` attribute.
    # 
    # @param list [Array<Filter>]
    # 
    def filters=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Filter.new(value)
          end
        end
      end
      @filters = list
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `locked` attribute.
    # 
    # @return [Boolean]
    # 
    def locked
      @locked
    end
    
    # 
    # Sets the value of the `locked` attribute.
    # 
    # @param value [Boolean]
    # 
    def locked=(value)
      @locked = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `properties` attribute.
    # 
    # @return [Array<Property>]
    # 
    def properties
      @properties
    end
    
    # 
    # Sets the value of the `properties` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @properties = list
    end
    
    # 
    # Returns the value of the `weight` attribute.
    # 
    # @return [Array<Weight>]
    # 
    def weight
      @weight
    end
    
    # 
    # Sets the value of the `weight` attribute.
    # 
    # @param list [Array<Weight>]
    # 
    def weight=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Weight.new(value)
          end
        end
      end
      @weight = list
    end
    
    # 
    # Creates a new instance of the {SchedulingPolicy} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<Balance>, Array<Hash>] :balances The values of attribute `balances`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Boolean] :default_policy The value of attribute `default_policy`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Array<Filter>, Array<Hash>] :filters The values of attribute `filters`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Boolean] :locked The value of attribute `locked`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :properties The values of attribute `properties`.
    # 
    # @option opts [Array<Weight>, Array<Hash>] :weight The values of attribute `weight`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.balances = opts[:balances]
      self.default_policy = opts[:default_policy]
      self.filters = opts[:filters]
      self.locked = opts[:locked]
      self.properties = opts[:properties]
      self.weight = opts[:weight]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @balances == other.balances &&
      @default_policy == other.default_policy &&
      @filters == other.filters &&
      @locked == other.locked &&
      @properties == other.properties &&
      @weight == other.weight
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @balances.hash +
      @default_policy.hash +
      @filters.hash +
      @locked.hash +
      @properties.hash +
      @weight.hash
    end
    
  end
  
  class SchedulingPolicyUnit < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def enabled
      @enabled
    end
    
    # 
    # Sets the value of the `enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def enabled=(value)
      @enabled = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `internal` attribute.
    # 
    # @return [Boolean]
    # 
    def internal
      @internal
    end
    
    # 
    # Sets the value of the `internal` attribute.
    # 
    # @param value [Boolean]
    # 
    def internal=(value)
      @internal = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `properties` attribute.
    # 
    # @return [Array<Property>]
    # 
    def properties
      @properties
    end
    
    # 
    # Sets the value of the `properties` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @properties = list
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [PolicyUnitType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [PolicyUnitType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Creates a new instance of the {SchedulingPolicyUnit} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Boolean] :enabled The value of attribute `enabled`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Boolean] :internal The value of attribute `internal`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :properties The values of attribute `properties`.
    # 
    # @option opts [PolicyUnitType] :type The value of attribute `type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.enabled = opts[:enabled]
      self.internal = opts[:internal]
      self.properties = opts[:properties]
      self.type = opts[:type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @enabled == other.enabled &&
      @internal == other.internal &&
      @properties == other.properties &&
      @type == other.type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @enabled.hash +
      @internal.hash +
      @properties.hash +
      @type.hash
    end
    
  end
  
  class SeLinux < Struct
    
    # 
    # Returns the value of the `mode` attribute.
    # 
    # @return [SeLinuxMode]
    # 
    def mode
      @mode
    end
    
    # 
    # Sets the value of the `mode` attribute.
    # 
    # @param value [SeLinuxMode]
    # 
    def mode=(value)
      @mode = value
    end
    
    # 
    # Creates a new instance of the {SeLinux} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [SeLinuxMode] :mode The value of attribute `mode`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.mode = opts[:mode]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @mode == other.mode
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @mode.hash
    end
    
  end
  
  class SerialNumber < Struct
    
    # 
    # Returns the value of the `policy` attribute.
    # 
    # @return [SerialNumberPolicy]
    # 
    def policy
      @policy
    end
    
    # 
    # Sets the value of the `policy` attribute.
    # 
    # @param value [SerialNumberPolicy]
    # 
    def policy=(value)
      @policy = value
    end
    
    # 
    # Returns the value of the `value` attribute.
    # 
    # @return [String]
    # 
    def value
      @value
    end
    
    # 
    # Sets the value of the `value` attribute.
    # 
    # @param value [String]
    # 
    def value=(value)
      @value = value
    end
    
    # 
    # Creates a new instance of the {SerialNumber} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [SerialNumberPolicy] :policy The value of attribute `policy`.
    # 
    # @option opts [String] :value The value of attribute `value`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.policy = opts[:policy]
      self.value = opts[:value]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @policy == other.policy &&
      @value == other.value
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @policy.hash +
      @value.hash
    end
    
  end
  
  class Session < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `console_user` attribute.
    # 
    # @return [Boolean]
    # 
    def console_user
      @console_user
    end
    
    # 
    # Sets the value of the `console_user` attribute.
    # 
    # @param value [Boolean]
    # 
    def console_user=(value)
      @console_user = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `ip` attribute.
    # 
    # @return [Ip]
    # 
    def ip
      @ip
    end
    
    # 
    # Sets the value of the `ip` attribute.
    # 
    # @param value [Ip, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Ip} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def ip=(value)
      if value.is_a?(Hash)
        value = Ip.new(value)
      end
      @ip = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `protocol` attribute.
    # 
    # @return [String]
    # 
    def protocol
      @protocol
    end
    
    # 
    # Sets the value of the `protocol` attribute.
    # 
    # @param value [String]
    # 
    def protocol=(value)
      @protocol = value
    end
    
    # 
    # Returns the value of the `user` attribute.
    # 
    # @return [User]
    # 
    def user
      @user
    end
    
    # 
    # Sets the value of the `user` attribute.
    # 
    # @param value [User, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::User} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def user=(value)
      if value.is_a?(Hash)
        value = User.new(value)
      end
      @user = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {Session} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Boolean] :console_user The value of attribute `console_user`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Ip, Hash] :ip The value of attribute `ip`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :protocol The value of attribute `protocol`.
    # 
    # @option opts [User, Hash] :user The value of attribute `user`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.console_user = opts[:console_user]
      self.ip = opts[:ip]
      self.protocol = opts[:protocol]
      self.user = opts[:user]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @console_user == other.console_user &&
      @ip == other.ip &&
      @protocol == other.protocol &&
      @user == other.user &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @console_user.hash +
      @ip.hash +
      @protocol.hash +
      @user.hash +
      @vm.hash
    end
    
  end
  
  class SkipIfConnectivityBroken < Struct
    
    # 
    # Returns the value of the `enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def enabled
      @enabled
    end
    
    # 
    # Sets the value of the `enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def enabled=(value)
      @enabled = value
    end
    
    # 
    # Returns the value of the `threshold` attribute.
    # 
    # @return [Integer]
    # 
    def threshold
      @threshold
    end
    
    # 
    # Sets the value of the `threshold` attribute.
    # 
    # @param value [Integer]
    # 
    def threshold=(value)
      @threshold = value
    end
    
    # 
    # Creates a new instance of the {SkipIfConnectivityBroken} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :enabled The value of attribute `enabled`.
    # 
    # @option opts [Integer] :threshold The value of attribute `threshold`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.enabled = opts[:enabled]
      self.threshold = opts[:threshold]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @enabled == other.enabled &&
      @threshold == other.threshold
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @enabled.hash +
      @threshold.hash
    end
    
  end
  
  class SkipIfSdActive < Struct
    
    # 
    # Returns the value of the `enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def enabled
      @enabled
    end
    
    # 
    # Sets the value of the `enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def enabled=(value)
      @enabled = value
    end
    
    # 
    # Creates a new instance of the {SkipIfSdActive} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :enabled The value of attribute `enabled`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.enabled = opts[:enabled]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @enabled == other.enabled
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @enabled.hash
    end
    
  end
  
  class SpecialObjects < Struct
    
    # 
    # Returns the value of the `blank_template` attribute.
    # 
    # @return [Template]
    # 
    def blank_template
      @blank_template
    end
    
    # 
    # Sets the value of the `blank_template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def blank_template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @blank_template = value
    end
    
    # 
    # Returns the value of the `root_tag` attribute.
    # 
    # @return [Tag]
    # 
    def root_tag
      @root_tag
    end
    
    # 
    # Sets the value of the `root_tag` attribute.
    # 
    # @param value [Tag, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Tag} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def root_tag=(value)
      if value.is_a?(Hash)
        value = Tag.new(value)
      end
      @root_tag = value
    end
    
    # 
    # Creates a new instance of the {SpecialObjects} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Template, Hash] :blank_template The value of attribute `blank_template`.
    # 
    # @option opts [Tag, Hash] :root_tag The value of attribute `root_tag`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.blank_template = opts[:blank_template]
      self.root_tag = opts[:root_tag]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @blank_template == other.blank_template &&
      @root_tag == other.root_tag
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @blank_template.hash +
      @root_tag.hash
    end
    
  end
  
  class Spm < Struct
    
    # 
    # Returns the value of the `priority` attribute.
    # 
    # @return [Integer]
    # 
    def priority
      @priority
    end
    
    # 
    # Sets the value of the `priority` attribute.
    # 
    # @param value [Integer]
    # 
    def priority=(value)
      @priority = value
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [SpmStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [SpmStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Creates a new instance of the {Spm} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :priority The value of attribute `priority`.
    # 
    # @option opts [SpmStatus] :status The value of attribute `status`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.priority = opts[:priority]
      self.status = opts[:status]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @priority == other.priority &&
      @status == other.status
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @priority.hash +
      @status.hash
    end
    
  end
  
  class Ssh < Identified
    
    # 
    # Returns the value of the `authentication_method` attribute.
    # 
    # @return [SshAuthenticationMethod]
    # 
    def authentication_method
      @authentication_method
    end
    
    # 
    # Sets the value of the `authentication_method` attribute.
    # 
    # @param value [SshAuthenticationMethod]
    # 
    def authentication_method=(value)
      @authentication_method = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `fingerprint` attribute.
    # 
    # @return [String]
    # 
    def fingerprint
      @fingerprint
    end
    
    # 
    # Sets the value of the `fingerprint` attribute.
    # 
    # @param value [String]
    # 
    def fingerprint=(value)
      @fingerprint = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `port` attribute.
    # 
    # @return [Integer]
    # 
    def port
      @port
    end
    
    # 
    # Sets the value of the `port` attribute.
    # 
    # @param value [Integer]
    # 
    def port=(value)
      @port = value
    end
    
    # 
    # Returns the value of the `public_key` attribute.
    # 
    # @return [String]
    # 
    def public_key
      @public_key
    end
    
    # 
    # Sets the value of the `public_key` attribute.
    # 
    # @param value [String]
    # 
    def public_key=(value)
      @public_key = value
    end
    
    # 
    # Returns the value of the `user` attribute.
    # 
    # @return [User]
    # 
    def user
      @user
    end
    
    # 
    # Sets the value of the `user` attribute.
    # 
    # @param value [User, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::User} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def user=(value)
      if value.is_a?(Hash)
        value = User.new(value)
      end
      @user = value
    end
    
    # 
    # Creates a new instance of the {Ssh} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [SshAuthenticationMethod] :authentication_method The value of attribute `authentication_method`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :fingerprint The value of attribute `fingerprint`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Integer] :port The value of attribute `port`.
    # 
    # @option opts [String] :public_key The value of attribute `public_key`.
    # 
    # @option opts [User, Hash] :user The value of attribute `user`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.authentication_method = opts[:authentication_method]
      self.fingerprint = opts[:fingerprint]
      self.port = opts[:port]
      self.public_key = opts[:public_key]
      self.user = opts[:user]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @authentication_method == other.authentication_method &&
      @fingerprint == other.fingerprint &&
      @port == other.port &&
      @public_key == other.public_key &&
      @user == other.user
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @authentication_method.hash +
      @fingerprint.hash +
      @port.hash +
      @public_key.hash +
      @user.hash
    end
    
  end
  
  class SshPublicKey < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `content` attribute.
    # 
    # @return [String]
    # 
    def content
      @content
    end
    
    # 
    # Sets the value of the `content` attribute.
    # 
    # @param value [String]
    # 
    def content=(value)
      @content = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `user` attribute.
    # 
    # @return [User]
    # 
    def user
      @user
    end
    
    # 
    # Sets the value of the `user` attribute.
    # 
    # @param value [User, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::User} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def user=(value)
      if value.is_a?(Hash)
        value = User.new(value)
      end
      @user = value
    end
    
    # 
    # Creates a new instance of the {SshPublicKey} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :content The value of attribute `content`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [User, Hash] :user The value of attribute `user`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.content = opts[:content]
      self.user = opts[:user]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @content == other.content &&
      @user == other.user
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @content.hash +
      @user.hash
    end
    
  end
  
  class Sso < Struct
    
    # 
    # Returns the value of the `methods` attribute.
    # 
    # @return [Array<Method>]
    # 
    def methods
      @methods
    end
    
    # 
    # Sets the value of the `methods` attribute.
    # 
    # @param list [Array<Method>]
    # 
    def methods=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Method.new(value)
          end
        end
      end
      @methods = list
    end
    
    # 
    # Creates a new instance of the {Sso} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<Method>, Array<Hash>] :methods The values of attribute `methods`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.methods = opts[:methods]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @methods == other.methods
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @methods.hash
    end
    
  end
  
  class Statistic < Identified
    
    # 
    # Returns the value of the `brick` attribute.
    # 
    # @return [GlusterBrick]
    # 
    def brick
      @brick
    end
    
    # 
    # Sets the value of the `brick` attribute.
    # 
    # @param value [GlusterBrick, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::GlusterBrick} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def brick=(value)
      if value.is_a?(Hash)
        value = GlusterBrick.new(value)
      end
      @brick = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `disk` attribute.
    # 
    # @return [Disk]
    # 
    def disk
      @disk
    end
    
    # 
    # Sets the value of the `disk` attribute.
    # 
    # @param value [Disk, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Disk} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def disk=(value)
      if value.is_a?(Hash)
        value = Disk.new(value)
      end
      @disk = value
    end
    
    # 
    # Returns the value of the `gluster_volume` attribute.
    # 
    # @return [GlusterVolume]
    # 
    def gluster_volume
      @gluster_volume
    end
    
    # 
    # Sets the value of the `gluster_volume` attribute.
    # 
    # @param value [GlusterVolume, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::GlusterVolume} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def gluster_volume=(value)
      if value.is_a?(Hash)
        value = GlusterVolume.new(value)
      end
      @gluster_volume = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `host_nic` attribute.
    # 
    # @return [HostNic]
    # 
    def host_nic
      @host_nic
    end
    
    # 
    # Sets the value of the `host_nic` attribute.
    # 
    # @param value [HostNic, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostNic} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host_nic=(value)
      if value.is_a?(Hash)
        value = HostNic.new(value)
      end
      @host_nic = value
    end
    
    # 
    # Returns the value of the `host_numa_node` attribute.
    # 
    # @return [NumaNode]
    # 
    def host_numa_node
      @host_numa_node
    end
    
    # 
    # Sets the value of the `host_numa_node` attribute.
    # 
    # @param value [NumaNode, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::NumaNode} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host_numa_node=(value)
      if value.is_a?(Hash)
        value = NumaNode.new(value)
      end
      @host_numa_node = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `kind` attribute.
    # 
    # @return [StatisticKind]
    # 
    def kind
      @kind
    end
    
    # 
    # Sets the value of the `kind` attribute.
    # 
    # @param value [StatisticKind]
    # 
    def kind=(value)
      @kind = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `nic` attribute.
    # 
    # @return [Nic]
    # 
    def nic
      @nic
    end
    
    # 
    # Sets the value of the `nic` attribute.
    # 
    # @param value [Nic, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Nic} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def nic=(value)
      if value.is_a?(Hash)
        value = Nic.new(value)
      end
      @nic = value
    end
    
    # 
    # Returns the value of the `step` attribute.
    # 
    # @return [Step]
    # 
    def step
      @step
    end
    
    # 
    # Sets the value of the `step` attribute.
    # 
    # @param value [Step, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Step} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def step=(value)
      if value.is_a?(Hash)
        value = Step.new(value)
      end
      @step = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [ValueType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [ValueType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `unit` attribute.
    # 
    # @return [StatisticUnit]
    # 
    def unit
      @unit
    end
    
    # 
    # Sets the value of the `unit` attribute.
    # 
    # @param value [StatisticUnit]
    # 
    def unit=(value)
      @unit = value
    end
    
    # 
    # Returns the value of the `values` attribute.
    # 
    # @return [Array<Value>]
    # 
    def values
      @values
    end
    
    # 
    # Sets the value of the `values` attribute.
    # 
    # @param list [Array<Value>]
    # 
    def values=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Value.new(value)
          end
        end
      end
      @values = list
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {Statistic} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [GlusterBrick, Hash] :brick The value of attribute `brick`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Disk, Hash] :disk The value of attribute `disk`.
    # 
    # @option opts [GlusterVolume, Hash] :gluster_volume The value of attribute `gluster_volume`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [HostNic, Hash] :host_nic The value of attribute `host_nic`.
    # 
    # @option opts [NumaNode, Hash] :host_numa_node The value of attribute `host_numa_node`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [StatisticKind] :kind The value of attribute `kind`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Nic, Hash] :nic The value of attribute `nic`.
    # 
    # @option opts [Step, Hash] :step The value of attribute `step`.
    # 
    # @option opts [ValueType] :type The value of attribute `type`.
    # 
    # @option opts [StatisticUnit] :unit The value of attribute `unit`.
    # 
    # @option opts [Array<Value>, Array<Hash>] :values The values of attribute `values`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.brick = opts[:brick]
      self.disk = opts[:disk]
      self.gluster_volume = opts[:gluster_volume]
      self.host = opts[:host]
      self.host_nic = opts[:host_nic]
      self.host_numa_node = opts[:host_numa_node]
      self.kind = opts[:kind]
      self.nic = opts[:nic]
      self.step = opts[:step]
      self.type = opts[:type]
      self.unit = opts[:unit]
      self.values = opts[:values]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @brick == other.brick &&
      @disk == other.disk &&
      @gluster_volume == other.gluster_volume &&
      @host == other.host &&
      @host_nic == other.host_nic &&
      @host_numa_node == other.host_numa_node &&
      @kind == other.kind &&
      @nic == other.nic &&
      @step == other.step &&
      @type == other.type &&
      @unit == other.unit &&
      @values == other.values &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @brick.hash +
      @disk.hash +
      @gluster_volume.hash +
      @host.hash +
      @host_nic.hash +
      @host_numa_node.hash +
      @kind.hash +
      @nic.hash +
      @step.hash +
      @type.hash +
      @unit.hash +
      @values.hash +
      @vm.hash
    end
    
  end
  
  class Step < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `end_time` attribute.
    # 
    # @return [DateTime]
    # 
    def end_time
      @end_time
    end
    
    # 
    # Sets the value of the `end_time` attribute.
    # 
    # @param value [DateTime]
    # 
    def end_time=(value)
      @end_time = value
    end
    
    # 
    # Returns the value of the `execution_host` attribute.
    # 
    # @return [Host]
    # 
    def execution_host
      @execution_host
    end
    
    # 
    # Sets the value of the `execution_host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def execution_host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @execution_host = value
    end
    
    # 
    # Returns the value of the `external` attribute.
    # 
    # @return [Boolean]
    # 
    def external
      @external
    end
    
    # 
    # Sets the value of the `external` attribute.
    # 
    # @param value [Boolean]
    # 
    def external=(value)
      @external = value
    end
    
    # 
    # Returns the value of the `external_type` attribute.
    # 
    # @return [ExternalSystemType]
    # 
    def external_type
      @external_type
    end
    
    # 
    # Sets the value of the `external_type` attribute.
    # 
    # @param value [ExternalSystemType]
    # 
    def external_type=(value)
      @external_type = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `job` attribute.
    # 
    # @return [Job]
    # 
    def job
      @job
    end
    
    # 
    # Sets the value of the `job` attribute.
    # 
    # @param value [Job, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Job} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def job=(value)
      if value.is_a?(Hash)
        value = Job.new(value)
      end
      @job = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `number` attribute.
    # 
    # @return [Integer]
    # 
    def number
      @number
    end
    
    # 
    # Sets the value of the `number` attribute.
    # 
    # @param value [Integer]
    # 
    def number=(value)
      @number = value
    end
    
    # 
    # Returns the value of the `parent_step` attribute.
    # 
    # @return [Step]
    # 
    def parent_step
      @parent_step
    end
    
    # 
    # Sets the value of the `parent_step` attribute.
    # 
    # @param value [Step, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Step} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def parent_step=(value)
      if value.is_a?(Hash)
        value = Step.new(value)
      end
      @parent_step = value
    end
    
    # 
    # Returns the value of the `progress` attribute.
    # 
    # @return [Integer]
    # 
    def progress
      @progress
    end
    
    # 
    # Sets the value of the `progress` attribute.
    # 
    # @param value [Integer]
    # 
    def progress=(value)
      @progress = value
    end
    
    # 
    # Returns the value of the `start_time` attribute.
    # 
    # @return [DateTime]
    # 
    def start_time
      @start_time
    end
    
    # 
    # Sets the value of the `start_time` attribute.
    # 
    # @param value [DateTime]
    # 
    def start_time=(value)
      @start_time = value
    end
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [StepStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [StepStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [StepEnum]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [StepEnum]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Creates a new instance of the {Step} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [DateTime] :end_time The value of attribute `end_time`.
    # 
    # @option opts [Host, Hash] :execution_host The value of attribute `execution_host`.
    # 
    # @option opts [Boolean] :external The value of attribute `external`.
    # 
    # @option opts [ExternalSystemType] :external_type The value of attribute `external_type`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Job, Hash] :job The value of attribute `job`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Integer] :number The value of attribute `number`.
    # 
    # @option opts [Step, Hash] :parent_step The value of attribute `parent_step`.
    # 
    # @option opts [Integer] :progress The value of attribute `progress`.
    # 
    # @option opts [DateTime] :start_time The value of attribute `start_time`.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # @option opts [StepStatus] :status The value of attribute `status`.
    # 
    # @option opts [StepEnum] :type The value of attribute `type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.end_time = opts[:end_time]
      self.execution_host = opts[:execution_host]
      self.external = opts[:external]
      self.external_type = opts[:external_type]
      self.job = opts[:job]
      self.number = opts[:number]
      self.parent_step = opts[:parent_step]
      self.progress = opts[:progress]
      self.start_time = opts[:start_time]
      self.statistics = opts[:statistics]
      self.status = opts[:status]
      self.type = opts[:type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @end_time == other.end_time &&
      @execution_host == other.execution_host &&
      @external == other.external &&
      @external_type == other.external_type &&
      @job == other.job &&
      @number == other.number &&
      @parent_step == other.parent_step &&
      @progress == other.progress &&
      @start_time == other.start_time &&
      @statistics == other.statistics &&
      @status == other.status &&
      @type == other.type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @end_time.hash +
      @execution_host.hash +
      @external.hash +
      @external_type.hash +
      @job.hash +
      @number.hash +
      @parent_step.hash +
      @progress.hash +
      @start_time.hash +
      @statistics.hash +
      @status.hash +
      @type.hash
    end
    
  end
  
  class StorageConnection < Identified
    
    # 
    # Returns the value of the `address` attribute.
    # 
    # @return [String]
    # 
    def address
      @address
    end
    
    # 
    # Sets the value of the `address` attribute.
    # 
    # @param value [String]
    # 
    def address=(value)
      @address = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `gluster_volume` attribute.
    # 
    # @return [GlusterVolume]
    # 
    def gluster_volume
      @gluster_volume
    end
    
    # 
    # Sets the value of the `gluster_volume` attribute.
    # 
    # @param value [GlusterVolume, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::GlusterVolume} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def gluster_volume=(value)
      if value.is_a?(Hash)
        value = GlusterVolume.new(value)
      end
      @gluster_volume = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `mount_options` attribute.
    # 
    # @return [String]
    # 
    def mount_options
      @mount_options
    end
    
    # 
    # Sets the value of the `mount_options` attribute.
    # 
    # @param value [String]
    # 
    def mount_options=(value)
      @mount_options = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `nfs_retrans` attribute.
    # 
    # @return [Integer]
    # 
    def nfs_retrans
      @nfs_retrans
    end
    
    # 
    # Sets the value of the `nfs_retrans` attribute.
    # 
    # @param value [Integer]
    # 
    def nfs_retrans=(value)
      @nfs_retrans = value
    end
    
    # 
    # Returns the value of the `nfs_timeo` attribute.
    # 
    # @return [Integer]
    # 
    def nfs_timeo
      @nfs_timeo
    end
    
    # 
    # Sets the value of the `nfs_timeo` attribute.
    # 
    # @param value [Integer]
    # 
    def nfs_timeo=(value)
      @nfs_timeo = value
    end
    
    # 
    # Returns the value of the `nfs_version` attribute.
    # 
    # @return [NfsVersion]
    # 
    def nfs_version
      @nfs_version
    end
    
    # 
    # Sets the value of the `nfs_version` attribute.
    # 
    # @param value [NfsVersion]
    # 
    def nfs_version=(value)
      @nfs_version = value
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `path` attribute.
    # 
    # @return [String]
    # 
    def path
      @path
    end
    
    # 
    # Sets the value of the `path` attribute.
    # 
    # @param value [String]
    # 
    def path=(value)
      @path = value
    end
    
    # 
    # Returns the value of the `port` attribute.
    # 
    # @return [Integer]
    # 
    def port
      @port
    end
    
    # 
    # Sets the value of the `port` attribute.
    # 
    # @param value [Integer]
    # 
    def port=(value)
      @port = value
    end
    
    # 
    # Returns the value of the `portal` attribute.
    # 
    # @return [String]
    # 
    def portal
      @portal
    end
    
    # 
    # Sets the value of the `portal` attribute.
    # 
    # @param value [String]
    # 
    def portal=(value)
      @portal = value
    end
    
    # 
    # Returns the value of the `target` attribute.
    # 
    # @return [String]
    # 
    def target
      @target
    end
    
    # 
    # Sets the value of the `target` attribute.
    # 
    # @param value [String]
    # 
    def target=(value)
      @target = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [StorageType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [StorageType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Returns the value of the `vfs_type` attribute.
    # 
    # @return [String]
    # 
    def vfs_type
      @vfs_type
    end
    
    # 
    # Sets the value of the `vfs_type` attribute.
    # 
    # @param value [String]
    # 
    def vfs_type=(value)
      @vfs_type = value
    end
    
    # 
    # Creates a new instance of the {StorageConnection} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :address The value of attribute `address`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [GlusterVolume, Hash] :gluster_volume The value of attribute `gluster_volume`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :mount_options The value of attribute `mount_options`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Integer] :nfs_retrans The value of attribute `nfs_retrans`.
    # 
    # @option opts [Integer] :nfs_timeo The value of attribute `nfs_timeo`.
    # 
    # @option opts [NfsVersion] :nfs_version The value of attribute `nfs_version`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [String] :path The value of attribute `path`.
    # 
    # @option opts [Integer] :port The value of attribute `port`.
    # 
    # @option opts [String] :portal The value of attribute `portal`.
    # 
    # @option opts [String] :target The value of attribute `target`.
    # 
    # @option opts [StorageType] :type The value of attribute `type`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # @option opts [String] :vfs_type The value of attribute `vfs_type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.address = opts[:address]
      self.gluster_volume = opts[:gluster_volume]
      self.host = opts[:host]
      self.mount_options = opts[:mount_options]
      self.nfs_retrans = opts[:nfs_retrans]
      self.nfs_timeo = opts[:nfs_timeo]
      self.nfs_version = opts[:nfs_version]
      self.password = opts[:password]
      self.path = opts[:path]
      self.port = opts[:port]
      self.portal = opts[:portal]
      self.target = opts[:target]
      self.type = opts[:type]
      self.username = opts[:username]
      self.vfs_type = opts[:vfs_type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @address == other.address &&
      @gluster_volume == other.gluster_volume &&
      @host == other.host &&
      @mount_options == other.mount_options &&
      @nfs_retrans == other.nfs_retrans &&
      @nfs_timeo == other.nfs_timeo &&
      @nfs_version == other.nfs_version &&
      @password == other.password &&
      @path == other.path &&
      @port == other.port &&
      @portal == other.portal &&
      @target == other.target &&
      @type == other.type &&
      @username == other.username &&
      @vfs_type == other.vfs_type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @address.hash +
      @gluster_volume.hash +
      @host.hash +
      @mount_options.hash +
      @nfs_retrans.hash +
      @nfs_timeo.hash +
      @nfs_version.hash +
      @password.hash +
      @path.hash +
      @port.hash +
      @portal.hash +
      @target.hash +
      @type.hash +
      @username.hash +
      @vfs_type.hash
    end
    
  end
  
  class StorageConnectionExtension < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `target` attribute.
    # 
    # @return [String]
    # 
    def target
      @target
    end
    
    # 
    # Sets the value of the `target` attribute.
    # 
    # @param value [String]
    # 
    def target=(value)
      @target = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Creates a new instance of the {StorageConnectionExtension} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [String] :target The value of attribute `target`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.host = opts[:host]
      self.password = opts[:password]
      self.target = opts[:target]
      self.username = opts[:username]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @host == other.host &&
      @password == other.password &&
      @target == other.target &&
      @username == other.username
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @host.hash +
      @password.hash +
      @target.hash +
      @username.hash
    end
    
  end
  
  class StorageDomain < Identified
    
    # 
    # Returns the value of the `available` attribute.
    # 
    # @return [Integer]
    # 
    def available
      @available
    end
    
    # 
    # Sets the value of the `available` attribute.
    # 
    # @param value [Integer]
    # 
    def available=(value)
      @available = value
    end
    
    # 
    # Returns the value of the `backup` attribute.
    # 
    # @return [Boolean]
    # 
    def backup
      @backup
    end
    
    # 
    # Sets the value of the `backup` attribute.
    # 
    # @param value [Boolean]
    # 
    def backup=(value)
      @backup = value
    end
    
    # 
    # Returns the value of the `block_size` attribute.
    # 
    # @return [Integer]
    # 
    def block_size
      @block_size
    end
    
    # 
    # Sets the value of the `block_size` attribute.
    # 
    # @param value [Integer]
    # 
    def block_size=(value)
      @block_size = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `committed` attribute.
    # 
    # @return [Integer]
    # 
    def committed
      @committed
    end
    
    # 
    # Sets the value of the `committed` attribute.
    # 
    # @param value [Integer]
    # 
    def committed=(value)
      @committed = value
    end
    
    # 
    # Returns the value of the `critical_space_action_blocker` attribute.
    # 
    # @return [Integer]
    # 
    def critical_space_action_blocker
      @critical_space_action_blocker
    end
    
    # 
    # Sets the value of the `critical_space_action_blocker` attribute.
    # 
    # @param value [Integer]
    # 
    def critical_space_action_blocker=(value)
      @critical_space_action_blocker = value
    end
    
    # 
    # Returns the value of the `data_center` attribute.
    # 
    # @return [DataCenter]
    # 
    def data_center
      @data_center
    end
    
    # 
    # Sets the value of the `data_center` attribute.
    # 
    # @param value [DataCenter, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DataCenter} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def data_center=(value)
      if value.is_a?(Hash)
        value = DataCenter.new(value)
      end
      @data_center = value
    end
    
    # 
    # Returns the value of the `data_centers` attribute.
    # 
    # @return [Array<DataCenter>]
    # 
    def data_centers
      @data_centers
    end
    
    # 
    # Sets the value of the `data_centers` attribute.
    # 
    # @param list [Array<DataCenter>]
    # 
    def data_centers=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = DataCenter.new(value)
          end
        end
      end
      @data_centers = list
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `discard_after_delete` attribute.
    # 
    # @return [Boolean]
    # 
    def discard_after_delete
      @discard_after_delete
    end
    
    # 
    # Sets the value of the `discard_after_delete` attribute.
    # 
    # @param value [Boolean]
    # 
    def discard_after_delete=(value)
      @discard_after_delete = value
    end
    
    # 
    # Returns the value of the `disk_profiles` attribute.
    # 
    # @return [Array<DiskProfile>]
    # 
    def disk_profiles
      @disk_profiles
    end
    
    # 
    # Sets the value of the `disk_profiles` attribute.
    # 
    # @param list [Array<DiskProfile>]
    # 
    def disk_profiles=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = DiskProfile.new(value)
          end
        end
      end
      @disk_profiles = list
    end
    
    # 
    # Returns the value of the `disk_snapshots` attribute.
    # 
    # @return [Array<DiskSnapshot>]
    # 
    def disk_snapshots
      @disk_snapshots
    end
    
    # 
    # Sets the value of the `disk_snapshots` attribute.
    # 
    # @param list [Array<DiskSnapshot>]
    # 
    def disk_snapshots=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = DiskSnapshot.new(value)
          end
        end
      end
      @disk_snapshots = list
    end
    
    # 
    # Returns the value of the `disks` attribute.
    # 
    # @return [Array<Disk>]
    # 
    def disks
      @disks
    end
    
    # 
    # Sets the value of the `disks` attribute.
    # 
    # @param list [Array<Disk>]
    # 
    def disks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Disk.new(value)
          end
        end
      end
      @disks = list
    end
    
    # 
    # Returns the value of the `external_status` attribute.
    # 
    # @return [ExternalStatus]
    # 
    def external_status
      @external_status
    end
    
    # 
    # Sets the value of the `external_status` attribute.
    # 
    # @param value [ExternalStatus]
    # 
    def external_status=(value)
      @external_status = value
    end
    
    # 
    # Returns the value of the `files` attribute.
    # 
    # @return [Array<File>]
    # 
    def files
      @files
    end
    
    # 
    # Sets the value of the `files` attribute.
    # 
    # @param list [Array<File>]
    # 
    def files=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = File.new(value)
          end
        end
      end
      @files = list
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `images` attribute.
    # 
    # @return [Array<Image>]
    # 
    def images
      @images
    end
    
    # 
    # Sets the value of the `images` attribute.
    # 
    # @param list [Array<Image>]
    # 
    def images=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Image.new(value)
          end
        end
      end
      @images = list
    end
    
    # 
    # Returns the value of the `import` attribute.
    # 
    # @return [Boolean]
    # 
    def import
      @import
    end
    
    # 
    # Sets the value of the `import` attribute.
    # 
    # @param value [Boolean]
    # 
    def import=(value)
      @import = value
    end
    
    # 
    # Returns the value of the `master` attribute.
    # 
    # @return [Boolean]
    # 
    def master
      @master
    end
    
    # 
    # Sets the value of the `master` attribute.
    # 
    # @param value [Boolean]
    # 
    def master=(value)
      @master = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [StorageDomainStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [StorageDomainStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `storage` attribute.
    # 
    # @return [HostStorage]
    # 
    def storage
      @storage
    end
    
    # 
    # Sets the value of the `storage` attribute.
    # 
    # @param value [HostStorage, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostStorage} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage=(value)
      if value.is_a?(Hash)
        value = HostStorage.new(value)
      end
      @storage = value
    end
    
    # 
    # Returns the value of the `storage_connections` attribute.
    # 
    # @return [Array<StorageConnection>]
    # 
    def storage_connections
      @storage_connections
    end
    
    # 
    # Sets the value of the `storage_connections` attribute.
    # 
    # @param list [Array<StorageConnection>]
    # 
    def storage_connections=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = StorageConnection.new(value)
          end
        end
      end
      @storage_connections = list
    end
    
    # 
    # Returns the value of the `storage_format` attribute.
    # 
    # @return [StorageFormat]
    # 
    def storage_format
      @storage_format
    end
    
    # 
    # Sets the value of the `storage_format` attribute.
    # 
    # @param value [StorageFormat]
    # 
    def storage_format=(value)
      @storage_format = value
    end
    
    # 
    # Returns the value of the `supports_discard` attribute.
    # 
    # @return [Boolean]
    # 
    def supports_discard
      @supports_discard
    end
    
    # 
    # Sets the value of the `supports_discard` attribute.
    # 
    # @param value [Boolean]
    # 
    def supports_discard=(value)
      @supports_discard = value
    end
    
    # 
    # Returns the value of the `supports_discard_zeroes_data` attribute.
    # 
    # @return [Boolean]
    # 
    def supports_discard_zeroes_data
      @supports_discard_zeroes_data
    end
    
    # 
    # Sets the value of the `supports_discard_zeroes_data` attribute.
    # 
    # @param value [Boolean]
    # 
    def supports_discard_zeroes_data=(value)
      @supports_discard_zeroes_data = value
    end
    
    # 
    # Returns the value of the `templates` attribute.
    # 
    # @return [Array<Template>]
    # 
    def templates
      @templates
    end
    
    # 
    # Sets the value of the `templates` attribute.
    # 
    # @param list [Array<Template>]
    # 
    def templates=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Template.new(value)
          end
        end
      end
      @templates = list
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [StorageDomainType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [StorageDomainType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `used` attribute.
    # 
    # @return [Integer]
    # 
    def used
      @used
    end
    
    # 
    # Sets the value of the `used` attribute.
    # 
    # @param value [Integer]
    # 
    def used=(value)
      @used = value
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Returns the value of the `warning_low_space_indicator` attribute.
    # 
    # @return [Integer]
    # 
    def warning_low_space_indicator
      @warning_low_space_indicator
    end
    
    # 
    # Sets the value of the `warning_low_space_indicator` attribute.
    # 
    # @param value [Integer]
    # 
    def warning_low_space_indicator=(value)
      @warning_low_space_indicator = value
    end
    
    # 
    # Returns the value of the `wipe_after_delete` attribute.
    # 
    # @return [Boolean]
    # 
    def wipe_after_delete
      @wipe_after_delete
    end
    
    # 
    # Sets the value of the `wipe_after_delete` attribute.
    # 
    # @param value [Boolean]
    # 
    def wipe_after_delete=(value)
      @wipe_after_delete = value
    end
    
    # 
    # Creates a new instance of the {StorageDomain} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :available The value of attribute `available`.
    # 
    # @option opts [Boolean] :backup The value of attribute `backup`.
    # 
    # @option opts [Integer] :block_size The value of attribute `block_size`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Integer] :committed The value of attribute `committed`.
    # 
    # @option opts [Integer] :critical_space_action_blocker The value of attribute `critical_space_action_blocker`.
    # 
    # @option opts [DataCenter, Hash] :data_center The value of attribute `data_center`.
    # 
    # @option opts [Array<DataCenter>, Array<Hash>] :data_centers The values of attribute `data_centers`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Boolean] :discard_after_delete The value of attribute `discard_after_delete`.
    # 
    # @option opts [Array<DiskProfile>, Array<Hash>] :disk_profiles The values of attribute `disk_profiles`.
    # 
    # @option opts [Array<DiskSnapshot>, Array<Hash>] :disk_snapshots The values of attribute `disk_snapshots`.
    # 
    # @option opts [Array<Disk>, Array<Hash>] :disks The values of attribute `disks`.
    # 
    # @option opts [ExternalStatus] :external_status The value of attribute `external_status`.
    # 
    # @option opts [Array<File>, Array<Hash>] :files The values of attribute `files`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Array<Image>, Array<Hash>] :images The values of attribute `images`.
    # 
    # @option opts [Boolean] :import The value of attribute `import`.
    # 
    # @option opts [Boolean] :master The value of attribute `master`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [StorageDomainStatus] :status The value of attribute `status`.
    # 
    # @option opts [HostStorage, Hash] :storage The value of attribute `storage`.
    # 
    # @option opts [Array<StorageConnection>, Array<Hash>] :storage_connections The values of attribute `storage_connections`.
    # 
    # @option opts [StorageFormat] :storage_format The value of attribute `storage_format`.
    # 
    # @option opts [Boolean] :supports_discard The value of attribute `supports_discard`.
    # 
    # @option opts [Boolean] :supports_discard_zeroes_data The value of attribute `supports_discard_zeroes_data`.
    # 
    # @option opts [Array<Template>, Array<Hash>] :templates The values of attribute `templates`.
    # 
    # @option opts [StorageDomainType] :type The value of attribute `type`.
    # 
    # @option opts [Integer] :used The value of attribute `used`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # @option opts [Integer] :warning_low_space_indicator The value of attribute `warning_low_space_indicator`.
    # 
    # @option opts [Boolean] :wipe_after_delete The value of attribute `wipe_after_delete`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.available = opts[:available]
      self.backup = opts[:backup]
      self.block_size = opts[:block_size]
      self.committed = opts[:committed]
      self.critical_space_action_blocker = opts[:critical_space_action_blocker]
      self.data_center = opts[:data_center]
      self.data_centers = opts[:data_centers]
      self.discard_after_delete = opts[:discard_after_delete]
      self.disk_profiles = opts[:disk_profiles]
      self.disk_snapshots = opts[:disk_snapshots]
      self.disks = opts[:disks]
      self.external_status = opts[:external_status]
      self.files = opts[:files]
      self.host = opts[:host]
      self.images = opts[:images]
      self.import = opts[:import]
      self.master = opts[:master]
      self.permissions = opts[:permissions]
      self.status = opts[:status]
      self.storage = opts[:storage]
      self.storage_connections = opts[:storage_connections]
      self.storage_format = opts[:storage_format]
      self.supports_discard = opts[:supports_discard]
      self.supports_discard_zeroes_data = opts[:supports_discard_zeroes_data]
      self.templates = opts[:templates]
      self.type = opts[:type]
      self.used = opts[:used]
      self.vms = opts[:vms]
      self.warning_low_space_indicator = opts[:warning_low_space_indicator]
      self.wipe_after_delete = opts[:wipe_after_delete]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @available == other.available &&
      @backup == other.backup &&
      @block_size == other.block_size &&
      @committed == other.committed &&
      @critical_space_action_blocker == other.critical_space_action_blocker &&
      @data_center == other.data_center &&
      @data_centers == other.data_centers &&
      @discard_after_delete == other.discard_after_delete &&
      @disk_profiles == other.disk_profiles &&
      @disk_snapshots == other.disk_snapshots &&
      @disks == other.disks &&
      @external_status == other.external_status &&
      @files == other.files &&
      @host == other.host &&
      @images == other.images &&
      @import == other.import &&
      @master == other.master &&
      @permissions == other.permissions &&
      @status == other.status &&
      @storage == other.storage &&
      @storage_connections == other.storage_connections &&
      @storage_format == other.storage_format &&
      @supports_discard == other.supports_discard &&
      @supports_discard_zeroes_data == other.supports_discard_zeroes_data &&
      @templates == other.templates &&
      @type == other.type &&
      @used == other.used &&
      @vms == other.vms &&
      @warning_low_space_indicator == other.warning_low_space_indicator &&
      @wipe_after_delete == other.wipe_after_delete
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @available.hash +
      @backup.hash +
      @block_size.hash +
      @committed.hash +
      @critical_space_action_blocker.hash +
      @data_center.hash +
      @data_centers.hash +
      @discard_after_delete.hash +
      @disk_profiles.hash +
      @disk_snapshots.hash +
      @disks.hash +
      @external_status.hash +
      @files.hash +
      @host.hash +
      @images.hash +
      @import.hash +
      @master.hash +
      @permissions.hash +
      @status.hash +
      @storage.hash +
      @storage_connections.hash +
      @storage_format.hash +
      @supports_discard.hash +
      @supports_discard_zeroes_data.hash +
      @templates.hash +
      @type.hash +
      @used.hash +
      @vms.hash +
      @warning_low_space_indicator.hash +
      @wipe_after_delete.hash
    end
    
  end
  
  class StorageDomainLease < Struct
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Creates a new instance of the {StorageDomainLease} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.storage_domain = opts[:storage_domain]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @storage_domain == other.storage_domain
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @storage_domain.hash
    end
    
  end
  
  class SystemOption < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `values` attribute.
    # 
    # @return [Array<SystemOptionValue>]
    # 
    def values
      @values
    end
    
    # 
    # Sets the value of the `values` attribute.
    # 
    # @param list [Array<SystemOptionValue>]
    # 
    def values=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = SystemOptionValue.new(value)
          end
        end
      end
      @values = list
    end
    
    # 
    # Creates a new instance of the {SystemOption} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<SystemOptionValue>, Array<Hash>] :values The values of attribute `values`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.values = opts[:values]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @values == other.values
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @values.hash
    end
    
  end
  
  class SystemOptionValue < Struct
    
    # 
    # Returns the value of the `value` attribute.
    # 
    # @return [String]
    # 
    def value
      @value
    end
    
    # 
    # Sets the value of the `value` attribute.
    # 
    # @param value [String]
    # 
    def value=(value)
      @value = value
    end
    
    # 
    # Returns the value of the `version` attribute.
    # 
    # @return [String]
    # 
    def version
      @version
    end
    
    # 
    # Sets the value of the `version` attribute.
    # 
    # @param value [String]
    # 
    def version=(value)
      @version = value
    end
    
    # 
    # Creates a new instance of the {SystemOptionValue} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :value The value of attribute `value`.
    # 
    # @option opts [String] :version The value of attribute `version`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.value = opts[:value]
      self.version = opts[:version]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @value == other.value &&
      @version == other.version
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @value.hash +
      @version.hash
    end
    
  end
  
  class Tag < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `group` attribute.
    # 
    # @return [Group]
    # 
    def group
      @group
    end
    
    # 
    # Sets the value of the `group` attribute.
    # 
    # @param value [Group, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Group} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def group=(value)
      if value.is_a?(Hash)
        value = Group.new(value)
      end
      @group = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `parent` attribute.
    # 
    # @return [Tag]
    # 
    def parent
      @parent
    end
    
    # 
    # Sets the value of the `parent` attribute.
    # 
    # @param value [Tag, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Tag} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def parent=(value)
      if value.is_a?(Hash)
        value = Tag.new(value)
      end
      @parent = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `user` attribute.
    # 
    # @return [User]
    # 
    def user
      @user
    end
    
    # 
    # Sets the value of the `user` attribute.
    # 
    # @param value [User, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::User} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def user=(value)
      if value.is_a?(Hash)
        value = User.new(value)
      end
      @user = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {Tag} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Group, Hash] :group The value of attribute `group`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Tag, Hash] :parent The value of attribute `parent`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [User, Hash] :user The value of attribute `user`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.group = opts[:group]
      self.host = opts[:host]
      self.parent = opts[:parent]
      self.template = opts[:template]
      self.user = opts[:user]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @group == other.group &&
      @host == other.host &&
      @parent == other.parent &&
      @template == other.template &&
      @user == other.user &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @group.hash +
      @host.hash +
      @parent.hash +
      @template.hash +
      @user.hash +
      @vm.hash
    end
    
  end
  
  class TemplateVersion < Struct
    
    # 
    # Returns the value of the `base_template` attribute.
    # 
    # @return [Template]
    # 
    def base_template
      @base_template
    end
    
    # 
    # Sets the value of the `base_template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def base_template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @base_template = value
    end
    
    # 
    # Returns the value of the `version_name` attribute.
    # 
    # @return [String]
    # 
    def version_name
      @version_name
    end
    
    # 
    # Sets the value of the `version_name` attribute.
    # 
    # @param value [String]
    # 
    def version_name=(value)
      @version_name = value
    end
    
    # 
    # Returns the value of the `version_number` attribute.
    # 
    # @return [Integer]
    # 
    def version_number
      @version_number
    end
    
    # 
    # Sets the value of the `version_number` attribute.
    # 
    # @param value [Integer]
    # 
    def version_number=(value)
      @version_number = value
    end
    
    # 
    # Creates a new instance of the {TemplateVersion} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Template, Hash] :base_template The value of attribute `base_template`.
    # 
    # @option opts [String] :version_name The value of attribute `version_name`.
    # 
    # @option opts [Integer] :version_number The value of attribute `version_number`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.base_template = opts[:base_template]
      self.version_name = opts[:version_name]
      self.version_number = opts[:version_number]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @base_template == other.base_template &&
      @version_name == other.version_name &&
      @version_number == other.version_number
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @base_template.hash +
      @version_name.hash +
      @version_number.hash
    end
    
  end
  
  class Ticket < Struct
    
    # 
    # Returns the value of the `expiry` attribute.
    # 
    # @return [Integer]
    # 
    def expiry
      @expiry
    end
    
    # 
    # Sets the value of the `expiry` attribute.
    # 
    # @param value [Integer]
    # 
    def expiry=(value)
      @expiry = value
    end
    
    # 
    # Returns the value of the `value` attribute.
    # 
    # @return [String]
    # 
    def value
      @value
    end
    
    # 
    # Sets the value of the `value` attribute.
    # 
    # @param value [String]
    # 
    def value=(value)
      @value = value
    end
    
    # 
    # Creates a new instance of the {Ticket} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :expiry The value of attribute `expiry`.
    # 
    # @option opts [String] :value The value of attribute `value`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.expiry = opts[:expiry]
      self.value = opts[:value]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @expiry == other.expiry &&
      @value == other.value
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @expiry.hash +
      @value.hash
    end
    
  end
  
  class TimeZone < Struct
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `utc_offset` attribute.
    # 
    # @return [String]
    # 
    def utc_offset
      @utc_offset
    end
    
    # 
    # Sets the value of the `utc_offset` attribute.
    # 
    # @param value [String]
    # 
    def utc_offset=(value)
      @utc_offset = value
    end
    
    # 
    # Creates a new instance of the {TimeZone} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :utc_offset The value of attribute `utc_offset`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.name = opts[:name]
      self.utc_offset = opts[:utc_offset]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @name == other.name &&
      @utc_offset == other.utc_offset
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @name.hash +
      @utc_offset.hash
    end
    
  end
  
  class TransparentHugePages < Struct
    
    # 
    # Returns the value of the `enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def enabled
      @enabled
    end
    
    # 
    # Sets the value of the `enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def enabled=(value)
      @enabled = value
    end
    
    # 
    # Creates a new instance of the {TransparentHugePages} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :enabled The value of attribute `enabled`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.enabled = opts[:enabled]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @enabled == other.enabled
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @enabled.hash
    end
    
  end
  
  class UnmanagedNetwork < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `host_nic` attribute.
    # 
    # @return [HostNic]
    # 
    def host_nic
      @host_nic
    end
    
    # 
    # Sets the value of the `host_nic` attribute.
    # 
    # @param value [HostNic, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostNic} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host_nic=(value)
      if value.is_a?(Hash)
        value = HostNic.new(value)
      end
      @host_nic = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {UnmanagedNetwork} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [HostNic, Hash] :host_nic The value of attribute `host_nic`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.host = opts[:host]
      self.host_nic = opts[:host_nic]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @host == other.host &&
      @host_nic == other.host_nic
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @host.hash +
      @host_nic.hash
    end
    
  end
  
  class Usb < Struct
    
    # 
    # Returns the value of the `enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def enabled
      @enabled
    end
    
    # 
    # Sets the value of the `enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def enabled=(value)
      @enabled = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [UsbType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [UsbType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Creates a new instance of the {Usb} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :enabled The value of attribute `enabled`.
    # 
    # @option opts [UsbType] :type The value of attribute `type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.enabled = opts[:enabled]
      self.type = opts[:type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @enabled == other.enabled &&
      @type == other.type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @enabled.hash +
      @type.hash
    end
    
  end
  
  class User < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `department` attribute.
    # 
    # @return [String]
    # 
    def department
      @department
    end
    
    # 
    # Sets the value of the `department` attribute.
    # 
    # @param value [String]
    # 
    def department=(value)
      @department = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `domain` attribute.
    # 
    # @return [Domain]
    # 
    def domain
      @domain
    end
    
    # 
    # Sets the value of the `domain` attribute.
    # 
    # @param value [Domain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Domain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def domain=(value)
      if value.is_a?(Hash)
        value = Domain.new(value)
      end
      @domain = value
    end
    
    # 
    # Returns the value of the `domain_entry_id` attribute.
    # 
    # @return [String]
    # 
    def domain_entry_id
      @domain_entry_id
    end
    
    # 
    # Sets the value of the `domain_entry_id` attribute.
    # 
    # @param value [String]
    # 
    def domain_entry_id=(value)
      @domain_entry_id = value
    end
    
    # 
    # Returns the value of the `email` attribute.
    # 
    # @return [String]
    # 
    def email
      @email
    end
    
    # 
    # Sets the value of the `email` attribute.
    # 
    # @param value [String]
    # 
    def email=(value)
      @email = value
    end
    
    # 
    # Returns the value of the `groups` attribute.
    # 
    # @return [Array<Group>]
    # 
    def groups
      @groups
    end
    
    # 
    # Sets the value of the `groups` attribute.
    # 
    # @param list [Array<Group>]
    # 
    def groups=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Group.new(value)
          end
        end
      end
      @groups = list
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `last_name` attribute.
    # 
    # @return [String]
    # 
    def last_name
      @last_name
    end
    
    # 
    # Sets the value of the `last_name` attribute.
    # 
    # @param value [String]
    # 
    def last_name=(value)
      @last_name = value
    end
    
    # 
    # Returns the value of the `logged_in` attribute.
    # 
    # @return [Boolean]
    # 
    def logged_in
      @logged_in
    end
    
    # 
    # Sets the value of the `logged_in` attribute.
    # 
    # @param value [Boolean]
    # 
    def logged_in=(value)
      @logged_in = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `namespace` attribute.
    # 
    # @return [String]
    # 
    def namespace
      @namespace
    end
    
    # 
    # Sets the value of the `namespace` attribute.
    # 
    # @param value [String]
    # 
    def namespace=(value)
      @namespace = value
    end
    
    # 
    # Returns the value of the `options` attribute.
    # 
    # @return [Array<UserOption>]
    # 
    def options
      @options
    end
    
    # 
    # Sets the value of the `options` attribute.
    # 
    # @param list [Array<UserOption>]
    # 
    def options=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = UserOption.new(value)
          end
        end
      end
      @options = list
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `principal` attribute.
    # 
    # @return [String]
    # 
    def principal
      @principal
    end
    
    # 
    # Sets the value of the `principal` attribute.
    # 
    # @param value [String]
    # 
    def principal=(value)
      @principal = value
    end
    
    # 
    # Returns the value of the `roles` attribute.
    # 
    # @return [Array<Role>]
    # 
    def roles
      @roles
    end
    
    # 
    # Sets the value of the `roles` attribute.
    # 
    # @param list [Array<Role>]
    # 
    def roles=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Role.new(value)
          end
        end
      end
      @roles = list
    end
    
    # 
    # Returns the value of the `ssh_public_keys` attribute.
    # 
    # @return [Array<SshPublicKey>]
    # 
    def ssh_public_keys
      @ssh_public_keys
    end
    
    # 
    # Sets the value of the `ssh_public_keys` attribute.
    # 
    # @param list [Array<SshPublicKey>]
    # 
    def ssh_public_keys=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = SshPublicKey.new(value)
          end
        end
      end
      @ssh_public_keys = list
    end
    
    # 
    # Returns the value of the `tags` attribute.
    # 
    # @return [Array<Tag>]
    # 
    def tags
      @tags
    end
    
    # 
    # Sets the value of the `tags` attribute.
    # 
    # @param list [Array<Tag>]
    # 
    def tags=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Tag.new(value)
          end
        end
      end
      @tags = list
    end
    
    # 
    # Returns the value of the `user_name` attribute.
    # 
    # @return [String]
    # 
    def user_name
      @user_name
    end
    
    # 
    # Sets the value of the `user_name` attribute.
    # 
    # @param value [String]
    # 
    def user_name=(value)
      @user_name = value
    end
    
    # 
    # Returns the value of the `user_options` attribute.
    # 
    # @return [Array<Property>]
    # 
    def user_options
      @user_options
    end
    
    # 
    # Sets the value of the `user_options` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def user_options=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @user_options = list
    end
    
    # 
    # Creates a new instance of the {User} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :department The value of attribute `department`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Domain, Hash] :domain The value of attribute `domain`.
    # 
    # @option opts [String] :domain_entry_id The value of attribute `domain_entry_id`.
    # 
    # @option opts [String] :email The value of attribute `email`.
    # 
    # @option opts [Array<Group>, Array<Hash>] :groups The values of attribute `groups`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :last_name The value of attribute `last_name`.
    # 
    # @option opts [Boolean] :logged_in The value of attribute `logged_in`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :namespace The value of attribute `namespace`.
    # 
    # @option opts [Array<UserOption>, Array<Hash>] :options The values of attribute `options`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [String] :principal The value of attribute `principal`.
    # 
    # @option opts [Array<Role>, Array<Hash>] :roles The values of attribute `roles`.
    # 
    # @option opts [Array<SshPublicKey>, Array<Hash>] :ssh_public_keys The values of attribute `ssh_public_keys`.
    # 
    # @option opts [Array<Tag>, Array<Hash>] :tags The values of attribute `tags`.
    # 
    # @option opts [String] :user_name The value of attribute `user_name`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :user_options The values of attribute `user_options`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.department = opts[:department]
      self.domain = opts[:domain]
      self.domain_entry_id = opts[:domain_entry_id]
      self.email = opts[:email]
      self.groups = opts[:groups]
      self.last_name = opts[:last_name]
      self.logged_in = opts[:logged_in]
      self.namespace = opts[:namespace]
      self.options = opts[:options]
      self.password = opts[:password]
      self.permissions = opts[:permissions]
      self.principal = opts[:principal]
      self.roles = opts[:roles]
      self.ssh_public_keys = opts[:ssh_public_keys]
      self.tags = opts[:tags]
      self.user_name = opts[:user_name]
      self.user_options = opts[:user_options]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @department == other.department &&
      @domain == other.domain &&
      @domain_entry_id == other.domain_entry_id &&
      @email == other.email &&
      @groups == other.groups &&
      @last_name == other.last_name &&
      @logged_in == other.logged_in &&
      @namespace == other.namespace &&
      @options == other.options &&
      @password == other.password &&
      @permissions == other.permissions &&
      @principal == other.principal &&
      @roles == other.roles &&
      @ssh_public_keys == other.ssh_public_keys &&
      @tags == other.tags &&
      @user_name == other.user_name &&
      @user_options == other.user_options
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @department.hash +
      @domain.hash +
      @domain_entry_id.hash +
      @email.hash +
      @groups.hash +
      @last_name.hash +
      @logged_in.hash +
      @namespace.hash +
      @options.hash +
      @password.hash +
      @permissions.hash +
      @principal.hash +
      @roles.hash +
      @ssh_public_keys.hash +
      @tags.hash +
      @user_name.hash +
      @user_options.hash
    end
    
  end
  
  class UserOption < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `content` attribute.
    # 
    # @return [String]
    # 
    def content
      @content
    end
    
    # 
    # Sets the value of the `content` attribute.
    # 
    # @param value [String]
    # 
    def content=(value)
      @content = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `user` attribute.
    # 
    # @return [User]
    # 
    def user
      @user
    end
    
    # 
    # Sets the value of the `user` attribute.
    # 
    # @param value [User, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::User} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def user=(value)
      if value.is_a?(Hash)
        value = User.new(value)
      end
      @user = value
    end
    
    # 
    # Creates a new instance of the {UserOption} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :content The value of attribute `content`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [User, Hash] :user The value of attribute `user`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.content = opts[:content]
      self.user = opts[:user]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @content == other.content &&
      @user == other.user
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @content.hash +
      @user.hash
    end
    
  end
  
  class Value < Struct
    
    # 
    # Returns the value of the `datum` attribute.
    # 
    # @return [Float]
    # 
    def datum
      @datum
    end
    
    # 
    # Sets the value of the `datum` attribute.
    # 
    # @param value [Float]
    # 
    def datum=(value)
      @datum = value
    end
    
    # 
    # Returns the value of the `detail` attribute.
    # 
    # @return [String]
    # 
    def detail
      @detail
    end
    
    # 
    # Sets the value of the `detail` attribute.
    # 
    # @param value [String]
    # 
    def detail=(value)
      @detail = value
    end
    
    # 
    # Creates a new instance of the {Value} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Float] :datum The value of attribute `datum`.
    # 
    # @option opts [String] :detail The value of attribute `detail`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.datum = opts[:datum]
      self.detail = opts[:detail]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @datum == other.datum &&
      @detail == other.detail
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @datum.hash +
      @detail.hash
    end
    
  end
  
  class VcpuPin < Struct
    
    # 
    # Returns the value of the `cpu_set` attribute.
    # 
    # @return [String]
    # 
    def cpu_set
      @cpu_set
    end
    
    # 
    # Sets the value of the `cpu_set` attribute.
    # 
    # @param value [String]
    # 
    def cpu_set=(value)
      @cpu_set = value
    end
    
    # 
    # Returns the value of the `vcpu` attribute.
    # 
    # @return [Integer]
    # 
    def vcpu
      @vcpu
    end
    
    # 
    # Sets the value of the `vcpu` attribute.
    # 
    # @param value [Integer]
    # 
    def vcpu=(value)
      @vcpu = value
    end
    
    # 
    # Creates a new instance of the {VcpuPin} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :cpu_set The value of attribute `cpu_set`.
    # 
    # @option opts [Integer] :vcpu The value of attribute `vcpu`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cpu_set = opts[:cpu_set]
      self.vcpu = opts[:vcpu]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cpu_set == other.cpu_set &&
      @vcpu == other.vcpu
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cpu_set.hash +
      @vcpu.hash
    end
    
  end
  
  class Vendor < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {Vendor} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
    end
    
  end
  
  class Version < Identified
    
    # 
    # Returns the value of the `build` attribute.
    # 
    # @return [Integer]
    # 
    def build
      @build
    end
    
    # 
    # Sets the value of the `build` attribute.
    # 
    # @param value [Integer]
    # 
    def build=(value)
      @build = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `full_version` attribute.
    # 
    # @return [String]
    # 
    def full_version
      @full_version
    end
    
    # 
    # Sets the value of the `full_version` attribute.
    # 
    # @param value [String]
    # 
    def full_version=(value)
      @full_version = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `major` attribute.
    # 
    # @return [Integer]
    # 
    def major
      @major
    end
    
    # 
    # Sets the value of the `major` attribute.
    # 
    # @param value [Integer]
    # 
    def major=(value)
      @major = value
    end
    
    # 
    # Returns the value of the `minor` attribute.
    # 
    # @return [Integer]
    # 
    def minor
      @minor
    end
    
    # 
    # Sets the value of the `minor` attribute.
    # 
    # @param value [Integer]
    # 
    def minor=(value)
      @minor = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `revision` attribute.
    # 
    # @return [Integer]
    # 
    def revision
      @revision
    end
    
    # 
    # Sets the value of the `revision` attribute.
    # 
    # @param value [Integer]
    # 
    def revision=(value)
      @revision = value
    end
    
    # 
    # Creates a new instance of the {Version} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :build The value of attribute `build`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :full_version The value of attribute `full_version`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Integer] :major The value of attribute `major`.
    # 
    # @option opts [Integer] :minor The value of attribute `minor`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Integer] :revision The value of attribute `revision`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.build = opts[:build]
      self.full_version = opts[:full_version]
      self.major = opts[:major]
      self.minor = opts[:minor]
      self.revision = opts[:revision]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @build == other.build &&
      @full_version == other.full_version &&
      @major == other.major &&
      @minor == other.minor &&
      @revision == other.revision
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @build.hash +
      @full_version.hash +
      @major.hash +
      @minor.hash +
      @revision.hash
    end
    
  end
  
  class VirtioScsi < Struct
    
    # 
    # Returns the value of the `enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def enabled
      @enabled
    end
    
    # 
    # Sets the value of the `enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def enabled=(value)
      @enabled = value
    end
    
    # 
    # Creates a new instance of the {VirtioScsi} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :enabled The value of attribute `enabled`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.enabled = opts[:enabled]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @enabled == other.enabled
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @enabled.hash
    end
    
  end
  
  class VirtualNumaNode < NumaNode
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `cpu` attribute.
    # 
    # @return [Cpu]
    # 
    def cpu
      @cpu
    end
    
    # 
    # Sets the value of the `cpu` attribute.
    # 
    # @param value [Cpu, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cpu} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu=(value)
      if value.is_a?(Hash)
        value = Cpu.new(value)
      end
      @cpu = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `index` attribute.
    # 
    # @return [Integer]
    # 
    def index
      @index
    end
    
    # 
    # Sets the value of the `index` attribute.
    # 
    # @param value [Integer]
    # 
    def index=(value)
      @index = value
    end
    
    # 
    # Returns the value of the `memory` attribute.
    # 
    # @return [Integer]
    # 
    def memory
      @memory
    end
    
    # 
    # Sets the value of the `memory` attribute.
    # 
    # @param value [Integer]
    # 
    def memory=(value)
      @memory = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `node_distance` attribute.
    # 
    # @return [String]
    # 
    def node_distance
      @node_distance
    end
    
    # 
    # Sets the value of the `node_distance` attribute.
    # 
    # @param value [String]
    # 
    def node_distance=(value)
      @node_distance = value
    end
    
    # 
    # Returns the value of the `numa_node_pins` attribute.
    # 
    # @return [Array<NumaNodePin>]
    # 
    def numa_node_pins
      @numa_node_pins
    end
    
    # 
    # Sets the value of the `numa_node_pins` attribute.
    # 
    # @param list [Array<NumaNodePin>]
    # 
    def numa_node_pins=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NumaNodePin.new(value)
          end
        end
      end
      @numa_node_pins = list
    end
    
    # 
    # Returns the value of the `numa_tune_mode` attribute.
    # 
    # @return [NumaTuneMode]
    # 
    def numa_tune_mode
      @numa_tune_mode
    end
    
    # 
    # Sets the value of the `numa_tune_mode` attribute.
    # 
    # @param value [NumaTuneMode]
    # 
    def numa_tune_mode=(value)
      @numa_tune_mode = value
    end
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {VirtualNumaNode} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Cpu, Hash] :cpu The value of attribute `cpu`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Integer] :index The value of attribute `index`.
    # 
    # @option opts [Integer] :memory The value of attribute `memory`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :node_distance The value of attribute `node_distance`.
    # 
    # @option opts [Array<NumaNodePin>, Array<Hash>] :numa_node_pins The values of attribute `numa_node_pins`.
    # 
    # @option opts [NumaTuneMode] :numa_tune_mode The value of attribute `numa_tune_mode`.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.numa_node_pins = opts[:numa_node_pins]
      self.numa_tune_mode = opts[:numa_tune_mode]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @numa_node_pins == other.numa_node_pins &&
      @numa_tune_mode == other.numa_tune_mode &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @numa_node_pins.hash +
      @numa_tune_mode.hash +
      @vm.hash
    end
    
  end
  
  class Vlan < Struct
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [Integer]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [Integer]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Creates a new instance of the {Vlan} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :id The value of attribute `id`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.id = opts[:id]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @id == other.id
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @id.hash
    end
    
  end
  
  class VmBase < Identified
    
    # 
    # Returns the value of the `auto_pinning_policy` attribute.
    # 
    # @return [AutoPinningPolicy]
    # 
    def auto_pinning_policy
      @auto_pinning_policy
    end
    
    # 
    # Sets the value of the `auto_pinning_policy` attribute.
    # 
    # @param value [AutoPinningPolicy]
    # 
    def auto_pinning_policy=(value)
      @auto_pinning_policy = value
    end
    
    # 
    # Returns the value of the `bios` attribute.
    # 
    # @return [Bios]
    # 
    def bios
      @bios
    end
    
    # 
    # Sets the value of the `bios` attribute.
    # 
    # @param value [Bios, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Bios} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def bios=(value)
      if value.is_a?(Hash)
        value = Bios.new(value)
      end
      @bios = value
    end
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `console` attribute.
    # 
    # @return [Console]
    # 
    def console
      @console
    end
    
    # 
    # Sets the value of the `console` attribute.
    # 
    # @param value [Console, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Console} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def console=(value)
      if value.is_a?(Hash)
        value = Console.new(value)
      end
      @console = value
    end
    
    # 
    # Returns the value of the `cpu` attribute.
    # 
    # @return [Cpu]
    # 
    def cpu
      @cpu
    end
    
    # 
    # Sets the value of the `cpu` attribute.
    # 
    # @param value [Cpu, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cpu} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu=(value)
      if value.is_a?(Hash)
        value = Cpu.new(value)
      end
      @cpu = value
    end
    
    # 
    # Returns the value of the `cpu_pinning_policy` attribute.
    # 
    # @return [CpuPinningPolicy]
    # 
    def cpu_pinning_policy
      @cpu_pinning_policy
    end
    
    # 
    # Sets the value of the `cpu_pinning_policy` attribute.
    # 
    # @param value [CpuPinningPolicy]
    # 
    def cpu_pinning_policy=(value)
      @cpu_pinning_policy = value
    end
    
    # 
    # Returns the value of the `cpu_profile` attribute.
    # 
    # @return [CpuProfile]
    # 
    def cpu_profile
      @cpu_profile
    end
    
    # 
    # Sets the value of the `cpu_profile` attribute.
    # 
    # @param value [CpuProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::CpuProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu_profile=(value)
      if value.is_a?(Hash)
        value = CpuProfile.new(value)
      end
      @cpu_profile = value
    end
    
    # 
    # Returns the value of the `cpu_shares` attribute.
    # 
    # @return [Integer]
    # 
    def cpu_shares
      @cpu_shares
    end
    
    # 
    # Sets the value of the `cpu_shares` attribute.
    # 
    # @param value [Integer]
    # 
    def cpu_shares=(value)
      @cpu_shares = value
    end
    
    # 
    # Returns the value of the `creation_time` attribute.
    # 
    # @return [DateTime]
    # 
    def creation_time
      @creation_time
    end
    
    # 
    # Sets the value of the `creation_time` attribute.
    # 
    # @param value [DateTime]
    # 
    def creation_time=(value)
      @creation_time = value
    end
    
    # 
    # Returns the value of the `custom_compatibility_version` attribute.
    # 
    # @return [Version]
    # 
    def custom_compatibility_version
      @custom_compatibility_version
    end
    
    # 
    # Sets the value of the `custom_compatibility_version` attribute.
    # 
    # @param value [Version, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Version} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def custom_compatibility_version=(value)
      if value.is_a?(Hash)
        value = Version.new(value)
      end
      @custom_compatibility_version = value
    end
    
    # 
    # Returns the value of the `custom_cpu_model` attribute.
    # 
    # @return [String]
    # 
    def custom_cpu_model
      @custom_cpu_model
    end
    
    # 
    # Sets the value of the `custom_cpu_model` attribute.
    # 
    # @param value [String]
    # 
    def custom_cpu_model=(value)
      @custom_cpu_model = value
    end
    
    # 
    # Returns the value of the `custom_emulated_machine` attribute.
    # 
    # @return [String]
    # 
    def custom_emulated_machine
      @custom_emulated_machine
    end
    
    # 
    # Sets the value of the `custom_emulated_machine` attribute.
    # 
    # @param value [String]
    # 
    def custom_emulated_machine=(value)
      @custom_emulated_machine = value
    end
    
    # 
    # Returns the value of the `custom_properties` attribute.
    # 
    # @return [Array<CustomProperty>]
    # 
    def custom_properties
      @custom_properties
    end
    
    # 
    # Sets the value of the `custom_properties` attribute.
    # 
    # @param list [Array<CustomProperty>]
    # 
    def custom_properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = CustomProperty.new(value)
          end
        end
      end
      @custom_properties = list
    end
    
    # 
    # Returns the value of the `delete_protected` attribute.
    # 
    # @return [Boolean]
    # 
    def delete_protected
      @delete_protected
    end
    
    # 
    # Sets the value of the `delete_protected` attribute.
    # 
    # @param value [Boolean]
    # 
    def delete_protected=(value)
      @delete_protected = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `display` attribute.
    # 
    # @return [Display]
    # 
    def display
      @display
    end
    
    # 
    # Sets the value of the `display` attribute.
    # 
    # @param value [Display, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Display} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def display=(value)
      if value.is_a?(Hash)
        value = Display.new(value)
      end
      @display = value
    end
    
    # 
    # Returns the value of the `domain` attribute.
    # 
    # @return [Domain]
    # 
    def domain
      @domain
    end
    
    # 
    # Sets the value of the `domain` attribute.
    # 
    # @param value [Domain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Domain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def domain=(value)
      if value.is_a?(Hash)
        value = Domain.new(value)
      end
      @domain = value
    end
    
    # 
    # Returns the value of the `high_availability` attribute.
    # 
    # @return [HighAvailability]
    # 
    def high_availability
      @high_availability
    end
    
    # 
    # Sets the value of the `high_availability` attribute.
    # 
    # @param value [HighAvailability, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HighAvailability} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def high_availability=(value)
      if value.is_a?(Hash)
        value = HighAvailability.new(value)
      end
      @high_availability = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `initialization` attribute.
    # 
    # @return [Initialization]
    # 
    def initialization
      @initialization
    end
    
    # 
    # Sets the value of the `initialization` attribute.
    # 
    # @param value [Initialization, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Initialization} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def initialization=(value)
      if value.is_a?(Hash)
        value = Initialization.new(value)
      end
      @initialization = value
    end
    
    # 
    # Returns the value of the `io` attribute.
    # 
    # @return [Io]
    # 
    def io
      @io
    end
    
    # 
    # Sets the value of the `io` attribute.
    # 
    # @param value [Io, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Io} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def io=(value)
      if value.is_a?(Hash)
        value = Io.new(value)
      end
      @io = value
    end
    
    # 
    # Returns the value of the `large_icon` attribute.
    # 
    # @return [Icon]
    # 
    def large_icon
      @large_icon
    end
    
    # 
    # Sets the value of the `large_icon` attribute.
    # 
    # @param value [Icon, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Icon} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def large_icon=(value)
      if value.is_a?(Hash)
        value = Icon.new(value)
      end
      @large_icon = value
    end
    
    # 
    # Returns the value of the `lease` attribute.
    # 
    # @return [StorageDomainLease]
    # 
    def lease
      @lease
    end
    
    # 
    # Sets the value of the `lease` attribute.
    # 
    # @param value [StorageDomainLease, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomainLease} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def lease=(value)
      if value.is_a?(Hash)
        value = StorageDomainLease.new(value)
      end
      @lease = value
    end
    
    # 
    # Returns the value of the `memory` attribute.
    # 
    # @return [Integer]
    # 
    def memory
      @memory
    end
    
    # 
    # Sets the value of the `memory` attribute.
    # 
    # @param value [Integer]
    # 
    def memory=(value)
      @memory = value
    end
    
    # 
    # Returns the value of the `memory_policy` attribute.
    # 
    # @return [MemoryPolicy]
    # 
    def memory_policy
      @memory_policy
    end
    
    # 
    # Sets the value of the `memory_policy` attribute.
    # 
    # @param value [MemoryPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MemoryPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def memory_policy=(value)
      if value.is_a?(Hash)
        value = MemoryPolicy.new(value)
      end
      @memory_policy = value
    end
    
    # 
    # Returns the value of the `migration` attribute.
    # 
    # @return [MigrationOptions]
    # 
    def migration
      @migration
    end
    
    # 
    # Sets the value of the `migration` attribute.
    # 
    # @param value [MigrationOptions, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MigrationOptions} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def migration=(value)
      if value.is_a?(Hash)
        value = MigrationOptions.new(value)
      end
      @migration = value
    end
    
    # 
    # Returns the value of the `migration_downtime` attribute.
    # 
    # @return [Integer]
    # 
    def migration_downtime
      @migration_downtime
    end
    
    # 
    # Sets the value of the `migration_downtime` attribute.
    # 
    # @param value [Integer]
    # 
    def migration_downtime=(value)
      @migration_downtime = value
    end
    
    # 
    # Returns the value of the `multi_queues_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def multi_queues_enabled
      @multi_queues_enabled
    end
    
    # 
    # Sets the value of the `multi_queues_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def multi_queues_enabled=(value)
      @multi_queues_enabled = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `origin` attribute.
    # 
    # @return [String]
    # 
    def origin
      @origin
    end
    
    # 
    # Sets the value of the `origin` attribute.
    # 
    # @param value [String]
    # 
    def origin=(value)
      @origin = value
    end
    
    # 
    # Returns the value of the `os` attribute.
    # 
    # @return [OperatingSystem]
    # 
    def os
      @os
    end
    
    # 
    # Sets the value of the `os` attribute.
    # 
    # @param value [OperatingSystem, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::OperatingSystem} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def os=(value)
      if value.is_a?(Hash)
        value = OperatingSystem.new(value)
      end
      @os = value
    end
    
    # 
    # Returns the value of the `placement_policy` attribute.
    # 
    # @return [VmPlacementPolicy]
    # 
    def placement_policy
      @placement_policy
    end
    
    # 
    # Sets the value of the `placement_policy` attribute.
    # 
    # @param value [VmPlacementPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VmPlacementPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def placement_policy=(value)
      if value.is_a?(Hash)
        value = VmPlacementPolicy.new(value)
      end
      @placement_policy = value
    end
    
    # 
    # Returns the value of the `quota` attribute.
    # 
    # @return [Quota]
    # 
    def quota
      @quota
    end
    
    # 
    # Sets the value of the `quota` attribute.
    # 
    # @param value [Quota, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Quota} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def quota=(value)
      if value.is_a?(Hash)
        value = Quota.new(value)
      end
      @quota = value
    end
    
    # 
    # Returns the value of the `rng_device` attribute.
    # 
    # @return [RngDevice]
    # 
    def rng_device
      @rng_device
    end
    
    # 
    # Sets the value of the `rng_device` attribute.
    # 
    # @param value [RngDevice, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::RngDevice} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def rng_device=(value)
      if value.is_a?(Hash)
        value = RngDevice.new(value)
      end
      @rng_device = value
    end
    
    # 
    # Returns the value of the `serial_number` attribute.
    # 
    # @return [SerialNumber]
    # 
    def serial_number
      @serial_number
    end
    
    # 
    # Sets the value of the `serial_number` attribute.
    # 
    # @param value [SerialNumber, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SerialNumber} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def serial_number=(value)
      if value.is_a?(Hash)
        value = SerialNumber.new(value)
      end
      @serial_number = value
    end
    
    # 
    # Returns the value of the `small_icon` attribute.
    # 
    # @return [Icon]
    # 
    def small_icon
      @small_icon
    end
    
    # 
    # Sets the value of the `small_icon` attribute.
    # 
    # @param value [Icon, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Icon} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def small_icon=(value)
      if value.is_a?(Hash)
        value = Icon.new(value)
      end
      @small_icon = value
    end
    
    # 
    # Returns the value of the `soundcard_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def soundcard_enabled
      @soundcard_enabled
    end
    
    # 
    # Sets the value of the `soundcard_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def soundcard_enabled=(value)
      @soundcard_enabled = value
    end
    
    # 
    # Returns the value of the `sso` attribute.
    # 
    # @return [Sso]
    # 
    def sso
      @sso
    end
    
    # 
    # Sets the value of the `sso` attribute.
    # 
    # @param value [Sso, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Sso} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def sso=(value)
      if value.is_a?(Hash)
        value = Sso.new(value)
      end
      @sso = value
    end
    
    # 
    # Returns the value of the `start_paused` attribute.
    # 
    # @return [Boolean]
    # 
    def start_paused
      @start_paused
    end
    
    # 
    # Sets the value of the `start_paused` attribute.
    # 
    # @param value [Boolean]
    # 
    def start_paused=(value)
      @start_paused = value
    end
    
    # 
    # Returns the value of the `stateless` attribute.
    # 
    # @return [Boolean]
    # 
    def stateless
      @stateless
    end
    
    # 
    # Sets the value of the `stateless` attribute.
    # 
    # @param value [Boolean]
    # 
    def stateless=(value)
      @stateless = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `storage_error_resume_behaviour` attribute.
    # 
    # @return [VmStorageErrorResumeBehaviour]
    # 
    def storage_error_resume_behaviour
      @storage_error_resume_behaviour
    end
    
    # 
    # Sets the value of the `storage_error_resume_behaviour` attribute.
    # 
    # @param value [VmStorageErrorResumeBehaviour]
    # 
    def storage_error_resume_behaviour=(value)
      @storage_error_resume_behaviour = value
    end
    
    # 
    # Returns the value of the `time_zone` attribute.
    # 
    # @return [TimeZone]
    # 
    def time_zone
      @time_zone
    end
    
    # 
    # Sets the value of the `time_zone` attribute.
    # 
    # @param value [TimeZone, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::TimeZone} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def time_zone=(value)
      if value.is_a?(Hash)
        value = TimeZone.new(value)
      end
      @time_zone = value
    end
    
    # 
    # Returns the value of the `tpm_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def tpm_enabled
      @tpm_enabled
    end
    
    # 
    # Sets the value of the `tpm_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def tpm_enabled=(value)
      @tpm_enabled = value
    end
    
    # 
    # Returns the value of the `tunnel_migration` attribute.
    # 
    # @return [Boolean]
    # 
    def tunnel_migration
      @tunnel_migration
    end
    
    # 
    # Sets the value of the `tunnel_migration` attribute.
    # 
    # @param value [Boolean]
    # 
    def tunnel_migration=(value)
      @tunnel_migration = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [VmType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [VmType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `usb` attribute.
    # 
    # @return [Usb]
    # 
    def usb
      @usb
    end
    
    # 
    # Sets the value of the `usb` attribute.
    # 
    # @param value [Usb, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Usb} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def usb=(value)
      if value.is_a?(Hash)
        value = Usb.new(value)
      end
      @usb = value
    end
    
    # 
    # Returns the value of the `virtio_scsi` attribute.
    # 
    # @return [VirtioScsi]
    # 
    def virtio_scsi
      @virtio_scsi
    end
    
    # 
    # Sets the value of the `virtio_scsi` attribute.
    # 
    # @param value [VirtioScsi, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VirtioScsi} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def virtio_scsi=(value)
      if value.is_a?(Hash)
        value = VirtioScsi.new(value)
      end
      @virtio_scsi = value
    end
    
    # 
    # Returns the value of the `virtio_scsi_multi_queues` attribute.
    # 
    # @return [Integer]
    # 
    def virtio_scsi_multi_queues
      @virtio_scsi_multi_queues
    end
    
    # 
    # Sets the value of the `virtio_scsi_multi_queues` attribute.
    # 
    # @param value [Integer]
    # 
    def virtio_scsi_multi_queues=(value)
      @virtio_scsi_multi_queues = value
    end
    
    # 
    # Returns the value of the `virtio_scsi_multi_queues_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def virtio_scsi_multi_queues_enabled
      @virtio_scsi_multi_queues_enabled
    end
    
    # 
    # Sets the value of the `virtio_scsi_multi_queues_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def virtio_scsi_multi_queues_enabled=(value)
      @virtio_scsi_multi_queues_enabled = value
    end
    
    # 
    # Creates a new instance of the {VmBase} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [AutoPinningPolicy] :auto_pinning_policy The value of attribute `auto_pinning_policy`.
    # 
    # @option opts [Bios, Hash] :bios The value of attribute `bios`.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Console, Hash] :console The value of attribute `console`.
    # 
    # @option opts [Cpu, Hash] :cpu The value of attribute `cpu`.
    # 
    # @option opts [CpuPinningPolicy] :cpu_pinning_policy The value of attribute `cpu_pinning_policy`.
    # 
    # @option opts [CpuProfile, Hash] :cpu_profile The value of attribute `cpu_profile`.
    # 
    # @option opts [Integer] :cpu_shares The value of attribute `cpu_shares`.
    # 
    # @option opts [DateTime] :creation_time The value of attribute `creation_time`.
    # 
    # @option opts [Version, Hash] :custom_compatibility_version The value of attribute `custom_compatibility_version`.
    # 
    # @option opts [String] :custom_cpu_model The value of attribute `custom_cpu_model`.
    # 
    # @option opts [String] :custom_emulated_machine The value of attribute `custom_emulated_machine`.
    # 
    # @option opts [Array<CustomProperty>, Array<Hash>] :custom_properties The values of attribute `custom_properties`.
    # 
    # @option opts [Boolean] :delete_protected The value of attribute `delete_protected`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Display, Hash] :display The value of attribute `display`.
    # 
    # @option opts [Domain, Hash] :domain The value of attribute `domain`.
    # 
    # @option opts [HighAvailability, Hash] :high_availability The value of attribute `high_availability`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Initialization, Hash] :initialization The value of attribute `initialization`.
    # 
    # @option opts [Io, Hash] :io The value of attribute `io`.
    # 
    # @option opts [Icon, Hash] :large_icon The value of attribute `large_icon`.
    # 
    # @option opts [StorageDomainLease, Hash] :lease The value of attribute `lease`.
    # 
    # @option opts [Integer] :memory The value of attribute `memory`.
    # 
    # @option opts [MemoryPolicy, Hash] :memory_policy The value of attribute `memory_policy`.
    # 
    # @option opts [MigrationOptions, Hash] :migration The value of attribute `migration`.
    # 
    # @option opts [Integer] :migration_downtime The value of attribute `migration_downtime`.
    # 
    # @option opts [Boolean] :multi_queues_enabled The value of attribute `multi_queues_enabled`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :origin The value of attribute `origin`.
    # 
    # @option opts [OperatingSystem, Hash] :os The value of attribute `os`.
    # 
    # @option opts [VmPlacementPolicy, Hash] :placement_policy The value of attribute `placement_policy`.
    # 
    # @option opts [Quota, Hash] :quota The value of attribute `quota`.
    # 
    # @option opts [RngDevice, Hash] :rng_device The value of attribute `rng_device`.
    # 
    # @option opts [SerialNumber, Hash] :serial_number The value of attribute `serial_number`.
    # 
    # @option opts [Icon, Hash] :small_icon The value of attribute `small_icon`.
    # 
    # @option opts [Boolean] :soundcard_enabled The value of attribute `soundcard_enabled`.
    # 
    # @option opts [Sso, Hash] :sso The value of attribute `sso`.
    # 
    # @option opts [Boolean] :start_paused The value of attribute `start_paused`.
    # 
    # @option opts [Boolean] :stateless The value of attribute `stateless`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [VmStorageErrorResumeBehaviour] :storage_error_resume_behaviour The value of attribute `storage_error_resume_behaviour`.
    # 
    # @option opts [TimeZone, Hash] :time_zone The value of attribute `time_zone`.
    # 
    # @option opts [Boolean] :tpm_enabled The value of attribute `tpm_enabled`.
    # 
    # @option opts [Boolean] :tunnel_migration The value of attribute `tunnel_migration`.
    # 
    # @option opts [VmType] :type The value of attribute `type`.
    # 
    # @option opts [Usb, Hash] :usb The value of attribute `usb`.
    # 
    # @option opts [VirtioScsi, Hash] :virtio_scsi The value of attribute `virtio_scsi`.
    # 
    # @option opts [Integer] :virtio_scsi_multi_queues The value of attribute `virtio_scsi_multi_queues`.
    # 
    # @option opts [Boolean] :virtio_scsi_multi_queues_enabled The value of attribute `virtio_scsi_multi_queues_enabled`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.auto_pinning_policy = opts[:auto_pinning_policy]
      self.bios = opts[:bios]
      self.cluster = opts[:cluster]
      self.console = opts[:console]
      self.cpu = opts[:cpu]
      self.cpu_pinning_policy = opts[:cpu_pinning_policy]
      self.cpu_profile = opts[:cpu_profile]
      self.cpu_shares = opts[:cpu_shares]
      self.creation_time = opts[:creation_time]
      self.custom_compatibility_version = opts[:custom_compatibility_version]
      self.custom_cpu_model = opts[:custom_cpu_model]
      self.custom_emulated_machine = opts[:custom_emulated_machine]
      self.custom_properties = opts[:custom_properties]
      self.delete_protected = opts[:delete_protected]
      self.display = opts[:display]
      self.domain = opts[:domain]
      self.high_availability = opts[:high_availability]
      self.initialization = opts[:initialization]
      self.io = opts[:io]
      self.large_icon = opts[:large_icon]
      self.lease = opts[:lease]
      self.memory = opts[:memory]
      self.memory_policy = opts[:memory_policy]
      self.migration = opts[:migration]
      self.migration_downtime = opts[:migration_downtime]
      self.multi_queues_enabled = opts[:multi_queues_enabled]
      self.origin = opts[:origin]
      self.os = opts[:os]
      self.placement_policy = opts[:placement_policy]
      self.quota = opts[:quota]
      self.rng_device = opts[:rng_device]
      self.serial_number = opts[:serial_number]
      self.small_icon = opts[:small_icon]
      self.soundcard_enabled = opts[:soundcard_enabled]
      self.sso = opts[:sso]
      self.start_paused = opts[:start_paused]
      self.stateless = opts[:stateless]
      self.storage_domain = opts[:storage_domain]
      self.storage_error_resume_behaviour = opts[:storage_error_resume_behaviour]
      self.time_zone = opts[:time_zone]
      self.tpm_enabled = opts[:tpm_enabled]
      self.tunnel_migration = opts[:tunnel_migration]
      self.type = opts[:type]
      self.usb = opts[:usb]
      self.virtio_scsi = opts[:virtio_scsi]
      self.virtio_scsi_multi_queues = opts[:virtio_scsi_multi_queues]
      self.virtio_scsi_multi_queues_enabled = opts[:virtio_scsi_multi_queues_enabled]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @auto_pinning_policy == other.auto_pinning_policy &&
      @bios == other.bios &&
      @cluster == other.cluster &&
      @console == other.console &&
      @cpu == other.cpu &&
      @cpu_pinning_policy == other.cpu_pinning_policy &&
      @cpu_profile == other.cpu_profile &&
      @cpu_shares == other.cpu_shares &&
      @creation_time == other.creation_time &&
      @custom_compatibility_version == other.custom_compatibility_version &&
      @custom_cpu_model == other.custom_cpu_model &&
      @custom_emulated_machine == other.custom_emulated_machine &&
      @custom_properties == other.custom_properties &&
      @delete_protected == other.delete_protected &&
      @display == other.display &&
      @domain == other.domain &&
      @high_availability == other.high_availability &&
      @initialization == other.initialization &&
      @io == other.io &&
      @large_icon == other.large_icon &&
      @lease == other.lease &&
      @memory == other.memory &&
      @memory_policy == other.memory_policy &&
      @migration == other.migration &&
      @migration_downtime == other.migration_downtime &&
      @multi_queues_enabled == other.multi_queues_enabled &&
      @origin == other.origin &&
      @os == other.os &&
      @placement_policy == other.placement_policy &&
      @quota == other.quota &&
      @rng_device == other.rng_device &&
      @serial_number == other.serial_number &&
      @small_icon == other.small_icon &&
      @soundcard_enabled == other.soundcard_enabled &&
      @sso == other.sso &&
      @start_paused == other.start_paused &&
      @stateless == other.stateless &&
      @storage_domain == other.storage_domain &&
      @storage_error_resume_behaviour == other.storage_error_resume_behaviour &&
      @time_zone == other.time_zone &&
      @tpm_enabled == other.tpm_enabled &&
      @tunnel_migration == other.tunnel_migration &&
      @type == other.type &&
      @usb == other.usb &&
      @virtio_scsi == other.virtio_scsi &&
      @virtio_scsi_multi_queues == other.virtio_scsi_multi_queues &&
      @virtio_scsi_multi_queues_enabled == other.virtio_scsi_multi_queues_enabled
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @auto_pinning_policy.hash +
      @bios.hash +
      @cluster.hash +
      @console.hash +
      @cpu.hash +
      @cpu_pinning_policy.hash +
      @cpu_profile.hash +
      @cpu_shares.hash +
      @creation_time.hash +
      @custom_compatibility_version.hash +
      @custom_cpu_model.hash +
      @custom_emulated_machine.hash +
      @custom_properties.hash +
      @delete_protected.hash +
      @display.hash +
      @domain.hash +
      @high_availability.hash +
      @initialization.hash +
      @io.hash +
      @large_icon.hash +
      @lease.hash +
      @memory.hash +
      @memory_policy.hash +
      @migration.hash +
      @migration_downtime.hash +
      @multi_queues_enabled.hash +
      @origin.hash +
      @os.hash +
      @placement_policy.hash +
      @quota.hash +
      @rng_device.hash +
      @serial_number.hash +
      @small_icon.hash +
      @soundcard_enabled.hash +
      @sso.hash +
      @start_paused.hash +
      @stateless.hash +
      @storage_domain.hash +
      @storage_error_resume_behaviour.hash +
      @time_zone.hash +
      @tpm_enabled.hash +
      @tunnel_migration.hash +
      @type.hash +
      @usb.hash +
      @virtio_scsi.hash +
      @virtio_scsi_multi_queues.hash +
      @virtio_scsi_multi_queues_enabled.hash
    end
    
  end
  
  class VmPlacementPolicy < Struct
    
    # 
    # Returns the value of the `affinity` attribute.
    # 
    # @return [VmAffinity]
    # 
    def affinity
      @affinity
    end
    
    # 
    # Sets the value of the `affinity` attribute.
    # 
    # @param value [VmAffinity]
    # 
    def affinity=(value)
      @affinity = value
    end
    
    # 
    # Returns the value of the `hosts` attribute.
    # 
    # @return [Array<Host>]
    # 
    def hosts
      @hosts
    end
    
    # 
    # Sets the value of the `hosts` attribute.
    # 
    # @param list [Array<Host>]
    # 
    def hosts=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Host.new(value)
          end
        end
      end
      @hosts = list
    end
    
    # 
    # Creates a new instance of the {VmPlacementPolicy} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [VmAffinity] :affinity The value of attribute `affinity`.
    # 
    # @option opts [Array<Host>, Array<Hash>] :hosts The values of attribute `hosts`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.affinity = opts[:affinity]
      self.hosts = opts[:hosts]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @affinity == other.affinity &&
      @hosts == other.hosts
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @affinity.hash +
      @hosts.hash
    end
    
  end
  
  class VmPool < Identified
    
    # 
    # Returns the value of the `auto_storage_select` attribute.
    # 
    # @return [Boolean]
    # 
    def auto_storage_select
      @auto_storage_select
    end
    
    # 
    # Sets the value of the `auto_storage_select` attribute.
    # 
    # @param value [Boolean]
    # 
    def auto_storage_select=(value)
      @auto_storage_select = value
    end
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `display` attribute.
    # 
    # @return [Display]
    # 
    def display
      @display
    end
    
    # 
    # Sets the value of the `display` attribute.
    # 
    # @param value [Display, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Display} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def display=(value)
      if value.is_a?(Hash)
        value = Display.new(value)
      end
      @display = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `instance_type` attribute.
    # 
    # @return [InstanceType]
    # 
    def instance_type
      @instance_type
    end
    
    # 
    # Sets the value of the `instance_type` attribute.
    # 
    # @param value [InstanceType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::InstanceType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def instance_type=(value)
      if value.is_a?(Hash)
        value = InstanceType.new(value)
      end
      @instance_type = value
    end
    
    # 
    # Returns the value of the `max_user_vms` attribute.
    # 
    # @return [Integer]
    # 
    def max_user_vms
      @max_user_vms
    end
    
    # 
    # Sets the value of the `max_user_vms` attribute.
    # 
    # @param value [Integer]
    # 
    def max_user_vms=(value)
      @max_user_vms = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `prestarted_vms` attribute.
    # 
    # @return [Integer]
    # 
    def prestarted_vms
      @prestarted_vms
    end
    
    # 
    # Sets the value of the `prestarted_vms` attribute.
    # 
    # @param value [Integer]
    # 
    def prestarted_vms=(value)
      @prestarted_vms = value
    end
    
    # 
    # Returns the value of the `rng_device` attribute.
    # 
    # @return [RngDevice]
    # 
    def rng_device
      @rng_device
    end
    
    # 
    # Sets the value of the `rng_device` attribute.
    # 
    # @param value [RngDevice, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::RngDevice} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def rng_device=(value)
      if value.is_a?(Hash)
        value = RngDevice.new(value)
      end
      @rng_device = value
    end
    
    # 
    # Returns the value of the `size` attribute.
    # 
    # @return [Integer]
    # 
    def size
      @size
    end
    
    # 
    # Sets the value of the `size` attribute.
    # 
    # @param value [Integer]
    # 
    def size=(value)
      @size = value
    end
    
    # 
    # Returns the value of the `soundcard_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def soundcard_enabled
      @soundcard_enabled
    end
    
    # 
    # Sets the value of the `soundcard_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def soundcard_enabled=(value)
      @soundcard_enabled = value
    end
    
    # 
    # Returns the value of the `stateful` attribute.
    # 
    # @return [Boolean]
    # 
    def stateful
      @stateful
    end
    
    # 
    # Sets the value of the `stateful` attribute.
    # 
    # @param value [Boolean]
    # 
    def stateful=(value)
      @stateful = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `tpm_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def tpm_enabled
      @tpm_enabled
    end
    
    # 
    # Sets the value of the `tpm_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def tpm_enabled=(value)
      @tpm_enabled = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [VmPoolType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [VmPoolType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `use_latest_template_version` attribute.
    # 
    # @return [Boolean]
    # 
    def use_latest_template_version
      @use_latest_template_version
    end
    
    # 
    # Sets the value of the `use_latest_template_version` attribute.
    # 
    # @param value [Boolean]
    # 
    def use_latest_template_version=(value)
      @use_latest_template_version = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {VmPool} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :auto_storage_select The value of attribute `auto_storage_select`.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Display, Hash] :display The value of attribute `display`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [InstanceType, Hash] :instance_type The value of attribute `instance_type`.
    # 
    # @option opts [Integer] :max_user_vms The value of attribute `max_user_vms`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [Integer] :prestarted_vms The value of attribute `prestarted_vms`.
    # 
    # @option opts [RngDevice, Hash] :rng_device The value of attribute `rng_device`.
    # 
    # @option opts [Integer] :size The value of attribute `size`.
    # 
    # @option opts [Boolean] :soundcard_enabled The value of attribute `soundcard_enabled`.
    # 
    # @option opts [Boolean] :stateful The value of attribute `stateful`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [Boolean] :tpm_enabled The value of attribute `tpm_enabled`.
    # 
    # @option opts [VmPoolType] :type The value of attribute `type`.
    # 
    # @option opts [Boolean] :use_latest_template_version The value of attribute `use_latest_template_version`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.auto_storage_select = opts[:auto_storage_select]
      self.cluster = opts[:cluster]
      self.display = opts[:display]
      self.instance_type = opts[:instance_type]
      self.max_user_vms = opts[:max_user_vms]
      self.permissions = opts[:permissions]
      self.prestarted_vms = opts[:prestarted_vms]
      self.rng_device = opts[:rng_device]
      self.size = opts[:size]
      self.soundcard_enabled = opts[:soundcard_enabled]
      self.stateful = opts[:stateful]
      self.template = opts[:template]
      self.tpm_enabled = opts[:tpm_enabled]
      self.type = opts[:type]
      self.use_latest_template_version = opts[:use_latest_template_version]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @auto_storage_select == other.auto_storage_select &&
      @cluster == other.cluster &&
      @display == other.display &&
      @instance_type == other.instance_type &&
      @max_user_vms == other.max_user_vms &&
      @permissions == other.permissions &&
      @prestarted_vms == other.prestarted_vms &&
      @rng_device == other.rng_device &&
      @size == other.size &&
      @soundcard_enabled == other.soundcard_enabled &&
      @stateful == other.stateful &&
      @template == other.template &&
      @tpm_enabled == other.tpm_enabled &&
      @type == other.type &&
      @use_latest_template_version == other.use_latest_template_version &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @auto_storage_select.hash +
      @cluster.hash +
      @display.hash +
      @instance_type.hash +
      @max_user_vms.hash +
      @permissions.hash +
      @prestarted_vms.hash +
      @rng_device.hash +
      @size.hash +
      @soundcard_enabled.hash +
      @stateful.hash +
      @template.hash +
      @tpm_enabled.hash +
      @type.hash +
      @use_latest_template_version.hash +
      @vm.hash
    end
    
  end
  
  class VmSummary < Struct
    
    # 
    # Returns the value of the `active` attribute.
    # 
    # @return [Integer]
    # 
    def active
      @active
    end
    
    # 
    # Sets the value of the `active` attribute.
    # 
    # @param value [Integer]
    # 
    def active=(value)
      @active = value
    end
    
    # 
    # Returns the value of the `migrating` attribute.
    # 
    # @return [Integer]
    # 
    def migrating
      @migrating
    end
    
    # 
    # Sets the value of the `migrating` attribute.
    # 
    # @param value [Integer]
    # 
    def migrating=(value)
      @migrating = value
    end
    
    # 
    # Returns the value of the `total` attribute.
    # 
    # @return [Integer]
    # 
    def total
      @total
    end
    
    # 
    # Sets the value of the `total` attribute.
    # 
    # @param value [Integer]
    # 
    def total=(value)
      @total = value
    end
    
    # 
    # Creates a new instance of the {VmSummary} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :active The value of attribute `active`.
    # 
    # @option opts [Integer] :migrating The value of attribute `migrating`.
    # 
    # @option opts [Integer] :total The value of attribute `total`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.active = opts[:active]
      self.migrating = opts[:migrating]
      self.total = opts[:total]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @active == other.active &&
      @migrating == other.migrating &&
      @total == other.total
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @active.hash +
      @migrating.hash +
      @total.hash
    end
    
  end
  
  class VnicPassThrough < Struct
    
    # 
    # Returns the value of the `mode` attribute.
    # 
    # @return [VnicPassThroughMode]
    # 
    def mode
      @mode
    end
    
    # 
    # Sets the value of the `mode` attribute.
    # 
    # @param value [VnicPassThroughMode]
    # 
    def mode=(value)
      @mode = value
    end
    
    # 
    # Creates a new instance of the {VnicPassThrough} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [VnicPassThroughMode] :mode The value of attribute `mode`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.mode = opts[:mode]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @mode == other.mode
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @mode.hash
    end
    
  end
  
  class VnicProfile < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `custom_properties` attribute.
    # 
    # @return [Array<CustomProperty>]
    # 
    def custom_properties
      @custom_properties
    end
    
    # 
    # Sets the value of the `custom_properties` attribute.
    # 
    # @param list [Array<CustomProperty>]
    # 
    def custom_properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = CustomProperty.new(value)
          end
        end
      end
      @custom_properties = list
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `failover` attribute.
    # 
    # @return [VnicProfile]
    # 
    def failover
      @failover
    end
    
    # 
    # Sets the value of the `failover` attribute.
    # 
    # @param value [VnicProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VnicProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def failover=(value)
      if value.is_a?(Hash)
        value = VnicProfile.new(value)
      end
      @failover = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `migratable` attribute.
    # 
    # @return [Boolean]
    # 
    def migratable
      @migratable
    end
    
    # 
    # Sets the value of the `migratable` attribute.
    # 
    # @param value [Boolean]
    # 
    def migratable=(value)
      @migratable = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `network` attribute.
    # 
    # @return [Network]
    # 
    def network
      @network
    end
    
    # 
    # Sets the value of the `network` attribute.
    # 
    # @param value [Network, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Network} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def network=(value)
      if value.is_a?(Hash)
        value = Network.new(value)
      end
      @network = value
    end
    
    # 
    # Returns the value of the `network_filter` attribute.
    # 
    # @return [NetworkFilter]
    # 
    def network_filter
      @network_filter
    end
    
    # 
    # Sets the value of the `network_filter` attribute.
    # 
    # @param value [NetworkFilter, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::NetworkFilter} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def network_filter=(value)
      if value.is_a?(Hash)
        value = NetworkFilter.new(value)
      end
      @network_filter = value
    end
    
    # 
    # Returns the value of the `pass_through` attribute.
    # 
    # @return [VnicPassThrough]
    # 
    def pass_through
      @pass_through
    end
    
    # 
    # Sets the value of the `pass_through` attribute.
    # 
    # @param value [VnicPassThrough, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VnicPassThrough} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def pass_through=(value)
      if value.is_a?(Hash)
        value = VnicPassThrough.new(value)
      end
      @pass_through = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `port_mirroring` attribute.
    # 
    # @return [Boolean]
    # 
    def port_mirroring
      @port_mirroring
    end
    
    # 
    # Sets the value of the `port_mirroring` attribute.
    # 
    # @param value [Boolean]
    # 
    def port_mirroring=(value)
      @port_mirroring = value
    end
    
    # 
    # Returns the value of the `qos` attribute.
    # 
    # @return [Qos]
    # 
    def qos
      @qos
    end
    
    # 
    # Sets the value of the `qos` attribute.
    # 
    # @param value [Qos, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Qos} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def qos=(value)
      if value.is_a?(Hash)
        value = Qos.new(value)
      end
      @qos = value
    end
    
    # 
    # Creates a new instance of the {VnicProfile} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Array<CustomProperty>, Array<Hash>] :custom_properties The values of attribute `custom_properties`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [VnicProfile, Hash] :failover The value of attribute `failover`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Boolean] :migratable The value of attribute `migratable`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Network, Hash] :network The value of attribute `network`.
    # 
    # @option opts [NetworkFilter, Hash] :network_filter The value of attribute `network_filter`.
    # 
    # @option opts [VnicPassThrough, Hash] :pass_through The value of attribute `pass_through`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [Boolean] :port_mirroring The value of attribute `port_mirroring`.
    # 
    # @option opts [Qos, Hash] :qos The value of attribute `qos`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.custom_properties = opts[:custom_properties]
      self.failover = opts[:failover]
      self.migratable = opts[:migratable]
      self.network = opts[:network]
      self.network_filter = opts[:network_filter]
      self.pass_through = opts[:pass_through]
      self.permissions = opts[:permissions]
      self.port_mirroring = opts[:port_mirroring]
      self.qos = opts[:qos]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @custom_properties == other.custom_properties &&
      @failover == other.failover &&
      @migratable == other.migratable &&
      @network == other.network &&
      @network_filter == other.network_filter &&
      @pass_through == other.pass_through &&
      @permissions == other.permissions &&
      @port_mirroring == other.port_mirroring &&
      @qos == other.qos
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @custom_properties.hash +
      @failover.hash +
      @migratable.hash +
      @network.hash +
      @network_filter.hash +
      @pass_through.hash +
      @permissions.hash +
      @port_mirroring.hash +
      @qos.hash
    end
    
  end
  
  class VnicProfileMapping < Struct
    
    # 
    # Returns the value of the `source_network_name` attribute.
    # 
    # @return [String]
    # 
    def source_network_name
      @source_network_name
    end
    
    # 
    # Sets the value of the `source_network_name` attribute.
    # 
    # @param value [String]
    # 
    def source_network_name=(value)
      @source_network_name = value
    end
    
    # 
    # Returns the value of the `source_network_profile_name` attribute.
    # 
    # @return [String]
    # 
    def source_network_profile_name
      @source_network_profile_name
    end
    
    # 
    # Sets the value of the `source_network_profile_name` attribute.
    # 
    # @param value [String]
    # 
    def source_network_profile_name=(value)
      @source_network_profile_name = value
    end
    
    # 
    # Returns the value of the `target_vnic_profile` attribute.
    # 
    # @return [VnicProfile]
    # 
    def target_vnic_profile
      @target_vnic_profile
    end
    
    # 
    # Sets the value of the `target_vnic_profile` attribute.
    # 
    # @param value [VnicProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VnicProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def target_vnic_profile=(value)
      if value.is_a?(Hash)
        value = VnicProfile.new(value)
      end
      @target_vnic_profile = value
    end
    
    # 
    # Creates a new instance of the {VnicProfileMapping} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :source_network_name The value of attribute `source_network_name`.
    # 
    # @option opts [String] :source_network_profile_name The value of attribute `source_network_profile_name`.
    # 
    # @option opts [VnicProfile, Hash] :target_vnic_profile The value of attribute `target_vnic_profile`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.source_network_name = opts[:source_network_name]
      self.source_network_profile_name = opts[:source_network_profile_name]
      self.target_vnic_profile = opts[:target_vnic_profile]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @source_network_name == other.source_network_name &&
      @source_network_profile_name == other.source_network_profile_name &&
      @target_vnic_profile == other.target_vnic_profile
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @source_network_name.hash +
      @source_network_profile_name.hash +
      @target_vnic_profile.hash
    end
    
  end
  
  class VolumeGroup < Struct
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `logical_units` attribute.
    # 
    # @return [Array<LogicalUnit>]
    # 
    def logical_units
      @logical_units
    end
    
    # 
    # Sets the value of the `logical_units` attribute.
    # 
    # @param list [Array<LogicalUnit>]
    # 
    def logical_units=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = LogicalUnit.new(value)
          end
        end
      end
      @logical_units = list
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {VolumeGroup} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Array<LogicalUnit>, Array<Hash>] :logical_units The values of attribute `logical_units`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.id = opts[:id]
      self.logical_units = opts[:logical_units]
      self.name = opts[:name]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @id == other.id &&
      @logical_units == other.logical_units &&
      @name == other.name
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @id.hash +
      @logical_units.hash +
      @name.hash
    end
    
  end
  
  class Weight < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `factor` attribute.
    # 
    # @return [Integer]
    # 
    def factor
      @factor
    end
    
    # 
    # Sets the value of the `factor` attribute.
    # 
    # @param value [Integer]
    # 
    def factor=(value)
      @factor = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `scheduling_policy` attribute.
    # 
    # @return [SchedulingPolicy]
    # 
    def scheduling_policy
      @scheduling_policy
    end
    
    # 
    # Sets the value of the `scheduling_policy` attribute.
    # 
    # @param value [SchedulingPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SchedulingPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def scheduling_policy=(value)
      if value.is_a?(Hash)
        value = SchedulingPolicy.new(value)
      end
      @scheduling_policy = value
    end
    
    # 
    # Returns the value of the `scheduling_policy_unit` attribute.
    # 
    # @return [SchedulingPolicyUnit]
    # 
    def scheduling_policy_unit
      @scheduling_policy_unit
    end
    
    # 
    # Sets the value of the `scheduling_policy_unit` attribute.
    # 
    # @param value [SchedulingPolicyUnit, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SchedulingPolicyUnit} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def scheduling_policy_unit=(value)
      if value.is_a?(Hash)
        value = SchedulingPolicyUnit.new(value)
      end
      @scheduling_policy_unit = value
    end
    
    # 
    # Creates a new instance of the {Weight} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Integer] :factor The value of attribute `factor`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [SchedulingPolicy, Hash] :scheduling_policy The value of attribute `scheduling_policy`.
    # 
    # @option opts [SchedulingPolicyUnit, Hash] :scheduling_policy_unit The value of attribute `scheduling_policy_unit`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.factor = opts[:factor]
      self.scheduling_policy = opts[:scheduling_policy]
      self.scheduling_policy_unit = opts[:scheduling_policy_unit]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @factor == other.factor &&
      @scheduling_policy == other.scheduling_policy &&
      @scheduling_policy_unit == other.scheduling_policy_unit
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @factor.hash +
      @scheduling_policy.hash +
      @scheduling_policy_unit.hash
    end
    
  end
  
  class Action < Identified
    
    # 
    # Returns the value of the `activate` attribute.
    # 
    # @return [Boolean]
    # 
    def activate
      @activate
    end
    
    # 
    # Sets the value of the `activate` attribute.
    # 
    # @param value [Boolean]
    # 
    def activate=(value)
      @activate = value
    end
    
    # 
    # Returns the value of the `allow_partial_import` attribute.
    # 
    # @return [Boolean]
    # 
    def allow_partial_import
      @allow_partial_import
    end
    
    # 
    # Sets the value of the `allow_partial_import` attribute.
    # 
    # @param value [Boolean]
    # 
    def allow_partial_import=(value)
      @allow_partial_import = value
    end
    
    # 
    # Returns the value of the `async` attribute.
    # 
    # @return [Boolean]
    # 
    def async
      @async
    end
    
    # 
    # Sets the value of the `async` attribute.
    # 
    # @param value [Boolean]
    # 
    def async=(value)
      @async = value
    end
    
    # 
    # Returns the value of the `attach_wgt` attribute.
    # 
    # @return [Boolean]
    # 
    def attach_wgt
      @attach_wgt
    end
    
    # 
    # Sets the value of the `attach_wgt` attribute.
    # 
    # @param value [Boolean]
    # 
    def attach_wgt=(value)
      @attach_wgt = value
    end
    
    # 
    # Returns the value of the `attachment` attribute.
    # 
    # @return [DiskAttachment]
    # 
    def attachment
      @attachment
    end
    
    # 
    # Sets the value of the `attachment` attribute.
    # 
    # @param value [DiskAttachment, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DiskAttachment} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def attachment=(value)
      if value.is_a?(Hash)
        value = DiskAttachment.new(value)
      end
      @attachment = value
    end
    
    # 
    # Returns the value of the `authorized_key` attribute.
    # 
    # @return [AuthorizedKey]
    # 
    def authorized_key
      @authorized_key
    end
    
    # 
    # Sets the value of the `authorized_key` attribute.
    # 
    # @param value [AuthorizedKey, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::AuthorizedKey} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def authorized_key=(value)
      if value.is_a?(Hash)
        value = AuthorizedKey.new(value)
      end
      @authorized_key = value
    end
    
    # 
    # Returns the value of the `auto_pinning_policy` attribute.
    # 
    # @return [AutoPinningPolicy]
    # 
    def auto_pinning_policy
      @auto_pinning_policy
    end
    
    # 
    # Sets the value of the `auto_pinning_policy` attribute.
    # 
    # @param value [AutoPinningPolicy]
    # 
    def auto_pinning_policy=(value)
      @auto_pinning_policy = value
    end
    
    # 
    # Returns the value of the `bricks` attribute.
    # 
    # @return [Array<GlusterBrick>]
    # 
    def bricks
      @bricks
    end
    
    # 
    # Sets the value of the `bricks` attribute.
    # 
    # @param list [Array<GlusterBrick>]
    # 
    def bricks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = GlusterBrick.new(value)
          end
        end
      end
      @bricks = list
    end
    
    # 
    # Returns the value of the `certificates` attribute.
    # 
    # @return [Array<Certificate>]
    # 
    def certificates
      @certificates
    end
    
    # 
    # Sets the value of the `certificates` attribute.
    # 
    # @param list [Array<Certificate>]
    # 
    def certificates=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Certificate.new(value)
          end
        end
      end
      @certificates = list
    end
    
    # 
    # Returns the value of the `check_connectivity` attribute.
    # 
    # @return [Boolean]
    # 
    def check_connectivity
      @check_connectivity
    end
    
    # 
    # Sets the value of the `check_connectivity` attribute.
    # 
    # @param value [Boolean]
    # 
    def check_connectivity=(value)
      @check_connectivity = value
    end
    
    # 
    # Returns the value of the `clone` attribute.
    # 
    # @return [Boolean]
    # 
    def clone
      @clone
    end
    
    # 
    # Sets the value of the `clone` attribute.
    # 
    # @param value [Boolean]
    # 
    def clone=(value)
      @clone = value
    end
    
    # 
    # Returns the value of the `clone_permissions` attribute.
    # 
    # @return [Boolean]
    # 
    def clone_permissions
      @clone_permissions
    end
    
    # 
    # Sets the value of the `clone_permissions` attribute.
    # 
    # @param value [Boolean]
    # 
    def clone_permissions=(value)
      @clone_permissions = value
    end
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `collapse_snapshots` attribute.
    # 
    # @return [Boolean]
    # 
    def collapse_snapshots
      @collapse_snapshots
    end
    
    # 
    # Sets the value of the `collapse_snapshots` attribute.
    # 
    # @param value [Boolean]
    # 
    def collapse_snapshots=(value)
      @collapse_snapshots = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `commit_on_success` attribute.
    # 
    # @return [Boolean]
    # 
    def commit_on_success
      @commit_on_success
    end
    
    # 
    # Sets the value of the `commit_on_success` attribute.
    # 
    # @param value [Boolean]
    # 
    def commit_on_success=(value)
      @commit_on_success = value
    end
    
    # 
    # Returns the value of the `connection` attribute.
    # 
    # @return [StorageConnection]
    # 
    def connection
      @connection
    end
    
    # 
    # Sets the value of the `connection` attribute.
    # 
    # @param value [StorageConnection, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageConnection} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def connection=(value)
      if value.is_a?(Hash)
        value = StorageConnection.new(value)
      end
      @connection = value
    end
    
    # 
    # Returns the value of the `connectivity_timeout` attribute.
    # 
    # @return [Integer]
    # 
    def connectivity_timeout
      @connectivity_timeout
    end
    
    # 
    # Sets the value of the `connectivity_timeout` attribute.
    # 
    # @param value [Integer]
    # 
    def connectivity_timeout=(value)
      @connectivity_timeout = value
    end
    
    # 
    # Returns the value of the `correlation_id` attribute.
    # 
    # @return [String]
    # 
    def correlation_id
      @correlation_id
    end
    
    # 
    # Sets the value of the `correlation_id` attribute.
    # 
    # @param value [String]
    # 
    def correlation_id=(value)
      @correlation_id = value
    end
    
    # 
    # Returns the value of the `data_center` attribute.
    # 
    # @return [DataCenter]
    # 
    def data_center
      @data_center
    end
    
    # 
    # Sets the value of the `data_center` attribute.
    # 
    # @param value [DataCenter, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DataCenter} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def data_center=(value)
      if value.is_a?(Hash)
        value = DataCenter.new(value)
      end
      @data_center = value
    end
    
    # 
    # Returns the value of the `deploy_hosted_engine` attribute.
    # 
    # @return [Boolean]
    # 
    def deploy_hosted_engine
      @deploy_hosted_engine
    end
    
    # 
    # Sets the value of the `deploy_hosted_engine` attribute.
    # 
    # @param value [Boolean]
    # 
    def deploy_hosted_engine=(value)
      @deploy_hosted_engine = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `details` attribute.
    # 
    # @return [GlusterVolumeProfileDetails]
    # 
    def details
      @details
    end
    
    # 
    # Sets the value of the `details` attribute.
    # 
    # @param value [GlusterVolumeProfileDetails, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::GlusterVolumeProfileDetails} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def details=(value)
      if value.is_a?(Hash)
        value = GlusterVolumeProfileDetails.new(value)
      end
      @details = value
    end
    
    # 
    # Returns the value of the `directory` attribute.
    # 
    # @return [String]
    # 
    def directory
      @directory
    end
    
    # 
    # Sets the value of the `directory` attribute.
    # 
    # @param value [String]
    # 
    def directory=(value)
      @directory = value
    end
    
    # 
    # Returns the value of the `discard_snapshots` attribute.
    # 
    # @return [Boolean]
    # 
    def discard_snapshots
      @discard_snapshots
    end
    
    # 
    # Sets the value of the `discard_snapshots` attribute.
    # 
    # @param value [Boolean]
    # 
    def discard_snapshots=(value)
      @discard_snapshots = value
    end
    
    # 
    # Returns the value of the `discovered_targets` attribute.
    # 
    # @return [Array<IscsiDetails>]
    # 
    def discovered_targets
      @discovered_targets
    end
    
    # 
    # Sets the value of the `discovered_targets` attribute.
    # 
    # @param list [Array<IscsiDetails>]
    # 
    def discovered_targets=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = IscsiDetails.new(value)
          end
        end
      end
      @discovered_targets = list
    end
    
    # 
    # Returns the value of the `disk` attribute.
    # 
    # @return [Disk]
    # 
    def disk
      @disk
    end
    
    # 
    # Sets the value of the `disk` attribute.
    # 
    # @param value [Disk, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Disk} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def disk=(value)
      if value.is_a?(Hash)
        value = Disk.new(value)
      end
      @disk = value
    end
    
    # 
    # Returns the value of the `disk_profile` attribute.
    # 
    # @return [DiskProfile]
    # 
    def disk_profile
      @disk_profile
    end
    
    # 
    # Sets the value of the `disk_profile` attribute.
    # 
    # @param value [DiskProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DiskProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def disk_profile=(value)
      if value.is_a?(Hash)
        value = DiskProfile.new(value)
      end
      @disk_profile = value
    end
    
    # 
    # Returns the value of the `disks` attribute.
    # 
    # @return [Array<Disk>]
    # 
    def disks
      @disks
    end
    
    # 
    # Sets the value of the `disks` attribute.
    # 
    # @param list [Array<Disk>]
    # 
    def disks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Disk.new(value)
          end
        end
      end
      @disks = list
    end
    
    # 
    # Returns the value of the `exclusive` attribute.
    # 
    # @return [Boolean]
    # 
    def exclusive
      @exclusive
    end
    
    # 
    # Sets the value of the `exclusive` attribute.
    # 
    # @param value [Boolean]
    # 
    def exclusive=(value)
      @exclusive = value
    end
    
    # 
    # Returns the value of the `fault` attribute.
    # 
    # @return [Fault]
    # 
    def fault
      @fault
    end
    
    # 
    # Sets the value of the `fault` attribute.
    # 
    # @param value [Fault, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Fault} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def fault=(value)
      if value.is_a?(Hash)
        value = Fault.new(value)
      end
      @fault = value
    end
    
    # 
    # Returns the value of the `fence_type` attribute.
    # 
    # @return [String]
    # 
    def fence_type
      @fence_type
    end
    
    # 
    # Sets the value of the `fence_type` attribute.
    # 
    # @param value [String]
    # 
    def fence_type=(value)
      @fence_type = value
    end
    
    # 
    # Returns the value of the `filename` attribute.
    # 
    # @return [String]
    # 
    def filename
      @filename
    end
    
    # 
    # Sets the value of the `filename` attribute.
    # 
    # @param value [String]
    # 
    def filename=(value)
      @filename = value
    end
    
    # 
    # Returns the value of the `filter` attribute.
    # 
    # @return [Boolean]
    # 
    def filter
      @filter
    end
    
    # 
    # Sets the value of the `filter` attribute.
    # 
    # @param value [Boolean]
    # 
    def filter=(value)
      @filter = value
    end
    
    # 
    # Returns the value of the `fix_layout` attribute.
    # 
    # @return [Boolean]
    # 
    def fix_layout
      @fix_layout
    end
    
    # 
    # Sets the value of the `fix_layout` attribute.
    # 
    # @param value [Boolean]
    # 
    def fix_layout=(value)
      @fix_layout = value
    end
    
    # 
    # Returns the value of the `follow` attribute.
    # 
    # @return [String]
    # 
    def follow
      @follow
    end
    
    # 
    # Sets the value of the `follow` attribute.
    # 
    # @param value [String]
    # 
    def follow=(value)
      @follow = value
    end
    
    # 
    # Returns the value of the `force` attribute.
    # 
    # @return [Boolean]
    # 
    def force
      @force
    end
    
    # 
    # Sets the value of the `force` attribute.
    # 
    # @param value [Boolean]
    # 
    def force=(value)
      @force = value
    end
    
    # 
    # Returns the value of the `grace_period` attribute.
    # 
    # @return [GracePeriod]
    # 
    def grace_period
      @grace_period
    end
    
    # 
    # Sets the value of the `grace_period` attribute.
    # 
    # @param value [GracePeriod, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::GracePeriod} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def grace_period=(value)
      if value.is_a?(Hash)
        value = GracePeriod.new(value)
      end
      @grace_period = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `image` attribute.
    # 
    # @return [String]
    # 
    def image
      @image
    end
    
    # 
    # Sets the value of the `image` attribute.
    # 
    # @param value [String]
    # 
    def image=(value)
      @image = value
    end
    
    # 
    # Returns the value of the `image_transfer` attribute.
    # 
    # @return [ImageTransfer]
    # 
    def image_transfer
      @image_transfer
    end
    
    # 
    # Sets the value of the `image_transfer` attribute.
    # 
    # @param value [ImageTransfer, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ImageTransfer} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def image_transfer=(value)
      if value.is_a?(Hash)
        value = ImageTransfer.new(value)
      end
      @image_transfer = value
    end
    
    # 
    # Returns the value of the `import_as_template` attribute.
    # 
    # @return [Boolean]
    # 
    def import_as_template
      @import_as_template
    end
    
    # 
    # Sets the value of the `import_as_template` attribute.
    # 
    # @param value [Boolean]
    # 
    def import_as_template=(value)
      @import_as_template = value
    end
    
    # 
    # Returns the value of the `is_attached` attribute.
    # 
    # @return [Boolean]
    # 
    def is_attached
      @is_attached
    end
    
    # 
    # Sets the value of the `is_attached` attribute.
    # 
    # @param value [Boolean]
    # 
    def is_attached=(value)
      @is_attached = value
    end
    
    # 
    # Returns the value of the `iscsi` attribute.
    # 
    # @return [IscsiDetails]
    # 
    def iscsi
      @iscsi
    end
    
    # 
    # Sets the value of the `iscsi` attribute.
    # 
    # @param value [IscsiDetails, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::IscsiDetails} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def iscsi=(value)
      if value.is_a?(Hash)
        value = IscsiDetails.new(value)
      end
      @iscsi = value
    end
    
    # 
    # Returns the value of the `iscsi_targets` attribute.
    # 
    # @return [Array<String>]
    # 
    def iscsi_targets
      @iscsi_targets
    end
    
    # 
    # Sets the value of the `iscsi_targets` attribute.
    # 
    # @param list [Array<String>]
    # 
    def iscsi_targets=(list)
      @iscsi_targets = list
    end
    
    # 
    # Returns the value of the `job` attribute.
    # 
    # @return [Job]
    # 
    def job
      @job
    end
    
    # 
    # Sets the value of the `job` attribute.
    # 
    # @param value [Job, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Job} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def job=(value)
      if value.is_a?(Hash)
        value = Job.new(value)
      end
      @job = value
    end
    
    # 
    # Returns the value of the `lease` attribute.
    # 
    # @return [StorageDomainLease]
    # 
    def lease
      @lease
    end
    
    # 
    # Sets the value of the `lease` attribute.
    # 
    # @param value [StorageDomainLease, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomainLease} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def lease=(value)
      if value.is_a?(Hash)
        value = StorageDomainLease.new(value)
      end
      @lease = value
    end
    
    # 
    # Returns the value of the `logical_units` attribute.
    # 
    # @return [Array<LogicalUnit>]
    # 
    def logical_units
      @logical_units
    end
    
    # 
    # Sets the value of the `logical_units` attribute.
    # 
    # @param list [Array<LogicalUnit>]
    # 
    def logical_units=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = LogicalUnit.new(value)
          end
        end
      end
      @logical_units = list
    end
    
    # 
    # Returns the value of the `maintenance_after_restart` attribute.
    # 
    # @return [Boolean]
    # 
    def maintenance_after_restart
      @maintenance_after_restart
    end
    
    # 
    # Sets the value of the `maintenance_after_restart` attribute.
    # 
    # @param value [Boolean]
    # 
    def maintenance_after_restart=(value)
      @maintenance_after_restart = value
    end
    
    # 
    # Returns the value of the `maintenance_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def maintenance_enabled
      @maintenance_enabled
    end
    
    # 
    # Sets the value of the `maintenance_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def maintenance_enabled=(value)
      @maintenance_enabled = value
    end
    
    # 
    # Returns the value of the `migrate_vms_in_affinity_closure` attribute.
    # 
    # @return [Boolean]
    # 
    def migrate_vms_in_affinity_closure
      @migrate_vms_in_affinity_closure
    end
    
    # 
    # Sets the value of the `migrate_vms_in_affinity_closure` attribute.
    # 
    # @param value [Boolean]
    # 
    def migrate_vms_in_affinity_closure=(value)
      @migrate_vms_in_affinity_closure = value
    end
    
    # 
    # Returns the value of the `modified_bonds` attribute.
    # 
    # @return [Array<HostNic>]
    # 
    def modified_bonds
      @modified_bonds
    end
    
    # 
    # Sets the value of the `modified_bonds` attribute.
    # 
    # @param list [Array<HostNic>]
    # 
    def modified_bonds=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = HostNic.new(value)
          end
        end
      end
      @modified_bonds = list
    end
    
    # 
    # Returns the value of the `modified_labels` attribute.
    # 
    # @return [Array<NetworkLabel>]
    # 
    def modified_labels
      @modified_labels
    end
    
    # 
    # Sets the value of the `modified_labels` attribute.
    # 
    # @param list [Array<NetworkLabel>]
    # 
    def modified_labels=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NetworkLabel.new(value)
          end
        end
      end
      @modified_labels = list
    end
    
    # 
    # Returns the value of the `modified_network_attachments` attribute.
    # 
    # @return [Array<NetworkAttachment>]
    # 
    def modified_network_attachments
      @modified_network_attachments
    end
    
    # 
    # Sets the value of the `modified_network_attachments` attribute.
    # 
    # @param list [Array<NetworkAttachment>]
    # 
    def modified_network_attachments=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NetworkAttachment.new(value)
          end
        end
      end
      @modified_network_attachments = list
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `optimize_cpu_settings` attribute.
    # 
    # @return [Boolean]
    # 
    def optimize_cpu_settings
      @optimize_cpu_settings
    end
    
    # 
    # Sets the value of the `optimize_cpu_settings` attribute.
    # 
    # @param value [Boolean]
    # 
    def optimize_cpu_settings=(value)
      @optimize_cpu_settings = value
    end
    
    # 
    # Returns the value of the `option` attribute.
    # 
    # @return [Option]
    # 
    def option
      @option
    end
    
    # 
    # Sets the value of the `option` attribute.
    # 
    # @param value [Option, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Option} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def option=(value)
      if value.is_a?(Hash)
        value = Option.new(value)
      end
      @option = value
    end
    
    # 
    # Returns the value of the `pause` attribute.
    # 
    # @return [Boolean]
    # 
    def pause
      @pause
    end
    
    # 
    # Sets the value of the `pause` attribute.
    # 
    # @param value [Boolean]
    # 
    def pause=(value)
      @pause = value
    end
    
    # 
    # Returns the value of the `permission` attribute.
    # 
    # @return [Permission]
    # 
    def permission
      @permission
    end
    
    # 
    # Sets the value of the `permission` attribute.
    # 
    # @param value [Permission, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Permission} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def permission=(value)
      if value.is_a?(Hash)
        value = Permission.new(value)
      end
      @permission = value
    end
    
    # 
    # Returns the value of the `power_management` attribute.
    # 
    # @return [PowerManagement]
    # 
    def power_management
      @power_management
    end
    
    # 
    # Sets the value of the `power_management` attribute.
    # 
    # @param value [PowerManagement, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::PowerManagement} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def power_management=(value)
      if value.is_a?(Hash)
        value = PowerManagement.new(value)
      end
      @power_management = value
    end
    
    # 
    # Returns the value of the `proxy_ticket` attribute.
    # 
    # @return [ProxyTicket]
    # 
    def proxy_ticket
      @proxy_ticket
    end
    
    # 
    # Sets the value of the `proxy_ticket` attribute.
    # 
    # @param value [ProxyTicket, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ProxyTicket} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def proxy_ticket=(value)
      if value.is_a?(Hash)
        value = ProxyTicket.new(value)
      end
      @proxy_ticket = value
    end
    
    # 
    # Returns the value of the `quota` attribute.
    # 
    # @return [Quota]
    # 
    def quota
      @quota
    end
    
    # 
    # Sets the value of the `quota` attribute.
    # 
    # @param value [Quota, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Quota} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def quota=(value)
      if value.is_a?(Hash)
        value = Quota.new(value)
      end
      @quota = value
    end
    
    # 
    # Returns the value of the `reason` attribute.
    # 
    # @return [String]
    # 
    def reason
      @reason
    end
    
    # 
    # Sets the value of the `reason` attribute.
    # 
    # @param value [String]
    # 
    def reason=(value)
      @reason = value
    end
    
    # 
    # Returns the value of the `reassign_bad_macs` attribute.
    # 
    # @return [Boolean]
    # 
    def reassign_bad_macs
      @reassign_bad_macs
    end
    
    # 
    # Sets the value of the `reassign_bad_macs` attribute.
    # 
    # @param value [Boolean]
    # 
    def reassign_bad_macs=(value)
      @reassign_bad_macs = value
    end
    
    # 
    # Returns the value of the `reboot` attribute.
    # 
    # @return [Boolean]
    # 
    def reboot
      @reboot
    end
    
    # 
    # Sets the value of the `reboot` attribute.
    # 
    # @param value [Boolean]
    # 
    def reboot=(value)
      @reboot = value
    end
    
    # 
    # Returns the value of the `registration_configuration` attribute.
    # 
    # @return [RegistrationConfiguration]
    # 
    def registration_configuration
      @registration_configuration
    end
    
    # 
    # Sets the value of the `registration_configuration` attribute.
    # 
    # @param value [RegistrationConfiguration, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::RegistrationConfiguration} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def registration_configuration=(value)
      if value.is_a?(Hash)
        value = RegistrationConfiguration.new(value)
      end
      @registration_configuration = value
    end
    
    # 
    # Returns the value of the `remote_viewer_connection_file` attribute.
    # 
    # @return [String]
    # 
    def remote_viewer_connection_file
      @remote_viewer_connection_file
    end
    
    # 
    # Sets the value of the `remote_viewer_connection_file` attribute.
    # 
    # @param value [String]
    # 
    def remote_viewer_connection_file=(value)
      @remote_viewer_connection_file = value
    end
    
    # 
    # Returns the value of the `removed_bonds` attribute.
    # 
    # @return [Array<HostNic>]
    # 
    def removed_bonds
      @removed_bonds
    end
    
    # 
    # Sets the value of the `removed_bonds` attribute.
    # 
    # @param list [Array<HostNic>]
    # 
    def removed_bonds=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = HostNic.new(value)
          end
        end
      end
      @removed_bonds = list
    end
    
    # 
    # Returns the value of the `removed_labels` attribute.
    # 
    # @return [Array<NetworkLabel>]
    # 
    def removed_labels
      @removed_labels
    end
    
    # 
    # Sets the value of the `removed_labels` attribute.
    # 
    # @param list [Array<NetworkLabel>]
    # 
    def removed_labels=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NetworkLabel.new(value)
          end
        end
      end
      @removed_labels = list
    end
    
    # 
    # Returns the value of the `removed_network_attachments` attribute.
    # 
    # @return [Array<NetworkAttachment>]
    # 
    def removed_network_attachments
      @removed_network_attachments
    end
    
    # 
    # Sets the value of the `removed_network_attachments` attribute.
    # 
    # @param list [Array<NetworkAttachment>]
    # 
    def removed_network_attachments=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NetworkAttachment.new(value)
          end
        end
      end
      @removed_network_attachments = list
    end
    
    # 
    # Returns the value of the `resolution_type` attribute.
    # 
    # @return [String]
    # 
    def resolution_type
      @resolution_type
    end
    
    # 
    # Sets the value of the `resolution_type` attribute.
    # 
    # @param value [String]
    # 
    def resolution_type=(value)
      @resolution_type = value
    end
    
    # 
    # Returns the value of the `restore_memory` attribute.
    # 
    # @return [Boolean]
    # 
    def restore_memory
      @restore_memory
    end
    
    # 
    # Sets the value of the `restore_memory` attribute.
    # 
    # @param value [Boolean]
    # 
    def restore_memory=(value)
      @restore_memory = value
    end
    
    # 
    # Returns the value of the `root_password` attribute.
    # 
    # @return [String]
    # 
    def root_password
      @root_password
    end
    
    # 
    # Sets the value of the `root_password` attribute.
    # 
    # @param value [String]
    # 
    def root_password=(value)
      @root_password = value
    end
    
    # 
    # Returns the value of the `seal` attribute.
    # 
    # @return [Boolean]
    # 
    def seal
      @seal
    end
    
    # 
    # Sets the value of the `seal` attribute.
    # 
    # @param value [Boolean]
    # 
    def seal=(value)
      @seal = value
    end
    
    # 
    # Returns the value of the `snapshot` attribute.
    # 
    # @return [Snapshot]
    # 
    def snapshot
      @snapshot
    end
    
    # 
    # Sets the value of the `snapshot` attribute.
    # 
    # @param value [Snapshot, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Snapshot} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def snapshot=(value)
      if value.is_a?(Hash)
        value = Snapshot.new(value)
      end
      @snapshot = value
    end
    
    # 
    # Returns the value of the `source_host` attribute.
    # 
    # @return [Host]
    # 
    def source_host
      @source_host
    end
    
    # 
    # Sets the value of the `source_host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def source_host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @source_host = value
    end
    
    # 
    # Returns the value of the `ssh` attribute.
    # 
    # @return [Ssh]
    # 
    def ssh
      @ssh
    end
    
    # 
    # Sets the value of the `ssh` attribute.
    # 
    # @param value [Ssh, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Ssh} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def ssh=(value)
      if value.is_a?(Hash)
        value = Ssh.new(value)
      end
      @ssh = value
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [String]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [String]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `stop_gluster_service` attribute.
    # 
    # @return [Boolean]
    # 
    def stop_gluster_service
      @stop_gluster_service
    end
    
    # 
    # Sets the value of the `stop_gluster_service` attribute.
    # 
    # @param value [Boolean]
    # 
    def stop_gluster_service=(value)
      @stop_gluster_service = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `storage_domains` attribute.
    # 
    # @return [Array<StorageDomain>]
    # 
    def storage_domains
      @storage_domains
    end
    
    # 
    # Sets the value of the `storage_domains` attribute.
    # 
    # @param list [Array<StorageDomain>]
    # 
    def storage_domains=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = StorageDomain.new(value)
          end
        end
      end
      @storage_domains = list
    end
    
    # 
    # Returns the value of the `succeeded` attribute.
    # 
    # @return [Boolean]
    # 
    def succeeded
      @succeeded
    end
    
    # 
    # Sets the value of the `succeeded` attribute.
    # 
    # @param value [Boolean]
    # 
    def succeeded=(value)
      @succeeded = value
    end
    
    # 
    # Returns the value of the `synchronized_network_attachments` attribute.
    # 
    # @return [Array<NetworkAttachment>]
    # 
    def synchronized_network_attachments
      @synchronized_network_attachments
    end
    
    # 
    # Sets the value of the `synchronized_network_attachments` attribute.
    # 
    # @param list [Array<NetworkAttachment>]
    # 
    def synchronized_network_attachments=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NetworkAttachment.new(value)
          end
        end
      end
      @synchronized_network_attachments = list
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `ticket` attribute.
    # 
    # @return [Ticket]
    # 
    def ticket
      @ticket
    end
    
    # 
    # Sets the value of the `ticket` attribute.
    # 
    # @param value [Ticket, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Ticket} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def ticket=(value)
      if value.is_a?(Hash)
        value = Ticket.new(value)
      end
      @ticket = value
    end
    
    # 
    # Returns the value of the `timeout` attribute.
    # 
    # @return [Integer]
    # 
    def timeout
      @timeout
    end
    
    # 
    # Sets the value of the `timeout` attribute.
    # 
    # @param value [Integer]
    # 
    def timeout=(value)
      @timeout = value
    end
    
    # 
    # Returns the value of the `undeploy_hosted_engine` attribute.
    # 
    # @return [Boolean]
    # 
    def undeploy_hosted_engine
      @undeploy_hosted_engine
    end
    
    # 
    # Sets the value of the `undeploy_hosted_engine` attribute.
    # 
    # @param value [Boolean]
    # 
    def undeploy_hosted_engine=(value)
      @undeploy_hosted_engine = value
    end
    
    # 
    # Returns the value of the `upgrade_action` attribute.
    # 
    # @return [ClusterUpgradeAction]
    # 
    def upgrade_action
      @upgrade_action
    end
    
    # 
    # Sets the value of the `upgrade_action` attribute.
    # 
    # @param value [ClusterUpgradeAction]
    # 
    def upgrade_action=(value)
      @upgrade_action = value
    end
    
    # 
    # Returns the value of the `upgrade_percent_complete` attribute.
    # 
    # @return [Integer]
    # 
    def upgrade_percent_complete
      @upgrade_percent_complete
    end
    
    # 
    # Sets the value of the `upgrade_percent_complete` attribute.
    # 
    # @param value [Integer]
    # 
    def upgrade_percent_complete=(value)
      @upgrade_percent_complete = value
    end
    
    # 
    # Returns the value of the `use_cloud_init` attribute.
    # 
    # @return [Boolean]
    # 
    def use_cloud_init
      @use_cloud_init
    end
    
    # 
    # Sets the value of the `use_cloud_init` attribute.
    # 
    # @param value [Boolean]
    # 
    def use_cloud_init=(value)
      @use_cloud_init = value
    end
    
    # 
    # Returns the value of the `use_ignition` attribute.
    # 
    # @return [Boolean]
    # 
    def use_ignition
      @use_ignition
    end
    
    # 
    # Sets the value of the `use_ignition` attribute.
    # 
    # @param value [Boolean]
    # 
    def use_ignition=(value)
      @use_ignition = value
    end
    
    # 
    # Returns the value of the `use_initialization` attribute.
    # 
    # @return [Boolean]
    # 
    def use_initialization
      @use_initialization
    end
    
    # 
    # Sets the value of the `use_initialization` attribute.
    # 
    # @param value [Boolean]
    # 
    def use_initialization=(value)
      @use_initialization = value
    end
    
    # 
    # Returns the value of the `use_sysprep` attribute.
    # 
    # @return [Boolean]
    # 
    def use_sysprep
      @use_sysprep
    end
    
    # 
    # Sets the value of the `use_sysprep` attribute.
    # 
    # @param value [Boolean]
    # 
    def use_sysprep=(value)
      @use_sysprep = value
    end
    
    # 
    # Returns the value of the `virtual_functions_configuration` attribute.
    # 
    # @return [HostNicVirtualFunctionsConfiguration]
    # 
    def virtual_functions_configuration
      @virtual_functions_configuration
    end
    
    # 
    # Sets the value of the `virtual_functions_configuration` attribute.
    # 
    # @param value [HostNicVirtualFunctionsConfiguration, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostNicVirtualFunctionsConfiguration} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def virtual_functions_configuration=(value)
      if value.is_a?(Hash)
        value = HostNicVirtualFunctionsConfiguration.new(value)
      end
      @virtual_functions_configuration = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `vnic_profile_mappings` attribute.
    # 
    # @return [Array<VnicProfileMapping>]
    # 
    def vnic_profile_mappings
      @vnic_profile_mappings
    end
    
    # 
    # Sets the value of the `vnic_profile_mappings` attribute.
    # 
    # @param list [Array<VnicProfileMapping>]
    # 
    def vnic_profile_mappings=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = VnicProfileMapping.new(value)
          end
        end
      end
      @vnic_profile_mappings = list
    end
    
    # 
    # Returns the value of the `volatile` attribute.
    # 
    # @return [Boolean]
    # 
    def volatile
      @volatile
    end
    
    # 
    # Sets the value of the `volatile` attribute.
    # 
    # @param value [Boolean]
    # 
    def volatile=(value)
      @volatile = value
    end
    
    # 
    # Creates a new instance of the {Action} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :activate The value of attribute `activate`.
    # 
    # @option opts [Boolean] :allow_partial_import The value of attribute `allow_partial_import`.
    # 
    # @option opts [Boolean] :async The value of attribute `async`.
    # 
    # @option opts [Boolean] :attach_wgt The value of attribute `attach_wgt`.
    # 
    # @option opts [DiskAttachment, Hash] :attachment The value of attribute `attachment`.
    # 
    # @option opts [AuthorizedKey, Hash] :authorized_key The value of attribute `authorized_key`.
    # 
    # @option opts [AutoPinningPolicy] :auto_pinning_policy The value of attribute `auto_pinning_policy`.
    # 
    # @option opts [Array<GlusterBrick>, Array<Hash>] :bricks The values of attribute `bricks`.
    # 
    # @option opts [Array<Certificate>, Array<Hash>] :certificates The values of attribute `certificates`.
    # 
    # @option opts [Boolean] :check_connectivity The value of attribute `check_connectivity`.
    # 
    # @option opts [Boolean] :clone The value of attribute `clone`.
    # 
    # @option opts [Boolean] :clone_permissions The value of attribute `clone_permissions`.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [Boolean] :collapse_snapshots The value of attribute `collapse_snapshots`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Boolean] :commit_on_success The value of attribute `commit_on_success`.
    # 
    # @option opts [StorageConnection, Hash] :connection The value of attribute `connection`.
    # 
    # @option opts [Integer] :connectivity_timeout The value of attribute `connectivity_timeout`.
    # 
    # @option opts [String] :correlation_id The value of attribute `correlation_id`.
    # 
    # @option opts [DataCenter, Hash] :data_center The value of attribute `data_center`.
    # 
    # @option opts [Boolean] :deploy_hosted_engine The value of attribute `deploy_hosted_engine`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [GlusterVolumeProfileDetails, Hash] :details The value of attribute `details`.
    # 
    # @option opts [String] :directory The value of attribute `directory`.
    # 
    # @option opts [Boolean] :discard_snapshots The value of attribute `discard_snapshots`.
    # 
    # @option opts [Array<IscsiDetails>, Array<Hash>] :discovered_targets The values of attribute `discovered_targets`.
    # 
    # @option opts [Disk, Hash] :disk The value of attribute `disk`.
    # 
    # @option opts [DiskProfile, Hash] :disk_profile The value of attribute `disk_profile`.
    # 
    # @option opts [Array<Disk>, Array<Hash>] :disks The values of attribute `disks`.
    # 
    # @option opts [Boolean] :exclusive The value of attribute `exclusive`.
    # 
    # @option opts [Fault, Hash] :fault The value of attribute `fault`.
    # 
    # @option opts [String] :fence_type The value of attribute `fence_type`.
    # 
    # @option opts [String] :filename The value of attribute `filename`.
    # 
    # @option opts [Boolean] :filter The value of attribute `filter`.
    # 
    # @option opts [Boolean] :fix_layout The value of attribute `fix_layout`.
    # 
    # @option opts [String] :follow The value of attribute `follow`.
    # 
    # @option opts [Boolean] :force The value of attribute `force`.
    # 
    # @option opts [GracePeriod, Hash] :grace_period The value of attribute `grace_period`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :image The value of attribute `image`.
    # 
    # @option opts [ImageTransfer, Hash] :image_transfer The value of attribute `image_transfer`.
    # 
    # @option opts [Boolean] :import_as_template The value of attribute `import_as_template`.
    # 
    # @option opts [Boolean] :is_attached The value of attribute `is_attached`.
    # 
    # @option opts [IscsiDetails, Hash] :iscsi The value of attribute `iscsi`.
    # 
    # @option opts [Array<String>, Array<Hash>] :iscsi_targets The values of attribute `iscsi_targets`.
    # 
    # @option opts [Job, Hash] :job The value of attribute `job`.
    # 
    # @option opts [StorageDomainLease, Hash] :lease The value of attribute `lease`.
    # 
    # @option opts [Array<LogicalUnit>, Array<Hash>] :logical_units The values of attribute `logical_units`.
    # 
    # @option opts [Boolean] :maintenance_after_restart The value of attribute `maintenance_after_restart`.
    # 
    # @option opts [Boolean] :maintenance_enabled The value of attribute `maintenance_enabled`.
    # 
    # @option opts [Boolean] :migrate_vms_in_affinity_closure The value of attribute `migrate_vms_in_affinity_closure`.
    # 
    # @option opts [Array<HostNic>, Array<Hash>] :modified_bonds The values of attribute `modified_bonds`.
    # 
    # @option opts [Array<NetworkLabel>, Array<Hash>] :modified_labels The values of attribute `modified_labels`.
    # 
    # @option opts [Array<NetworkAttachment>, Array<Hash>] :modified_network_attachments The values of attribute `modified_network_attachments`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Boolean] :optimize_cpu_settings The value of attribute `optimize_cpu_settings`.
    # 
    # @option opts [Option, Hash] :option The value of attribute `option`.
    # 
    # @option opts [Boolean] :pause The value of attribute `pause`.
    # 
    # @option opts [Permission, Hash] :permission The value of attribute `permission`.
    # 
    # @option opts [PowerManagement, Hash] :power_management The value of attribute `power_management`.
    # 
    # @option opts [ProxyTicket, Hash] :proxy_ticket The value of attribute `proxy_ticket`.
    # 
    # @option opts [Quota, Hash] :quota The value of attribute `quota`.
    # 
    # @option opts [String] :reason The value of attribute `reason`.
    # 
    # @option opts [Boolean] :reassign_bad_macs The value of attribute `reassign_bad_macs`.
    # 
    # @option opts [Boolean] :reboot The value of attribute `reboot`.
    # 
    # @option opts [RegistrationConfiguration, Hash] :registration_configuration The value of attribute `registration_configuration`.
    # 
    # @option opts [String] :remote_viewer_connection_file The value of attribute `remote_viewer_connection_file`.
    # 
    # @option opts [Array<HostNic>, Array<Hash>] :removed_bonds The values of attribute `removed_bonds`.
    # 
    # @option opts [Array<NetworkLabel>, Array<Hash>] :removed_labels The values of attribute `removed_labels`.
    # 
    # @option opts [Array<NetworkAttachment>, Array<Hash>] :removed_network_attachments The values of attribute `removed_network_attachments`.
    # 
    # @option opts [String] :resolution_type The value of attribute `resolution_type`.
    # 
    # @option opts [Boolean] :restore_memory The value of attribute `restore_memory`.
    # 
    # @option opts [String] :root_password The value of attribute `root_password`.
    # 
    # @option opts [Boolean] :seal The value of attribute `seal`.
    # 
    # @option opts [Snapshot, Hash] :snapshot The value of attribute `snapshot`.
    # 
    # @option opts [Host, Hash] :source_host The value of attribute `source_host`.
    # 
    # @option opts [Ssh, Hash] :ssh The value of attribute `ssh`.
    # 
    # @option opts [String] :status The value of attribute `status`.
    # 
    # @option opts [Boolean] :stop_gluster_service The value of attribute `stop_gluster_service`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [Array<StorageDomain>, Array<Hash>] :storage_domains The values of attribute `storage_domains`.
    # 
    # @option opts [Boolean] :succeeded The value of attribute `succeeded`.
    # 
    # @option opts [Array<NetworkAttachment>, Array<Hash>] :synchronized_network_attachments The values of attribute `synchronized_network_attachments`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [Ticket, Hash] :ticket The value of attribute `ticket`.
    # 
    # @option opts [Integer] :timeout The value of attribute `timeout`.
    # 
    # @option opts [Boolean] :undeploy_hosted_engine The value of attribute `undeploy_hosted_engine`.
    # 
    # @option opts [ClusterUpgradeAction] :upgrade_action The value of attribute `upgrade_action`.
    # 
    # @option opts [Integer] :upgrade_percent_complete The value of attribute `upgrade_percent_complete`.
    # 
    # @option opts [Boolean] :use_cloud_init The value of attribute `use_cloud_init`.
    # 
    # @option opts [Boolean] :use_ignition The value of attribute `use_ignition`.
    # 
    # @option opts [Boolean] :use_initialization The value of attribute `use_initialization`.
    # 
    # @option opts [Boolean] :use_sysprep The value of attribute `use_sysprep`.
    # 
    # @option opts [HostNicVirtualFunctionsConfiguration, Hash] :virtual_functions_configuration The value of attribute `virtual_functions_configuration`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [Array<VnicProfileMapping>, Array<Hash>] :vnic_profile_mappings The values of attribute `vnic_profile_mappings`.
    # 
    # @option opts [Boolean] :volatile The value of attribute `volatile`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.activate = opts[:activate]
      self.allow_partial_import = opts[:allow_partial_import]
      self.async = opts[:async]
      self.attach_wgt = opts[:attach_wgt]
      self.attachment = opts[:attachment]
      self.authorized_key = opts[:authorized_key]
      self.auto_pinning_policy = opts[:auto_pinning_policy]
      self.bricks = opts[:bricks]
      self.certificates = opts[:certificates]
      self.check_connectivity = opts[:check_connectivity]
      self.clone = opts[:clone]
      self.clone_permissions = opts[:clone_permissions]
      self.cluster = opts[:cluster]
      self.collapse_snapshots = opts[:collapse_snapshots]
      self.commit_on_success = opts[:commit_on_success]
      self.connection = opts[:connection]
      self.connectivity_timeout = opts[:connectivity_timeout]
      self.correlation_id = opts[:correlation_id]
      self.data_center = opts[:data_center]
      self.deploy_hosted_engine = opts[:deploy_hosted_engine]
      self.details = opts[:details]
      self.directory = opts[:directory]
      self.discard_snapshots = opts[:discard_snapshots]
      self.discovered_targets = opts[:discovered_targets]
      self.disk = opts[:disk]
      self.disk_profile = opts[:disk_profile]
      self.disks = opts[:disks]
      self.exclusive = opts[:exclusive]
      self.fault = opts[:fault]
      self.fence_type = opts[:fence_type]
      self.filename = opts[:filename]
      self.filter = opts[:filter]
      self.fix_layout = opts[:fix_layout]
      self.follow = opts[:follow]
      self.force = opts[:force]
      self.grace_period = opts[:grace_period]
      self.host = opts[:host]
      self.image = opts[:image]
      self.image_transfer = opts[:image_transfer]
      self.import_as_template = opts[:import_as_template]
      self.is_attached = opts[:is_attached]
      self.iscsi = opts[:iscsi]
      self.iscsi_targets = opts[:iscsi_targets]
      self.job = opts[:job]
      self.lease = opts[:lease]
      self.logical_units = opts[:logical_units]
      self.maintenance_after_restart = opts[:maintenance_after_restart]
      self.maintenance_enabled = opts[:maintenance_enabled]
      self.migrate_vms_in_affinity_closure = opts[:migrate_vms_in_affinity_closure]
      self.modified_bonds = opts[:modified_bonds]
      self.modified_labels = opts[:modified_labels]
      self.modified_network_attachments = opts[:modified_network_attachments]
      self.optimize_cpu_settings = opts[:optimize_cpu_settings]
      self.option = opts[:option]
      self.pause = opts[:pause]
      self.permission = opts[:permission]
      self.power_management = opts[:power_management]
      self.proxy_ticket = opts[:proxy_ticket]
      self.quota = opts[:quota]
      self.reason = opts[:reason]
      self.reassign_bad_macs = opts[:reassign_bad_macs]
      self.reboot = opts[:reboot]
      self.registration_configuration = opts[:registration_configuration]
      self.remote_viewer_connection_file = opts[:remote_viewer_connection_file]
      self.removed_bonds = opts[:removed_bonds]
      self.removed_labels = opts[:removed_labels]
      self.removed_network_attachments = opts[:removed_network_attachments]
      self.resolution_type = opts[:resolution_type]
      self.restore_memory = opts[:restore_memory]
      self.root_password = opts[:root_password]
      self.seal = opts[:seal]
      self.snapshot = opts[:snapshot]
      self.source_host = opts[:source_host]
      self.ssh = opts[:ssh]
      self.status = opts[:status]
      self.stop_gluster_service = opts[:stop_gluster_service]
      self.storage_domain = opts[:storage_domain]
      self.storage_domains = opts[:storage_domains]
      self.succeeded = opts[:succeeded]
      self.synchronized_network_attachments = opts[:synchronized_network_attachments]
      self.template = opts[:template]
      self.ticket = opts[:ticket]
      self.timeout = opts[:timeout]
      self.undeploy_hosted_engine = opts[:undeploy_hosted_engine]
      self.upgrade_action = opts[:upgrade_action]
      self.upgrade_percent_complete = opts[:upgrade_percent_complete]
      self.use_cloud_init = opts[:use_cloud_init]
      self.use_ignition = opts[:use_ignition]
      self.use_initialization = opts[:use_initialization]
      self.use_sysprep = opts[:use_sysprep]
      self.virtual_functions_configuration = opts[:virtual_functions_configuration]
      self.vm = opts[:vm]
      self.vnic_profile_mappings = opts[:vnic_profile_mappings]
      self.volatile = opts[:volatile]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @activate == other.activate &&
      @allow_partial_import == other.allow_partial_import &&
      @async == other.async &&
      @attach_wgt == other.attach_wgt &&
      @attachment == other.attachment &&
      @authorized_key == other.authorized_key &&
      @auto_pinning_policy == other.auto_pinning_policy &&
      @bricks == other.bricks &&
      @certificates == other.certificates &&
      @check_connectivity == other.check_connectivity &&
      @clone == other.clone &&
      @clone_permissions == other.clone_permissions &&
      @cluster == other.cluster &&
      @collapse_snapshots == other.collapse_snapshots &&
      @commit_on_success == other.commit_on_success &&
      @connection == other.connection &&
      @connectivity_timeout == other.connectivity_timeout &&
      @correlation_id == other.correlation_id &&
      @data_center == other.data_center &&
      @deploy_hosted_engine == other.deploy_hosted_engine &&
      @details == other.details &&
      @directory == other.directory &&
      @discard_snapshots == other.discard_snapshots &&
      @discovered_targets == other.discovered_targets &&
      @disk == other.disk &&
      @disk_profile == other.disk_profile &&
      @disks == other.disks &&
      @exclusive == other.exclusive &&
      @fault == other.fault &&
      @fence_type == other.fence_type &&
      @filename == other.filename &&
      @filter == other.filter &&
      @fix_layout == other.fix_layout &&
      @follow == other.follow &&
      @force == other.force &&
      @grace_period == other.grace_period &&
      @host == other.host &&
      @image == other.image &&
      @image_transfer == other.image_transfer &&
      @import_as_template == other.import_as_template &&
      @is_attached == other.is_attached &&
      @iscsi == other.iscsi &&
      @iscsi_targets == other.iscsi_targets &&
      @job == other.job &&
      @lease == other.lease &&
      @logical_units == other.logical_units &&
      @maintenance_after_restart == other.maintenance_after_restart &&
      @maintenance_enabled == other.maintenance_enabled &&
      @migrate_vms_in_affinity_closure == other.migrate_vms_in_affinity_closure &&
      @modified_bonds == other.modified_bonds &&
      @modified_labels == other.modified_labels &&
      @modified_network_attachments == other.modified_network_attachments &&
      @optimize_cpu_settings == other.optimize_cpu_settings &&
      @option == other.option &&
      @pause == other.pause &&
      @permission == other.permission &&
      @power_management == other.power_management &&
      @proxy_ticket == other.proxy_ticket &&
      @quota == other.quota &&
      @reason == other.reason &&
      @reassign_bad_macs == other.reassign_bad_macs &&
      @reboot == other.reboot &&
      @registration_configuration == other.registration_configuration &&
      @remote_viewer_connection_file == other.remote_viewer_connection_file &&
      @removed_bonds == other.removed_bonds &&
      @removed_labels == other.removed_labels &&
      @removed_network_attachments == other.removed_network_attachments &&
      @resolution_type == other.resolution_type &&
      @restore_memory == other.restore_memory &&
      @root_password == other.root_password &&
      @seal == other.seal &&
      @snapshot == other.snapshot &&
      @source_host == other.source_host &&
      @ssh == other.ssh &&
      @status == other.status &&
      @stop_gluster_service == other.stop_gluster_service &&
      @storage_domain == other.storage_domain &&
      @storage_domains == other.storage_domains &&
      @succeeded == other.succeeded &&
      @synchronized_network_attachments == other.synchronized_network_attachments &&
      @template == other.template &&
      @ticket == other.ticket &&
      @timeout == other.timeout &&
      @undeploy_hosted_engine == other.undeploy_hosted_engine &&
      @upgrade_action == other.upgrade_action &&
      @upgrade_percent_complete == other.upgrade_percent_complete &&
      @use_cloud_init == other.use_cloud_init &&
      @use_ignition == other.use_ignition &&
      @use_initialization == other.use_initialization &&
      @use_sysprep == other.use_sysprep &&
      @virtual_functions_configuration == other.virtual_functions_configuration &&
      @vm == other.vm &&
      @vnic_profile_mappings == other.vnic_profile_mappings &&
      @volatile == other.volatile
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @activate.hash +
      @allow_partial_import.hash +
      @async.hash +
      @attach_wgt.hash +
      @attachment.hash +
      @authorized_key.hash +
      @auto_pinning_policy.hash +
      @bricks.hash +
      @certificates.hash +
      @check_connectivity.hash +
      @clone.hash +
      @clone_permissions.hash +
      @cluster.hash +
      @collapse_snapshots.hash +
      @commit_on_success.hash +
      @connection.hash +
      @connectivity_timeout.hash +
      @correlation_id.hash +
      @data_center.hash +
      @deploy_hosted_engine.hash +
      @details.hash +
      @directory.hash +
      @discard_snapshots.hash +
      @discovered_targets.hash +
      @disk.hash +
      @disk_profile.hash +
      @disks.hash +
      @exclusive.hash +
      @fault.hash +
      @fence_type.hash +
      @filename.hash +
      @filter.hash +
      @fix_layout.hash +
      @follow.hash +
      @force.hash +
      @grace_period.hash +
      @host.hash +
      @image.hash +
      @image_transfer.hash +
      @import_as_template.hash +
      @is_attached.hash +
      @iscsi.hash +
      @iscsi_targets.hash +
      @job.hash +
      @lease.hash +
      @logical_units.hash +
      @maintenance_after_restart.hash +
      @maintenance_enabled.hash +
      @migrate_vms_in_affinity_closure.hash +
      @modified_bonds.hash +
      @modified_labels.hash +
      @modified_network_attachments.hash +
      @optimize_cpu_settings.hash +
      @option.hash +
      @pause.hash +
      @permission.hash +
      @power_management.hash +
      @proxy_ticket.hash +
      @quota.hash +
      @reason.hash +
      @reassign_bad_macs.hash +
      @reboot.hash +
      @registration_configuration.hash +
      @remote_viewer_connection_file.hash +
      @removed_bonds.hash +
      @removed_labels.hash +
      @removed_network_attachments.hash +
      @resolution_type.hash +
      @restore_memory.hash +
      @root_password.hash +
      @seal.hash +
      @snapshot.hash +
      @source_host.hash +
      @ssh.hash +
      @status.hash +
      @stop_gluster_service.hash +
      @storage_domain.hash +
      @storage_domains.hash +
      @succeeded.hash +
      @synchronized_network_attachments.hash +
      @template.hash +
      @ticket.hash +
      @timeout.hash +
      @undeploy_hosted_engine.hash +
      @upgrade_action.hash +
      @upgrade_percent_complete.hash +
      @use_cloud_init.hash +
      @use_ignition.hash +
      @use_initialization.hash +
      @use_sysprep.hash +
      @virtual_functions_configuration.hash +
      @vm.hash +
      @vnic_profile_mappings.hash +
      @volatile.hash
    end
    
  end
  
  class AffinityGroup < Identified
    
    # 
    # Returns the value of the `broken` attribute.
    # 
    # @return [Boolean]
    # 
    def broken
      @broken
    end
    
    # 
    # Sets the value of the `broken` attribute.
    # 
    # @param value [Boolean]
    # 
    def broken=(value)
      @broken = value
    end
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `enforcing` attribute.
    # 
    # @return [Boolean]
    # 
    def enforcing
      @enforcing
    end
    
    # 
    # Sets the value of the `enforcing` attribute.
    # 
    # @param value [Boolean]
    # 
    def enforcing=(value)
      @enforcing = value
    end
    
    # 
    # Returns the value of the `host_labels` attribute.
    # 
    # @return [Array<AffinityLabel>]
    # 
    def host_labels
      @host_labels
    end
    
    # 
    # Sets the value of the `host_labels` attribute.
    # 
    # @param list [Array<AffinityLabel>]
    # 
    def host_labels=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = AffinityLabel.new(value)
          end
        end
      end
      @host_labels = list
    end
    
    # 
    # Returns the value of the `hosts` attribute.
    # 
    # @return [Array<Host>]
    # 
    def hosts
      @hosts
    end
    
    # 
    # Sets the value of the `hosts` attribute.
    # 
    # @param list [Array<Host>]
    # 
    def hosts=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Host.new(value)
          end
        end
      end
      @hosts = list
    end
    
    # 
    # Returns the value of the `hosts_rule` attribute.
    # 
    # @return [AffinityRule]
    # 
    def hosts_rule
      @hosts_rule
    end
    
    # 
    # Sets the value of the `hosts_rule` attribute.
    # 
    # @param value [AffinityRule, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::AffinityRule} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def hosts_rule=(value)
      if value.is_a?(Hash)
        value = AffinityRule.new(value)
      end
      @hosts_rule = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `positive` attribute.
    # 
    # @return [Boolean]
    # 
    def positive
      @positive
    end
    
    # 
    # Sets the value of the `positive` attribute.
    # 
    # @param value [Boolean]
    # 
    def positive=(value)
      @positive = value
    end
    
    # 
    # Returns the value of the `priority` attribute.
    # 
    # @return [Float]
    # 
    def priority
      @priority
    end
    
    # 
    # Sets the value of the `priority` attribute.
    # 
    # @param value [Float]
    # 
    def priority=(value)
      @priority = value
    end
    
    # 
    # Returns the value of the `vm_labels` attribute.
    # 
    # @return [Array<AffinityLabel>]
    # 
    def vm_labels
      @vm_labels
    end
    
    # 
    # Sets the value of the `vm_labels` attribute.
    # 
    # @param list [Array<AffinityLabel>]
    # 
    def vm_labels=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = AffinityLabel.new(value)
          end
        end
      end
      @vm_labels = list
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Returns the value of the `vms_rule` attribute.
    # 
    # @return [AffinityRule]
    # 
    def vms_rule
      @vms_rule
    end
    
    # 
    # Sets the value of the `vms_rule` attribute.
    # 
    # @param value [AffinityRule, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::AffinityRule} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vms_rule=(value)
      if value.is_a?(Hash)
        value = AffinityRule.new(value)
      end
      @vms_rule = value
    end
    
    # 
    # Creates a new instance of the {AffinityGroup} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :broken The value of attribute `broken`.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Boolean] :enforcing The value of attribute `enforcing`.
    # 
    # @option opts [Array<AffinityLabel>, Array<Hash>] :host_labels The values of attribute `host_labels`.
    # 
    # @option opts [Array<Host>, Array<Hash>] :hosts The values of attribute `hosts`.
    # 
    # @option opts [AffinityRule, Hash] :hosts_rule The value of attribute `hosts_rule`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Boolean] :positive The value of attribute `positive`.
    # 
    # @option opts [Float] :priority The value of attribute `priority`.
    # 
    # @option opts [Array<AffinityLabel>, Array<Hash>] :vm_labels The values of attribute `vm_labels`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # @option opts [AffinityRule, Hash] :vms_rule The value of attribute `vms_rule`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.broken = opts[:broken]
      self.cluster = opts[:cluster]
      self.enforcing = opts[:enforcing]
      self.host_labels = opts[:host_labels]
      self.hosts = opts[:hosts]
      self.hosts_rule = opts[:hosts_rule]
      self.positive = opts[:positive]
      self.priority = opts[:priority]
      self.vm_labels = opts[:vm_labels]
      self.vms = opts[:vms]
      self.vms_rule = opts[:vms_rule]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @broken == other.broken &&
      @cluster == other.cluster &&
      @enforcing == other.enforcing &&
      @host_labels == other.host_labels &&
      @hosts == other.hosts &&
      @hosts_rule == other.hosts_rule &&
      @positive == other.positive &&
      @priority == other.priority &&
      @vm_labels == other.vm_labels &&
      @vms == other.vms &&
      @vms_rule == other.vms_rule
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @broken.hash +
      @cluster.hash +
      @enforcing.hash +
      @host_labels.hash +
      @hosts.hash +
      @hosts_rule.hash +
      @positive.hash +
      @priority.hash +
      @vm_labels.hash +
      @vms.hash +
      @vms_rule.hash
    end
    
  end
  
  class AffinityLabel < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `has_implicit_affinity_group` attribute.
    # 
    # @return [Boolean]
    # 
    def has_implicit_affinity_group
      @has_implicit_affinity_group
    end
    
    # 
    # Sets the value of the `has_implicit_affinity_group` attribute.
    # 
    # @param value [Boolean]
    # 
    def has_implicit_affinity_group=(value)
      @has_implicit_affinity_group = value
    end
    
    # 
    # Returns the value of the `hosts` attribute.
    # 
    # @return [Array<Host>]
    # 
    def hosts
      @hosts
    end
    
    # 
    # Sets the value of the `hosts` attribute.
    # 
    # @param list [Array<Host>]
    # 
    def hosts=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Host.new(value)
          end
        end
      end
      @hosts = list
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `read_only` attribute.
    # 
    # @return [Boolean]
    # 
    def read_only
      @read_only
    end
    
    # 
    # Sets the value of the `read_only` attribute.
    # 
    # @param value [Boolean]
    # 
    def read_only=(value)
      @read_only = value
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Creates a new instance of the {AffinityLabel} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Boolean] :has_implicit_affinity_group The value of attribute `has_implicit_affinity_group`.
    # 
    # @option opts [Array<Host>, Array<Hash>] :hosts The values of attribute `hosts`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Boolean] :read_only The value of attribute `read_only`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.has_implicit_affinity_group = opts[:has_implicit_affinity_group]
      self.hosts = opts[:hosts]
      self.read_only = opts[:read_only]
      self.vms = opts[:vms]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @has_implicit_affinity_group == other.has_implicit_affinity_group &&
      @hosts == other.hosts &&
      @read_only == other.read_only &&
      @vms == other.vms
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @has_implicit_affinity_group.hash +
      @hosts.hash +
      @read_only.hash +
      @vms.hash
    end
    
  end
  
  class Agent < Identified
    
    # 
    # Returns the value of the `address` attribute.
    # 
    # @return [String]
    # 
    def address
      @address
    end
    
    # 
    # Sets the value of the `address` attribute.
    # 
    # @param value [String]
    # 
    def address=(value)
      @address = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `concurrent` attribute.
    # 
    # @return [Boolean]
    # 
    def concurrent
      @concurrent
    end
    
    # 
    # Sets the value of the `concurrent` attribute.
    # 
    # @param value [Boolean]
    # 
    def concurrent=(value)
      @concurrent = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `encrypt_options` attribute.
    # 
    # @return [Boolean]
    # 
    def encrypt_options
      @encrypt_options
    end
    
    # 
    # Sets the value of the `encrypt_options` attribute.
    # 
    # @param value [Boolean]
    # 
    def encrypt_options=(value)
      @encrypt_options = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `options` attribute.
    # 
    # @return [Array<Option>]
    # 
    def options
      @options
    end
    
    # 
    # Sets the value of the `options` attribute.
    # 
    # @param list [Array<Option>]
    # 
    def options=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Option.new(value)
          end
        end
      end
      @options = list
    end
    
    # 
    # Returns the value of the `order` attribute.
    # 
    # @return [Integer]
    # 
    def order
      @order
    end
    
    # 
    # Sets the value of the `order` attribute.
    # 
    # @param value [Integer]
    # 
    def order=(value)
      @order = value
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `port` attribute.
    # 
    # @return [Integer]
    # 
    def port
      @port
    end
    
    # 
    # Sets the value of the `port` attribute.
    # 
    # @param value [Integer]
    # 
    def port=(value)
      @port = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [String]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [String]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Creates a new instance of the {Agent} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :address The value of attribute `address`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Boolean] :concurrent The value of attribute `concurrent`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Boolean] :encrypt_options The value of attribute `encrypt_options`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Option>, Array<Hash>] :options The values of attribute `options`.
    # 
    # @option opts [Integer] :order The value of attribute `order`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [Integer] :port The value of attribute `port`.
    # 
    # @option opts [String] :type The value of attribute `type`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.address = opts[:address]
      self.concurrent = opts[:concurrent]
      self.encrypt_options = opts[:encrypt_options]
      self.host = opts[:host]
      self.options = opts[:options]
      self.order = opts[:order]
      self.password = opts[:password]
      self.port = opts[:port]
      self.type = opts[:type]
      self.username = opts[:username]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @address == other.address &&
      @concurrent == other.concurrent &&
      @encrypt_options == other.encrypt_options &&
      @host == other.host &&
      @options == other.options &&
      @order == other.order &&
      @password == other.password &&
      @port == other.port &&
      @type == other.type &&
      @username == other.username
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @address.hash +
      @concurrent.hash +
      @encrypt_options.hash +
      @host.hash +
      @options.hash +
      @order.hash +
      @password.hash +
      @port.hash +
      @type.hash +
      @username.hash
    end
    
  end
  
  class Application < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {Application} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @vm.hash
    end
    
  end
  
  class AuthorizedKey < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `key` attribute.
    # 
    # @return [String]
    # 
    def key
      @key
    end
    
    # 
    # Sets the value of the `key` attribute.
    # 
    # @param value [String]
    # 
    def key=(value)
      @key = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `user` attribute.
    # 
    # @return [User]
    # 
    def user
      @user
    end
    
    # 
    # Sets the value of the `user` attribute.
    # 
    # @param value [User, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::User} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def user=(value)
      if value.is_a?(Hash)
        value = User.new(value)
      end
      @user = value
    end
    
    # 
    # Creates a new instance of the {AuthorizedKey} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :key The value of attribute `key`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [User, Hash] :user The value of attribute `user`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.key = opts[:key]
      self.user = opts[:user]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @key == other.key &&
      @user == other.user
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @key.hash +
      @user.hash
    end
    
  end
  
  class Backup < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `creation_date` attribute.
    # 
    # @return [DateTime]
    # 
    def creation_date
      @creation_date
    end
    
    # 
    # Sets the value of the `creation_date` attribute.
    # 
    # @param value [DateTime]
    # 
    def creation_date=(value)
      @creation_date = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `disks` attribute.
    # 
    # @return [Array<Disk>]
    # 
    def disks
      @disks
    end
    
    # 
    # Sets the value of the `disks` attribute.
    # 
    # @param list [Array<Disk>]
    # 
    def disks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Disk.new(value)
          end
        end
      end
      @disks = list
    end
    
    # 
    # Returns the value of the `from_checkpoint_id` attribute.
    # 
    # @return [String]
    # 
    def from_checkpoint_id
      @from_checkpoint_id
    end
    
    # 
    # Sets the value of the `from_checkpoint_id` attribute.
    # 
    # @param value [String]
    # 
    def from_checkpoint_id=(value)
      @from_checkpoint_id = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `modification_date` attribute.
    # 
    # @return [DateTime]
    # 
    def modification_date
      @modification_date
    end
    
    # 
    # Sets the value of the `modification_date` attribute.
    # 
    # @param value [DateTime]
    # 
    def modification_date=(value)
      @modification_date = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `phase` attribute.
    # 
    # @return [BackupPhase]
    # 
    def phase
      @phase
    end
    
    # 
    # Sets the value of the `phase` attribute.
    # 
    # @param value [BackupPhase]
    # 
    def phase=(value)
      @phase = value
    end
    
    # 
    # Returns the value of the `snapshot` attribute.
    # 
    # @return [Snapshot]
    # 
    def snapshot
      @snapshot
    end
    
    # 
    # Sets the value of the `snapshot` attribute.
    # 
    # @param value [Snapshot, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Snapshot} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def snapshot=(value)
      if value.is_a?(Hash)
        value = Snapshot.new(value)
      end
      @snapshot = value
    end
    
    # 
    # Returns the value of the `to_checkpoint_id` attribute.
    # 
    # @return [String]
    # 
    def to_checkpoint_id
      @to_checkpoint_id
    end
    
    # 
    # Sets the value of the `to_checkpoint_id` attribute.
    # 
    # @param value [String]
    # 
    def to_checkpoint_id=(value)
      @to_checkpoint_id = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {Backup} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [DateTime] :creation_date The value of attribute `creation_date`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Array<Disk>, Array<Hash>] :disks The values of attribute `disks`.
    # 
    # @option opts [String] :from_checkpoint_id The value of attribute `from_checkpoint_id`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [DateTime] :modification_date The value of attribute `modification_date`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [BackupPhase] :phase The value of attribute `phase`.
    # 
    # @option opts [Snapshot, Hash] :snapshot The value of attribute `snapshot`.
    # 
    # @option opts [String] :to_checkpoint_id The value of attribute `to_checkpoint_id`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.creation_date = opts[:creation_date]
      self.disks = opts[:disks]
      self.from_checkpoint_id = opts[:from_checkpoint_id]
      self.host = opts[:host]
      self.modification_date = opts[:modification_date]
      self.phase = opts[:phase]
      self.snapshot = opts[:snapshot]
      self.to_checkpoint_id = opts[:to_checkpoint_id]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @creation_date == other.creation_date &&
      @disks == other.disks &&
      @from_checkpoint_id == other.from_checkpoint_id &&
      @host == other.host &&
      @modification_date == other.modification_date &&
      @phase == other.phase &&
      @snapshot == other.snapshot &&
      @to_checkpoint_id == other.to_checkpoint_id &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @creation_date.hash +
      @disks.hash +
      @from_checkpoint_id.hash +
      @host.hash +
      @modification_date.hash +
      @phase.hash +
      @snapshot.hash +
      @to_checkpoint_id.hash +
      @vm.hash
    end
    
  end
  
  class Balance < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `scheduling_policy` attribute.
    # 
    # @return [SchedulingPolicy]
    # 
    def scheduling_policy
      @scheduling_policy
    end
    
    # 
    # Sets the value of the `scheduling_policy` attribute.
    # 
    # @param value [SchedulingPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SchedulingPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def scheduling_policy=(value)
      if value.is_a?(Hash)
        value = SchedulingPolicy.new(value)
      end
      @scheduling_policy = value
    end
    
    # 
    # Returns the value of the `scheduling_policy_unit` attribute.
    # 
    # @return [SchedulingPolicyUnit]
    # 
    def scheduling_policy_unit
      @scheduling_policy_unit
    end
    
    # 
    # Sets the value of the `scheduling_policy_unit` attribute.
    # 
    # @param value [SchedulingPolicyUnit, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SchedulingPolicyUnit} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def scheduling_policy_unit=(value)
      if value.is_a?(Hash)
        value = SchedulingPolicyUnit.new(value)
      end
      @scheduling_policy_unit = value
    end
    
    # 
    # Creates a new instance of the {Balance} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [SchedulingPolicy, Hash] :scheduling_policy The value of attribute `scheduling_policy`.
    # 
    # @option opts [SchedulingPolicyUnit, Hash] :scheduling_policy_unit The value of attribute `scheduling_policy_unit`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.scheduling_policy = opts[:scheduling_policy]
      self.scheduling_policy_unit = opts[:scheduling_policy_unit]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @scheduling_policy == other.scheduling_policy &&
      @scheduling_policy_unit == other.scheduling_policy_unit
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @scheduling_policy.hash +
      @scheduling_policy_unit.hash
    end
    
  end
  
  class Bookmark < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `value` attribute.
    # 
    # @return [String]
    # 
    def value
      @value
    end
    
    # 
    # Sets the value of the `value` attribute.
    # 
    # @param value [String]
    # 
    def value=(value)
      @value = value
    end
    
    # 
    # Creates a new instance of the {Bookmark} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :value The value of attribute `value`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.value = opts[:value]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @value == other.value
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @value.hash
    end
    
  end
  
  class BrickProfileDetail < EntityProfileDetail
    
    # 
    # Returns the value of the `brick` attribute.
    # 
    # @return [GlusterBrick]
    # 
    def brick
      @brick
    end
    
    # 
    # Sets the value of the `brick` attribute.
    # 
    # @param value [GlusterBrick, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::GlusterBrick} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def brick=(value)
      if value.is_a?(Hash)
        value = GlusterBrick.new(value)
      end
      @brick = value
    end
    
    # 
    # Returns the value of the `profile_details` attribute.
    # 
    # @return [Array<ProfileDetail>]
    # 
    def profile_details
      @profile_details
    end
    
    # 
    # Sets the value of the `profile_details` attribute.
    # 
    # @param list [Array<ProfileDetail>]
    # 
    def profile_details=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = ProfileDetail.new(value)
          end
        end
      end
      @profile_details = list
    end
    
    # 
    # Creates a new instance of the {BrickProfileDetail} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [GlusterBrick, Hash] :brick The value of attribute `brick`.
    # 
    # @option opts [Array<ProfileDetail>, Array<Hash>] :profile_details The values of attribute `profile_details`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.brick = opts[:brick]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @brick == other.brick
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @brick.hash
    end
    
  end
  
  class Certificate < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `content` attribute.
    # 
    # @return [String]
    # 
    def content
      @content
    end
    
    # 
    # Sets the value of the `content` attribute.
    # 
    # @param value [String]
    # 
    def content=(value)
      @content = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `organization` attribute.
    # 
    # @return [String]
    # 
    def organization
      @organization
    end
    
    # 
    # Sets the value of the `organization` attribute.
    # 
    # @param value [String]
    # 
    def organization=(value)
      @organization = value
    end
    
    # 
    # Returns the value of the `subject` attribute.
    # 
    # @return [String]
    # 
    def subject
      @subject
    end
    
    # 
    # Sets the value of the `subject` attribute.
    # 
    # @param value [String]
    # 
    def subject=(value)
      @subject = value
    end
    
    # 
    # Creates a new instance of the {Certificate} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :content The value of attribute `content`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :organization The value of attribute `organization`.
    # 
    # @option opts [String] :subject The value of attribute `subject`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.content = opts[:content]
      self.organization = opts[:organization]
      self.subject = opts[:subject]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @content == other.content &&
      @organization == other.organization &&
      @subject == other.subject
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @content.hash +
      @organization.hash +
      @subject.hash
    end
    
  end
  
  class Checkpoint < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `creation_date` attribute.
    # 
    # @return [DateTime]
    # 
    def creation_date
      @creation_date
    end
    
    # 
    # Sets the value of the `creation_date` attribute.
    # 
    # @param value [DateTime]
    # 
    def creation_date=(value)
      @creation_date = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `disks` attribute.
    # 
    # @return [Array<Disk>]
    # 
    def disks
      @disks
    end
    
    # 
    # Sets the value of the `disks` attribute.
    # 
    # @param list [Array<Disk>]
    # 
    def disks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Disk.new(value)
          end
        end
      end
      @disks = list
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `parent_id` attribute.
    # 
    # @return [String]
    # 
    def parent_id
      @parent_id
    end
    
    # 
    # Sets the value of the `parent_id` attribute.
    # 
    # @param value [String]
    # 
    def parent_id=(value)
      @parent_id = value
    end
    
    # 
    # Returns the value of the `state` attribute.
    # 
    # @return [CheckpointState]
    # 
    def state
      @state
    end
    
    # 
    # Sets the value of the `state` attribute.
    # 
    # @param value [CheckpointState]
    # 
    def state=(value)
      @state = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {Checkpoint} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [DateTime] :creation_date The value of attribute `creation_date`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Array<Disk>, Array<Hash>] :disks The values of attribute `disks`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :parent_id The value of attribute `parent_id`.
    # 
    # @option opts [CheckpointState] :state The value of attribute `state`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.creation_date = opts[:creation_date]
      self.disks = opts[:disks]
      self.parent_id = opts[:parent_id]
      self.state = opts[:state]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @creation_date == other.creation_date &&
      @disks == other.disks &&
      @parent_id == other.parent_id &&
      @state == other.state &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @creation_date.hash +
      @disks.hash +
      @parent_id.hash +
      @state.hash +
      @vm.hash
    end
    
  end
  
  class Cluster < Identified
    
    # 
    # Returns the value of the `affinity_groups` attribute.
    # 
    # @return [Array<AffinityGroup>]
    # 
    def affinity_groups
      @affinity_groups
    end
    
    # 
    # Sets the value of the `affinity_groups` attribute.
    # 
    # @param list [Array<AffinityGroup>]
    # 
    def affinity_groups=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = AffinityGroup.new(value)
          end
        end
      end
      @affinity_groups = list
    end
    
    # 
    # Returns the value of the `ballooning_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def ballooning_enabled
      @ballooning_enabled
    end
    
    # 
    # Sets the value of the `ballooning_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def ballooning_enabled=(value)
      @ballooning_enabled = value
    end
    
    # 
    # Returns the value of the `bios_type` attribute.
    # 
    # @return [BiosType]
    # 
    def bios_type
      @bios_type
    end
    
    # 
    # Sets the value of the `bios_type` attribute.
    # 
    # @param value [BiosType]
    # 
    def bios_type=(value)
      @bios_type = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `cpu` attribute.
    # 
    # @return [Cpu]
    # 
    def cpu
      @cpu
    end
    
    # 
    # Sets the value of the `cpu` attribute.
    # 
    # @param value [Cpu, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cpu} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu=(value)
      if value.is_a?(Hash)
        value = Cpu.new(value)
      end
      @cpu = value
    end
    
    # 
    # Returns the value of the `cpu_profiles` attribute.
    # 
    # @return [Array<CpuProfile>]
    # 
    def cpu_profiles
      @cpu_profiles
    end
    
    # 
    # Sets the value of the `cpu_profiles` attribute.
    # 
    # @param list [Array<CpuProfile>]
    # 
    def cpu_profiles=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = CpuProfile.new(value)
          end
        end
      end
      @cpu_profiles = list
    end
    
    # 
    # Returns the value of the `custom_scheduling_policy_properties` attribute.
    # 
    # @return [Array<Property>]
    # 
    def custom_scheduling_policy_properties
      @custom_scheduling_policy_properties
    end
    
    # 
    # Sets the value of the `custom_scheduling_policy_properties` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def custom_scheduling_policy_properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @custom_scheduling_policy_properties = list
    end
    
    # 
    # Returns the value of the `data_center` attribute.
    # 
    # @return [DataCenter]
    # 
    def data_center
      @data_center
    end
    
    # 
    # Sets the value of the `data_center` attribute.
    # 
    # @param value [DataCenter, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DataCenter} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def data_center=(value)
      if value.is_a?(Hash)
        value = DataCenter.new(value)
      end
      @data_center = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `display` attribute.
    # 
    # @return [Display]
    # 
    def display
      @display
    end
    
    # 
    # Sets the value of the `display` attribute.
    # 
    # @param value [Display, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Display} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def display=(value)
      if value.is_a?(Hash)
        value = Display.new(value)
      end
      @display = value
    end
    
    # 
    # Returns the value of the `enabled_features` attribute.
    # 
    # @return [Array<ClusterFeature>]
    # 
    def enabled_features
      @enabled_features
    end
    
    # 
    # Sets the value of the `enabled_features` attribute.
    # 
    # @param list [Array<ClusterFeature>]
    # 
    def enabled_features=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = ClusterFeature.new(value)
          end
        end
      end
      @enabled_features = list
    end
    
    # 
    # Returns the value of the `error_handling` attribute.
    # 
    # @return [ErrorHandling]
    # 
    def error_handling
      @error_handling
    end
    
    # 
    # Sets the value of the `error_handling` attribute.
    # 
    # @param value [ErrorHandling, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ErrorHandling} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def error_handling=(value)
      if value.is_a?(Hash)
        value = ErrorHandling.new(value)
      end
      @error_handling = value
    end
    
    # 
    # Returns the value of the `external_network_providers` attribute.
    # 
    # @return [Array<ExternalProvider>]
    # 
    def external_network_providers
      @external_network_providers
    end
    
    # 
    # Sets the value of the `external_network_providers` attribute.
    # 
    # @param list [Array<ExternalProvider>]
    # 
    def external_network_providers=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = ExternalProvider.new(value)
          end
        end
      end
      @external_network_providers = list
    end
    
    # 
    # Returns the value of the `fencing_policy` attribute.
    # 
    # @return [FencingPolicy]
    # 
    def fencing_policy
      @fencing_policy
    end
    
    # 
    # Sets the value of the `fencing_policy` attribute.
    # 
    # @param value [FencingPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::FencingPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def fencing_policy=(value)
      if value.is_a?(Hash)
        value = FencingPolicy.new(value)
      end
      @fencing_policy = value
    end
    
    # 
    # Returns the value of the `fips_mode` attribute.
    # 
    # @return [FipsMode]
    # 
    def fips_mode
      @fips_mode
    end
    
    # 
    # Sets the value of the `fips_mode` attribute.
    # 
    # @param value [FipsMode]
    # 
    def fips_mode=(value)
      @fips_mode = value
    end
    
    # 
    # Returns the value of the `firewall_type` attribute.
    # 
    # @return [FirewallType]
    # 
    def firewall_type
      @firewall_type
    end
    
    # 
    # Sets the value of the `firewall_type` attribute.
    # 
    # @param value [FirewallType]
    # 
    def firewall_type=(value)
      @firewall_type = value
    end
    
    # 
    # Returns the value of the `gluster_hooks` attribute.
    # 
    # @return [Array<GlusterHook>]
    # 
    def gluster_hooks
      @gluster_hooks
    end
    
    # 
    # Sets the value of the `gluster_hooks` attribute.
    # 
    # @param list [Array<GlusterHook>]
    # 
    def gluster_hooks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = GlusterHook.new(value)
          end
        end
      end
      @gluster_hooks = list
    end
    
    # 
    # Returns the value of the `gluster_service` attribute.
    # 
    # @return [Boolean]
    # 
    def gluster_service
      @gluster_service
    end
    
    # 
    # Sets the value of the `gluster_service` attribute.
    # 
    # @param value [Boolean]
    # 
    def gluster_service=(value)
      @gluster_service = value
    end
    
    # 
    # Returns the value of the `gluster_tuned_profile` attribute.
    # 
    # @return [String]
    # 
    def gluster_tuned_profile
      @gluster_tuned_profile
    end
    
    # 
    # Sets the value of the `gluster_tuned_profile` attribute.
    # 
    # @param value [String]
    # 
    def gluster_tuned_profile=(value)
      @gluster_tuned_profile = value
    end
    
    # 
    # Returns the value of the `gluster_volumes` attribute.
    # 
    # @return [Array<GlusterVolume>]
    # 
    def gluster_volumes
      @gluster_volumes
    end
    
    # 
    # Sets the value of the `gluster_volumes` attribute.
    # 
    # @param list [Array<GlusterVolume>]
    # 
    def gluster_volumes=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = GlusterVolume.new(value)
          end
        end
      end
      @gluster_volumes = list
    end
    
    # 
    # Returns the value of the `ha_reservation` attribute.
    # 
    # @return [Boolean]
    # 
    def ha_reservation
      @ha_reservation
    end
    
    # 
    # Sets the value of the `ha_reservation` attribute.
    # 
    # @param value [Boolean]
    # 
    def ha_reservation=(value)
      @ha_reservation = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `ksm` attribute.
    # 
    # @return [Ksm]
    # 
    def ksm
      @ksm
    end
    
    # 
    # Sets the value of the `ksm` attribute.
    # 
    # @param value [Ksm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Ksm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def ksm=(value)
      if value.is_a?(Hash)
        value = Ksm.new(value)
      end
      @ksm = value
    end
    
    # 
    # Returns the value of the `log_max_memory_used_threshold` attribute.
    # 
    # @return [Integer]
    # 
    def log_max_memory_used_threshold
      @log_max_memory_used_threshold
    end
    
    # 
    # Sets the value of the `log_max_memory_used_threshold` attribute.
    # 
    # @param value [Integer]
    # 
    def log_max_memory_used_threshold=(value)
      @log_max_memory_used_threshold = value
    end
    
    # 
    # Returns the value of the `log_max_memory_used_threshold_type` attribute.
    # 
    # @return [LogMaxMemoryUsedThresholdType]
    # 
    def log_max_memory_used_threshold_type
      @log_max_memory_used_threshold_type
    end
    
    # 
    # Sets the value of the `log_max_memory_used_threshold_type` attribute.
    # 
    # @param value [LogMaxMemoryUsedThresholdType]
    # 
    def log_max_memory_used_threshold_type=(value)
      @log_max_memory_used_threshold_type = value
    end
    
    # 
    # Returns the value of the `mac_pool` attribute.
    # 
    # @return [MacPool]
    # 
    def mac_pool
      @mac_pool
    end
    
    # 
    # Sets the value of the `mac_pool` attribute.
    # 
    # @param value [MacPool, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MacPool} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def mac_pool=(value)
      if value.is_a?(Hash)
        value = MacPool.new(value)
      end
      @mac_pool = value
    end
    
    # 
    # Returns the value of the `maintenance_reason_required` attribute.
    # 
    # @return [Boolean]
    # 
    def maintenance_reason_required
      @maintenance_reason_required
    end
    
    # 
    # Sets the value of the `maintenance_reason_required` attribute.
    # 
    # @param value [Boolean]
    # 
    def maintenance_reason_required=(value)
      @maintenance_reason_required = value
    end
    
    # 
    # Returns the value of the `management_network` attribute.
    # 
    # @return [Network]
    # 
    def management_network
      @management_network
    end
    
    # 
    # Sets the value of the `management_network` attribute.
    # 
    # @param value [Network, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Network} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def management_network=(value)
      if value.is_a?(Hash)
        value = Network.new(value)
      end
      @management_network = value
    end
    
    # 
    # Returns the value of the `memory_policy` attribute.
    # 
    # @return [MemoryPolicy]
    # 
    def memory_policy
      @memory_policy
    end
    
    # 
    # Sets the value of the `memory_policy` attribute.
    # 
    # @param value [MemoryPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MemoryPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def memory_policy=(value)
      if value.is_a?(Hash)
        value = MemoryPolicy.new(value)
      end
      @memory_policy = value
    end
    
    # 
    # Returns the value of the `migration` attribute.
    # 
    # @return [MigrationOptions]
    # 
    def migration
      @migration
    end
    
    # 
    # Sets the value of the `migration` attribute.
    # 
    # @param value [MigrationOptions, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MigrationOptions} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def migration=(value)
      if value.is_a?(Hash)
        value = MigrationOptions.new(value)
      end
      @migration = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `network_filters` attribute.
    # 
    # @return [Array<NetworkFilter>]
    # 
    def network_filters
      @network_filters
    end
    
    # 
    # Sets the value of the `network_filters` attribute.
    # 
    # @param list [Array<NetworkFilter>]
    # 
    def network_filters=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NetworkFilter.new(value)
          end
        end
      end
      @network_filters = list
    end
    
    # 
    # Returns the value of the `networks` attribute.
    # 
    # @return [Array<Network>]
    # 
    def networks
      @networks
    end
    
    # 
    # Sets the value of the `networks` attribute.
    # 
    # @param list [Array<Network>]
    # 
    def networks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Network.new(value)
          end
        end
      end
      @networks = list
    end
    
    # 
    # Returns the value of the `optional_reason` attribute.
    # 
    # @return [Boolean]
    # 
    def optional_reason
      @optional_reason
    end
    
    # 
    # Sets the value of the `optional_reason` attribute.
    # 
    # @param value [Boolean]
    # 
    def optional_reason=(value)
      @optional_reason = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `required_rng_sources` attribute.
    # 
    # @return [Array<RngSource>]
    # 
    def required_rng_sources
      @required_rng_sources
    end
    
    # 
    # Sets the value of the `required_rng_sources` attribute.
    # 
    # @param list [Array<RngSource>]
    # 
    def required_rng_sources=(list)
      @required_rng_sources = list
    end
    
    # 
    # Returns the value of the `scheduling_policy` attribute.
    # 
    # @return [SchedulingPolicy]
    # 
    def scheduling_policy
      @scheduling_policy
    end
    
    # 
    # Sets the value of the `scheduling_policy` attribute.
    # 
    # @param value [SchedulingPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SchedulingPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def scheduling_policy=(value)
      if value.is_a?(Hash)
        value = SchedulingPolicy.new(value)
      end
      @scheduling_policy = value
    end
    
    # 
    # Returns the value of the `serial_number` attribute.
    # 
    # @return [SerialNumber]
    # 
    def serial_number
      @serial_number
    end
    
    # 
    # Sets the value of the `serial_number` attribute.
    # 
    # @param value [SerialNumber, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SerialNumber} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def serial_number=(value)
      if value.is_a?(Hash)
        value = SerialNumber.new(value)
      end
      @serial_number = value
    end
    
    # 
    # Returns the value of the `supported_versions` attribute.
    # 
    # @return [Array<Version>]
    # 
    def supported_versions
      @supported_versions
    end
    
    # 
    # Sets the value of the `supported_versions` attribute.
    # 
    # @param list [Array<Version>]
    # 
    def supported_versions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Version.new(value)
          end
        end
      end
      @supported_versions = list
    end
    
    # 
    # Returns the value of the `switch_type` attribute.
    # 
    # @return [SwitchType]
    # 
    def switch_type
      @switch_type
    end
    
    # 
    # Sets the value of the `switch_type` attribute.
    # 
    # @param value [SwitchType]
    # 
    def switch_type=(value)
      @switch_type = value
    end
    
    # 
    # Returns the value of the `threads_as_cores` attribute.
    # 
    # @return [Boolean]
    # 
    def threads_as_cores
      @threads_as_cores
    end
    
    # 
    # Sets the value of the `threads_as_cores` attribute.
    # 
    # @param value [Boolean]
    # 
    def threads_as_cores=(value)
      @threads_as_cores = value
    end
    
    # 
    # Returns the value of the `trusted_service` attribute.
    # 
    # @return [Boolean]
    # 
    def trusted_service
      @trusted_service
    end
    
    # 
    # Sets the value of the `trusted_service` attribute.
    # 
    # @param value [Boolean]
    # 
    def trusted_service=(value)
      @trusted_service = value
    end
    
    # 
    # Returns the value of the `tunnel_migration` attribute.
    # 
    # @return [Boolean]
    # 
    def tunnel_migration
      @tunnel_migration
    end
    
    # 
    # Sets the value of the `tunnel_migration` attribute.
    # 
    # @param value [Boolean]
    # 
    def tunnel_migration=(value)
      @tunnel_migration = value
    end
    
    # 
    # Returns the value of the `upgrade_correlation_id` attribute.
    # 
    # @return [String]
    # 
    def upgrade_correlation_id
      @upgrade_correlation_id
    end
    
    # 
    # Sets the value of the `upgrade_correlation_id` attribute.
    # 
    # @param value [String]
    # 
    def upgrade_correlation_id=(value)
      @upgrade_correlation_id = value
    end
    
    # 
    # Returns the value of the `upgrade_in_progress` attribute.
    # 
    # @return [Boolean]
    # 
    def upgrade_in_progress
      @upgrade_in_progress
    end
    
    # 
    # Sets the value of the `upgrade_in_progress` attribute.
    # 
    # @param value [Boolean]
    # 
    def upgrade_in_progress=(value)
      @upgrade_in_progress = value
    end
    
    # 
    # Returns the value of the `upgrade_percent_complete` attribute.
    # 
    # @return [Integer]
    # 
    def upgrade_percent_complete
      @upgrade_percent_complete
    end
    
    # 
    # Sets the value of the `upgrade_percent_complete` attribute.
    # 
    # @param value [Integer]
    # 
    def upgrade_percent_complete=(value)
      @upgrade_percent_complete = value
    end
    
    # 
    # Returns the value of the `version` attribute.
    # 
    # @return [Version]
    # 
    def version
      @version
    end
    
    # 
    # Sets the value of the `version` attribute.
    # 
    # @param value [Version, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Version} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def version=(value)
      if value.is_a?(Hash)
        value = Version.new(value)
      end
      @version = value
    end
    
    # 
    # Returns the value of the `virt_service` attribute.
    # 
    # @return [Boolean]
    # 
    def virt_service
      @virt_service
    end
    
    # 
    # Sets the value of the `virt_service` attribute.
    # 
    # @param value [Boolean]
    # 
    def virt_service=(value)
      @virt_service = value
    end
    
    # 
    # Returns the value of the `vnc_encryption` attribute.
    # 
    # @return [Boolean]
    # 
    def vnc_encryption
      @vnc_encryption
    end
    
    # 
    # Sets the value of the `vnc_encryption` attribute.
    # 
    # @param value [Boolean]
    # 
    def vnc_encryption=(value)
      @vnc_encryption = value
    end
    
    # 
    # Creates a new instance of the {Cluster} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<AffinityGroup>, Array<Hash>] :affinity_groups The values of attribute `affinity_groups`.
    # 
    # @option opts [Boolean] :ballooning_enabled The value of attribute `ballooning_enabled`.
    # 
    # @option opts [BiosType] :bios_type The value of attribute `bios_type`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Cpu, Hash] :cpu The value of attribute `cpu`.
    # 
    # @option opts [Array<CpuProfile>, Array<Hash>] :cpu_profiles The values of attribute `cpu_profiles`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :custom_scheduling_policy_properties The values of attribute `custom_scheduling_policy_properties`.
    # 
    # @option opts [DataCenter, Hash] :data_center The value of attribute `data_center`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Display, Hash] :display The value of attribute `display`.
    # 
    # @option opts [Array<ClusterFeature>, Array<Hash>] :enabled_features The values of attribute `enabled_features`.
    # 
    # @option opts [ErrorHandling, Hash] :error_handling The value of attribute `error_handling`.
    # 
    # @option opts [Array<ExternalProvider>, Array<Hash>] :external_network_providers The values of attribute `external_network_providers`.
    # 
    # @option opts [FencingPolicy, Hash] :fencing_policy The value of attribute `fencing_policy`.
    # 
    # @option opts [FipsMode] :fips_mode The value of attribute `fips_mode`.
    # 
    # @option opts [FirewallType] :firewall_type The value of attribute `firewall_type`.
    # 
    # @option opts [Array<GlusterHook>, Array<Hash>] :gluster_hooks The values of attribute `gluster_hooks`.
    # 
    # @option opts [Boolean] :gluster_service The value of attribute `gluster_service`.
    # 
    # @option opts [String] :gluster_tuned_profile The value of attribute `gluster_tuned_profile`.
    # 
    # @option opts [Array<GlusterVolume>, Array<Hash>] :gluster_volumes The values of attribute `gluster_volumes`.
    # 
    # @option opts [Boolean] :ha_reservation The value of attribute `ha_reservation`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Ksm, Hash] :ksm The value of attribute `ksm`.
    # 
    # @option opts [Integer] :log_max_memory_used_threshold The value of attribute `log_max_memory_used_threshold`.
    # 
    # @option opts [LogMaxMemoryUsedThresholdType] :log_max_memory_used_threshold_type The value of attribute `log_max_memory_used_threshold_type`.
    # 
    # @option opts [MacPool, Hash] :mac_pool The value of attribute `mac_pool`.
    # 
    # @option opts [Boolean] :maintenance_reason_required The value of attribute `maintenance_reason_required`.
    # 
    # @option opts [Network, Hash] :management_network The value of attribute `management_network`.
    # 
    # @option opts [MemoryPolicy, Hash] :memory_policy The value of attribute `memory_policy`.
    # 
    # @option opts [MigrationOptions, Hash] :migration The value of attribute `migration`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<NetworkFilter>, Array<Hash>] :network_filters The values of attribute `network_filters`.
    # 
    # @option opts [Array<Network>, Array<Hash>] :networks The values of attribute `networks`.
    # 
    # @option opts [Boolean] :optional_reason The value of attribute `optional_reason`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [Array<RngSource>, Array<Hash>] :required_rng_sources The values of attribute `required_rng_sources`.
    # 
    # @option opts [SchedulingPolicy, Hash] :scheduling_policy The value of attribute `scheduling_policy`.
    # 
    # @option opts [SerialNumber, Hash] :serial_number The value of attribute `serial_number`.
    # 
    # @option opts [Array<Version>, Array<Hash>] :supported_versions The values of attribute `supported_versions`.
    # 
    # @option opts [SwitchType] :switch_type The value of attribute `switch_type`.
    # 
    # @option opts [Boolean] :threads_as_cores The value of attribute `threads_as_cores`.
    # 
    # @option opts [Boolean] :trusted_service The value of attribute `trusted_service`.
    # 
    # @option opts [Boolean] :tunnel_migration The value of attribute `tunnel_migration`.
    # 
    # @option opts [String] :upgrade_correlation_id The value of attribute `upgrade_correlation_id`.
    # 
    # @option opts [Boolean] :upgrade_in_progress The value of attribute `upgrade_in_progress`.
    # 
    # @option opts [Integer] :upgrade_percent_complete The value of attribute `upgrade_percent_complete`.
    # 
    # @option opts [Version, Hash] :version The value of attribute `version`.
    # 
    # @option opts [Boolean] :virt_service The value of attribute `virt_service`.
    # 
    # @option opts [Boolean] :vnc_encryption The value of attribute `vnc_encryption`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.affinity_groups = opts[:affinity_groups]
      self.ballooning_enabled = opts[:ballooning_enabled]
      self.bios_type = opts[:bios_type]
      self.cpu = opts[:cpu]
      self.cpu_profiles = opts[:cpu_profiles]
      self.custom_scheduling_policy_properties = opts[:custom_scheduling_policy_properties]
      self.data_center = opts[:data_center]
      self.display = opts[:display]
      self.enabled_features = opts[:enabled_features]
      self.error_handling = opts[:error_handling]
      self.external_network_providers = opts[:external_network_providers]
      self.fencing_policy = opts[:fencing_policy]
      self.fips_mode = opts[:fips_mode]
      self.firewall_type = opts[:firewall_type]
      self.gluster_hooks = opts[:gluster_hooks]
      self.gluster_service = opts[:gluster_service]
      self.gluster_tuned_profile = opts[:gluster_tuned_profile]
      self.gluster_volumes = opts[:gluster_volumes]
      self.ha_reservation = opts[:ha_reservation]
      self.ksm = opts[:ksm]
      self.log_max_memory_used_threshold = opts[:log_max_memory_used_threshold]
      self.log_max_memory_used_threshold_type = opts[:log_max_memory_used_threshold_type]
      self.mac_pool = opts[:mac_pool]
      self.maintenance_reason_required = opts[:maintenance_reason_required]
      self.management_network = opts[:management_network]
      self.memory_policy = opts[:memory_policy]
      self.migration = opts[:migration]
      self.network_filters = opts[:network_filters]
      self.networks = opts[:networks]
      self.optional_reason = opts[:optional_reason]
      self.permissions = opts[:permissions]
      self.required_rng_sources = opts[:required_rng_sources]
      self.scheduling_policy = opts[:scheduling_policy]
      self.serial_number = opts[:serial_number]
      self.supported_versions = opts[:supported_versions]
      self.switch_type = opts[:switch_type]
      self.threads_as_cores = opts[:threads_as_cores]
      self.trusted_service = opts[:trusted_service]
      self.tunnel_migration = opts[:tunnel_migration]
      self.upgrade_correlation_id = opts[:upgrade_correlation_id]
      self.upgrade_in_progress = opts[:upgrade_in_progress]
      self.upgrade_percent_complete = opts[:upgrade_percent_complete]
      self.version = opts[:version]
      self.virt_service = opts[:virt_service]
      self.vnc_encryption = opts[:vnc_encryption]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @affinity_groups == other.affinity_groups &&
      @ballooning_enabled == other.ballooning_enabled &&
      @bios_type == other.bios_type &&
      @cpu == other.cpu &&
      @cpu_profiles == other.cpu_profiles &&
      @custom_scheduling_policy_properties == other.custom_scheduling_policy_properties &&
      @data_center == other.data_center &&
      @display == other.display &&
      @enabled_features == other.enabled_features &&
      @error_handling == other.error_handling &&
      @external_network_providers == other.external_network_providers &&
      @fencing_policy == other.fencing_policy &&
      @fips_mode == other.fips_mode &&
      @firewall_type == other.firewall_type &&
      @gluster_hooks == other.gluster_hooks &&
      @gluster_service == other.gluster_service &&
      @gluster_tuned_profile == other.gluster_tuned_profile &&
      @gluster_volumes == other.gluster_volumes &&
      @ha_reservation == other.ha_reservation &&
      @ksm == other.ksm &&
      @log_max_memory_used_threshold == other.log_max_memory_used_threshold &&
      @log_max_memory_used_threshold_type == other.log_max_memory_used_threshold_type &&
      @mac_pool == other.mac_pool &&
      @maintenance_reason_required == other.maintenance_reason_required &&
      @management_network == other.management_network &&
      @memory_policy == other.memory_policy &&
      @migration == other.migration &&
      @network_filters == other.network_filters &&
      @networks == other.networks &&
      @optional_reason == other.optional_reason &&
      @permissions == other.permissions &&
      @required_rng_sources == other.required_rng_sources &&
      @scheduling_policy == other.scheduling_policy &&
      @serial_number == other.serial_number &&
      @supported_versions == other.supported_versions &&
      @switch_type == other.switch_type &&
      @threads_as_cores == other.threads_as_cores &&
      @trusted_service == other.trusted_service &&
      @tunnel_migration == other.tunnel_migration &&
      @upgrade_correlation_id == other.upgrade_correlation_id &&
      @upgrade_in_progress == other.upgrade_in_progress &&
      @upgrade_percent_complete == other.upgrade_percent_complete &&
      @version == other.version &&
      @virt_service == other.virt_service &&
      @vnc_encryption == other.vnc_encryption
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @affinity_groups.hash +
      @ballooning_enabled.hash +
      @bios_type.hash +
      @cpu.hash +
      @cpu_profiles.hash +
      @custom_scheduling_policy_properties.hash +
      @data_center.hash +
      @display.hash +
      @enabled_features.hash +
      @error_handling.hash +
      @external_network_providers.hash +
      @fencing_policy.hash +
      @fips_mode.hash +
      @firewall_type.hash +
      @gluster_hooks.hash +
      @gluster_service.hash +
      @gluster_tuned_profile.hash +
      @gluster_volumes.hash +
      @ha_reservation.hash +
      @ksm.hash +
      @log_max_memory_used_threshold.hash +
      @log_max_memory_used_threshold_type.hash +
      @mac_pool.hash +
      @maintenance_reason_required.hash +
      @management_network.hash +
      @memory_policy.hash +
      @migration.hash +
      @network_filters.hash +
      @networks.hash +
      @optional_reason.hash +
      @permissions.hash +
      @required_rng_sources.hash +
      @scheduling_policy.hash +
      @serial_number.hash +
      @supported_versions.hash +
      @switch_type.hash +
      @threads_as_cores.hash +
      @trusted_service.hash +
      @tunnel_migration.hash +
      @upgrade_correlation_id.hash +
      @upgrade_in_progress.hash +
      @upgrade_percent_complete.hash +
      @version.hash +
      @virt_service.hash +
      @vnc_encryption.hash
    end
    
  end
  
  class ClusterFeature < Identified
    
    # 
    # Returns the value of the `cluster_level` attribute.
    # 
    # @return [ClusterLevel]
    # 
    def cluster_level
      @cluster_level
    end
    
    # 
    # Sets the value of the `cluster_level` attribute.
    # 
    # @param value [ClusterLevel, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ClusterLevel} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster_level=(value)
      if value.is_a?(Hash)
        value = ClusterLevel.new(value)
      end
      @cluster_level = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {ClusterFeature} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [ClusterLevel, Hash] :cluster_level The value of attribute `cluster_level`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cluster_level = opts[:cluster_level]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cluster_level == other.cluster_level
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cluster_level.hash
    end
    
  end
  
  class ClusterLevel < Identified
    
    # 
    # Returns the value of the `cluster_features` attribute.
    # 
    # @return [Array<ClusterFeature>]
    # 
    def cluster_features
      @cluster_features
    end
    
    # 
    # Sets the value of the `cluster_features` attribute.
    # 
    # @param list [Array<ClusterFeature>]
    # 
    def cluster_features=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = ClusterFeature.new(value)
          end
        end
      end
      @cluster_features = list
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `cpu_types` attribute.
    # 
    # @return [Array<CpuType>]
    # 
    def cpu_types
      @cpu_types
    end
    
    # 
    # Sets the value of the `cpu_types` attribute.
    # 
    # @param list [Array<CpuType>]
    # 
    def cpu_types=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = CpuType.new(value)
          end
        end
      end
      @cpu_types = list
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `permits` attribute.
    # 
    # @return [Array<Permit>]
    # 
    def permits
      @permits
    end
    
    # 
    # Sets the value of the `permits` attribute.
    # 
    # @param list [Array<Permit>]
    # 
    def permits=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permit.new(value)
          end
        end
      end
      @permits = list
    end
    
    # 
    # Creates a new instance of the {ClusterLevel} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<ClusterFeature>, Array<Hash>] :cluster_features The values of attribute `cluster_features`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Array<CpuType>, Array<Hash>] :cpu_types The values of attribute `cpu_types`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Permit>, Array<Hash>] :permits The values of attribute `permits`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cluster_features = opts[:cluster_features]
      self.cpu_types = opts[:cpu_types]
      self.permits = opts[:permits]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cluster_features == other.cluster_features &&
      @cpu_types == other.cpu_types &&
      @permits == other.permits
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cluster_features.hash +
      @cpu_types.hash +
      @permits.hash
    end
    
  end
  
  class CpuProfile < Identified
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `qos` attribute.
    # 
    # @return [Qos]
    # 
    def qos
      @qos
    end
    
    # 
    # Sets the value of the `qos` attribute.
    # 
    # @param value [Qos, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Qos} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def qos=(value)
      if value.is_a?(Hash)
        value = Qos.new(value)
      end
      @qos = value
    end
    
    # 
    # Creates a new instance of the {CpuProfile} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [Qos, Hash] :qos The value of attribute `qos`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cluster = opts[:cluster]
      self.permissions = opts[:permissions]
      self.qos = opts[:qos]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cluster == other.cluster &&
      @permissions == other.permissions &&
      @qos == other.qos
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cluster.hash +
      @permissions.hash +
      @qos.hash
    end
    
  end
  
  class DataCenter < Identified
    
    # 
    # Returns the value of the `clusters` attribute.
    # 
    # @return [Array<Cluster>]
    # 
    def clusters
      @clusters
    end
    
    # 
    # Sets the value of the `clusters` attribute.
    # 
    # @param list [Array<Cluster>]
    # 
    def clusters=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Cluster.new(value)
          end
        end
      end
      @clusters = list
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `iscsi_bonds` attribute.
    # 
    # @return [Array<IscsiBond>]
    # 
    def iscsi_bonds
      @iscsi_bonds
    end
    
    # 
    # Sets the value of the `iscsi_bonds` attribute.
    # 
    # @param list [Array<IscsiBond>]
    # 
    def iscsi_bonds=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = IscsiBond.new(value)
          end
        end
      end
      @iscsi_bonds = list
    end
    
    # 
    # Returns the value of the `local` attribute.
    # 
    # @return [Boolean]
    # 
    def local
      @local
    end
    
    # 
    # Sets the value of the `local` attribute.
    # 
    # @param value [Boolean]
    # 
    def local=(value)
      @local = value
    end
    
    # 
    # Returns the value of the `mac_pool` attribute.
    # 
    # @return [MacPool]
    # 
    def mac_pool
      @mac_pool
    end
    
    # 
    # Sets the value of the `mac_pool` attribute.
    # 
    # @param value [MacPool, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MacPool} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def mac_pool=(value)
      if value.is_a?(Hash)
        value = MacPool.new(value)
      end
      @mac_pool = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `networks` attribute.
    # 
    # @return [Array<Network>]
    # 
    def networks
      @networks
    end
    
    # 
    # Sets the value of the `networks` attribute.
    # 
    # @param list [Array<Network>]
    # 
    def networks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Network.new(value)
          end
        end
      end
      @networks = list
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `qoss` attribute.
    # 
    # @return [Array<Qos>]
    # 
    def qoss
      @qoss
    end
    
    # 
    # Sets the value of the `qoss` attribute.
    # 
    # @param list [Array<Qos>]
    # 
    def qoss=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Qos.new(value)
          end
        end
      end
      @qoss = list
    end
    
    # 
    # Returns the value of the `quota_mode` attribute.
    # 
    # @return [QuotaModeType]
    # 
    def quota_mode
      @quota_mode
    end
    
    # 
    # Sets the value of the `quota_mode` attribute.
    # 
    # @param value [QuotaModeType]
    # 
    def quota_mode=(value)
      @quota_mode = value
    end
    
    # 
    # Returns the value of the `quotas` attribute.
    # 
    # @return [Array<Quota>]
    # 
    def quotas
      @quotas
    end
    
    # 
    # Sets the value of the `quotas` attribute.
    # 
    # @param list [Array<Quota>]
    # 
    def quotas=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Quota.new(value)
          end
        end
      end
      @quotas = list
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [DataCenterStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [DataCenterStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `storage_domains` attribute.
    # 
    # @return [Array<StorageDomain>]
    # 
    def storage_domains
      @storage_domains
    end
    
    # 
    # Sets the value of the `storage_domains` attribute.
    # 
    # @param list [Array<StorageDomain>]
    # 
    def storage_domains=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = StorageDomain.new(value)
          end
        end
      end
      @storage_domains = list
    end
    
    # 
    # Returns the value of the `storage_format` attribute.
    # 
    # @return [StorageFormat]
    # 
    def storage_format
      @storage_format
    end
    
    # 
    # Sets the value of the `storage_format` attribute.
    # 
    # @param value [StorageFormat]
    # 
    def storage_format=(value)
      @storage_format = value
    end
    
    # 
    # Returns the value of the `supported_versions` attribute.
    # 
    # @return [Array<Version>]
    # 
    def supported_versions
      @supported_versions
    end
    
    # 
    # Sets the value of the `supported_versions` attribute.
    # 
    # @param list [Array<Version>]
    # 
    def supported_versions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Version.new(value)
          end
        end
      end
      @supported_versions = list
    end
    
    # 
    # Returns the value of the `version` attribute.
    # 
    # @return [Version]
    # 
    def version
      @version
    end
    
    # 
    # Sets the value of the `version` attribute.
    # 
    # @param value [Version, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Version} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def version=(value)
      if value.is_a?(Hash)
        value = Version.new(value)
      end
      @version = value
    end
    
    # 
    # Creates a new instance of the {DataCenter} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<Cluster>, Array<Hash>] :clusters The values of attribute `clusters`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Array<IscsiBond>, Array<Hash>] :iscsi_bonds The values of attribute `iscsi_bonds`.
    # 
    # @option opts [Boolean] :local The value of attribute `local`.
    # 
    # @option opts [MacPool, Hash] :mac_pool The value of attribute `mac_pool`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Network>, Array<Hash>] :networks The values of attribute `networks`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [Array<Qos>, Array<Hash>] :qoss The values of attribute `qoss`.
    # 
    # @option opts [QuotaModeType] :quota_mode The value of attribute `quota_mode`.
    # 
    # @option opts [Array<Quota>, Array<Hash>] :quotas The values of attribute `quotas`.
    # 
    # @option opts [DataCenterStatus] :status The value of attribute `status`.
    # 
    # @option opts [Array<StorageDomain>, Array<Hash>] :storage_domains The values of attribute `storage_domains`.
    # 
    # @option opts [StorageFormat] :storage_format The value of attribute `storage_format`.
    # 
    # @option opts [Array<Version>, Array<Hash>] :supported_versions The values of attribute `supported_versions`.
    # 
    # @option opts [Version, Hash] :version The value of attribute `version`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.clusters = opts[:clusters]
      self.iscsi_bonds = opts[:iscsi_bonds]
      self.local = opts[:local]
      self.mac_pool = opts[:mac_pool]
      self.networks = opts[:networks]
      self.permissions = opts[:permissions]
      self.qoss = opts[:qoss]
      self.quota_mode = opts[:quota_mode]
      self.quotas = opts[:quotas]
      self.status = opts[:status]
      self.storage_domains = opts[:storage_domains]
      self.storage_format = opts[:storage_format]
      self.supported_versions = opts[:supported_versions]
      self.version = opts[:version]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @clusters == other.clusters &&
      @iscsi_bonds == other.iscsi_bonds &&
      @local == other.local &&
      @mac_pool == other.mac_pool &&
      @networks == other.networks &&
      @permissions == other.permissions &&
      @qoss == other.qoss &&
      @quota_mode == other.quota_mode &&
      @quotas == other.quotas &&
      @status == other.status &&
      @storage_domains == other.storage_domains &&
      @storage_format == other.storage_format &&
      @supported_versions == other.supported_versions &&
      @version == other.version
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @clusters.hash +
      @iscsi_bonds.hash +
      @local.hash +
      @mac_pool.hash +
      @networks.hash +
      @permissions.hash +
      @qoss.hash +
      @quota_mode.hash +
      @quotas.hash +
      @status.hash +
      @storage_domains.hash +
      @storage_format.hash +
      @supported_versions.hash +
      @version.hash
    end
    
  end
  
  class Device < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `instance_type` attribute.
    # 
    # @return [InstanceType]
    # 
    def instance_type
      @instance_type
    end
    
    # 
    # Sets the value of the `instance_type` attribute.
    # 
    # @param value [InstanceType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::InstanceType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def instance_type=(value)
      if value.is_a?(Hash)
        value = InstanceType.new(value)
      end
      @instance_type = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Creates a new instance of the {Device} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [InstanceType, Hash] :instance_type The value of attribute `instance_type`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.instance_type = opts[:instance_type]
      self.template = opts[:template]
      self.vm = opts[:vm]
      self.vms = opts[:vms]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @instance_type == other.instance_type &&
      @template == other.template &&
      @vm == other.vm &&
      @vms == other.vms
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @instance_type.hash +
      @template.hash +
      @vm.hash +
      @vms.hash
    end
    
  end
  
  class Disk < Device
    
    # 
    # Returns the value of the `active` attribute.
    # 
    # @return [Boolean]
    # 
    def active
      @active
    end
    
    # 
    # Sets the value of the `active` attribute.
    # 
    # @param value [Boolean]
    # 
    def active=(value)
      @active = value
    end
    
    # 
    # Returns the value of the `actual_size` attribute.
    # 
    # @return [Integer]
    # 
    def actual_size
      @actual_size
    end
    
    # 
    # Sets the value of the `actual_size` attribute.
    # 
    # @param value [Integer]
    # 
    def actual_size=(value)
      @actual_size = value
    end
    
    # 
    # Returns the value of the `alias_` attribute.
    # 
    # @return [String]
    # 
    def alias_
      @alias_
    end
    
    # 
    # Sets the value of the `alias_` attribute.
    # 
    # @param value [String]
    # 
    def alias_=(value)
      @alias_ = value
    end
    
    # 
    # Returns the value of the `backup` attribute.
    # 
    # @return [DiskBackup]
    # 
    def backup
      @backup
    end
    
    # 
    # Sets the value of the `backup` attribute.
    # 
    # @param value [DiskBackup]
    # 
    def backup=(value)
      @backup = value
    end
    
    # 
    # Returns the value of the `backup_mode` attribute.
    # 
    # @return [DiskBackupMode]
    # 
    def backup_mode
      @backup_mode
    end
    
    # 
    # Sets the value of the `backup_mode` attribute.
    # 
    # @param value [DiskBackupMode]
    # 
    def backup_mode=(value)
      @backup_mode = value
    end
    
    # 
    # Returns the value of the `bootable` attribute.
    # 
    # @return [Boolean]
    # 
    def bootable
      @bootable
    end
    
    # 
    # Sets the value of the `bootable` attribute.
    # 
    # @param value [Boolean]
    # 
    def bootable=(value)
      @bootable = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `content_type` attribute.
    # 
    # @return [DiskContentType]
    # 
    def content_type
      @content_type
    end
    
    # 
    # Sets the value of the `content_type` attribute.
    # 
    # @param value [DiskContentType]
    # 
    def content_type=(value)
      @content_type = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `disk_profile` attribute.
    # 
    # @return [DiskProfile]
    # 
    def disk_profile
      @disk_profile
    end
    
    # 
    # Sets the value of the `disk_profile` attribute.
    # 
    # @param value [DiskProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DiskProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def disk_profile=(value)
      if value.is_a?(Hash)
        value = DiskProfile.new(value)
      end
      @disk_profile = value
    end
    
    # 
    # Returns the value of the `disk_snapshots` attribute.
    # 
    # @return [Array<DiskSnapshot>]
    # 
    def disk_snapshots
      @disk_snapshots
    end
    
    # 
    # Sets the value of the `disk_snapshots` attribute.
    # 
    # @param list [Array<DiskSnapshot>]
    # 
    def disk_snapshots=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = DiskSnapshot.new(value)
          end
        end
      end
      @disk_snapshots = list
    end
    
    # 
    # Returns the value of the `external_disk` attribute.
    # 
    # @return [String]
    # 
    def external_disk
      @external_disk
    end
    
    # 
    # Sets the value of the `external_disk` attribute.
    # 
    # @param value [String]
    # 
    def external_disk=(value)
      @external_disk = value
    end
    
    # 
    # Returns the value of the `format` attribute.
    # 
    # @return [DiskFormat]
    # 
    def format
      @format
    end
    
    # 
    # Sets the value of the `format` attribute.
    # 
    # @param value [DiskFormat]
    # 
    def format=(value)
      @format = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `image_id` attribute.
    # 
    # @return [String]
    # 
    def image_id
      @image_id
    end
    
    # 
    # Sets the value of the `image_id` attribute.
    # 
    # @param value [String]
    # 
    def image_id=(value)
      @image_id = value
    end
    
    # 
    # Returns the value of the `initial_size` attribute.
    # 
    # @return [Integer]
    # 
    def initial_size
      @initial_size
    end
    
    # 
    # Sets the value of the `initial_size` attribute.
    # 
    # @param value [Integer]
    # 
    def initial_size=(value)
      @initial_size = value
    end
    
    # 
    # Returns the value of the `instance_type` attribute.
    # 
    # @return [InstanceType]
    # 
    def instance_type
      @instance_type
    end
    
    # 
    # Sets the value of the `instance_type` attribute.
    # 
    # @param value [InstanceType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::InstanceType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def instance_type=(value)
      if value.is_a?(Hash)
        value = InstanceType.new(value)
      end
      @instance_type = value
    end
    
    # 
    # Returns the value of the `interface` attribute.
    # 
    # @return [DiskInterface]
    # 
    def interface
      @interface
    end
    
    # 
    # Sets the value of the `interface` attribute.
    # 
    # @param value [DiskInterface]
    # 
    def interface=(value)
      @interface = value
    end
    
    # 
    # Returns the value of the `logical_name` attribute.
    # 
    # @return [String]
    # 
    def logical_name
      @logical_name
    end
    
    # 
    # Sets the value of the `logical_name` attribute.
    # 
    # @param value [String]
    # 
    def logical_name=(value)
      @logical_name = value
    end
    
    # 
    # Returns the value of the `lun_storage` attribute.
    # 
    # @return [HostStorage]
    # 
    def lun_storage
      @lun_storage
    end
    
    # 
    # Sets the value of the `lun_storage` attribute.
    # 
    # @param value [HostStorage, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostStorage} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def lun_storage=(value)
      if value.is_a?(Hash)
        value = HostStorage.new(value)
      end
      @lun_storage = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `openstack_volume_type` attribute.
    # 
    # @return [OpenStackVolumeType]
    # 
    def openstack_volume_type
      @openstack_volume_type
    end
    
    # 
    # Sets the value of the `openstack_volume_type` attribute.
    # 
    # @param value [OpenStackVolumeType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::OpenStackVolumeType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def openstack_volume_type=(value)
      if value.is_a?(Hash)
        value = OpenStackVolumeType.new(value)
      end
      @openstack_volume_type = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `propagate_errors` attribute.
    # 
    # @return [Boolean]
    # 
    def propagate_errors
      @propagate_errors
    end
    
    # 
    # Sets the value of the `propagate_errors` attribute.
    # 
    # @param value [Boolean]
    # 
    def propagate_errors=(value)
      @propagate_errors = value
    end
    
    # 
    # Returns the value of the `provisioned_size` attribute.
    # 
    # @return [Integer]
    # 
    def provisioned_size
      @provisioned_size
    end
    
    # 
    # Sets the value of the `provisioned_size` attribute.
    # 
    # @param value [Integer]
    # 
    def provisioned_size=(value)
      @provisioned_size = value
    end
    
    # 
    # Returns the value of the `qcow_version` attribute.
    # 
    # @return [QcowVersion]
    # 
    def qcow_version
      @qcow_version
    end
    
    # 
    # Sets the value of the `qcow_version` attribute.
    # 
    # @param value [QcowVersion]
    # 
    def qcow_version=(value)
      @qcow_version = value
    end
    
    # 
    # Returns the value of the `quota` attribute.
    # 
    # @return [Quota]
    # 
    def quota
      @quota
    end
    
    # 
    # Sets the value of the `quota` attribute.
    # 
    # @param value [Quota, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Quota} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def quota=(value)
      if value.is_a?(Hash)
        value = Quota.new(value)
      end
      @quota = value
    end
    
    # 
    # Returns the value of the `read_only` attribute.
    # 
    # @return [Boolean]
    # 
    def read_only
      @read_only
    end
    
    # 
    # Sets the value of the `read_only` attribute.
    # 
    # @param value [Boolean]
    # 
    def read_only=(value)
      @read_only = value
    end
    
    # 
    # Returns the value of the `sgio` attribute.
    # 
    # @return [ScsiGenericIO]
    # 
    def sgio
      @sgio
    end
    
    # 
    # Sets the value of the `sgio` attribute.
    # 
    # @param value [ScsiGenericIO]
    # 
    def sgio=(value)
      @sgio = value
    end
    
    # 
    # Returns the value of the `shareable` attribute.
    # 
    # @return [Boolean]
    # 
    def shareable
      @shareable
    end
    
    # 
    # Sets the value of the `shareable` attribute.
    # 
    # @param value [Boolean]
    # 
    def shareable=(value)
      @shareable = value
    end
    
    # 
    # Returns the value of the `snapshot` attribute.
    # 
    # @return [Snapshot]
    # 
    def snapshot
      @snapshot
    end
    
    # 
    # Sets the value of the `snapshot` attribute.
    # 
    # @param value [Snapshot, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Snapshot} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def snapshot=(value)
      if value.is_a?(Hash)
        value = Snapshot.new(value)
      end
      @snapshot = value
    end
    
    # 
    # Returns the value of the `sparse` attribute.
    # 
    # @return [Boolean]
    # 
    def sparse
      @sparse
    end
    
    # 
    # Sets the value of the `sparse` attribute.
    # 
    # @param value [Boolean]
    # 
    def sparse=(value)
      @sparse = value
    end
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [DiskStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [DiskStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `storage_domains` attribute.
    # 
    # @return [Array<StorageDomain>]
    # 
    def storage_domains
      @storage_domains
    end
    
    # 
    # Sets the value of the `storage_domains` attribute.
    # 
    # @param list [Array<StorageDomain>]
    # 
    def storage_domains=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = StorageDomain.new(value)
          end
        end
      end
      @storage_domains = list
    end
    
    # 
    # Returns the value of the `storage_type` attribute.
    # 
    # @return [DiskStorageType]
    # 
    def storage_type
      @storage_type
    end
    
    # 
    # Sets the value of the `storage_type` attribute.
    # 
    # @param value [DiskStorageType]
    # 
    def storage_type=(value)
      @storage_type = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `total_size` attribute.
    # 
    # @return [Integer]
    # 
    def total_size
      @total_size
    end
    
    # 
    # Sets the value of the `total_size` attribute.
    # 
    # @param value [Integer]
    # 
    def total_size=(value)
      @total_size = value
    end
    
    # 
    # Returns the value of the `uses_scsi_reservation` attribute.
    # 
    # @return [Boolean]
    # 
    def uses_scsi_reservation
      @uses_scsi_reservation
    end
    
    # 
    # Sets the value of the `uses_scsi_reservation` attribute.
    # 
    # @param value [Boolean]
    # 
    def uses_scsi_reservation=(value)
      @uses_scsi_reservation = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Returns the value of the `wipe_after_delete` attribute.
    # 
    # @return [Boolean]
    # 
    def wipe_after_delete
      @wipe_after_delete
    end
    
    # 
    # Sets the value of the `wipe_after_delete` attribute.
    # 
    # @param value [Boolean]
    # 
    def wipe_after_delete=(value)
      @wipe_after_delete = value
    end
    
    # 
    # Creates a new instance of the {Disk} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :active The value of attribute `active`.
    # 
    # @option opts [Integer] :actual_size The value of attribute `actual_size`.
    # 
    # @option opts [String] :alias_ The value of attribute `alias_`.
    # 
    # @option opts [DiskBackup] :backup The value of attribute `backup`.
    # 
    # @option opts [DiskBackupMode] :backup_mode The value of attribute `backup_mode`.
    # 
    # @option opts [Boolean] :bootable The value of attribute `bootable`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [DiskContentType] :content_type The value of attribute `content_type`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [DiskProfile, Hash] :disk_profile The value of attribute `disk_profile`.
    # 
    # @option opts [Array<DiskSnapshot>, Array<Hash>] :disk_snapshots The values of attribute `disk_snapshots`.
    # 
    # @option opts [String] :external_disk The value of attribute `external_disk`.
    # 
    # @option opts [DiskFormat] :format The value of attribute `format`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :image_id The value of attribute `image_id`.
    # 
    # @option opts [Integer] :initial_size The value of attribute `initial_size`.
    # 
    # @option opts [InstanceType, Hash] :instance_type The value of attribute `instance_type`.
    # 
    # @option opts [DiskInterface] :interface The value of attribute `interface`.
    # 
    # @option opts [String] :logical_name The value of attribute `logical_name`.
    # 
    # @option opts [HostStorage, Hash] :lun_storage The value of attribute `lun_storage`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [OpenStackVolumeType, Hash] :openstack_volume_type The value of attribute `openstack_volume_type`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [Boolean] :propagate_errors The value of attribute `propagate_errors`.
    # 
    # @option opts [Integer] :provisioned_size The value of attribute `provisioned_size`.
    # 
    # @option opts [QcowVersion] :qcow_version The value of attribute `qcow_version`.
    # 
    # @option opts [Quota, Hash] :quota The value of attribute `quota`.
    # 
    # @option opts [Boolean] :read_only The value of attribute `read_only`.
    # 
    # @option opts [ScsiGenericIO] :sgio The value of attribute `sgio`.
    # 
    # @option opts [Boolean] :shareable The value of attribute `shareable`.
    # 
    # @option opts [Snapshot, Hash] :snapshot The value of attribute `snapshot`.
    # 
    # @option opts [Boolean] :sparse The value of attribute `sparse`.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # @option opts [DiskStatus] :status The value of attribute `status`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [Array<StorageDomain>, Array<Hash>] :storage_domains The values of attribute `storage_domains`.
    # 
    # @option opts [DiskStorageType] :storage_type The value of attribute `storage_type`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [Integer] :total_size The value of attribute `total_size`.
    # 
    # @option opts [Boolean] :uses_scsi_reservation The value of attribute `uses_scsi_reservation`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # @option opts [Boolean] :wipe_after_delete The value of attribute `wipe_after_delete`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.active = opts[:active]
      self.actual_size = opts[:actual_size]
      self.alias_ = opts[:alias_]
      self.backup = opts[:backup]
      self.backup_mode = opts[:backup_mode]
      self.bootable = opts[:bootable]
      self.content_type = opts[:content_type]
      self.disk_profile = opts[:disk_profile]
      self.disk_snapshots = opts[:disk_snapshots]
      self.external_disk = opts[:external_disk]
      self.format = opts[:format]
      self.image_id = opts[:image_id]
      self.initial_size = opts[:initial_size]
      self.interface = opts[:interface]
      self.logical_name = opts[:logical_name]
      self.lun_storage = opts[:lun_storage]
      self.openstack_volume_type = opts[:openstack_volume_type]
      self.permissions = opts[:permissions]
      self.propagate_errors = opts[:propagate_errors]
      self.provisioned_size = opts[:provisioned_size]
      self.qcow_version = opts[:qcow_version]
      self.quota = opts[:quota]
      self.read_only = opts[:read_only]
      self.sgio = opts[:sgio]
      self.shareable = opts[:shareable]
      self.snapshot = opts[:snapshot]
      self.sparse = opts[:sparse]
      self.statistics = opts[:statistics]
      self.status = opts[:status]
      self.storage_domain = opts[:storage_domain]
      self.storage_domains = opts[:storage_domains]
      self.storage_type = opts[:storage_type]
      self.total_size = opts[:total_size]
      self.uses_scsi_reservation = opts[:uses_scsi_reservation]
      self.wipe_after_delete = opts[:wipe_after_delete]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @active == other.active &&
      @actual_size == other.actual_size &&
      @alias_ == other.alias_ &&
      @backup == other.backup &&
      @backup_mode == other.backup_mode &&
      @bootable == other.bootable &&
      @content_type == other.content_type &&
      @disk_profile == other.disk_profile &&
      @disk_snapshots == other.disk_snapshots &&
      @external_disk == other.external_disk &&
      @format == other.format &&
      @image_id == other.image_id &&
      @initial_size == other.initial_size &&
      @interface == other.interface &&
      @logical_name == other.logical_name &&
      @lun_storage == other.lun_storage &&
      @openstack_volume_type == other.openstack_volume_type &&
      @permissions == other.permissions &&
      @propagate_errors == other.propagate_errors &&
      @provisioned_size == other.provisioned_size &&
      @qcow_version == other.qcow_version &&
      @quota == other.quota &&
      @read_only == other.read_only &&
      @sgio == other.sgio &&
      @shareable == other.shareable &&
      @snapshot == other.snapshot &&
      @sparse == other.sparse &&
      @statistics == other.statistics &&
      @status == other.status &&
      @storage_domain == other.storage_domain &&
      @storage_domains == other.storage_domains &&
      @storage_type == other.storage_type &&
      @total_size == other.total_size &&
      @uses_scsi_reservation == other.uses_scsi_reservation &&
      @wipe_after_delete == other.wipe_after_delete
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @active.hash +
      @actual_size.hash +
      @alias_.hash +
      @backup.hash +
      @backup_mode.hash +
      @bootable.hash +
      @content_type.hash +
      @disk_profile.hash +
      @disk_snapshots.hash +
      @external_disk.hash +
      @format.hash +
      @image_id.hash +
      @initial_size.hash +
      @interface.hash +
      @logical_name.hash +
      @lun_storage.hash +
      @openstack_volume_type.hash +
      @permissions.hash +
      @propagate_errors.hash +
      @provisioned_size.hash +
      @qcow_version.hash +
      @quota.hash +
      @read_only.hash +
      @sgio.hash +
      @shareable.hash +
      @snapshot.hash +
      @sparse.hash +
      @statistics.hash +
      @status.hash +
      @storage_domain.hash +
      @storage_domains.hash +
      @storage_type.hash +
      @total_size.hash +
      @uses_scsi_reservation.hash +
      @wipe_after_delete.hash
    end
    
  end
  
  class DiskAttachment < Identified
    
    # 
    # Returns the value of the `active` attribute.
    # 
    # @return [Boolean]
    # 
    def active
      @active
    end
    
    # 
    # Sets the value of the `active` attribute.
    # 
    # @param value [Boolean]
    # 
    def active=(value)
      @active = value
    end
    
    # 
    # Returns the value of the `bootable` attribute.
    # 
    # @return [Boolean]
    # 
    def bootable
      @bootable
    end
    
    # 
    # Sets the value of the `bootable` attribute.
    # 
    # @param value [Boolean]
    # 
    def bootable=(value)
      @bootable = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `disk` attribute.
    # 
    # @return [Disk]
    # 
    def disk
      @disk
    end
    
    # 
    # Sets the value of the `disk` attribute.
    # 
    # @param value [Disk, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Disk} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def disk=(value)
      if value.is_a?(Hash)
        value = Disk.new(value)
      end
      @disk = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `interface` attribute.
    # 
    # @return [DiskInterface]
    # 
    def interface
      @interface
    end
    
    # 
    # Sets the value of the `interface` attribute.
    # 
    # @param value [DiskInterface]
    # 
    def interface=(value)
      @interface = value
    end
    
    # 
    # Returns the value of the `logical_name` attribute.
    # 
    # @return [String]
    # 
    def logical_name
      @logical_name
    end
    
    # 
    # Sets the value of the `logical_name` attribute.
    # 
    # @param value [String]
    # 
    def logical_name=(value)
      @logical_name = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `pass_discard` attribute.
    # 
    # @return [Boolean]
    # 
    def pass_discard
      @pass_discard
    end
    
    # 
    # Sets the value of the `pass_discard` attribute.
    # 
    # @param value [Boolean]
    # 
    def pass_discard=(value)
      @pass_discard = value
    end
    
    # 
    # Returns the value of the `read_only` attribute.
    # 
    # @return [Boolean]
    # 
    def read_only
      @read_only
    end
    
    # 
    # Sets the value of the `read_only` attribute.
    # 
    # @param value [Boolean]
    # 
    def read_only=(value)
      @read_only = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `uses_scsi_reservation` attribute.
    # 
    # @return [Boolean]
    # 
    def uses_scsi_reservation
      @uses_scsi_reservation
    end
    
    # 
    # Sets the value of the `uses_scsi_reservation` attribute.
    # 
    # @param value [Boolean]
    # 
    def uses_scsi_reservation=(value)
      @uses_scsi_reservation = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {DiskAttachment} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :active The value of attribute `active`.
    # 
    # @option opts [Boolean] :bootable The value of attribute `bootable`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Disk, Hash] :disk The value of attribute `disk`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [DiskInterface] :interface The value of attribute `interface`.
    # 
    # @option opts [String] :logical_name The value of attribute `logical_name`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Boolean] :pass_discard The value of attribute `pass_discard`.
    # 
    # @option opts [Boolean] :read_only The value of attribute `read_only`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [Boolean] :uses_scsi_reservation The value of attribute `uses_scsi_reservation`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.active = opts[:active]
      self.bootable = opts[:bootable]
      self.disk = opts[:disk]
      self.interface = opts[:interface]
      self.logical_name = opts[:logical_name]
      self.pass_discard = opts[:pass_discard]
      self.read_only = opts[:read_only]
      self.template = opts[:template]
      self.uses_scsi_reservation = opts[:uses_scsi_reservation]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @active == other.active &&
      @bootable == other.bootable &&
      @disk == other.disk &&
      @interface == other.interface &&
      @logical_name == other.logical_name &&
      @pass_discard == other.pass_discard &&
      @read_only == other.read_only &&
      @template == other.template &&
      @uses_scsi_reservation == other.uses_scsi_reservation &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @active.hash +
      @bootable.hash +
      @disk.hash +
      @interface.hash +
      @logical_name.hash +
      @pass_discard.hash +
      @read_only.hash +
      @template.hash +
      @uses_scsi_reservation.hash +
      @vm.hash
    end
    
  end
  
  class DiskProfile < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `qos` attribute.
    # 
    # @return [Qos]
    # 
    def qos
      @qos
    end
    
    # 
    # Sets the value of the `qos` attribute.
    # 
    # @param value [Qos, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Qos} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def qos=(value)
      if value.is_a?(Hash)
        value = Qos.new(value)
      end
      @qos = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Creates a new instance of the {DiskProfile} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [Qos, Hash] :qos The value of attribute `qos`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.permissions = opts[:permissions]
      self.qos = opts[:qos]
      self.storage_domain = opts[:storage_domain]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @permissions == other.permissions &&
      @qos == other.qos &&
      @storage_domain == other.storage_domain
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @permissions.hash +
      @qos.hash +
      @storage_domain.hash
    end
    
  end
  
  class DiskSnapshot < Disk
    
    # 
    # Returns the value of the `active` attribute.
    # 
    # @return [Boolean]
    # 
    def active
      @active
    end
    
    # 
    # Sets the value of the `active` attribute.
    # 
    # @param value [Boolean]
    # 
    def active=(value)
      @active = value
    end
    
    # 
    # Returns the value of the `actual_size` attribute.
    # 
    # @return [Integer]
    # 
    def actual_size
      @actual_size
    end
    
    # 
    # Sets the value of the `actual_size` attribute.
    # 
    # @param value [Integer]
    # 
    def actual_size=(value)
      @actual_size = value
    end
    
    # 
    # Returns the value of the `alias_` attribute.
    # 
    # @return [String]
    # 
    def alias_
      @alias_
    end
    
    # 
    # Sets the value of the `alias_` attribute.
    # 
    # @param value [String]
    # 
    def alias_=(value)
      @alias_ = value
    end
    
    # 
    # Returns the value of the `backup` attribute.
    # 
    # @return [DiskBackup]
    # 
    def backup
      @backup
    end
    
    # 
    # Sets the value of the `backup` attribute.
    # 
    # @param value [DiskBackup]
    # 
    def backup=(value)
      @backup = value
    end
    
    # 
    # Returns the value of the `backup_mode` attribute.
    # 
    # @return [DiskBackupMode]
    # 
    def backup_mode
      @backup_mode
    end
    
    # 
    # Sets the value of the `backup_mode` attribute.
    # 
    # @param value [DiskBackupMode]
    # 
    def backup_mode=(value)
      @backup_mode = value
    end
    
    # 
    # Returns the value of the `bootable` attribute.
    # 
    # @return [Boolean]
    # 
    def bootable
      @bootable
    end
    
    # 
    # Sets the value of the `bootable` attribute.
    # 
    # @param value [Boolean]
    # 
    def bootable=(value)
      @bootable = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `content_type` attribute.
    # 
    # @return [DiskContentType]
    # 
    def content_type
      @content_type
    end
    
    # 
    # Sets the value of the `content_type` attribute.
    # 
    # @param value [DiskContentType]
    # 
    def content_type=(value)
      @content_type = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `disk` attribute.
    # 
    # @return [Disk]
    # 
    def disk
      @disk
    end
    
    # 
    # Sets the value of the `disk` attribute.
    # 
    # @param value [Disk, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Disk} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def disk=(value)
      if value.is_a?(Hash)
        value = Disk.new(value)
      end
      @disk = value
    end
    
    # 
    # Returns the value of the `disk_profile` attribute.
    # 
    # @return [DiskProfile]
    # 
    def disk_profile
      @disk_profile
    end
    
    # 
    # Sets the value of the `disk_profile` attribute.
    # 
    # @param value [DiskProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DiskProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def disk_profile=(value)
      if value.is_a?(Hash)
        value = DiskProfile.new(value)
      end
      @disk_profile = value
    end
    
    # 
    # Returns the value of the `disk_snapshots` attribute.
    # 
    # @return [Array<DiskSnapshot>]
    # 
    def disk_snapshots
      @disk_snapshots
    end
    
    # 
    # Sets the value of the `disk_snapshots` attribute.
    # 
    # @param list [Array<DiskSnapshot>]
    # 
    def disk_snapshots=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = DiskSnapshot.new(value)
          end
        end
      end
      @disk_snapshots = list
    end
    
    # 
    # Returns the value of the `external_disk` attribute.
    # 
    # @return [String]
    # 
    def external_disk
      @external_disk
    end
    
    # 
    # Sets the value of the `external_disk` attribute.
    # 
    # @param value [String]
    # 
    def external_disk=(value)
      @external_disk = value
    end
    
    # 
    # Returns the value of the `format` attribute.
    # 
    # @return [DiskFormat]
    # 
    def format
      @format
    end
    
    # 
    # Sets the value of the `format` attribute.
    # 
    # @param value [DiskFormat]
    # 
    def format=(value)
      @format = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `image_id` attribute.
    # 
    # @return [String]
    # 
    def image_id
      @image_id
    end
    
    # 
    # Sets the value of the `image_id` attribute.
    # 
    # @param value [String]
    # 
    def image_id=(value)
      @image_id = value
    end
    
    # 
    # Returns the value of the `initial_size` attribute.
    # 
    # @return [Integer]
    # 
    def initial_size
      @initial_size
    end
    
    # 
    # Sets the value of the `initial_size` attribute.
    # 
    # @param value [Integer]
    # 
    def initial_size=(value)
      @initial_size = value
    end
    
    # 
    # Returns the value of the `instance_type` attribute.
    # 
    # @return [InstanceType]
    # 
    def instance_type
      @instance_type
    end
    
    # 
    # Sets the value of the `instance_type` attribute.
    # 
    # @param value [InstanceType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::InstanceType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def instance_type=(value)
      if value.is_a?(Hash)
        value = InstanceType.new(value)
      end
      @instance_type = value
    end
    
    # 
    # Returns the value of the `interface` attribute.
    # 
    # @return [DiskInterface]
    # 
    def interface
      @interface
    end
    
    # 
    # Sets the value of the `interface` attribute.
    # 
    # @param value [DiskInterface]
    # 
    def interface=(value)
      @interface = value
    end
    
    # 
    # Returns the value of the `logical_name` attribute.
    # 
    # @return [String]
    # 
    def logical_name
      @logical_name
    end
    
    # 
    # Sets the value of the `logical_name` attribute.
    # 
    # @param value [String]
    # 
    def logical_name=(value)
      @logical_name = value
    end
    
    # 
    # Returns the value of the `lun_storage` attribute.
    # 
    # @return [HostStorage]
    # 
    def lun_storage
      @lun_storage
    end
    
    # 
    # Sets the value of the `lun_storage` attribute.
    # 
    # @param value [HostStorage, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostStorage} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def lun_storage=(value)
      if value.is_a?(Hash)
        value = HostStorage.new(value)
      end
      @lun_storage = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `openstack_volume_type` attribute.
    # 
    # @return [OpenStackVolumeType]
    # 
    def openstack_volume_type
      @openstack_volume_type
    end
    
    # 
    # Sets the value of the `openstack_volume_type` attribute.
    # 
    # @param value [OpenStackVolumeType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::OpenStackVolumeType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def openstack_volume_type=(value)
      if value.is_a?(Hash)
        value = OpenStackVolumeType.new(value)
      end
      @openstack_volume_type = value
    end
    
    # 
    # Returns the value of the `parent` attribute.
    # 
    # @return [DiskSnapshot]
    # 
    def parent
      @parent
    end
    
    # 
    # Sets the value of the `parent` attribute.
    # 
    # @param value [DiskSnapshot, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DiskSnapshot} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def parent=(value)
      if value.is_a?(Hash)
        value = DiskSnapshot.new(value)
      end
      @parent = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `propagate_errors` attribute.
    # 
    # @return [Boolean]
    # 
    def propagate_errors
      @propagate_errors
    end
    
    # 
    # Sets the value of the `propagate_errors` attribute.
    # 
    # @param value [Boolean]
    # 
    def propagate_errors=(value)
      @propagate_errors = value
    end
    
    # 
    # Returns the value of the `provisioned_size` attribute.
    # 
    # @return [Integer]
    # 
    def provisioned_size
      @provisioned_size
    end
    
    # 
    # Sets the value of the `provisioned_size` attribute.
    # 
    # @param value [Integer]
    # 
    def provisioned_size=(value)
      @provisioned_size = value
    end
    
    # 
    # Returns the value of the `qcow_version` attribute.
    # 
    # @return [QcowVersion]
    # 
    def qcow_version
      @qcow_version
    end
    
    # 
    # Sets the value of the `qcow_version` attribute.
    # 
    # @param value [QcowVersion]
    # 
    def qcow_version=(value)
      @qcow_version = value
    end
    
    # 
    # Returns the value of the `quota` attribute.
    # 
    # @return [Quota]
    # 
    def quota
      @quota
    end
    
    # 
    # Sets the value of the `quota` attribute.
    # 
    # @param value [Quota, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Quota} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def quota=(value)
      if value.is_a?(Hash)
        value = Quota.new(value)
      end
      @quota = value
    end
    
    # 
    # Returns the value of the `read_only` attribute.
    # 
    # @return [Boolean]
    # 
    def read_only
      @read_only
    end
    
    # 
    # Sets the value of the `read_only` attribute.
    # 
    # @param value [Boolean]
    # 
    def read_only=(value)
      @read_only = value
    end
    
    # 
    # Returns the value of the `sgio` attribute.
    # 
    # @return [ScsiGenericIO]
    # 
    def sgio
      @sgio
    end
    
    # 
    # Sets the value of the `sgio` attribute.
    # 
    # @param value [ScsiGenericIO]
    # 
    def sgio=(value)
      @sgio = value
    end
    
    # 
    # Returns the value of the `shareable` attribute.
    # 
    # @return [Boolean]
    # 
    def shareable
      @shareable
    end
    
    # 
    # Sets the value of the `shareable` attribute.
    # 
    # @param value [Boolean]
    # 
    def shareable=(value)
      @shareable = value
    end
    
    # 
    # Returns the value of the `snapshot` attribute.
    # 
    # @return [Snapshot]
    # 
    def snapshot
      @snapshot
    end
    
    # 
    # Sets the value of the `snapshot` attribute.
    # 
    # @param value [Snapshot, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Snapshot} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def snapshot=(value)
      if value.is_a?(Hash)
        value = Snapshot.new(value)
      end
      @snapshot = value
    end
    
    # 
    # Returns the value of the `sparse` attribute.
    # 
    # @return [Boolean]
    # 
    def sparse
      @sparse
    end
    
    # 
    # Sets the value of the `sparse` attribute.
    # 
    # @param value [Boolean]
    # 
    def sparse=(value)
      @sparse = value
    end
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [DiskStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [DiskStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `storage_domains` attribute.
    # 
    # @return [Array<StorageDomain>]
    # 
    def storage_domains
      @storage_domains
    end
    
    # 
    # Sets the value of the `storage_domains` attribute.
    # 
    # @param list [Array<StorageDomain>]
    # 
    def storage_domains=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = StorageDomain.new(value)
          end
        end
      end
      @storage_domains = list
    end
    
    # 
    # Returns the value of the `storage_type` attribute.
    # 
    # @return [DiskStorageType]
    # 
    def storage_type
      @storage_type
    end
    
    # 
    # Sets the value of the `storage_type` attribute.
    # 
    # @param value [DiskStorageType]
    # 
    def storage_type=(value)
      @storage_type = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `total_size` attribute.
    # 
    # @return [Integer]
    # 
    def total_size
      @total_size
    end
    
    # 
    # Sets the value of the `total_size` attribute.
    # 
    # @param value [Integer]
    # 
    def total_size=(value)
      @total_size = value
    end
    
    # 
    # Returns the value of the `uses_scsi_reservation` attribute.
    # 
    # @return [Boolean]
    # 
    def uses_scsi_reservation
      @uses_scsi_reservation
    end
    
    # 
    # Sets the value of the `uses_scsi_reservation` attribute.
    # 
    # @param value [Boolean]
    # 
    def uses_scsi_reservation=(value)
      @uses_scsi_reservation = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Returns the value of the `wipe_after_delete` attribute.
    # 
    # @return [Boolean]
    # 
    def wipe_after_delete
      @wipe_after_delete
    end
    
    # 
    # Sets the value of the `wipe_after_delete` attribute.
    # 
    # @param value [Boolean]
    # 
    def wipe_after_delete=(value)
      @wipe_after_delete = value
    end
    
    # 
    # Creates a new instance of the {DiskSnapshot} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Boolean] :active The value of attribute `active`.
    # 
    # @option opts [Integer] :actual_size The value of attribute `actual_size`.
    # 
    # @option opts [String] :alias_ The value of attribute `alias_`.
    # 
    # @option opts [DiskBackup] :backup The value of attribute `backup`.
    # 
    # @option opts [DiskBackupMode] :backup_mode The value of attribute `backup_mode`.
    # 
    # @option opts [Boolean] :bootable The value of attribute `bootable`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [DiskContentType] :content_type The value of attribute `content_type`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Disk, Hash] :disk The value of attribute `disk`.
    # 
    # @option opts [DiskProfile, Hash] :disk_profile The value of attribute `disk_profile`.
    # 
    # @option opts [Array<DiskSnapshot>, Array<Hash>] :disk_snapshots The values of attribute `disk_snapshots`.
    # 
    # @option opts [String] :external_disk The value of attribute `external_disk`.
    # 
    # @option opts [DiskFormat] :format The value of attribute `format`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :image_id The value of attribute `image_id`.
    # 
    # @option opts [Integer] :initial_size The value of attribute `initial_size`.
    # 
    # @option opts [InstanceType, Hash] :instance_type The value of attribute `instance_type`.
    # 
    # @option opts [DiskInterface] :interface The value of attribute `interface`.
    # 
    # @option opts [String] :logical_name The value of attribute `logical_name`.
    # 
    # @option opts [HostStorage, Hash] :lun_storage The value of attribute `lun_storage`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [OpenStackVolumeType, Hash] :openstack_volume_type The value of attribute `openstack_volume_type`.
    # 
    # @option opts [DiskSnapshot, Hash] :parent The value of attribute `parent`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [Boolean] :propagate_errors The value of attribute `propagate_errors`.
    # 
    # @option opts [Integer] :provisioned_size The value of attribute `provisioned_size`.
    # 
    # @option opts [QcowVersion] :qcow_version The value of attribute `qcow_version`.
    # 
    # @option opts [Quota, Hash] :quota The value of attribute `quota`.
    # 
    # @option opts [Boolean] :read_only The value of attribute `read_only`.
    # 
    # @option opts [ScsiGenericIO] :sgio The value of attribute `sgio`.
    # 
    # @option opts [Boolean] :shareable The value of attribute `shareable`.
    # 
    # @option opts [Snapshot, Hash] :snapshot The value of attribute `snapshot`.
    # 
    # @option opts [Boolean] :sparse The value of attribute `sparse`.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # @option opts [DiskStatus] :status The value of attribute `status`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [Array<StorageDomain>, Array<Hash>] :storage_domains The values of attribute `storage_domains`.
    # 
    # @option opts [DiskStorageType] :storage_type The value of attribute `storage_type`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [Integer] :total_size The value of attribute `total_size`.
    # 
    # @option opts [Boolean] :uses_scsi_reservation The value of attribute `uses_scsi_reservation`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # @option opts [Boolean] :wipe_after_delete The value of attribute `wipe_after_delete`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.disk = opts[:disk]
      self.parent = opts[:parent]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @disk == other.disk &&
      @parent == other.parent
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @disk.hash +
      @parent.hash
    end
    
  end
  
  class Domain < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `groups` attribute.
    # 
    # @return [Array<Group>]
    # 
    def groups
      @groups
    end
    
    # 
    # Sets the value of the `groups` attribute.
    # 
    # @param list [Array<Group>]
    # 
    def groups=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Group.new(value)
          end
        end
      end
      @groups = list
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `user` attribute.
    # 
    # @return [User]
    # 
    def user
      @user
    end
    
    # 
    # Sets the value of the `user` attribute.
    # 
    # @param value [User, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::User} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def user=(value)
      if value.is_a?(Hash)
        value = User.new(value)
      end
      @user = value
    end
    
    # 
    # Returns the value of the `users` attribute.
    # 
    # @return [Array<User>]
    # 
    def users
      @users
    end
    
    # 
    # Sets the value of the `users` attribute.
    # 
    # @param list [Array<User>]
    # 
    def users=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = User.new(value)
          end
        end
      end
      @users = list
    end
    
    # 
    # Creates a new instance of the {Domain} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Array<Group>, Array<Hash>] :groups The values of attribute `groups`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [User, Hash] :user The value of attribute `user`.
    # 
    # @option opts [Array<User>, Array<Hash>] :users The values of attribute `users`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.groups = opts[:groups]
      self.user = opts[:user]
      self.users = opts[:users]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @groups == other.groups &&
      @user == other.user &&
      @users == other.users
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @groups.hash +
      @user.hash +
      @users.hash
    end
    
  end
  
  class Event < Identified
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `code` attribute.
    # 
    # @return [Integer]
    # 
    def code
      @code
    end
    
    # 
    # Sets the value of the `code` attribute.
    # 
    # @param value [Integer]
    # 
    def code=(value)
      @code = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `correlation_id` attribute.
    # 
    # @return [String]
    # 
    def correlation_id
      @correlation_id
    end
    
    # 
    # Sets the value of the `correlation_id` attribute.
    # 
    # @param value [String]
    # 
    def correlation_id=(value)
      @correlation_id = value
    end
    
    # 
    # Returns the value of the `custom_data` attribute.
    # 
    # @return [String]
    # 
    def custom_data
      @custom_data
    end
    
    # 
    # Sets the value of the `custom_data` attribute.
    # 
    # @param value [String]
    # 
    def custom_data=(value)
      @custom_data = value
    end
    
    # 
    # Returns the value of the `custom_id` attribute.
    # 
    # @return [Integer]
    # 
    def custom_id
      @custom_id
    end
    
    # 
    # Sets the value of the `custom_id` attribute.
    # 
    # @param value [Integer]
    # 
    def custom_id=(value)
      @custom_id = value
    end
    
    # 
    # Returns the value of the `data_center` attribute.
    # 
    # @return [DataCenter]
    # 
    def data_center
      @data_center
    end
    
    # 
    # Sets the value of the `data_center` attribute.
    # 
    # @param value [DataCenter, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DataCenter} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def data_center=(value)
      if value.is_a?(Hash)
        value = DataCenter.new(value)
      end
      @data_center = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `flood_rate` attribute.
    # 
    # @return [Integer]
    # 
    def flood_rate
      @flood_rate
    end
    
    # 
    # Sets the value of the `flood_rate` attribute.
    # 
    # @param value [Integer]
    # 
    def flood_rate=(value)
      @flood_rate = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `index` attribute.
    # 
    # @return [Integer]
    # 
    def index
      @index
    end
    
    # 
    # Sets the value of the `index` attribute.
    # 
    # @param value [Integer]
    # 
    def index=(value)
      @index = value
    end
    
    # 
    # Returns the value of the `log_on_host` attribute.
    # 
    # @return [Boolean]
    # 
    def log_on_host
      @log_on_host
    end
    
    # 
    # Sets the value of the `log_on_host` attribute.
    # 
    # @param value [Boolean]
    # 
    def log_on_host=(value)
      @log_on_host = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `origin` attribute.
    # 
    # @return [String]
    # 
    def origin
      @origin
    end
    
    # 
    # Sets the value of the `origin` attribute.
    # 
    # @param value [String]
    # 
    def origin=(value)
      @origin = value
    end
    
    # 
    # Returns the value of the `severity` attribute.
    # 
    # @return [LogSeverity]
    # 
    def severity
      @severity
    end
    
    # 
    # Sets the value of the `severity` attribute.
    # 
    # @param value [LogSeverity]
    # 
    def severity=(value)
      @severity = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `time` attribute.
    # 
    # @return [DateTime]
    # 
    def time
      @time
    end
    
    # 
    # Sets the value of the `time` attribute.
    # 
    # @param value [DateTime]
    # 
    def time=(value)
      @time = value
    end
    
    # 
    # Returns the value of the `user` attribute.
    # 
    # @return [User]
    # 
    def user
      @user
    end
    
    # 
    # Sets the value of the `user` attribute.
    # 
    # @param value [User, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::User} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def user=(value)
      if value.is_a?(Hash)
        value = User.new(value)
      end
      @user = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {Event} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [Integer] :code The value of attribute `code`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :correlation_id The value of attribute `correlation_id`.
    # 
    # @option opts [String] :custom_data The value of attribute `custom_data`.
    # 
    # @option opts [Integer] :custom_id The value of attribute `custom_id`.
    # 
    # @option opts [DataCenter, Hash] :data_center The value of attribute `data_center`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Integer] :flood_rate The value of attribute `flood_rate`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Integer] :index The value of attribute `index`.
    # 
    # @option opts [Boolean] :log_on_host The value of attribute `log_on_host`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :origin The value of attribute `origin`.
    # 
    # @option opts [LogSeverity] :severity The value of attribute `severity`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [DateTime] :time The value of attribute `time`.
    # 
    # @option opts [User, Hash] :user The value of attribute `user`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cluster = opts[:cluster]
      self.code = opts[:code]
      self.correlation_id = opts[:correlation_id]
      self.custom_data = opts[:custom_data]
      self.custom_id = opts[:custom_id]
      self.data_center = opts[:data_center]
      self.flood_rate = opts[:flood_rate]
      self.host = opts[:host]
      self.index = opts[:index]
      self.log_on_host = opts[:log_on_host]
      self.origin = opts[:origin]
      self.severity = opts[:severity]
      self.storage_domain = opts[:storage_domain]
      self.template = opts[:template]
      self.time = opts[:time]
      self.user = opts[:user]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cluster == other.cluster &&
      @code == other.code &&
      @correlation_id == other.correlation_id &&
      @custom_data == other.custom_data &&
      @custom_id == other.custom_id &&
      @data_center == other.data_center &&
      @flood_rate == other.flood_rate &&
      @host == other.host &&
      @index == other.index &&
      @log_on_host == other.log_on_host &&
      @origin == other.origin &&
      @severity == other.severity &&
      @storage_domain == other.storage_domain &&
      @template == other.template &&
      @time == other.time &&
      @user == other.user &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cluster.hash +
      @code.hash +
      @correlation_id.hash +
      @custom_data.hash +
      @custom_id.hash +
      @data_center.hash +
      @flood_rate.hash +
      @host.hash +
      @index.hash +
      @log_on_host.hash +
      @origin.hash +
      @severity.hash +
      @storage_domain.hash +
      @template.hash +
      @time.hash +
      @user.hash +
      @vm.hash
    end
    
  end
  
  class EventSubscription < Identified
    
    # 
    # Returns the value of the `address` attribute.
    # 
    # @return [String]
    # 
    def address
      @address
    end
    
    # 
    # Sets the value of the `address` attribute.
    # 
    # @param value [String]
    # 
    def address=(value)
      @address = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `event` attribute.
    # 
    # @return [NotifiableEvent]
    # 
    def event
      @event
    end
    
    # 
    # Sets the value of the `event` attribute.
    # 
    # @param value [NotifiableEvent]
    # 
    def event=(value)
      @event = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `notification_method` attribute.
    # 
    # @return [NotificationMethod]
    # 
    def notification_method
      @notification_method
    end
    
    # 
    # Sets the value of the `notification_method` attribute.
    # 
    # @param value [NotificationMethod]
    # 
    def notification_method=(value)
      @notification_method = value
    end
    
    # 
    # Returns the value of the `user` attribute.
    # 
    # @return [User]
    # 
    def user
      @user
    end
    
    # 
    # Sets the value of the `user` attribute.
    # 
    # @param value [User, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::User} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def user=(value)
      if value.is_a?(Hash)
        value = User.new(value)
      end
      @user = value
    end
    
    # 
    # Creates a new instance of the {EventSubscription} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :address The value of attribute `address`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [NotifiableEvent] :event The value of attribute `event`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [NotificationMethod] :notification_method The value of attribute `notification_method`.
    # 
    # @option opts [User, Hash] :user The value of attribute `user`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.address = opts[:address]
      self.event = opts[:event]
      self.notification_method = opts[:notification_method]
      self.user = opts[:user]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @address == other.address &&
      @event == other.event &&
      @notification_method == other.notification_method &&
      @user == other.user
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @address.hash +
      @event.hash +
      @notification_method.hash +
      @user.hash
    end
    
  end
  
  class ExternalComputeResource < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `external_host_provider` attribute.
    # 
    # @return [ExternalHostProvider]
    # 
    def external_host_provider
      @external_host_provider
    end
    
    # 
    # Sets the value of the `external_host_provider` attribute.
    # 
    # @param value [ExternalHostProvider, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ExternalHostProvider} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def external_host_provider=(value)
      if value.is_a?(Hash)
        value = ExternalHostProvider.new(value)
      end
      @external_host_provider = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `provider` attribute.
    # 
    # @return [String]
    # 
    def provider
      @provider
    end
    
    # 
    # Sets the value of the `provider` attribute.
    # 
    # @param value [String]
    # 
    def provider=(value)
      @provider = value
    end
    
    # 
    # Returns the value of the `url` attribute.
    # 
    # @return [String]
    # 
    def url
      @url
    end
    
    # 
    # Sets the value of the `url` attribute.
    # 
    # @param value [String]
    # 
    def url=(value)
      @url = value
    end
    
    # 
    # Returns the value of the `user` attribute.
    # 
    # @return [String]
    # 
    def user
      @user
    end
    
    # 
    # Sets the value of the `user` attribute.
    # 
    # @param value [String]
    # 
    def user=(value)
      @user = value
    end
    
    # 
    # Creates a new instance of the {ExternalComputeResource} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [ExternalHostProvider, Hash] :external_host_provider The value of attribute `external_host_provider`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :provider The value of attribute `provider`.
    # 
    # @option opts [String] :url The value of attribute `url`.
    # 
    # @option opts [String] :user The value of attribute `user`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.external_host_provider = opts[:external_host_provider]
      self.provider = opts[:provider]
      self.url = opts[:url]
      self.user = opts[:user]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @external_host_provider == other.external_host_provider &&
      @provider == other.provider &&
      @url == other.url &&
      @user == other.user
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @external_host_provider.hash +
      @provider.hash +
      @url.hash +
      @user.hash
    end
    
  end
  
  class ExternalDiscoveredHost < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `external_host_provider` attribute.
    # 
    # @return [ExternalHostProvider]
    # 
    def external_host_provider
      @external_host_provider
    end
    
    # 
    # Sets the value of the `external_host_provider` attribute.
    # 
    # @param value [ExternalHostProvider, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ExternalHostProvider} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def external_host_provider=(value)
      if value.is_a?(Hash)
        value = ExternalHostProvider.new(value)
      end
      @external_host_provider = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `ip` attribute.
    # 
    # @return [String]
    # 
    def ip
      @ip
    end
    
    # 
    # Sets the value of the `ip` attribute.
    # 
    # @param value [String]
    # 
    def ip=(value)
      @ip = value
    end
    
    # 
    # Returns the value of the `last_report` attribute.
    # 
    # @return [String]
    # 
    def last_report
      @last_report
    end
    
    # 
    # Sets the value of the `last_report` attribute.
    # 
    # @param value [String]
    # 
    def last_report=(value)
      @last_report = value
    end
    
    # 
    # Returns the value of the `mac` attribute.
    # 
    # @return [String]
    # 
    def mac
      @mac
    end
    
    # 
    # Sets the value of the `mac` attribute.
    # 
    # @param value [String]
    # 
    def mac=(value)
      @mac = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `subnet_name` attribute.
    # 
    # @return [String]
    # 
    def subnet_name
      @subnet_name
    end
    
    # 
    # Sets the value of the `subnet_name` attribute.
    # 
    # @param value [String]
    # 
    def subnet_name=(value)
      @subnet_name = value
    end
    
    # 
    # Creates a new instance of the {ExternalDiscoveredHost} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [ExternalHostProvider, Hash] :external_host_provider The value of attribute `external_host_provider`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :ip The value of attribute `ip`.
    # 
    # @option opts [String] :last_report The value of attribute `last_report`.
    # 
    # @option opts [String] :mac The value of attribute `mac`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :subnet_name The value of attribute `subnet_name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.external_host_provider = opts[:external_host_provider]
      self.ip = opts[:ip]
      self.last_report = opts[:last_report]
      self.mac = opts[:mac]
      self.subnet_name = opts[:subnet_name]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @external_host_provider == other.external_host_provider &&
      @ip == other.ip &&
      @last_report == other.last_report &&
      @mac == other.mac &&
      @subnet_name == other.subnet_name
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @external_host_provider.hash +
      @ip.hash +
      @last_report.hash +
      @mac.hash +
      @subnet_name.hash
    end
    
  end
  
  class ExternalHost < Identified
    
    # 
    # Returns the value of the `address` attribute.
    # 
    # @return [String]
    # 
    def address
      @address
    end
    
    # 
    # Sets the value of the `address` attribute.
    # 
    # @param value [String]
    # 
    def address=(value)
      @address = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `external_host_provider` attribute.
    # 
    # @return [ExternalHostProvider]
    # 
    def external_host_provider
      @external_host_provider
    end
    
    # 
    # Sets the value of the `external_host_provider` attribute.
    # 
    # @param value [ExternalHostProvider, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ExternalHostProvider} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def external_host_provider=(value)
      if value.is_a?(Hash)
        value = ExternalHostProvider.new(value)
      end
      @external_host_provider = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {ExternalHost} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :address The value of attribute `address`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [ExternalHostProvider, Hash] :external_host_provider The value of attribute `external_host_provider`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.address = opts[:address]
      self.external_host_provider = opts[:external_host_provider]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @address == other.address &&
      @external_host_provider == other.external_host_provider
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @address.hash +
      @external_host_provider.hash
    end
    
  end
  
  class ExternalHostGroup < Identified
    
    # 
    # Returns the value of the `architecture_name` attribute.
    # 
    # @return [String]
    # 
    def architecture_name
      @architecture_name
    end
    
    # 
    # Sets the value of the `architecture_name` attribute.
    # 
    # @param value [String]
    # 
    def architecture_name=(value)
      @architecture_name = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `domain_name` attribute.
    # 
    # @return [String]
    # 
    def domain_name
      @domain_name
    end
    
    # 
    # Sets the value of the `domain_name` attribute.
    # 
    # @param value [String]
    # 
    def domain_name=(value)
      @domain_name = value
    end
    
    # 
    # Returns the value of the `external_host_provider` attribute.
    # 
    # @return [ExternalHostProvider]
    # 
    def external_host_provider
      @external_host_provider
    end
    
    # 
    # Sets the value of the `external_host_provider` attribute.
    # 
    # @param value [ExternalHostProvider, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ExternalHostProvider} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def external_host_provider=(value)
      if value.is_a?(Hash)
        value = ExternalHostProvider.new(value)
      end
      @external_host_provider = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `operating_system_name` attribute.
    # 
    # @return [String]
    # 
    def operating_system_name
      @operating_system_name
    end
    
    # 
    # Sets the value of the `operating_system_name` attribute.
    # 
    # @param value [String]
    # 
    def operating_system_name=(value)
      @operating_system_name = value
    end
    
    # 
    # Returns the value of the `subnet_name` attribute.
    # 
    # @return [String]
    # 
    def subnet_name
      @subnet_name
    end
    
    # 
    # Sets the value of the `subnet_name` attribute.
    # 
    # @param value [String]
    # 
    def subnet_name=(value)
      @subnet_name = value
    end
    
    # 
    # Creates a new instance of the {ExternalHostGroup} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :architecture_name The value of attribute `architecture_name`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :domain_name The value of attribute `domain_name`.
    # 
    # @option opts [ExternalHostProvider, Hash] :external_host_provider The value of attribute `external_host_provider`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :operating_system_name The value of attribute `operating_system_name`.
    # 
    # @option opts [String] :subnet_name The value of attribute `subnet_name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.architecture_name = opts[:architecture_name]
      self.domain_name = opts[:domain_name]
      self.external_host_provider = opts[:external_host_provider]
      self.operating_system_name = opts[:operating_system_name]
      self.subnet_name = opts[:subnet_name]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @architecture_name == other.architecture_name &&
      @domain_name == other.domain_name &&
      @external_host_provider == other.external_host_provider &&
      @operating_system_name == other.operating_system_name &&
      @subnet_name == other.subnet_name
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @architecture_name.hash +
      @domain_name.hash +
      @external_host_provider.hash +
      @operating_system_name.hash +
      @subnet_name.hash
    end
    
  end
  
  class ExternalNetworkProviderConfiguration < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `external_network_provider` attribute.
    # 
    # @return [ExternalProvider]
    # 
    def external_network_provider
      @external_network_provider
    end
    
    # 
    # Sets the value of the `external_network_provider` attribute.
    # 
    # @param value [ExternalProvider, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ExternalProvider} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def external_network_provider=(value)
      if value.is_a?(Hash)
        value = ExternalProvider.new(value)
      end
      @external_network_provider = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {ExternalNetworkProviderConfiguration} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [ExternalProvider, Hash] :external_network_provider The value of attribute `external_network_provider`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.external_network_provider = opts[:external_network_provider]
      self.host = opts[:host]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @external_network_provider == other.external_network_provider &&
      @host == other.host
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @external_network_provider.hash +
      @host.hash
    end
    
  end
  
  class ExternalProvider < Identified
    
    # 
    # Returns the value of the `authentication_url` attribute.
    # 
    # @return [String]
    # 
    def authentication_url
      @authentication_url
    end
    
    # 
    # Sets the value of the `authentication_url` attribute.
    # 
    # @param value [String]
    # 
    def authentication_url=(value)
      @authentication_url = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `properties` attribute.
    # 
    # @return [Array<Property>]
    # 
    def properties
      @properties
    end
    
    # 
    # Sets the value of the `properties` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @properties = list
    end
    
    # 
    # Returns the value of the `requires_authentication` attribute.
    # 
    # @return [Boolean]
    # 
    def requires_authentication
      @requires_authentication
    end
    
    # 
    # Sets the value of the `requires_authentication` attribute.
    # 
    # @param value [Boolean]
    # 
    def requires_authentication=(value)
      @requires_authentication = value
    end
    
    # 
    # Returns the value of the `url` attribute.
    # 
    # @return [String]
    # 
    def url
      @url
    end
    
    # 
    # Sets the value of the `url` attribute.
    # 
    # @param value [String]
    # 
    def url=(value)
      @url = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Creates a new instance of the {ExternalProvider} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :authentication_url The value of attribute `authentication_url`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :properties The values of attribute `properties`.
    # 
    # @option opts [Boolean] :requires_authentication The value of attribute `requires_authentication`.
    # 
    # @option opts [String] :url The value of attribute `url`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.authentication_url = opts[:authentication_url]
      self.password = opts[:password]
      self.properties = opts[:properties]
      self.requires_authentication = opts[:requires_authentication]
      self.url = opts[:url]
      self.username = opts[:username]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @authentication_url == other.authentication_url &&
      @password == other.password &&
      @properties == other.properties &&
      @requires_authentication == other.requires_authentication &&
      @url == other.url &&
      @username == other.username
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @authentication_url.hash +
      @password.hash +
      @properties.hash +
      @requires_authentication.hash +
      @url.hash +
      @username.hash
    end
    
  end
  
  class File < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `content` attribute.
    # 
    # @return [String]
    # 
    def content
      @content
    end
    
    # 
    # Sets the value of the `content` attribute.
    # 
    # @param value [String]
    # 
    def content=(value)
      @content = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [String]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [String]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Creates a new instance of the {File} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :content The value of attribute `content`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [String] :type The value of attribute `type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.content = opts[:content]
      self.storage_domain = opts[:storage_domain]
      self.type = opts[:type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @content == other.content &&
      @storage_domain == other.storage_domain &&
      @type == other.type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @content.hash +
      @storage_domain.hash +
      @type.hash
    end
    
  end
  
  class Filter < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `position` attribute.
    # 
    # @return [Integer]
    # 
    def position
      @position
    end
    
    # 
    # Sets the value of the `position` attribute.
    # 
    # @param value [Integer]
    # 
    def position=(value)
      @position = value
    end
    
    # 
    # Returns the value of the `scheduling_policy_unit` attribute.
    # 
    # @return [SchedulingPolicyUnit]
    # 
    def scheduling_policy_unit
      @scheduling_policy_unit
    end
    
    # 
    # Sets the value of the `scheduling_policy_unit` attribute.
    # 
    # @param value [SchedulingPolicyUnit, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SchedulingPolicyUnit} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def scheduling_policy_unit=(value)
      if value.is_a?(Hash)
        value = SchedulingPolicyUnit.new(value)
      end
      @scheduling_policy_unit = value
    end
    
    # 
    # Creates a new instance of the {Filter} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Integer] :position The value of attribute `position`.
    # 
    # @option opts [SchedulingPolicyUnit, Hash] :scheduling_policy_unit The value of attribute `scheduling_policy_unit`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.position = opts[:position]
      self.scheduling_policy_unit = opts[:scheduling_policy_unit]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @position == other.position &&
      @scheduling_policy_unit == other.scheduling_policy_unit
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @position.hash +
      @scheduling_policy_unit.hash
    end
    
  end
  
  class Floppy < Device
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `file` attribute.
    # 
    # @return [File]
    # 
    def file
      @file
    end
    
    # 
    # Sets the value of the `file` attribute.
    # 
    # @param value [File, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::File} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def file=(value)
      if value.is_a?(Hash)
        value = File.new(value)
      end
      @file = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `instance_type` attribute.
    # 
    # @return [InstanceType]
    # 
    def instance_type
      @instance_type
    end
    
    # 
    # Sets the value of the `instance_type` attribute.
    # 
    # @param value [InstanceType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::InstanceType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def instance_type=(value)
      if value.is_a?(Hash)
        value = InstanceType.new(value)
      end
      @instance_type = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Creates a new instance of the {Floppy} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [File, Hash] :file The value of attribute `file`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [InstanceType, Hash] :instance_type The value of attribute `instance_type`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.file = opts[:file]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @file == other.file
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @file.hash
    end
    
  end
  
  class GlusterBrickAdvancedDetails < Device
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `device` attribute.
    # 
    # @return [String]
    # 
    def device
      @device
    end
    
    # 
    # Sets the value of the `device` attribute.
    # 
    # @param value [String]
    # 
    def device=(value)
      @device = value
    end
    
    # 
    # Returns the value of the `fs_name` attribute.
    # 
    # @return [String]
    # 
    def fs_name
      @fs_name
    end
    
    # 
    # Sets the value of the `fs_name` attribute.
    # 
    # @param value [String]
    # 
    def fs_name=(value)
      @fs_name = value
    end
    
    # 
    # Returns the value of the `gluster_clients` attribute.
    # 
    # @return [Array<GlusterClient>]
    # 
    def gluster_clients
      @gluster_clients
    end
    
    # 
    # Sets the value of the `gluster_clients` attribute.
    # 
    # @param list [Array<GlusterClient>]
    # 
    def gluster_clients=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = GlusterClient.new(value)
          end
        end
      end
      @gluster_clients = list
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `instance_type` attribute.
    # 
    # @return [InstanceType]
    # 
    def instance_type
      @instance_type
    end
    
    # 
    # Sets the value of the `instance_type` attribute.
    # 
    # @param value [InstanceType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::InstanceType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def instance_type=(value)
      if value.is_a?(Hash)
        value = InstanceType.new(value)
      end
      @instance_type = value
    end
    
    # 
    # Returns the value of the `memory_pools` attribute.
    # 
    # @return [Array<GlusterMemoryPool>]
    # 
    def memory_pools
      @memory_pools
    end
    
    # 
    # Sets the value of the `memory_pools` attribute.
    # 
    # @param list [Array<GlusterMemoryPool>]
    # 
    def memory_pools=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = GlusterMemoryPool.new(value)
          end
        end
      end
      @memory_pools = list
    end
    
    # 
    # Returns the value of the `mnt_options` attribute.
    # 
    # @return [String]
    # 
    def mnt_options
      @mnt_options
    end
    
    # 
    # Sets the value of the `mnt_options` attribute.
    # 
    # @param value [String]
    # 
    def mnt_options=(value)
      @mnt_options = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `pid` attribute.
    # 
    # @return [Integer]
    # 
    def pid
      @pid
    end
    
    # 
    # Sets the value of the `pid` attribute.
    # 
    # @param value [Integer]
    # 
    def pid=(value)
      @pid = value
    end
    
    # 
    # Returns the value of the `port` attribute.
    # 
    # @return [Integer]
    # 
    def port
      @port
    end
    
    # 
    # Sets the value of the `port` attribute.
    # 
    # @param value [Integer]
    # 
    def port=(value)
      @port = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Creates a new instance of the {GlusterBrickAdvancedDetails} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :device The value of attribute `device`.
    # 
    # @option opts [String] :fs_name The value of attribute `fs_name`.
    # 
    # @option opts [Array<GlusterClient>, Array<Hash>] :gluster_clients The values of attribute `gluster_clients`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [InstanceType, Hash] :instance_type The value of attribute `instance_type`.
    # 
    # @option opts [Array<GlusterMemoryPool>, Array<Hash>] :memory_pools The values of attribute `memory_pools`.
    # 
    # @option opts [String] :mnt_options The value of attribute `mnt_options`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Integer] :pid The value of attribute `pid`.
    # 
    # @option opts [Integer] :port The value of attribute `port`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.device = opts[:device]
      self.fs_name = opts[:fs_name]
      self.gluster_clients = opts[:gluster_clients]
      self.memory_pools = opts[:memory_pools]
      self.mnt_options = opts[:mnt_options]
      self.pid = opts[:pid]
      self.port = opts[:port]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @device == other.device &&
      @fs_name == other.fs_name &&
      @gluster_clients == other.gluster_clients &&
      @memory_pools == other.memory_pools &&
      @mnt_options == other.mnt_options &&
      @pid == other.pid &&
      @port == other.port
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @device.hash +
      @fs_name.hash +
      @gluster_clients.hash +
      @memory_pools.hash +
      @mnt_options.hash +
      @pid.hash +
      @port.hash
    end
    
  end
  
  class GlusterHook < Identified
    
    # 
    # Returns the value of the `checksum` attribute.
    # 
    # @return [String]
    # 
    def checksum
      @checksum
    end
    
    # 
    # Sets the value of the `checksum` attribute.
    # 
    # @param value [String]
    # 
    def checksum=(value)
      @checksum = value
    end
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `conflict_status` attribute.
    # 
    # @return [Integer]
    # 
    def conflict_status
      @conflict_status
    end
    
    # 
    # Sets the value of the `conflict_status` attribute.
    # 
    # @param value [Integer]
    # 
    def conflict_status=(value)
      @conflict_status = value
    end
    
    # 
    # Returns the value of the `conflicts` attribute.
    # 
    # @return [String]
    # 
    def conflicts
      @conflicts
    end
    
    # 
    # Sets the value of the `conflicts` attribute.
    # 
    # @param value [String]
    # 
    def conflicts=(value)
      @conflicts = value
    end
    
    # 
    # Returns the value of the `content` attribute.
    # 
    # @return [String]
    # 
    def content
      @content
    end
    
    # 
    # Sets the value of the `content` attribute.
    # 
    # @param value [String]
    # 
    def content=(value)
      @content = value
    end
    
    # 
    # Returns the value of the `content_type` attribute.
    # 
    # @return [HookContentType]
    # 
    def content_type
      @content_type
    end
    
    # 
    # Sets the value of the `content_type` attribute.
    # 
    # @param value [HookContentType]
    # 
    def content_type=(value)
      @content_type = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `gluster_command` attribute.
    # 
    # @return [String]
    # 
    def gluster_command
      @gluster_command
    end
    
    # 
    # Sets the value of the `gluster_command` attribute.
    # 
    # @param value [String]
    # 
    def gluster_command=(value)
      @gluster_command = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `server_hooks` attribute.
    # 
    # @return [Array<GlusterServerHook>]
    # 
    def server_hooks
      @server_hooks
    end
    
    # 
    # Sets the value of the `server_hooks` attribute.
    # 
    # @param list [Array<GlusterServerHook>]
    # 
    def server_hooks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = GlusterServerHook.new(value)
          end
        end
      end
      @server_hooks = list
    end
    
    # 
    # Returns the value of the `stage` attribute.
    # 
    # @return [HookStage]
    # 
    def stage
      @stage
    end
    
    # 
    # Sets the value of the `stage` attribute.
    # 
    # @param value [HookStage]
    # 
    def stage=(value)
      @stage = value
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [GlusterHookStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [GlusterHookStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Creates a new instance of the {GlusterHook} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :checksum The value of attribute `checksum`.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Integer] :conflict_status The value of attribute `conflict_status`.
    # 
    # @option opts [String] :conflicts The value of attribute `conflicts`.
    # 
    # @option opts [String] :content The value of attribute `content`.
    # 
    # @option opts [HookContentType] :content_type The value of attribute `content_type`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :gluster_command The value of attribute `gluster_command`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<GlusterServerHook>, Array<Hash>] :server_hooks The values of attribute `server_hooks`.
    # 
    # @option opts [HookStage] :stage The value of attribute `stage`.
    # 
    # @option opts [GlusterHookStatus] :status The value of attribute `status`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.checksum = opts[:checksum]
      self.cluster = opts[:cluster]
      self.conflict_status = opts[:conflict_status]
      self.conflicts = opts[:conflicts]
      self.content = opts[:content]
      self.content_type = opts[:content_type]
      self.gluster_command = opts[:gluster_command]
      self.server_hooks = opts[:server_hooks]
      self.stage = opts[:stage]
      self.status = opts[:status]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @checksum == other.checksum &&
      @cluster == other.cluster &&
      @conflict_status == other.conflict_status &&
      @conflicts == other.conflicts &&
      @content == other.content &&
      @content_type == other.content_type &&
      @gluster_command == other.gluster_command &&
      @server_hooks == other.server_hooks &&
      @stage == other.stage &&
      @status == other.status
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @checksum.hash +
      @cluster.hash +
      @conflict_status.hash +
      @conflicts.hash +
      @content.hash +
      @content_type.hash +
      @gluster_command.hash +
      @server_hooks.hash +
      @stage.hash +
      @status.hash
    end
    
  end
  
  class GlusterMemoryPool < Identified
    
    # 
    # Returns the value of the `alloc_count` attribute.
    # 
    # @return [Integer]
    # 
    def alloc_count
      @alloc_count
    end
    
    # 
    # Sets the value of the `alloc_count` attribute.
    # 
    # @param value [Integer]
    # 
    def alloc_count=(value)
      @alloc_count = value
    end
    
    # 
    # Returns the value of the `cold_count` attribute.
    # 
    # @return [Integer]
    # 
    def cold_count
      @cold_count
    end
    
    # 
    # Sets the value of the `cold_count` attribute.
    # 
    # @param value [Integer]
    # 
    def cold_count=(value)
      @cold_count = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `hot_count` attribute.
    # 
    # @return [Integer]
    # 
    def hot_count
      @hot_count
    end
    
    # 
    # Sets the value of the `hot_count` attribute.
    # 
    # @param value [Integer]
    # 
    def hot_count=(value)
      @hot_count = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `max_alloc` attribute.
    # 
    # @return [Integer]
    # 
    def max_alloc
      @max_alloc
    end
    
    # 
    # Sets the value of the `max_alloc` attribute.
    # 
    # @param value [Integer]
    # 
    def max_alloc=(value)
      @max_alloc = value
    end
    
    # 
    # Returns the value of the `max_stdalloc` attribute.
    # 
    # @return [Integer]
    # 
    def max_stdalloc
      @max_stdalloc
    end
    
    # 
    # Sets the value of the `max_stdalloc` attribute.
    # 
    # @param value [Integer]
    # 
    def max_stdalloc=(value)
      @max_stdalloc = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `padded_size` attribute.
    # 
    # @return [Integer]
    # 
    def padded_size
      @padded_size
    end
    
    # 
    # Sets the value of the `padded_size` attribute.
    # 
    # @param value [Integer]
    # 
    def padded_size=(value)
      @padded_size = value
    end
    
    # 
    # Returns the value of the `pool_misses` attribute.
    # 
    # @return [Integer]
    # 
    def pool_misses
      @pool_misses
    end
    
    # 
    # Sets the value of the `pool_misses` attribute.
    # 
    # @param value [Integer]
    # 
    def pool_misses=(value)
      @pool_misses = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [String]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [String]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Creates a new instance of the {GlusterMemoryPool} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :alloc_count The value of attribute `alloc_count`.
    # 
    # @option opts [Integer] :cold_count The value of attribute `cold_count`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Integer] :hot_count The value of attribute `hot_count`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Integer] :max_alloc The value of attribute `max_alloc`.
    # 
    # @option opts [Integer] :max_stdalloc The value of attribute `max_stdalloc`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Integer] :padded_size The value of attribute `padded_size`.
    # 
    # @option opts [Integer] :pool_misses The value of attribute `pool_misses`.
    # 
    # @option opts [String] :type The value of attribute `type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.alloc_count = opts[:alloc_count]
      self.cold_count = opts[:cold_count]
      self.hot_count = opts[:hot_count]
      self.max_alloc = opts[:max_alloc]
      self.max_stdalloc = opts[:max_stdalloc]
      self.padded_size = opts[:padded_size]
      self.pool_misses = opts[:pool_misses]
      self.type = opts[:type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @alloc_count == other.alloc_count &&
      @cold_count == other.cold_count &&
      @hot_count == other.hot_count &&
      @max_alloc == other.max_alloc &&
      @max_stdalloc == other.max_stdalloc &&
      @padded_size == other.padded_size &&
      @pool_misses == other.pool_misses &&
      @type == other.type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @alloc_count.hash +
      @cold_count.hash +
      @hot_count.hash +
      @max_alloc.hash +
      @max_stdalloc.hash +
      @padded_size.hash +
      @pool_misses.hash +
      @type.hash
    end
    
  end
  
  class GlusterServerHook < Identified
    
    # 
    # Returns the value of the `checksum` attribute.
    # 
    # @return [String]
    # 
    def checksum
      @checksum
    end
    
    # 
    # Sets the value of the `checksum` attribute.
    # 
    # @param value [String]
    # 
    def checksum=(value)
      @checksum = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `content_type` attribute.
    # 
    # @return [HookContentType]
    # 
    def content_type
      @content_type
    end
    
    # 
    # Sets the value of the `content_type` attribute.
    # 
    # @param value [HookContentType]
    # 
    def content_type=(value)
      @content_type = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [GlusterHookStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [GlusterHookStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Creates a new instance of the {GlusterServerHook} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :checksum The value of attribute `checksum`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [HookContentType] :content_type The value of attribute `content_type`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [GlusterHookStatus] :status The value of attribute `status`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.checksum = opts[:checksum]
      self.content_type = opts[:content_type]
      self.host = opts[:host]
      self.status = opts[:status]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @checksum == other.checksum &&
      @content_type == other.content_type &&
      @host == other.host &&
      @status == other.status
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @checksum.hash +
      @content_type.hash +
      @host.hash +
      @status.hash
    end
    
  end
  
  class GlusterVolume < Identified
    
    # 
    # Returns the value of the `bricks` attribute.
    # 
    # @return [Array<GlusterBrick>]
    # 
    def bricks
      @bricks
    end
    
    # 
    # Sets the value of the `bricks` attribute.
    # 
    # @param list [Array<GlusterBrick>]
    # 
    def bricks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = GlusterBrick.new(value)
          end
        end
      end
      @bricks = list
    end
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `disperse_count` attribute.
    # 
    # @return [Integer]
    # 
    def disperse_count
      @disperse_count
    end
    
    # 
    # Sets the value of the `disperse_count` attribute.
    # 
    # @param value [Integer]
    # 
    def disperse_count=(value)
      @disperse_count = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `options` attribute.
    # 
    # @return [Array<Option>]
    # 
    def options
      @options
    end
    
    # 
    # Sets the value of the `options` attribute.
    # 
    # @param list [Array<Option>]
    # 
    def options=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Option.new(value)
          end
        end
      end
      @options = list
    end
    
    # 
    # Returns the value of the `redundancy_count` attribute.
    # 
    # @return [Integer]
    # 
    def redundancy_count
      @redundancy_count
    end
    
    # 
    # Sets the value of the `redundancy_count` attribute.
    # 
    # @param value [Integer]
    # 
    def redundancy_count=(value)
      @redundancy_count = value
    end
    
    # 
    # Returns the value of the `replica_count` attribute.
    # 
    # @return [Integer]
    # 
    def replica_count
      @replica_count
    end
    
    # 
    # Sets the value of the `replica_count` attribute.
    # 
    # @param value [Integer]
    # 
    def replica_count=(value)
      @replica_count = value
    end
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [GlusterVolumeStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [GlusterVolumeStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `stripe_count` attribute.
    # 
    # @return [Integer]
    # 
    def stripe_count
      @stripe_count
    end
    
    # 
    # Sets the value of the `stripe_count` attribute.
    # 
    # @param value [Integer]
    # 
    def stripe_count=(value)
      @stripe_count = value
    end
    
    # 
    # Returns the value of the `transport_types` attribute.
    # 
    # @return [Array<TransportType>]
    # 
    def transport_types
      @transport_types
    end
    
    # 
    # Sets the value of the `transport_types` attribute.
    # 
    # @param list [Array<TransportType>]
    # 
    def transport_types=(list)
      @transport_types = list
    end
    
    # 
    # Returns the value of the `volume_type` attribute.
    # 
    # @return [GlusterVolumeType]
    # 
    def volume_type
      @volume_type
    end
    
    # 
    # Sets the value of the `volume_type` attribute.
    # 
    # @param value [GlusterVolumeType]
    # 
    def volume_type=(value)
      @volume_type = value
    end
    
    # 
    # Creates a new instance of the {GlusterVolume} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<GlusterBrick>, Array<Hash>] :bricks The values of attribute `bricks`.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Integer] :disperse_count The value of attribute `disperse_count`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Option>, Array<Hash>] :options The values of attribute `options`.
    # 
    # @option opts [Integer] :redundancy_count The value of attribute `redundancy_count`.
    # 
    # @option opts [Integer] :replica_count The value of attribute `replica_count`.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # @option opts [GlusterVolumeStatus] :status The value of attribute `status`.
    # 
    # @option opts [Integer] :stripe_count The value of attribute `stripe_count`.
    # 
    # @option opts [Array<TransportType>, Array<Hash>] :transport_types The values of attribute `transport_types`.
    # 
    # @option opts [GlusterVolumeType] :volume_type The value of attribute `volume_type`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.bricks = opts[:bricks]
      self.cluster = opts[:cluster]
      self.disperse_count = opts[:disperse_count]
      self.options = opts[:options]
      self.redundancy_count = opts[:redundancy_count]
      self.replica_count = opts[:replica_count]
      self.statistics = opts[:statistics]
      self.status = opts[:status]
      self.stripe_count = opts[:stripe_count]
      self.transport_types = opts[:transport_types]
      self.volume_type = opts[:volume_type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @bricks == other.bricks &&
      @cluster == other.cluster &&
      @disperse_count == other.disperse_count &&
      @options == other.options &&
      @redundancy_count == other.redundancy_count &&
      @replica_count == other.replica_count &&
      @statistics == other.statistics &&
      @status == other.status &&
      @stripe_count == other.stripe_count &&
      @transport_types == other.transport_types &&
      @volume_type == other.volume_type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @bricks.hash +
      @cluster.hash +
      @disperse_count.hash +
      @options.hash +
      @redundancy_count.hash +
      @replica_count.hash +
      @statistics.hash +
      @status.hash +
      @stripe_count.hash +
      @transport_types.hash +
      @volume_type.hash
    end
    
  end
  
  class GlusterVolumeProfileDetails < Identified
    
    # 
    # Returns the value of the `brick_profile_details` attribute.
    # 
    # @return [Array<BrickProfileDetail>]
    # 
    def brick_profile_details
      @brick_profile_details
    end
    
    # 
    # Sets the value of the `brick_profile_details` attribute.
    # 
    # @param list [Array<BrickProfileDetail>]
    # 
    def brick_profile_details=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = BrickProfileDetail.new(value)
          end
        end
      end
      @brick_profile_details = list
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `nfs_profile_details` attribute.
    # 
    # @return [Array<NfsProfileDetail>]
    # 
    def nfs_profile_details
      @nfs_profile_details
    end
    
    # 
    # Sets the value of the `nfs_profile_details` attribute.
    # 
    # @param list [Array<NfsProfileDetail>]
    # 
    def nfs_profile_details=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NfsProfileDetail.new(value)
          end
        end
      end
      @nfs_profile_details = list
    end
    
    # 
    # Creates a new instance of the {GlusterVolumeProfileDetails} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<BrickProfileDetail>, Array<Hash>] :brick_profile_details The values of attribute `brick_profile_details`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<NfsProfileDetail>, Array<Hash>] :nfs_profile_details The values of attribute `nfs_profile_details`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.brick_profile_details = opts[:brick_profile_details]
      self.nfs_profile_details = opts[:nfs_profile_details]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @brick_profile_details == other.brick_profile_details &&
      @nfs_profile_details == other.nfs_profile_details
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @brick_profile_details.hash +
      @nfs_profile_details.hash
    end
    
  end
  
  class GraphicsConsole < Identified
    
    # 
    # Returns the value of the `address` attribute.
    # 
    # @return [String]
    # 
    def address
      @address
    end
    
    # 
    # Sets the value of the `address` attribute.
    # 
    # @param value [String]
    # 
    def address=(value)
      @address = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `instance_type` attribute.
    # 
    # @return [InstanceType]
    # 
    def instance_type
      @instance_type
    end
    
    # 
    # Sets the value of the `instance_type` attribute.
    # 
    # @param value [InstanceType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::InstanceType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def instance_type=(value)
      if value.is_a?(Hash)
        value = InstanceType.new(value)
      end
      @instance_type = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `port` attribute.
    # 
    # @return [Integer]
    # 
    def port
      @port
    end
    
    # 
    # Sets the value of the `port` attribute.
    # 
    # @param value [Integer]
    # 
    def port=(value)
      @port = value
    end
    
    # 
    # Returns the value of the `protocol` attribute.
    # 
    # @return [GraphicsType]
    # 
    def protocol
      @protocol
    end
    
    # 
    # Sets the value of the `protocol` attribute.
    # 
    # @param value [GraphicsType]
    # 
    def protocol=(value)
      @protocol = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `tls_port` attribute.
    # 
    # @return [Integer]
    # 
    def tls_port
      @tls_port
    end
    
    # 
    # Sets the value of the `tls_port` attribute.
    # 
    # @param value [Integer]
    # 
    def tls_port=(value)
      @tls_port = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {GraphicsConsole} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :address The value of attribute `address`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [InstanceType, Hash] :instance_type The value of attribute `instance_type`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Integer] :port The value of attribute `port`.
    # 
    # @option opts [GraphicsType] :protocol The value of attribute `protocol`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [Integer] :tls_port The value of attribute `tls_port`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.address = opts[:address]
      self.instance_type = opts[:instance_type]
      self.port = opts[:port]
      self.protocol = opts[:protocol]
      self.template = opts[:template]
      self.tls_port = opts[:tls_port]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @address == other.address &&
      @instance_type == other.instance_type &&
      @port == other.port &&
      @protocol == other.protocol &&
      @template == other.template &&
      @tls_port == other.tls_port &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @address.hash +
      @instance_type.hash +
      @port.hash +
      @protocol.hash +
      @template.hash +
      @tls_port.hash +
      @vm.hash
    end
    
  end
  
  class Group < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `domain` attribute.
    # 
    # @return [Domain]
    # 
    def domain
      @domain
    end
    
    # 
    # Sets the value of the `domain` attribute.
    # 
    # @param value [Domain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Domain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def domain=(value)
      if value.is_a?(Hash)
        value = Domain.new(value)
      end
      @domain = value
    end
    
    # 
    # Returns the value of the `domain_entry_id` attribute.
    # 
    # @return [String]
    # 
    def domain_entry_id
      @domain_entry_id
    end
    
    # 
    # Sets the value of the `domain_entry_id` attribute.
    # 
    # @param value [String]
    # 
    def domain_entry_id=(value)
      @domain_entry_id = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `namespace` attribute.
    # 
    # @return [String]
    # 
    def namespace
      @namespace
    end
    
    # 
    # Sets the value of the `namespace` attribute.
    # 
    # @param value [String]
    # 
    def namespace=(value)
      @namespace = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `roles` attribute.
    # 
    # @return [Array<Role>]
    # 
    def roles
      @roles
    end
    
    # 
    # Sets the value of the `roles` attribute.
    # 
    # @param list [Array<Role>]
    # 
    def roles=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Role.new(value)
          end
        end
      end
      @roles = list
    end
    
    # 
    # Returns the value of the `tags` attribute.
    # 
    # @return [Array<Tag>]
    # 
    def tags
      @tags
    end
    
    # 
    # Sets the value of the `tags` attribute.
    # 
    # @param list [Array<Tag>]
    # 
    def tags=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Tag.new(value)
          end
        end
      end
      @tags = list
    end
    
    # 
    # Creates a new instance of the {Group} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Domain, Hash] :domain The value of attribute `domain`.
    # 
    # @option opts [String] :domain_entry_id The value of attribute `domain_entry_id`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :namespace The value of attribute `namespace`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [Array<Role>, Array<Hash>] :roles The values of attribute `roles`.
    # 
    # @option opts [Array<Tag>, Array<Hash>] :tags The values of attribute `tags`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.domain = opts[:domain]
      self.domain_entry_id = opts[:domain_entry_id]
      self.namespace = opts[:namespace]
      self.permissions = opts[:permissions]
      self.roles = opts[:roles]
      self.tags = opts[:tags]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @domain == other.domain &&
      @domain_entry_id == other.domain_entry_id &&
      @namespace == other.namespace &&
      @permissions == other.permissions &&
      @roles == other.roles &&
      @tags == other.tags
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @domain.hash +
      @domain_entry_id.hash +
      @namespace.hash +
      @permissions.hash +
      @roles.hash +
      @tags.hash
    end
    
  end
  
  class Hook < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `event_name` attribute.
    # 
    # @return [String]
    # 
    def event_name
      @event_name
    end
    
    # 
    # Sets the value of the `event_name` attribute.
    # 
    # @param value [String]
    # 
    def event_name=(value)
      @event_name = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `md5` attribute.
    # 
    # @return [String]
    # 
    def md5
      @md5
    end
    
    # 
    # Sets the value of the `md5` attribute.
    # 
    # @param value [String]
    # 
    def md5=(value)
      @md5 = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {Hook} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :event_name The value of attribute `event_name`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :md5 The value of attribute `md5`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.event_name = opts[:event_name]
      self.host = opts[:host]
      self.md5 = opts[:md5]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @event_name == other.event_name &&
      @host == other.host &&
      @md5 == other.md5
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @event_name.hash +
      @host.hash +
      @md5.hash
    end
    
  end
  
  class Host < Identified
    
    # 
    # Returns the value of the `address` attribute.
    # 
    # @return [String]
    # 
    def address
      @address
    end
    
    # 
    # Sets the value of the `address` attribute.
    # 
    # @param value [String]
    # 
    def address=(value)
      @address = value
    end
    
    # 
    # Returns the value of the `affinity_labels` attribute.
    # 
    # @return [Array<AffinityLabel>]
    # 
    def affinity_labels
      @affinity_labels
    end
    
    # 
    # Sets the value of the `affinity_labels` attribute.
    # 
    # @param list [Array<AffinityLabel>]
    # 
    def affinity_labels=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = AffinityLabel.new(value)
          end
        end
      end
      @affinity_labels = list
    end
    
    # 
    # Returns the value of the `agents` attribute.
    # 
    # @return [Array<Agent>]
    # 
    def agents
      @agents
    end
    
    # 
    # Sets the value of the `agents` attribute.
    # 
    # @param list [Array<Agent>]
    # 
    def agents=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Agent.new(value)
          end
        end
      end
      @agents = list
    end
    
    # 
    # Returns the value of the `auto_numa_status` attribute.
    # 
    # @return [AutoNumaStatus]
    # 
    def auto_numa_status
      @auto_numa_status
    end
    
    # 
    # Sets the value of the `auto_numa_status` attribute.
    # 
    # @param value [AutoNumaStatus]
    # 
    def auto_numa_status=(value)
      @auto_numa_status = value
    end
    
    # 
    # Returns the value of the `certificate` attribute.
    # 
    # @return [Certificate]
    # 
    def certificate
      @certificate
    end
    
    # 
    # Sets the value of the `certificate` attribute.
    # 
    # @param value [Certificate, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Certificate} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def certificate=(value)
      if value.is_a?(Hash)
        value = Certificate.new(value)
      end
      @certificate = value
    end
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `cpu` attribute.
    # 
    # @return [Cpu]
    # 
    def cpu
      @cpu
    end
    
    # 
    # Sets the value of the `cpu` attribute.
    # 
    # @param value [Cpu, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cpu} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu=(value)
      if value.is_a?(Hash)
        value = Cpu.new(value)
      end
      @cpu = value
    end
    
    # 
    # Returns the value of the `cpu_units` attribute.
    # 
    # @return [Array<HostCpuUnit>]
    # 
    def cpu_units
      @cpu_units
    end
    
    # 
    # Sets the value of the `cpu_units` attribute.
    # 
    # @param list [Array<HostCpuUnit>]
    # 
    def cpu_units=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = HostCpuUnit.new(value)
          end
        end
      end
      @cpu_units = list
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `device_passthrough` attribute.
    # 
    # @return [HostDevicePassthrough]
    # 
    def device_passthrough
      @device_passthrough
    end
    
    # 
    # Sets the value of the `device_passthrough` attribute.
    # 
    # @param value [HostDevicePassthrough, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostDevicePassthrough} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def device_passthrough=(value)
      if value.is_a?(Hash)
        value = HostDevicePassthrough.new(value)
      end
      @device_passthrough = value
    end
    
    # 
    # Returns the value of the `devices` attribute.
    # 
    # @return [Array<HostDevice>]
    # 
    def devices
      @devices
    end
    
    # 
    # Sets the value of the `devices` attribute.
    # 
    # @param list [Array<HostDevice>]
    # 
    def devices=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = HostDevice.new(value)
          end
        end
      end
      @devices = list
    end
    
    # 
    # Returns the value of the `display` attribute.
    # 
    # @return [Display]
    # 
    def display
      @display
    end
    
    # 
    # Sets the value of the `display` attribute.
    # 
    # @param value [Display, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Display} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def display=(value)
      if value.is_a?(Hash)
        value = Display.new(value)
      end
      @display = value
    end
    
    # 
    # Returns the value of the `external_host_provider` attribute.
    # 
    # @return [ExternalHostProvider]
    # 
    def external_host_provider
      @external_host_provider
    end
    
    # 
    # Sets the value of the `external_host_provider` attribute.
    # 
    # @param value [ExternalHostProvider, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ExternalHostProvider} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def external_host_provider=(value)
      if value.is_a?(Hash)
        value = ExternalHostProvider.new(value)
      end
      @external_host_provider = value
    end
    
    # 
    # Returns the value of the `external_network_provider_configurations` attribute.
    # 
    # @return [Array<ExternalNetworkProviderConfiguration>]
    # 
    def external_network_provider_configurations
      @external_network_provider_configurations
    end
    
    # 
    # Sets the value of the `external_network_provider_configurations` attribute.
    # 
    # @param list [Array<ExternalNetworkProviderConfiguration>]
    # 
    def external_network_provider_configurations=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = ExternalNetworkProviderConfiguration.new(value)
          end
        end
      end
      @external_network_provider_configurations = list
    end
    
    # 
    # Returns the value of the `external_status` attribute.
    # 
    # @return [ExternalStatus]
    # 
    def external_status
      @external_status
    end
    
    # 
    # Sets the value of the `external_status` attribute.
    # 
    # @param value [ExternalStatus]
    # 
    def external_status=(value)
      @external_status = value
    end
    
    # 
    # Returns the value of the `hardware_information` attribute.
    # 
    # @return [HardwareInformation]
    # 
    def hardware_information
      @hardware_information
    end
    
    # 
    # Sets the value of the `hardware_information` attribute.
    # 
    # @param value [HardwareInformation, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HardwareInformation} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def hardware_information=(value)
      if value.is_a?(Hash)
        value = HardwareInformation.new(value)
      end
      @hardware_information = value
    end
    
    # 
    # Returns the value of the `hooks` attribute.
    # 
    # @return [Array<Hook>]
    # 
    def hooks
      @hooks
    end
    
    # 
    # Sets the value of the `hooks` attribute.
    # 
    # @param list [Array<Hook>]
    # 
    def hooks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Hook.new(value)
          end
        end
      end
      @hooks = list
    end
    
    # 
    # Returns the value of the `hosted_engine` attribute.
    # 
    # @return [HostedEngine]
    # 
    def hosted_engine
      @hosted_engine
    end
    
    # 
    # Sets the value of the `hosted_engine` attribute.
    # 
    # @param value [HostedEngine, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostedEngine} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def hosted_engine=(value)
      if value.is_a?(Hash)
        value = HostedEngine.new(value)
      end
      @hosted_engine = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `iscsi` attribute.
    # 
    # @return [IscsiDetails]
    # 
    def iscsi
      @iscsi
    end
    
    # 
    # Sets the value of the `iscsi` attribute.
    # 
    # @param value [IscsiDetails, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::IscsiDetails} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def iscsi=(value)
      if value.is_a?(Hash)
        value = IscsiDetails.new(value)
      end
      @iscsi = value
    end
    
    # 
    # Returns the value of the `katello_errata` attribute.
    # 
    # @return [Array<KatelloErratum>]
    # 
    def katello_errata
      @katello_errata
    end
    
    # 
    # Sets the value of the `katello_errata` attribute.
    # 
    # @param list [Array<KatelloErratum>]
    # 
    def katello_errata=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = KatelloErratum.new(value)
          end
        end
      end
      @katello_errata = list
    end
    
    # 
    # Returns the value of the `kdump_status` attribute.
    # 
    # @return [KdumpStatus]
    # 
    def kdump_status
      @kdump_status
    end
    
    # 
    # Sets the value of the `kdump_status` attribute.
    # 
    # @param value [KdumpStatus]
    # 
    def kdump_status=(value)
      @kdump_status = value
    end
    
    # 
    # Returns the value of the `ksm` attribute.
    # 
    # @return [Ksm]
    # 
    def ksm
      @ksm
    end
    
    # 
    # Sets the value of the `ksm` attribute.
    # 
    # @param value [Ksm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Ksm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def ksm=(value)
      if value.is_a?(Hash)
        value = Ksm.new(value)
      end
      @ksm = value
    end
    
    # 
    # Returns the value of the `libvirt_version` attribute.
    # 
    # @return [Version]
    # 
    def libvirt_version
      @libvirt_version
    end
    
    # 
    # Sets the value of the `libvirt_version` attribute.
    # 
    # @param value [Version, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Version} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def libvirt_version=(value)
      if value.is_a?(Hash)
        value = Version.new(value)
      end
      @libvirt_version = value
    end
    
    # 
    # Returns the value of the `max_scheduling_memory` attribute.
    # 
    # @return [Integer]
    # 
    def max_scheduling_memory
      @max_scheduling_memory
    end
    
    # 
    # Sets the value of the `max_scheduling_memory` attribute.
    # 
    # @param value [Integer]
    # 
    def max_scheduling_memory=(value)
      @max_scheduling_memory = value
    end
    
    # 
    # Returns the value of the `memory` attribute.
    # 
    # @return [Integer]
    # 
    def memory
      @memory
    end
    
    # 
    # Sets the value of the `memory` attribute.
    # 
    # @param value [Integer]
    # 
    def memory=(value)
      @memory = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `network_attachments` attribute.
    # 
    # @return [Array<NetworkAttachment>]
    # 
    def network_attachments
      @network_attachments
    end
    
    # 
    # Sets the value of the `network_attachments` attribute.
    # 
    # @param list [Array<NetworkAttachment>]
    # 
    def network_attachments=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NetworkAttachment.new(value)
          end
        end
      end
      @network_attachments = list
    end
    
    # 
    # Returns the value of the `network_operation_in_progress` attribute.
    # 
    # @return [Boolean]
    # 
    def network_operation_in_progress
      @network_operation_in_progress
    end
    
    # 
    # Sets the value of the `network_operation_in_progress` attribute.
    # 
    # @param value [Boolean]
    # 
    def network_operation_in_progress=(value)
      @network_operation_in_progress = value
    end
    
    # 
    # Returns the value of the `nics` attribute.
    # 
    # @return [Array<HostNic>]
    # 
    def nics
      @nics
    end
    
    # 
    # Sets the value of the `nics` attribute.
    # 
    # @param list [Array<HostNic>]
    # 
    def nics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = HostNic.new(value)
          end
        end
      end
      @nics = list
    end
    
    # 
    # Returns the value of the `numa_nodes` attribute.
    # 
    # @return [Array<NumaNode>]
    # 
    def numa_nodes
      @numa_nodes
    end
    
    # 
    # Sets the value of the `numa_nodes` attribute.
    # 
    # @param list [Array<NumaNode>]
    # 
    def numa_nodes=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NumaNode.new(value)
          end
        end
      end
      @numa_nodes = list
    end
    
    # 
    # Returns the value of the `numa_supported` attribute.
    # 
    # @return [Boolean]
    # 
    def numa_supported
      @numa_supported
    end
    
    # 
    # Sets the value of the `numa_supported` attribute.
    # 
    # @param value [Boolean]
    # 
    def numa_supported=(value)
      @numa_supported = value
    end
    
    # 
    # Returns the value of the `os` attribute.
    # 
    # @return [OperatingSystem]
    # 
    def os
      @os
    end
    
    # 
    # Sets the value of the `os` attribute.
    # 
    # @param value [OperatingSystem, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::OperatingSystem} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def os=(value)
      if value.is_a?(Hash)
        value = OperatingSystem.new(value)
      end
      @os = value
    end
    
    # 
    # Returns the value of the `override_iptables` attribute.
    # 
    # @return [Boolean]
    # 
    def override_iptables
      @override_iptables
    end
    
    # 
    # Sets the value of the `override_iptables` attribute.
    # 
    # @param value [Boolean]
    # 
    def override_iptables=(value)
      @override_iptables = value
    end
    
    # 
    # Returns the value of the `ovn_configured` attribute.
    # 
    # @return [Boolean]
    # 
    def ovn_configured
      @ovn_configured
    end
    
    # 
    # Sets the value of the `ovn_configured` attribute.
    # 
    # @param value [Boolean]
    # 
    def ovn_configured=(value)
      @ovn_configured = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `port` attribute.
    # 
    # @return [Integer]
    # 
    def port
      @port
    end
    
    # 
    # Sets the value of the `port` attribute.
    # 
    # @param value [Integer]
    # 
    def port=(value)
      @port = value
    end
    
    # 
    # Returns the value of the `power_management` attribute.
    # 
    # @return [PowerManagement]
    # 
    def power_management
      @power_management
    end
    
    # 
    # Sets the value of the `power_management` attribute.
    # 
    # @param value [PowerManagement, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::PowerManagement} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def power_management=(value)
      if value.is_a?(Hash)
        value = PowerManagement.new(value)
      end
      @power_management = value
    end
    
    # 
    # Returns the value of the `protocol` attribute.
    # 
    # @return [HostProtocol]
    # 
    def protocol
      @protocol
    end
    
    # 
    # Sets the value of the `protocol` attribute.
    # 
    # @param value [HostProtocol]
    # 
    def protocol=(value)
      @protocol = value
    end
    
    # 
    # Returns the value of the `reinstallation_required` attribute.
    # 
    # @return [Boolean]
    # 
    def reinstallation_required
      @reinstallation_required
    end
    
    # 
    # Sets the value of the `reinstallation_required` attribute.
    # 
    # @param value [Boolean]
    # 
    def reinstallation_required=(value)
      @reinstallation_required = value
    end
    
    # 
    # Returns the value of the `root_password` attribute.
    # 
    # @return [String]
    # 
    def root_password
      @root_password
    end
    
    # 
    # Sets the value of the `root_password` attribute.
    # 
    # @param value [String]
    # 
    def root_password=(value)
      @root_password = value
    end
    
    # 
    # Returns the value of the `se_linux` attribute.
    # 
    # @return [SeLinux]
    # 
    def se_linux
      @se_linux
    end
    
    # 
    # Sets the value of the `se_linux` attribute.
    # 
    # @param value [SeLinux, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SeLinux} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def se_linux=(value)
      if value.is_a?(Hash)
        value = SeLinux.new(value)
      end
      @se_linux = value
    end
    
    # 
    # Returns the value of the `spm` attribute.
    # 
    # @return [Spm]
    # 
    def spm
      @spm
    end
    
    # 
    # Sets the value of the `spm` attribute.
    # 
    # @param value [Spm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Spm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def spm=(value)
      if value.is_a?(Hash)
        value = Spm.new(value)
      end
      @spm = value
    end
    
    # 
    # Returns the value of the `ssh` attribute.
    # 
    # @return [Ssh]
    # 
    def ssh
      @ssh
    end
    
    # 
    # Sets the value of the `ssh` attribute.
    # 
    # @param value [Ssh, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Ssh} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def ssh=(value)
      if value.is_a?(Hash)
        value = Ssh.new(value)
      end
      @ssh = value
    end
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [HostStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [HostStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `status_detail` attribute.
    # 
    # @return [String]
    # 
    def status_detail
      @status_detail
    end
    
    # 
    # Sets the value of the `status_detail` attribute.
    # 
    # @param value [String]
    # 
    def status_detail=(value)
      @status_detail = value
    end
    
    # 
    # Returns the value of the `storage_connection_extensions` attribute.
    # 
    # @return [Array<StorageConnectionExtension>]
    # 
    def storage_connection_extensions
      @storage_connection_extensions
    end
    
    # 
    # Sets the value of the `storage_connection_extensions` attribute.
    # 
    # @param list [Array<StorageConnectionExtension>]
    # 
    def storage_connection_extensions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = StorageConnectionExtension.new(value)
          end
        end
      end
      @storage_connection_extensions = list
    end
    
    # 
    # Returns the value of the `storages` attribute.
    # 
    # @return [Array<HostStorage>]
    # 
    def storages
      @storages
    end
    
    # 
    # Sets the value of the `storages` attribute.
    # 
    # @param list [Array<HostStorage>]
    # 
    def storages=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = HostStorage.new(value)
          end
        end
      end
      @storages = list
    end
    
    # 
    # Returns the value of the `summary` attribute.
    # 
    # @return [VmSummary]
    # 
    def summary
      @summary
    end
    
    # 
    # Sets the value of the `summary` attribute.
    # 
    # @param value [VmSummary, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VmSummary} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def summary=(value)
      if value.is_a?(Hash)
        value = VmSummary.new(value)
      end
      @summary = value
    end
    
    # 
    # Returns the value of the `tags` attribute.
    # 
    # @return [Array<Tag>]
    # 
    def tags
      @tags
    end
    
    # 
    # Sets the value of the `tags` attribute.
    # 
    # @param list [Array<Tag>]
    # 
    def tags=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Tag.new(value)
          end
        end
      end
      @tags = list
    end
    
    # 
    # Returns the value of the `transparent_huge_pages` attribute.
    # 
    # @return [TransparentHugePages]
    # 
    def transparent_huge_pages
      @transparent_huge_pages
    end
    
    # 
    # Sets the value of the `transparent_huge_pages` attribute.
    # 
    # @param value [TransparentHugePages, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::TransparentHugePages} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def transparent_huge_pages=(value)
      if value.is_a?(Hash)
        value = TransparentHugePages.new(value)
      end
      @transparent_huge_pages = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [HostType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [HostType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `unmanaged_networks` attribute.
    # 
    # @return [Array<UnmanagedNetwork>]
    # 
    def unmanaged_networks
      @unmanaged_networks
    end
    
    # 
    # Sets the value of the `unmanaged_networks` attribute.
    # 
    # @param list [Array<UnmanagedNetwork>]
    # 
    def unmanaged_networks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = UnmanagedNetwork.new(value)
          end
        end
      end
      @unmanaged_networks = list
    end
    
    # 
    # Returns the value of the `update_available` attribute.
    # 
    # @return [Boolean]
    # 
    def update_available
      @update_available
    end
    
    # 
    # Sets the value of the `update_available` attribute.
    # 
    # @param value [Boolean]
    # 
    def update_available=(value)
      @update_available = value
    end
    
    # 
    # Returns the value of the `version` attribute.
    # 
    # @return [Version]
    # 
    def version
      @version
    end
    
    # 
    # Sets the value of the `version` attribute.
    # 
    # @param value [Version, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Version} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def version=(value)
      if value.is_a?(Hash)
        value = Version.new(value)
      end
      @version = value
    end
    
    # 
    # Returns the value of the `vgpu_placement` attribute.
    # 
    # @return [VgpuPlacement]
    # 
    def vgpu_placement
      @vgpu_placement
    end
    
    # 
    # Sets the value of the `vgpu_placement` attribute.
    # 
    # @param value [VgpuPlacement]
    # 
    def vgpu_placement=(value)
      @vgpu_placement = value
    end
    
    # 
    # Creates a new instance of the {Host} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :address The value of attribute `address`.
    # 
    # @option opts [Array<AffinityLabel>, Array<Hash>] :affinity_labels The values of attribute `affinity_labels`.
    # 
    # @option opts [Array<Agent>, Array<Hash>] :agents The values of attribute `agents`.
    # 
    # @option opts [AutoNumaStatus] :auto_numa_status The value of attribute `auto_numa_status`.
    # 
    # @option opts [Certificate, Hash] :certificate The value of attribute `certificate`.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Cpu, Hash] :cpu The value of attribute `cpu`.
    # 
    # @option opts [Array<HostCpuUnit>, Array<Hash>] :cpu_units The values of attribute `cpu_units`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [HostDevicePassthrough, Hash] :device_passthrough The value of attribute `device_passthrough`.
    # 
    # @option opts [Array<HostDevice>, Array<Hash>] :devices The values of attribute `devices`.
    # 
    # @option opts [Display, Hash] :display The value of attribute `display`.
    # 
    # @option opts [ExternalHostProvider, Hash] :external_host_provider The value of attribute `external_host_provider`.
    # 
    # @option opts [Array<ExternalNetworkProviderConfiguration>, Array<Hash>] :external_network_provider_configurations The values of attribute `external_network_provider_configurations`.
    # 
    # @option opts [ExternalStatus] :external_status The value of attribute `external_status`.
    # 
    # @option opts [HardwareInformation, Hash] :hardware_information The value of attribute `hardware_information`.
    # 
    # @option opts [Array<Hook>, Array<Hash>] :hooks The values of attribute `hooks`.
    # 
    # @option opts [HostedEngine, Hash] :hosted_engine The value of attribute `hosted_engine`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [IscsiDetails, Hash] :iscsi The value of attribute `iscsi`.
    # 
    # @option opts [Array<KatelloErratum>, Array<Hash>] :katello_errata The values of attribute `katello_errata`.
    # 
    # @option opts [KdumpStatus] :kdump_status The value of attribute `kdump_status`.
    # 
    # @option opts [Ksm, Hash] :ksm The value of attribute `ksm`.
    # 
    # @option opts [Version, Hash] :libvirt_version The value of attribute `libvirt_version`.
    # 
    # @option opts [Integer] :max_scheduling_memory The value of attribute `max_scheduling_memory`.
    # 
    # @option opts [Integer] :memory The value of attribute `memory`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<NetworkAttachment>, Array<Hash>] :network_attachments The values of attribute `network_attachments`.
    # 
    # @option opts [Boolean] :network_operation_in_progress The value of attribute `network_operation_in_progress`.
    # 
    # @option opts [Array<HostNic>, Array<Hash>] :nics The values of attribute `nics`.
    # 
    # @option opts [Array<NumaNode>, Array<Hash>] :numa_nodes The values of attribute `numa_nodes`.
    # 
    # @option opts [Boolean] :numa_supported The value of attribute `numa_supported`.
    # 
    # @option opts [OperatingSystem, Hash] :os The value of attribute `os`.
    # 
    # @option opts [Boolean] :override_iptables The value of attribute `override_iptables`.
    # 
    # @option opts [Boolean] :ovn_configured The value of attribute `ovn_configured`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [Integer] :port The value of attribute `port`.
    # 
    # @option opts [PowerManagement, Hash] :power_management The value of attribute `power_management`.
    # 
    # @option opts [HostProtocol] :protocol The value of attribute `protocol`.
    # 
    # @option opts [Boolean] :reinstallation_required The value of attribute `reinstallation_required`.
    # 
    # @option opts [String] :root_password The value of attribute `root_password`.
    # 
    # @option opts [SeLinux, Hash] :se_linux The value of attribute `se_linux`.
    # 
    # @option opts [Spm, Hash] :spm The value of attribute `spm`.
    # 
    # @option opts [Ssh, Hash] :ssh The value of attribute `ssh`.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # @option opts [HostStatus] :status The value of attribute `status`.
    # 
    # @option opts [String] :status_detail The value of attribute `status_detail`.
    # 
    # @option opts [Array<StorageConnectionExtension>, Array<Hash>] :storage_connection_extensions The values of attribute `storage_connection_extensions`.
    # 
    # @option opts [Array<HostStorage>, Array<Hash>] :storages The values of attribute `storages`.
    # 
    # @option opts [VmSummary, Hash] :summary The value of attribute `summary`.
    # 
    # @option opts [Array<Tag>, Array<Hash>] :tags The values of attribute `tags`.
    # 
    # @option opts [TransparentHugePages, Hash] :transparent_huge_pages The value of attribute `transparent_huge_pages`.
    # 
    # @option opts [HostType] :type The value of attribute `type`.
    # 
    # @option opts [Array<UnmanagedNetwork>, Array<Hash>] :unmanaged_networks The values of attribute `unmanaged_networks`.
    # 
    # @option opts [Boolean] :update_available The value of attribute `update_available`.
    # 
    # @option opts [Version, Hash] :version The value of attribute `version`.
    # 
    # @option opts [VgpuPlacement] :vgpu_placement The value of attribute `vgpu_placement`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.address = opts[:address]
      self.affinity_labels = opts[:affinity_labels]
      self.agents = opts[:agents]
      self.auto_numa_status = opts[:auto_numa_status]
      self.certificate = opts[:certificate]
      self.cluster = opts[:cluster]
      self.cpu = opts[:cpu]
      self.cpu_units = opts[:cpu_units]
      self.device_passthrough = opts[:device_passthrough]
      self.devices = opts[:devices]
      self.display = opts[:display]
      self.external_host_provider = opts[:external_host_provider]
      self.external_network_provider_configurations = opts[:external_network_provider_configurations]
      self.external_status = opts[:external_status]
      self.hardware_information = opts[:hardware_information]
      self.hooks = opts[:hooks]
      self.hosted_engine = opts[:hosted_engine]
      self.iscsi = opts[:iscsi]
      self.katello_errata = opts[:katello_errata]
      self.kdump_status = opts[:kdump_status]
      self.ksm = opts[:ksm]
      self.libvirt_version = opts[:libvirt_version]
      self.max_scheduling_memory = opts[:max_scheduling_memory]
      self.memory = opts[:memory]
      self.network_attachments = opts[:network_attachments]
      self.network_operation_in_progress = opts[:network_operation_in_progress]
      self.nics = opts[:nics]
      self.numa_nodes = opts[:numa_nodes]
      self.numa_supported = opts[:numa_supported]
      self.os = opts[:os]
      self.override_iptables = opts[:override_iptables]
      self.ovn_configured = opts[:ovn_configured]
      self.permissions = opts[:permissions]
      self.port = opts[:port]
      self.power_management = opts[:power_management]
      self.protocol = opts[:protocol]
      self.reinstallation_required = opts[:reinstallation_required]
      self.root_password = opts[:root_password]
      self.se_linux = opts[:se_linux]
      self.spm = opts[:spm]
      self.ssh = opts[:ssh]
      self.statistics = opts[:statistics]
      self.status = opts[:status]
      self.status_detail = opts[:status_detail]
      self.storage_connection_extensions = opts[:storage_connection_extensions]
      self.storages = opts[:storages]
      self.summary = opts[:summary]
      self.tags = opts[:tags]
      self.transparent_huge_pages = opts[:transparent_huge_pages]
      self.type = opts[:type]
      self.unmanaged_networks = opts[:unmanaged_networks]
      self.update_available = opts[:update_available]
      self.version = opts[:version]
      self.vgpu_placement = opts[:vgpu_placement]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @address == other.address &&
      @affinity_labels == other.affinity_labels &&
      @agents == other.agents &&
      @auto_numa_status == other.auto_numa_status &&
      @certificate == other.certificate &&
      @cluster == other.cluster &&
      @cpu == other.cpu &&
      @cpu_units == other.cpu_units &&
      @device_passthrough == other.device_passthrough &&
      @devices == other.devices &&
      @display == other.display &&
      @external_host_provider == other.external_host_provider &&
      @external_network_provider_configurations == other.external_network_provider_configurations &&
      @external_status == other.external_status &&
      @hardware_information == other.hardware_information &&
      @hooks == other.hooks &&
      @hosted_engine == other.hosted_engine &&
      @iscsi == other.iscsi &&
      @katello_errata == other.katello_errata &&
      @kdump_status == other.kdump_status &&
      @ksm == other.ksm &&
      @libvirt_version == other.libvirt_version &&
      @max_scheduling_memory == other.max_scheduling_memory &&
      @memory == other.memory &&
      @network_attachments == other.network_attachments &&
      @network_operation_in_progress == other.network_operation_in_progress &&
      @nics == other.nics &&
      @numa_nodes == other.numa_nodes &&
      @numa_supported == other.numa_supported &&
      @os == other.os &&
      @override_iptables == other.override_iptables &&
      @ovn_configured == other.ovn_configured &&
      @permissions == other.permissions &&
      @port == other.port &&
      @power_management == other.power_management &&
      @protocol == other.protocol &&
      @reinstallation_required == other.reinstallation_required &&
      @root_password == other.root_password &&
      @se_linux == other.se_linux &&
      @spm == other.spm &&
      @ssh == other.ssh &&
      @statistics == other.statistics &&
      @status == other.status &&
      @status_detail == other.status_detail &&
      @storage_connection_extensions == other.storage_connection_extensions &&
      @storages == other.storages &&
      @summary == other.summary &&
      @tags == other.tags &&
      @transparent_huge_pages == other.transparent_huge_pages &&
      @type == other.type &&
      @unmanaged_networks == other.unmanaged_networks &&
      @update_available == other.update_available &&
      @version == other.version &&
      @vgpu_placement == other.vgpu_placement
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @address.hash +
      @affinity_labels.hash +
      @agents.hash +
      @auto_numa_status.hash +
      @certificate.hash +
      @cluster.hash +
      @cpu.hash +
      @cpu_units.hash +
      @device_passthrough.hash +
      @devices.hash +
      @display.hash +
      @external_host_provider.hash +
      @external_network_provider_configurations.hash +
      @external_status.hash +
      @hardware_information.hash +
      @hooks.hash +
      @hosted_engine.hash +
      @iscsi.hash +
      @katello_errata.hash +
      @kdump_status.hash +
      @ksm.hash +
      @libvirt_version.hash +
      @max_scheduling_memory.hash +
      @memory.hash +
      @network_attachments.hash +
      @network_operation_in_progress.hash +
      @nics.hash +
      @numa_nodes.hash +
      @numa_supported.hash +
      @os.hash +
      @override_iptables.hash +
      @ovn_configured.hash +
      @permissions.hash +
      @port.hash +
      @power_management.hash +
      @protocol.hash +
      @reinstallation_required.hash +
      @root_password.hash +
      @se_linux.hash +
      @spm.hash +
      @ssh.hash +
      @statistics.hash +
      @status.hash +
      @status_detail.hash +
      @storage_connection_extensions.hash +
      @storages.hash +
      @summary.hash +
      @tags.hash +
      @transparent_huge_pages.hash +
      @type.hash +
      @unmanaged_networks.hash +
      @update_available.hash +
      @version.hash +
      @vgpu_placement.hash
    end
    
  end
  
  class HostCpuUnit < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `core_id` attribute.
    # 
    # @return [Integer]
    # 
    def core_id
      @core_id
    end
    
    # 
    # Sets the value of the `core_id` attribute.
    # 
    # @param value [Integer]
    # 
    def core_id=(value)
      @core_id = value
    end
    
    # 
    # Returns the value of the `cpu_id` attribute.
    # 
    # @return [Integer]
    # 
    def cpu_id
      @cpu_id
    end
    
    # 
    # Sets the value of the `cpu_id` attribute.
    # 
    # @param value [Integer]
    # 
    def cpu_id=(value)
      @cpu_id = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `runs_vdsm` attribute.
    # 
    # @return [Boolean]
    # 
    def runs_vdsm
      @runs_vdsm
    end
    
    # 
    # Sets the value of the `runs_vdsm` attribute.
    # 
    # @param value [Boolean]
    # 
    def runs_vdsm=(value)
      @runs_vdsm = value
    end
    
    # 
    # Returns the value of the `socket_id` attribute.
    # 
    # @return [Integer]
    # 
    def socket_id
      @socket_id
    end
    
    # 
    # Sets the value of the `socket_id` attribute.
    # 
    # @param value [Integer]
    # 
    def socket_id=(value)
      @socket_id = value
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Creates a new instance of the {HostCpuUnit} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Integer] :core_id The value of attribute `core_id`.
    # 
    # @option opts [Integer] :cpu_id The value of attribute `cpu_id`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Boolean] :runs_vdsm The value of attribute `runs_vdsm`.
    # 
    # @option opts [Integer] :socket_id The value of attribute `socket_id`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.core_id = opts[:core_id]
      self.cpu_id = opts[:cpu_id]
      self.runs_vdsm = opts[:runs_vdsm]
      self.socket_id = opts[:socket_id]
      self.vms = opts[:vms]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @core_id == other.core_id &&
      @cpu_id == other.cpu_id &&
      @runs_vdsm == other.runs_vdsm &&
      @socket_id == other.socket_id &&
      @vms == other.vms
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @core_id.hash +
      @cpu_id.hash +
      @runs_vdsm.hash +
      @socket_id.hash +
      @vms.hash
    end
    
  end
  
  class HostDevice < Identified
    
    # 
    # Returns the value of the `capability` attribute.
    # 
    # @return [String]
    # 
    def capability
      @capability
    end
    
    # 
    # Sets the value of the `capability` attribute.
    # 
    # @param value [String]
    # 
    def capability=(value)
      @capability = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `driver` attribute.
    # 
    # @return [String]
    # 
    def driver
      @driver
    end
    
    # 
    # Sets the value of the `driver` attribute.
    # 
    # @param value [String]
    # 
    def driver=(value)
      @driver = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `iommu_group` attribute.
    # 
    # @return [Integer]
    # 
    def iommu_group
      @iommu_group
    end
    
    # 
    # Sets the value of the `iommu_group` attribute.
    # 
    # @param value [Integer]
    # 
    def iommu_group=(value)
      @iommu_group = value
    end
    
    # 
    # Returns the value of the `m_dev_types` attribute.
    # 
    # @return [Array<MDevType>]
    # 
    def m_dev_types
      @m_dev_types
    end
    
    # 
    # Sets the value of the `m_dev_types` attribute.
    # 
    # @param list [Array<MDevType>]
    # 
    def m_dev_types=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = MDevType.new(value)
          end
        end
      end
      @m_dev_types = list
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `parent_device` attribute.
    # 
    # @return [HostDevice]
    # 
    def parent_device
      @parent_device
    end
    
    # 
    # Sets the value of the `parent_device` attribute.
    # 
    # @param value [HostDevice, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostDevice} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def parent_device=(value)
      if value.is_a?(Hash)
        value = HostDevice.new(value)
      end
      @parent_device = value
    end
    
    # 
    # Returns the value of the `physical_function` attribute.
    # 
    # @return [HostDevice]
    # 
    def physical_function
      @physical_function
    end
    
    # 
    # Sets the value of the `physical_function` attribute.
    # 
    # @param value [HostDevice, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostDevice} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def physical_function=(value)
      if value.is_a?(Hash)
        value = HostDevice.new(value)
      end
      @physical_function = value
    end
    
    # 
    # Returns the value of the `placeholder` attribute.
    # 
    # @return [Boolean]
    # 
    def placeholder
      @placeholder
    end
    
    # 
    # Sets the value of the `placeholder` attribute.
    # 
    # @param value [Boolean]
    # 
    def placeholder=(value)
      @placeholder = value
    end
    
    # 
    # Returns the value of the `product` attribute.
    # 
    # @return [Product]
    # 
    def product
      @product
    end
    
    # 
    # Sets the value of the `product` attribute.
    # 
    # @param value [Product, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Product} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def product=(value)
      if value.is_a?(Hash)
        value = Product.new(value)
      end
      @product = value
    end
    
    # 
    # Returns the value of the `vendor` attribute.
    # 
    # @return [Vendor]
    # 
    def vendor
      @vendor
    end
    
    # 
    # Sets the value of the `vendor` attribute.
    # 
    # @param value [Vendor, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vendor} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vendor=(value)
      if value.is_a?(Hash)
        value = Vendor.new(value)
      end
      @vendor = value
    end
    
    # 
    # Returns the value of the `virtual_functions` attribute.
    # 
    # @return [Integer]
    # 
    def virtual_functions
      @virtual_functions
    end
    
    # 
    # Sets the value of the `virtual_functions` attribute.
    # 
    # @param value [Integer]
    # 
    def virtual_functions=(value)
      @virtual_functions = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Creates a new instance of the {HostDevice} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :capability The value of attribute `capability`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :driver The value of attribute `driver`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Integer] :iommu_group The value of attribute `iommu_group`.
    # 
    # @option opts [Array<MDevType>, Array<Hash>] :m_dev_types The values of attribute `m_dev_types`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [HostDevice, Hash] :parent_device The value of attribute `parent_device`.
    # 
    # @option opts [HostDevice, Hash] :physical_function The value of attribute `physical_function`.
    # 
    # @option opts [Boolean] :placeholder The value of attribute `placeholder`.
    # 
    # @option opts [Product, Hash] :product The value of attribute `product`.
    # 
    # @option opts [Vendor, Hash] :vendor The value of attribute `vendor`.
    # 
    # @option opts [Integer] :virtual_functions The value of attribute `virtual_functions`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.capability = opts[:capability]
      self.driver = opts[:driver]
      self.host = opts[:host]
      self.iommu_group = opts[:iommu_group]
      self.m_dev_types = opts[:m_dev_types]
      self.parent_device = opts[:parent_device]
      self.physical_function = opts[:physical_function]
      self.placeholder = opts[:placeholder]
      self.product = opts[:product]
      self.vendor = opts[:vendor]
      self.virtual_functions = opts[:virtual_functions]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @capability == other.capability &&
      @driver == other.driver &&
      @host == other.host &&
      @iommu_group == other.iommu_group &&
      @m_dev_types == other.m_dev_types &&
      @parent_device == other.parent_device &&
      @physical_function == other.physical_function &&
      @placeholder == other.placeholder &&
      @product == other.product &&
      @vendor == other.vendor &&
      @virtual_functions == other.virtual_functions &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @capability.hash +
      @driver.hash +
      @host.hash +
      @iommu_group.hash +
      @m_dev_types.hash +
      @parent_device.hash +
      @physical_function.hash +
      @placeholder.hash +
      @product.hash +
      @vendor.hash +
      @virtual_functions.hash +
      @vm.hash
    end
    
  end
  
  class HostNic < Identified
    
    # 
    # Returns the value of the `ad_aggregator_id` attribute.
    # 
    # @return [Integer]
    # 
    def ad_aggregator_id
      @ad_aggregator_id
    end
    
    # 
    # Sets the value of the `ad_aggregator_id` attribute.
    # 
    # @param value [Integer]
    # 
    def ad_aggregator_id=(value)
      @ad_aggregator_id = value
    end
    
    # 
    # Returns the value of the `base_interface` attribute.
    # 
    # @return [String]
    # 
    def base_interface
      @base_interface
    end
    
    # 
    # Sets the value of the `base_interface` attribute.
    # 
    # @param value [String]
    # 
    def base_interface=(value)
      @base_interface = value
    end
    
    # 
    # Returns the value of the `bonding` attribute.
    # 
    # @return [Bonding]
    # 
    def bonding
      @bonding
    end
    
    # 
    # Sets the value of the `bonding` attribute.
    # 
    # @param value [Bonding, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Bonding} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def bonding=(value)
      if value.is_a?(Hash)
        value = Bonding.new(value)
      end
      @bonding = value
    end
    
    # 
    # Returns the value of the `boot_protocol` attribute.
    # 
    # @return [BootProtocol]
    # 
    def boot_protocol
      @boot_protocol
    end
    
    # 
    # Sets the value of the `boot_protocol` attribute.
    # 
    # @param value [BootProtocol]
    # 
    def boot_protocol=(value)
      @boot_protocol = value
    end
    
    # 
    # Returns the value of the `bridged` attribute.
    # 
    # @return [Boolean]
    # 
    def bridged
      @bridged
    end
    
    # 
    # Sets the value of the `bridged` attribute.
    # 
    # @param value [Boolean]
    # 
    def bridged=(value)
      @bridged = value
    end
    
    # 
    # Returns the value of the `check_connectivity` attribute.
    # 
    # @return [Boolean]
    # 
    def check_connectivity
      @check_connectivity
    end
    
    # 
    # Sets the value of the `check_connectivity` attribute.
    # 
    # @param value [Boolean]
    # 
    def check_connectivity=(value)
      @check_connectivity = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `custom_configuration` attribute.
    # 
    # @return [Boolean]
    # 
    def custom_configuration
      @custom_configuration
    end
    
    # 
    # Sets the value of the `custom_configuration` attribute.
    # 
    # @param value [Boolean]
    # 
    def custom_configuration=(value)
      @custom_configuration = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `ip` attribute.
    # 
    # @return [Ip]
    # 
    def ip
      @ip
    end
    
    # 
    # Sets the value of the `ip` attribute.
    # 
    # @param value [Ip, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Ip} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def ip=(value)
      if value.is_a?(Hash)
        value = Ip.new(value)
      end
      @ip = value
    end
    
    # 
    # Returns the value of the `ipv6` attribute.
    # 
    # @return [Ip]
    # 
    def ipv6
      @ipv6
    end
    
    # 
    # Sets the value of the `ipv6` attribute.
    # 
    # @param value [Ip, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Ip} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def ipv6=(value)
      if value.is_a?(Hash)
        value = Ip.new(value)
      end
      @ipv6 = value
    end
    
    # 
    # Returns the value of the `ipv6_boot_protocol` attribute.
    # 
    # @return [BootProtocol]
    # 
    def ipv6_boot_protocol
      @ipv6_boot_protocol
    end
    
    # 
    # Sets the value of the `ipv6_boot_protocol` attribute.
    # 
    # @param value [BootProtocol]
    # 
    def ipv6_boot_protocol=(value)
      @ipv6_boot_protocol = value
    end
    
    # 
    # Returns the value of the `mac` attribute.
    # 
    # @return [Mac]
    # 
    def mac
      @mac
    end
    
    # 
    # Sets the value of the `mac` attribute.
    # 
    # @param value [Mac, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Mac} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def mac=(value)
      if value.is_a?(Hash)
        value = Mac.new(value)
      end
      @mac = value
    end
    
    # 
    # Returns the value of the `mtu` attribute.
    # 
    # @return [Integer]
    # 
    def mtu
      @mtu
    end
    
    # 
    # Sets the value of the `mtu` attribute.
    # 
    # @param value [Integer]
    # 
    def mtu=(value)
      @mtu = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `network` attribute.
    # 
    # @return [Network]
    # 
    def network
      @network
    end
    
    # 
    # Sets the value of the `network` attribute.
    # 
    # @param value [Network, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Network} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def network=(value)
      if value.is_a?(Hash)
        value = Network.new(value)
      end
      @network = value
    end
    
    # 
    # Returns the value of the `network_labels` attribute.
    # 
    # @return [Array<NetworkLabel>]
    # 
    def network_labels
      @network_labels
    end
    
    # 
    # Sets the value of the `network_labels` attribute.
    # 
    # @param list [Array<NetworkLabel>]
    # 
    def network_labels=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NetworkLabel.new(value)
          end
        end
      end
      @network_labels = list
    end
    
    # 
    # Returns the value of the `override_configuration` attribute.
    # 
    # @return [Boolean]
    # 
    def override_configuration
      @override_configuration
    end
    
    # 
    # Sets the value of the `override_configuration` attribute.
    # 
    # @param value [Boolean]
    # 
    def override_configuration=(value)
      @override_configuration = value
    end
    
    # 
    # Returns the value of the `physical_function` attribute.
    # 
    # @return [HostNic]
    # 
    def physical_function
      @physical_function
    end
    
    # 
    # Sets the value of the `physical_function` attribute.
    # 
    # @param value [HostNic, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostNic} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def physical_function=(value)
      if value.is_a?(Hash)
        value = HostNic.new(value)
      end
      @physical_function = value
    end
    
    # 
    # Returns the value of the `properties` attribute.
    # 
    # @return [Array<Property>]
    # 
    def properties
      @properties
    end
    
    # 
    # Sets the value of the `properties` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @properties = list
    end
    
    # 
    # Returns the value of the `qos` attribute.
    # 
    # @return [Qos]
    # 
    def qos
      @qos
    end
    
    # 
    # Sets the value of the `qos` attribute.
    # 
    # @param value [Qos, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Qos} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def qos=(value)
      if value.is_a?(Hash)
        value = Qos.new(value)
      end
      @qos = value
    end
    
    # 
    # Returns the value of the `speed` attribute.
    # 
    # @return [Integer]
    # 
    def speed
      @speed
    end
    
    # 
    # Sets the value of the `speed` attribute.
    # 
    # @param value [Integer]
    # 
    def speed=(value)
      @speed = value
    end
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [NicStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [NicStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `virtual_functions_configuration` attribute.
    # 
    # @return [HostNicVirtualFunctionsConfiguration]
    # 
    def virtual_functions_configuration
      @virtual_functions_configuration
    end
    
    # 
    # Sets the value of the `virtual_functions_configuration` attribute.
    # 
    # @param value [HostNicVirtualFunctionsConfiguration, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HostNicVirtualFunctionsConfiguration} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def virtual_functions_configuration=(value)
      if value.is_a?(Hash)
        value = HostNicVirtualFunctionsConfiguration.new(value)
      end
      @virtual_functions_configuration = value
    end
    
    # 
    # Returns the value of the `vlan` attribute.
    # 
    # @return [Vlan]
    # 
    def vlan
      @vlan
    end
    
    # 
    # Sets the value of the `vlan` attribute.
    # 
    # @param value [Vlan, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vlan} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vlan=(value)
      if value.is_a?(Hash)
        value = Vlan.new(value)
      end
      @vlan = value
    end
    
    # 
    # Creates a new instance of the {HostNic} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Integer] :ad_aggregator_id The value of attribute `ad_aggregator_id`.
    # 
    # @option opts [String] :base_interface The value of attribute `base_interface`.
    # 
    # @option opts [Bonding, Hash] :bonding The value of attribute `bonding`.
    # 
    # @option opts [BootProtocol] :boot_protocol The value of attribute `boot_protocol`.
    # 
    # @option opts [Boolean] :bridged The value of attribute `bridged`.
    # 
    # @option opts [Boolean] :check_connectivity The value of attribute `check_connectivity`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Boolean] :custom_configuration The value of attribute `custom_configuration`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Ip, Hash] :ip The value of attribute `ip`.
    # 
    # @option opts [Ip, Hash] :ipv6 The value of attribute `ipv6`.
    # 
    # @option opts [BootProtocol] :ipv6_boot_protocol The value of attribute `ipv6_boot_protocol`.
    # 
    # @option opts [Mac, Hash] :mac The value of attribute `mac`.
    # 
    # @option opts [Integer] :mtu The value of attribute `mtu`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Network, Hash] :network The value of attribute `network`.
    # 
    # @option opts [Array<NetworkLabel>, Array<Hash>] :network_labels The values of attribute `network_labels`.
    # 
    # @option opts [Boolean] :override_configuration The value of attribute `override_configuration`.
    # 
    # @option opts [HostNic, Hash] :physical_function The value of attribute `physical_function`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :properties The values of attribute `properties`.
    # 
    # @option opts [Qos, Hash] :qos The value of attribute `qos`.
    # 
    # @option opts [Integer] :speed The value of attribute `speed`.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # @option opts [NicStatus] :status The value of attribute `status`.
    # 
    # @option opts [HostNicVirtualFunctionsConfiguration, Hash] :virtual_functions_configuration The value of attribute `virtual_functions_configuration`.
    # 
    # @option opts [Vlan, Hash] :vlan The value of attribute `vlan`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.ad_aggregator_id = opts[:ad_aggregator_id]
      self.base_interface = opts[:base_interface]
      self.bonding = opts[:bonding]
      self.boot_protocol = opts[:boot_protocol]
      self.bridged = opts[:bridged]
      self.check_connectivity = opts[:check_connectivity]
      self.custom_configuration = opts[:custom_configuration]
      self.host = opts[:host]
      self.ip = opts[:ip]
      self.ipv6 = opts[:ipv6]
      self.ipv6_boot_protocol = opts[:ipv6_boot_protocol]
      self.mac = opts[:mac]
      self.mtu = opts[:mtu]
      self.network = opts[:network]
      self.network_labels = opts[:network_labels]
      self.override_configuration = opts[:override_configuration]
      self.physical_function = opts[:physical_function]
      self.properties = opts[:properties]
      self.qos = opts[:qos]
      self.speed = opts[:speed]
      self.statistics = opts[:statistics]
      self.status = opts[:status]
      self.virtual_functions_configuration = opts[:virtual_functions_configuration]
      self.vlan = opts[:vlan]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @ad_aggregator_id == other.ad_aggregator_id &&
      @base_interface == other.base_interface &&
      @bonding == other.bonding &&
      @boot_protocol == other.boot_protocol &&
      @bridged == other.bridged &&
      @check_connectivity == other.check_connectivity &&
      @custom_configuration == other.custom_configuration &&
      @host == other.host &&
      @ip == other.ip &&
      @ipv6 == other.ipv6 &&
      @ipv6_boot_protocol == other.ipv6_boot_protocol &&
      @mac == other.mac &&
      @mtu == other.mtu &&
      @network == other.network &&
      @network_labels == other.network_labels &&
      @override_configuration == other.override_configuration &&
      @physical_function == other.physical_function &&
      @properties == other.properties &&
      @qos == other.qos &&
      @speed == other.speed &&
      @statistics == other.statistics &&
      @status == other.status &&
      @virtual_functions_configuration == other.virtual_functions_configuration &&
      @vlan == other.vlan
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @ad_aggregator_id.hash +
      @base_interface.hash +
      @bonding.hash +
      @boot_protocol.hash +
      @bridged.hash +
      @check_connectivity.hash +
      @custom_configuration.hash +
      @host.hash +
      @ip.hash +
      @ipv6.hash +
      @ipv6_boot_protocol.hash +
      @mac.hash +
      @mtu.hash +
      @network.hash +
      @network_labels.hash +
      @override_configuration.hash +
      @physical_function.hash +
      @properties.hash +
      @qos.hash +
      @speed.hash +
      @statistics.hash +
      @status.hash +
      @virtual_functions_configuration.hash +
      @vlan.hash
    end
    
  end
  
  class HostStorage < Identified
    
    # 
    # Returns the value of the `address` attribute.
    # 
    # @return [String]
    # 
    def address
      @address
    end
    
    # 
    # Sets the value of the `address` attribute.
    # 
    # @param value [String]
    # 
    def address=(value)
      @address = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `driver_options` attribute.
    # 
    # @return [Array<Property>]
    # 
    def driver_options
      @driver_options
    end
    
    # 
    # Sets the value of the `driver_options` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def driver_options=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @driver_options = list
    end
    
    # 
    # Returns the value of the `driver_sensitive_options` attribute.
    # 
    # @return [Array<Property>]
    # 
    def driver_sensitive_options
      @driver_sensitive_options
    end
    
    # 
    # Sets the value of the `driver_sensitive_options` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def driver_sensitive_options=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @driver_sensitive_options = list
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `logical_units` attribute.
    # 
    # @return [Array<LogicalUnit>]
    # 
    def logical_units
      @logical_units
    end
    
    # 
    # Sets the value of the `logical_units` attribute.
    # 
    # @param list [Array<LogicalUnit>]
    # 
    def logical_units=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = LogicalUnit.new(value)
          end
        end
      end
      @logical_units = list
    end
    
    # 
    # Returns the value of the `mount_options` attribute.
    # 
    # @return [String]
    # 
    def mount_options
      @mount_options
    end
    
    # 
    # Sets the value of the `mount_options` attribute.
    # 
    # @param value [String]
    # 
    def mount_options=(value)
      @mount_options = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `nfs_retrans` attribute.
    # 
    # @return [Integer]
    # 
    def nfs_retrans
      @nfs_retrans
    end
    
    # 
    # Sets the value of the `nfs_retrans` attribute.
    # 
    # @param value [Integer]
    # 
    def nfs_retrans=(value)
      @nfs_retrans = value
    end
    
    # 
    # Returns the value of the `nfs_timeo` attribute.
    # 
    # @return [Integer]
    # 
    def nfs_timeo
      @nfs_timeo
    end
    
    # 
    # Sets the value of the `nfs_timeo` attribute.
    # 
    # @param value [Integer]
    # 
    def nfs_timeo=(value)
      @nfs_timeo = value
    end
    
    # 
    # Returns the value of the `nfs_version` attribute.
    # 
    # @return [NfsVersion]
    # 
    def nfs_version
      @nfs_version
    end
    
    # 
    # Sets the value of the `nfs_version` attribute.
    # 
    # @param value [NfsVersion]
    # 
    def nfs_version=(value)
      @nfs_version = value
    end
    
    # 
    # Returns the value of the `override_luns` attribute.
    # 
    # @return [Boolean]
    # 
    def override_luns
      @override_luns
    end
    
    # 
    # Sets the value of the `override_luns` attribute.
    # 
    # @param value [Boolean]
    # 
    def override_luns=(value)
      @override_luns = value
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `path` attribute.
    # 
    # @return [String]
    # 
    def path
      @path
    end
    
    # 
    # Sets the value of the `path` attribute.
    # 
    # @param value [String]
    # 
    def path=(value)
      @path = value
    end
    
    # 
    # Returns the value of the `port` attribute.
    # 
    # @return [Integer]
    # 
    def port
      @port
    end
    
    # 
    # Sets the value of the `port` attribute.
    # 
    # @param value [Integer]
    # 
    def port=(value)
      @port = value
    end
    
    # 
    # Returns the value of the `portal` attribute.
    # 
    # @return [String]
    # 
    def portal
      @portal
    end
    
    # 
    # Sets the value of the `portal` attribute.
    # 
    # @param value [String]
    # 
    def portal=(value)
      @portal = value
    end
    
    # 
    # Returns the value of the `target` attribute.
    # 
    # @return [String]
    # 
    def target
      @target
    end
    
    # 
    # Sets the value of the `target` attribute.
    # 
    # @param value [String]
    # 
    def target=(value)
      @target = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [StorageType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [StorageType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Returns the value of the `vfs_type` attribute.
    # 
    # @return [String]
    # 
    def vfs_type
      @vfs_type
    end
    
    # 
    # Sets the value of the `vfs_type` attribute.
    # 
    # @param value [String]
    # 
    def vfs_type=(value)
      @vfs_type = value
    end
    
    # 
    # Returns the value of the `volume_group` attribute.
    # 
    # @return [VolumeGroup]
    # 
    def volume_group
      @volume_group
    end
    
    # 
    # Sets the value of the `volume_group` attribute.
    # 
    # @param value [VolumeGroup, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VolumeGroup} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def volume_group=(value)
      if value.is_a?(Hash)
        value = VolumeGroup.new(value)
      end
      @volume_group = value
    end
    
    # 
    # Creates a new instance of the {HostStorage} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :address The value of attribute `address`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :driver_options The values of attribute `driver_options`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :driver_sensitive_options The values of attribute `driver_sensitive_options`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Array<LogicalUnit>, Array<Hash>] :logical_units The values of attribute `logical_units`.
    # 
    # @option opts [String] :mount_options The value of attribute `mount_options`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Integer] :nfs_retrans The value of attribute `nfs_retrans`.
    # 
    # @option opts [Integer] :nfs_timeo The value of attribute `nfs_timeo`.
    # 
    # @option opts [NfsVersion] :nfs_version The value of attribute `nfs_version`.
    # 
    # @option opts [Boolean] :override_luns The value of attribute `override_luns`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [String] :path The value of attribute `path`.
    # 
    # @option opts [Integer] :port The value of attribute `port`.
    # 
    # @option opts [String] :portal The value of attribute `portal`.
    # 
    # @option opts [String] :target The value of attribute `target`.
    # 
    # @option opts [StorageType] :type The value of attribute `type`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # @option opts [String] :vfs_type The value of attribute `vfs_type`.
    # 
    # @option opts [VolumeGroup, Hash] :volume_group The value of attribute `volume_group`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.address = opts[:address]
      self.driver_options = opts[:driver_options]
      self.driver_sensitive_options = opts[:driver_sensitive_options]
      self.host = opts[:host]
      self.logical_units = opts[:logical_units]
      self.mount_options = opts[:mount_options]
      self.nfs_retrans = opts[:nfs_retrans]
      self.nfs_timeo = opts[:nfs_timeo]
      self.nfs_version = opts[:nfs_version]
      self.override_luns = opts[:override_luns]
      self.password = opts[:password]
      self.path = opts[:path]
      self.port = opts[:port]
      self.portal = opts[:portal]
      self.target = opts[:target]
      self.type = opts[:type]
      self.username = opts[:username]
      self.vfs_type = opts[:vfs_type]
      self.volume_group = opts[:volume_group]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @address == other.address &&
      @driver_options == other.driver_options &&
      @driver_sensitive_options == other.driver_sensitive_options &&
      @host == other.host &&
      @logical_units == other.logical_units &&
      @mount_options == other.mount_options &&
      @nfs_retrans == other.nfs_retrans &&
      @nfs_timeo == other.nfs_timeo &&
      @nfs_version == other.nfs_version &&
      @override_luns == other.override_luns &&
      @password == other.password &&
      @path == other.path &&
      @port == other.port &&
      @portal == other.portal &&
      @target == other.target &&
      @type == other.type &&
      @username == other.username &&
      @vfs_type == other.vfs_type &&
      @volume_group == other.volume_group
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @address.hash +
      @driver_options.hash +
      @driver_sensitive_options.hash +
      @host.hash +
      @logical_units.hash +
      @mount_options.hash +
      @nfs_retrans.hash +
      @nfs_timeo.hash +
      @nfs_version.hash +
      @override_luns.hash +
      @password.hash +
      @path.hash +
      @port.hash +
      @portal.hash +
      @target.hash +
      @type.hash +
      @username.hash +
      @vfs_type.hash +
      @volume_group.hash
    end
    
  end
  
  class Icon < Identified
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `data` attribute.
    # 
    # @return [String]
    # 
    def data
      @data
    end
    
    # 
    # Sets the value of the `data` attribute.
    # 
    # @param value [String]
    # 
    def data=(value)
      @data = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `media_type` attribute.
    # 
    # @return [String]
    # 
    def media_type
      @media_type
    end
    
    # 
    # Sets the value of the `media_type` attribute.
    # 
    # @param value [String]
    # 
    def media_type=(value)
      @media_type = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Creates a new instance of the {Icon} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :data The value of attribute `data`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :media_type The value of attribute `media_type`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.data = opts[:data]
      self.media_type = opts[:media_type]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @data == other.data &&
      @media_type == other.media_type
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @data.hash +
      @media_type.hash
    end
    
  end
  
  class Nic < Device
    
    # 
    # Returns the value of the `boot_protocol` attribute.
    # 
    # @return [BootProtocol]
    # 
    def boot_protocol
      @boot_protocol
    end
    
    # 
    # Sets the value of the `boot_protocol` attribute.
    # 
    # @param value [BootProtocol]
    # 
    def boot_protocol=(value)
      @boot_protocol = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `instance_type` attribute.
    # 
    # @return [InstanceType]
    # 
    def instance_type
      @instance_type
    end
    
    # 
    # Sets the value of the `instance_type` attribute.
    # 
    # @param value [InstanceType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::InstanceType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def instance_type=(value)
      if value.is_a?(Hash)
        value = InstanceType.new(value)
      end
      @instance_type = value
    end
    
    # 
    # Returns the value of the `interface` attribute.
    # 
    # @return [NicInterface]
    # 
    def interface
      @interface
    end
    
    # 
    # Sets the value of the `interface` attribute.
    # 
    # @param value [NicInterface]
    # 
    def interface=(value)
      @interface = value
    end
    
    # 
    # Returns the value of the `linked` attribute.
    # 
    # @return [Boolean]
    # 
    def linked
      @linked
    end
    
    # 
    # Sets the value of the `linked` attribute.
    # 
    # @param value [Boolean]
    # 
    def linked=(value)
      @linked = value
    end
    
    # 
    # Returns the value of the `mac` attribute.
    # 
    # @return [Mac]
    # 
    def mac
      @mac
    end
    
    # 
    # Sets the value of the `mac` attribute.
    # 
    # @param value [Mac, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Mac} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def mac=(value)
      if value.is_a?(Hash)
        value = Mac.new(value)
      end
      @mac = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `network` attribute.
    # 
    # @return [Network]
    # 
    def network
      @network
    end
    
    # 
    # Sets the value of the `network` attribute.
    # 
    # @param value [Network, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Network} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def network=(value)
      if value.is_a?(Hash)
        value = Network.new(value)
      end
      @network = value
    end
    
    # 
    # Returns the value of the `network_attachments` attribute.
    # 
    # @return [Array<NetworkAttachment>]
    # 
    def network_attachments
      @network_attachments
    end
    
    # 
    # Sets the value of the `network_attachments` attribute.
    # 
    # @param list [Array<NetworkAttachment>]
    # 
    def network_attachments=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NetworkAttachment.new(value)
          end
        end
      end
      @network_attachments = list
    end
    
    # 
    # Returns the value of the `network_filter_parameters` attribute.
    # 
    # @return [Array<NetworkFilterParameter>]
    # 
    def network_filter_parameters
      @network_filter_parameters
    end
    
    # 
    # Sets the value of the `network_filter_parameters` attribute.
    # 
    # @param list [Array<NetworkFilterParameter>]
    # 
    def network_filter_parameters=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NetworkFilterParameter.new(value)
          end
        end
      end
      @network_filter_parameters = list
    end
    
    # 
    # Returns the value of the `network_labels` attribute.
    # 
    # @return [Array<NetworkLabel>]
    # 
    def network_labels
      @network_labels
    end
    
    # 
    # Sets the value of the `network_labels` attribute.
    # 
    # @param list [Array<NetworkLabel>]
    # 
    def network_labels=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NetworkLabel.new(value)
          end
        end
      end
      @network_labels = list
    end
    
    # 
    # Returns the value of the `on_boot` attribute.
    # 
    # @return [Boolean]
    # 
    def on_boot
      @on_boot
    end
    
    # 
    # Sets the value of the `on_boot` attribute.
    # 
    # @param value [Boolean]
    # 
    def on_boot=(value)
      @on_boot = value
    end
    
    # 
    # Returns the value of the `plugged` attribute.
    # 
    # @return [Boolean]
    # 
    def plugged
      @plugged
    end
    
    # 
    # Sets the value of the `plugged` attribute.
    # 
    # @param value [Boolean]
    # 
    def plugged=(value)
      @plugged = value
    end
    
    # 
    # Returns the value of the `reported_devices` attribute.
    # 
    # @return [Array<ReportedDevice>]
    # 
    def reported_devices
      @reported_devices
    end
    
    # 
    # Sets the value of the `reported_devices` attribute.
    # 
    # @param list [Array<ReportedDevice>]
    # 
    def reported_devices=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = ReportedDevice.new(value)
          end
        end
      end
      @reported_devices = list
    end
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Returns the value of the `synced` attribute.
    # 
    # @return [Boolean]
    # 
    def synced
      @synced
    end
    
    # 
    # Sets the value of the `synced` attribute.
    # 
    # @param value [Boolean]
    # 
    def synced=(value)
      @synced = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `virtual_function_allowed_labels` attribute.
    # 
    # @return [Array<NetworkLabel>]
    # 
    def virtual_function_allowed_labels
      @virtual_function_allowed_labels
    end
    
    # 
    # Sets the value of the `virtual_function_allowed_labels` attribute.
    # 
    # @param list [Array<NetworkLabel>]
    # 
    def virtual_function_allowed_labels=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NetworkLabel.new(value)
          end
        end
      end
      @virtual_function_allowed_labels = list
    end
    
    # 
    # Returns the value of the `virtual_function_allowed_networks` attribute.
    # 
    # @return [Array<Network>]
    # 
    def virtual_function_allowed_networks
      @virtual_function_allowed_networks
    end
    
    # 
    # Sets the value of the `virtual_function_allowed_networks` attribute.
    # 
    # @param list [Array<Network>]
    # 
    def virtual_function_allowed_networks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Network.new(value)
          end
        end
      end
      @virtual_function_allowed_networks = list
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Returns the value of the `vnic_profile` attribute.
    # 
    # @return [VnicProfile]
    # 
    def vnic_profile
      @vnic_profile
    end
    
    # 
    # Sets the value of the `vnic_profile` attribute.
    # 
    # @param value [VnicProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VnicProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vnic_profile=(value)
      if value.is_a?(Hash)
        value = VnicProfile.new(value)
      end
      @vnic_profile = value
    end
    
    # 
    # Creates a new instance of the {Nic} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [BootProtocol] :boot_protocol The value of attribute `boot_protocol`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [InstanceType, Hash] :instance_type The value of attribute `instance_type`.
    # 
    # @option opts [NicInterface] :interface The value of attribute `interface`.
    # 
    # @option opts [Boolean] :linked The value of attribute `linked`.
    # 
    # @option opts [Mac, Hash] :mac The value of attribute `mac`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Network, Hash] :network The value of attribute `network`.
    # 
    # @option opts [Array<NetworkAttachment>, Array<Hash>] :network_attachments The values of attribute `network_attachments`.
    # 
    # @option opts [Array<NetworkFilterParameter>, Array<Hash>] :network_filter_parameters The values of attribute `network_filter_parameters`.
    # 
    # @option opts [Array<NetworkLabel>, Array<Hash>] :network_labels The values of attribute `network_labels`.
    # 
    # @option opts [Boolean] :on_boot The value of attribute `on_boot`.
    # 
    # @option opts [Boolean] :plugged The value of attribute `plugged`.
    # 
    # @option opts [Array<ReportedDevice>, Array<Hash>] :reported_devices The values of attribute `reported_devices`.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # @option opts [Boolean] :synced The value of attribute `synced`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [Array<NetworkLabel>, Array<Hash>] :virtual_function_allowed_labels The values of attribute `virtual_function_allowed_labels`.
    # 
    # @option opts [Array<Network>, Array<Hash>] :virtual_function_allowed_networks The values of attribute `virtual_function_allowed_networks`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # @option opts [VnicProfile, Hash] :vnic_profile The value of attribute `vnic_profile`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.boot_protocol = opts[:boot_protocol]
      self.interface = opts[:interface]
      self.linked = opts[:linked]
      self.mac = opts[:mac]
      self.network = opts[:network]
      self.network_attachments = opts[:network_attachments]
      self.network_filter_parameters = opts[:network_filter_parameters]
      self.network_labels = opts[:network_labels]
      self.on_boot = opts[:on_boot]
      self.plugged = opts[:plugged]
      self.reported_devices = opts[:reported_devices]
      self.statistics = opts[:statistics]
      self.synced = opts[:synced]
      self.virtual_function_allowed_labels = opts[:virtual_function_allowed_labels]
      self.virtual_function_allowed_networks = opts[:virtual_function_allowed_networks]
      self.vnic_profile = opts[:vnic_profile]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @boot_protocol == other.boot_protocol &&
      @interface == other.interface &&
      @linked == other.linked &&
      @mac == other.mac &&
      @network == other.network &&
      @network_attachments == other.network_attachments &&
      @network_filter_parameters == other.network_filter_parameters &&
      @network_labels == other.network_labels &&
      @on_boot == other.on_boot &&
      @plugged == other.plugged &&
      @reported_devices == other.reported_devices &&
      @statistics == other.statistics &&
      @synced == other.synced &&
      @virtual_function_allowed_labels == other.virtual_function_allowed_labels &&
      @virtual_function_allowed_networks == other.virtual_function_allowed_networks &&
      @vnic_profile == other.vnic_profile
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @boot_protocol.hash +
      @interface.hash +
      @linked.hash +
      @mac.hash +
      @network.hash +
      @network_attachments.hash +
      @network_filter_parameters.hash +
      @network_labels.hash +
      @on_boot.hash +
      @plugged.hash +
      @reported_devices.hash +
      @statistics.hash +
      @synced.hash +
      @virtual_function_allowed_labels.hash +
      @virtual_function_allowed_networks.hash +
      @vnic_profile.hash
    end
    
  end
  
  class OpenStackProvider < ExternalProvider
    
    # 
    # Returns the value of the `authentication_url` attribute.
    # 
    # @return [String]
    # 
    def authentication_url
      @authentication_url
    end
    
    # 
    # Sets the value of the `authentication_url` attribute.
    # 
    # @param value [String]
    # 
    def authentication_url=(value)
      @authentication_url = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `properties` attribute.
    # 
    # @return [Array<Property>]
    # 
    def properties
      @properties
    end
    
    # 
    # Sets the value of the `properties` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @properties = list
    end
    
    # 
    # Returns the value of the `requires_authentication` attribute.
    # 
    # @return [Boolean]
    # 
    def requires_authentication
      @requires_authentication
    end
    
    # 
    # Sets the value of the `requires_authentication` attribute.
    # 
    # @param value [Boolean]
    # 
    def requires_authentication=(value)
      @requires_authentication = value
    end
    
    # 
    # Returns the value of the `tenant_name` attribute.
    # 
    # @return [String]
    # 
    def tenant_name
      @tenant_name
    end
    
    # 
    # Sets the value of the `tenant_name` attribute.
    # 
    # @param value [String]
    # 
    def tenant_name=(value)
      @tenant_name = value
    end
    
    # 
    # Returns the value of the `url` attribute.
    # 
    # @return [String]
    # 
    def url
      @url
    end
    
    # 
    # Sets the value of the `url` attribute.
    # 
    # @param value [String]
    # 
    def url=(value)
      @url = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Creates a new instance of the {OpenStackProvider} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :authentication_url The value of attribute `authentication_url`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :properties The values of attribute `properties`.
    # 
    # @option opts [Boolean] :requires_authentication The value of attribute `requires_authentication`.
    # 
    # @option opts [String] :tenant_name The value of attribute `tenant_name`.
    # 
    # @option opts [String] :url The value of attribute `url`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.tenant_name = opts[:tenant_name]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @tenant_name == other.tenant_name
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @tenant_name.hash
    end
    
  end
  
  class OpenStackVolumeProvider < OpenStackProvider
    
    # 
    # Returns the value of the `authentication_keys` attribute.
    # 
    # @return [Array<OpenstackVolumeAuthenticationKey>]
    # 
    def authentication_keys
      @authentication_keys
    end
    
    # 
    # Sets the value of the `authentication_keys` attribute.
    # 
    # @param list [Array<OpenstackVolumeAuthenticationKey>]
    # 
    def authentication_keys=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = OpenstackVolumeAuthenticationKey.new(value)
          end
        end
      end
      @authentication_keys = list
    end
    
    # 
    # Returns the value of the `authentication_url` attribute.
    # 
    # @return [String]
    # 
    def authentication_url
      @authentication_url
    end
    
    # 
    # Sets the value of the `authentication_url` attribute.
    # 
    # @param value [String]
    # 
    def authentication_url=(value)
      @authentication_url = value
    end
    
    # 
    # Returns the value of the `certificates` attribute.
    # 
    # @return [Array<Certificate>]
    # 
    def certificates
      @certificates
    end
    
    # 
    # Sets the value of the `certificates` attribute.
    # 
    # @param list [Array<Certificate>]
    # 
    def certificates=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Certificate.new(value)
          end
        end
      end
      @certificates = list
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `data_center` attribute.
    # 
    # @return [DataCenter]
    # 
    def data_center
      @data_center
    end
    
    # 
    # Sets the value of the `data_center` attribute.
    # 
    # @param value [DataCenter, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DataCenter} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def data_center=(value)
      if value.is_a?(Hash)
        value = DataCenter.new(value)
      end
      @data_center = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `properties` attribute.
    # 
    # @return [Array<Property>]
    # 
    def properties
      @properties
    end
    
    # 
    # Sets the value of the `properties` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @properties = list
    end
    
    # 
    # Returns the value of the `requires_authentication` attribute.
    # 
    # @return [Boolean]
    # 
    def requires_authentication
      @requires_authentication
    end
    
    # 
    # Sets the value of the `requires_authentication` attribute.
    # 
    # @param value [Boolean]
    # 
    def requires_authentication=(value)
      @requires_authentication = value
    end
    
    # 
    # Returns the value of the `tenant_name` attribute.
    # 
    # @return [String]
    # 
    def tenant_name
      @tenant_name
    end
    
    # 
    # Sets the value of the `tenant_name` attribute.
    # 
    # @param value [String]
    # 
    def tenant_name=(value)
      @tenant_name = value
    end
    
    # 
    # Returns the value of the `url` attribute.
    # 
    # @return [String]
    # 
    def url
      @url
    end
    
    # 
    # Sets the value of the `url` attribute.
    # 
    # @param value [String]
    # 
    def url=(value)
      @url = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Returns the value of the `volume_types` attribute.
    # 
    # @return [Array<OpenStackVolumeType>]
    # 
    def volume_types
      @volume_types
    end
    
    # 
    # Sets the value of the `volume_types` attribute.
    # 
    # @param list [Array<OpenStackVolumeType>]
    # 
    def volume_types=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = OpenStackVolumeType.new(value)
          end
        end
      end
      @volume_types = list
    end
    
    # 
    # Creates a new instance of the {OpenStackVolumeProvider} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<OpenstackVolumeAuthenticationKey>, Array<Hash>] :authentication_keys The values of attribute `authentication_keys`.
    # 
    # @option opts [String] :authentication_url The value of attribute `authentication_url`.
    # 
    # @option opts [Array<Certificate>, Array<Hash>] :certificates The values of attribute `certificates`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [DataCenter, Hash] :data_center The value of attribute `data_center`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :properties The values of attribute `properties`.
    # 
    # @option opts [Boolean] :requires_authentication The value of attribute `requires_authentication`.
    # 
    # @option opts [String] :tenant_name The value of attribute `tenant_name`.
    # 
    # @option opts [String] :url The value of attribute `url`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # @option opts [Array<OpenStackVolumeType>, Array<Hash>] :volume_types The values of attribute `volume_types`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.authentication_keys = opts[:authentication_keys]
      self.certificates = opts[:certificates]
      self.data_center = opts[:data_center]
      self.volume_types = opts[:volume_types]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @authentication_keys == other.authentication_keys &&
      @certificates == other.certificates &&
      @data_center == other.data_center &&
      @volume_types == other.volume_types
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @authentication_keys.hash +
      @certificates.hash +
      @data_center.hash +
      @volume_types.hash
    end
    
  end
  
  class Template < VmBase
    
    # 
    # Returns the value of the `auto_pinning_policy` attribute.
    # 
    # @return [AutoPinningPolicy]
    # 
    def auto_pinning_policy
      @auto_pinning_policy
    end
    
    # 
    # Sets the value of the `auto_pinning_policy` attribute.
    # 
    # @param value [AutoPinningPolicy]
    # 
    def auto_pinning_policy=(value)
      @auto_pinning_policy = value
    end
    
    # 
    # Returns the value of the `bios` attribute.
    # 
    # @return [Bios]
    # 
    def bios
      @bios
    end
    
    # 
    # Sets the value of the `bios` attribute.
    # 
    # @param value [Bios, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Bios} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def bios=(value)
      if value.is_a?(Hash)
        value = Bios.new(value)
      end
      @bios = value
    end
    
    # 
    # Returns the value of the `cdroms` attribute.
    # 
    # @return [Array<Cdrom>]
    # 
    def cdroms
      @cdroms
    end
    
    # 
    # Sets the value of the `cdroms` attribute.
    # 
    # @param list [Array<Cdrom>]
    # 
    def cdroms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Cdrom.new(value)
          end
        end
      end
      @cdroms = list
    end
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `console` attribute.
    # 
    # @return [Console]
    # 
    def console
      @console
    end
    
    # 
    # Sets the value of the `console` attribute.
    # 
    # @param value [Console, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Console} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def console=(value)
      if value.is_a?(Hash)
        value = Console.new(value)
      end
      @console = value
    end
    
    # 
    # Returns the value of the `cpu` attribute.
    # 
    # @return [Cpu]
    # 
    def cpu
      @cpu
    end
    
    # 
    # Sets the value of the `cpu` attribute.
    # 
    # @param value [Cpu, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cpu} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu=(value)
      if value.is_a?(Hash)
        value = Cpu.new(value)
      end
      @cpu = value
    end
    
    # 
    # Returns the value of the `cpu_pinning_policy` attribute.
    # 
    # @return [CpuPinningPolicy]
    # 
    def cpu_pinning_policy
      @cpu_pinning_policy
    end
    
    # 
    # Sets the value of the `cpu_pinning_policy` attribute.
    # 
    # @param value [CpuPinningPolicy]
    # 
    def cpu_pinning_policy=(value)
      @cpu_pinning_policy = value
    end
    
    # 
    # Returns the value of the `cpu_profile` attribute.
    # 
    # @return [CpuProfile]
    # 
    def cpu_profile
      @cpu_profile
    end
    
    # 
    # Sets the value of the `cpu_profile` attribute.
    # 
    # @param value [CpuProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::CpuProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu_profile=(value)
      if value.is_a?(Hash)
        value = CpuProfile.new(value)
      end
      @cpu_profile = value
    end
    
    # 
    # Returns the value of the `cpu_shares` attribute.
    # 
    # @return [Integer]
    # 
    def cpu_shares
      @cpu_shares
    end
    
    # 
    # Sets the value of the `cpu_shares` attribute.
    # 
    # @param value [Integer]
    # 
    def cpu_shares=(value)
      @cpu_shares = value
    end
    
    # 
    # Returns the value of the `creation_time` attribute.
    # 
    # @return [DateTime]
    # 
    def creation_time
      @creation_time
    end
    
    # 
    # Sets the value of the `creation_time` attribute.
    # 
    # @param value [DateTime]
    # 
    def creation_time=(value)
      @creation_time = value
    end
    
    # 
    # Returns the value of the `custom_compatibility_version` attribute.
    # 
    # @return [Version]
    # 
    def custom_compatibility_version
      @custom_compatibility_version
    end
    
    # 
    # Sets the value of the `custom_compatibility_version` attribute.
    # 
    # @param value [Version, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Version} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def custom_compatibility_version=(value)
      if value.is_a?(Hash)
        value = Version.new(value)
      end
      @custom_compatibility_version = value
    end
    
    # 
    # Returns the value of the `custom_cpu_model` attribute.
    # 
    # @return [String]
    # 
    def custom_cpu_model
      @custom_cpu_model
    end
    
    # 
    # Sets the value of the `custom_cpu_model` attribute.
    # 
    # @param value [String]
    # 
    def custom_cpu_model=(value)
      @custom_cpu_model = value
    end
    
    # 
    # Returns the value of the `custom_emulated_machine` attribute.
    # 
    # @return [String]
    # 
    def custom_emulated_machine
      @custom_emulated_machine
    end
    
    # 
    # Sets the value of the `custom_emulated_machine` attribute.
    # 
    # @param value [String]
    # 
    def custom_emulated_machine=(value)
      @custom_emulated_machine = value
    end
    
    # 
    # Returns the value of the `custom_properties` attribute.
    # 
    # @return [Array<CustomProperty>]
    # 
    def custom_properties
      @custom_properties
    end
    
    # 
    # Sets the value of the `custom_properties` attribute.
    # 
    # @param list [Array<CustomProperty>]
    # 
    def custom_properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = CustomProperty.new(value)
          end
        end
      end
      @custom_properties = list
    end
    
    # 
    # Returns the value of the `delete_protected` attribute.
    # 
    # @return [Boolean]
    # 
    def delete_protected
      @delete_protected
    end
    
    # 
    # Sets the value of the `delete_protected` attribute.
    # 
    # @param value [Boolean]
    # 
    def delete_protected=(value)
      @delete_protected = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `disk_attachments` attribute.
    # 
    # @return [Array<DiskAttachment>]
    # 
    def disk_attachments
      @disk_attachments
    end
    
    # 
    # Sets the value of the `disk_attachments` attribute.
    # 
    # @param list [Array<DiskAttachment>]
    # 
    def disk_attachments=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = DiskAttachment.new(value)
          end
        end
      end
      @disk_attachments = list
    end
    
    # 
    # Returns the value of the `display` attribute.
    # 
    # @return [Display]
    # 
    def display
      @display
    end
    
    # 
    # Sets the value of the `display` attribute.
    # 
    # @param value [Display, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Display} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def display=(value)
      if value.is_a?(Hash)
        value = Display.new(value)
      end
      @display = value
    end
    
    # 
    # Returns the value of the `domain` attribute.
    # 
    # @return [Domain]
    # 
    def domain
      @domain
    end
    
    # 
    # Sets the value of the `domain` attribute.
    # 
    # @param value [Domain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Domain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def domain=(value)
      if value.is_a?(Hash)
        value = Domain.new(value)
      end
      @domain = value
    end
    
    # 
    # Returns the value of the `graphics_consoles` attribute.
    # 
    # @return [Array<GraphicsConsole>]
    # 
    def graphics_consoles
      @graphics_consoles
    end
    
    # 
    # Sets the value of the `graphics_consoles` attribute.
    # 
    # @param list [Array<GraphicsConsole>]
    # 
    def graphics_consoles=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = GraphicsConsole.new(value)
          end
        end
      end
      @graphics_consoles = list
    end
    
    # 
    # Returns the value of the `high_availability` attribute.
    # 
    # @return [HighAvailability]
    # 
    def high_availability
      @high_availability
    end
    
    # 
    # Sets the value of the `high_availability` attribute.
    # 
    # @param value [HighAvailability, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HighAvailability} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def high_availability=(value)
      if value.is_a?(Hash)
        value = HighAvailability.new(value)
      end
      @high_availability = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `initialization` attribute.
    # 
    # @return [Initialization]
    # 
    def initialization
      @initialization
    end
    
    # 
    # Sets the value of the `initialization` attribute.
    # 
    # @param value [Initialization, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Initialization} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def initialization=(value)
      if value.is_a?(Hash)
        value = Initialization.new(value)
      end
      @initialization = value
    end
    
    # 
    # Returns the value of the `io` attribute.
    # 
    # @return [Io]
    # 
    def io
      @io
    end
    
    # 
    # Sets the value of the `io` attribute.
    # 
    # @param value [Io, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Io} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def io=(value)
      if value.is_a?(Hash)
        value = Io.new(value)
      end
      @io = value
    end
    
    # 
    # Returns the value of the `large_icon` attribute.
    # 
    # @return [Icon]
    # 
    def large_icon
      @large_icon
    end
    
    # 
    # Sets the value of the `large_icon` attribute.
    # 
    # @param value [Icon, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Icon} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def large_icon=(value)
      if value.is_a?(Hash)
        value = Icon.new(value)
      end
      @large_icon = value
    end
    
    # 
    # Returns the value of the `lease` attribute.
    # 
    # @return [StorageDomainLease]
    # 
    def lease
      @lease
    end
    
    # 
    # Sets the value of the `lease` attribute.
    # 
    # @param value [StorageDomainLease, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomainLease} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def lease=(value)
      if value.is_a?(Hash)
        value = StorageDomainLease.new(value)
      end
      @lease = value
    end
    
    # 
    # Returns the value of the `mediated_devices` attribute.
    # 
    # @return [Array<VmMediatedDevice>]
    # 
    def mediated_devices
      @mediated_devices
    end
    
    # 
    # Sets the value of the `mediated_devices` attribute.
    # 
    # @param list [Array<VmMediatedDevice>]
    # 
    def mediated_devices=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = VmMediatedDevice.new(value)
          end
        end
      end
      @mediated_devices = list
    end
    
    # 
    # Returns the value of the `memory` attribute.
    # 
    # @return [Integer]
    # 
    def memory
      @memory
    end
    
    # 
    # Sets the value of the `memory` attribute.
    # 
    # @param value [Integer]
    # 
    def memory=(value)
      @memory = value
    end
    
    # 
    # Returns the value of the `memory_policy` attribute.
    # 
    # @return [MemoryPolicy]
    # 
    def memory_policy
      @memory_policy
    end
    
    # 
    # Sets the value of the `memory_policy` attribute.
    # 
    # @param value [MemoryPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MemoryPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def memory_policy=(value)
      if value.is_a?(Hash)
        value = MemoryPolicy.new(value)
      end
      @memory_policy = value
    end
    
    # 
    # Returns the value of the `migration` attribute.
    # 
    # @return [MigrationOptions]
    # 
    def migration
      @migration
    end
    
    # 
    # Sets the value of the `migration` attribute.
    # 
    # @param value [MigrationOptions, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MigrationOptions} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def migration=(value)
      if value.is_a?(Hash)
        value = MigrationOptions.new(value)
      end
      @migration = value
    end
    
    # 
    # Returns the value of the `migration_downtime` attribute.
    # 
    # @return [Integer]
    # 
    def migration_downtime
      @migration_downtime
    end
    
    # 
    # Sets the value of the `migration_downtime` attribute.
    # 
    # @param value [Integer]
    # 
    def migration_downtime=(value)
      @migration_downtime = value
    end
    
    # 
    # Returns the value of the `multi_queues_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def multi_queues_enabled
      @multi_queues_enabled
    end
    
    # 
    # Sets the value of the `multi_queues_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def multi_queues_enabled=(value)
      @multi_queues_enabled = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `nics` attribute.
    # 
    # @return [Array<Nic>]
    # 
    def nics
      @nics
    end
    
    # 
    # Sets the value of the `nics` attribute.
    # 
    # @param list [Array<Nic>]
    # 
    def nics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Nic.new(value)
          end
        end
      end
      @nics = list
    end
    
    # 
    # Returns the value of the `origin` attribute.
    # 
    # @return [String]
    # 
    def origin
      @origin
    end
    
    # 
    # Sets the value of the `origin` attribute.
    # 
    # @param value [String]
    # 
    def origin=(value)
      @origin = value
    end
    
    # 
    # Returns the value of the `os` attribute.
    # 
    # @return [OperatingSystem]
    # 
    def os
      @os
    end
    
    # 
    # Sets the value of the `os` attribute.
    # 
    # @param value [OperatingSystem, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::OperatingSystem} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def os=(value)
      if value.is_a?(Hash)
        value = OperatingSystem.new(value)
      end
      @os = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `placement_policy` attribute.
    # 
    # @return [VmPlacementPolicy]
    # 
    def placement_policy
      @placement_policy
    end
    
    # 
    # Sets the value of the `placement_policy` attribute.
    # 
    # @param value [VmPlacementPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VmPlacementPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def placement_policy=(value)
      if value.is_a?(Hash)
        value = VmPlacementPolicy.new(value)
      end
      @placement_policy = value
    end
    
    # 
    # Returns the value of the `quota` attribute.
    # 
    # @return [Quota]
    # 
    def quota
      @quota
    end
    
    # 
    # Sets the value of the `quota` attribute.
    # 
    # @param value [Quota, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Quota} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def quota=(value)
      if value.is_a?(Hash)
        value = Quota.new(value)
      end
      @quota = value
    end
    
    # 
    # Returns the value of the `rng_device` attribute.
    # 
    # @return [RngDevice]
    # 
    def rng_device
      @rng_device
    end
    
    # 
    # Sets the value of the `rng_device` attribute.
    # 
    # @param value [RngDevice, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::RngDevice} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def rng_device=(value)
      if value.is_a?(Hash)
        value = RngDevice.new(value)
      end
      @rng_device = value
    end
    
    # 
    # Returns the value of the `serial_number` attribute.
    # 
    # @return [SerialNumber]
    # 
    def serial_number
      @serial_number
    end
    
    # 
    # Sets the value of the `serial_number` attribute.
    # 
    # @param value [SerialNumber, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SerialNumber} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def serial_number=(value)
      if value.is_a?(Hash)
        value = SerialNumber.new(value)
      end
      @serial_number = value
    end
    
    # 
    # Returns the value of the `small_icon` attribute.
    # 
    # @return [Icon]
    # 
    def small_icon
      @small_icon
    end
    
    # 
    # Sets the value of the `small_icon` attribute.
    # 
    # @param value [Icon, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Icon} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def small_icon=(value)
      if value.is_a?(Hash)
        value = Icon.new(value)
      end
      @small_icon = value
    end
    
    # 
    # Returns the value of the `soundcard_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def soundcard_enabled
      @soundcard_enabled
    end
    
    # 
    # Sets the value of the `soundcard_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def soundcard_enabled=(value)
      @soundcard_enabled = value
    end
    
    # 
    # Returns the value of the `sso` attribute.
    # 
    # @return [Sso]
    # 
    def sso
      @sso
    end
    
    # 
    # Sets the value of the `sso` attribute.
    # 
    # @param value [Sso, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Sso} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def sso=(value)
      if value.is_a?(Hash)
        value = Sso.new(value)
      end
      @sso = value
    end
    
    # 
    # Returns the value of the `start_paused` attribute.
    # 
    # @return [Boolean]
    # 
    def start_paused
      @start_paused
    end
    
    # 
    # Sets the value of the `start_paused` attribute.
    # 
    # @param value [Boolean]
    # 
    def start_paused=(value)
      @start_paused = value
    end
    
    # 
    # Returns the value of the `stateless` attribute.
    # 
    # @return [Boolean]
    # 
    def stateless
      @stateless
    end
    
    # 
    # Sets the value of the `stateless` attribute.
    # 
    # @param value [Boolean]
    # 
    def stateless=(value)
      @stateless = value
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [TemplateStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [TemplateStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `storage_error_resume_behaviour` attribute.
    # 
    # @return [VmStorageErrorResumeBehaviour]
    # 
    def storage_error_resume_behaviour
      @storage_error_resume_behaviour
    end
    
    # 
    # Sets the value of the `storage_error_resume_behaviour` attribute.
    # 
    # @param value [VmStorageErrorResumeBehaviour]
    # 
    def storage_error_resume_behaviour=(value)
      @storage_error_resume_behaviour = value
    end
    
    # 
    # Returns the value of the `tags` attribute.
    # 
    # @return [Array<Tag>]
    # 
    def tags
      @tags
    end
    
    # 
    # Sets the value of the `tags` attribute.
    # 
    # @param list [Array<Tag>]
    # 
    def tags=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Tag.new(value)
          end
        end
      end
      @tags = list
    end
    
    # 
    # Returns the value of the `time_zone` attribute.
    # 
    # @return [TimeZone]
    # 
    def time_zone
      @time_zone
    end
    
    # 
    # Sets the value of the `time_zone` attribute.
    # 
    # @param value [TimeZone, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::TimeZone} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def time_zone=(value)
      if value.is_a?(Hash)
        value = TimeZone.new(value)
      end
      @time_zone = value
    end
    
    # 
    # Returns the value of the `tpm_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def tpm_enabled
      @tpm_enabled
    end
    
    # 
    # Sets the value of the `tpm_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def tpm_enabled=(value)
      @tpm_enabled = value
    end
    
    # 
    # Returns the value of the `tunnel_migration` attribute.
    # 
    # @return [Boolean]
    # 
    def tunnel_migration
      @tunnel_migration
    end
    
    # 
    # Sets the value of the `tunnel_migration` attribute.
    # 
    # @param value [Boolean]
    # 
    def tunnel_migration=(value)
      @tunnel_migration = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [VmType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [VmType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `usb` attribute.
    # 
    # @return [Usb]
    # 
    def usb
      @usb
    end
    
    # 
    # Sets the value of the `usb` attribute.
    # 
    # @param value [Usb, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Usb} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def usb=(value)
      if value.is_a?(Hash)
        value = Usb.new(value)
      end
      @usb = value
    end
    
    # 
    # Returns the value of the `version` attribute.
    # 
    # @return [TemplateVersion]
    # 
    def version
      @version
    end
    
    # 
    # Sets the value of the `version` attribute.
    # 
    # @param value [TemplateVersion, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::TemplateVersion} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def version=(value)
      if value.is_a?(Hash)
        value = TemplateVersion.new(value)
      end
      @version = value
    end
    
    # 
    # Returns the value of the `virtio_scsi` attribute.
    # 
    # @return [VirtioScsi]
    # 
    def virtio_scsi
      @virtio_scsi
    end
    
    # 
    # Sets the value of the `virtio_scsi` attribute.
    # 
    # @param value [VirtioScsi, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VirtioScsi} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def virtio_scsi=(value)
      if value.is_a?(Hash)
        value = VirtioScsi.new(value)
      end
      @virtio_scsi = value
    end
    
    # 
    # Returns the value of the `virtio_scsi_multi_queues` attribute.
    # 
    # @return [Integer]
    # 
    def virtio_scsi_multi_queues
      @virtio_scsi_multi_queues
    end
    
    # 
    # Sets the value of the `virtio_scsi_multi_queues` attribute.
    # 
    # @param value [Integer]
    # 
    def virtio_scsi_multi_queues=(value)
      @virtio_scsi_multi_queues = value
    end
    
    # 
    # Returns the value of the `virtio_scsi_multi_queues_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def virtio_scsi_multi_queues_enabled
      @virtio_scsi_multi_queues_enabled
    end
    
    # 
    # Sets the value of the `virtio_scsi_multi_queues_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def virtio_scsi_multi_queues_enabled=(value)
      @virtio_scsi_multi_queues_enabled = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `watchdogs` attribute.
    # 
    # @return [Array<Watchdog>]
    # 
    def watchdogs
      @watchdogs
    end
    
    # 
    # Sets the value of the `watchdogs` attribute.
    # 
    # @param list [Array<Watchdog>]
    # 
    def watchdogs=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Watchdog.new(value)
          end
        end
      end
      @watchdogs = list
    end
    
    # 
    # Creates a new instance of the {Template} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [AutoPinningPolicy] :auto_pinning_policy The value of attribute `auto_pinning_policy`.
    # 
    # @option opts [Bios, Hash] :bios The value of attribute `bios`.
    # 
    # @option opts [Array<Cdrom>, Array<Hash>] :cdroms The values of attribute `cdroms`.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Console, Hash] :console The value of attribute `console`.
    # 
    # @option opts [Cpu, Hash] :cpu The value of attribute `cpu`.
    # 
    # @option opts [CpuPinningPolicy] :cpu_pinning_policy The value of attribute `cpu_pinning_policy`.
    # 
    # @option opts [CpuProfile, Hash] :cpu_profile The value of attribute `cpu_profile`.
    # 
    # @option opts [Integer] :cpu_shares The value of attribute `cpu_shares`.
    # 
    # @option opts [DateTime] :creation_time The value of attribute `creation_time`.
    # 
    # @option opts [Version, Hash] :custom_compatibility_version The value of attribute `custom_compatibility_version`.
    # 
    # @option opts [String] :custom_cpu_model The value of attribute `custom_cpu_model`.
    # 
    # @option opts [String] :custom_emulated_machine The value of attribute `custom_emulated_machine`.
    # 
    # @option opts [Array<CustomProperty>, Array<Hash>] :custom_properties The values of attribute `custom_properties`.
    # 
    # @option opts [Boolean] :delete_protected The value of attribute `delete_protected`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Array<DiskAttachment>, Array<Hash>] :disk_attachments The values of attribute `disk_attachments`.
    # 
    # @option opts [Display, Hash] :display The value of attribute `display`.
    # 
    # @option opts [Domain, Hash] :domain The value of attribute `domain`.
    # 
    # @option opts [Array<GraphicsConsole>, Array<Hash>] :graphics_consoles The values of attribute `graphics_consoles`.
    # 
    # @option opts [HighAvailability, Hash] :high_availability The value of attribute `high_availability`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Initialization, Hash] :initialization The value of attribute `initialization`.
    # 
    # @option opts [Io, Hash] :io The value of attribute `io`.
    # 
    # @option opts [Icon, Hash] :large_icon The value of attribute `large_icon`.
    # 
    # @option opts [StorageDomainLease, Hash] :lease The value of attribute `lease`.
    # 
    # @option opts [Array<VmMediatedDevice>, Array<Hash>] :mediated_devices The values of attribute `mediated_devices`.
    # 
    # @option opts [Integer] :memory The value of attribute `memory`.
    # 
    # @option opts [MemoryPolicy, Hash] :memory_policy The value of attribute `memory_policy`.
    # 
    # @option opts [MigrationOptions, Hash] :migration The value of attribute `migration`.
    # 
    # @option opts [Integer] :migration_downtime The value of attribute `migration_downtime`.
    # 
    # @option opts [Boolean] :multi_queues_enabled The value of attribute `multi_queues_enabled`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Nic>, Array<Hash>] :nics The values of attribute `nics`.
    # 
    # @option opts [String] :origin The value of attribute `origin`.
    # 
    # @option opts [OperatingSystem, Hash] :os The value of attribute `os`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [VmPlacementPolicy, Hash] :placement_policy The value of attribute `placement_policy`.
    # 
    # @option opts [Quota, Hash] :quota The value of attribute `quota`.
    # 
    # @option opts [RngDevice, Hash] :rng_device The value of attribute `rng_device`.
    # 
    # @option opts [SerialNumber, Hash] :serial_number The value of attribute `serial_number`.
    # 
    # @option opts [Icon, Hash] :small_icon The value of attribute `small_icon`.
    # 
    # @option opts [Boolean] :soundcard_enabled The value of attribute `soundcard_enabled`.
    # 
    # @option opts [Sso, Hash] :sso The value of attribute `sso`.
    # 
    # @option opts [Boolean] :start_paused The value of attribute `start_paused`.
    # 
    # @option opts [Boolean] :stateless The value of attribute `stateless`.
    # 
    # @option opts [TemplateStatus] :status The value of attribute `status`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [VmStorageErrorResumeBehaviour] :storage_error_resume_behaviour The value of attribute `storage_error_resume_behaviour`.
    # 
    # @option opts [Array<Tag>, Array<Hash>] :tags The values of attribute `tags`.
    # 
    # @option opts [TimeZone, Hash] :time_zone The value of attribute `time_zone`.
    # 
    # @option opts [Boolean] :tpm_enabled The value of attribute `tpm_enabled`.
    # 
    # @option opts [Boolean] :tunnel_migration The value of attribute `tunnel_migration`.
    # 
    # @option opts [VmType] :type The value of attribute `type`.
    # 
    # @option opts [Usb, Hash] :usb The value of attribute `usb`.
    # 
    # @option opts [TemplateVersion, Hash] :version The value of attribute `version`.
    # 
    # @option opts [VirtioScsi, Hash] :virtio_scsi The value of attribute `virtio_scsi`.
    # 
    # @option opts [Integer] :virtio_scsi_multi_queues The value of attribute `virtio_scsi_multi_queues`.
    # 
    # @option opts [Boolean] :virtio_scsi_multi_queues_enabled The value of attribute `virtio_scsi_multi_queues_enabled`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [Array<Watchdog>, Array<Hash>] :watchdogs The values of attribute `watchdogs`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.cdroms = opts[:cdroms]
      self.disk_attachments = opts[:disk_attachments]
      self.graphics_consoles = opts[:graphics_consoles]
      self.mediated_devices = opts[:mediated_devices]
      self.nics = opts[:nics]
      self.permissions = opts[:permissions]
      self.status = opts[:status]
      self.tags = opts[:tags]
      self.version = opts[:version]
      self.vm = opts[:vm]
      self.watchdogs = opts[:watchdogs]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @cdroms == other.cdroms &&
      @disk_attachments == other.disk_attachments &&
      @graphics_consoles == other.graphics_consoles &&
      @mediated_devices == other.mediated_devices &&
      @nics == other.nics &&
      @permissions == other.permissions &&
      @status == other.status &&
      @tags == other.tags &&
      @version == other.version &&
      @vm == other.vm &&
      @watchdogs == other.watchdogs
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @cdroms.hash +
      @disk_attachments.hash +
      @graphics_consoles.hash +
      @mediated_devices.hash +
      @nics.hash +
      @permissions.hash +
      @status.hash +
      @tags.hash +
      @version.hash +
      @vm.hash +
      @watchdogs.hash
    end
    
  end
  
  class Vm < VmBase
    
    # 
    # Returns the value of the `affinity_labels` attribute.
    # 
    # @return [Array<AffinityLabel>]
    # 
    def affinity_labels
      @affinity_labels
    end
    
    # 
    # Sets the value of the `affinity_labels` attribute.
    # 
    # @param list [Array<AffinityLabel>]
    # 
    def affinity_labels=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = AffinityLabel.new(value)
          end
        end
      end
      @affinity_labels = list
    end
    
    # 
    # Returns the value of the `applications` attribute.
    # 
    # @return [Array<Application>]
    # 
    def applications
      @applications
    end
    
    # 
    # Sets the value of the `applications` attribute.
    # 
    # @param list [Array<Application>]
    # 
    def applications=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Application.new(value)
          end
        end
      end
      @applications = list
    end
    
    # 
    # Returns the value of the `auto_pinning_policy` attribute.
    # 
    # @return [AutoPinningPolicy]
    # 
    def auto_pinning_policy
      @auto_pinning_policy
    end
    
    # 
    # Sets the value of the `auto_pinning_policy` attribute.
    # 
    # @param value [AutoPinningPolicy]
    # 
    def auto_pinning_policy=(value)
      @auto_pinning_policy = value
    end
    
    # 
    # Returns the value of the `bios` attribute.
    # 
    # @return [Bios]
    # 
    def bios
      @bios
    end
    
    # 
    # Sets the value of the `bios` attribute.
    # 
    # @param value [Bios, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Bios} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def bios=(value)
      if value.is_a?(Hash)
        value = Bios.new(value)
      end
      @bios = value
    end
    
    # 
    # Returns the value of the `cdroms` attribute.
    # 
    # @return [Array<Cdrom>]
    # 
    def cdroms
      @cdroms
    end
    
    # 
    # Sets the value of the `cdroms` attribute.
    # 
    # @param list [Array<Cdrom>]
    # 
    def cdroms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Cdrom.new(value)
          end
        end
      end
      @cdroms = list
    end
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `console` attribute.
    # 
    # @return [Console]
    # 
    def console
      @console
    end
    
    # 
    # Sets the value of the `console` attribute.
    # 
    # @param value [Console, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Console} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def console=(value)
      if value.is_a?(Hash)
        value = Console.new(value)
      end
      @console = value
    end
    
    # 
    # Returns the value of the `cpu` attribute.
    # 
    # @return [Cpu]
    # 
    def cpu
      @cpu
    end
    
    # 
    # Sets the value of the `cpu` attribute.
    # 
    # @param value [Cpu, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cpu} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu=(value)
      if value.is_a?(Hash)
        value = Cpu.new(value)
      end
      @cpu = value
    end
    
    # 
    # Returns the value of the `cpu_pinning_policy` attribute.
    # 
    # @return [CpuPinningPolicy]
    # 
    def cpu_pinning_policy
      @cpu_pinning_policy
    end
    
    # 
    # Sets the value of the `cpu_pinning_policy` attribute.
    # 
    # @param value [CpuPinningPolicy]
    # 
    def cpu_pinning_policy=(value)
      @cpu_pinning_policy = value
    end
    
    # 
    # Returns the value of the `cpu_profile` attribute.
    # 
    # @return [CpuProfile]
    # 
    def cpu_profile
      @cpu_profile
    end
    
    # 
    # Sets the value of the `cpu_profile` attribute.
    # 
    # @param value [CpuProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::CpuProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu_profile=(value)
      if value.is_a?(Hash)
        value = CpuProfile.new(value)
      end
      @cpu_profile = value
    end
    
    # 
    # Returns the value of the `cpu_shares` attribute.
    # 
    # @return [Integer]
    # 
    def cpu_shares
      @cpu_shares
    end
    
    # 
    # Sets the value of the `cpu_shares` attribute.
    # 
    # @param value [Integer]
    # 
    def cpu_shares=(value)
      @cpu_shares = value
    end
    
    # 
    # Returns the value of the `creation_time` attribute.
    # 
    # @return [DateTime]
    # 
    def creation_time
      @creation_time
    end
    
    # 
    # Sets the value of the `creation_time` attribute.
    # 
    # @param value [DateTime]
    # 
    def creation_time=(value)
      @creation_time = value
    end
    
    # 
    # Returns the value of the `custom_compatibility_version` attribute.
    # 
    # @return [Version]
    # 
    def custom_compatibility_version
      @custom_compatibility_version
    end
    
    # 
    # Sets the value of the `custom_compatibility_version` attribute.
    # 
    # @param value [Version, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Version} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def custom_compatibility_version=(value)
      if value.is_a?(Hash)
        value = Version.new(value)
      end
      @custom_compatibility_version = value
    end
    
    # 
    # Returns the value of the `custom_cpu_model` attribute.
    # 
    # @return [String]
    # 
    def custom_cpu_model
      @custom_cpu_model
    end
    
    # 
    # Sets the value of the `custom_cpu_model` attribute.
    # 
    # @param value [String]
    # 
    def custom_cpu_model=(value)
      @custom_cpu_model = value
    end
    
    # 
    # Returns the value of the `custom_emulated_machine` attribute.
    # 
    # @return [String]
    # 
    def custom_emulated_machine
      @custom_emulated_machine
    end
    
    # 
    # Sets the value of the `custom_emulated_machine` attribute.
    # 
    # @param value [String]
    # 
    def custom_emulated_machine=(value)
      @custom_emulated_machine = value
    end
    
    # 
    # Returns the value of the `custom_properties` attribute.
    # 
    # @return [Array<CustomProperty>]
    # 
    def custom_properties
      @custom_properties
    end
    
    # 
    # Sets the value of the `custom_properties` attribute.
    # 
    # @param list [Array<CustomProperty>]
    # 
    def custom_properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = CustomProperty.new(value)
          end
        end
      end
      @custom_properties = list
    end
    
    # 
    # Returns the value of the `delete_protected` attribute.
    # 
    # @return [Boolean]
    # 
    def delete_protected
      @delete_protected
    end
    
    # 
    # Sets the value of the `delete_protected` attribute.
    # 
    # @param value [Boolean]
    # 
    def delete_protected=(value)
      @delete_protected = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `disk_attachments` attribute.
    # 
    # @return [Array<DiskAttachment>]
    # 
    def disk_attachments
      @disk_attachments
    end
    
    # 
    # Sets the value of the `disk_attachments` attribute.
    # 
    # @param list [Array<DiskAttachment>]
    # 
    def disk_attachments=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = DiskAttachment.new(value)
          end
        end
      end
      @disk_attachments = list
    end
    
    # 
    # Returns the value of the `display` attribute.
    # 
    # @return [Display]
    # 
    def display
      @display
    end
    
    # 
    # Sets the value of the `display` attribute.
    # 
    # @param value [Display, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Display} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def display=(value)
      if value.is_a?(Hash)
        value = Display.new(value)
      end
      @display = value
    end
    
    # 
    # Returns the value of the `domain` attribute.
    # 
    # @return [Domain]
    # 
    def domain
      @domain
    end
    
    # 
    # Sets the value of the `domain` attribute.
    # 
    # @param value [Domain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Domain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def domain=(value)
      if value.is_a?(Hash)
        value = Domain.new(value)
      end
      @domain = value
    end
    
    # 
    # Returns the value of the `dynamic_cpu` attribute.
    # 
    # @return [DynamicCpu]
    # 
    def dynamic_cpu
      @dynamic_cpu
    end
    
    # 
    # Sets the value of the `dynamic_cpu` attribute.
    # 
    # @param value [DynamicCpu, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DynamicCpu} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def dynamic_cpu=(value)
      if value.is_a?(Hash)
        value = DynamicCpu.new(value)
      end
      @dynamic_cpu = value
    end
    
    # 
    # Returns the value of the `external_host_provider` attribute.
    # 
    # @return [ExternalHostProvider]
    # 
    def external_host_provider
      @external_host_provider
    end
    
    # 
    # Sets the value of the `external_host_provider` attribute.
    # 
    # @param value [ExternalHostProvider, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ExternalHostProvider} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def external_host_provider=(value)
      if value.is_a?(Hash)
        value = ExternalHostProvider.new(value)
      end
      @external_host_provider = value
    end
    
    # 
    # Returns the value of the `floppies` attribute.
    # 
    # @return [Array<Floppy>]
    # 
    def floppies
      @floppies
    end
    
    # 
    # Sets the value of the `floppies` attribute.
    # 
    # @param list [Array<Floppy>]
    # 
    def floppies=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Floppy.new(value)
          end
        end
      end
      @floppies = list
    end
    
    # 
    # Returns the value of the `fqdn` attribute.
    # 
    # @return [String]
    # 
    def fqdn
      @fqdn
    end
    
    # 
    # Sets the value of the `fqdn` attribute.
    # 
    # @param value [String]
    # 
    def fqdn=(value)
      @fqdn = value
    end
    
    # 
    # Returns the value of the `graphics_consoles` attribute.
    # 
    # @return [Array<GraphicsConsole>]
    # 
    def graphics_consoles
      @graphics_consoles
    end
    
    # 
    # Sets the value of the `graphics_consoles` attribute.
    # 
    # @param list [Array<GraphicsConsole>]
    # 
    def graphics_consoles=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = GraphicsConsole.new(value)
          end
        end
      end
      @graphics_consoles = list
    end
    
    # 
    # Returns the value of the `guest_operating_system` attribute.
    # 
    # @return [GuestOperatingSystem]
    # 
    def guest_operating_system
      @guest_operating_system
    end
    
    # 
    # Sets the value of the `guest_operating_system` attribute.
    # 
    # @param value [GuestOperatingSystem, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::GuestOperatingSystem} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def guest_operating_system=(value)
      if value.is_a?(Hash)
        value = GuestOperatingSystem.new(value)
      end
      @guest_operating_system = value
    end
    
    # 
    # Returns the value of the `guest_time_zone` attribute.
    # 
    # @return [TimeZone]
    # 
    def guest_time_zone
      @guest_time_zone
    end
    
    # 
    # Sets the value of the `guest_time_zone` attribute.
    # 
    # @param value [TimeZone, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::TimeZone} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def guest_time_zone=(value)
      if value.is_a?(Hash)
        value = TimeZone.new(value)
      end
      @guest_time_zone = value
    end
    
    # 
    # Returns the value of the `has_illegal_images` attribute.
    # 
    # @return [Boolean]
    # 
    def has_illegal_images
      @has_illegal_images
    end
    
    # 
    # Sets the value of the `has_illegal_images` attribute.
    # 
    # @param value [Boolean]
    # 
    def has_illegal_images=(value)
      @has_illegal_images = value
    end
    
    # 
    # Returns the value of the `high_availability` attribute.
    # 
    # @return [HighAvailability]
    # 
    def high_availability
      @high_availability
    end
    
    # 
    # Sets the value of the `high_availability` attribute.
    # 
    # @param value [HighAvailability, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HighAvailability} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def high_availability=(value)
      if value.is_a?(Hash)
        value = HighAvailability.new(value)
      end
      @high_availability = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `host_devices` attribute.
    # 
    # @return [Array<HostDevice>]
    # 
    def host_devices
      @host_devices
    end
    
    # 
    # Sets the value of the `host_devices` attribute.
    # 
    # @param list [Array<HostDevice>]
    # 
    def host_devices=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = HostDevice.new(value)
          end
        end
      end
      @host_devices = list
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `initialization` attribute.
    # 
    # @return [Initialization]
    # 
    def initialization
      @initialization
    end
    
    # 
    # Sets the value of the `initialization` attribute.
    # 
    # @param value [Initialization, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Initialization} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def initialization=(value)
      if value.is_a?(Hash)
        value = Initialization.new(value)
      end
      @initialization = value
    end
    
    # 
    # Returns the value of the `instance_type` attribute.
    # 
    # @return [InstanceType]
    # 
    def instance_type
      @instance_type
    end
    
    # 
    # Sets the value of the `instance_type` attribute.
    # 
    # @param value [InstanceType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::InstanceType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def instance_type=(value)
      if value.is_a?(Hash)
        value = InstanceType.new(value)
      end
      @instance_type = value
    end
    
    # 
    # Returns the value of the `io` attribute.
    # 
    # @return [Io]
    # 
    def io
      @io
    end
    
    # 
    # Sets the value of the `io` attribute.
    # 
    # @param value [Io, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Io} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def io=(value)
      if value.is_a?(Hash)
        value = Io.new(value)
      end
      @io = value
    end
    
    # 
    # Returns the value of the `katello_errata` attribute.
    # 
    # @return [Array<KatelloErratum>]
    # 
    def katello_errata
      @katello_errata
    end
    
    # 
    # Sets the value of the `katello_errata` attribute.
    # 
    # @param list [Array<KatelloErratum>]
    # 
    def katello_errata=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = KatelloErratum.new(value)
          end
        end
      end
      @katello_errata = list
    end
    
    # 
    # Returns the value of the `large_icon` attribute.
    # 
    # @return [Icon]
    # 
    def large_icon
      @large_icon
    end
    
    # 
    # Sets the value of the `large_icon` attribute.
    # 
    # @param value [Icon, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Icon} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def large_icon=(value)
      if value.is_a?(Hash)
        value = Icon.new(value)
      end
      @large_icon = value
    end
    
    # 
    # Returns the value of the `lease` attribute.
    # 
    # @return [StorageDomainLease]
    # 
    def lease
      @lease
    end
    
    # 
    # Sets the value of the `lease` attribute.
    # 
    # @param value [StorageDomainLease, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomainLease} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def lease=(value)
      if value.is_a?(Hash)
        value = StorageDomainLease.new(value)
      end
      @lease = value
    end
    
    # 
    # Returns the value of the `mediated_devices` attribute.
    # 
    # @return [Array<VmMediatedDevice>]
    # 
    def mediated_devices
      @mediated_devices
    end
    
    # 
    # Sets the value of the `mediated_devices` attribute.
    # 
    # @param list [Array<VmMediatedDevice>]
    # 
    def mediated_devices=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = VmMediatedDevice.new(value)
          end
        end
      end
      @mediated_devices = list
    end
    
    # 
    # Returns the value of the `memory` attribute.
    # 
    # @return [Integer]
    # 
    def memory
      @memory
    end
    
    # 
    # Sets the value of the `memory` attribute.
    # 
    # @param value [Integer]
    # 
    def memory=(value)
      @memory = value
    end
    
    # 
    # Returns the value of the `memory_policy` attribute.
    # 
    # @return [MemoryPolicy]
    # 
    def memory_policy
      @memory_policy
    end
    
    # 
    # Sets the value of the `memory_policy` attribute.
    # 
    # @param value [MemoryPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MemoryPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def memory_policy=(value)
      if value.is_a?(Hash)
        value = MemoryPolicy.new(value)
      end
      @memory_policy = value
    end
    
    # 
    # Returns the value of the `migration` attribute.
    # 
    # @return [MigrationOptions]
    # 
    def migration
      @migration
    end
    
    # 
    # Sets the value of the `migration` attribute.
    # 
    # @param value [MigrationOptions, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MigrationOptions} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def migration=(value)
      if value.is_a?(Hash)
        value = MigrationOptions.new(value)
      end
      @migration = value
    end
    
    # 
    # Returns the value of the `migration_downtime` attribute.
    # 
    # @return [Integer]
    # 
    def migration_downtime
      @migration_downtime
    end
    
    # 
    # Sets the value of the `migration_downtime` attribute.
    # 
    # @param value [Integer]
    # 
    def migration_downtime=(value)
      @migration_downtime = value
    end
    
    # 
    # Returns the value of the `multi_queues_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def multi_queues_enabled
      @multi_queues_enabled
    end
    
    # 
    # Sets the value of the `multi_queues_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def multi_queues_enabled=(value)
      @multi_queues_enabled = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `next_run_configuration_exists` attribute.
    # 
    # @return [Boolean]
    # 
    def next_run_configuration_exists
      @next_run_configuration_exists
    end
    
    # 
    # Sets the value of the `next_run_configuration_exists` attribute.
    # 
    # @param value [Boolean]
    # 
    def next_run_configuration_exists=(value)
      @next_run_configuration_exists = value
    end
    
    # 
    # Returns the value of the `nics` attribute.
    # 
    # @return [Array<Nic>]
    # 
    def nics
      @nics
    end
    
    # 
    # Sets the value of the `nics` attribute.
    # 
    # @param list [Array<Nic>]
    # 
    def nics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Nic.new(value)
          end
        end
      end
      @nics = list
    end
    
    # 
    # Returns the value of the `numa_nodes` attribute.
    # 
    # @return [Array<NumaNode>]
    # 
    def numa_nodes
      @numa_nodes
    end
    
    # 
    # Sets the value of the `numa_nodes` attribute.
    # 
    # @param list [Array<NumaNode>]
    # 
    def numa_nodes=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NumaNode.new(value)
          end
        end
      end
      @numa_nodes = list
    end
    
    # 
    # Returns the value of the `numa_tune_mode` attribute.
    # 
    # @return [NumaTuneMode]
    # 
    def numa_tune_mode
      @numa_tune_mode
    end
    
    # 
    # Sets the value of the `numa_tune_mode` attribute.
    # 
    # @param value [NumaTuneMode]
    # 
    def numa_tune_mode=(value)
      @numa_tune_mode = value
    end
    
    # 
    # Returns the value of the `origin` attribute.
    # 
    # @return [String]
    # 
    def origin
      @origin
    end
    
    # 
    # Sets the value of the `origin` attribute.
    # 
    # @param value [String]
    # 
    def origin=(value)
      @origin = value
    end
    
    # 
    # Returns the value of the `original_template` attribute.
    # 
    # @return [Template]
    # 
    def original_template
      @original_template
    end
    
    # 
    # Sets the value of the `original_template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def original_template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @original_template = value
    end
    
    # 
    # Returns the value of the `os` attribute.
    # 
    # @return [OperatingSystem]
    # 
    def os
      @os
    end
    
    # 
    # Sets the value of the `os` attribute.
    # 
    # @param value [OperatingSystem, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::OperatingSystem} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def os=(value)
      if value.is_a?(Hash)
        value = OperatingSystem.new(value)
      end
      @os = value
    end
    
    # 
    # Returns the value of the `payloads` attribute.
    # 
    # @return [Array<Payload>]
    # 
    def payloads
      @payloads
    end
    
    # 
    # Sets the value of the `payloads` attribute.
    # 
    # @param list [Array<Payload>]
    # 
    def payloads=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Payload.new(value)
          end
        end
      end
      @payloads = list
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `placement_policy` attribute.
    # 
    # @return [VmPlacementPolicy]
    # 
    def placement_policy
      @placement_policy
    end
    
    # 
    # Sets the value of the `placement_policy` attribute.
    # 
    # @param value [VmPlacementPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VmPlacementPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def placement_policy=(value)
      if value.is_a?(Hash)
        value = VmPlacementPolicy.new(value)
      end
      @placement_policy = value
    end
    
    # 
    # Returns the value of the `quota` attribute.
    # 
    # @return [Quota]
    # 
    def quota
      @quota
    end
    
    # 
    # Sets the value of the `quota` attribute.
    # 
    # @param value [Quota, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Quota} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def quota=(value)
      if value.is_a?(Hash)
        value = Quota.new(value)
      end
      @quota = value
    end
    
    # 
    # Returns the value of the `reported_devices` attribute.
    # 
    # @return [Array<ReportedDevice>]
    # 
    def reported_devices
      @reported_devices
    end
    
    # 
    # Sets the value of the `reported_devices` attribute.
    # 
    # @param list [Array<ReportedDevice>]
    # 
    def reported_devices=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = ReportedDevice.new(value)
          end
        end
      end
      @reported_devices = list
    end
    
    # 
    # Returns the value of the `rng_device` attribute.
    # 
    # @return [RngDevice]
    # 
    def rng_device
      @rng_device
    end
    
    # 
    # Sets the value of the `rng_device` attribute.
    # 
    # @param value [RngDevice, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::RngDevice} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def rng_device=(value)
      if value.is_a?(Hash)
        value = RngDevice.new(value)
      end
      @rng_device = value
    end
    
    # 
    # Returns the value of the `run_once` attribute.
    # 
    # @return [Boolean]
    # 
    def run_once
      @run_once
    end
    
    # 
    # Sets the value of the `run_once` attribute.
    # 
    # @param value [Boolean]
    # 
    def run_once=(value)
      @run_once = value
    end
    
    # 
    # Returns the value of the `serial_number` attribute.
    # 
    # @return [SerialNumber]
    # 
    def serial_number
      @serial_number
    end
    
    # 
    # Sets the value of the `serial_number` attribute.
    # 
    # @param value [SerialNumber, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SerialNumber} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def serial_number=(value)
      if value.is_a?(Hash)
        value = SerialNumber.new(value)
      end
      @serial_number = value
    end
    
    # 
    # Returns the value of the `sessions` attribute.
    # 
    # @return [Array<Session>]
    # 
    def sessions
      @sessions
    end
    
    # 
    # Sets the value of the `sessions` attribute.
    # 
    # @param list [Array<Session>]
    # 
    def sessions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Session.new(value)
          end
        end
      end
      @sessions = list
    end
    
    # 
    # Returns the value of the `small_icon` attribute.
    # 
    # @return [Icon]
    # 
    def small_icon
      @small_icon
    end
    
    # 
    # Sets the value of the `small_icon` attribute.
    # 
    # @param value [Icon, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Icon} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def small_icon=(value)
      if value.is_a?(Hash)
        value = Icon.new(value)
      end
      @small_icon = value
    end
    
    # 
    # Returns the value of the `snapshots` attribute.
    # 
    # @return [Array<Snapshot>]
    # 
    def snapshots
      @snapshots
    end
    
    # 
    # Sets the value of the `snapshots` attribute.
    # 
    # @param list [Array<Snapshot>]
    # 
    def snapshots=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Snapshot.new(value)
          end
        end
      end
      @snapshots = list
    end
    
    # 
    # Returns the value of the `soundcard_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def soundcard_enabled
      @soundcard_enabled
    end
    
    # 
    # Sets the value of the `soundcard_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def soundcard_enabled=(value)
      @soundcard_enabled = value
    end
    
    # 
    # Returns the value of the `sso` attribute.
    # 
    # @return [Sso]
    # 
    def sso
      @sso
    end
    
    # 
    # Sets the value of the `sso` attribute.
    # 
    # @param value [Sso, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Sso} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def sso=(value)
      if value.is_a?(Hash)
        value = Sso.new(value)
      end
      @sso = value
    end
    
    # 
    # Returns the value of the `start_paused` attribute.
    # 
    # @return [Boolean]
    # 
    def start_paused
      @start_paused
    end
    
    # 
    # Sets the value of the `start_paused` attribute.
    # 
    # @param value [Boolean]
    # 
    def start_paused=(value)
      @start_paused = value
    end
    
    # 
    # Returns the value of the `start_time` attribute.
    # 
    # @return [DateTime]
    # 
    def start_time
      @start_time
    end
    
    # 
    # Sets the value of the `start_time` attribute.
    # 
    # @param value [DateTime]
    # 
    def start_time=(value)
      @start_time = value
    end
    
    # 
    # Returns the value of the `stateless` attribute.
    # 
    # @return [Boolean]
    # 
    def stateless
      @stateless
    end
    
    # 
    # Sets the value of the `stateless` attribute.
    # 
    # @param value [Boolean]
    # 
    def stateless=(value)
      @stateless = value
    end
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [VmStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [VmStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `status_detail` attribute.
    # 
    # @return [String]
    # 
    def status_detail
      @status_detail
    end
    
    # 
    # Sets the value of the `status_detail` attribute.
    # 
    # @param value [String]
    # 
    def status_detail=(value)
      @status_detail = value
    end
    
    # 
    # Returns the value of the `stop_reason` attribute.
    # 
    # @return [String]
    # 
    def stop_reason
      @stop_reason
    end
    
    # 
    # Sets the value of the `stop_reason` attribute.
    # 
    # @param value [String]
    # 
    def stop_reason=(value)
      @stop_reason = value
    end
    
    # 
    # Returns the value of the `stop_time` attribute.
    # 
    # @return [DateTime]
    # 
    def stop_time
      @stop_time
    end
    
    # 
    # Sets the value of the `stop_time` attribute.
    # 
    # @param value [DateTime]
    # 
    def stop_time=(value)
      @stop_time = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `storage_error_resume_behaviour` attribute.
    # 
    # @return [VmStorageErrorResumeBehaviour]
    # 
    def storage_error_resume_behaviour
      @storage_error_resume_behaviour
    end
    
    # 
    # Sets the value of the `storage_error_resume_behaviour` attribute.
    # 
    # @param value [VmStorageErrorResumeBehaviour]
    # 
    def storage_error_resume_behaviour=(value)
      @storage_error_resume_behaviour = value
    end
    
    # 
    # Returns the value of the `tags` attribute.
    # 
    # @return [Array<Tag>]
    # 
    def tags
      @tags
    end
    
    # 
    # Sets the value of the `tags` attribute.
    # 
    # @param list [Array<Tag>]
    # 
    def tags=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Tag.new(value)
          end
        end
      end
      @tags = list
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `time_zone` attribute.
    # 
    # @return [TimeZone]
    # 
    def time_zone
      @time_zone
    end
    
    # 
    # Sets the value of the `time_zone` attribute.
    # 
    # @param value [TimeZone, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::TimeZone} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def time_zone=(value)
      if value.is_a?(Hash)
        value = TimeZone.new(value)
      end
      @time_zone = value
    end
    
    # 
    # Returns the value of the `tpm_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def tpm_enabled
      @tpm_enabled
    end
    
    # 
    # Sets the value of the `tpm_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def tpm_enabled=(value)
      @tpm_enabled = value
    end
    
    # 
    # Returns the value of the `tunnel_migration` attribute.
    # 
    # @return [Boolean]
    # 
    def tunnel_migration
      @tunnel_migration
    end
    
    # 
    # Sets the value of the `tunnel_migration` attribute.
    # 
    # @param value [Boolean]
    # 
    def tunnel_migration=(value)
      @tunnel_migration = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [VmType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [VmType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `usb` attribute.
    # 
    # @return [Usb]
    # 
    def usb
      @usb
    end
    
    # 
    # Sets the value of the `usb` attribute.
    # 
    # @param value [Usb, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Usb} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def usb=(value)
      if value.is_a?(Hash)
        value = Usb.new(value)
      end
      @usb = value
    end
    
    # 
    # Returns the value of the `use_latest_template_version` attribute.
    # 
    # @return [Boolean]
    # 
    def use_latest_template_version
      @use_latest_template_version
    end
    
    # 
    # Sets the value of the `use_latest_template_version` attribute.
    # 
    # @param value [Boolean]
    # 
    def use_latest_template_version=(value)
      @use_latest_template_version = value
    end
    
    # 
    # Returns the value of the `virtio_scsi` attribute.
    # 
    # @return [VirtioScsi]
    # 
    def virtio_scsi
      @virtio_scsi
    end
    
    # 
    # Sets the value of the `virtio_scsi` attribute.
    # 
    # @param value [VirtioScsi, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VirtioScsi} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def virtio_scsi=(value)
      if value.is_a?(Hash)
        value = VirtioScsi.new(value)
      end
      @virtio_scsi = value
    end
    
    # 
    # Returns the value of the `virtio_scsi_multi_queues` attribute.
    # 
    # @return [Integer]
    # 
    def virtio_scsi_multi_queues
      @virtio_scsi_multi_queues
    end
    
    # 
    # Sets the value of the `virtio_scsi_multi_queues` attribute.
    # 
    # @param value [Integer]
    # 
    def virtio_scsi_multi_queues=(value)
      @virtio_scsi_multi_queues = value
    end
    
    # 
    # Returns the value of the `virtio_scsi_multi_queues_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def virtio_scsi_multi_queues_enabled
      @virtio_scsi_multi_queues_enabled
    end
    
    # 
    # Sets the value of the `virtio_scsi_multi_queues_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def virtio_scsi_multi_queues_enabled=(value)
      @virtio_scsi_multi_queues_enabled = value
    end
    
    # 
    # Returns the value of the `vm_pool` attribute.
    # 
    # @return [VmPool]
    # 
    def vm_pool
      @vm_pool
    end
    
    # 
    # Sets the value of the `vm_pool` attribute.
    # 
    # @param value [VmPool, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VmPool} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm_pool=(value)
      if value.is_a?(Hash)
        value = VmPool.new(value)
      end
      @vm_pool = value
    end
    
    # 
    # Returns the value of the `watchdogs` attribute.
    # 
    # @return [Array<Watchdog>]
    # 
    def watchdogs
      @watchdogs
    end
    
    # 
    # Sets the value of the `watchdogs` attribute.
    # 
    # @param list [Array<Watchdog>]
    # 
    def watchdogs=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Watchdog.new(value)
          end
        end
      end
      @watchdogs = list
    end
    
    # 
    # Creates a new instance of the {Vm} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<AffinityLabel>, Array<Hash>] :affinity_labels The values of attribute `affinity_labels`.
    # 
    # @option opts [Array<Application>, Array<Hash>] :applications The values of attribute `applications`.
    # 
    # @option opts [AutoPinningPolicy] :auto_pinning_policy The value of attribute `auto_pinning_policy`.
    # 
    # @option opts [Bios, Hash] :bios The value of attribute `bios`.
    # 
    # @option opts [Array<Cdrom>, Array<Hash>] :cdroms The values of attribute `cdroms`.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Console, Hash] :console The value of attribute `console`.
    # 
    # @option opts [Cpu, Hash] :cpu The value of attribute `cpu`.
    # 
    # @option opts [CpuPinningPolicy] :cpu_pinning_policy The value of attribute `cpu_pinning_policy`.
    # 
    # @option opts [CpuProfile, Hash] :cpu_profile The value of attribute `cpu_profile`.
    # 
    # @option opts [Integer] :cpu_shares The value of attribute `cpu_shares`.
    # 
    # @option opts [DateTime] :creation_time The value of attribute `creation_time`.
    # 
    # @option opts [Version, Hash] :custom_compatibility_version The value of attribute `custom_compatibility_version`.
    # 
    # @option opts [String] :custom_cpu_model The value of attribute `custom_cpu_model`.
    # 
    # @option opts [String] :custom_emulated_machine The value of attribute `custom_emulated_machine`.
    # 
    # @option opts [Array<CustomProperty>, Array<Hash>] :custom_properties The values of attribute `custom_properties`.
    # 
    # @option opts [Boolean] :delete_protected The value of attribute `delete_protected`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Array<DiskAttachment>, Array<Hash>] :disk_attachments The values of attribute `disk_attachments`.
    # 
    # @option opts [Display, Hash] :display The value of attribute `display`.
    # 
    # @option opts [Domain, Hash] :domain The value of attribute `domain`.
    # 
    # @option opts [DynamicCpu, Hash] :dynamic_cpu The value of attribute `dynamic_cpu`.
    # 
    # @option opts [ExternalHostProvider, Hash] :external_host_provider The value of attribute `external_host_provider`.
    # 
    # @option opts [Array<Floppy>, Array<Hash>] :floppies The values of attribute `floppies`.
    # 
    # @option opts [String] :fqdn The value of attribute `fqdn`.
    # 
    # @option opts [Array<GraphicsConsole>, Array<Hash>] :graphics_consoles The values of attribute `graphics_consoles`.
    # 
    # @option opts [GuestOperatingSystem, Hash] :guest_operating_system The value of attribute `guest_operating_system`.
    # 
    # @option opts [TimeZone, Hash] :guest_time_zone The value of attribute `guest_time_zone`.
    # 
    # @option opts [Boolean] :has_illegal_images The value of attribute `has_illegal_images`.
    # 
    # @option opts [HighAvailability, Hash] :high_availability The value of attribute `high_availability`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [Array<HostDevice>, Array<Hash>] :host_devices The values of attribute `host_devices`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Initialization, Hash] :initialization The value of attribute `initialization`.
    # 
    # @option opts [InstanceType, Hash] :instance_type The value of attribute `instance_type`.
    # 
    # @option opts [Io, Hash] :io The value of attribute `io`.
    # 
    # @option opts [Array<KatelloErratum>, Array<Hash>] :katello_errata The values of attribute `katello_errata`.
    # 
    # @option opts [Icon, Hash] :large_icon The value of attribute `large_icon`.
    # 
    # @option opts [StorageDomainLease, Hash] :lease The value of attribute `lease`.
    # 
    # @option opts [Array<VmMediatedDevice>, Array<Hash>] :mediated_devices The values of attribute `mediated_devices`.
    # 
    # @option opts [Integer] :memory The value of attribute `memory`.
    # 
    # @option opts [MemoryPolicy, Hash] :memory_policy The value of attribute `memory_policy`.
    # 
    # @option opts [MigrationOptions, Hash] :migration The value of attribute `migration`.
    # 
    # @option opts [Integer] :migration_downtime The value of attribute `migration_downtime`.
    # 
    # @option opts [Boolean] :multi_queues_enabled The value of attribute `multi_queues_enabled`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Boolean] :next_run_configuration_exists The value of attribute `next_run_configuration_exists`.
    # 
    # @option opts [Array<Nic>, Array<Hash>] :nics The values of attribute `nics`.
    # 
    # @option opts [Array<NumaNode>, Array<Hash>] :numa_nodes The values of attribute `numa_nodes`.
    # 
    # @option opts [NumaTuneMode] :numa_tune_mode The value of attribute `numa_tune_mode`.
    # 
    # @option opts [String] :origin The value of attribute `origin`.
    # 
    # @option opts [Template, Hash] :original_template The value of attribute `original_template`.
    # 
    # @option opts [OperatingSystem, Hash] :os The value of attribute `os`.
    # 
    # @option opts [Array<Payload>, Array<Hash>] :payloads The values of attribute `payloads`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [VmPlacementPolicy, Hash] :placement_policy The value of attribute `placement_policy`.
    # 
    # @option opts [Quota, Hash] :quota The value of attribute `quota`.
    # 
    # @option opts [Array<ReportedDevice>, Array<Hash>] :reported_devices The values of attribute `reported_devices`.
    # 
    # @option opts [RngDevice, Hash] :rng_device The value of attribute `rng_device`.
    # 
    # @option opts [Boolean] :run_once The value of attribute `run_once`.
    # 
    # @option opts [SerialNumber, Hash] :serial_number The value of attribute `serial_number`.
    # 
    # @option opts [Array<Session>, Array<Hash>] :sessions The values of attribute `sessions`.
    # 
    # @option opts [Icon, Hash] :small_icon The value of attribute `small_icon`.
    # 
    # @option opts [Array<Snapshot>, Array<Hash>] :snapshots The values of attribute `snapshots`.
    # 
    # @option opts [Boolean] :soundcard_enabled The value of attribute `soundcard_enabled`.
    # 
    # @option opts [Sso, Hash] :sso The value of attribute `sso`.
    # 
    # @option opts [Boolean] :start_paused The value of attribute `start_paused`.
    # 
    # @option opts [DateTime] :start_time The value of attribute `start_time`.
    # 
    # @option opts [Boolean] :stateless The value of attribute `stateless`.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # @option opts [VmStatus] :status The value of attribute `status`.
    # 
    # @option opts [String] :status_detail The value of attribute `status_detail`.
    # 
    # @option opts [String] :stop_reason The value of attribute `stop_reason`.
    # 
    # @option opts [DateTime] :stop_time The value of attribute `stop_time`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [VmStorageErrorResumeBehaviour] :storage_error_resume_behaviour The value of attribute `storage_error_resume_behaviour`.
    # 
    # @option opts [Array<Tag>, Array<Hash>] :tags The values of attribute `tags`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [TimeZone, Hash] :time_zone The value of attribute `time_zone`.
    # 
    # @option opts [Boolean] :tpm_enabled The value of attribute `tpm_enabled`.
    # 
    # @option opts [Boolean] :tunnel_migration The value of attribute `tunnel_migration`.
    # 
    # @option opts [VmType] :type The value of attribute `type`.
    # 
    # @option opts [Usb, Hash] :usb The value of attribute `usb`.
    # 
    # @option opts [Boolean] :use_latest_template_version The value of attribute `use_latest_template_version`.
    # 
    # @option opts [VirtioScsi, Hash] :virtio_scsi The value of attribute `virtio_scsi`.
    # 
    # @option opts [Integer] :virtio_scsi_multi_queues The value of attribute `virtio_scsi_multi_queues`.
    # 
    # @option opts [Boolean] :virtio_scsi_multi_queues_enabled The value of attribute `virtio_scsi_multi_queues_enabled`.
    # 
    # @option opts [VmPool, Hash] :vm_pool The value of attribute `vm_pool`.
    # 
    # @option opts [Array<Watchdog>, Array<Hash>] :watchdogs The values of attribute `watchdogs`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.affinity_labels = opts[:affinity_labels]
      self.applications = opts[:applications]
      self.cdroms = opts[:cdroms]
      self.disk_attachments = opts[:disk_attachments]
      self.dynamic_cpu = opts[:dynamic_cpu]
      self.external_host_provider = opts[:external_host_provider]
      self.floppies = opts[:floppies]
      self.fqdn = opts[:fqdn]
      self.graphics_consoles = opts[:graphics_consoles]
      self.guest_operating_system = opts[:guest_operating_system]
      self.guest_time_zone = opts[:guest_time_zone]
      self.has_illegal_images = opts[:has_illegal_images]
      self.host = opts[:host]
      self.host_devices = opts[:host_devices]
      self.instance_type = opts[:instance_type]
      self.katello_errata = opts[:katello_errata]
      self.mediated_devices = opts[:mediated_devices]
      self.next_run_configuration_exists = opts[:next_run_configuration_exists]
      self.nics = opts[:nics]
      self.numa_nodes = opts[:numa_nodes]
      self.numa_tune_mode = opts[:numa_tune_mode]
      self.original_template = opts[:original_template]
      self.payloads = opts[:payloads]
      self.permissions = opts[:permissions]
      self.reported_devices = opts[:reported_devices]
      self.run_once = opts[:run_once]
      self.sessions = opts[:sessions]
      self.snapshots = opts[:snapshots]
      self.start_time = opts[:start_time]
      self.statistics = opts[:statistics]
      self.status = opts[:status]
      self.status_detail = opts[:status_detail]
      self.stop_reason = opts[:stop_reason]
      self.stop_time = opts[:stop_time]
      self.tags = opts[:tags]
      self.template = opts[:template]
      self.use_latest_template_version = opts[:use_latest_template_version]
      self.vm_pool = opts[:vm_pool]
      self.watchdogs = opts[:watchdogs]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @affinity_labels == other.affinity_labels &&
      @applications == other.applications &&
      @cdroms == other.cdroms &&
      @disk_attachments == other.disk_attachments &&
      @dynamic_cpu == other.dynamic_cpu &&
      @external_host_provider == other.external_host_provider &&
      @floppies == other.floppies &&
      @fqdn == other.fqdn &&
      @graphics_consoles == other.graphics_consoles &&
      @guest_operating_system == other.guest_operating_system &&
      @guest_time_zone == other.guest_time_zone &&
      @has_illegal_images == other.has_illegal_images &&
      @host == other.host &&
      @host_devices == other.host_devices &&
      @instance_type == other.instance_type &&
      @katello_errata == other.katello_errata &&
      @mediated_devices == other.mediated_devices &&
      @next_run_configuration_exists == other.next_run_configuration_exists &&
      @nics == other.nics &&
      @numa_nodes == other.numa_nodes &&
      @numa_tune_mode == other.numa_tune_mode &&
      @original_template == other.original_template &&
      @payloads == other.payloads &&
      @permissions == other.permissions &&
      @reported_devices == other.reported_devices &&
      @run_once == other.run_once &&
      @sessions == other.sessions &&
      @snapshots == other.snapshots &&
      @start_time == other.start_time &&
      @statistics == other.statistics &&
      @status == other.status &&
      @status_detail == other.status_detail &&
      @stop_reason == other.stop_reason &&
      @stop_time == other.stop_time &&
      @tags == other.tags &&
      @template == other.template &&
      @use_latest_template_version == other.use_latest_template_version &&
      @vm_pool == other.vm_pool &&
      @watchdogs == other.watchdogs
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @affinity_labels.hash +
      @applications.hash +
      @cdroms.hash +
      @disk_attachments.hash +
      @dynamic_cpu.hash +
      @external_host_provider.hash +
      @floppies.hash +
      @fqdn.hash +
      @graphics_consoles.hash +
      @guest_operating_system.hash +
      @guest_time_zone.hash +
      @has_illegal_images.hash +
      @host.hash +
      @host_devices.hash +
      @instance_type.hash +
      @katello_errata.hash +
      @mediated_devices.hash +
      @next_run_configuration_exists.hash +
      @nics.hash +
      @numa_nodes.hash +
      @numa_tune_mode.hash +
      @original_template.hash +
      @payloads.hash +
      @permissions.hash +
      @reported_devices.hash +
      @run_once.hash +
      @sessions.hash +
      @snapshots.hash +
      @start_time.hash +
      @statistics.hash +
      @status.hash +
      @status_detail.hash +
      @stop_reason.hash +
      @stop_time.hash +
      @tags.hash +
      @template.hash +
      @use_latest_template_version.hash +
      @vm_pool.hash +
      @watchdogs.hash
    end
    
  end
  
  class VmMediatedDevice < Device
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `instance_type` attribute.
    # 
    # @return [InstanceType]
    # 
    def instance_type
      @instance_type
    end
    
    # 
    # Sets the value of the `instance_type` attribute.
    # 
    # @param value [InstanceType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::InstanceType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def instance_type=(value)
      if value.is_a?(Hash)
        value = InstanceType.new(value)
      end
      @instance_type = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `spec_params` attribute.
    # 
    # @return [Array<Property>]
    # 
    def spec_params
      @spec_params
    end
    
    # 
    # Sets the value of the `spec_params` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def spec_params=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @spec_params = list
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Creates a new instance of the {VmMediatedDevice} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [InstanceType, Hash] :instance_type The value of attribute `instance_type`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :spec_params The values of attribute `spec_params`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.spec_params = opts[:spec_params]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @spec_params == other.spec_params
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @spec_params.hash
    end
    
  end
  
  class Watchdog < Device
    
    # 
    # Returns the value of the `action` attribute.
    # 
    # @return [WatchdogAction]
    # 
    def action
      @action
    end
    
    # 
    # Sets the value of the `action` attribute.
    # 
    # @param value [WatchdogAction]
    # 
    def action=(value)
      @action = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `instance_type` attribute.
    # 
    # @return [InstanceType]
    # 
    def instance_type
      @instance_type
    end
    
    # 
    # Sets the value of the `instance_type` attribute.
    # 
    # @param value [InstanceType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::InstanceType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def instance_type=(value)
      if value.is_a?(Hash)
        value = InstanceType.new(value)
      end
      @instance_type = value
    end
    
    # 
    # Returns the value of the `model` attribute.
    # 
    # @return [WatchdogModel]
    # 
    def model
      @model
    end
    
    # 
    # Sets the value of the `model` attribute.
    # 
    # @param value [WatchdogModel]
    # 
    def model=(value)
      @model = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Creates a new instance of the {Watchdog} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [WatchdogAction] :action The value of attribute `action`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [InstanceType, Hash] :instance_type The value of attribute `instance_type`.
    # 
    # @option opts [WatchdogModel] :model The value of attribute `model`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.action = opts[:action]
      self.model = opts[:model]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @action == other.action &&
      @model == other.model
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @action.hash +
      @model.hash
    end
    
  end
  
  class Cdrom < Device
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `file` attribute.
    # 
    # @return [File]
    # 
    def file
      @file
    end
    
    # 
    # Sets the value of the `file` attribute.
    # 
    # @param value [File, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::File} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def file=(value)
      if value.is_a?(Hash)
        value = File.new(value)
      end
      @file = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `instance_type` attribute.
    # 
    # @return [InstanceType]
    # 
    def instance_type
      @instance_type
    end
    
    # 
    # Sets the value of the `instance_type` attribute.
    # 
    # @param value [InstanceType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::InstanceType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def instance_type=(value)
      if value.is_a?(Hash)
        value = InstanceType.new(value)
      end
      @instance_type = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Creates a new instance of the {Cdrom} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [File, Hash] :file The value of attribute `file`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [InstanceType, Hash] :instance_type The value of attribute `instance_type`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.file = opts[:file]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @file == other.file
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @file.hash
    end
    
  end
  
  class ExternalHostProvider < ExternalProvider
    
    # 
    # Returns the value of the `authentication_url` attribute.
    # 
    # @return [String]
    # 
    def authentication_url
      @authentication_url
    end
    
    # 
    # Sets the value of the `authentication_url` attribute.
    # 
    # @param value [String]
    # 
    def authentication_url=(value)
      @authentication_url = value
    end
    
    # 
    # Returns the value of the `certificates` attribute.
    # 
    # @return [Array<Certificate>]
    # 
    def certificates
      @certificates
    end
    
    # 
    # Sets the value of the `certificates` attribute.
    # 
    # @param list [Array<Certificate>]
    # 
    def certificates=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Certificate.new(value)
          end
        end
      end
      @certificates = list
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `compute_resources` attribute.
    # 
    # @return [Array<ExternalComputeResource>]
    # 
    def compute_resources
      @compute_resources
    end
    
    # 
    # Sets the value of the `compute_resources` attribute.
    # 
    # @param list [Array<ExternalComputeResource>]
    # 
    def compute_resources=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = ExternalComputeResource.new(value)
          end
        end
      end
      @compute_resources = list
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `discovered_hosts` attribute.
    # 
    # @return [Array<ExternalDiscoveredHost>]
    # 
    def discovered_hosts
      @discovered_hosts
    end
    
    # 
    # Sets the value of the `discovered_hosts` attribute.
    # 
    # @param list [Array<ExternalDiscoveredHost>]
    # 
    def discovered_hosts=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = ExternalDiscoveredHost.new(value)
          end
        end
      end
      @discovered_hosts = list
    end
    
    # 
    # Returns the value of the `host_groups` attribute.
    # 
    # @return [Array<ExternalHostGroup>]
    # 
    def host_groups
      @host_groups
    end
    
    # 
    # Sets the value of the `host_groups` attribute.
    # 
    # @param list [Array<ExternalHostGroup>]
    # 
    def host_groups=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = ExternalHostGroup.new(value)
          end
        end
      end
      @host_groups = list
    end
    
    # 
    # Returns the value of the `hosts` attribute.
    # 
    # @return [Array<Host>]
    # 
    def hosts
      @hosts
    end
    
    # 
    # Sets the value of the `hosts` attribute.
    # 
    # @param list [Array<Host>]
    # 
    def hosts=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Host.new(value)
          end
        end
      end
      @hosts = list
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `properties` attribute.
    # 
    # @return [Array<Property>]
    # 
    def properties
      @properties
    end
    
    # 
    # Sets the value of the `properties` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @properties = list
    end
    
    # 
    # Returns the value of the `requires_authentication` attribute.
    # 
    # @return [Boolean]
    # 
    def requires_authentication
      @requires_authentication
    end
    
    # 
    # Sets the value of the `requires_authentication` attribute.
    # 
    # @param value [Boolean]
    # 
    def requires_authentication=(value)
      @requires_authentication = value
    end
    
    # 
    # Returns the value of the `url` attribute.
    # 
    # @return [String]
    # 
    def url
      @url
    end
    
    # 
    # Sets the value of the `url` attribute.
    # 
    # @param value [String]
    # 
    def url=(value)
      @url = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Creates a new instance of the {ExternalHostProvider} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :authentication_url The value of attribute `authentication_url`.
    # 
    # @option opts [Array<Certificate>, Array<Hash>] :certificates The values of attribute `certificates`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Array<ExternalComputeResource>, Array<Hash>] :compute_resources The values of attribute `compute_resources`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Array<ExternalDiscoveredHost>, Array<Hash>] :discovered_hosts The values of attribute `discovered_hosts`.
    # 
    # @option opts [Array<ExternalHostGroup>, Array<Hash>] :host_groups The values of attribute `host_groups`.
    # 
    # @option opts [Array<Host>, Array<Hash>] :hosts The values of attribute `hosts`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :properties The values of attribute `properties`.
    # 
    # @option opts [Boolean] :requires_authentication The value of attribute `requires_authentication`.
    # 
    # @option opts [String] :url The value of attribute `url`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.certificates = opts[:certificates]
      self.compute_resources = opts[:compute_resources]
      self.discovered_hosts = opts[:discovered_hosts]
      self.host_groups = opts[:host_groups]
      self.hosts = opts[:hosts]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @certificates == other.certificates &&
      @compute_resources == other.compute_resources &&
      @discovered_hosts == other.discovered_hosts &&
      @host_groups == other.host_groups &&
      @hosts == other.hosts
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @certificates.hash +
      @compute_resources.hash +
      @discovered_hosts.hash +
      @host_groups.hash +
      @hosts.hash
    end
    
  end
  
  class GlusterBrick < GlusterBrickAdvancedDetails
    
    # 
    # Returns the value of the `brick_dir` attribute.
    # 
    # @return [String]
    # 
    def brick_dir
      @brick_dir
    end
    
    # 
    # Sets the value of the `brick_dir` attribute.
    # 
    # @param value [String]
    # 
    def brick_dir=(value)
      @brick_dir = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `device` attribute.
    # 
    # @return [String]
    # 
    def device
      @device
    end
    
    # 
    # Sets the value of the `device` attribute.
    # 
    # @param value [String]
    # 
    def device=(value)
      @device = value
    end
    
    # 
    # Returns the value of the `fs_name` attribute.
    # 
    # @return [String]
    # 
    def fs_name
      @fs_name
    end
    
    # 
    # Sets the value of the `fs_name` attribute.
    # 
    # @param value [String]
    # 
    def fs_name=(value)
      @fs_name = value
    end
    
    # 
    # Returns the value of the `gluster_clients` attribute.
    # 
    # @return [Array<GlusterClient>]
    # 
    def gluster_clients
      @gluster_clients
    end
    
    # 
    # Sets the value of the `gluster_clients` attribute.
    # 
    # @param list [Array<GlusterClient>]
    # 
    def gluster_clients=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = GlusterClient.new(value)
          end
        end
      end
      @gluster_clients = list
    end
    
    # 
    # Returns the value of the `gluster_volume` attribute.
    # 
    # @return [GlusterVolume]
    # 
    def gluster_volume
      @gluster_volume
    end
    
    # 
    # Sets the value of the `gluster_volume` attribute.
    # 
    # @param value [GlusterVolume, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::GlusterVolume} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def gluster_volume=(value)
      if value.is_a?(Hash)
        value = GlusterVolume.new(value)
      end
      @gluster_volume = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `instance_type` attribute.
    # 
    # @return [InstanceType]
    # 
    def instance_type
      @instance_type
    end
    
    # 
    # Sets the value of the `instance_type` attribute.
    # 
    # @param value [InstanceType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::InstanceType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def instance_type=(value)
      if value.is_a?(Hash)
        value = InstanceType.new(value)
      end
      @instance_type = value
    end
    
    # 
    # Returns the value of the `memory_pools` attribute.
    # 
    # @return [Array<GlusterMemoryPool>]
    # 
    def memory_pools
      @memory_pools
    end
    
    # 
    # Sets the value of the `memory_pools` attribute.
    # 
    # @param list [Array<GlusterMemoryPool>]
    # 
    def memory_pools=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = GlusterMemoryPool.new(value)
          end
        end
      end
      @memory_pools = list
    end
    
    # 
    # Returns the value of the `mnt_options` attribute.
    # 
    # @return [String]
    # 
    def mnt_options
      @mnt_options
    end
    
    # 
    # Sets the value of the `mnt_options` attribute.
    # 
    # @param value [String]
    # 
    def mnt_options=(value)
      @mnt_options = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `pid` attribute.
    # 
    # @return [Integer]
    # 
    def pid
      @pid
    end
    
    # 
    # Sets the value of the `pid` attribute.
    # 
    # @param value [Integer]
    # 
    def pid=(value)
      @pid = value
    end
    
    # 
    # Returns the value of the `port` attribute.
    # 
    # @return [Integer]
    # 
    def port
      @port
    end
    
    # 
    # Sets the value of the `port` attribute.
    # 
    # @param value [Integer]
    # 
    def port=(value)
      @port = value
    end
    
    # 
    # Returns the value of the `server_id` attribute.
    # 
    # @return [String]
    # 
    def server_id
      @server_id
    end
    
    # 
    # Sets the value of the `server_id` attribute.
    # 
    # @param value [String]
    # 
    def server_id=(value)
      @server_id = value
    end
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [GlusterBrickStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [GlusterBrickStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `vms` attribute.
    # 
    # @return [Array<Vm>]
    # 
    def vms
      @vms
    end
    
    # 
    # Sets the value of the `vms` attribute.
    # 
    # @param list [Array<Vm>]
    # 
    def vms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Vm.new(value)
          end
        end
      end
      @vms = list
    end
    
    # 
    # Creates a new instance of the {GlusterBrick} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :brick_dir The value of attribute `brick_dir`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :device The value of attribute `device`.
    # 
    # @option opts [String] :fs_name The value of attribute `fs_name`.
    # 
    # @option opts [Array<GlusterClient>, Array<Hash>] :gluster_clients The values of attribute `gluster_clients`.
    # 
    # @option opts [GlusterVolume, Hash] :gluster_volume The value of attribute `gluster_volume`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [InstanceType, Hash] :instance_type The value of attribute `instance_type`.
    # 
    # @option opts [Array<GlusterMemoryPool>, Array<Hash>] :memory_pools The values of attribute `memory_pools`.
    # 
    # @option opts [String] :mnt_options The value of attribute `mnt_options`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Integer] :pid The value of attribute `pid`.
    # 
    # @option opts [Integer] :port The value of attribute `port`.
    # 
    # @option opts [String] :server_id The value of attribute `server_id`.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # @option opts [GlusterBrickStatus] :status The value of attribute `status`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [Array<Vm>, Array<Hash>] :vms The values of attribute `vms`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.brick_dir = opts[:brick_dir]
      self.gluster_volume = opts[:gluster_volume]
      self.server_id = opts[:server_id]
      self.statistics = opts[:statistics]
      self.status = opts[:status]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @brick_dir == other.brick_dir &&
      @gluster_volume == other.gluster_volume &&
      @server_id == other.server_id &&
      @statistics == other.statistics &&
      @status == other.status
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @brick_dir.hash +
      @gluster_volume.hash +
      @server_id.hash +
      @statistics.hash +
      @status.hash
    end
    
  end
  
  class InstanceType < Template
    
    # 
    # Returns the value of the `auto_pinning_policy` attribute.
    # 
    # @return [AutoPinningPolicy]
    # 
    def auto_pinning_policy
      @auto_pinning_policy
    end
    
    # 
    # Sets the value of the `auto_pinning_policy` attribute.
    # 
    # @param value [AutoPinningPolicy]
    # 
    def auto_pinning_policy=(value)
      @auto_pinning_policy = value
    end
    
    # 
    # Returns the value of the `bios` attribute.
    # 
    # @return [Bios]
    # 
    def bios
      @bios
    end
    
    # 
    # Sets the value of the `bios` attribute.
    # 
    # @param value [Bios, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Bios} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def bios=(value)
      if value.is_a?(Hash)
        value = Bios.new(value)
      end
      @bios = value
    end
    
    # 
    # Returns the value of the `cdroms` attribute.
    # 
    # @return [Array<Cdrom>]
    # 
    def cdroms
      @cdroms
    end
    
    # 
    # Sets the value of the `cdroms` attribute.
    # 
    # @param list [Array<Cdrom>]
    # 
    def cdroms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Cdrom.new(value)
          end
        end
      end
      @cdroms = list
    end
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `console` attribute.
    # 
    # @return [Console]
    # 
    def console
      @console
    end
    
    # 
    # Sets the value of the `console` attribute.
    # 
    # @param value [Console, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Console} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def console=(value)
      if value.is_a?(Hash)
        value = Console.new(value)
      end
      @console = value
    end
    
    # 
    # Returns the value of the `cpu` attribute.
    # 
    # @return [Cpu]
    # 
    def cpu
      @cpu
    end
    
    # 
    # Sets the value of the `cpu` attribute.
    # 
    # @param value [Cpu, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cpu} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu=(value)
      if value.is_a?(Hash)
        value = Cpu.new(value)
      end
      @cpu = value
    end
    
    # 
    # Returns the value of the `cpu_pinning_policy` attribute.
    # 
    # @return [CpuPinningPolicy]
    # 
    def cpu_pinning_policy
      @cpu_pinning_policy
    end
    
    # 
    # Sets the value of the `cpu_pinning_policy` attribute.
    # 
    # @param value [CpuPinningPolicy]
    # 
    def cpu_pinning_policy=(value)
      @cpu_pinning_policy = value
    end
    
    # 
    # Returns the value of the `cpu_profile` attribute.
    # 
    # @return [CpuProfile]
    # 
    def cpu_profile
      @cpu_profile
    end
    
    # 
    # Sets the value of the `cpu_profile` attribute.
    # 
    # @param value [CpuProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::CpuProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu_profile=(value)
      if value.is_a?(Hash)
        value = CpuProfile.new(value)
      end
      @cpu_profile = value
    end
    
    # 
    # Returns the value of the `cpu_shares` attribute.
    # 
    # @return [Integer]
    # 
    def cpu_shares
      @cpu_shares
    end
    
    # 
    # Sets the value of the `cpu_shares` attribute.
    # 
    # @param value [Integer]
    # 
    def cpu_shares=(value)
      @cpu_shares = value
    end
    
    # 
    # Returns the value of the `creation_time` attribute.
    # 
    # @return [DateTime]
    # 
    def creation_time
      @creation_time
    end
    
    # 
    # Sets the value of the `creation_time` attribute.
    # 
    # @param value [DateTime]
    # 
    def creation_time=(value)
      @creation_time = value
    end
    
    # 
    # Returns the value of the `custom_compatibility_version` attribute.
    # 
    # @return [Version]
    # 
    def custom_compatibility_version
      @custom_compatibility_version
    end
    
    # 
    # Sets the value of the `custom_compatibility_version` attribute.
    # 
    # @param value [Version, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Version} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def custom_compatibility_version=(value)
      if value.is_a?(Hash)
        value = Version.new(value)
      end
      @custom_compatibility_version = value
    end
    
    # 
    # Returns the value of the `custom_cpu_model` attribute.
    # 
    # @return [String]
    # 
    def custom_cpu_model
      @custom_cpu_model
    end
    
    # 
    # Sets the value of the `custom_cpu_model` attribute.
    # 
    # @param value [String]
    # 
    def custom_cpu_model=(value)
      @custom_cpu_model = value
    end
    
    # 
    # Returns the value of the `custom_emulated_machine` attribute.
    # 
    # @return [String]
    # 
    def custom_emulated_machine
      @custom_emulated_machine
    end
    
    # 
    # Sets the value of the `custom_emulated_machine` attribute.
    # 
    # @param value [String]
    # 
    def custom_emulated_machine=(value)
      @custom_emulated_machine = value
    end
    
    # 
    # Returns the value of the `custom_properties` attribute.
    # 
    # @return [Array<CustomProperty>]
    # 
    def custom_properties
      @custom_properties
    end
    
    # 
    # Sets the value of the `custom_properties` attribute.
    # 
    # @param list [Array<CustomProperty>]
    # 
    def custom_properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = CustomProperty.new(value)
          end
        end
      end
      @custom_properties = list
    end
    
    # 
    # Returns the value of the `delete_protected` attribute.
    # 
    # @return [Boolean]
    # 
    def delete_protected
      @delete_protected
    end
    
    # 
    # Sets the value of the `delete_protected` attribute.
    # 
    # @param value [Boolean]
    # 
    def delete_protected=(value)
      @delete_protected = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `disk_attachments` attribute.
    # 
    # @return [Array<DiskAttachment>]
    # 
    def disk_attachments
      @disk_attachments
    end
    
    # 
    # Sets the value of the `disk_attachments` attribute.
    # 
    # @param list [Array<DiskAttachment>]
    # 
    def disk_attachments=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = DiskAttachment.new(value)
          end
        end
      end
      @disk_attachments = list
    end
    
    # 
    # Returns the value of the `display` attribute.
    # 
    # @return [Display]
    # 
    def display
      @display
    end
    
    # 
    # Sets the value of the `display` attribute.
    # 
    # @param value [Display, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Display} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def display=(value)
      if value.is_a?(Hash)
        value = Display.new(value)
      end
      @display = value
    end
    
    # 
    # Returns the value of the `domain` attribute.
    # 
    # @return [Domain]
    # 
    def domain
      @domain
    end
    
    # 
    # Sets the value of the `domain` attribute.
    # 
    # @param value [Domain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Domain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def domain=(value)
      if value.is_a?(Hash)
        value = Domain.new(value)
      end
      @domain = value
    end
    
    # 
    # Returns the value of the `graphics_consoles` attribute.
    # 
    # @return [Array<GraphicsConsole>]
    # 
    def graphics_consoles
      @graphics_consoles
    end
    
    # 
    # Sets the value of the `graphics_consoles` attribute.
    # 
    # @param list [Array<GraphicsConsole>]
    # 
    def graphics_consoles=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = GraphicsConsole.new(value)
          end
        end
      end
      @graphics_consoles = list
    end
    
    # 
    # Returns the value of the `high_availability` attribute.
    # 
    # @return [HighAvailability]
    # 
    def high_availability
      @high_availability
    end
    
    # 
    # Sets the value of the `high_availability` attribute.
    # 
    # @param value [HighAvailability, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HighAvailability} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def high_availability=(value)
      if value.is_a?(Hash)
        value = HighAvailability.new(value)
      end
      @high_availability = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `initialization` attribute.
    # 
    # @return [Initialization]
    # 
    def initialization
      @initialization
    end
    
    # 
    # Sets the value of the `initialization` attribute.
    # 
    # @param value [Initialization, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Initialization} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def initialization=(value)
      if value.is_a?(Hash)
        value = Initialization.new(value)
      end
      @initialization = value
    end
    
    # 
    # Returns the value of the `io` attribute.
    # 
    # @return [Io]
    # 
    def io
      @io
    end
    
    # 
    # Sets the value of the `io` attribute.
    # 
    # @param value [Io, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Io} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def io=(value)
      if value.is_a?(Hash)
        value = Io.new(value)
      end
      @io = value
    end
    
    # 
    # Returns the value of the `large_icon` attribute.
    # 
    # @return [Icon]
    # 
    def large_icon
      @large_icon
    end
    
    # 
    # Sets the value of the `large_icon` attribute.
    # 
    # @param value [Icon, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Icon} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def large_icon=(value)
      if value.is_a?(Hash)
        value = Icon.new(value)
      end
      @large_icon = value
    end
    
    # 
    # Returns the value of the `lease` attribute.
    # 
    # @return [StorageDomainLease]
    # 
    def lease
      @lease
    end
    
    # 
    # Sets the value of the `lease` attribute.
    # 
    # @param value [StorageDomainLease, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomainLease} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def lease=(value)
      if value.is_a?(Hash)
        value = StorageDomainLease.new(value)
      end
      @lease = value
    end
    
    # 
    # Returns the value of the `mediated_devices` attribute.
    # 
    # @return [Array<VmMediatedDevice>]
    # 
    def mediated_devices
      @mediated_devices
    end
    
    # 
    # Sets the value of the `mediated_devices` attribute.
    # 
    # @param list [Array<VmMediatedDevice>]
    # 
    def mediated_devices=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = VmMediatedDevice.new(value)
          end
        end
      end
      @mediated_devices = list
    end
    
    # 
    # Returns the value of the `memory` attribute.
    # 
    # @return [Integer]
    # 
    def memory
      @memory
    end
    
    # 
    # Sets the value of the `memory` attribute.
    # 
    # @param value [Integer]
    # 
    def memory=(value)
      @memory = value
    end
    
    # 
    # Returns the value of the `memory_policy` attribute.
    # 
    # @return [MemoryPolicy]
    # 
    def memory_policy
      @memory_policy
    end
    
    # 
    # Sets the value of the `memory_policy` attribute.
    # 
    # @param value [MemoryPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MemoryPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def memory_policy=(value)
      if value.is_a?(Hash)
        value = MemoryPolicy.new(value)
      end
      @memory_policy = value
    end
    
    # 
    # Returns the value of the `migration` attribute.
    # 
    # @return [MigrationOptions]
    # 
    def migration
      @migration
    end
    
    # 
    # Sets the value of the `migration` attribute.
    # 
    # @param value [MigrationOptions, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MigrationOptions} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def migration=(value)
      if value.is_a?(Hash)
        value = MigrationOptions.new(value)
      end
      @migration = value
    end
    
    # 
    # Returns the value of the `migration_downtime` attribute.
    # 
    # @return [Integer]
    # 
    def migration_downtime
      @migration_downtime
    end
    
    # 
    # Sets the value of the `migration_downtime` attribute.
    # 
    # @param value [Integer]
    # 
    def migration_downtime=(value)
      @migration_downtime = value
    end
    
    # 
    # Returns the value of the `multi_queues_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def multi_queues_enabled
      @multi_queues_enabled
    end
    
    # 
    # Sets the value of the `multi_queues_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def multi_queues_enabled=(value)
      @multi_queues_enabled = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `nics` attribute.
    # 
    # @return [Array<Nic>]
    # 
    def nics
      @nics
    end
    
    # 
    # Sets the value of the `nics` attribute.
    # 
    # @param list [Array<Nic>]
    # 
    def nics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Nic.new(value)
          end
        end
      end
      @nics = list
    end
    
    # 
    # Returns the value of the `origin` attribute.
    # 
    # @return [String]
    # 
    def origin
      @origin
    end
    
    # 
    # Sets the value of the `origin` attribute.
    # 
    # @param value [String]
    # 
    def origin=(value)
      @origin = value
    end
    
    # 
    # Returns the value of the `os` attribute.
    # 
    # @return [OperatingSystem]
    # 
    def os
      @os
    end
    
    # 
    # Sets the value of the `os` attribute.
    # 
    # @param value [OperatingSystem, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::OperatingSystem} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def os=(value)
      if value.is_a?(Hash)
        value = OperatingSystem.new(value)
      end
      @os = value
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `placement_policy` attribute.
    # 
    # @return [VmPlacementPolicy]
    # 
    def placement_policy
      @placement_policy
    end
    
    # 
    # Sets the value of the `placement_policy` attribute.
    # 
    # @param value [VmPlacementPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VmPlacementPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def placement_policy=(value)
      if value.is_a?(Hash)
        value = VmPlacementPolicy.new(value)
      end
      @placement_policy = value
    end
    
    # 
    # Returns the value of the `quota` attribute.
    # 
    # @return [Quota]
    # 
    def quota
      @quota
    end
    
    # 
    # Sets the value of the `quota` attribute.
    # 
    # @param value [Quota, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Quota} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def quota=(value)
      if value.is_a?(Hash)
        value = Quota.new(value)
      end
      @quota = value
    end
    
    # 
    # Returns the value of the `rng_device` attribute.
    # 
    # @return [RngDevice]
    # 
    def rng_device
      @rng_device
    end
    
    # 
    # Sets the value of the `rng_device` attribute.
    # 
    # @param value [RngDevice, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::RngDevice} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def rng_device=(value)
      if value.is_a?(Hash)
        value = RngDevice.new(value)
      end
      @rng_device = value
    end
    
    # 
    # Returns the value of the `serial_number` attribute.
    # 
    # @return [SerialNumber]
    # 
    def serial_number
      @serial_number
    end
    
    # 
    # Sets the value of the `serial_number` attribute.
    # 
    # @param value [SerialNumber, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SerialNumber} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def serial_number=(value)
      if value.is_a?(Hash)
        value = SerialNumber.new(value)
      end
      @serial_number = value
    end
    
    # 
    # Returns the value of the `small_icon` attribute.
    # 
    # @return [Icon]
    # 
    def small_icon
      @small_icon
    end
    
    # 
    # Sets the value of the `small_icon` attribute.
    # 
    # @param value [Icon, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Icon} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def small_icon=(value)
      if value.is_a?(Hash)
        value = Icon.new(value)
      end
      @small_icon = value
    end
    
    # 
    # Returns the value of the `soundcard_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def soundcard_enabled
      @soundcard_enabled
    end
    
    # 
    # Sets the value of the `soundcard_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def soundcard_enabled=(value)
      @soundcard_enabled = value
    end
    
    # 
    # Returns the value of the `sso` attribute.
    # 
    # @return [Sso]
    # 
    def sso
      @sso
    end
    
    # 
    # Sets the value of the `sso` attribute.
    # 
    # @param value [Sso, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Sso} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def sso=(value)
      if value.is_a?(Hash)
        value = Sso.new(value)
      end
      @sso = value
    end
    
    # 
    # Returns the value of the `start_paused` attribute.
    # 
    # @return [Boolean]
    # 
    def start_paused
      @start_paused
    end
    
    # 
    # Sets the value of the `start_paused` attribute.
    # 
    # @param value [Boolean]
    # 
    def start_paused=(value)
      @start_paused = value
    end
    
    # 
    # Returns the value of the `stateless` attribute.
    # 
    # @return [Boolean]
    # 
    def stateless
      @stateless
    end
    
    # 
    # Sets the value of the `stateless` attribute.
    # 
    # @param value [Boolean]
    # 
    def stateless=(value)
      @stateless = value
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [TemplateStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [TemplateStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `storage_error_resume_behaviour` attribute.
    # 
    # @return [VmStorageErrorResumeBehaviour]
    # 
    def storage_error_resume_behaviour
      @storage_error_resume_behaviour
    end
    
    # 
    # Sets the value of the `storage_error_resume_behaviour` attribute.
    # 
    # @param value [VmStorageErrorResumeBehaviour]
    # 
    def storage_error_resume_behaviour=(value)
      @storage_error_resume_behaviour = value
    end
    
    # 
    # Returns the value of the `tags` attribute.
    # 
    # @return [Array<Tag>]
    # 
    def tags
      @tags
    end
    
    # 
    # Sets the value of the `tags` attribute.
    # 
    # @param list [Array<Tag>]
    # 
    def tags=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Tag.new(value)
          end
        end
      end
      @tags = list
    end
    
    # 
    # Returns the value of the `time_zone` attribute.
    # 
    # @return [TimeZone]
    # 
    def time_zone
      @time_zone
    end
    
    # 
    # Sets the value of the `time_zone` attribute.
    # 
    # @param value [TimeZone, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::TimeZone} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def time_zone=(value)
      if value.is_a?(Hash)
        value = TimeZone.new(value)
      end
      @time_zone = value
    end
    
    # 
    # Returns the value of the `tpm_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def tpm_enabled
      @tpm_enabled
    end
    
    # 
    # Sets the value of the `tpm_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def tpm_enabled=(value)
      @tpm_enabled = value
    end
    
    # 
    # Returns the value of the `tunnel_migration` attribute.
    # 
    # @return [Boolean]
    # 
    def tunnel_migration
      @tunnel_migration
    end
    
    # 
    # Sets the value of the `tunnel_migration` attribute.
    # 
    # @param value [Boolean]
    # 
    def tunnel_migration=(value)
      @tunnel_migration = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [VmType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [VmType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `usb` attribute.
    # 
    # @return [Usb]
    # 
    def usb
      @usb
    end
    
    # 
    # Sets the value of the `usb` attribute.
    # 
    # @param value [Usb, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Usb} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def usb=(value)
      if value.is_a?(Hash)
        value = Usb.new(value)
      end
      @usb = value
    end
    
    # 
    # Returns the value of the `version` attribute.
    # 
    # @return [TemplateVersion]
    # 
    def version
      @version
    end
    
    # 
    # Sets the value of the `version` attribute.
    # 
    # @param value [TemplateVersion, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::TemplateVersion} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def version=(value)
      if value.is_a?(Hash)
        value = TemplateVersion.new(value)
      end
      @version = value
    end
    
    # 
    # Returns the value of the `virtio_scsi` attribute.
    # 
    # @return [VirtioScsi]
    # 
    def virtio_scsi
      @virtio_scsi
    end
    
    # 
    # Sets the value of the `virtio_scsi` attribute.
    # 
    # @param value [VirtioScsi, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VirtioScsi} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def virtio_scsi=(value)
      if value.is_a?(Hash)
        value = VirtioScsi.new(value)
      end
      @virtio_scsi = value
    end
    
    # 
    # Returns the value of the `virtio_scsi_multi_queues` attribute.
    # 
    # @return [Integer]
    # 
    def virtio_scsi_multi_queues
      @virtio_scsi_multi_queues
    end
    
    # 
    # Sets the value of the `virtio_scsi_multi_queues` attribute.
    # 
    # @param value [Integer]
    # 
    def virtio_scsi_multi_queues=(value)
      @virtio_scsi_multi_queues = value
    end
    
    # 
    # Returns the value of the `virtio_scsi_multi_queues_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def virtio_scsi_multi_queues_enabled
      @virtio_scsi_multi_queues_enabled
    end
    
    # 
    # Sets the value of the `virtio_scsi_multi_queues_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def virtio_scsi_multi_queues_enabled=(value)
      @virtio_scsi_multi_queues_enabled = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `watchdogs` attribute.
    # 
    # @return [Array<Watchdog>]
    # 
    def watchdogs
      @watchdogs
    end
    
    # 
    # Sets the value of the `watchdogs` attribute.
    # 
    # @param list [Array<Watchdog>]
    # 
    def watchdogs=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Watchdog.new(value)
          end
        end
      end
      @watchdogs = list
    end
    
    # 
    # Creates a new instance of the {InstanceType} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [AutoPinningPolicy] :auto_pinning_policy The value of attribute `auto_pinning_policy`.
    # 
    # @option opts [Bios, Hash] :bios The value of attribute `bios`.
    # 
    # @option opts [Array<Cdrom>, Array<Hash>] :cdroms The values of attribute `cdroms`.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Console, Hash] :console The value of attribute `console`.
    # 
    # @option opts [Cpu, Hash] :cpu The value of attribute `cpu`.
    # 
    # @option opts [CpuPinningPolicy] :cpu_pinning_policy The value of attribute `cpu_pinning_policy`.
    # 
    # @option opts [CpuProfile, Hash] :cpu_profile The value of attribute `cpu_profile`.
    # 
    # @option opts [Integer] :cpu_shares The value of attribute `cpu_shares`.
    # 
    # @option opts [DateTime] :creation_time The value of attribute `creation_time`.
    # 
    # @option opts [Version, Hash] :custom_compatibility_version The value of attribute `custom_compatibility_version`.
    # 
    # @option opts [String] :custom_cpu_model The value of attribute `custom_cpu_model`.
    # 
    # @option opts [String] :custom_emulated_machine The value of attribute `custom_emulated_machine`.
    # 
    # @option opts [Array<CustomProperty>, Array<Hash>] :custom_properties The values of attribute `custom_properties`.
    # 
    # @option opts [Boolean] :delete_protected The value of attribute `delete_protected`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Array<DiskAttachment>, Array<Hash>] :disk_attachments The values of attribute `disk_attachments`.
    # 
    # @option opts [Display, Hash] :display The value of attribute `display`.
    # 
    # @option opts [Domain, Hash] :domain The value of attribute `domain`.
    # 
    # @option opts [Array<GraphicsConsole>, Array<Hash>] :graphics_consoles The values of attribute `graphics_consoles`.
    # 
    # @option opts [HighAvailability, Hash] :high_availability The value of attribute `high_availability`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Initialization, Hash] :initialization The value of attribute `initialization`.
    # 
    # @option opts [Io, Hash] :io The value of attribute `io`.
    # 
    # @option opts [Icon, Hash] :large_icon The value of attribute `large_icon`.
    # 
    # @option opts [StorageDomainLease, Hash] :lease The value of attribute `lease`.
    # 
    # @option opts [Array<VmMediatedDevice>, Array<Hash>] :mediated_devices The values of attribute `mediated_devices`.
    # 
    # @option opts [Integer] :memory The value of attribute `memory`.
    # 
    # @option opts [MemoryPolicy, Hash] :memory_policy The value of attribute `memory_policy`.
    # 
    # @option opts [MigrationOptions, Hash] :migration The value of attribute `migration`.
    # 
    # @option opts [Integer] :migration_downtime The value of attribute `migration_downtime`.
    # 
    # @option opts [Boolean] :multi_queues_enabled The value of attribute `multi_queues_enabled`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<Nic>, Array<Hash>] :nics The values of attribute `nics`.
    # 
    # @option opts [String] :origin The value of attribute `origin`.
    # 
    # @option opts [OperatingSystem, Hash] :os The value of attribute `os`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [VmPlacementPolicy, Hash] :placement_policy The value of attribute `placement_policy`.
    # 
    # @option opts [Quota, Hash] :quota The value of attribute `quota`.
    # 
    # @option opts [RngDevice, Hash] :rng_device The value of attribute `rng_device`.
    # 
    # @option opts [SerialNumber, Hash] :serial_number The value of attribute `serial_number`.
    # 
    # @option opts [Icon, Hash] :small_icon The value of attribute `small_icon`.
    # 
    # @option opts [Boolean] :soundcard_enabled The value of attribute `soundcard_enabled`.
    # 
    # @option opts [Sso, Hash] :sso The value of attribute `sso`.
    # 
    # @option opts [Boolean] :start_paused The value of attribute `start_paused`.
    # 
    # @option opts [Boolean] :stateless The value of attribute `stateless`.
    # 
    # @option opts [TemplateStatus] :status The value of attribute `status`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [VmStorageErrorResumeBehaviour] :storage_error_resume_behaviour The value of attribute `storage_error_resume_behaviour`.
    # 
    # @option opts [Array<Tag>, Array<Hash>] :tags The values of attribute `tags`.
    # 
    # @option opts [TimeZone, Hash] :time_zone The value of attribute `time_zone`.
    # 
    # @option opts [Boolean] :tpm_enabled The value of attribute `tpm_enabled`.
    # 
    # @option opts [Boolean] :tunnel_migration The value of attribute `tunnel_migration`.
    # 
    # @option opts [VmType] :type The value of attribute `type`.
    # 
    # @option opts [Usb, Hash] :usb The value of attribute `usb`.
    # 
    # @option opts [TemplateVersion, Hash] :version The value of attribute `version`.
    # 
    # @option opts [VirtioScsi, Hash] :virtio_scsi The value of attribute `virtio_scsi`.
    # 
    # @option opts [Integer] :virtio_scsi_multi_queues The value of attribute `virtio_scsi_multi_queues`.
    # 
    # @option opts [Boolean] :virtio_scsi_multi_queues_enabled The value of attribute `virtio_scsi_multi_queues_enabled`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [Array<Watchdog>, Array<Hash>] :watchdogs The values of attribute `watchdogs`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
    end
    
  end
  
  class OpenStackImageProvider < OpenStackProvider
    
    # 
    # Returns the value of the `authentication_url` attribute.
    # 
    # @return [String]
    # 
    def authentication_url
      @authentication_url
    end
    
    # 
    # Sets the value of the `authentication_url` attribute.
    # 
    # @param value [String]
    # 
    def authentication_url=(value)
      @authentication_url = value
    end
    
    # 
    # Returns the value of the `certificates` attribute.
    # 
    # @return [Array<Certificate>]
    # 
    def certificates
      @certificates
    end
    
    # 
    # Sets the value of the `certificates` attribute.
    # 
    # @param list [Array<Certificate>]
    # 
    def certificates=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Certificate.new(value)
          end
        end
      end
      @certificates = list
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `images` attribute.
    # 
    # @return [Array<OpenStackImage>]
    # 
    def images
      @images
    end
    
    # 
    # Sets the value of the `images` attribute.
    # 
    # @param list [Array<OpenStackImage>]
    # 
    def images=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = OpenStackImage.new(value)
          end
        end
      end
      @images = list
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `properties` attribute.
    # 
    # @return [Array<Property>]
    # 
    def properties
      @properties
    end
    
    # 
    # Sets the value of the `properties` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @properties = list
    end
    
    # 
    # Returns the value of the `requires_authentication` attribute.
    # 
    # @return [Boolean]
    # 
    def requires_authentication
      @requires_authentication
    end
    
    # 
    # Sets the value of the `requires_authentication` attribute.
    # 
    # @param value [Boolean]
    # 
    def requires_authentication=(value)
      @requires_authentication = value
    end
    
    # 
    # Returns the value of the `tenant_name` attribute.
    # 
    # @return [String]
    # 
    def tenant_name
      @tenant_name
    end
    
    # 
    # Sets the value of the `tenant_name` attribute.
    # 
    # @param value [String]
    # 
    def tenant_name=(value)
      @tenant_name = value
    end
    
    # 
    # Returns the value of the `url` attribute.
    # 
    # @return [String]
    # 
    def url
      @url
    end
    
    # 
    # Sets the value of the `url` attribute.
    # 
    # @param value [String]
    # 
    def url=(value)
      @url = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Creates a new instance of the {OpenStackImageProvider} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [String] :authentication_url The value of attribute `authentication_url`.
    # 
    # @option opts [Array<Certificate>, Array<Hash>] :certificates The values of attribute `certificates`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Array<OpenStackImage>, Array<Hash>] :images The values of attribute `images`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :properties The values of attribute `properties`.
    # 
    # @option opts [Boolean] :requires_authentication The value of attribute `requires_authentication`.
    # 
    # @option opts [String] :tenant_name The value of attribute `tenant_name`.
    # 
    # @option opts [String] :url The value of attribute `url`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.certificates = opts[:certificates]
      self.images = opts[:images]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @certificates == other.certificates &&
      @images == other.images
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @certificates.hash +
      @images.hash
    end
    
  end
  
  class OpenStackNetworkProvider < OpenStackProvider
    
    # 
    # Returns the value of the `agent_configuration` attribute.
    # 
    # @return [AgentConfiguration]
    # 
    def agent_configuration
      @agent_configuration
    end
    
    # 
    # Sets the value of the `agent_configuration` attribute.
    # 
    # @param value [AgentConfiguration, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::AgentConfiguration} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def agent_configuration=(value)
      if value.is_a?(Hash)
        value = AgentConfiguration.new(value)
      end
      @agent_configuration = value
    end
    
    # 
    # Returns the value of the `authentication_url` attribute.
    # 
    # @return [String]
    # 
    def authentication_url
      @authentication_url
    end
    
    # 
    # Sets the value of the `authentication_url` attribute.
    # 
    # @param value [String]
    # 
    def authentication_url=(value)
      @authentication_url = value
    end
    
    # 
    # Returns the value of the `auto_sync` attribute.
    # 
    # @return [Boolean]
    # 
    def auto_sync
      @auto_sync
    end
    
    # 
    # Sets the value of the `auto_sync` attribute.
    # 
    # @param value [Boolean]
    # 
    def auto_sync=(value)
      @auto_sync = value
    end
    
    # 
    # Returns the value of the `certificates` attribute.
    # 
    # @return [Array<Certificate>]
    # 
    def certificates
      @certificates
    end
    
    # 
    # Sets the value of the `certificates` attribute.
    # 
    # @param list [Array<Certificate>]
    # 
    def certificates=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Certificate.new(value)
          end
        end
      end
      @certificates = list
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `external_plugin_type` attribute.
    # 
    # @return [String]
    # 
    def external_plugin_type
      @external_plugin_type
    end
    
    # 
    # Sets the value of the `external_plugin_type` attribute.
    # 
    # @param value [String]
    # 
    def external_plugin_type=(value)
      @external_plugin_type = value
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `networks` attribute.
    # 
    # @return [Array<OpenStackNetwork>]
    # 
    def networks
      @networks
    end
    
    # 
    # Sets the value of the `networks` attribute.
    # 
    # @param list [Array<OpenStackNetwork>]
    # 
    def networks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = OpenStackNetwork.new(value)
          end
        end
      end
      @networks = list
    end
    
    # 
    # Returns the value of the `password` attribute.
    # 
    # @return [String]
    # 
    def password
      @password
    end
    
    # 
    # Sets the value of the `password` attribute.
    # 
    # @param value [String]
    # 
    def password=(value)
      @password = value
    end
    
    # 
    # Returns the value of the `plugin_type` attribute.
    # 
    # @return [NetworkPluginType]
    # 
    def plugin_type
      @plugin_type
    end
    
    # 
    # Sets the value of the `plugin_type` attribute.
    # 
    # @param value [NetworkPluginType]
    # 
    def plugin_type=(value)
      @plugin_type = value
    end
    
    # 
    # Returns the value of the `project_domain_name` attribute.
    # 
    # @return [String]
    # 
    def project_domain_name
      @project_domain_name
    end
    
    # 
    # Sets the value of the `project_domain_name` attribute.
    # 
    # @param value [String]
    # 
    def project_domain_name=(value)
      @project_domain_name = value
    end
    
    # 
    # Returns the value of the `project_name` attribute.
    # 
    # @return [String]
    # 
    def project_name
      @project_name
    end
    
    # 
    # Sets the value of the `project_name` attribute.
    # 
    # @param value [String]
    # 
    def project_name=(value)
      @project_name = value
    end
    
    # 
    # Returns the value of the `properties` attribute.
    # 
    # @return [Array<Property>]
    # 
    def properties
      @properties
    end
    
    # 
    # Sets the value of the `properties` attribute.
    # 
    # @param list [Array<Property>]
    # 
    def properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Property.new(value)
          end
        end
      end
      @properties = list
    end
    
    # 
    # Returns the value of the `read_only` attribute.
    # 
    # @return [Boolean]
    # 
    def read_only
      @read_only
    end
    
    # 
    # Sets the value of the `read_only` attribute.
    # 
    # @param value [Boolean]
    # 
    def read_only=(value)
      @read_only = value
    end
    
    # 
    # Returns the value of the `requires_authentication` attribute.
    # 
    # @return [Boolean]
    # 
    def requires_authentication
      @requires_authentication
    end
    
    # 
    # Sets the value of the `requires_authentication` attribute.
    # 
    # @param value [Boolean]
    # 
    def requires_authentication=(value)
      @requires_authentication = value
    end
    
    # 
    # Returns the value of the `subnets` attribute.
    # 
    # @return [Array<OpenStackSubnet>]
    # 
    def subnets
      @subnets
    end
    
    # 
    # Sets the value of the `subnets` attribute.
    # 
    # @param list [Array<OpenStackSubnet>]
    # 
    def subnets=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = OpenStackSubnet.new(value)
          end
        end
      end
      @subnets = list
    end
    
    # 
    # Returns the value of the `tenant_name` attribute.
    # 
    # @return [String]
    # 
    def tenant_name
      @tenant_name
    end
    
    # 
    # Sets the value of the `tenant_name` attribute.
    # 
    # @param value [String]
    # 
    def tenant_name=(value)
      @tenant_name = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [OpenStackNetworkProviderType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [OpenStackNetworkProviderType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `unmanaged` attribute.
    # 
    # @return [Boolean]
    # 
    def unmanaged
      @unmanaged
    end
    
    # 
    # Sets the value of the `unmanaged` attribute.
    # 
    # @param value [Boolean]
    # 
    def unmanaged=(value)
      @unmanaged = value
    end
    
    # 
    # Returns the value of the `url` attribute.
    # 
    # @return [String]
    # 
    def url
      @url
    end
    
    # 
    # Sets the value of the `url` attribute.
    # 
    # @param value [String]
    # 
    def url=(value)
      @url = value
    end
    
    # 
    # Returns the value of the `user_domain_name` attribute.
    # 
    # @return [String]
    # 
    def user_domain_name
      @user_domain_name
    end
    
    # 
    # Sets the value of the `user_domain_name` attribute.
    # 
    # @param value [String]
    # 
    def user_domain_name=(value)
      @user_domain_name = value
    end
    
    # 
    # Returns the value of the `username` attribute.
    # 
    # @return [String]
    # 
    def username
      @username
    end
    
    # 
    # Sets the value of the `username` attribute.
    # 
    # @param value [String]
    # 
    def username=(value)
      @username = value
    end
    
    # 
    # Creates a new instance of the {OpenStackNetworkProvider} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [AgentConfiguration, Hash] :agent_configuration The value of attribute `agent_configuration`.
    # 
    # @option opts [String] :authentication_url The value of attribute `authentication_url`.
    # 
    # @option opts [Boolean] :auto_sync The value of attribute `auto_sync`.
    # 
    # @option opts [Array<Certificate>, Array<Hash>] :certificates The values of attribute `certificates`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [String] :external_plugin_type The value of attribute `external_plugin_type`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Array<OpenStackNetwork>, Array<Hash>] :networks The values of attribute `networks`.
    # 
    # @option opts [String] :password The value of attribute `password`.
    # 
    # @option opts [NetworkPluginType] :plugin_type The value of attribute `plugin_type`.
    # 
    # @option opts [String] :project_domain_name The value of attribute `project_domain_name`.
    # 
    # @option opts [String] :project_name The value of attribute `project_name`.
    # 
    # @option opts [Array<Property>, Array<Hash>] :properties The values of attribute `properties`.
    # 
    # @option opts [Boolean] :read_only The value of attribute `read_only`.
    # 
    # @option opts [Boolean] :requires_authentication The value of attribute `requires_authentication`.
    # 
    # @option opts [Array<OpenStackSubnet>, Array<Hash>] :subnets The values of attribute `subnets`.
    # 
    # @option opts [String] :tenant_name The value of attribute `tenant_name`.
    # 
    # @option opts [OpenStackNetworkProviderType] :type The value of attribute `type`.
    # 
    # @option opts [Boolean] :unmanaged The value of attribute `unmanaged`.
    # 
    # @option opts [String] :url The value of attribute `url`.
    # 
    # @option opts [String] :user_domain_name The value of attribute `user_domain_name`.
    # 
    # @option opts [String] :username The value of attribute `username`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.agent_configuration = opts[:agent_configuration]
      self.auto_sync = opts[:auto_sync]
      self.certificates = opts[:certificates]
      self.external_plugin_type = opts[:external_plugin_type]
      self.networks = opts[:networks]
      self.plugin_type = opts[:plugin_type]
      self.project_domain_name = opts[:project_domain_name]
      self.project_name = opts[:project_name]
      self.read_only = opts[:read_only]
      self.subnets = opts[:subnets]
      self.type = opts[:type]
      self.unmanaged = opts[:unmanaged]
      self.user_domain_name = opts[:user_domain_name]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @agent_configuration == other.agent_configuration &&
      @auto_sync == other.auto_sync &&
      @certificates == other.certificates &&
      @external_plugin_type == other.external_plugin_type &&
      @networks == other.networks &&
      @plugin_type == other.plugin_type &&
      @project_domain_name == other.project_domain_name &&
      @project_name == other.project_name &&
      @read_only == other.read_only &&
      @subnets == other.subnets &&
      @type == other.type &&
      @unmanaged == other.unmanaged &&
      @user_domain_name == other.user_domain_name
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @agent_configuration.hash +
      @auto_sync.hash +
      @certificates.hash +
      @external_plugin_type.hash +
      @networks.hash +
      @plugin_type.hash +
      @project_domain_name.hash +
      @project_name.hash +
      @read_only.hash +
      @subnets.hash +
      @type.hash +
      @unmanaged.hash +
      @user_domain_name.hash
    end
    
  end
  
  class Snapshot < Vm
    
    # 
    # Returns the value of the `affinity_labels` attribute.
    # 
    # @return [Array<AffinityLabel>]
    # 
    def affinity_labels
      @affinity_labels
    end
    
    # 
    # Sets the value of the `affinity_labels` attribute.
    # 
    # @param list [Array<AffinityLabel>]
    # 
    def affinity_labels=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = AffinityLabel.new(value)
          end
        end
      end
      @affinity_labels = list
    end
    
    # 
    # Returns the value of the `applications` attribute.
    # 
    # @return [Array<Application>]
    # 
    def applications
      @applications
    end
    
    # 
    # Sets the value of the `applications` attribute.
    # 
    # @param list [Array<Application>]
    # 
    def applications=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Application.new(value)
          end
        end
      end
      @applications = list
    end
    
    # 
    # Returns the value of the `auto_pinning_policy` attribute.
    # 
    # @return [AutoPinningPolicy]
    # 
    def auto_pinning_policy
      @auto_pinning_policy
    end
    
    # 
    # Sets the value of the `auto_pinning_policy` attribute.
    # 
    # @param value [AutoPinningPolicy]
    # 
    def auto_pinning_policy=(value)
      @auto_pinning_policy = value
    end
    
    # 
    # Returns the value of the `bios` attribute.
    # 
    # @return [Bios]
    # 
    def bios
      @bios
    end
    
    # 
    # Sets the value of the `bios` attribute.
    # 
    # @param value [Bios, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Bios} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def bios=(value)
      if value.is_a?(Hash)
        value = Bios.new(value)
      end
      @bios = value
    end
    
    # 
    # Returns the value of the `cdroms` attribute.
    # 
    # @return [Array<Cdrom>]
    # 
    def cdroms
      @cdroms
    end
    
    # 
    # Sets the value of the `cdroms` attribute.
    # 
    # @param list [Array<Cdrom>]
    # 
    def cdroms=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Cdrom.new(value)
          end
        end
      end
      @cdroms = list
    end
    
    # 
    # Returns the value of the `cluster` attribute.
    # 
    # @return [Cluster]
    # 
    def cluster
      @cluster
    end
    
    # 
    # Sets the value of the `cluster` attribute.
    # 
    # @param value [Cluster, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cluster} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cluster=(value)
      if value.is_a?(Hash)
        value = Cluster.new(value)
      end
      @cluster = value
    end
    
    # 
    # Returns the value of the `comment` attribute.
    # 
    # @return [String]
    # 
    def comment
      @comment
    end
    
    # 
    # Sets the value of the `comment` attribute.
    # 
    # @param value [String]
    # 
    def comment=(value)
      @comment = value
    end
    
    # 
    # Returns the value of the `console` attribute.
    # 
    # @return [Console]
    # 
    def console
      @console
    end
    
    # 
    # Sets the value of the `console` attribute.
    # 
    # @param value [Console, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Console} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def console=(value)
      if value.is_a?(Hash)
        value = Console.new(value)
      end
      @console = value
    end
    
    # 
    # Returns the value of the `cpu` attribute.
    # 
    # @return [Cpu]
    # 
    def cpu
      @cpu
    end
    
    # 
    # Sets the value of the `cpu` attribute.
    # 
    # @param value [Cpu, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Cpu} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu=(value)
      if value.is_a?(Hash)
        value = Cpu.new(value)
      end
      @cpu = value
    end
    
    # 
    # Returns the value of the `cpu_pinning_policy` attribute.
    # 
    # @return [CpuPinningPolicy]
    # 
    def cpu_pinning_policy
      @cpu_pinning_policy
    end
    
    # 
    # Sets the value of the `cpu_pinning_policy` attribute.
    # 
    # @param value [CpuPinningPolicy]
    # 
    def cpu_pinning_policy=(value)
      @cpu_pinning_policy = value
    end
    
    # 
    # Returns the value of the `cpu_profile` attribute.
    # 
    # @return [CpuProfile]
    # 
    def cpu_profile
      @cpu_profile
    end
    
    # 
    # Sets the value of the `cpu_profile` attribute.
    # 
    # @param value [CpuProfile, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::CpuProfile} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def cpu_profile=(value)
      if value.is_a?(Hash)
        value = CpuProfile.new(value)
      end
      @cpu_profile = value
    end
    
    # 
    # Returns the value of the `cpu_shares` attribute.
    # 
    # @return [Integer]
    # 
    def cpu_shares
      @cpu_shares
    end
    
    # 
    # Sets the value of the `cpu_shares` attribute.
    # 
    # @param value [Integer]
    # 
    def cpu_shares=(value)
      @cpu_shares = value
    end
    
    # 
    # Returns the value of the `creation_time` attribute.
    # 
    # @return [DateTime]
    # 
    def creation_time
      @creation_time
    end
    
    # 
    # Sets the value of the `creation_time` attribute.
    # 
    # @param value [DateTime]
    # 
    def creation_time=(value)
      @creation_time = value
    end
    
    # 
    # Returns the value of the `custom_compatibility_version` attribute.
    # 
    # @return [Version]
    # 
    def custom_compatibility_version
      @custom_compatibility_version
    end
    
    # 
    # Sets the value of the `custom_compatibility_version` attribute.
    # 
    # @param value [Version, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Version} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def custom_compatibility_version=(value)
      if value.is_a?(Hash)
        value = Version.new(value)
      end
      @custom_compatibility_version = value
    end
    
    # 
    # Returns the value of the `custom_cpu_model` attribute.
    # 
    # @return [String]
    # 
    def custom_cpu_model
      @custom_cpu_model
    end
    
    # 
    # Sets the value of the `custom_cpu_model` attribute.
    # 
    # @param value [String]
    # 
    def custom_cpu_model=(value)
      @custom_cpu_model = value
    end
    
    # 
    # Returns the value of the `custom_emulated_machine` attribute.
    # 
    # @return [String]
    # 
    def custom_emulated_machine
      @custom_emulated_machine
    end
    
    # 
    # Sets the value of the `custom_emulated_machine` attribute.
    # 
    # @param value [String]
    # 
    def custom_emulated_machine=(value)
      @custom_emulated_machine = value
    end
    
    # 
    # Returns the value of the `custom_properties` attribute.
    # 
    # @return [Array<CustomProperty>]
    # 
    def custom_properties
      @custom_properties
    end
    
    # 
    # Sets the value of the `custom_properties` attribute.
    # 
    # @param list [Array<CustomProperty>]
    # 
    def custom_properties=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = CustomProperty.new(value)
          end
        end
      end
      @custom_properties = list
    end
    
    # 
    # Returns the value of the `date` attribute.
    # 
    # @return [DateTime]
    # 
    def date
      @date
    end
    
    # 
    # Sets the value of the `date` attribute.
    # 
    # @param value [DateTime]
    # 
    def date=(value)
      @date = value
    end
    
    # 
    # Returns the value of the `delete_protected` attribute.
    # 
    # @return [Boolean]
    # 
    def delete_protected
      @delete_protected
    end
    
    # 
    # Sets the value of the `delete_protected` attribute.
    # 
    # @param value [Boolean]
    # 
    def delete_protected=(value)
      @delete_protected = value
    end
    
    # 
    # Returns the value of the `description` attribute.
    # 
    # @return [String]
    # 
    def description
      @description
    end
    
    # 
    # Sets the value of the `description` attribute.
    # 
    # @param value [String]
    # 
    def description=(value)
      @description = value
    end
    
    # 
    # Returns the value of the `disk_attachments` attribute.
    # 
    # @return [Array<DiskAttachment>]
    # 
    def disk_attachments
      @disk_attachments
    end
    
    # 
    # Sets the value of the `disk_attachments` attribute.
    # 
    # @param list [Array<DiskAttachment>]
    # 
    def disk_attachments=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = DiskAttachment.new(value)
          end
        end
      end
      @disk_attachments = list
    end
    
    # 
    # Returns the value of the `disks` attribute.
    # 
    # @return [Array<Disk>]
    # 
    def disks
      @disks
    end
    
    # 
    # Sets the value of the `disks` attribute.
    # 
    # @param list [Array<Disk>]
    # 
    def disks=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Disk.new(value)
          end
        end
      end
      @disks = list
    end
    
    # 
    # Returns the value of the `display` attribute.
    # 
    # @return [Display]
    # 
    def display
      @display
    end
    
    # 
    # Sets the value of the `display` attribute.
    # 
    # @param value [Display, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Display} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def display=(value)
      if value.is_a?(Hash)
        value = Display.new(value)
      end
      @display = value
    end
    
    # 
    # Returns the value of the `domain` attribute.
    # 
    # @return [Domain]
    # 
    def domain
      @domain
    end
    
    # 
    # Sets the value of the `domain` attribute.
    # 
    # @param value [Domain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Domain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def domain=(value)
      if value.is_a?(Hash)
        value = Domain.new(value)
      end
      @domain = value
    end
    
    # 
    # Returns the value of the `dynamic_cpu` attribute.
    # 
    # @return [DynamicCpu]
    # 
    def dynamic_cpu
      @dynamic_cpu
    end
    
    # 
    # Sets the value of the `dynamic_cpu` attribute.
    # 
    # @param value [DynamicCpu, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::DynamicCpu} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def dynamic_cpu=(value)
      if value.is_a?(Hash)
        value = DynamicCpu.new(value)
      end
      @dynamic_cpu = value
    end
    
    # 
    # Returns the value of the `external_host_provider` attribute.
    # 
    # @return [ExternalHostProvider]
    # 
    def external_host_provider
      @external_host_provider
    end
    
    # 
    # Sets the value of the `external_host_provider` attribute.
    # 
    # @param value [ExternalHostProvider, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::ExternalHostProvider} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def external_host_provider=(value)
      if value.is_a?(Hash)
        value = ExternalHostProvider.new(value)
      end
      @external_host_provider = value
    end
    
    # 
    # Returns the value of the `floppies` attribute.
    # 
    # @return [Array<Floppy>]
    # 
    def floppies
      @floppies
    end
    
    # 
    # Sets the value of the `floppies` attribute.
    # 
    # @param list [Array<Floppy>]
    # 
    def floppies=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Floppy.new(value)
          end
        end
      end
      @floppies = list
    end
    
    # 
    # Returns the value of the `fqdn` attribute.
    # 
    # @return [String]
    # 
    def fqdn
      @fqdn
    end
    
    # 
    # Sets the value of the `fqdn` attribute.
    # 
    # @param value [String]
    # 
    def fqdn=(value)
      @fqdn = value
    end
    
    # 
    # Returns the value of the `graphics_consoles` attribute.
    # 
    # @return [Array<GraphicsConsole>]
    # 
    def graphics_consoles
      @graphics_consoles
    end
    
    # 
    # Sets the value of the `graphics_consoles` attribute.
    # 
    # @param list [Array<GraphicsConsole>]
    # 
    def graphics_consoles=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = GraphicsConsole.new(value)
          end
        end
      end
      @graphics_consoles = list
    end
    
    # 
    # Returns the value of the `guest_operating_system` attribute.
    # 
    # @return [GuestOperatingSystem]
    # 
    def guest_operating_system
      @guest_operating_system
    end
    
    # 
    # Sets the value of the `guest_operating_system` attribute.
    # 
    # @param value [GuestOperatingSystem, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::GuestOperatingSystem} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def guest_operating_system=(value)
      if value.is_a?(Hash)
        value = GuestOperatingSystem.new(value)
      end
      @guest_operating_system = value
    end
    
    # 
    # Returns the value of the `guest_time_zone` attribute.
    # 
    # @return [TimeZone]
    # 
    def guest_time_zone
      @guest_time_zone
    end
    
    # 
    # Sets the value of the `guest_time_zone` attribute.
    # 
    # @param value [TimeZone, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::TimeZone} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def guest_time_zone=(value)
      if value.is_a?(Hash)
        value = TimeZone.new(value)
      end
      @guest_time_zone = value
    end
    
    # 
    # Returns the value of the `has_illegal_images` attribute.
    # 
    # @return [Boolean]
    # 
    def has_illegal_images
      @has_illegal_images
    end
    
    # 
    # Sets the value of the `has_illegal_images` attribute.
    # 
    # @param value [Boolean]
    # 
    def has_illegal_images=(value)
      @has_illegal_images = value
    end
    
    # 
    # Returns the value of the `high_availability` attribute.
    # 
    # @return [HighAvailability]
    # 
    def high_availability
      @high_availability
    end
    
    # 
    # Sets the value of the `high_availability` attribute.
    # 
    # @param value [HighAvailability, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::HighAvailability} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def high_availability=(value)
      if value.is_a?(Hash)
        value = HighAvailability.new(value)
      end
      @high_availability = value
    end
    
    # 
    # Returns the value of the `host` attribute.
    # 
    # @return [Host]
    # 
    def host
      @host
    end
    
    # 
    # Sets the value of the `host` attribute.
    # 
    # @param value [Host, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Host} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def host=(value)
      if value.is_a?(Hash)
        value = Host.new(value)
      end
      @host = value
    end
    
    # 
    # Returns the value of the `host_devices` attribute.
    # 
    # @return [Array<HostDevice>]
    # 
    def host_devices
      @host_devices
    end
    
    # 
    # Sets the value of the `host_devices` attribute.
    # 
    # @param list [Array<HostDevice>]
    # 
    def host_devices=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = HostDevice.new(value)
          end
        end
      end
      @host_devices = list
    end
    
    # 
    # Returns the value of the `id` attribute.
    # 
    # @return [String]
    # 
    def id
      @id
    end
    
    # 
    # Sets the value of the `id` attribute.
    # 
    # @param value [String]
    # 
    def id=(value)
      @id = value
    end
    
    # 
    # Returns the value of the `initialization` attribute.
    # 
    # @return [Initialization]
    # 
    def initialization
      @initialization
    end
    
    # 
    # Sets the value of the `initialization` attribute.
    # 
    # @param value [Initialization, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Initialization} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def initialization=(value)
      if value.is_a?(Hash)
        value = Initialization.new(value)
      end
      @initialization = value
    end
    
    # 
    # Returns the value of the `instance_type` attribute.
    # 
    # @return [InstanceType]
    # 
    def instance_type
      @instance_type
    end
    
    # 
    # Sets the value of the `instance_type` attribute.
    # 
    # @param value [InstanceType, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::InstanceType} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def instance_type=(value)
      if value.is_a?(Hash)
        value = InstanceType.new(value)
      end
      @instance_type = value
    end
    
    # 
    # Returns the value of the `io` attribute.
    # 
    # @return [Io]
    # 
    def io
      @io
    end
    
    # 
    # Sets the value of the `io` attribute.
    # 
    # @param value [Io, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Io} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def io=(value)
      if value.is_a?(Hash)
        value = Io.new(value)
      end
      @io = value
    end
    
    # 
    # Returns the value of the `katello_errata` attribute.
    # 
    # @return [Array<KatelloErratum>]
    # 
    def katello_errata
      @katello_errata
    end
    
    # 
    # Sets the value of the `katello_errata` attribute.
    # 
    # @param list [Array<KatelloErratum>]
    # 
    def katello_errata=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = KatelloErratum.new(value)
          end
        end
      end
      @katello_errata = list
    end
    
    # 
    # Returns the value of the `large_icon` attribute.
    # 
    # @return [Icon]
    # 
    def large_icon
      @large_icon
    end
    
    # 
    # Sets the value of the `large_icon` attribute.
    # 
    # @param value [Icon, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Icon} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def large_icon=(value)
      if value.is_a?(Hash)
        value = Icon.new(value)
      end
      @large_icon = value
    end
    
    # 
    # Returns the value of the `lease` attribute.
    # 
    # @return [StorageDomainLease]
    # 
    def lease
      @lease
    end
    
    # 
    # Sets the value of the `lease` attribute.
    # 
    # @param value [StorageDomainLease, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomainLease} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def lease=(value)
      if value.is_a?(Hash)
        value = StorageDomainLease.new(value)
      end
      @lease = value
    end
    
    # 
    # Returns the value of the `mediated_devices` attribute.
    # 
    # @return [Array<VmMediatedDevice>]
    # 
    def mediated_devices
      @mediated_devices
    end
    
    # 
    # Sets the value of the `mediated_devices` attribute.
    # 
    # @param list [Array<VmMediatedDevice>]
    # 
    def mediated_devices=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = VmMediatedDevice.new(value)
          end
        end
      end
      @mediated_devices = list
    end
    
    # 
    # Returns the value of the `memory` attribute.
    # 
    # @return [Integer]
    # 
    def memory
      @memory
    end
    
    # 
    # Sets the value of the `memory` attribute.
    # 
    # @param value [Integer]
    # 
    def memory=(value)
      @memory = value
    end
    
    # 
    # Returns the value of the `memory_policy` attribute.
    # 
    # @return [MemoryPolicy]
    # 
    def memory_policy
      @memory_policy
    end
    
    # 
    # Sets the value of the `memory_policy` attribute.
    # 
    # @param value [MemoryPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MemoryPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def memory_policy=(value)
      if value.is_a?(Hash)
        value = MemoryPolicy.new(value)
      end
      @memory_policy = value
    end
    
    # 
    # Returns the value of the `migration` attribute.
    # 
    # @return [MigrationOptions]
    # 
    def migration
      @migration
    end
    
    # 
    # Sets the value of the `migration` attribute.
    # 
    # @param value [MigrationOptions, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::MigrationOptions} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def migration=(value)
      if value.is_a?(Hash)
        value = MigrationOptions.new(value)
      end
      @migration = value
    end
    
    # 
    # Returns the value of the `migration_downtime` attribute.
    # 
    # @return [Integer]
    # 
    def migration_downtime
      @migration_downtime
    end
    
    # 
    # Sets the value of the `migration_downtime` attribute.
    # 
    # @param value [Integer]
    # 
    def migration_downtime=(value)
      @migration_downtime = value
    end
    
    # 
    # Returns the value of the `multi_queues_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def multi_queues_enabled
      @multi_queues_enabled
    end
    
    # 
    # Sets the value of the `multi_queues_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def multi_queues_enabled=(value)
      @multi_queues_enabled = value
    end
    
    # 
    # Returns the value of the `name` attribute.
    # 
    # @return [String]
    # 
    def name
      @name
    end
    
    # 
    # Sets the value of the `name` attribute.
    # 
    # @param value [String]
    # 
    def name=(value)
      @name = value
    end
    
    # 
    # Returns the value of the `next_run_configuration_exists` attribute.
    # 
    # @return [Boolean]
    # 
    def next_run_configuration_exists
      @next_run_configuration_exists
    end
    
    # 
    # Sets the value of the `next_run_configuration_exists` attribute.
    # 
    # @param value [Boolean]
    # 
    def next_run_configuration_exists=(value)
      @next_run_configuration_exists = value
    end
    
    # 
    # Returns the value of the `nics` attribute.
    # 
    # @return [Array<Nic>]
    # 
    def nics
      @nics
    end
    
    # 
    # Sets the value of the `nics` attribute.
    # 
    # @param list [Array<Nic>]
    # 
    def nics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Nic.new(value)
          end
        end
      end
      @nics = list
    end
    
    # 
    # Returns the value of the `numa_nodes` attribute.
    # 
    # @return [Array<NumaNode>]
    # 
    def numa_nodes
      @numa_nodes
    end
    
    # 
    # Sets the value of the `numa_nodes` attribute.
    # 
    # @param list [Array<NumaNode>]
    # 
    def numa_nodes=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = NumaNode.new(value)
          end
        end
      end
      @numa_nodes = list
    end
    
    # 
    # Returns the value of the `numa_tune_mode` attribute.
    # 
    # @return [NumaTuneMode]
    # 
    def numa_tune_mode
      @numa_tune_mode
    end
    
    # 
    # Sets the value of the `numa_tune_mode` attribute.
    # 
    # @param value [NumaTuneMode]
    # 
    def numa_tune_mode=(value)
      @numa_tune_mode = value
    end
    
    # 
    # Returns the value of the `origin` attribute.
    # 
    # @return [String]
    # 
    def origin
      @origin
    end
    
    # 
    # Sets the value of the `origin` attribute.
    # 
    # @param value [String]
    # 
    def origin=(value)
      @origin = value
    end
    
    # 
    # Returns the value of the `original_template` attribute.
    # 
    # @return [Template]
    # 
    def original_template
      @original_template
    end
    
    # 
    # Sets the value of the `original_template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def original_template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @original_template = value
    end
    
    # 
    # Returns the value of the `os` attribute.
    # 
    # @return [OperatingSystem]
    # 
    def os
      @os
    end
    
    # 
    # Sets the value of the `os` attribute.
    # 
    # @param value [OperatingSystem, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::OperatingSystem} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def os=(value)
      if value.is_a?(Hash)
        value = OperatingSystem.new(value)
      end
      @os = value
    end
    
    # 
    # Returns the value of the `payloads` attribute.
    # 
    # @return [Array<Payload>]
    # 
    def payloads
      @payloads
    end
    
    # 
    # Sets the value of the `payloads` attribute.
    # 
    # @param list [Array<Payload>]
    # 
    def payloads=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Payload.new(value)
          end
        end
      end
      @payloads = list
    end
    
    # 
    # Returns the value of the `permissions` attribute.
    # 
    # @return [Array<Permission>]
    # 
    def permissions
      @permissions
    end
    
    # 
    # Sets the value of the `permissions` attribute.
    # 
    # @param list [Array<Permission>]
    # 
    def permissions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Permission.new(value)
          end
        end
      end
      @permissions = list
    end
    
    # 
    # Returns the value of the `persist_memorystate` attribute.
    # 
    # @return [Boolean]
    # 
    def persist_memorystate
      @persist_memorystate
    end
    
    # 
    # Sets the value of the `persist_memorystate` attribute.
    # 
    # @param value [Boolean]
    # 
    def persist_memorystate=(value)
      @persist_memorystate = value
    end
    
    # 
    # Returns the value of the `placement_policy` attribute.
    # 
    # @return [VmPlacementPolicy]
    # 
    def placement_policy
      @placement_policy
    end
    
    # 
    # Sets the value of the `placement_policy` attribute.
    # 
    # @param value [VmPlacementPolicy, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VmPlacementPolicy} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def placement_policy=(value)
      if value.is_a?(Hash)
        value = VmPlacementPolicy.new(value)
      end
      @placement_policy = value
    end
    
    # 
    # Returns the value of the `quota` attribute.
    # 
    # @return [Quota]
    # 
    def quota
      @quota
    end
    
    # 
    # Sets the value of the `quota` attribute.
    # 
    # @param value [Quota, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Quota} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def quota=(value)
      if value.is_a?(Hash)
        value = Quota.new(value)
      end
      @quota = value
    end
    
    # 
    # Returns the value of the `reported_devices` attribute.
    # 
    # @return [Array<ReportedDevice>]
    # 
    def reported_devices
      @reported_devices
    end
    
    # 
    # Sets the value of the `reported_devices` attribute.
    # 
    # @param list [Array<ReportedDevice>]
    # 
    def reported_devices=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = ReportedDevice.new(value)
          end
        end
      end
      @reported_devices = list
    end
    
    # 
    # Returns the value of the `rng_device` attribute.
    # 
    # @return [RngDevice]
    # 
    def rng_device
      @rng_device
    end
    
    # 
    # Sets the value of the `rng_device` attribute.
    # 
    # @param value [RngDevice, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::RngDevice} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def rng_device=(value)
      if value.is_a?(Hash)
        value = RngDevice.new(value)
      end
      @rng_device = value
    end
    
    # 
    # Returns the value of the `run_once` attribute.
    # 
    # @return [Boolean]
    # 
    def run_once
      @run_once
    end
    
    # 
    # Sets the value of the `run_once` attribute.
    # 
    # @param value [Boolean]
    # 
    def run_once=(value)
      @run_once = value
    end
    
    # 
    # Returns the value of the `serial_number` attribute.
    # 
    # @return [SerialNumber]
    # 
    def serial_number
      @serial_number
    end
    
    # 
    # Sets the value of the `serial_number` attribute.
    # 
    # @param value [SerialNumber, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::SerialNumber} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def serial_number=(value)
      if value.is_a?(Hash)
        value = SerialNumber.new(value)
      end
      @serial_number = value
    end
    
    # 
    # Returns the value of the `sessions` attribute.
    # 
    # @return [Array<Session>]
    # 
    def sessions
      @sessions
    end
    
    # 
    # Sets the value of the `sessions` attribute.
    # 
    # @param list [Array<Session>]
    # 
    def sessions=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Session.new(value)
          end
        end
      end
      @sessions = list
    end
    
    # 
    # Returns the value of the `small_icon` attribute.
    # 
    # @return [Icon]
    # 
    def small_icon
      @small_icon
    end
    
    # 
    # Sets the value of the `small_icon` attribute.
    # 
    # @param value [Icon, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Icon} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def small_icon=(value)
      if value.is_a?(Hash)
        value = Icon.new(value)
      end
      @small_icon = value
    end
    
    # 
    # Returns the value of the `snapshot_status` attribute.
    # 
    # @return [SnapshotStatus]
    # 
    def snapshot_status
      @snapshot_status
    end
    
    # 
    # Sets the value of the `snapshot_status` attribute.
    # 
    # @param value [SnapshotStatus]
    # 
    def snapshot_status=(value)
      @snapshot_status = value
    end
    
    # 
    # Returns the value of the `snapshot_type` attribute.
    # 
    # @return [SnapshotType]
    # 
    def snapshot_type
      @snapshot_type
    end
    
    # 
    # Sets the value of the `snapshot_type` attribute.
    # 
    # @param value [SnapshotType]
    # 
    def snapshot_type=(value)
      @snapshot_type = value
    end
    
    # 
    # Returns the value of the `snapshots` attribute.
    # 
    # @return [Array<Snapshot>]
    # 
    def snapshots
      @snapshots
    end
    
    # 
    # Sets the value of the `snapshots` attribute.
    # 
    # @param list [Array<Snapshot>]
    # 
    def snapshots=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Snapshot.new(value)
          end
        end
      end
      @snapshots = list
    end
    
    # 
    # Returns the value of the `soundcard_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def soundcard_enabled
      @soundcard_enabled
    end
    
    # 
    # Sets the value of the `soundcard_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def soundcard_enabled=(value)
      @soundcard_enabled = value
    end
    
    # 
    # Returns the value of the `sso` attribute.
    # 
    # @return [Sso]
    # 
    def sso
      @sso
    end
    
    # 
    # Sets the value of the `sso` attribute.
    # 
    # @param value [Sso, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Sso} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def sso=(value)
      if value.is_a?(Hash)
        value = Sso.new(value)
      end
      @sso = value
    end
    
    # 
    # Returns the value of the `start_paused` attribute.
    # 
    # @return [Boolean]
    # 
    def start_paused
      @start_paused
    end
    
    # 
    # Sets the value of the `start_paused` attribute.
    # 
    # @param value [Boolean]
    # 
    def start_paused=(value)
      @start_paused = value
    end
    
    # 
    # Returns the value of the `start_time` attribute.
    # 
    # @return [DateTime]
    # 
    def start_time
      @start_time
    end
    
    # 
    # Sets the value of the `start_time` attribute.
    # 
    # @param value [DateTime]
    # 
    def start_time=(value)
      @start_time = value
    end
    
    # 
    # Returns the value of the `stateless` attribute.
    # 
    # @return [Boolean]
    # 
    def stateless
      @stateless
    end
    
    # 
    # Sets the value of the `stateless` attribute.
    # 
    # @param value [Boolean]
    # 
    def stateless=(value)
      @stateless = value
    end
    
    # 
    # Returns the value of the `statistics` attribute.
    # 
    # @return [Array<Statistic>]
    # 
    def statistics
      @statistics
    end
    
    # 
    # Sets the value of the `statistics` attribute.
    # 
    # @param list [Array<Statistic>]
    # 
    def statistics=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Statistic.new(value)
          end
        end
      end
      @statistics = list
    end
    
    # 
    # Returns the value of the `status` attribute.
    # 
    # @return [VmStatus]
    # 
    def status
      @status
    end
    
    # 
    # Sets the value of the `status` attribute.
    # 
    # @param value [VmStatus]
    # 
    def status=(value)
      @status = value
    end
    
    # 
    # Returns the value of the `status_detail` attribute.
    # 
    # @return [String]
    # 
    def status_detail
      @status_detail
    end
    
    # 
    # Sets the value of the `status_detail` attribute.
    # 
    # @param value [String]
    # 
    def status_detail=(value)
      @status_detail = value
    end
    
    # 
    # Returns the value of the `stop_reason` attribute.
    # 
    # @return [String]
    # 
    def stop_reason
      @stop_reason
    end
    
    # 
    # Sets the value of the `stop_reason` attribute.
    # 
    # @param value [String]
    # 
    def stop_reason=(value)
      @stop_reason = value
    end
    
    # 
    # Returns the value of the `stop_time` attribute.
    # 
    # @return [DateTime]
    # 
    def stop_time
      @stop_time
    end
    
    # 
    # Sets the value of the `stop_time` attribute.
    # 
    # @param value [DateTime]
    # 
    def stop_time=(value)
      @stop_time = value
    end
    
    # 
    # Returns the value of the `storage_domain` attribute.
    # 
    # @return [StorageDomain]
    # 
    def storage_domain
      @storage_domain
    end
    
    # 
    # Sets the value of the `storage_domain` attribute.
    # 
    # @param value [StorageDomain, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::StorageDomain} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def storage_domain=(value)
      if value.is_a?(Hash)
        value = StorageDomain.new(value)
      end
      @storage_domain = value
    end
    
    # 
    # Returns the value of the `storage_error_resume_behaviour` attribute.
    # 
    # @return [VmStorageErrorResumeBehaviour]
    # 
    def storage_error_resume_behaviour
      @storage_error_resume_behaviour
    end
    
    # 
    # Sets the value of the `storage_error_resume_behaviour` attribute.
    # 
    # @param value [VmStorageErrorResumeBehaviour]
    # 
    def storage_error_resume_behaviour=(value)
      @storage_error_resume_behaviour = value
    end
    
    # 
    # Returns the value of the `tags` attribute.
    # 
    # @return [Array<Tag>]
    # 
    def tags
      @tags
    end
    
    # 
    # Sets the value of the `tags` attribute.
    # 
    # @param list [Array<Tag>]
    # 
    def tags=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Tag.new(value)
          end
        end
      end
      @tags = list
    end
    
    # 
    # Returns the value of the `template` attribute.
    # 
    # @return [Template]
    # 
    def template
      @template
    end
    
    # 
    # Sets the value of the `template` attribute.
    # 
    # @param value [Template, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Template} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def template=(value)
      if value.is_a?(Hash)
        value = Template.new(value)
      end
      @template = value
    end
    
    # 
    # Returns the value of the `time_zone` attribute.
    # 
    # @return [TimeZone]
    # 
    def time_zone
      @time_zone
    end
    
    # 
    # Sets the value of the `time_zone` attribute.
    # 
    # @param value [TimeZone, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::TimeZone} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def time_zone=(value)
      if value.is_a?(Hash)
        value = TimeZone.new(value)
      end
      @time_zone = value
    end
    
    # 
    # Returns the value of the `tpm_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def tpm_enabled
      @tpm_enabled
    end
    
    # 
    # Sets the value of the `tpm_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def tpm_enabled=(value)
      @tpm_enabled = value
    end
    
    # 
    # Returns the value of the `tunnel_migration` attribute.
    # 
    # @return [Boolean]
    # 
    def tunnel_migration
      @tunnel_migration
    end
    
    # 
    # Sets the value of the `tunnel_migration` attribute.
    # 
    # @param value [Boolean]
    # 
    def tunnel_migration=(value)
      @tunnel_migration = value
    end
    
    # 
    # Returns the value of the `type` attribute.
    # 
    # @return [VmType]
    # 
    def type
      @type
    end
    
    # 
    # Sets the value of the `type` attribute.
    # 
    # @param value [VmType]
    # 
    def type=(value)
      @type = value
    end
    
    # 
    # Returns the value of the `usb` attribute.
    # 
    # @return [Usb]
    # 
    def usb
      @usb
    end
    
    # 
    # Sets the value of the `usb` attribute.
    # 
    # @param value [Usb, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Usb} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def usb=(value)
      if value.is_a?(Hash)
        value = Usb.new(value)
      end
      @usb = value
    end
    
    # 
    # Returns the value of the `use_latest_template_version` attribute.
    # 
    # @return [Boolean]
    # 
    def use_latest_template_version
      @use_latest_template_version
    end
    
    # 
    # Sets the value of the `use_latest_template_version` attribute.
    # 
    # @param value [Boolean]
    # 
    def use_latest_template_version=(value)
      @use_latest_template_version = value
    end
    
    # 
    # Returns the value of the `virtio_scsi` attribute.
    # 
    # @return [VirtioScsi]
    # 
    def virtio_scsi
      @virtio_scsi
    end
    
    # 
    # Sets the value of the `virtio_scsi` attribute.
    # 
    # @param value [VirtioScsi, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VirtioScsi} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def virtio_scsi=(value)
      if value.is_a?(Hash)
        value = VirtioScsi.new(value)
      end
      @virtio_scsi = value
    end
    
    # 
    # Returns the value of the `virtio_scsi_multi_queues` attribute.
    # 
    # @return [Integer]
    # 
    def virtio_scsi_multi_queues
      @virtio_scsi_multi_queues
    end
    
    # 
    # Sets the value of the `virtio_scsi_multi_queues` attribute.
    # 
    # @param value [Integer]
    # 
    def virtio_scsi_multi_queues=(value)
      @virtio_scsi_multi_queues = value
    end
    
    # 
    # Returns the value of the `virtio_scsi_multi_queues_enabled` attribute.
    # 
    # @return [Boolean]
    # 
    def virtio_scsi_multi_queues_enabled
      @virtio_scsi_multi_queues_enabled
    end
    
    # 
    # Sets the value of the `virtio_scsi_multi_queues_enabled` attribute.
    # 
    # @param value [Boolean]
    # 
    def virtio_scsi_multi_queues_enabled=(value)
      @virtio_scsi_multi_queues_enabled = value
    end
    
    # 
    # Returns the value of the `vm` attribute.
    # 
    # @return [Vm]
    # 
    def vm
      @vm
    end
    
    # 
    # Sets the value of the `vm` attribute.
    # 
    # @param value [Vm, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::Vm} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm=(value)
      if value.is_a?(Hash)
        value = Vm.new(value)
      end
      @vm = value
    end
    
    # 
    # Returns the value of the `vm_pool` attribute.
    # 
    # @return [VmPool]
    # 
    def vm_pool
      @vm_pool
    end
    
    # 
    # Sets the value of the `vm_pool` attribute.
    # 
    # @param value [VmPool, Hash]
    # 
    # The `value` parameter can be an instance of {OvirtSDK4::VmPool} or a hash.
    # If it is a hash then a new instance will be created passing the hash as the 
    # `opts` parameter to the constructor.
    # 
    def vm_pool=(value)
      if value.is_a?(Hash)
        value = VmPool.new(value)
      end
      @vm_pool = value
    end
    
    # 
    # Returns the value of the `watchdogs` attribute.
    # 
    # @return [Array<Watchdog>]
    # 
    def watchdogs
      @watchdogs
    end
    
    # 
    # Sets the value of the `watchdogs` attribute.
    # 
    # @param list [Array<Watchdog>]
    # 
    def watchdogs=(list)
      if list.class == Array
        list = List.new(list)
        list.each_with_index do |value, index|
          if value.is_a?(Hash)
            list[index] = Watchdog.new(value)
          end
        end
      end
      @watchdogs = list
    end
    
    # 
    # Creates a new instance of the {Snapshot} class.
    # 
    # @param opts [Hash] A hash containing the attributes of the object. The keys of the hash
    #   should be symbols corresponding to the names of the attributes. The values of the hash
    #   should be the values of the attributes.
    # 
    # @option opts [Array<AffinityLabel>, Array<Hash>] :affinity_labels The values of attribute `affinity_labels`.
    # 
    # @option opts [Array<Application>, Array<Hash>] :applications The values of attribute `applications`.
    # 
    # @option opts [AutoPinningPolicy] :auto_pinning_policy The value of attribute `auto_pinning_policy`.
    # 
    # @option opts [Bios, Hash] :bios The value of attribute `bios`.
    # 
    # @option opts [Array<Cdrom>, Array<Hash>] :cdroms The values of attribute `cdroms`.
    # 
    # @option opts [Cluster, Hash] :cluster The value of attribute `cluster`.
    # 
    # @option opts [String] :comment The value of attribute `comment`.
    # 
    # @option opts [Console, Hash] :console The value of attribute `console`.
    # 
    # @option opts [Cpu, Hash] :cpu The value of attribute `cpu`.
    # 
    # @option opts [CpuPinningPolicy] :cpu_pinning_policy The value of attribute `cpu_pinning_policy`.
    # 
    # @option opts [CpuProfile, Hash] :cpu_profile The value of attribute `cpu_profile`.
    # 
    # @option opts [Integer] :cpu_shares The value of attribute `cpu_shares`.
    # 
    # @option opts [DateTime] :creation_time The value of attribute `creation_time`.
    # 
    # @option opts [Version, Hash] :custom_compatibility_version The value of attribute `custom_compatibility_version`.
    # 
    # @option opts [String] :custom_cpu_model The value of attribute `custom_cpu_model`.
    # 
    # @option opts [String] :custom_emulated_machine The value of attribute `custom_emulated_machine`.
    # 
    # @option opts [Array<CustomProperty>, Array<Hash>] :custom_properties The values of attribute `custom_properties`.
    # 
    # @option opts [DateTime] :date The value of attribute `date`.
    # 
    # @option opts [Boolean] :delete_protected The value of attribute `delete_protected`.
    # 
    # @option opts [String] :description The value of attribute `description`.
    # 
    # @option opts [Array<DiskAttachment>, Array<Hash>] :disk_attachments The values of attribute `disk_attachments`.
    # 
    # @option opts [Array<Disk>, Array<Hash>] :disks The values of attribute `disks`.
    # 
    # @option opts [Display, Hash] :display The value of attribute `display`.
    # 
    # @option opts [Domain, Hash] :domain The value of attribute `domain`.
    # 
    # @option opts [DynamicCpu, Hash] :dynamic_cpu The value of attribute `dynamic_cpu`.
    # 
    # @option opts [ExternalHostProvider, Hash] :external_host_provider The value of attribute `external_host_provider`.
    # 
    # @option opts [Array<Floppy>, Array<Hash>] :floppies The values of attribute `floppies`.
    # 
    # @option opts [String] :fqdn The value of attribute `fqdn`.
    # 
    # @option opts [Array<GraphicsConsole>, Array<Hash>] :graphics_consoles The values of attribute `graphics_consoles`.
    # 
    # @option opts [GuestOperatingSystem, Hash] :guest_operating_system The value of attribute `guest_operating_system`.
    # 
    # @option opts [TimeZone, Hash] :guest_time_zone The value of attribute `guest_time_zone`.
    # 
    # @option opts [Boolean] :has_illegal_images The value of attribute `has_illegal_images`.
    # 
    # @option opts [HighAvailability, Hash] :high_availability The value of attribute `high_availability`.
    # 
    # @option opts [Host, Hash] :host The value of attribute `host`.
    # 
    # @option opts [Array<HostDevice>, Array<Hash>] :host_devices The values of attribute `host_devices`.
    # 
    # @option opts [String] :id The value of attribute `id`.
    # 
    # @option opts [Initialization, Hash] :initialization The value of attribute `initialization`.
    # 
    # @option opts [InstanceType, Hash] :instance_type The value of attribute `instance_type`.
    # 
    # @option opts [Io, Hash] :io The value of attribute `io`.
    # 
    # @option opts [Array<KatelloErratum>, Array<Hash>] :katello_errata The values of attribute `katello_errata`.
    # 
    # @option opts [Icon, Hash] :large_icon The value of attribute `large_icon`.
    # 
    # @option opts [StorageDomainLease, Hash] :lease The value of attribute `lease`.
    # 
    # @option opts [Array<VmMediatedDevice>, Array<Hash>] :mediated_devices The values of attribute `mediated_devices`.
    # 
    # @option opts [Integer] :memory The value of attribute `memory`.
    # 
    # @option opts [MemoryPolicy, Hash] :memory_policy The value of attribute `memory_policy`.
    # 
    # @option opts [MigrationOptions, Hash] :migration The value of attribute `migration`.
    # 
    # @option opts [Integer] :migration_downtime The value of attribute `migration_downtime`.
    # 
    # @option opts [Boolean] :multi_queues_enabled The value of attribute `multi_queues_enabled`.
    # 
    # @option opts [String] :name The value of attribute `name`.
    # 
    # @option opts [Boolean] :next_run_configuration_exists The value of attribute `next_run_configuration_exists`.
    # 
    # @option opts [Array<Nic>, Array<Hash>] :nics The values of attribute `nics`.
    # 
    # @option opts [Array<NumaNode>, Array<Hash>] :numa_nodes The values of attribute `numa_nodes`.
    # 
    # @option opts [NumaTuneMode] :numa_tune_mode The value of attribute `numa_tune_mode`.
    # 
    # @option opts [String] :origin The value of attribute `origin`.
    # 
    # @option opts [Template, Hash] :original_template The value of attribute `original_template`.
    # 
    # @option opts [OperatingSystem, Hash] :os The value of attribute `os`.
    # 
    # @option opts [Array<Payload>, Array<Hash>] :payloads The values of attribute `payloads`.
    # 
    # @option opts [Array<Permission>, Array<Hash>] :permissions The values of attribute `permissions`.
    # 
    # @option opts [Boolean] :persist_memorystate The value of attribute `persist_memorystate`.
    # 
    # @option opts [VmPlacementPolicy, Hash] :placement_policy The value of attribute `placement_policy`.
    # 
    # @option opts [Quota, Hash] :quota The value of attribute `quota`.
    # 
    # @option opts [Array<ReportedDevice>, Array<Hash>] :reported_devices The values of attribute `reported_devices`.
    # 
    # @option opts [RngDevice, Hash] :rng_device The value of attribute `rng_device`.
    # 
    # @option opts [Boolean] :run_once The value of attribute `run_once`.
    # 
    # @option opts [SerialNumber, Hash] :serial_number The value of attribute `serial_number`.
    # 
    # @option opts [Array<Session>, Array<Hash>] :sessions The values of attribute `sessions`.
    # 
    # @option opts [Icon, Hash] :small_icon The value of attribute `small_icon`.
    # 
    # @option opts [SnapshotStatus] :snapshot_status The value of attribute `snapshot_status`.
    # 
    # @option opts [SnapshotType] :snapshot_type The value of attribute `snapshot_type`.
    # 
    # @option opts [Array<Snapshot>, Array<Hash>] :snapshots The values of attribute `snapshots`.
    # 
    # @option opts [Boolean] :soundcard_enabled The value of attribute `soundcard_enabled`.
    # 
    # @option opts [Sso, Hash] :sso The value of attribute `sso`.
    # 
    # @option opts [Boolean] :start_paused The value of attribute `start_paused`.
    # 
    # @option opts [DateTime] :start_time The value of attribute `start_time`.
    # 
    # @option opts [Boolean] :stateless The value of attribute `stateless`.
    # 
    # @option opts [Array<Statistic>, Array<Hash>] :statistics The values of attribute `statistics`.
    # 
    # @option opts [VmStatus] :status The value of attribute `status`.
    # 
    # @option opts [String] :status_detail The value of attribute `status_detail`.
    # 
    # @option opts [String] :stop_reason The value of attribute `stop_reason`.
    # 
    # @option opts [DateTime] :stop_time The value of attribute `stop_time`.
    # 
    # @option opts [StorageDomain, Hash] :storage_domain The value of attribute `storage_domain`.
    # 
    # @option opts [VmStorageErrorResumeBehaviour] :storage_error_resume_behaviour The value of attribute `storage_error_resume_behaviour`.
    # 
    # @option opts [Array<Tag>, Array<Hash>] :tags The values of attribute `tags`.
    # 
    # @option opts [Template, Hash] :template The value of attribute `template`.
    # 
    # @option opts [TimeZone, Hash] :time_zone The value of attribute `time_zone`.
    # 
    # @option opts [Boolean] :tpm_enabled The value of attribute `tpm_enabled`.
    # 
    # @option opts [Boolean] :tunnel_migration The value of attribute `tunnel_migration`.
    # 
    # @option opts [VmType] :type The value of attribute `type`.
    # 
    # @option opts [Usb, Hash] :usb The value of attribute `usb`.
    # 
    # @option opts [Boolean] :use_latest_template_version The value of attribute `use_latest_template_version`.
    # 
    # @option opts [VirtioScsi, Hash] :virtio_scsi The value of attribute `virtio_scsi`.
    # 
    # @option opts [Integer] :virtio_scsi_multi_queues The value of attribute `virtio_scsi_multi_queues`.
    # 
    # @option opts [Boolean] :virtio_scsi_multi_queues_enabled The value of attribute `virtio_scsi_multi_queues_enabled`.
    # 
    # @option opts [Vm, Hash] :vm The value of attribute `vm`.
    # 
    # @option opts [VmPool, Hash] :vm_pool The value of attribute `vm_pool`.
    # 
    # @option opts [Array<Watchdog>, Array<Hash>] :watchdogs The values of attribute `watchdogs`.
    # 
    # 
    def initialize(opts = {})
      super(opts)
      self.date = opts[:date]
      self.disks = opts[:disks]
      self.persist_memorystate = opts[:persist_memorystate]
      self.snapshot_status = opts[:snapshot_status]
      self.snapshot_type = opts[:snapshot_type]
      self.vm = opts[:vm]
    end
    
    # 
    # Returns `true` if `self` and `other` have the same attributes and values.
    # 
    def ==(other)
      super &&
      @date == other.date &&
      @disks == other.disks &&
      @persist_memorystate == other.persist_memorystate &&
      @snapshot_status == other.snapshot_status &&
      @snapshot_type == other.snapshot_type &&
      @vm == other.vm
    end
    
    # 
    # Generates a hash value for this object.
    # 
    def hash
      super +
      @date.hash +
      @disks.hash +
      @persist_memorystate.hash +
      @snapshot_status.hash +
      @snapshot_type.hash +
      @vm.hash
    end
    
  end
  
  module AccessProtocol
    CIFS = 'cifs'.freeze
    GLUSTER = 'gluster'.freeze
    NFS = 'nfs'.freeze
  end
  
  module Architecture
    AARCH64 = 'aarch64'.freeze
    LOONGARCH64 = 'loongarch64'.freeze
    PPC64 = 'ppc64'.freeze
    S390X = 's390x'.freeze
    UNDEFINED = 'undefined'.freeze
    X86_64 = 'x86_64'.freeze
  end
  
  module AutoNumaStatus
    DISABLE = 'disable'.freeze
    ENABLE = 'enable'.freeze
    UNKNOWN = 'unknown'.freeze
  end
  
  module AutoPinningPolicy
    ADJUST = 'adjust'.freeze
    DISABLED = 'disabled'.freeze
    EXISTING = 'existing'.freeze
  end
  
  module BackupPhase
    FAILED = 'failed'.freeze
    FINALIZING = 'finalizing'.freeze
    INITIALIZING = 'initializing'.freeze
    READY = 'ready'.freeze
    STARTING = 'starting'.freeze
    SUCCEEDED = 'succeeded'.freeze
  end
  
  module BiosType
    CLUSTER_DEFAULT = 'cluster_default'.freeze
    I440FX_SEA_BIOS = 'i440fx_sea_bios'.freeze
    Q35_OVMF = 'q35_ovmf'.freeze
    Q35_SEA_BIOS = 'q35_sea_bios'.freeze
    Q35_SECURE_BOOT = 'q35_secure_boot'.freeze
  end
  
  module BootDevice
    CDROM = 'cdrom'.freeze
    HD = 'hd'.freeze
    NETWORK = 'network'.freeze
  end
  
  module BootProtocol
    AUTOCONF = 'autoconf'.freeze
    DHCP = 'dhcp'.freeze
    NONE = 'none'.freeze
    POLY_DHCP_AUTOCONF = 'poly_dhcp_autoconf'.freeze
    STATIC = 'static'.freeze
  end
  
  module CheckpointState
    CREATED = 'created'.freeze
    INVALID = 'invalid'.freeze
  end
  
  module CloudInitNetworkProtocol
    ENI = 'eni'.freeze
    OPENSTACK_METADATA = 'openstack_metadata'.freeze
  end
  
  module ClusterUpgradeAction
    FINISH = 'finish'.freeze
    START = 'start'.freeze
    UPDATE_PROGRESS = 'update_progress'.freeze
  end
  
  module ConfigurationType
    OVA = 'ova'.freeze
    OVF = 'ovf'.freeze
  end
  
  module CpuMode
    CUSTOM = 'custom'.freeze
    HOST_MODEL = 'host_model'.freeze
    HOST_PASSTHROUGH = 'host_passthrough'.freeze
  end
  
  module CpuPinningPolicy
    DEDICATED = 'dedicated'.freeze
    ISOLATE_THREADS = 'isolate_threads'.freeze
    MANUAL = 'manual'.freeze
    NONE = 'none'.freeze
    RESIZE_AND_PIN_NUMA = 'resize_and_pin_numa'.freeze
  end
  
  module CreationStatus
    COMPLETE = 'complete'.freeze
    FAILED = 'failed'.freeze
    IN_PROGRESS = 'in_progress'.freeze
    PENDING = 'pending'.freeze
  end
  
  module DataCenterStatus
    CONTEND = 'contend'.freeze
    MAINTENANCE = 'maintenance'.freeze
    NOT_OPERATIONAL = 'not_operational'.freeze
    PROBLEMATIC = 'problematic'.freeze
    UNINITIALIZED = 'uninitialized'.freeze
    UP = 'up'.freeze
  end
  
  module DiskBackup
    INCREMENTAL = 'incremental'.freeze
    NONE = 'none'.freeze
  end
  
  module DiskBackupMode
    FULL = 'full'.freeze
    INCREMENTAL = 'incremental'.freeze
  end
  
  module DiskContentType
    BACKUP_SCRATCH = 'backup_scratch'.freeze
    DATA = 'data'.freeze
    HOSTED_ENGINE = 'hosted_engine'.freeze
    HOSTED_ENGINE_CONFIGURATION = 'hosted_engine_configuration'.freeze
    HOSTED_ENGINE_METADATA = 'hosted_engine_metadata'.freeze
    HOSTED_ENGINE_SANLOCK = 'hosted_engine_sanlock'.freeze
    ISO = 'iso'.freeze
    MEMORY_DUMP_VOLUME = 'memory_dump_volume'.freeze
    MEMORY_METADATA_VOLUME = 'memory_metadata_volume'.freeze
    OVF_STORE = 'ovf_store'.freeze
  end
  
  module DiskFormat
    COW = 'cow'.freeze
    RAW = 'raw'.freeze
  end
  
  module DiskInterface
    IDE = 'ide'.freeze
    SATA = 'sata'.freeze
    SPAPR_VSCSI = 'spapr_vscsi'.freeze
    VIRTIO = 'virtio'.freeze
    VIRTIO_SCSI = 'virtio_scsi'.freeze
  end
  
  module DiskStatus
    ILLEGAL = 'illegal'.freeze
    LOCKED = 'locked'.freeze
    OK = 'ok'.freeze
  end
  
  module DiskStorageType
    CINDER = 'cinder'.freeze
    IMAGE = 'image'.freeze
    LUN = 'lun'.freeze
    MANAGED_BLOCK_STORAGE = 'managed_block_storage'.freeze
  end
  
  module DiskType
    DATA = 'data'.freeze
    SYSTEM = 'system'.freeze
  end
  
  module DisplayType
    SPICE = 'spice'.freeze
    VNC = 'vnc'.freeze
  end
  
  module EntityExternalStatus
    ERROR = 'error'.freeze
    FAILURE = 'failure'.freeze
    INFO = 'info'.freeze
    OK = 'ok'.freeze
    WARNING = 'warning'.freeze
  end
  
  module ExternalStatus
    ERROR = 'error'.freeze
    FAILURE = 'failure'.freeze
    INFO = 'info'.freeze
    OK = 'ok'.freeze
    WARNING = 'warning'.freeze
  end
  
  module ExternalSystemType
    GLUSTER = 'gluster'.freeze
    VDSM = 'vdsm'.freeze
  end
  
  module ExternalVmProviderType
    KVM = 'kvm'.freeze
    VMWARE = 'vmware'.freeze
    XEN = 'xen'.freeze
  end
  
  module FenceType
    MANUAL = 'manual'.freeze
    RESTART = 'restart'.freeze
    START = 'start'.freeze
    STATUS = 'status'.freeze
    STOP = 'stop'.freeze
  end
  
  module FipsMode
    DISABLED = 'disabled'.freeze
    ENABLED = 'enabled'.freeze
    UNDEFINED = 'undefined'.freeze
  end
  
  module FirewallType
    FIREWALLD = 'firewalld'.freeze
    IPTABLES = 'iptables'.freeze
  end
  
  module GlusterBrickStatus
    DOWN = 'down'.freeze
    UNKNOWN = 'unknown'.freeze
    UP = 'up'.freeze
  end
  
  module GlusterHookStatus
    DISABLED = 'disabled'.freeze
    ENABLED = 'enabled'.freeze
    MISSING = 'missing'.freeze
  end
  
  module GlusterState
    DOWN = 'down'.freeze
    UNKNOWN = 'unknown'.freeze
    UP = 'up'.freeze
  end
  
  module GlusterVolumeStatus
    DOWN = 'down'.freeze
    UNKNOWN = 'unknown'.freeze
    UP = 'up'.freeze
  end
  
  module GlusterVolumeType
    DISPERSE = 'disperse'.freeze
    DISTRIBUTE = 'distribute'.freeze
    DISTRIBUTED_DISPERSE = 'distributed_disperse'.freeze
    DISTRIBUTED_REPLICATE = 'distributed_replicate'.freeze
    DISTRIBUTED_STRIPE = 'distributed_stripe'.freeze
    DISTRIBUTED_STRIPED_REPLICATE = 'distributed_striped_replicate'.freeze
    REPLICATE = 'replicate'.freeze
    STRIPE = 'stripe'.freeze
    STRIPED_REPLICATE = 'striped_replicate'.freeze
  end
  
  module GraphicsType
    SPICE = 'spice'.freeze
    VNC = 'vnc'.freeze
  end
  
  module HookContentType
    BINARY = 'binary'.freeze
    TEXT = 'text'.freeze
  end
  
  module HookStage
    POST = 'post'.freeze
    PRE = 'pre'.freeze
  end
  
  module HookStatus
    DISABLED = 'disabled'.freeze
    ENABLED = 'enabled'.freeze
    MISSING = 'missing'.freeze
  end
  
  module HostProtocol
    STOMP = 'stomp'.freeze
    XML = 'xml'.freeze
  end
  
  module HostStatus
    CONNECTING = 'connecting'.freeze
    DOWN = 'down'.freeze
    ERROR = 'error'.freeze
    INITIALIZING = 'initializing'.freeze
    INSTALL_FAILED = 'install_failed'.freeze
    INSTALLING = 'installing'.freeze
    INSTALLING_OS = 'installing_os'.freeze
    KDUMPING = 'kdumping'.freeze
    MAINTENANCE = 'maintenance'.freeze
    NON_OPERATIONAL = 'non_operational'.freeze
    NON_RESPONSIVE = 'non_responsive'.freeze
    PENDING_APPROVAL = 'pending_approval'.freeze
    PREPARING_FOR_MAINTENANCE = 'preparing_for_maintenance'.freeze
    REBOOT = 'reboot'.freeze
    UNASSIGNED = 'unassigned'.freeze
    UP = 'up'.freeze
  end
  
  module HostType
    OVIRT_NODE = 'ovirt_node'.freeze
    RHEL = 'rhel'.freeze
    RHEV_H = 'rhev_h'.freeze
  end
  
  module ImageFileType
    DISK = 'disk'.freeze
    FLOPPY = 'floppy'.freeze
    ISO = 'iso'.freeze
  end
  
  module ImageTransferDirection
    DOWNLOAD = 'download'.freeze
    UPLOAD = 'upload'.freeze
  end
  
  module ImageTransferPhase
    CANCELLED = 'cancelled'.freeze
    CANCELLED_SYSTEM = 'cancelled_system'.freeze
    CANCELLED_USER = 'cancelled_user'.freeze
    FINALIZING_CLEANUP = 'finalizing_cleanup'.freeze
    FINALIZING_FAILURE = 'finalizing_failure'.freeze
    FINALIZING_SUCCESS = 'finalizing_success'.freeze
    FINISHED_CLEANUP = 'finished_cleanup'.freeze
    FINISHED_FAILURE = 'finished_failure'.freeze
    FINISHED_SUCCESS = 'finished_success'.freeze
    INITIALIZING = 'initializing'.freeze
    PAUSED_SYSTEM = 'paused_system'.freeze
    PAUSED_USER = 'paused_user'.freeze
    RESUMING = 'resuming'.freeze
    TRANSFERRING = 'transferring'.freeze
    UNKNOWN = 'unknown'.freeze
  end
  
  module ImageTransferTimeoutPolicy
    CANCEL = 'cancel'.freeze
    LEGACY = 'legacy'.freeze
    PAUSE = 'pause'.freeze
  end
  
  module InheritableBoolean
    FALSE = 'false'.freeze
    INHERIT = 'inherit'.freeze
    TRUE = 'true'.freeze
  end
  
  module IpVersion
    V4 = 'v4'.freeze
    V6 = 'v6'.freeze
  end
  
  module JobStatus
    ABORTED = 'aborted'.freeze
    FAILED = 'failed'.freeze
    FINISHED = 'finished'.freeze
    STARTED = 'started'.freeze
    UNKNOWN = 'unknown'.freeze
  end
  
  module KdumpStatus
    DISABLED = 'disabled'.freeze
    ENABLED = 'enabled'.freeze
    UNKNOWN = 'unknown'.freeze
  end
  
  module LogMaxMemoryUsedThresholdType
    ABSOLUTE_VALUE_IN_MB = 'absolute_value_in_mb'.freeze
    PERCENTAGE = 'percentage'.freeze
  end
  
  module LogSeverity
    ALERT = 'alert'.freeze
    ERROR = 'error'.freeze
    NORMAL = 'normal'.freeze
    WARNING = 'warning'.freeze
  end
  
  module LunStatus
    FREE = 'free'.freeze
    UNUSABLE = 'unusable'.freeze
    USED = 'used'.freeze
  end
  
  module MessageBrokerType
    QPID = 'qpid'.freeze
    RABBIT_MQ = 'rabbit_mq'.freeze
  end
  
  module MigrateOnError
    DO_NOT_MIGRATE = 'do_not_migrate'.freeze
    MIGRATE = 'migrate'.freeze
    MIGRATE_HIGHLY_AVAILABLE = 'migrate_highly_available'.freeze
  end
  
  module MigrationBandwidthAssignmentMethod
    AUTO = 'auto'.freeze
    CUSTOM = 'custom'.freeze
    HYPERVISOR_DEFAULT = 'hypervisor_default'.freeze
  end
  
  module NetworkPluginType
    OPEN_VSWITCH = 'open_vswitch'.freeze
  end
  
  module NetworkStatus
    NON_OPERATIONAL = 'non_operational'.freeze
    OPERATIONAL = 'operational'.freeze
  end
  
  module NetworkUsage
    DEFAULT_ROUTE = 'default_route'.freeze
    DISPLAY = 'display'.freeze
    GLUSTER = 'gluster'.freeze
    MANAGEMENT = 'management'.freeze
    MIGRATION = 'migration'.freeze
    VM = 'vm'.freeze
  end
  
  module NfsVersion
    AUTO = 'auto'.freeze
    V3 = 'v3'.freeze
    V4 = 'v4'.freeze
    V4_0 = 'v4_0'.freeze
    V4_1 = 'v4_1'.freeze
    V4_2 = 'v4_2'.freeze
  end
  
  module NicInterface
    E1000 = 'e1000'.freeze
    E1000E = 'e1000e'.freeze
    PCI_PASSTHROUGH = 'pci_passthrough'.freeze
    RTL8139 = 'rtl8139'.freeze
    RTL8139_VIRTIO = 'rtl8139_virtio'.freeze
    SPAPR_VLAN = 'spapr_vlan'.freeze
    VIRTIO = 'virtio'.freeze
  end
  
  module NicStatus
    DOWN = 'down'.freeze
    UP = 'up'.freeze
  end
  
  module NotifiableEvent
    CLUSTER_ALERT_HA_RESERVATION = 'cluster_alert_ha_reservation'.freeze
    CLUSTER_ALERT_HA_RESERVATION_DOWN = 'cluster_alert_ha_reservation_down'.freeze
    DWH_ERROR = 'dwh_error'.freeze
    DWH_STOPPED = 'dwh_stopped'.freeze
    ENGINE_BACKUP_COMPLETED = 'engine_backup_completed'.freeze
    ENGINE_BACKUP_FAILED = 'engine_backup_failed'.freeze
    ENGINE_BACKUP_STARTED = 'engine_backup_started'.freeze
    ENGINE_CA_CERTIFICATION_HAS_EXPIRED = 'engine_ca_certification_has_expired'.freeze
    ENGINE_CA_CERTIFICATION_IS_ABOUT_TO_EXPIRE = 'engine_ca_certification_is_about_to_expire'.freeze
    ENGINE_CERTIFICATION_HAS_EXPIRED = 'engine_certification_has_expired'.freeze
    ENGINE_CERTIFICATION_IS_ABOUT_TO_EXPIRE = 'engine_certification_is_about_to_expire'.freeze
    ENGINE_STOP = 'engine_stop'.freeze
    FAULTY_MULTIPATHS_ON_HOST = 'faulty_multipaths_on_host'.freeze
    GLUSTER_BRICK_STATUS_CHANGED = 'gluster_brick_status_changed'.freeze
    GLUSTER_HOOK_ADD_FAILED = 'gluster_hook_add_failed'.freeze
    GLUSTER_HOOK_ADDED = 'gluster_hook_added'.freeze
    GLUSTER_HOOK_CONFLICT_DETECTED = 'gluster_hook_conflict_detected'.freeze
    GLUSTER_HOOK_DETECTED_DELETE = 'gluster_hook_detected_delete'.freeze
    GLUSTER_HOOK_DETECTED_NEW = 'gluster_hook_detected_new'.freeze
    GLUSTER_HOOK_DISABLE = 'gluster_hook_disable'.freeze
    GLUSTER_HOOK_DISABLE_FAILED = 'gluster_hook_disable_failed'.freeze
    GLUSTER_HOOK_ENABLE = 'gluster_hook_enable'.freeze
    GLUSTER_HOOK_ENABLE_FAILED = 'gluster_hook_enable_failed'.freeze
    GLUSTER_HOOK_REMOVE_FAILED = 'gluster_hook_remove_failed'.freeze
    GLUSTER_HOOK_REMOVED = 'gluster_hook_removed'.freeze
    GLUSTER_SERVER_ADD_FAILED = 'gluster_server_add_failed'.freeze
    GLUSTER_SERVER_REMOVE = 'gluster_server_remove'.freeze
    GLUSTER_SERVER_REMOVE_FAILED = 'gluster_server_remove_failed'.freeze
    GLUSTER_SERVICE_RESTART_FAILED = 'gluster_service_restart_failed'.freeze
    GLUSTER_SERVICE_RESTARTED = 'gluster_service_restarted'.freeze
    GLUSTER_SERVICE_START_FAILED = 'gluster_service_start_failed'.freeze
    GLUSTER_SERVICE_STARTED = 'gluster_service_started'.freeze
    GLUSTER_SERVICE_STOP_FAILED = 'gluster_service_stop_failed'.freeze
    GLUSTER_SERVICE_STOPPED = 'gluster_service_stopped'.freeze
    GLUSTER_VOLUME_ADD_BRICK = 'gluster_volume_add_brick'.freeze
    GLUSTER_VOLUME_ADD_BRICK_FAILED = 'gluster_volume_add_brick_failed'.freeze
    GLUSTER_VOLUME_ALL_SNAPSHOTS_DELETE_FAILED = 'gluster_volume_all_snapshots_delete_failed'.freeze
    GLUSTER_VOLUME_ALL_SNAPSHOTS_DELETED = 'gluster_volume_all_snapshots_deleted'.freeze
    GLUSTER_VOLUME_BRICK_REPLACED = 'gluster_volume_brick_replaced'.freeze
    GLUSTER_VOLUME_CONFIRMED_SPACE_LOW = 'gluster_volume_confirmed_space_low'.freeze
    GLUSTER_VOLUME_CREATE = 'gluster_volume_create'.freeze
    GLUSTER_VOLUME_CREATE_FAILED = 'gluster_volume_create_failed'.freeze
    GLUSTER_VOLUME_DELETE = 'gluster_volume_delete'.freeze
    GLUSTER_VOLUME_DELETE_FAILED = 'gluster_volume_delete_failed'.freeze
    GLUSTER_VOLUME_MIGRATE_BRICK_DATA_FINISHED = 'gluster_volume_migrate_brick_data_finished'.freeze
    GLUSTER_VOLUME_OPTION_ADDED = 'gluster_volume_option_added'.freeze
    GLUSTER_VOLUME_OPTION_MODIFIED = 'gluster_volume_option_modified'.freeze
    GLUSTER_VOLUME_OPTION_SET_FAILED = 'gluster_volume_option_set_failed'.freeze
    GLUSTER_VOLUME_OPTIONS_RESET = 'gluster_volume_options_reset'.freeze
    GLUSTER_VOLUME_OPTIONS_RESET_ALL = 'gluster_volume_options_reset_all'.freeze
    GLUSTER_VOLUME_OPTIONS_RESET_FAILED = 'gluster_volume_options_reset_failed'.freeze
    GLUSTER_VOLUME_PROFILE_START = 'gluster_volume_profile_start'.freeze
    GLUSTER_VOLUME_PROFILE_START_FAILED = 'gluster_volume_profile_start_failed'.freeze
    GLUSTER_VOLUME_PROFILE_STOP = 'gluster_volume_profile_stop'.freeze
    GLUSTER_VOLUME_PROFILE_STOP_FAILED = 'gluster_volume_profile_stop_failed'.freeze
    GLUSTER_VOLUME_REBALANCE_FINISHED = 'gluster_volume_rebalance_finished'.freeze
    GLUSTER_VOLUME_REBALANCE_NOT_FOUND_FROM_CLI = 'gluster_volume_rebalance_not_found_from_cli'.freeze
    GLUSTER_VOLUME_REBALANCE_START = 'gluster_volume_rebalance_start'.freeze
    GLUSTER_VOLUME_REBALANCE_START_DETECTED_FROM_CLI = 'gluster_volume_rebalance_start_detected_from_cli'.freeze
    GLUSTER_VOLUME_REBALANCE_START_FAILED = 'gluster_volume_rebalance_start_failed'.freeze
    GLUSTER_VOLUME_REBALANCE_STOP = 'gluster_volume_rebalance_stop'.freeze
    GLUSTER_VOLUME_REBALANCE_STOP_FAILED = 'gluster_volume_rebalance_stop_failed'.freeze
    GLUSTER_VOLUME_REMOVE_BRICKS = 'gluster_volume_remove_bricks'.freeze
    GLUSTER_VOLUME_REMOVE_BRICKS_FAILED = 'gluster_volume_remove_bricks_failed'.freeze
    GLUSTER_VOLUME_REMOVE_BRICKS_STOP = 'gluster_volume_remove_bricks_stop'.freeze
    GLUSTER_VOLUME_REMOVE_BRICKS_STOP_FAILED = 'gluster_volume_remove_bricks_stop_failed'.freeze
    GLUSTER_VOLUME_REPLACE_BRICK_FAILED = 'gluster_volume_replace_brick_failed'.freeze
    GLUSTER_VOLUME_REPLACE_BRICK_START = 'gluster_volume_replace_brick_start'.freeze
    GLUSTER_VOLUME_REPLACE_BRICK_START_FAILED = 'gluster_volume_replace_brick_start_failed'.freeze
    GLUSTER_VOLUME_SNAPSHOT_ACTIVATE_FAILED = 'gluster_volume_snapshot_activate_failed'.freeze
    GLUSTER_VOLUME_SNAPSHOT_ACTIVATED = 'gluster_volume_snapshot_activated'.freeze
    GLUSTER_VOLUME_SNAPSHOT_CREATE_FAILED = 'gluster_volume_snapshot_create_failed'.freeze
    GLUSTER_VOLUME_SNAPSHOT_CREATED = 'gluster_volume_snapshot_created'.freeze
    GLUSTER_VOLUME_SNAPSHOT_DEACTIVATE_FAILED = 'gluster_volume_snapshot_deactivate_failed'.freeze
    GLUSTER_VOLUME_SNAPSHOT_DEACTIVATED = 'gluster_volume_snapshot_deactivated'.freeze
    GLUSTER_VOLUME_SNAPSHOT_DELETE_FAILED = 'gluster_volume_snapshot_delete_failed'.freeze
    GLUSTER_VOLUME_SNAPSHOT_DELETED = 'gluster_volume_snapshot_deleted'.freeze
    GLUSTER_VOLUME_SNAPSHOT_RESTORE_FAILED = 'gluster_volume_snapshot_restore_failed'.freeze
    GLUSTER_VOLUME_SNAPSHOT_RESTORED = 'gluster_volume_snapshot_restored'.freeze
    GLUSTER_VOLUME_START = 'gluster_volume_start'.freeze
    GLUSTER_VOLUME_START_FAILED = 'gluster_volume_start_failed'.freeze
    GLUSTER_VOLUME_STOP = 'gluster_volume_stop'.freeze
    GLUSTER_VOLUME_STOP_FAILED = 'gluster_volume_stop_failed'.freeze
    HA_VM_FAILED = 'ha_vm_failed'.freeze
    HA_VM_RESTART_FAILED = 'ha_vm_restart_failed'.freeze
    HOST_ACTIVATE_FAILED = 'host_activate_failed'.freeze
    HOST_ACTIVATE_MANUAL_HA = 'host_activate_manual_ha'.freeze
    HOST_APPROVE_FAILED = 'host_approve_failed'.freeze
    HOST_BOND_SLAVE_STATE_DOWN = 'host_bond_slave_state_down'.freeze
    HOST_CERTIFICATE_HAS_INVALID_SAN = 'host_certificate_has_invalid_san'.freeze
    HOST_CERTIFICATION_HAS_EXPIRED = 'host_certification_has_expired'.freeze
    HOST_CERTIFICATION_IS_ABOUT_TO_EXPIRE = 'host_certification_is_about_to_expire'.freeze
    HOST_FAILURE = 'host_failure'.freeze
    HOST_HIGH_CPU_USE = 'host_high_cpu_use'.freeze
    HOST_HIGH_MEM_USE = 'host_high_mem_use'.freeze
    HOST_HIGH_SWAP_USE = 'host_high_swap_use'.freeze
    HOST_INITIATED_RUN_VM_FAILED = 'host_initiated_run_vm_failed'.freeze
    HOST_INSTALL_FAILED = 'host_install_failed'.freeze
    HOST_INTERFACE_HIGH_NETWORK_USE = 'host_interface_high_network_use'.freeze
    HOST_INTERFACE_STATE_DOWN = 'host_interface_state_down'.freeze
    HOST_LOW_MEM = 'host_low_mem'.freeze
    HOST_LOW_SWAP = 'host_low_swap'.freeze
    HOST_RECOVER_FAILED = 'host_recover_failed'.freeze
    HOST_SET_NONOPERATIONAL = 'host_set_nonoperational'.freeze
    HOST_SET_NONOPERATIONAL_DOMAIN = 'host_set_nonoperational_domain'.freeze
    HOST_SET_NONOPERATIONAL_IFACE_DOWN = 'host_set_nonoperational_iface_down'.freeze
    HOST_SLOW_STORAGE_RESPONSE_TIME = 'host_slow_storage_response_time'.freeze
    HOST_TIME_DRIFT_ALERT = 'host_time_drift_alert'.freeze
    HOST_UNTRUSTED = 'host_untrusted'.freeze
    HOST_UPDATES_ARE_AVAILABLE = 'host_updates_are_available'.freeze
    HOST_UPDATES_ARE_AVAILABLE_WITH_PACKAGES = 'host_updates_are_available_with_packages'.freeze
    IMPORTEXPORT_IMPORT_TEMPLATE_FROM_TRUSTED_TO_UNTRUSTED = 'importexport_import_template_from_trusted_to_untrusted'.freeze
    IMPORTEXPORT_IMPORT_TEMPLATE_FROM_UNTRUSTED_TO_TRUSTED = 'importexport_import_template_from_untrusted_to_trusted'.freeze
    IMPORTEXPORT_IMPORT_VM_FROM_TRUSTED_TO_UNTRUSTED = 'importexport_import_vm_from_trusted_to_untrusted'.freeze
    IMPORTEXPORT_IMPORT_VM_FROM_UNTRUSTED_TO_TRUSTED = 'importexport_import_vm_from_untrusted_to_trusted'.freeze
    IRS_CONFIRMED_DISK_SPACE_LOW = 'irs_confirmed_disk_space_low'.freeze
    IRS_DISK_SPACE_LOW = 'irs_disk_space_low'.freeze
    IRS_DISK_SPACE_LOW_ERROR = 'irs_disk_space_low_error'.freeze
    IRS_FAILURE = 'irs_failure'.freeze
    MAC_ADDRESS_IS_EXTERNAL = 'mac_address_is_external'.freeze
    MULTIPATH_DEVICES_WITHOUT_VALID_PATHS_ON_HOST = 'multipath_devices_without_valid_paths_on_host'.freeze
    NETWORK_UPDATE_DISPLAY_FOR_CLUSTER_WITH_ACTIVE_VM = 'network_update_display_for_cluster_with_active_vm'.freeze
    NETWORK_UPDATE_DISPLAY_FOR_HOST_WITH_ACTIVE_VM = 'network_update_display_for_host_with_active_vm'.freeze
    NO_FAULTY_MULTIPATHS_ON_HOST = 'no_faulty_multipaths_on_host'.freeze
    NUMBER_OF_LVS_ON_STORAGE_DOMAIN_EXCEEDED_THRESHOLD = 'number_of_lvs_on_storage_domain_exceeded_threshold'.freeze
    REMOVE_GLUSTER_VOLUME_BRICKS_NOT_FOUND_FROM_CLI = 'remove_gluster_volume_bricks_not_found_from_cli'.freeze
    START_REMOVING_GLUSTER_VOLUME_BRICKS = 'start_removing_gluster_volume_bricks'.freeze
    START_REMOVING_GLUSTER_VOLUME_BRICKS_DETECTED_FROM_CLI = 'start_removing_gluster_volume_bricks_detected_from_cli'.freeze
    START_REMOVING_GLUSTER_VOLUME_BRICKS_FAILED = 'start_removing_gluster_volume_bricks_failed'.freeze
    SYSTEM_CHANGE_STORAGE_POOL_STATUS_NO_HOST_FOR_SPM = 'system_change_storage_pool_status_no_host_for_spm'.freeze
    SYSTEM_DEACTIVATED_STORAGE_DOMAIN = 'system_deactivated_storage_domain'.freeze
    USER_ADD_VM_FROM_TRUSTED_TO_UNTRUSTED = 'user_add_vm_from_trusted_to_untrusted'.freeze
    USER_ADD_VM_FROM_UNTRUSTED_TO_TRUSTED = 'user_add_vm_from_untrusted_to_trusted'.freeze
    USER_ADD_VM_TEMPLATE_FROM_TRUSTED_TO_UNTRUSTED = 'user_add_vm_template_from_trusted_to_untrusted'.freeze
    USER_ADD_VM_TEMPLATE_FROM_UNTRUSTED_TO_TRUSTED = 'user_add_vm_template_from_untrusted_to_trusted'.freeze
    USER_HOST_MAINTENANCE = 'user_host_maintenance'.freeze
    USER_HOST_MAINTENANCE_MANUAL_HA = 'user_host_maintenance_manual_ha'.freeze
    USER_HOST_MAINTENANCE_MIGRATION_FAILED = 'user_host_maintenance_migration_failed'.freeze
    USER_UPDATE_VM_FROM_TRUSTED_TO_UNTRUSTED = 'user_update_vm_from_trusted_to_untrusted'.freeze
    USER_UPDATE_VM_FROM_UNTRUSTED_TO_TRUSTED = 'user_update_vm_from_untrusted_to_trusted'.freeze
    USER_UPDATE_VM_TEMPLATE_FROM_TRUSTED_TO_UNTRUSTED = 'user_update_vm_template_from_trusted_to_untrusted'.freeze
    USER_UPDATE_VM_TEMPLATE_FROM_UNTRUSTED_TO_TRUSTED = 'user_update_vm_template_from_untrusted_to_trusted'.freeze
    VM_CONSOLE_CONNECTED = 'vm_console_connected'.freeze
    VM_CONSOLE_DISCONNECTED = 'vm_console_disconnected'.freeze
    VM_DOWN_ERROR = 'vm_down_error'.freeze
    VM_FAILURE = 'vm_failure'.freeze
    VM_MIGRATION_FAILED = 'vm_migration_failed'.freeze
    VM_MIGRATION_START = 'vm_migration_start'.freeze
    VM_MIGRATION_TO_SERVER_FAILED = 'vm_migration_to_server_failed'.freeze
    VM_NOT_RESPONDING = 'vm_not_responding'.freeze
    VM_PAUSED = 'vm_paused'.freeze
    VM_PAUSED_EIO = 'vm_paused_eio'.freeze
    VM_PAUSED_ENOSPC = 'vm_paused_enospc'.freeze
    VM_PAUSED_EPERM = 'vm_paused_eperm'.freeze
    VM_PAUSED_ERROR = 'vm_paused_error'.freeze
    VM_RECOVERED_FROM_PAUSE_ERROR = 'vm_recovered_from_pause_error'.freeze
    VM_SET_TICKET = 'vm_set_ticket'.freeze
    VM_STATUS_RESTORED = 'vm_status_restored'.freeze
  end
  
  module NotificationMethod
    SMTP = 'smtp'.freeze
    SNMP = 'snmp'.freeze
  end
  
  module NumaTuneMode
    INTERLEAVE = 'interleave'.freeze
    PREFERRED = 'preferred'.freeze
    STRICT = 'strict'.freeze
  end
  
  module OpenStackNetworkProviderType
    EXTERNAL = 'external'.freeze
    NEUTRON = 'neutron'.freeze
  end
  
  module OpenstackVolumeAuthenticationKeyUsageType
    CEPH = 'ceph'.freeze
  end
  
  module OsType
    OTHER = 'other'.freeze
    OTHER_LINUX = 'other_linux'.freeze
    RHEL_3 = 'rhel_3'.freeze
    RHEL_3X64 = 'rhel_3x64'.freeze
    RHEL_4 = 'rhel_4'.freeze
    RHEL_4X64 = 'rhel_4x64'.freeze
    RHEL_5 = 'rhel_5'.freeze
    RHEL_5X64 = 'rhel_5x64'.freeze
    RHEL_6 = 'rhel_6'.freeze
    RHEL_6X64 = 'rhel_6x64'.freeze
    UNASSIGNED = 'unassigned'.freeze
    WINDOWS_2003 = 'windows_2003'.freeze
    WINDOWS_2003X64 = 'windows_2003x64'.freeze
    WINDOWS_2008 = 'windows_2008'.freeze
    WINDOWS_2008R2X64 = 'windows_2008r2x64'.freeze
    WINDOWS_2008X64 = 'windows_2008x64'.freeze
    WINDOWS_2012X64 = 'windows_2012x64'.freeze
    WINDOWS_7 = 'windows_7'.freeze
    WINDOWS_7X64 = 'windows_7x64'.freeze
    WINDOWS_8 = 'windows_8'.freeze
    WINDOWS_8X64 = 'windows_8x64'.freeze
    WINDOWS_XP = 'windows_xp'.freeze
  end
  
  module ParallelMigrationsPolicy
    AUTO = 'auto'.freeze
    AUTO_PARALLEL = 'auto_parallel'.freeze
    CUSTOM = 'custom'.freeze
    DISABLED = 'disabled'.freeze
    INHERIT = 'inherit'.freeze
  end
  
  module PayloadEncoding
    BASE64 = 'base64'.freeze
    PLAINTEXT = 'plaintext'.freeze
  end
  
  module PmProxyType
    CLUSTER = 'cluster'.freeze
    DC = 'dc'.freeze
    OTHER_DC = 'other_dc'.freeze
  end
  
  module PolicyUnitType
    FILTER = 'filter'.freeze
    LOAD_BALANCING = 'load_balancing'.freeze
    WEIGHT = 'weight'.freeze
  end
  
  module PowerManagementStatus
    OFF = 'off'.freeze
    ON = 'on'.freeze
    UNKNOWN = 'unknown'.freeze
  end
  
  module QcowVersion
    QCOW2_V2 = 'qcow2_v2'.freeze
    QCOW2_V3 = 'qcow2_v3'.freeze
  end
  
  module QosType
    CPU = 'cpu'.freeze
    HOSTNETWORK = 'hostnetwork'.freeze
    NETWORK = 'network'.freeze
    STORAGE = 'storage'.freeze
  end
  
  module QuotaModeType
    AUDIT = 'audit'.freeze
    DISABLED = 'disabled'.freeze
    ENABLED = 'enabled'.freeze
  end
  
  module ReportedDeviceType
    NETWORK = 'network'.freeze
  end
  
  module ResolutionType
    ADD = 'add'.freeze
    COPY = 'copy'.freeze
  end
  
  module RngSource
    HWRNG = 'hwrng'.freeze
    RANDOM = 'random'.freeze
    URANDOM = 'urandom'.freeze
  end
  
  module RoleType
    ADMIN = 'admin'.freeze
    USER = 'user'.freeze
  end
  
  module ScsiGenericIO
    DISABLED = 'disabled'.freeze
    FILTERED = 'filtered'.freeze
    UNFILTERED = 'unfiltered'.freeze
  end
  
  module SeLinuxMode
    DISABLED = 'disabled'.freeze
    ENFORCING = 'enforcing'.freeze
    PERMISSIVE = 'permissive'.freeze
  end
  
  module SerialNumberPolicy
    CUSTOM = 'custom'.freeze
    HOST = 'host'.freeze
    NONE = 'none'.freeze
    VM = 'vm'.freeze
  end
  
  module SnapshotStatus
    IN_PREVIEW = 'in_preview'.freeze
    LOCKED = 'locked'.freeze
    OK = 'ok'.freeze
  end
  
  module SnapshotType
    ACTIVE = 'active'.freeze
    PREVIEW = 'preview'.freeze
    REGULAR = 'regular'.freeze
    STATELESS = 'stateless'.freeze
  end
  
  module SpmStatus
    CONTENDING = 'contending'.freeze
    NONE = 'none'.freeze
    SPM = 'spm'.freeze
  end
  
  module SshAuthenticationMethod
    PASSWORD = 'password'.freeze
    PUBLICKEY = 'publickey'.freeze
  end
  
  module SsoMethod
    GUEST_AGENT = 'guest_agent'.freeze
  end
  
  module StatisticKind
    COUNTER = 'counter'.freeze
    GAUGE = 'gauge'.freeze
  end
  
  module StatisticUnit
    BITS_PER_SECOND = 'bits_per_second'.freeze
    BYTES = 'bytes'.freeze
    BYTES_PER_SECOND = 'bytes_per_second'.freeze
    COUNT_PER_SECOND = 'count_per_second'.freeze
    NONE = 'none'.freeze
    PERCENT = 'percent'.freeze
    SECONDS = 'seconds'.freeze
  end
  
  module StepEnum
    EXECUTING = 'executing'.freeze
    FINALIZING = 'finalizing'.freeze
    REBALANCING_VOLUME = 'rebalancing_volume'.freeze
    REMOVING_BRICKS = 'removing_bricks'.freeze
    UNKNOWN = 'unknown'.freeze
    VALIDATING = 'validating'.freeze
  end
  
  module StepStatus
    ABORTED = 'aborted'.freeze
    FAILED = 'failed'.freeze
    FINISHED = 'finished'.freeze
    STARTED = 'started'.freeze
    UNKNOWN = 'unknown'.freeze
  end
  
  module StorageDomainStatus
    ACTIVATING = 'activating'.freeze
    ACTIVE = 'active'.freeze
    DETACHING = 'detaching'.freeze
    INACTIVE = 'inactive'.freeze
    LOCKED = 'locked'.freeze
    MAINTENANCE = 'maintenance'.freeze
    MIXED = 'mixed'.freeze
    PREPARING_FOR_MAINTENANCE = 'preparing_for_maintenance'.freeze
    UNATTACHED = 'unattached'.freeze
    UNKNOWN = 'unknown'.freeze
  end
  
  module StorageDomainType
    DATA = 'data'.freeze
    EXPORT = 'export'.freeze
    IMAGE = 'image'.freeze
    ISO = 'iso'.freeze
    MANAGED_BLOCK_STORAGE = 'managed_block_storage'.freeze
    VOLUME = 'volume'.freeze
  end
  
  module StorageFormat
    V1 = 'v1'.freeze
    V2 = 'v2'.freeze
    V3 = 'v3'.freeze
    V4 = 'v4'.freeze
    V5 = 'v5'.freeze
  end
  
  module StorageType
    CINDER = 'cinder'.freeze
    FCP = 'fcp'.freeze
    GLANCE = 'glance'.freeze
    GLUSTERFS = 'glusterfs'.freeze
    ISCSI = 'iscsi'.freeze
    LOCALFS = 'localfs'.freeze
    MANAGED_BLOCK_STORAGE = 'managed_block_storage'.freeze
    NFS = 'nfs'.freeze
    POSIXFS = 'posixfs'.freeze
  end
  
  module SwitchType
    LEGACY = 'legacy'.freeze
    OVS = 'ovs'.freeze
  end
  
  module TemplateStatus
    ILLEGAL = 'illegal'.freeze
    LOCKED = 'locked'.freeze
    OK = 'ok'.freeze
  end
  
  module TpmSupport
    REQUIRED = 'required'.freeze
    SUPPORTED = 'supported'.freeze
    UNSUPPORTED = 'unsupported'.freeze
  end
  
  module TransportType
    RDMA = 'rdma'.freeze
    TCP = 'tcp'.freeze
  end
  
  module UsbType
    LEGACY = 'legacy'.freeze
    NATIVE = 'native'.freeze
  end
  
  module ValueType
    DECIMAL = 'decimal'.freeze
    INTEGER = 'integer'.freeze
    STRING = 'string'.freeze
  end
  
  module VgpuPlacement
    CONSOLIDATED = 'consolidated'.freeze
    SEPARATED = 'separated'.freeze
  end
  
  module VideoType
    BOCHS = 'bochs'.freeze
    CIRRUS = 'cirrus'.freeze
    QXL = 'qxl'.freeze
    VGA = 'vga'.freeze
  end
  
  module VmAffinity
    MIGRATABLE = 'migratable'.freeze
    PINNED = 'pinned'.freeze
    USER_MIGRATABLE = 'user_migratable'.freeze
  end
  
  module VmDeviceType
    CDROM = 'cdrom'.freeze
    FLOPPY = 'floppy'.freeze
  end
  
  module VmPoolType
    AUTOMATIC = 'automatic'.freeze
    MANUAL = 'manual'.freeze
  end
  
  module VmStatus
    DOWN = 'down'.freeze
    IMAGE_LOCKED = 'image_locked'.freeze
    MIGRATING = 'migrating'.freeze
    NOT_RESPONDING = 'not_responding'.freeze
    PAUSED = 'paused'.freeze
    POWERING_DOWN = 'powering_down'.freeze
    POWERING_UP = 'powering_up'.freeze
    REBOOT_IN_PROGRESS = 'reboot_in_progress'.freeze
    RESTORING_STATE = 'restoring_state'.freeze
    SAVING_STATE = 'saving_state'.freeze
    SUSPENDED = 'suspended'.freeze
    UNASSIGNED = 'unassigned'.freeze
    UNKNOWN = 'unknown'.freeze
    UP = 'up'.freeze
    WAIT_FOR_LAUNCH = 'wait_for_launch'.freeze
  end
  
  module VmStorageErrorResumeBehaviour
    AUTO_RESUME = 'auto_resume'.freeze
    KILL = 'kill'.freeze
    LEAVE_PAUSED = 'leave_paused'.freeze
  end
  
  module VmType
    DESKTOP = 'desktop'.freeze
    HIGH_PERFORMANCE = 'high_performance'.freeze
    SERVER = 'server'.freeze
  end
  
  module VnicPassThroughMode
    DISABLED = 'disabled'.freeze
    ENABLED = 'enabled'.freeze
  end
  
  module WatchdogAction
    DUMP = 'dump'.freeze
    NONE = 'none'.freeze
    PAUSE = 'pause'.freeze
    POWEROFF = 'poweroff'.freeze
    RESET = 'reset'.freeze
  end
  
  module WatchdogModel
    DIAG288 = 'diag288'.freeze
    I6300ESB = 'i6300esb'.freeze
  end
  
end

