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...')
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
 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)
Beispiel #8
0
# 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
Beispiel #10
0
    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...')