Creates a new implementation of the service.
@param connection [Connection] The connection to be used by this service.
@param path [String] The relative path of this service, for example `vms/123/disks`.
@api private
# File lib/ovirtsdk4/services.rb, line 30039 def initialize(connection, path) @connection = connection @path = path end
Executes the `activate` method.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the activation should be performed asynchronously.
# File lib/ovirtsdk4/services.rb, line 30051 def activate(opts = {}) action = Action.new(opts) writer = XmlWriter.new(nil, true) ActionWriter.write_one(action, writer) body = writer.string writer.close request = Request.new({ :method => :POST, :path => "#{@path}/activate", :body => body, }) response = @connection.send(request) case response.code when 200 action = check_action(response) else check_fault(response) end end
List of scheduling labels assigned to this host.
@return [AssignedAffinityLabelsService] A reference to `affinity_labels` service.
# File lib/ovirtsdk4/services.rb, line 30716 def affinity_labels_service return AssignedAffinityLabelsService.new(@connection, "#{@path}/affinitylabels") end
Executes the `approve` method.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the approval should be performed asynchronously.
@option opts [Cluster] :cluster
# File lib/ovirtsdk4/services.rb, line 30080 def approve(opts = {}) action = Action.new(opts) writer = XmlWriter.new(nil, true) ActionWriter.write_one(action, writer) body = writer.string writer.close request = Request.new({ :method => :POST, :path => "#{@path}/approve", :body => body, }) response = @connection.send(request) case response.code when 200 action = check_action(response) else check_fault(response) end end
Marks the network configuration as good and persists it inside the host.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the action should be performed asynchronously.
# File lib/ovirtsdk4/services.rb, line 30107 def commit_net_config(opts = {}) action = Action.new(opts) writer = XmlWriter.new(nil, true) ActionWriter.write_one(action, writer) body = writer.string writer.close request = Request.new({ :method => :POST, :path => "#{@path}/commitnetconfig", :body => body, }) response = @connection.send(request) case response.code when 200 action = check_action(response) else check_fault(response) end end
Executes the `deactivate` method.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the deactivation should be performed asynchronously.
@option opts [String] :reason
@option opts [Boolean] :stop_gluster_service Indicates if the gluster service should be stopped as part of deactivating the host. It can be used while
performing maintenance operations on the gluster host. Default value for this variable is `false`.
# File lib/ovirtsdk4/services.rb, line 30139 def deactivate(opts = {}) action = Action.new(opts) writer = XmlWriter.new(nil, true) ActionWriter.write_one(action, writer) body = writer.string writer.close request = Request.new({ :method => :POST, :path => "#{@path}/deactivate", :body => body, }) response = @connection.send(request) case response.code when 200 action = check_action(response) else check_fault(response) end end
Locates the `devices` service.
@return [HostDevicesService] A reference to `devices` service.
# File lib/ovirtsdk4/services.rb, line 30724 def devices_service return HostDevicesService.new(@connection, "#{@path}/devices") end
Executes the `enroll_certificate` method.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the enrollment should be performed asynchronously.
# File lib/ovirtsdk4/services.rb, line 30166 def enroll_certificate(opts = {}) action = Action.new(opts) writer = XmlWriter.new(nil, true) ActionWriter.write_one(action, writer) body = writer.string writer.close request = Request.new({ :method => :POST, :path => "#{@path}/enrollcertificate", :body => body, }) response = @connection.send(request) case response.code when 200 action = check_action(response) else check_fault(response) end end
Executes the `fence` method.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the fencing should be performed asynchronously.
@option opts [String] :fence_type
@option opts [PowerManagement] :power_management
# File lib/ovirtsdk4/services.rb, line 30197 def fence(opts = {}) action = Action.new(opts) writer = XmlWriter.new(nil, true) ActionWriter.write_one(action, writer) body = writer.string writer.close request = Request.new({ :method => :POST, :path => "#{@path}/fence", :body => body, }) response = @connection.send(request) case response.code when 200 action = check_action(response) return action.power_management else check_fault(response) end end
Locates the `fence_agents` service.
@return [FenceAgentsService] A reference to `fence_agents` service.
# File lib/ovirtsdk4/services.rb, line 30732 def fence_agents_service return FenceAgentsService.new(@connection, "#{@path}/fenceagents") end
Executes the `force_select_spm` method.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the action should be performed asynchronously.
# File lib/ovirtsdk4/services.rb, line 30225 def force_select_spm(opts = {}) action = Action.new(opts) writer = XmlWriter.new(nil, true) ActionWriter.write_one(action, writer) body = writer.string writer.close request = Request.new({ :method => :POST, :path => "#{@path}/forceselectspm", :body => body, }) response = @connection.send(request) case response.code when 200 action = check_action(response) else check_fault(response) end end
Returns the representation of the object managed by this service.
@param opts [Hash] Additional options.
@option opts [Boolean] :filter Indicates if the results should be filtered according to the permissions of the user.
@return [Host]
# File lib/ovirtsdk4/services.rb, line 30254 def get(opts = {}) query = {} value = opts[:filter] unless value.nil? value = Writer.render_boolean(value) query['filter'] = value end request = Request.new(:method => :GET, :path => @path, :query => query) response = @connection.send(request) case response.code when 200 begin reader = XmlReader.new(response.body) return HostReader.read_one(reader) ensure reader.close end else check_fault(response) end end
Locates the `hooks` service.
@return [HostHooksService] A reference to `hooks` service.
# File lib/ovirtsdk4/services.rb, line 30740 def hooks_service return HostHooksService.new(@connection, "#{@path}/hooks") end
Executes the `install` method.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the installation should be performed asynchronously.
@option opts [Boolean] :deploy_hosted_engine When set to `true` it means this host should deploy also hosted
engine components. Missing value is treated as `true` i.e deploy. Omitting this parameter means `false` and will perform no operation in hosted engine area.
@option opts [Host] :host This `override_iptables` property is used to indicate if the firewall configuration should be
replaced by the default one.
@option opts [String] :image When installing an oVirt node a image ISO file is needed.
@option opts [String] :root_password The password of of the `root` user, used to connect to the host via SSH.
@option opts [Ssh] :ssh The SSH details used to connect to the host.
@option opts [Boolean] :undeploy_hosted_engine When set to `true` it means this host should un-deploy hosted engine
components and this host will not function as part of the High Availability cluster. Missing value is treated as `true` i.e un-deploy Omitting this parameter means `false` and will perform no operation in hosted engine area.
# File lib/ovirtsdk4/services.rb, line 30303 def install(opts = {}) action = Action.new(opts) writer = XmlWriter.new(nil, true) ActionWriter.write_one(action, writer) body = writer.string writer.close request = Request.new({ :method => :POST, :path => "#{@path}/install", :body => body, }) response = @connection.send(request) case response.code when 200 action = check_action(response) else check_fault(response) end end
Executes the `iscsi_discover` method.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the discovery should be performed asynchronously.
@option opts [IscsiDetails] :iscsi
@option opts [Array<String>] :iscsi_targets
# File lib/ovirtsdk4/services.rb, line 30334 def iscsi_discover(opts = {}) action = Action.new(opts) writer = XmlWriter.new(nil, true) ActionWriter.write_one(action, writer) body = writer.string writer.close request = Request.new({ :method => :POST, :path => "#{@path}/iscsidiscover", :body => body, }) response = @connection.send(request) case response.code when 200 action = check_action(response) return action.iscsi_targets else check_fault(response) end end
Executes the `iscsi_login` method.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the login should be performed asynchronously.
@option opts [IscsiDetails] :iscsi
# File lib/ovirtsdk4/services.rb, line 30364 def iscsi_login(opts = {}) action = Action.new(opts) writer = XmlWriter.new(nil, true) ActionWriter.write_one(action, writer) body = writer.string writer.close request = Request.new({ :method => :POST, :path => "#{@path}/iscsilogin", :body => body, }) response = @connection.send(request) case response.code when 200 action = check_action(response) else check_fault(response) end end
Locates the `katello_errata` service.
@return [KatelloErrataService] A reference to `katello_errata` service.
# File lib/ovirtsdk4/services.rb, line 30748 def katello_errata_service return KatelloErrataService.new(@connection, "#{@path}/katelloerrata") end
Locates the `network_attachments` service.
@return [NetworkAttachmentsService] A reference to `network_attachments` service.
# File lib/ovirtsdk4/services.rb, line 30756 def network_attachments_service return NetworkAttachmentsService.new(@connection, "#{@path}/networkattachments") end
Locates the `nics` service.
@return [HostNicsService] A reference to `nics` service.
# File lib/ovirtsdk4/services.rb, line 30764 def nics_service return HostNicsService.new(@connection, "#{@path}/nics") end
Locates the `numa_nodes` service.
@return [HostNumaNodesService] A reference to `numa_nodes` service.
# File lib/ovirtsdk4/services.rb, line 30772 def numa_nodes_service return HostNumaNodesService.new(@connection, "#{@path}/numanodes") end
Locates the `permissions` service.
@return [AssignedPermissionsService] A reference to `permissions` service.
# File lib/ovirtsdk4/services.rb, line 30780 def permissions_service return AssignedPermissionsService.new(@connection, "#{@path}/permissions") end
Executes the `refresh` method.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the refresh should be performed asynchronously.
# File lib/ovirtsdk4/services.rb, line 30391 def refresh(opts = {}) action = Action.new(opts) writer = XmlWriter.new(nil, true) ActionWriter.write_one(action, writer) body = writer.string writer.close request = Request.new({ :method => :POST, :path => "#{@path}/refresh", :body => body, }) response = @connection.send(request) case response.code when 200 action = check_action(response) else check_fault(response) end end
Deletes the object managed by this service.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the remove should be performed asynchronously.
# File lib/ovirtsdk4/services.rb, line 30417 def remove(opts = {}) query = {} value = opts[:async] unless value.nil? value = Writer.render_boolean(value) query['async'] = value end request = Request.new(:method => :DELETE, :path => @path, :query => query) response = @connection.send(request) unless response.code == 200 check_fault(response) end end
Locates the service corresponding to the given path.
@param path [String] The path of the service.
@return [Service] A reference to the service.
# File lib/ovirtsdk4/services.rb, line 30831 def service(path) if path.nil? || path == '' return self end if path == 'affinitylabels' return affinity_labels_service end if path.start_with?('affinitylabels/') return affinity_labels_service.service(path[15..-1]) end if path == 'devices' return devices_service end if path.start_with?('devices/') return devices_service.service(path[8..-1]) end if path == 'fenceagents' return fence_agents_service end if path.start_with?('fenceagents/') return fence_agents_service.service(path[12..-1]) end if path == 'hooks' return hooks_service end if path.start_with?('hooks/') return hooks_service.service(path[6..-1]) end if path == 'katelloerrata' return katello_errata_service end if path.start_with?('katelloerrata/') return katello_errata_service.service(path[14..-1]) end if path == 'networkattachments' return network_attachments_service end if path.start_with?('networkattachments/') return network_attachments_service.service(path[19..-1]) end if path == 'nics' return nics_service end if path.start_with?('nics/') return nics_service.service(path[5..-1]) end if path == 'numanodes' return numa_nodes_service end if path.start_with?('numanodes/') return numa_nodes_service.service(path[10..-1]) end if path == 'permissions' return permissions_service end if path.start_with?('permissions/') return permissions_service.service(path[12..-1]) end if path == 'statistics' return statistics_service end if path.start_with?('statistics/') return statistics_service.service(path[11..-1]) end if path == 'storage' return storage_service end if path.start_with?('storage/') return storage_service.service(path[8..-1]) end if path == 'storageconnectionextensions' return storage_connection_extensions_service end if path.start_with?('storageconnectionextensions/') return storage_connection_extensions_service.service(path[28..-1]) end if path == 'tags' return tags_service end if path.start_with?('tags/') return tags_service.service(path[5..-1]) end if path == 'unmanagednetworks' return unmanaged_networks_service end if path.start_with?('unmanagednetworks/') return unmanaged_networks_service.service(path[18..-1]) end raise Error.new("The path \"#{path}\" doesn't correspond to any service") end
This method is used to change the configuration of the network interfaces of a host.
For example, lets assume that you have a host with three network interfaces `eth0`, `eth1` and `eth2` and that you want to configure a new bond using `eth0` and `eth1`, and put a VLAN on top of it. Using a simple shell script and the `curl` command line HTTP client that can be done as follows:
#!/bin/sh -ex
url=“engine.example.com/ovirt-engine/api” user=“admin@internal” password=“…”
curl \ –verbose \ –cacert /etc/pki/ovirt-engine/ca.pem \ –user “${user}:${password}” \ –request POST \ –header “Version: 4” \ –header “Content-Type: application/xml” \ –header “Accept: application/xml” \ –data ' <action>
<modified_bonds> <host_nic> <name>bond0</name> <bonding> <options> <option> <name>mode</name> <value>4</value> </option> <option> <name>miimon</name> <value>100</value> </option> </options> <slaves> <host_nic> <name>eth1</name> </host_nic> <host_nic> <name>eth2</name> </host_nic> </slaves> </bonding> </host_nic> </modified_bonds> <modified_network_attachments> <network_attachment> <network> <name>myvlan</name> </network> <host_nic> <name>bond0</name> </host_nic> <ip_address_assignments> <assignment_method>static</assignment_method> <ip_address_assignment> <ip> <address>192.168.122.10</address> <netmask>255.255.255.0</netmask> </ip> </ip_address_assignment> </ip_address_assignments> </network_attachment> </modified_network_attachments> </action>
' \ “${url}/hosts/1ff7a191-2f3b-4eff-812b-9f91a30c3acc/setupnetworks”
Note that this is valid for version 4 of the API. In previous versions some elements were represented as XML attributes instead of XML elements. In particular the `options` and `ip` elements were represented as follows:
<options name=“mode” value=“4”/> <options name=“miimon” value=“100”/> <ip address=“192.168.122.10” netmask=“255.255.255.0”/>
Using the Python SDK the same can be done with the following code:
host.setupnetworks(
params.Action( modified_bonds=params.HostNics( host_nic=[ params.HostNIC( name="bond0", bonding=params.Bonding( options=params.Options( option=[ params.Option(name="mode", value="4"), params.Option(name="miimon", value="100"), ], ), slaves=params.Slaves( host_nic=[ params.HostNIC(name="eth1"), params.HostNIC(name="eth2"), ], ), ), ), ], ), modified_network_attachments=params.NetworkAttachments( network_attachment=[ params.NetworkAttachment( network=params.Network(name="myvlan"), host_nic=params.HostNIC(name="bond0"), ip_address_assignments=params.IpAddressAssignments( ip_address_assignment=[ params.IpAddressAssignment( assignment_method="static", ip=params.IP( address="192.168.122.10", netmask="255.255.255.0", ), ), ], ), ), ], ), ),
)
IMPORTANT: To make sure that the network configuration has been saved in the host, and that it will be applied when the host is rebooted, remember to call <<services/host/methods/commitnetconfig, commitnetconfig>>.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the action should be performed asynchronously.
@option opts [Boolean] :check_connectivity
@option opts [Integer] :connectivity_timeout
@option opts [Array<HostNic>] :modified_bonds
@option opts [Array<NetworkLabel>] :modified_labels
@option opts [Array<NetworkAttachment>] :modified_network_attachments
@option opts [Array<HostNic>] :removed_bonds
@option opts [Array<NetworkLabel>] :removed_labels
@option opts [Array<NetworkAttachment>] :removed_network_attachments
@option opts [Array<NetworkAttachment>] :synchronized_network_attachments
# File lib/ovirtsdk4/services.rb, line 30590 def setup_networks(opts = {}) action = Action.new(opts) writer = XmlWriter.new(nil, true) ActionWriter.write_one(action, writer) body = writer.string writer.close request = Request.new({ :method => :POST, :path => "#{@path}/setupnetworks", :body => body, }) response = @connection.send(request) case response.code when 200 action = check_action(response) else check_fault(response) end end
Locates the `statistics` service.
@return [StatisticsService] A reference to `statistics` service.
# File lib/ovirtsdk4/services.rb, line 30788 def statistics_service return StatisticsService.new(@connection, "#{@path}/statistics") end
Locates the `storage_connection_extensions` service.
@return [StorageServerConnectionExtensionsService] A reference to `storage_connection_extensions` service.
# File lib/ovirtsdk4/services.rb, line 30804 def storage_connection_extensions_service return StorageServerConnectionExtensionsService.new(@connection, "#{@path}/storageconnectionextensions") end
Locates the `storage` service.
@return [HostStorageService] A reference to `storage` service.
# File lib/ovirtsdk4/services.rb, line 30796 def storage_service return HostStorageService.new(@connection, "#{@path}/storage") end
Returns an string representation of this service.
@return [String]
# File lib/ovirtsdk4/services.rb, line 30927 def to_s return "#<#{HostService}:#{@path}>" end
Locates the `unmanaged_networks` service.
@return [UnmanagedNetworksService] A reference to `unmanaged_networks` service.
# File lib/ovirtsdk4/services.rb, line 30820 def unmanaged_networks_service return UnmanagedNetworksService.new(@connection, "#{@path}/unmanagednetworks") end
Executes the `unregistered_storage_domains_discover` method.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the discovery should be performed asynchronously.
@option opts [IscsiDetails] :iscsi
@option opts [Array<StorageDomain>] :storage_domains
# File lib/ovirtsdk4/services.rb, line 30621 def unregistered_storage_domains_discover(opts = {}) action = Action.new(opts) writer = XmlWriter.new(nil, true) ActionWriter.write_one(action, writer) body = writer.string writer.close request = Request.new({ :method => :POST, :path => "#{@path}/unregisteredstoragedomainsdiscover", :body => body, }) response = @connection.send(request) case response.code when 200 action = check_action(response) return action.storage_domains else check_fault(response) end end
Updates the `host`.
@param host [Host] The `host` to update. @param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the update should be performed asynchronously.
@return [Host]
# File lib/ovirtsdk4/services.rb, line 30652 def update(host) if host.is_a?(Hash) host = OvirtSDK4::Host.new(host) end query = {} value = opts[:async] unless value.nil? value = Writer.render_boolean(value) query['async'] = value end request = Request.new(:method => :PUT, :path => @path, :query => query) begin writer = XmlWriter.new(nil, true) HostWriter.write_one(host, writer) request.body = writer.string ensure writer.close end response = @connection.send(request) case response.code when 200 begin reader = XmlReader.new(response.body) return HostReader.read_one(reader) ensure reader.close end return result else check_fault(response) end end
Executes the `upgrade` method.
@param opts [Hash] Additional options.
@option opts [Boolean] :async Indicates if the upgrade should be performed asynchronously.
# File lib/ovirtsdk4/services.rb, line 30692 def upgrade(opts = {}) action = Action.new(opts) writer = XmlWriter.new(nil, true) ActionWriter.write_one(action, writer) body = writer.string writer.close request = Request.new({ :method => :POST, :path => "#{@path}/upgrade", :body => body, }) response = @connection.send(request) case response.code when 200 action = check_action(response) else check_fault(response) end end