Skip to content

Commit 790cb07

Browse files
authored
Merge pull request #806 from Kuldip-Nanda/placement_group
placement_group in openstack
2 parents 524a6d8 + 6cfa0fc commit 790cb07

File tree

18 files changed

+9671
-14469
lines changed

18 files changed

+9671
-14469
lines changed

app/models/manageiq/providers/openstack/cloud_manager.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class ManageIQ::Providers::Openstack::CloudManager < ManageIQ::Providers::CloudM
1414
require_nested :OrchestrationStack
1515
require_nested :OrchestrationTemplate
1616
require_nested :VnfdTemplate
17+
require_nested :PlacementGroup
1718
require_nested :Provision
1819
require_nested :ProvisionWorkflow
1920
require_nested :Refresher
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class ManageIQ::Providers::Openstack::CloudManager::PlacementGroup < ::PlacementGroup
2+
include ManageIQ::Providers::Openstack::HelperMethods
3+
end

app/models/manageiq/providers/openstack/inventory/collector.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class ManageIQ::Providers::Openstack::Inventory::Collector < ManageIQ::Providers
3131
attr_reader :cloud_volume_types
3232
attr_reader :servers
3333
attr_reader :hosts
34+
attr_reader :server_groups
3435

3536
def initialize(_manager, _target)
3637
super
@@ -47,6 +48,7 @@ def initialize_inventory_sources
4748
@flavors = []
4849
@host_aggregates = []
4950
@key_pairs = []
51+
@server_groups = nil
5052
@images = []
5153
@orchestration_stacks = nil
5254
@quotas = []

app/models/manageiq/providers/openstack/inventory/collector/cloud_manager.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ def host_aggregates
5555
@host_aggregates = safe_list { compute_service.aggregates.all }
5656
end
5757

58+
def server_groups
59+
@server_groups ||= compute_service.handled_list(:server_groups, {}, openstack_admin?)
60+
end
61+
62+
def server_group_by_vm_id
63+
@server_group_by_vm_id ||= server_groups.each_with_object({}) { |sg, result| sg.members.each { |vm_id| result[vm_id] = sg } }
64+
end
65+
5866
def key_pairs
5967
return @key_pairs if @key_pairs.any?
6068
@key_pairs = compute_service.handled_list(:key_pairs, {}, openstack_admin?)

app/models/manageiq/providers/openstack/inventory/collector/target_collection.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,14 @@ def key_pairs
166166
@key_pairs = compute_service.handled_list(:key_pairs, {}, openstack_admin?)
167167
end
168168

169+
def server_groups
170+
@server_groups ||= compute_service.handled_list(:server_groups, {}, openstack_admin?)
171+
end
172+
173+
def server_group_by_vm_id
174+
@server_group_by_vm_id ||= server_groups.each_with_object({}) { |sg, result| sg.members.each { |vm_id| result[vm_id] = sg } }
175+
end
176+
169177
def flavors_by_id
170178
@flavors_by_id ||= {}
171179
end

app/models/manageiq/providers/openstack/inventory/parser/cloud_manager.rb

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ def parse
99
auth_key_pairs
1010
orchestration_stacks
1111
quotas
12+
placement_groups
1213
vms
1314
cloud_tenants
1415
vnfs
@@ -146,6 +147,38 @@ def host_aggregates
146147
end
147148
end
148149

150+
def placement_groups
151+
collector.server_groups.each do |spgrp|
152+
pgrp = persister.placement_groups.find_or_build(spgrp.id)
153+
pgrp.name = spgrp.name
154+
pgrp.ems_ref = spgrp.id
155+
pgrp.policy = spgrp.policies[0]
156+
157+
# right now not filling in pgrp.availability_zone.
158+
# we are not getting any ems_ref from the webapi. We are getting
159+
#
160+
#
161+
# For instance collector.placement_groups() returns
162+
# [ <Fog::Compute::OpenStack::ServerGroup
163+
# id="a31f76c9-5ed6-43b4-86ae-7e2cbcf68302",
164+
# name="Kuldip-VM-Affinity-Rule",
165+
# policies=["affinity"],
166+
# members=["2b5fb204-34ff-445b-aea4-a903d4b6143e"]
167+
# >,
168+
# <Fog::Compute::OpenStack::ServerGroup
169+
# id="1734c483-803b-4dcf-94e3-de058a6ddb87",
170+
# name="jay-collection-rule",
171+
# policies=["anti-affinity"],
172+
# members=[]
173+
# >]
174+
#
175+
# however like
176+
# https://github.com/ManageIQ/manageiq-providers-ibm_cloud/blob/master/app/models/manageiq/providers/ibm_cloud/inventory/parser/power_virtual_servers.rb#L183
177+
# we are getting persister.cloud_manager.uid_ems as "default", which is not correctr.
178+
# pgrp.availability_zone = persister.availability_zones.lazy_find(persister.cloud_manager.uid_ems),
179+
end
180+
end
181+
149182
def auth_key_pairs
150183
collector.key_pairs.each do |kp|
151184
key_pair = persister.auth_key_pairs.find_or_build(kp.name)
@@ -307,6 +340,7 @@ def parse_vm(vm, hosts)
307340
end
308341

309342
availability_zone = vm.availability_zone.blank? ? "null_az" : vm.availability_zone
343+
placement_group = collector.server_group_by_vm_id[vm.id]
310344
miq_template_lazy = persister.miq_templates.lazy_find(vm.image["id"])
311345

312346
server = persister.vms.find_or_build(vm.id.to_s)
@@ -318,6 +352,7 @@ def parse_vm(vm, hosts)
318352
server.host = parent_host
319353
server.ems_cluster = parent_cluster
320354
server.availability_zone = persister.availability_zones.lazy_find(availability_zone)
355+
server.placement_group = persister.placement_groups.lazy_find(placement_group.id) if placement_group
321356
server.key_pairs = [persister.auth_key_pairs.lazy_find(vm.key_name)].compact
322357
server.cloud_tenant = persister.cloud_tenants.lazy_find(vm.tenant_id.to_s)
323358
server.genealogy_parent = miq_template_lazy unless vm.image["id"].nil?

app/models/manageiq/providers/openstack/inventory/persister/definitions/cloud_collections.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ def initialize_cloud_inventory_collections
1919
add_cloud_collection(:flavors)
2020
add_cloud_collection(:hardwares)
2121
add_cloud_collection(:operating_systems)
22+
add_cloud_collection(:placement_groups)
2223
add_cloud_collection(:disks)
2324
add_cloud_collection(:snapshots)
2425
add_cloud_collection(:networks)

spec/models/manageiq/providers/openstack/cloud_manager/stubbed_refresher_spec.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ def setup_mocked_collector
179179
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::CloudManager).to receive(:availability_zones_volume).and_return(mocked_availability_zones)
180180
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::CloudManager).to receive(:cloud_services).and_return(mocked_cloud_services)
181181
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::CloudManager).to receive(:flavors).and_return(mocked_flavors)
182+
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::CloudManager).to receive(:server_groups).and_return(mocked_server_groups)
182183
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::CloudManager).to receive(:host_aggregates).and_return(mocked_host_aggregates)
183184
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::CloudManager).to receive(:images).and_return(mocked_miq_templates)
184185
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::CloudManager).to receive(:key_pairs).and_return(mocked_key_pairs)
@@ -200,6 +201,7 @@ def setup_mocked_collector
200201
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::TargetCollection).to receive(:cloud_volume_backups).and_return(mocked_cloud_volume_backups)
201202
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::TargetCollection).to receive(:key_pairs).and_return(mocked_key_pairs)
202203
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::TargetCollection).to receive(:cloud_subnets).and_return([])
204+
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::TargetCollection).to receive(:server_groups).and_return([])
203205
end
204206

205207
def assert_ems

spec/models/manageiq/providers/openstack/network_manager/cloud_subnet_refresh_spec.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ def setup_mocked_collector
126126
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::CloudManager).to receive(:cloud_services).and_return([])
127127
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::CloudManager).to receive(:vms).and_return([])
128128
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::CloudManager).to receive(:tenants).and_return([])
129+
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::CloudManager).to receive(:server_groups).and_return([])
129130
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::NetworkManager).to receive(:orchestration_stacks).and_return([])
130131
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::NetworkManager).to receive(:cloud_networks).and_return(mocked_cloud_networks)
131132
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::NetworkManager).to receive(:cloud_subnets).and_return(mocked_cloud_subnets)
@@ -141,6 +142,7 @@ def setup_mocked_targeted_collector
141142
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::TargetCollection).to receive(:cloud_services).and_return([])
142143
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::TargetCollection).to receive(:vms).and_return([])
143144
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::TargetCollection).to receive(:tenants).and_return([])
145+
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::TargetCollection).to receive(:server_groups).and_return([])
144146
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::TargetCollection).to receive(:orchestration_stacks).and_return([])
145147
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::TargetCollection).to receive(:cloud_networks).and_return(mocked_cloud_networks)
146148
allow_any_instance_of(ManageIQ::Providers::Openstack::Inventory::Collector::TargetCollection).to receive(:cloud_subnets).and_return(mocked_cloud_subnets)

spec/models/manageiq/providers/openstack/openstack_stubs.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ def mocked_flavors
9090
mocked_flavors
9191
end
9292

93+
def mocked_server_groups
94+
[]
95+
end
96+
9397
def mocked_host_aggregates
9498
mocked_host_aggregates = []
9599
test_counts[:host_aggregates_count].times do |i|

0 commit comments

Comments
 (0)