|
214 | 214 | - "C(Note:)"
|
215 | 215 | - "This is supported since oVirt version 4.1."
|
216 | 216 | 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 |
217 | 230 | extends_documentation_fragment: ovirt
|
218 | 231 | '''
|
219 | 232 |
|
|
250 | 263 | - hwrng
|
251 | 264 | - random
|
252 | 265 |
|
| 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 | +
|
253 | 274 | # Remove cluster
|
254 | 275 | - ovirt_cluster:
|
255 | 276 | state: absent
|
@@ -352,6 +373,20 @@ def _get_mac_pool(self):
|
352 | 373 |
|
353 | 374 | return mac_pool
|
354 | 375 |
|
| 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 | + |
355 | 390 | def build_entity(self):
|
356 | 391 | sched_policy = self._get_sched_policy()
|
357 | 392 | return otypes.Cluster(
|
@@ -465,8 +500,30 @@ def build_entity(self):
|
465 | 500 | mac_pool=otypes.MacPool(
|
466 | 501 | id=get_id_by_name(self._connection.system_service().mac_pools_service(), self.param('mac_pool'))
|
467 | 502 | ) if self.param('mac_pool') else None,
|
| 503 | + external_network_providers=self._get_external_network_providers_entity(), |
468 | 504 | )
|
469 | 505 |
|
| 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 | + |
470 | 527 | def update_check(self, entity):
|
471 | 528 | sched_policy = self._get_sched_policy()
|
472 | 529 | migration_policy = getattr(entity.migration, 'policy', None)
|
@@ -515,7 +572,8 @@ def update_check(self, entity):
|
515 | 572 | equal(
|
516 | 573 | get_id_by_name(self._connection.system_service().mac_pools_service(), self.param('mac_pool'), raise_error=False),
|
517 | 574 | entity.mac_pool.id
|
518 |
| - ) |
| 575 | + ) and |
| 576 | + self._update_check_external_network_providers(entity) |
519 | 577 | )
|
520 | 578 |
|
521 | 579 |
|
@@ -564,6 +622,7 @@ def main():
|
564 | 622 | switch_type=dict(default=None, choices=['legacy', 'ovs']),
|
565 | 623 | compatibility_version=dict(default=None),
|
566 | 624 | mac_pool=dict(default=None),
|
| 625 | + external_network_providers=dict(default=None, type='list'), |
567 | 626 | )
|
568 | 627 | module = AnsibleModule(
|
569 | 628 | argument_spec=argument_spec,
|
|
0 commit comments