diff options
Diffstat (limited to 'lib/ansible/modules/cloud/ovirt/ovirt_network.py')
-rw-r--r-- | lib/ansible/modules/cloud/ovirt/ovirt_network.py | 360 |
1 files changed, 0 insertions, 360 deletions
diff --git a/lib/ansible/modules/cloud/ovirt/ovirt_network.py b/lib/ansible/modules/cloud/ovirt/ovirt_network.py deleted file mode 100644 index ba88c5a798..0000000000 --- a/lib/ansible/modules/cloud/ovirt/ovirt_network.py +++ /dev/null @@ -1,360 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# Copyright (c) 2016 Red Hat, Inc. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. -# - -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - - -DOCUMENTATION = ''' ---- -module: ovirt_network -short_description: Module to manage logical networks in oVirt/RHV -version_added: "2.3" -author: "Ondra Machacek (@machacekondra)" -description: - - "Module to manage logical networks in oVirt/RHV" -options: - id: - description: - - "ID of the network to manage." - version_added: "2.8" - name: - description: - - "Name of the network to manage." - required: true - state: - description: - - "Should the network be present or absent" - choices: ['present', 'absent'] - default: present - data_center: - description: - - "Datacenter name where network reside." - description: - description: - - "Description of the network." - comment: - description: - - "Comment of the network." - vlan_tag: - description: - - "Specify VLAN tag." - external_provider: - description: - - "Name of external network provider." - - "At first it tries to import the network when not found it will create network in external provider." - version_added: 2.8 - vm_network: - description: - - "If I(True) network will be marked as network for VM." - - "VM network carries traffic relevant to the virtual machine." - type: bool - mtu: - description: - - "Maximum transmission unit (MTU) of the network." - clusters: - description: - - "List of dictionaries describing how the network is managed in specific cluster." - suboptions: - name: - description: - - Cluster name. - assigned: - description: - - I(true) if the network should be assigned to cluster. Default is I(true). - type: bool - required: - description: - - I(true) if the network must remain operational for all hosts associated with this network. - type: bool - display: - description: - - I(true) if the network should marked as display network. - type: bool - migration: - description: - - I(true) if the network should marked as migration network. - type: bool - gluster: - description: - - I(true) if the network should marked as gluster network. - type: bool - label: - description: - - "Name of the label to assign to the network." - version_added: "2.5" -extends_documentation_fragment: ovirt -''' - -EXAMPLES = ''' -# Examples don't contain auth parameter for simplicity, -# look at ovirt_auth module to see how to reuse authentication: - -# Create network -- ovirt_network: - data_center: mydatacenter - name: mynetwork - vlan_tag: 1 - vm_network: true - -# Remove network -- ovirt_network: - state: absent - name: mynetwork - -# Change Network Name -- ovirt_network: - id: 00000000-0000-0000-0000-000000000000 - name: "new_network_name" - data_center: mydatacenter - -# Add network from external provider -- ovirt_network: - data_center: mydatacenter - name: mynetwork - external_provider: ovirt-provider-ovn -''' - -RETURN = ''' -id: - description: "ID of the managed network" - returned: "On success if network is found." - type: str - sample: 7de90f31-222c-436c-a1ca-7e655bd5b60c -network: - description: "Dictionary of all the network attributes. Network attributes can be found on your oVirt/RHV instance - at following url: http://ovirt.github.io/ovirt-engine-api-model/master/#types/network." - returned: "On success if network is found." - type: dict -''' - -import traceback - -try: - import ovirtsdk4.types as otypes -except ImportError: - pass - -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.ovirt import ( - BaseModule, - check_sdk, - check_params, - create_connection, - equal, - ovirt_full_argument_spec, - search_by_name, - get_id_by_name, - get_dict_of_struct, - get_entity -) - - -class NetworksModule(BaseModule): - def build_entity(self): - if self.param('external_provider'): - ons_service = self._connection.system_service().openstack_network_providers_service() - on_service = ons_service.provider_service(get_id_by_name(ons_service, self.param('external_provider'))) - return otypes.Network( - name=self._module.params['name'], - comment=self._module.params['comment'], - description=self._module.params['description'], - id=self._module.params['id'], - data_center=otypes.DataCenter( - name=self._module.params['data_center'], - ) if self._module.params['data_center'] else None, - vlan=otypes.Vlan( - self._module.params['vlan_tag'], - ) if self._module.params['vlan_tag'] else None, - usages=[ - otypes.NetworkUsage.VM if self._module.params['vm_network'] else None - ] if self._module.params['vm_network'] is not None else None, - mtu=self._module.params['mtu'], - external_provider=otypes.OpenStackNetworkProvider(id=on_service.get().id) - if self.param('external_provider') else None, - ) - - def post_create(self, entity): - self._update_label_assignments(entity) - - def _update_label_assignments(self, entity): - if self.param('label') is None: - return - - labels_service = self._service.service(entity.id).network_labels_service() - labels = [lbl.id for lbl in labels_service.list()] - if not self.param('label') in labels: - if not self._module.check_mode: - if labels: - labels_service.label_service(labels[0]).remove() - labels_service.add( - label=otypes.NetworkLabel(id=self.param('label')) - ) - self.changed = True - - def update_check(self, entity): - self._update_label_assignments(entity) - return ( - equal(self._module.params.get('comment'), entity.comment) and - equal(self._module.params.get('name'), entity.name) and - equal(self._module.params.get('description'), entity.description) and - equal(self._module.params.get('vlan_tag'), getattr(entity.vlan, 'id', None)) and - equal(self._module.params.get('vm_network'), True if entity.usages else False) and - equal(self._module.params.get('mtu'), entity.mtu) - ) - - -class ClusterNetworksModule(BaseModule): - - def __init__(self, network_id, cluster_network, *args, **kwargs): - super(ClusterNetworksModule, self).__init__(*args, **kwargs) - self._network_id = network_id - self._cluster_network = cluster_network - self._old_usages = [] - self._cluster_network_entity = get_entity(self._service.network_service(network_id)) - if self._cluster_network_entity is not None: - self._old_usages = self._cluster_network_entity.usages - - def build_entity(self): - return otypes.Network( - id=self._network_id, - name=self._module.params['name'], - required=self._cluster_network.get('required'), - display=self._cluster_network.get('display'), - usages=list(set([ - otypes.NetworkUsage(usage) - for usage in ['display', 'gluster', 'migration'] - if self._cluster_network.get(usage, False) - ] + self._old_usages)) - if ( - self._cluster_network.get('display') is not None or - self._cluster_network.get('gluster') is not None or - self._cluster_network.get('migration') is not None - ) else None, - ) - - def update_check(self, entity): - return ( - equal(self._cluster_network.get('required'), entity.required) and - equal(self._cluster_network.get('display'), entity.display) and - all( - x in [ - str(usage) - for usage in getattr(entity, 'usages', []) - # VM + MANAGEMENT is part of root network - if usage != otypes.NetworkUsage.VM and usage != otypes.NetworkUsage.MANAGEMENT - ] - for x in [ - usage - for usage in ['display', 'gluster', 'migration'] - if self._cluster_network.get(usage, False) - ] - ) - ) - - -def main(): - argument_spec = ovirt_full_argument_spec( - state=dict( - choices=['present', 'absent'], - default='present', - ), - data_center=dict(required=True), - id=dict(default=None), - name=dict(required=True), - description=dict(default=None), - comment=dict(default=None), - external_provider=dict(default=None), - vlan_tag=dict(default=None, type='int'), - vm_network=dict(default=None, type='bool'), - mtu=dict(default=None, type='int'), - clusters=dict(default=None, type='list'), - label=dict(default=None), - ) - module = AnsibleModule( - argument_spec=argument_spec, - supports_check_mode=True, - ) - - check_sdk(module) - check_params(module) - - try: - auth = module.params.pop('auth') - connection = create_connection(auth) - clusters_service = connection.system_service().clusters_service() - networks_service = connection.system_service().networks_service() - networks_module = NetworksModule( - connection=connection, - module=module, - service=networks_service, - ) - state = module.params['state'] - search_params = { - 'name': module.params['name'], - 'datacenter': module.params['data_center'], - } - if state == 'present': - imported = False - if module.params.get('external_provider') and module.params.get('name') not in [net.name for net in networks_service.list()]: - # Try to import network - ons_service = connection.system_service().openstack_network_providers_service() - on_service = ons_service.provider_service(get_id_by_name(ons_service, module.params.get('external_provider'))) - on_networks_service = on_service.networks_service() - if module.params.get('name') in [net.name for net in on_networks_service.list()]: - network_service = on_networks_service.network_service(get_id_by_name(on_networks_service, module.params.get('name'))) - network_service.import_(data_center=otypes.DataCenter(name=module.params.get('data_center'))) - imported = True - - ret = networks_module.create(search_params=search_params) - ret['changed'] = ret['changed'] or imported - # Update clusters networks: - if module.params.get('clusters') is not None: - for param_cluster in module.params.get('clusters'): - cluster = search_by_name(clusters_service, param_cluster.get('name')) - if cluster is None: - raise Exception("Cluster '%s' was not found." % param_cluster.get('name')) - cluster_networks_service = clusters_service.service(cluster.id).networks_service() - cluster_networks_module = ClusterNetworksModule( - network_id=ret['id'], - cluster_network=param_cluster, - connection=connection, - module=module, - service=cluster_networks_service, - ) - if param_cluster.get('assigned', True): - ret = cluster_networks_module.create() - else: - ret = cluster_networks_module.remove() - - elif state == 'absent': - ret = networks_module.remove(search_params=search_params) - - module.exit_json(**ret) - except Exception as e: - module.fail_json(msg=str(e), exception=traceback.format_exc()) - finally: - connection.close(logout=auth.get('token') is None) - - -if __name__ == "__main__": - main() |