def upload_media(cls): """Uploads the test media to the test catalog. If media already exists in the catalog then skips uploading it. :raises: Exception: if the class variable _org_href is not populated. """ cls._basic_check() if cls._org_href is None: raise Exception('Org ' + cls._config['vcd']['default_org_name'] + ' doesn\'t exist.') try: catalog_author_client = Environment.get_client_in_default_org( CommonRoles.CATALOG_AUTHOR) org = Org(catalog_author_client, href=cls._org_href) catalog_name = cls._config['vcd']['default_catalog_name'] catalog_items = org.list_catalog_items(catalog_name) media_name = cls._config['vcd']['default_media_name'] for item in catalog_items: if item.get('name').lower() == media_name.lower(): cls._logger.debug('Reusing existing media ' + media_name) cls._media_resource = org.get_catalog_item( catalog_name, media_name) return cls._logger.debug('Uploading media ' + media_name + ' to catalog ' + catalog_name + '.') org.upload_media(catalog_name=catalog_name, file_name=media_name) # wait for the template import to finish in vCD. catalog_item = org.get_catalog_item(name=catalog_name, item_name=media_name) media = catalog_author_client.get_resource( catalog_item.Entity.get('href')) if hasattr(media, "Tasks"): catalog_author_client.get_task_monitor().wait_for_success( task=media.Tasks.Task[0]) cls._media_resource = org.get_catalog_item(catalog_name, media_name) finally: catalog_author_client.logout()
def upload_media(cls): """Uploads the test media to the test catalog. If media already exists in the catalog then skips uploading it. :raises: Exception: if the class variable _org_href is not populated. """ cls._basic_check() if cls._org_href is None: raise Exception('Org ' + cls._config['vcd']['default_org_name'] + ' doesn\'t exist.') try: catalog_author_client = Environment.get_client_in_default_org( CommonRoles.CATALOG_AUTHOR) org = Org(catalog_author_client, href=cls._org_href) catalog_name = cls._config['vcd']['default_catalog_name'] catalog_items = org.list_catalog_items(catalog_name) media_name = cls._config['vcd']['default_media_name'] for item in catalog_items: if item.get('name').lower() == media_name.lower(): cls._logger.debug('Reusing existing media ' + media_name) cls._media_resource = org.get_catalog_item(catalog_name,media_name) return cls._logger.debug('Uploading media ' + media_name + ' to catalog ' + catalog_name + '.') org.upload_media(catalog_name=catalog_name, file_name=media_name) # wait for the template import to finish in vCD. catalog_item = org.get_catalog_item( name=catalog_name, item_name=media_name) media = catalog_author_client.get_resource( catalog_item.Entity.get('href')) catalog_author_client.get_task_monitor().wait_for_success( task=media.Tasks.Task[0]) cls._media_resource = org.get_catalog_item(catalog_name,media_name) finally: catalog_author_client.logout()
def upload_template(cls): """Uploads the test template to the test catalog. If template already exists in the catalog then skips uploading it. :return: Nothing :raises: Exception: if the class variable _org_href is not populated. """ cls._basic_check() if cls._org_href is None: raise Exception('Org ' + cls._config['vcd']['default_org_name'] + ' doesn\'t exist.') try: catalog_author_client = Environment.get_client_in_default_org( CommonRoles.CATALOG_AUTHOR) org = Org(catalog_author_client, href=cls._org_href) catalog_name = cls._config['vcd']['default_catalog_name'] catalog_items = org.list_catalog_items(catalog_name) template_name = cls._config['vcd']['default_template_file_name'] for item in catalog_items: if item.get('name').lower() == template_name.lower(): cls._logger.debug('Reusing existing template ' + template_name) return cls._logger.debug('Uploading template ' + template_name + ' to catalog ' + catalog_name + '.') org.upload_ovf(catalog_name=catalog_name, file_name=template_name) catalog_item = org.get_catalog_item(name=catalog_name, item_name=template_name) template = catalog_author_client.get_resource( catalog_item.Entity.get('href')) catalog_author_client.get_task_monitor().wait_for_success( task=template.Tasks.Task[0]) finally: catalog_author_client.logout()
class Catalog(VcdAnsibleModule): def __init__(self, **kwargs): super(Catalog, self).__init__(**kwargs) logged_in_org = self.client.get_org() self.org = Org(self.client, resource=logged_in_org) def manage_states(self): state = self.params.get('state') if state == "present": return self.create() if state == "absent": return self.delete() if state == "update": return self.update() def manage_operations(self): operation = self.params.get('operation') if operation == "shared": return self.shared() if operation == "read": return self.read() if operation == "list_items": return self.list_items() def create(self): catalog_name = self.params.get('catalog_name') description = self.params.get('description') response = dict() response['changed'] = False try: self.org.get_catalog(name=catalog_name) except EntityNotFoundException: self.org.create_catalog(name=catalog_name, description=description) response['msg'] = 'Catalog {} has been created.'.format( catalog_name) response['changed'] = True else: response['warnings'] = 'Catalog {} is already present.'.format( catalog_name) return response def delete(self): catalog_name = self.params.get('catalog_name') response = dict() response['changed'] = False try: self.org.get_catalog(name=catalog_name) except EntityNotFoundException: response['warnings'] = 'Catalog {} is not present.'.format( catalog_name) else: self.org.delete_catalog(catalog_name) response['msg'] = 'Catalog {} has been deleted.'.format( catalog_name) response['changed'] = True return response def update(self): catalog_name = self.params.get('catalog_name') new_catalog_name = self.params.get('new_catalog_name') description = self.params.get('description') response = dict() response['changed'] = False if not new_catalog_name: new_catalog_name = catalog_name self.org.update_catalog(old_catalog_name=catalog_name, new_catalog_name=new_catalog_name, description=description) response['msg'] = 'Catalog {} has been updated.'.format(catalog_name) response['changed'] = True return response def shared(self): catalog_name = self.params.get('catalog_name') shared = self.params.get('shared') response = dict() response['changed'] = False self.org.share_catalog(name=catalog_name, share=shared) response[ 'msg'] = 'Catalog {} shared state has been updated to [shared={}].'.format( catalog_name, shared) response['changed'] = True return response def read(self): catalog_name = self.params.get('catalog_name') response = dict() result = dict() response['changed'] = False catalog = self.org.get_catalog(catalog_name) result['name'] = str(catalog.get("name")) result['description'] = str(catalog.Description) result['shared'] = str(catalog.IsPublished) response['msg'] = result response['changed'] = False return response def list_items(self): catalog_name = self.params.get('catalog_name') response = dict() response['changed'] = False catalog_items = self.org.list_catalog_items(catalog_name) response['msg'] = [ catalog_item['name'] for catalog_item in catalog_items ] response['changed'] = False return response
class Catalog(VcdAnsibleModule): def __init__(self, **kwargs): super(Catalog, self).__init__(**kwargs) logged_in_org = self.client.get_org() self.org = Org(self.client, resource=logged_in_org) def manage_states(self): state = self.params.get('state') if state == "present": return self.create() if state == "absent": return self.delete() if state == "update": return self.update() def manage_operations(self): operation = self.params.get('operation') if operation == "shared": return self.shared() if operation == "read": return self.read() if operation == "list_items": return self.list_items() def create(self): catalog_name = self.params.get('catalog_name') description = self.params.get('description') response = dict() response['changed'] = False try: self.org.get_catalog(name=catalog_name) except EntityNotFoundException: self.org.create_catalog(name=catalog_name, description=description) response['msg'] = 'Catalog {} has been created.'.format(catalog_name) response['changed'] = True else: response['warnings'] = 'Catalog {} is already present.'.format(catalog_name) return response def delete(self): catalog_name = self.params.get('catalog_name') response = dict() response['changed'] = False try: self.org.get_catalog(name=catalog_name) except EntityNotFoundException: response['warnings'] = 'Catalog {} is not present.'.format(catalog_name) else: self.org.delete_catalog(catalog_name) response['msg'] = 'Catalog {} has been deleted.'.format(catalog_name) response['changed'] = True return response def update(self): catalog_name = self.params.get('catalog_name') new_catalog_name = self.params.get('new_catalog_name') description = self.params.get('description') response = dict() response['changed'] = False if not new_catalog_name: new_catalog_name = catalog_name self.org.update_catalog(old_catalog_name=catalog_name, new_catalog_name=new_catalog_name, description=description) response['msg'] = 'Catalog {} has been updated.'.format(catalog_name) response['changed'] = True return response def shared(self): catalog_name = self.params.get('catalog_name') shared = self.params.get('shared') response = dict() response['changed'] = False self.org.share_catalog(name=catalog_name, share=shared) response['msg'] = 'Catalog {} shared state has been updated to [shared={}].'.format(catalog_name, shared) response['changed'] = True return response def read(self): catalog_name = self.params.get('catalog_name') response = dict() result = dict() response['changed'] = False catalog = self.org.get_catalog(catalog_name) result['name'] = str(catalog.get("name")) result['description'] = str(catalog.Description) result['shared'] = str(catalog.IsPublished) response['msg'] = result response['changed'] = False return response def list_items(self): catalog_name = self.params.get('catalog_name') response = dict() response['changed'] = False catalog_items = self.org.list_catalog_items(catalog_name) response['msg'] = [catalog_item['name'] for catalog_item in catalog_items] response['changed'] = False return response