mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
Merge pull request #3455 from pdilung/affinity_groups
[ovirt] Implement affinity groups
This commit is contained in:
commit
9a05a06218
14 changed files with 237 additions and 0 deletions
|
@ -20,6 +20,8 @@ module Fog
|
|||
collection :volumes
|
||||
model :quota
|
||||
collection :quotas
|
||||
model :affinity_group
|
||||
collection :affinity_groups
|
||||
|
||||
request_path 'fog/ovirt/requests/compute'
|
||||
|
||||
|
@ -54,6 +56,13 @@ module Fog
|
|||
request :get_api_version
|
||||
request :list_quotas
|
||||
request :get_quota
|
||||
request :list_affinity_groups
|
||||
request :get_affinity_group
|
||||
request :list_affinity_group_vms
|
||||
request :create_affinity_group
|
||||
request :destroy_affinity_group
|
||||
request :add_to_affinity_group
|
||||
request :remove_from_affinity_group
|
||||
|
||||
module Shared
|
||||
# converts an OVIRT object into an hash for fog to consume.
|
||||
|
|
25
lib/fog/ovirt/models/compute/affinity_group.rb
Normal file
25
lib/fog/ovirt/models/compute/affinity_group.rb
Normal file
|
@ -0,0 +1,25 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Ovirt
|
||||
class AffinityGroup < Fog::Model
|
||||
identity :id
|
||||
|
||||
attribute :name
|
||||
attribute :positive
|
||||
attribute :enforcing
|
||||
|
||||
def vms
|
||||
id.nil? ? [] : service.list_affinity_group_vms(id)
|
||||
end
|
||||
|
||||
def destroy
|
||||
service.destroy_affinity_group(id)
|
||||
end
|
||||
|
||||
def to_s
|
||||
name
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
20
lib/fog/ovirt/models/compute/affinity_groups.rb
Normal file
20
lib/fog/ovirt/models/compute/affinity_groups.rb
Normal file
|
@ -0,0 +1,20 @@
|
|||
require 'fog/core/collection'
|
||||
require 'fog/ovirt/models/compute/affinity_group'
|
||||
|
||||
module Fog
|
||||
module Compute
|
||||
class Ovirt
|
||||
class AffinityGroups < Fog::Collection
|
||||
model Fog::Compute::Ovirt::AffinityGroup
|
||||
|
||||
def all(filters = {})
|
||||
load service.list_affinity_groups(filters)
|
||||
end
|
||||
|
||||
def get(id)
|
||||
new service.get_affinity_group(id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -99,6 +99,16 @@ module Fog
|
|||
service.detach_volume(id, attrs)
|
||||
end
|
||||
|
||||
def add_to_affinity_group(attrs)
|
||||
wait_for { stopped? } if attrs[:blocking]
|
||||
service.add_to_affinity_group(id, attrs)
|
||||
end
|
||||
|
||||
def remove_from_affinity_group(attrs)
|
||||
wait_for { stopped? } if attrs[:blocking]
|
||||
service.remove_from_affinity_group(id, attrs)
|
||||
end
|
||||
|
||||
def start(options = {})
|
||||
wait_for { !locked? } if options[:blocking]
|
||||
service.vm_action(:id =>id, :action => :start)
|
||||
|
|
21
lib/fog/ovirt/requests/compute/add_to_affinity_group.rb
Normal file
21
lib/fog/ovirt/requests/compute/add_to_affinity_group.rb
Normal file
|
@ -0,0 +1,21 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Ovirt
|
||||
class Real
|
||||
def add_to_affinity_group(id, options = {})
|
||||
raise ArgumentError, "instance id is a required parameter" unless id
|
||||
raise ArgumentError, "affinity group id is a required parameter for add-to-affinity-group" unless options.key? :id
|
||||
client.add_vm_to_affinity_group(options[:id], id)
|
||||
end
|
||||
end
|
||||
|
||||
class Mock
|
||||
def add_to_affinity_group(id, options = {})
|
||||
raise ArgumentError, "instance id is a required parameter" unless id
|
||||
raise ArgumentError, "affinity group id is a required parameter for add-to-affinity-group" unless options.key? :id
|
||||
true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
18
lib/fog/ovirt/requests/compute/create_affinity_group.rb
Normal file
18
lib/fog/ovirt/requests/compute/create_affinity_group.rb
Normal file
|
@ -0,0 +1,18 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Ovirt
|
||||
class Real
|
||||
def create_affinity_group(attrs)
|
||||
client.create_affinity_group(attrs)
|
||||
end
|
||||
end
|
||||
|
||||
class Mock
|
||||
def create_affinity_group(attrs)
|
||||
xml = read_xml('affinitygroup.xml')
|
||||
OVIRT::AffinityGroup::new(self, Nokogiri::XML(xml).root)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
19
lib/fog/ovirt/requests/compute/destroy_affinity_group.rb
Normal file
19
lib/fog/ovirt/requests/compute/destroy_affinity_group.rb
Normal file
|
@ -0,0 +1,19 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Ovirt
|
||||
class Real
|
||||
def destroy_affinity_group(id)
|
||||
raise ArgumentError, "instance id is a required parameter" unless id
|
||||
client.destroy_affinity_group(id)
|
||||
end
|
||||
end
|
||||
|
||||
class Mock
|
||||
def destroy_affinity_group(id)
|
||||
raise ArgumentError, "instance id is a required parameter" unless id
|
||||
true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
18
lib/fog/ovirt/requests/compute/get_affinity_group.rb
Normal file
18
lib/fog/ovirt/requests/compute/get_affinity_group.rb
Normal file
|
@ -0,0 +1,18 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Ovirt
|
||||
class Real
|
||||
def get_affinity_group(id)
|
||||
ovirt_attrs client.affinity_group(id)
|
||||
end
|
||||
end
|
||||
|
||||
class Mock
|
||||
def get_affinity_group(id)
|
||||
xml = read_xml('affinitygroup.xml')
|
||||
ovirt_attrs OVIRT::AffinityGroup::new(self, Nokogiri::XML(xml).root)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
22
lib/fog/ovirt/requests/compute/list_affinity_group_vms.rb
Normal file
22
lib/fog/ovirt/requests/compute/list_affinity_group_vms.rb
Normal file
|
@ -0,0 +1,22 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Ovirt
|
||||
class Real
|
||||
def list_affinity_group_vms(id)
|
||||
client.affinity_group_vms(id).map {|vm| servers.get(vm.id)}
|
||||
end
|
||||
end
|
||||
|
||||
class Mock
|
||||
def list_affinity_group_vms(id)
|
||||
vms = []
|
||||
Nokogiri::XML(read_xml('affinitygroup_vms.xml')).xpath('/vms/vm/@id').each do |id|
|
||||
xml = Nokogiri::XML(read_xml('vms.xml')).xpath("/vms/vm[@id='%s']" % id.value).first
|
||||
vms << ovirt_attrs(OVIRT::VM::new(self, xml))
|
||||
end
|
||||
vms
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
20
lib/fog/ovirt/requests/compute/list_affinity_groups.rb
Normal file
20
lib/fog/ovirt/requests/compute/list_affinity_groups.rb
Normal file
|
@ -0,0 +1,20 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Ovirt
|
||||
class Real
|
||||
def list_affinity_groups(filters = {})
|
||||
client.affinity_groups(filters).map {|ovirt_obj| ovirt_attrs ovirt_obj}
|
||||
end
|
||||
end
|
||||
|
||||
class Mock
|
||||
def list_affinity_groups(filters = {})
|
||||
xml = read_xml('affinitygroups.xml')
|
||||
Nokogiri::XML(xml).xpath('/affinity_groups/affinity_group').map do |ag|
|
||||
ovirt_attrs OVIRT::AffinityGroup::new(self, ag)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<affinity_group href="/api/clusters/a240aac1-d03a-4c69-923e-a295200539fa/affinitygroups/9aaec56b-e24d-4fce-82a1-21a7b642ab0f" id="9aaec56b-e24d-4fce-82a1-21a7b642ab0f">
|
||||
<name>test1_ag</name>
|
||||
<link href="/api/clusters/a240aac1-d03a-4c69-923e-a295200539fa/affinitygroups/9aaec56b-e24d-4fce-82a1-21a7b642ab0f/vms" rel="vms"/>
|
||||
<cluster href="/api/clusters/a240aac1-d03a-4c69-923e-a295200539fa" id="a240aac1-d03a-4c69-923e-a295200539fa"/>
|
||||
<positive>true</positive>
|
||||
<enforcing>false</enforcing>
|
||||
</affinity_group>
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<vms>
|
||||
<vm href="/api/vms/5ee86332-7b19-465b-8801-2a12ed0d6c1b" id="5ee86332-7b19-465b-8801-2a12ed0d6c1b">
|
||||
<name>test-vm1</name>
|
||||
</vm>
|
||||
<vm href="/api/vms/349764bb-eba3-4466-abef-f18f4c40c9f1" id="349764bb-eba3-4466-abef-f18f4c40c9f1">
|
||||
<name>fosdem</name>
|
||||
</vm>
|
||||
</vms>
|
17
lib/fog/ovirt/requests/compute/mock_files/affinitygroups.xml
Normal file
17
lib/fog/ovirt/requests/compute/mock_files/affinitygroups.xml
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<affinity_groups>
|
||||
<affinity_group href="/api/clusters/a240aac1-d03a-4c69-923e-a295200539fa/affinitygroups/ff73a83f-10b2-44ae-8c98-a29b13ae0c19" id="ff73a83f-10b2-44ae-8c98-a29b13ae0c19">
|
||||
<name>test2_ag</name>
|
||||
<link href="/api/clusters/a240aac1-d03a-4c69-923e-a295200539fa/affinitygroups/ff73a83f-10b2-44ae-8c98-a29b13ae0c19/vms" rel="vms"/>
|
||||
<cluster href="/api/clusters/a240aac1-d03a-4c69-923e-a295200539fa" id="a240aac1-d03a-4c69-923e-a295200539fa"/>
|
||||
<positive>true</positive>
|
||||
<enforcing>true</enforcing>
|
||||
</affinity_group>
|
||||
<affinity_group href="/api/clusters/a240aac1-d03a-4c69-923e-a295200539fa/affinitygroups/9aaec56b-e24d-4fce-82a1-21a7b642ab0f" id="9aaec56b-e24d-4fce-82a1-21a7b642ab0f">
|
||||
<name>test1_ag</name>
|
||||
<link href="/api/clusters/a240aac1-d03a-4c69-923e-a295200539fa/affinitygroups/9aaec56b-e24d-4fce-82a1-21a7b642ab0f/vms" rel="vms"/>
|
||||
<cluster href="/api/clusters/a240aac1-d03a-4c69-923e-a295200539fa" id="a240aac1-d03a-4c69-923e-a295200539fa"/>
|
||||
<positive>true</positive>
|
||||
<enforcing>false</enforcing>
|
||||
</affinity_group>
|
||||
</affinity_groups>
|
21
lib/fog/ovirt/requests/compute/remove_from_affinity_group.rb
Normal file
21
lib/fog/ovirt/requests/compute/remove_from_affinity_group.rb
Normal file
|
@ -0,0 +1,21 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Ovirt
|
||||
class Real
|
||||
def remove_from_affinity_group(id, options = {})
|
||||
raise ArgumentError, "instance id is a required parameter" unless id
|
||||
raise ArgumentError, "affinity group id is a required parameter for remove-from-affinity-group" unless options.key? :id
|
||||
client.delete_vm_from_affinity_group(options[:id], id)
|
||||
end
|
||||
end
|
||||
|
||||
class Mock
|
||||
def remove_from_affinity_group(id, options = {})
|
||||
raise ArgumentError, "instance id is a required parameter" unless id
|
||||
raise ArgumentError, "affinity group id is a required parameter for remove-from-affinity-group" unless options.key? :id
|
||||
true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue