def capture_vapp(client, context, capture_info): logging.debug("__INIT__capture_vapp [%s]", capture_info) vapp_name = capture_info.vapp_name vdc_name = capture_info.vdc_name catalog_name = capture_info.catalog_name item_name = capture_info.item_name desc = capture_info.description customize_on_instantiate = capture_info.customize_on_instantiate result = catalog_item_pb2.CaptureVAppResult() try: logged_in_org = client.get_org() org = Org(client, resource=logged_in_org) v = org.get_vdc(vdc_name) if v is None: raise errors.VDCNotFoundError(vappInfo.vdc) vdc = VDC(client, href=v.get('href')) vapp = vdc.get_vapp(vapp_name) logging.info(vapp.get('href')) catalog = org.get_catalog(catalog_name) org.capture_vapp(catalog_resource=catalog, vapp_href=vapp.get('href'), catalog_item_name=item_name, description=desc, customize_on_instantiate=customize_on_instantiate) result.captured = True logging.debug("__DONE__capture_vapp [%s] , [%s] , [%s] ", vapp_name, vdc_name, catalog_name) return result except Exception as e: error_message = 'ERROR.. capture vapp failed {0} {1} {2}'.format( vapp_name, vdc_name, catalog_name) logging.warn(error_message, e) context.set_code(grpc.StatusCode.INVALID_ARGUMENT) context.set_details(error_message)
def capture(ctx, name, catalog, template, customizable, description): try: restore_session(ctx, vdc_required=True) client = ctx.obj['client'] in_use_org_href = ctx.obj['profiles'].get('org_href') org = Org(client, in_use_org_href) catalog_resource = org.get_catalog(catalog) vdc_href = ctx.obj['profiles'].get('vdc_href') vdc = VDC(client, href=vdc_href) vapp_resource = vdc.get_vapp(name) overwrite = False if template is None: template = vapp_resource.get('name') else: overwrite = True task = org.capture_vapp( catalog_resource, vapp_href=vapp_resource.get('href'), catalog_item_name=template, description=description, customize_on_instantiate=customizable == 'customizable', overwrite=overwrite) stdout(task, ctx) except Exception as e: stderr(e, ctx)
def capture_vapp(client): logging.info('ok') logged_in_org = client.get_org() org = Org(client, resource=logged_in_org) v = org.get_vdc('OVD2') if v is None: raise errors.VDCNotFoundError(vappInfo.vdc) vdc = VDC(client, href=v.get('href')) vapp = vdc.get_vapp('vappacc8') logging.info(vapp.get('href')) catalog = org.get_catalog('c1') org.capture_vapp(catalog_resource=catalog, vapp_href=vapp.get('href'), catalog_item_name='captured', description='captured', customize_on_instantiate=False)
def capture_vapp(client): logging.info('ok') logged_in_org = client.get_org() org = Org(client, resource=logged_in_org) v = org.get_vdc('OVD2') if v is None: raise errors.VDCNotFoundError(vappInfo.vdc) vdc = VDC(client, href=v.get('href')) vapp = vdc.get_vapp('vappacc8') logging.info(vapp.get('href')) catalog = org.get_catalog('c1') org.capture_vapp( catalog_resource=catalog, vapp_href=vapp.get('href'), catalog_item_name='captured', description='captured', customize_on_instantiate=False)
def capture_vapp(client, context, capture_info): logging.debug("__INIT__capture_vapp [%s]", capture_info) vapp_name = capture_info.vapp_name vdc_name = capture_info.vdc_name catalog_name = capture_info.catalog_name item_name = capture_info.item_name desc = capture_info.description customize_on_instantiate = capture_info.customize_on_instantiate result = catalog_item_pb2.CaptureVAppResult() try: logged_in_org = client.get_org() org = Org(client, resource=logged_in_org) v = org.get_vdc(vdc_name) if v is None: raise errors.VDCNotFoundError(vappInfo.vdc) vdc = VDC(client, href=v.get('href')) vapp = vdc.get_vapp(vapp_name) logging.info(vapp.get('href')) catalog = org.get_catalog(catalog_name) org.capture_vapp( catalog_resource=catalog, vapp_href=vapp.get('href'), catalog_item_name=item_name, description=desc, customize_on_instantiate=customize_on_instantiate) result.captured = True logging.debug("__DONE__capture_vapp [%s] , [%s] , [%s] ", vapp_name, vdc_name, catalog_name) return result except Exception as e: error_message = 'ERROR.. capture vapp failed {0} {1} {2}'.format( vapp_name, vdc_name, catalog_name) logging.warn(error_message, e) context.set_code(grpc.StatusCode.INVALID_ARGUMENT) context.set_details(error_message)
def capture(ctx, name, catalog, template, customizable): try: client = ctx.obj['client'] in_use_org_href = ctx.obj['profiles'].get('org_href') org = Org(client, in_use_org_href) catalog_resource = org.get_catalog(catalog) vdc_href = ctx.obj['profiles'].get('vdc_href') vdc = VDC(client, href=vdc_href) vapp_resource = vdc.get_vapp(name) if template is None: template = vapp_resource.get('name') task = org.capture_vapp( catalog_resource, vapp_href=vapp_resource.get('href'), catalog_item_name=template, description='', customize_on_instantiate=customizable == 'customizable') stdout(task, ctx) except Exception as e: stderr(e, ctx)
class CatalogItem(VcdAnsibleModule): def __init__(self, **kwargs): super(CatalogItem, 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.upload() if state == "absent": return self.delete() def manage_operations(self): operation = self.params.get('operation') if operation == "capturevapp": return self.capture_vapp() if operation == "list_vms": return self.list_vms() def is_present(self): params = self.params catalog_name = params.get('catalog_name') item_name = params.get('item_name') try: self.org.get_catalog_item(catalog_name, item_name) except EntityNotFoundException: return False return True def upload(self): params = self.params catalog_name = params.get('catalog_name') item_name = params.get('item_name') file_name = params.get('file_name') chunk_size = params.get('chunk_size') response = dict() response['changed'] = False item_details = { "catalog_name": catalog_name, "item_name": item_name, "file_name": file_name, "chunk_size": chunk_size } if self.is_present(): response['warnings'] = "Catalog Item {} is already present.".format(item_name) return response if file_name.endswith(".ova") or file_name.endswith(".ovf"): self.org.upload_ovf(**item_details) self.ova_check_resolved() if not file_name.endswith(".ova"): self.org.upload_media(**item_details) response['msg'] = "Catalog item {} is uploaded.".format(item_name) response['changed'] = True return response def delete(self): params = self.params catalog_name = params.get('catalog_name') item_name = params.get('item_name') response = dict() response['changed'] = False if not self.is_present(): response['warnings'] = "Catalog Item {} is not present.".format(item_name) return response self.org.delete_catalog_item(name=catalog_name, item_name=item_name) response['msg'] = "Catalog Item {} has been deleted.".format(item_name) response['changed'] = True return response def capture_vapp(self): params = self.params vapp_name = params.get('vapp_name') vdc_name = params.get('vdc_name') catalog_name = params.get('catalog_name') item_name = params.get('item_name') desc = params.get('description') customize_on_instantiate = params.get('customize_on_instantiate') overwrite = params.get('overwrite') client = self.client response = dict() response['changed'] = False v = self.org.get_vdc(vdc_name) vdc = VDC(client, href=v.get('href')) vapp = vdc.get_vapp(vapp_name) catalog = self.org.get_catalog(catalog_name) self.org.capture_vapp( catalog_resource=catalog, vapp_href=vapp.get('href'), catalog_item_name=item_name, description=desc, customize_on_instantiate=customize_on_instantiate, overwrite=overwrite) self.ova_check_resolved() response['msg'] = "Catalog Item {} has been captured".format(item_name) response['changed'] = True return response def ova_check_resolved(self): params = self.params catalog_name = params.get('catalog_name') item_name = params.get('item_name') response = False source_ova_item = self.org.get_catalog_item(catalog_name, item_name) self.check_resolved(source_ova_item, catalog_name, item_name) response = True return response def check_resolved(self, source_ova_item, catalog_name, item_name): client = self.client item_id = source_ova_item.get('id') while True: q = client.get_typed_query( 'catalogItem', query_result_format=QueryResultFormat.ID_RECORDS, qfilter='id==%s' % item_id ) records = list(q.execute()) if records[0].get('status') == 'RESOLVED': break else: time.sleep(5) # TODO might have to check when status goes to other state than resolved def list_vms(self): params = self.params catalog_name = params.get('catalog_name') item_name = params.get('item_name') response = dict() result = list() response['changed'] = False catalog_item = self.org.get_catalog_item(catalog_name, item_name) vapp_template_resource = self.client.get_resource( catalog_item.Entity.get('href')) vapp_template = VApp(self.client, name=item_name, resource=vapp_template_resource) for vm in vapp_template.get_all_vms(): result.append(vm.get('name')) response['msg'] = result response['changed'] = False return response