Skip to content

Commit 2b08fd3

Browse files
dominikholleransibot
authored andcommitted
ovirt_cluster: Add external network providers (ansible#32433)
1 parent 10bfa89 commit 2b08fd3

File tree

1 file changed

+60
-1
lines changed

1 file changed

+60
-1
lines changed

lib/ansible/modules/cloud/ovirt/ovirt_cluster.py

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,19 @@
214214
- "C(Note:)"
215215
- "This is supported since oVirt version 4.1."
216216
version_added: 2.4
217+
external_network_providers:
218+
description:
219+
- "List of references to the external network providers available
220+
in the cluster. If the automatic deployment of the external
221+
network provider is supported, the networks of the referenced
222+
network provider are available on every host in the cluster."
223+
- "External network provider is described by following dictionary:"
224+
- "C(name) - Name of the external network provider. Either C(name)
225+
or C(id) is required."
226+
- "C(id) - ID of the external network provider. Either C(name) or
227+
C(id) is required."
228+
- "This is supported since oVirt version 4.2."
229+
version_added: 2.5
217230
extends_documentation_fragment: ovirt
218231
'''
219232

@@ -250,6 +263,14 @@
250263
- hwrng
251264
- random
252265
266+
# Create cluster with default network provider
267+
- ovirt_cluster:
268+
name: mycluster
269+
data_center: Default
270+
cpu_type: Intel SandyBridge Family
271+
external_network_providers:
272+
- name: ovirt-provider-ovn
273+
253274
# Remove cluster
254275
- ovirt_cluster:
255276
state: absent
@@ -352,6 +373,20 @@ def _get_mac_pool(self):
352373

353374
return mac_pool
354375

376+
def _get_external_network_providers(self):
377+
return self.param('external_network_providers') or []
378+
379+
def _get_external_network_provider_id(self, external_provider):
380+
return external_provider.get('id') or get_id_by_name(
381+
self._connection.system_service().openstack_network_providers_service(),
382+
external_provider.get('name')
383+
)
384+
385+
def _get_external_network_providers_entity(self):
386+
if self.param('external_network_providers') is not None:
387+
return [otypes.ExternalProvider(id=self._get_external_network_provider_id(external_provider))
388+
for external_provider in self.param('external_network_providers')]
389+
355390
def build_entity(self):
356391
sched_policy = self._get_sched_policy()
357392
return otypes.Cluster(
@@ -465,8 +500,30 @@ def build_entity(self):
465500
mac_pool=otypes.MacPool(
466501
id=get_id_by_name(self._connection.system_service().mac_pools_service(), self.param('mac_pool'))
467502
) if self.param('mac_pool') else None,
503+
external_network_providers=self._get_external_network_providers_entity(),
468504
)
469505

506+
def _matches_entity(self, item, entity):
507+
return equal(item.get('id'), entity.id) and equal(item.get('name'), entity.name)
508+
509+
def _update_check_external_network_providers(self, entity):
510+
if entity.external_network_providers is None:
511+
return not self.param('external_network_providers')
512+
entity_providers = self._connection.follow_link(entity.external_network_providers)
513+
entity_provider_ids = [provider.id for provider in entity_providers]
514+
entity_provider_names = [provider.name for provider in entity_providers]
515+
for provider in self._get_external_network_providers():
516+
if provider.get('id'):
517+
if provider.get('id') not in entity_provider_ids:
518+
return False
519+
elif provider.get('name') and provider.get('name') not in entity_provider_names:
520+
return False
521+
for entity_provider in entity_providers:
522+
if not any([self._matches_entity(provider, entity_provider)
523+
for provider in self._get_external_network_providers()]):
524+
return False
525+
return True
526+
470527
def update_check(self, entity):
471528
sched_policy = self._get_sched_policy()
472529
migration_policy = getattr(entity.migration, 'policy', None)
@@ -515,7 +572,8 @@ def update_check(self, entity):
515572
equal(
516573
get_id_by_name(self._connection.system_service().mac_pools_service(), self.param('mac_pool'), raise_error=False),
517574
entity.mac_pool.id
518-
)
575+
) and
576+
self._update_check_external_network_providers(entity)
519577
)
520578

521579

@@ -564,6 +622,7 @@ def main():
564622
switch_type=dict(default=None, choices=['legacy', 'ovs']),
565623
compatibility_version=dict(default=None),
566624
mac_pool=dict(default=None),
625+
external_network_providers=dict(default=None, type='list'),
567626
)
568627
module = AnsibleModule(
569628
argument_spec=argument_spec,

0 commit comments

Comments
 (0)