summaryrefslogtreecommitdiff
path: root/lib/ansible/modules/cloud/cloudstack/cs_image_store.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/modules/cloud/cloudstack/cs_image_store.py')
-rw-r--r--lib/ansible/modules/cloud/cloudstack/cs_image_store.py251
1 files changed, 0 insertions, 251 deletions
diff --git a/lib/ansible/modules/cloud/cloudstack/cs_image_store.py b/lib/ansible/modules/cloud/cloudstack/cs_image_store.py
deleted file mode 100644
index f54bba2e1b..0000000000
--- a/lib/ansible/modules/cloud/cloudstack/cs_image_store.py
+++ /dev/null
@@ -1,251 +0,0 @@
-#!/usr/bin/python
-
-# Copyright: (c) 2019, Patryk Cichy @PatTheSilent
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-ANSIBLE_METADATA = {
- 'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'community'
-}
-
-DOCUMENTATION = '''
----
-module: cs_image_store
-
-short_description: Manages CloudStack Image Stores.
-
-version_added: "2.8"
-
-description:
- - Deploy, remove, recreate CloudStack Image Stores.
-
-options:
- url:
- description:
- - The URL for the Image Store.
- - Required when I(state=present).
- type: str
- name:
- description:
- - The ID of the Image Store. Required when deleting a Image Store.
- required: true
- type: str
- zone:
- description:
- - The Zone name for the Image Store.
- required: true
- type: str
- state:
- description:
- - Stage of the Image Store
- choices: [present, absent]
- default: present
- type: str
- provider:
- description:
- - The image store provider name. Required when creating a new Image Store
- type: str
- force_recreate:
- description:
- - Set to C(yes) if you're changing an existing Image Store.
- - This will force the recreation of the Image Store.
- - Recreation might fail if there are snapshots present on the Image Store. Delete them before running the recreation.
- type: bool
- default: no
-
-extends_documentation_fragment: cloudstack
-
-author:
- - Patryk Cichy (@PatTheSilent)
-'''
-
-EXAMPLES = '''
-- name: Add a Image Store (NFS)
- cs_image_store:
- zone: zone-01
- name: nfs-01
- provider: NFS
- url: nfs://192.168.21.16/exports/secondary
- delegate_to: localhost
-
-# Change the NFS share URL and force a Image Store recreation
-- name: Change the NFS url
- cs_image_store:
- zone: zone-01
- name: nfs-01
- provider: NFS
- force_recreate: yes
- url: nfs://192.168.21.10/shares/secondary
- delegate_to: localhost
-
-- name: delete the image store
- cs_image_store:
- name: nfs-01
- zone: zone-01
- state: absent
- delegate_to: localhost
-
-'''
-
-RETURN = '''
-id:
- description: the ID of the image store
- type: str
- returned: success
- sample: feb11a84-a093-45eb-b84d-7f680313c40b
-name:
- description: the name of the image store
- type: str
- returned: success
- sample: nfs-01
-protocol:
- description: the protocol of the image store
- type: str
- returned: success
- sample: nfs
-provider_name:
- description: the provider name of the image store
- type: str
- returned: success
- sample: NFS
-scope:
- description: the scope of the image store
- type: str
- returned: success
- sample: ZONE
-url:
- description: the url of the image store
- type: str
- sample: nfs://192.168.21.16/exports/secondary
- returned: success
-zone:
- description: the Zone name of the image store
- type: str
- returned: success
- sample: zone-01
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.cloudstack import AnsibleCloudStack, cs_argument_spec, cs_required_together
-
-
-class AnsibleCloudstackImageStore(AnsibleCloudStack):
-
- def __init__(self, module):
- super(AnsibleCloudstackImageStore, self).__init__(module)
- self.returns = {
- 'protocol': 'protocol',
- 'providername': 'provider_name',
- 'scope': 'scope',
- 'url': 'url'
- }
- self.image_store = None
-
- def get_storage_providers(self, storage_type="image"):
- args = {
- 'type': storage_type
- }
- storage_provides = self.query_api('listStorageProviders', **args)
- return [provider.get('name') for provider in storage_provides.get('dataStoreProvider')]
-
- def get_image_store(self):
- if self.image_store:
- return self.image_store
- image_store = self.module.params.get('name')
- args = {
- 'name': self.module.params.get('name'),
- 'zoneid': self.get_zone(key='id')
- }
-
- image_stores = self.query_api('listImageStores', **args)
- if image_stores:
- for img_s in image_stores.get('imagestore'):
- if image_store.lower() in [img_s['name'].lower(), img_s['id']]:
- self.image_store = img_s
- break
-
- return self.image_store
-
- def present_image_store(self):
- provider_list = self.get_storage_providers()
- image_store = self.get_image_store()
-
- if self.module.params.get('provider') not in provider_list:
- self.module.fail_json(
- msg='Provider %s is not in the provider list (%s). Please specify a correct provider' % (
- self.module.params.get('provider'), provider_list))
- args = {
- 'name': self.module.params.get('name'),
- 'url': self.module.params.get('url'),
- 'zoneid': self.get_zone(key='id'),
- 'provider': self.module.params.get('provider')
- }
- if not image_store:
- self.result['changed'] = True
- if not self.module.check_mode:
- res = self.query_api('addImageStore', **args)
- self.image_store = res.get('imagestore')
- else:
- # Cloudstack API expects 'provider' but returns 'providername'
- args['providername'] = args.pop('provider')
- if self.has_changed(args, image_store):
- if self.module.params.get('force_recreate'):
- self.absent_image_store()
- self.image_store = None
- self.image_store = self.present_image_store()
- else:
- self.module.warn("Changes to the Image Store won't be applied"
- "Use force_recreate=yes to allow the store to be recreated")
-
- return self.image_store
-
- def absent_image_store(self):
- image_store = self.get_image_store()
- if image_store:
- self.result['changed'] = True
- if not self.module.check_mode:
- args = {
- 'id': image_store.get('id')
- }
- self.query_api('deleteImageStore', **args)
- return image_store
-
-
-def main():
- argument_spec = cs_argument_spec()
- argument_spec.update(dict(
- url=dict(),
- name=dict(required=True),
- zone=dict(required=True),
- provider=dict(),
- force_recreate=dict(type='bool', default=False),
- state=dict(choices=['present', 'absent'], default='present'),
- ))
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=cs_required_together(),
- required_if=[
- ('state', 'present', ['url', 'provider']),
- ],
- supports_check_mode=True
- )
-
- acis_do = AnsibleCloudstackImageStore(module)
-
- state = module.params.get('state')
- if state == "absent":
- image_store = acis_do.absent_image_store()
- else:
- image_store = acis_do.present_image_store()
-
- result = acis_do.get_result(image_store)
- module.exit_json(**result)
-
-
-if __name__ == '__main__':
- main()