def setup_datacenters(context): """Create datacenters for running vcenter samples""" # Find a Folder in which to put the Datacenters folder_summaries = folder_list_datacenter_folder(context) folder = folder_summaries[0].folder print("Creating datacenters in Folder '{}' ({})".format( folder, folder_summaries[0].name)) # Create first datacenter datacenter1_name = context.testbed.config['DATACENTER1_NAME'] datacenter1 = context.client.vcenter.Datacenter.create( Datacenter.CreateSpec(name=datacenter1_name, folder=folder)) print("Created Datacenter '{}' ({})".format(datacenter1, datacenter1_name)) # Create second datacenter datacenter2_name = context.testbed.config['DATACENTER2_NAME'] datacenter2 = context.client.vcenter.Datacenter.create( Datacenter.CreateSpec(name=datacenter2_name, folder=folder)) print("Created Datacenter '{}' ({})".format(datacenter2, datacenter2_name)) # Save datacenter name to identifier mappings for later use context.testbed.entities['DATACENTER_IDS'] = { datacenter1_name: datacenter1, datacenter2_name: datacenter2 }
def run(self): print('\n\n#### Example: Login to vCenter server with ' 'embedded Platform Services Controller') # Since the platform services controller is embedded, the sso server # is the same as the vCenter server. ssoUrl = 'https://{}/sts/STSService'.format(self.server) print('\nStep 1: Connect to the Single Sign-On URL and ' 'retrieve the SAML bearer token.') authenticator = sso.SsoAuthenticator(ssoUrl) context = None if self.skip_verification: context = get_unverified_context() bearer_token = authenticator.get_bearer_saml_assertion( self.username, self.password, delegatable=True, ssl_context=context) # Creating SAML Bearer Security Context sec_ctx = create_saml_bearer_security_context(bearer_token) print('\nStep 2. Login to vAPI services using the SAML bearer token.') # The URL for the stub requests are made against the /api HTTP endpoint # of the vCenter system. vapi_url = 'https://{}/api'.format(self.server) # Create an authenticated stub configuration object that can be used to # issue requests against vCenter. session = requests.Session() if self.skip_verification: session = create_unverified_session(session) connector = get_requests_connector(session=session, url=vapi_url) connector.set_security_context(sec_ctx) stub_config = StubConfigurationFactory.new_std_configuration( connector) self.session = Session(stub_config) # Login to VAPI endpoint and get the session_id self.session_id = self.session.create() # Update the VAPI connection with session_id session_sec_ctx = create_session_security_context(self.session_id) connector.set_security_context(session_sec_ctx) print('\nStep 3: List available datacenters using the vAPI services') datacenter_svc = Datacenter(stub_config) pprint(datacenter_svc.list()) self.session.delete() print('VAPI session disconnected successfully...')
def get_datacenter(stub_config, datacenter_name): """ Returns the identifier of a datacenter Note: The method assumes only one datacenter with the mentioned name. """ filter_spec = Datacenter.FilterSpec(names=set([datacenter_name])) datacenter_svc = Datacenter(stub_config) datacenter_summaries = datacenter_svc.list(filter_spec) if len(datacenter_summaries) > 0: datacenter = datacenter_summaries[0].datacenter return datacenter else: return None
def detect_datacenter(context, datacenter_name): """Find the datacenter with the given name""" datacenter_svc = Datacenter(context.stub_config) names = set([datacenter_name]) datacenter_summaries = datacenter_svc.list( Datacenter.FilterSpec(names=names)) if len(datacenter_summaries) > 0: datacenter = datacenter_summaries[0].datacenter print("Detected Datacenter '{}' as {}".format(datacenter_name, datacenter)) context.testbed.entities['DATACENTER_IDS'][ datacenter_name] = datacenter return True else: print("Datacenter '{}' missing".format(datacenter_name)) return False
def get_datacenter_by_name(self, datacenter_name): """ Returns the identifier of a datacenter Note: The method assumes only one datacenter with the mentioned name. """ filter_spec = Datacenter.FilterSpec(names=set([datacenter_name])) datacenter_summaries = self.api_client.vcenter.Datacenter.list(filter_spec) datacenter = datacenter_summaries[0].datacenter if len(datacenter_summaries) > 0 else None return datacenter
def ensure_state(self): dc_status = self.check_dc_state() if not dc_status: folder_summaries = self.dc_service.Folder.list(Folder.FilterSpec(type=Folder.Type.DATACENTER)) folder = folder_summaries[0].folder datacenter1 = self.dc_service.Datacenter.create( Datacenter.CreateSpec(name=self.datacenter_name, folder=folder)) self.module.exit_json(changed=True, datacenter_status="%s is created" % datacenter1) self.module.exit_json(changed=False, datacenter_status="%s already exists" % self.datacenter_name)
def cleanup_datacenters(context): """Cleanup datacenters after sample run""" # Look for the two datacenters datacenter1_name = context.testbed.config['DATACENTER1_NAME'] datacenter2_name = context.testbed.config['DATACENTER2_NAME'] names = set([datacenter1_name, datacenter2_name]) datacenter_summaries = context.client.vcenter.Datacenter.list( Datacenter.FilterSpec(names=names)) print("Found {} Datacenters matching names {}".format( len(datacenter_summaries), ", ".join(["'{}'".format(n) for n in names]))) for datacenter_summary in datacenter_summaries: datacenter = datacenter_summary.datacenter print("Deleting Datacenter '{}' ({})".format(datacenter, datacenter_summary.name)) context.client.vcenter.Datacenter.delete(datacenter, force=True)
# Disable cert verification for demo purpose. # This is not recommended in a production environment. session.verify = False # Disable the secure connection warning for demo purpose. # This is not recommended in a production environment. urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # Connect to a vCenter Server using username and password config = VsCreadential.load('.credentials.yaml') client = create_vsphere_client(server=config.hostname, username=config.username, password=config.password, session=session) context = None # get_unverified_context filter_spec = Datacenter.FilterSpec(names=set(['Datacenter'])) datacenter_summaries = client.vcenter.Datacenter.list(filter_spec) datacenter = datacenter_summaries[0].datacenter filter_spec = Host.FilterSpec(names=set(['esxi-1.prod.vmware.haf'])) host_summaries = client.vcenter.Host.list(filter_spec) host = host_summaries[0].host print(client.vcenter.Host.list()) # List all VMs inside the vCenter Server for vm in client.vcenter.VM.list(): print(vm) VM = client.vcenter.VM.get(vm.vm)
def check_dc_state(self): names = set([self.datacenter_name]) datacenter_summaries = self.dc_service.Datacenter.list(Datacenter.FilterSpec(names=names)) if len(datacenter_summaries) > 0: return True return False
def _get_vm_filter_spec(self): vm_filter_spec = VM.FilterSpec() datacenters = self.get_option('datacenters') if datacenters: temp_dcs = [] for datacenter_name in datacenters: dc_filter_spec = Datacenter.FilterSpec( names=set([datacenter_name])) datacenter_summaries = self.pyv.rest_content.vcenter.Datacenter.list( dc_filter_spec) if len(datacenter_summaries) > 0: temp_dcs.append(datacenter_summaries[0].datacenter) else: self._handle_error(message="Unable to find datacenter %s" % datacenter_name) vm_filter_spec.datacenters = set(temp_dcs) clusters = self.get_option('clusters') if clusters: temp_clusters = [] for cluster_name in clusters: ccr_filter_spec = Cluster.FilterSpec(names=set([cluster_name])) cluster_summaries = self.pyv.rest_content.vcenter.Cluster.list( ccr_filter_spec) if len(cluster_summaries) > 0: temp_clusters.append(cluster_summaries[0].cluster) else: self._handle_error(message="Unable to find cluster %s" % cluster_name) vm_filter_spec.clusters = set(temp_clusters) folders = self.get_option('folders') if folders: temp_folders = [] for folder_name in folders: folder_filter_spec = Folder.FilterSpec( names=set([folder_name])) folder_summaries = self.pyv.rest_content.vcenter.Folder.list( folder_filter_spec) if len(folder_summaries) > 0: temp_folders.append(folder_summaries[0].folder) else: self._handle_error(message="Unable to find folder %s" % folder_name) vm_filter_spec.folders = set(temp_folders) esxi_hosts = self.get_option('esxi_hostsystems') if esxi_hosts: temp_hosts = [] for esxi_name in esxi_hosts: esxi_filter_spec = Host.FilterSpec(names=set([esxi_name])) esxi_summaries = self.pyv.rest_content.vcenter.Host.list( esxi_filter_spec) if len(esxi_summaries) > 0: temp_hosts.append(esxi_summaries[0].host) else: self._handle_error( message="Unable to find esxi hostsystem %s" % esxi_name) vm_filter_spec.folders = set(temp_hosts) resource_pools = self.get_option('resource_pools') if resource_pools: temp_rps = [] for rp_name in resource_pools: rp_filter_spec = ResourcePool.FilterSpec(names=set([rp_name])) rp_summaries = self.pyv.rest_content.vcenter.ResourcePool.list( rp_filter_spec) if len(rp_summaries) > 0: temp_rps.append(rp_summaries[0].resourcepool) else: self._handle_error( message="Unable to find resource pool %s" % rp_name) vm_filter_spec.folders = set(temp_rps) return vm_filter_spec
def run(self): print('\n\n#### Example: Login to vCenter server with ' 'external Platform Services Controller') print('\nStep 1: Connect to the lookup service on the ' 'Platform Services Controller node: {0}'.format(self.lsurl)) # Convert wsdl path to url self.lswsdl = parse.urljoin('file:', request.pathname2url(self.lswsdl)) lookupservicehelper = LookupServiceHelper( wsdl_url=self.lswsdl, soap_url=self.lsurl, skip_verification=self.skip_verification) lookupservicehelper.connect() if self.mgmtinstancename is None: self.mgmtinstancename, self.mgmtnodeid = lookupservicehelper.get_default_mgmt_node( ) elif self.mgmtnodeid is None: self.mgmtnodeid = lookupservicehelper.get_mgmt_node_id( self.mgmtinstancename) assert self.mgmtnodeid is not None print('\nStep 2: Discover the Single Sign-On service URL' ' from lookup service.') sso_url = lookupservicehelper.find_sso_url() print('Sso URL: {0}'.format(sso_url)) print('\nStep 3: Connect to the Single Sign-On URL and ' 'retrieve the SAML bearer token.') authenticator = sso.SsoAuthenticator(sso_url) context = None if self.skip_verification: context = get_unverified_context() bearer_token = authenticator.get_bearer_saml_assertion( self.username, self.password, delegatable=True, ssl_context=context) # Creating SAML Bearer Security Context sec_ctx = create_saml_bearer_security_context(bearer_token) print('\nStep 4. Discover the vAPI service URL from lookup service.') vapi_url = lookupservicehelper.find_vapi_url(self.mgmtnodeid) print('vAPI URL: {0}'.format(vapi_url)) print('\nStep 5. Login to vAPI service using the SAML bearer token.') # Create an authenticated stub configuration object that can be used to # issue requests against vCenter. session = requests.Session() if self.skip_verification: session = create_unverified_session(session) connector = get_requests_connector(session=session, url=vapi_url) connector.set_security_context(sec_ctx) stub_config = StubConfigurationFactory.new_std_configuration(connector) self.session = Session(stub_config) # Login to VAPI endpoint and get the session_id self.session_id = self.session.create() # Update the VAPI connection with session_id session_sec_ctx = create_session_security_context(self.session_id) connector.set_security_context(session_sec_ctx) print('\nStep 6: List available datacenters using the vAPI service') datacenter_svc = Datacenter(stub_config) pprint(datacenter_svc.list()) self.session.delete() print('VAPI session disconnected successfully...')