Quantcast
Channel: VMware Communities : Discussion List - vSphere Management SDK
Viewing all 1375 articles
Browse latest View live

Latest VASA SDK download option

$
0
0

Hi All,

 

As TAP member, I am successfully able to download VASA SDK for vSphere 5.1 from https://developercenter.vmware.com/group/sdk/51/vasa

 

But this SDK is released on 2012 for vsphere 5.1. What about VASA 2.0 SDK for latest vsphere 6.0

 

or Does VASA SDK for vSphere 5.1  support latest vSphere 6.0 by installing WorkBench 3.5.


Or Am i missing anything to proceed further.


Kindly help me. Thanks in advance.


how to get past this error? "Cannot find 'vimService.wsdl' wsdl. Place the resource correctly in the classpath."

$
0
0

Hi,

 

I download the VMWare management SDK 5.1 with Java samples.

 

I ran the build.bat file to build everything (I had to tweak it to get it working because it didn't like the spaces in "Program Files", for example) -- it produced the vim25.jar and the samples.jar.

 

When I try to run a sample (CreateVM), I provide all the required params (url, username, password, and so on), but it gives me this error:

 

javax.xml.ws.WebServiceException: Cannot find 'vimService.wsdl' wsdl. Place the resource correctly in the classpath.

    at com.vmware.vim25.VimService.<clinit>(VimService.java:32)

    at com.vmware.vm.VMCreate.connect(VMCreate.java:253)

    at com.vmware.vm.VMCreate.main(VMCreate.java:919)

 

 

I tried putting the vimService.wsdl in the classpath, but it still doesn't work.

 

What am I doing wrong?  Stuck on this.

 

Thanks!

Rob

Set affinity VM-VM of a group of VMs

$
0
0

Hi community!,
I'm searching (without so much success) a example of the creation of a VM-VM affinity in a group of VMs, for example:

I deploy a set of vms that need to work together in the same host (networking things...), I want that with DRS activated and HA, these VMs must be always together in other hosts...

Is possible to configure it with pyvmomi??

Best regards!!!

cpu utilization

$
0
0
How can I get cpu , memory and disk utilization using .NET , C#?

thanks,
shilpa

Getting complete list of servers and attributes directly from web services

$
0
0

We want to utilise web services provided by vSphere directly bypassing Java or C# libraries as part of our "environment discovery" routine which would be periodically performed by a Middleware platform. We want to configure it to poll vSphere web services and extract necessary data and store it in a database repository accessed by other applications. We definitely don't want to build any custom code to invoke web services via libraries provided by vmware.

 

I am able to successfully get the list of methods exposed (https://ourvmwareserver/sdk/vimService.wsdl) and use Login method to get the key and then use the key to invoke some other methods in SoapUI.

 

Now after spending few hours going through the SDK manuals I am at complete loss as to how exactly I can get the list of servers and their attributes using this approach. Can someone help with that please?

Perl API / MOB object to add IP to Firewall Ruleset

$
0
0

Hello,

 

I would like to know what the special sauce is to get the IP address into the MOB to set the firewall address for a ruleset 'iSCSI'

 

I think I am on the right track by using the Update Rules but failing mightily when trying to specify the actual IP address.

ESX naa.diskIdentifier to windows disk mapping

$
0
0

i have a NetApp lun exposed to ESX server with disk identifer as naa.12344567890111111111111111111111

Same lun is exposed to my physical box. how can I identify from physical machine which is that particular disk. i just have naa identifier with me.

Bascically i need mapping to identify between naa.diskidentifier to windows disk mapping.

 

Diskpart does not show this identifier.

 

any help?

Registration of my package to VCSA

$
0
0

Hi ,

 

I have gone through the SDK\tutorials document.i Have built the package as specified in in the document.

The next step is i need to register this package .I have few questions regarding the package registration.Iam using the Sample java program in the  vsphere_plugin_4_1_technote as specified in the SDK\tutorial document .

 

I have seen the java program and have questions in it .

 

1)We need to create two java objects ExtensionServerInfo and ExtensionClientInfo .they both need the package Url (.zip file location ).But in our case we dont have any webserver that is hosting  this .zip file ,that means i have this pckage created and saved in my local c:\\myPackage.zip.What should i do in this case .(Do i need to Winscp to the vcsa and manually copy the files as specified in documentation)?

 

2)what would be my Service URL in this line of code  -

_service = _serviceLocator.getVimPort(new URL (url ));

_sic = _service.retrieveServcieContent(_svcRef);

 

I am giving my url as ........

 

https://dnsNameofvcsa/sdk and https://hostname+sdk/vim. ( Is this the correct url ?if not how do i get  correct url for vcsa server.)

 

both gives me error  "Permission to perform this operation was denied."

 

Thanks,

Rakesh Bandari


please confirm is there is similar class for OVA files instead of OVF ?

$
0
0

Hi LucD,

 

Using class OVFManagerImportLocalVApp and we are able to import using method OvfCreateImportSpecResult in java SDK.

 

Is there a similar class for OVA files instead of OVF ?

 

Thank you@

How to import Or upload the .OVA file through SDK? Please reply ASAP.

$
0
0

Hi All,

How can i import Or upload the .OVA file through SDK? Is there any API Or Sample is available?Please reply ASAP.

Thanks,

Basu

Deploy OVF C#

$
0
0

I'm trying to deploy OVF by using C#, When I'm deploying the OVF with my tool I'm getting and "Operating system not found" error. however when I'm deploying the same OVF manually  the machine is up and running perfectly. I'm not sure what I'm doing wrong.

        public VsphereResponse CreateOvf(string datacenterName, string path, string teamFolder, WindowsIdentity userIdentity, string rpName, string teamName, string envName, string machName, string ovfFile)
        {
            VsphereResponse response = new VsphereResponse();

            ManagedObjectReference dataStoreWithMostFreeSpace = GetDataStoreWithMostFreeSpace(datacenterName, userIdentity);
            ManagedObjectReference datacenterRef = vsHandler.Connection.Service.FindByInventoryPath(vsHandler.Connection.ServiceContent.searchIndex, datacenterName);
            ManagedObjectReference moRpRef = vsHandler.GetDecendentMoRef(datacenterRef, NodeTypeEnum.ResourcePool.ToString(), rpName);
            ManagedObjectReference temp = vsHandler.GetDecendentMoRef(datacenterRef, NodeTypeEnum.Folder.ToString(), teamName);
            ManagedObjectReference vmFolder = vsHandler.GetDecendentMoRef(temp, NodeTypeEnum.Folder.ToString(), envName);
            ManagedObjectReference hostmor = vsHandler.GetFirstDecendentMoRef(null, NodeTypeEnum.HostSystem.ToString());

            OvfCreateImportSpecParams importSpecParams = CreateImportSpecParams(machName, hostmor);
            string ovfDescriptor = getOvfDescriptorFromLocal(ovfFile);
            
            OvfCreateImportSpecResult ovfImportResult = vsHandler.Connection.Service.CreateImportSpec(vsHandler.Connection.ServiceContent.ovfManager, ovfDescriptor, moRpRef, dataStoreWithMostFreeSpace, importSpecParams);
            OvfFileItem[] fileItemAttr = ovfImportResult.fileItem;
            if (fileItemAttr != null)
            {
                ManagedObjectReference httpNfcLease = vsHandler.Connection.Service.ImportVApp(moRpRef, ovfImportResult.importSpec, vmFolder, hostmor);
                HttpNfcLeaseInfo httpNfcLeaseInfo = vsHandler.GetDynamicProperty(httpNfcLease, "info") as HttpNfcLeaseInfo;
                while (httpNfcLeaseInfo == null)
                {
                    httpNfcLeaseInfo = vsHandler.GetDynamicProperty(httpNfcLease, "info") as HttpNfcLeaseInfo;
                }
        
                HttpNfcLeaseDeviceUrl[] deviceUrlArr = httpNfcLeaseInfo.deviceUrl;
                if (deviceUrlArr != null)
                {
                    int step = 100/fileItemAttr.Length;
                    int progress = 0;
                    foreach (HttpNfcLeaseDeviceUrl deviceUrl in deviceUrlArr)
                    {
                        string deviceKey = deviceUrl.importKey;
                        foreach (OvfFileItem ovfFileItem in fileItemAttr)
                        {
                            if (deviceKey.Equals(ovfFileItem.deviceId))
                            {
                                SendVMDKFile(ovfFileItem.create, ovfFile, deviceUrl.url, ovfFileItem.size);

                                progress += step;
                                vsHandler.Connection.Service.HttpNfcLeaseProgress(httpNfcLease, progress);
                                break;
                            }
                        }
                    }
                    vsHandler.Connection.Service.HttpNfcLeaseProgress(httpNfcLease, 100);
                    vsHandler.Connection.Service.HttpNfcLeaseComplete(httpNfcLease);
                }

            }

            return response;
        }

    private void SendVMDKFile(Boolean put, string fileName, string url, long diskCapacity)
        {
            Console.WriteLine("Destination host URL: " + url);
            Uri uri = new Uri(url);
            WebRequest request = HttpWebRequest.Create(uri);
            if (put)
            {
                request.Method = "PUT";
            }
            else
            {
                request.Method = "POST";
            }
            request.ContentLength = diskCapacity;
            request.ContentType = "application/x-vnd.vmware-streamVmdk";

            using (FileStream fileStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                //// Read the source file into a byte array.
                Stream dataStream = request.GetRequestStream();

                // Write the byte array to the other FileStream.
                int len = 0;
                byte[] buffer = new byte[1024 * 1024];

                while ((len = fileStream.Read(buffer, 0, buffer.Length-len)) > 0)
                {
                    dataStream.Write(buffer, 0, len);
                }
                dataStream.Flush();
                dataStream.Close();
            }
        }

    private string getOvfDescriptorFromLocal(string ovfDescriptorUrl)
        {
            string strContent = "";
            StreamReader sr = new System.IO.StreamReader(ovfDescriptorUrl);
            strContent = sr.ReadToEnd();
            return strContent;
        }

    private OvfCreateImportSpecParams CreateImportSpecParams(string newVmName, ManagedObjectReference hostmor)
        {
            OvfCreateImportSpecParams importSpecParams = new OvfCreateImportSpecParams();
            importSpecParams.hostSystem = hostmor;
            importSpecParams.locale = "";
            importSpecParams.entityName = newVmName;
            importSpecParams.deploymentOption = "";
            return importSpecParams;
        }

public VsphereResponse CreateOvf(string datacenterName, string path, string teamFolder, WindowsIdentity userIdentity, string rpName, string teamName, string envName, string machName, string ovfFile)
        {
            VsphereResponse response = new VsphereResponse();
 
            ManagedObjectReference dataStoreWithMostFreeSpace = GetDataStoreWithMostFreeSpace(datacenterName, userIdentity);
            ManagedObjectReference datacenterRef = vsHandler.Connection.Service.FindByInventoryPath(vsHandler.Connection.ServiceContent.searchIndex, datacenterName);
            ManagedObjectReference moRpRef = vsHandler.GetDecendentMoRef(datacenterRef, NodeTypeEnum.ResourcePool.ToString(), rpName);
            ManagedObjectReference temp = vsHandler.GetDecendentMoRef(datacenterRef, NodeTypeEnum.Folder.ToString(), teamName);
            ManagedObjectReference vmFolder = vsHandler.GetDecendentMoRef(temp, NodeTypeEnum.Folder.ToString(), envName);
            ManagedObjectReference hostmor = vsHandler.GetFirstDecendentMoRef(null, NodeTypeEnum.HostSystem.ToString());

Getting VersionMismatchFaultCode while accessing PBMService APIs

$
0
0

Hi,

I am getting VersionMismatchFaultCode while accessing PbmRetrieveServiceContent() API of PBM Service. 

From Documentation, I have read that we need to pass vcSessionCookie with sessionid of vCenter Server [returned by vim login API].

I have added custom header to execute this API using SoapUI tool.

Following is the request in SoapUI:

POST https://198.18.3.217/sdk/pbmService HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "urn:pbm/2.0"
Cookie: vcSessionCookie="7d864e17de7a3fbc56301b882abe538226bdced3",Path=/;HttpOnly;Secure;
Content-Length: 332
Host: 198.18.3.217
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:pbm">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:PbmRetrieveServiceContent>
         <urn:_this type="PbmServiceInstance">ServiceInstance</urn:_this>
      </urn:PbmRetrieveServiceContent>
   </soapenv:Body>
</soapenv:Envelope

Following is the response of this API execution:

<soapenv:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <soapenv:Fault>
         <faultcode>VersionMismatchFaultCode</faultcode>
         <faultstring>Unsupported version URI "urn:pbm/2.0"

while parsing SOAP body
at line 3, column 3

while parsing SOAP envelope
at line 1, column 0

while parsing HTTP request before method was determined
at line 1, column 0</faultstring>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>

================================================================================

By using gsoap generated code (C++) , I am facing the same issue.

I am stuck at this point.  Any help will be appreciated.

Thanks,

How do I obtain the data stored in vCenter SQL DB View [VPXV_LIC_USAGE_HISTORY] using the SDK / API?

$
0
0

Hi,

 

In the vCenter SQL DB, the [VPXV_LIC_USAGE_HISTORY] SQL view is a join between the [VPX_LIC_LICENSES] table and the [VPX_LIC_USAGE] table (there are some other tables but these are the main ones).

 

With the SDK, I can get the LicenseManager.LicenseAssignmentManager, and use QueryAssignedLicenses() to obtain license data (... and this data corresponds closely to the [VPX_LIC_LICENSES] SQL table). However, I can't find a way to obtain the data that corresponds to the [VPX_LIC_USAGE] table.

 

I believe the License Usage History Service takes snapshots on a regular basis. It is this time-stamped data I am trying to access.

 

The [VPX_LIC_USAGE] table has the following columns:

 

 

[SAMPLE_ID]

[CONTEXT_ID]

[SAMPLE_TS]

[SAMPLE_TIMESTAMP]

[USAGE]

[LAST_SAMPLE_COUNT]

[SAMPLE_DIGEST]

 

My goal here is to obtain the "SAMPLE_TIMESTAMP" values.

 

Any advice would be much appreciated.

Thanks

 

vSphere 6.0 Task and events notification

$
0
0

Hi ,

Is there a way where we can subscribe to the events and task status and vSphere can notify us when the event/task happens/completes.

 

My goal is to get the notifications from vSphere tasks and events , without having to poll for task/events from vSphere.  I am thinking of exposing an endpoint by extending the interface from vSphere management SDK (6.0)  and configure that endpoint in vSphere  , and get notified on tasks and events as it happens on vSphere instead of me polling the vSphere.

 

I am not sure if it is possible , any help/sample/documentation is appreciated.

 

Thanks

-Sada

grantedPrivileges

$
0
0

Hi,

 

What is the expected value to return when the AuthorizationManager send grantedPrivileges to your getData(). 

 

I have tried value=true and value=Global.Licenses.  None of which seems to work. 


Issue while executing VMWare PBM APIs

$
0
0

Hi,

 

We are getting SecurityError issue while executing vmware PBM APIs.

 

We have passed session-id for execution of PBM APIs .

 

Following are the steps followed to pass session-id for PBM APIs:

==================================================================

  1. Execute Login() vmware SDK API to login into vCenter Server
  2. Find Session-id from response header called Set-Cookie. Store this session-id
  3. Pass this session-id in custom header while executing PBM API  like PbmQueryProfile()

==================================================================

 

1)Execute Login vmware API:

 

We are executing login() vmware SDK API which returns a session-id in response. It also returns session-key in response.

Following is the response of login() API:

===========================================================================================

HTTP/1.1 200 OK

Date: Wed, 4 May 2016 06:17:15 GMT

Set-Cookie: vmware_soap_session="22fd25ebe4cd71ceea20d70cf867f1c69fddfcd6"; Path=/; HttpOnly; Secure;

Cache-Control: no-cache

Connection: Keep-Alive

Content-Type: text/xml; charset=utf-8

Content-Length: 839

 

<?xml version="1.0" encoding="UTF-8"?>

<soapenv:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<soapenv:Body>

<LoginResponse xmlns="urn:vim25"><returnval><key>52af2b2f-c56e-5d94-f35c-3c63a475dcc5</key><userName>Administrator</userName><fullName>Administrator </fullName><loginTime>2016-05-04T06:17:15.74788Z</loginTime><lastActiveTime>2016-05-04T06:17:15.74788Z</lastActiveTime><locale>en_US</locale><messageLocale>en_US</messageLocale><extensionSession>false</extensionSession><ipAddress>198.18.3.215</ipAddress><userAgent>Apache-HttpClient/4.1.1 (java 1.5)</userAgent><callCount>0</callCount></returnval></LoginResponse>

</soapenv:Body>

</soapenv:Envelope

=========================================================================================================================

 

 

2) Find Session-id from response header called Set-Cookie. Store this session-id

 

Set-Cookie has the session-id for the session as per few documents.

=========================================================================================

Set-Cookie: vmware_soap_session="22fd25ebe4cd71ceea20d70cf867f1c69fddfcd6"; Path=/; HttpOnly; Secure;

=========================================================================================

We also get session-key in login API response:

============================================

<key>52af2b2f-c56e-5d94-f35c-3c63a475dcc5</key>

============================================

 

3)Pass this session-id while executing PBM API  PbmQueryProfile():

 

For execution of PBM API, we are creating a custom header and passing the same session-id.

 

We have tried to  execute API by setting following values for the cookie:

======================================================================================

  1. Cookie: vcSessionCookie="22fd25ebe4cd71ceea20d70cf867f1c69fddfcd6"; Path=/; HttpOnly; Secure;
  2. Cookie: vmware_soap_session="22fd25ebe4cd71ceea20d70cf867f1c69fddfcd6"; Path=/; HttpOnly; Secure;
  3. Cookie: vcSessionCookie="52af2b2f-c56e-5d94-f35c-3c63a475dcc5”; Path=/; HttpOnly; Secure; [with Session-key]
  4. Cookie: vcSessionCookie="52af2b2f-c56e-5d94-f35c-3c63a475dcc5”; Path=/; HttpOnly; Secure; [with Session-key]

====================================================================================

 

But still we are getting Security Error while executing Vmware PBM APIs.

 

Request:

====================================================================================

POST https://198.18.3.217/pbm HTTP/1.1

Accept-Encoding: gzip,deflate

Content-Type: text/xml;charset=UTF-8

SOAPAction: "urn:pbm/2.0"

Cookie: vcSessionCookie=22fd25ebe4cd71ceea20d70cf867f1c69fddfcd6;

Content-Length: 515

Host: 198.18.3.217

Connection: Keep-Alive

User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

 

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:pbm">

   <soapenv:Header/>

   <soapenv:Body>

      <urn:PbmQueryProfile>

<urn:_this type="PbmProfileProfileManager">ProfileManager</urn:_this>

<urn:resourceType>

<urn:resourceType>STORAGE</urn:resourceType>

</urn:resourceType>

<!--Optional:-->

<urn:profileCategory></urn:profileCategory>

      </urn:PbmQueryProfile>

   </soapenv:Body>

</soapenv:Envelope>

====================================================================================

 

 

Response:

====================================================================================

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

   <soapenv:Body>

      <soapenv:Fault>

<faultcode>ServerFaultCode</faultcode>

<faultstring/>

<detail>

<RuntimeFaultFault xsi:type="vim25:SecurityError" xmlns="urn:pbm" xmlns:pbm="urn:pbm" xmlns:vim25="urn:vim25"/>

</detail>

      </soapenv:Fault>

   </soapenv:Body>

</soapenv:Envelope>

====================================================================================

 

Questions:

  1. Is there any issue with value of session-id ? or is there any issue with the way we are passing the session-id.
  2. Do we need to use some other API to extract session-id string?
  3. We want to avoid single sign-on API here to get session-id. Is it must to use Single Sign-on APIs to get session-id?

unmap task failed: Cannot complete the operation due to an incorrect request to the server

$
0
0

Hi,

I implemented the unmap task through vSphere 6 api method: UnmapVmfsVolumeEx_task(HostStorageSystem, VmfsUuid).

But when I run this task on vsphere web client side, this task failed:

 

TaskName: host.StorageSystem.unmapVmfsVolumeEx.label

TaskStatus: Cannot complete the operation due to an incorrect request to the server

 

I try to get the task info and the esxi log files, however no more useful information found.

 

What will be the possible reason for this failure? Where could I get more useful information about this failed task?

 

Thanks!

intervalId and PerfQuerySpec

$
0
0

I'm attempting to pull several vm performance counters. I'm finding that several counters aren't available unless I raise the vCenter statistics level. From reading the documentation it seems like an intervalID of 20 should be 'realtime' and should have all counters available. Is this not correct?

 

-jason

Adding custom objects to vCenter Inventory

$
0
0


Hi,

I've tried this in the webClient Forum, but was told to submit the discussion here.

 

We have custom objects in our plugin (WebClient), similar to the Rack and Chassis samples which are a part of the vSphere WebClient sdk.

We need to allow an Administrator to  assign permissions to these objects.

To do this, we think it must be necessary to add our objects to the vCenter Inventory.

Is our assumption correct? Is it possible to do this? Are there any samples to show how this is done?

thanks for any info

Cathy

vi sdkf for c++ of ESXi 5.5

$
0
0

Hi Guys:

  I'm trying to develop a client with C++ to communicate with vmware web service.

  By searching in the forum I've chosen the gsoap way to generate C++ library.

  This is how I generated the share object in Ubuntu:

  1. wsdlh -o vim25.h https://192.168.1.220/sdk/vim.wsdl
  2. soacpp2 -x -C -I/usr/local/share/gsoap/import vim25.h
  3. g++-fPIC-I/usr/local/share/gsoap/import-DWITH_OPENSSL-DWITH_COOKIES-c soapClient.cpp
  4. g++-fPIC-I/usr/local/share/gsoap/import-DWITH_OPENSSL-DWITH_COOKIES-c soapC.cpp
  5. g++-I/usr/local/share/gsoap/import-DWITH_OPENSSL-DWITH_COOKIES-shared -o libvimsoap.so soapC.o soapClient.o

 

Then I copy the share object  into /usr/lib, and compile the test.cpp as below:

  1. g++-I/usr/local/share/gsoap/import-DWITH_OPENSSL-DWITH_COOKIES/root/gsoap_2.8.31/gsoap-28/gsoap/stdsoap2.cpp test.cpp -lssl-lcrypto-l gsoapssl++-lpthread-lvimsoap-o vmat

 

  1. #include<iostream>
  2. #include<cstddef>
  3. #include"soapVimBindingProxy.h"
  4. #include"VimBinding.nsmap"
  5. #include"soapStub.h"
  6. #include"soapH.h"
  7. #include<time.h>
  8. #include<iostream>
  9.  
  10. usingnamespace std;
  11. void sigpipe_handle(int x){ cout <<"sigpipe "<< x << endl;}
  12.  
  13. int main(){
  14. VimBinding vim;
  15. int a =1;
  16. return a;
  17. }

 

This test program just did not except define a "Vimbinding"  variable here.

In the compiling I got the following error message here:

  1. test.cpp:14:5: error:VimBinding was not declared in this scope
  2. VimBinding vim;
  3. ^

 

I'm a newbei in this, could any of you guys kindly help to give some advice here, thanks a lot!

Viewing all 1375 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>