def test_0040_get_vc(self): """Test the method VM.get_vc(). This test passes if the retrieved vc name matches with the expected vc name. """ vm = VM(TestVM._sys_admin_client, href=TestVM._test_vapp_first_vm_href) retrieved_vc_name = vm.get_vc() expected_vc_name = Environment.get_config()['vc']['vcenter_host_name'] self.assertEqual(retrieved_vc_name, expected_vc_name)
def get_vsphere(config, vapp, vm_name, logger=None): """Get the VSphere object for a specific VM inside a VApp. :param dict config: CSE config as a dictionary :param pyvcloud.vcd.vapp.VApp vapp: VApp used to get the VM ID. :param str vm_name: :param logging.Logger logger: optional logger to log with. :return: VSphere object for a specific VM inside a VApp :rtype: vsphere_guest_run.vsphere.VSphere """ global cache # get vm id from vm resource vm_id = vapp.get_vm(vm_name).get('id') if vm_id not in cache: client = Client(uri=config['vcd']['host'], api_version=config['vcd']['api_version'], verify_ssl_certs=config['vcd']['verify'], log_headers=True, log_bodies=True) credentials = BasicLoginCredentials(config['vcd']['username'], SYSTEM_ORG_NAME, config['vcd']['password']) client.set_credentials(credentials) # must recreate vapp, or cluster creation fails vapp = VApp(client, href=vapp.href) vm_resource = vapp.get_vm(vm_name) vm_sys = VM(client, resource=vm_resource) vcenter_name = vm_sys.get_vc() platform = Platform(client) vcenter = platform.get_vcenter(vcenter_name) vcenter_url = urlparse(vcenter.Url.text) cache_item = { 'hostname': vcenter_url.hostname, 'port': vcenter_url.port } for vc in config['vcs']: if vc['name'] == vcenter_name: cache_item['username'] = vc['username'] cache_item['password'] = vc['password'] break cache[vm_id] = cache_item if logger: logger.debug(f"VM ID: {vm_id}, Hostname: {cache[vm_id]['hostname']}") return VSphere(cache[vm_id]['hostname'], cache[vm_id]['username'], cache[vm_id]['password'], cache[vm_id]['port'])
def get_vsphere(config, vapp, vm_name): """Get the VSphere object for a specific VM inside a VApp. :param dict config: CSE config as a dictionary :param pyvcloud.vcd.vapp.VApp vapp: :param str vm_name: :return: VSphere object for a specific VM inside a VApp :rtype: vsphere_guest_run.vsphere.VSphere """ global cache vm_resource = vapp.get_vm(vm_name) vm_id = vm_resource.get('id') if vm_id not in cache: client = Client(uri=config['vcd']['host'], api_version=config['vcd']['api_version'], verify_ssl_certs=config['vcd']['verify'], log_headers=True, log_bodies=True) credentials = BasicLoginCredentials(config['vcd']['username'], SYSTEM_ORG_NAME, config['vcd']['password']) client.set_credentials(credentials) vm_sys = VM(client, resource=vm_resource) vcenter_name = vm_sys.get_vc() platform = Platform(client) vcenter = platform.get_vcenter(vcenter_name) vcenter_url = urlparse(vcenter.Url.text) cache_item = { 'hostname': vcenter_url.hostname, 'port': vcenter_url.port } for vc in config['vcs']: if vc['name'] == vcenter_name: cache_item['username'] = vc['username'] cache_item['password'] = vc['password'] break cache[vm_id] = cache_item else: LOGGER.debug(f"vCenter retrieved from cache\nVM ID: {vm_id}" f"\nHostname: {cache[vm_id]['hostname']}") return VSphere(cache[vm_id]['hostname'], cache[vm_id]['username'], cache[vm_id]['password'], cache[vm_id]['port'])
def test_0003_get_vm_info(self): org_resource = self.client.get_org_by_name( self.config['vcd']['org_to_use']) self.logger.debug('org: %s' % org_resource.get('name')) org = Org(self.client, href=org_resource.get('href')) vdc_resource = org.get_vdc(self.config['vcd']['vdc']) vdc = VDC(self.client, resource=vdc_resource) assert self.config['vcd']['vdc'] == vdc.get_resource().get('name') vapp_resource = vdc.get_vapp(self.config['vcd']['vapp']) assert self.config['vcd']['vapp'] == vapp_resource.get('name') vapp = VApp(self.client, resource=vapp_resource) vm_name = self.config['vcd']['hostname'] vm_resource = vapp.get_vm(vm_name) self.logger.debug('vm name: %s' % vm_resource.get('name')) vm = VM(self.client, resource=vm_resource) vcenter = vm.get_vc() self.logger.debug('vCenter: %s' % vcenter) assert vcenter == self.config['vcd']['vcenter']
def get_vsphere(sys_admin_client, vapp, vm_name, logger=NULL_LOGGER): """Get the VSphere object for a specific VM inside a VApp. :param pyvcloud.vcd.client.Client sys_admin_client: :param pyvcloud.vcd.vapp.VApp vapp: VApp used to get the VM ID. :param str vm_name: :param logging.Logger logger: logger to log with. :return: VSphere object for a specific VM inside a VApp :rtype: vsphere_guest_run.vsphere.VSphere """ global cache global vsphere_list # get vm id from vm resource vm_id = vapp.get_vm(vm_name).get('id') if vm_id not in cache: # recreate vapp with sys admin client vapp = VApp(sys_admin_client, href=vapp.href) vm_resource = vapp.get_vm(vm_name) vm_sys = VM(sys_admin_client, resource=vm_resource) vcenter_name = vm_sys.get_vc() platform = Platform(sys_admin_client) vcenter = platform.get_vcenter(vcenter_name) vcenter_url = urlparse(vcenter.Url.text) cache_item = { 'hostname': vcenter_url.hostname, 'port': vcenter_url.port } if not vsphere_list: raise Exception("Global list of vSphere info not set.") for vc in vsphere_list: if vc['name'] == vcenter_name: cache_item['username'] = vc['username'] cache_item['password'] = vc['password'] break cache[vm_id] = cache_item logger.debug(f"VM ID: {vm_id}, Hostname: {cache[vm_id]['hostname']}") return VSphere(cache[vm_id]['hostname'], cache[vm_id]['username'], cache[vm_id]['password'], cache[vm_id]['port'])
def get_vsphere(config, vapp, vm_name): global cache vm_resource = vapp.get_vm(vm_name) vm_id = vm_resource.get('id') if vm_id not in cache: client_sysadmin = Client(uri=config['vcd']['host'], api_version=config['vcd']['api_version'], verify_ssl_certs=config['vcd']['verify'], log_headers=True, log_bodies=True) client_sysadmin.set_credentials( BasicLoginCredentials(config['vcd']['username'], 'System', config['vcd']['password'])) vapp_sys = VApp(client_sysadmin, href=vapp.href) vm_resource = vapp_sys.get_vm(vm_name) vm_sys = VM(client_sysadmin, resource=vm_resource) vcenter_name = vm_sys.get_vc() platform = Platform(client_sysadmin) vcenter = platform.get_vcenter(vcenter_name) vcenter_url = urlparse(vcenter.Url.text) cache_item = { 'hostname': vcenter_url.hostname, 'username': vcenter.Username.text, 'port': vcenter_url.port } for vc in config['vcs']: if vc['name'] == vcenter_name: cache_item['password'] = vc['password'] break cache[vm_id] = cache_item else: LOGGER.debug('vCenter retrieved from cache: %s / %s' % (vm_id, cache[vm_id]['hostname'])) v = VSphere(cache[vm_id]['hostname'], cache[vm_id]['username'], cache[vm_id]['password'], cache[vm_id]['port']) return v