Search code examples
javavsphere

vsphere-automation-sdk-java UNAUTHENTICATED- vSphere 6.5


I am trying to clone a vsphere VM using Java SDK (https://github.com/vmware/vsphere-automation-sdk-java) I am able to run all available examples like list VM and creat VM and all. but when I try to execute vmService.instantClone(instantCloneSpec) it run in to this specific error.

Code:

import java.util.Collections;
import java.util.List;

import com.vmware.vcenter.VMTypes;
import org.apache.commons.cli.Option;
import com.vmware.vcenter.VM;
import org.camunda.bpm.getstarted.loanapproval.common.SamplesAbstractBase;




public class CloneVmManager extends SamplesAbstractBase {



    private VM vmService;

    /**
     * Define the options specific to this sample and configure the sample using
     * command-line arguments or a config file
     *
     * @param args command line arguments passed to the sample
     */
    protected void parseArgs(String[] args) {
        List<Option> optionList = Collections.<Option>emptyList();
        super.parseArgs(optionList, args);
    }

    protected void setup() throws Exception {
        this.vmService =
                vapiAuthHelper.getStubFactory()
                        .createStub(VM.class, sessionStubConfig);



    }

    protected void run() throws Exception {
        // TODO: Add your sample code here
     try {
         VMTypes.InstantClonePlacementSpec placementSpec= new VMTypes.InstantClonePlacementSpec();
         placementSpec.setDatastore("datastore1");
         placementSpec.setFolder("cvs");
         VMTypes.InstantCloneSpec instantCloneSpec =new VMTypes.InstantCloneSpec();
         instantCloneSpec.setName("instantClone1");
//         instantCloneSpec.setSource("tpl_reproxy-6_10-wax-CentOS6-h9-ver2.4");
         instantCloneSpec.setSource("_Ubuntu_19_Template");
         instantCloneSpec.setDisconnectAllNics(true);
         instantCloneSpec.setPlacement(placementSpec);
         vmService.instantClone(instantCloneSpec);
     }catch (Exception e){
         System.out.println("something went wrong"+e.getMessage());
         e.printStackTrace();
     }


    }
    protected void cleanup() throws Exception {
        // TODO: Add cleanup here
    }

    public static void main(String[] args) throws Exception {
        /*
         * Execute the sample using the command line arguments or parameters
         * from the configuration file. This executes the following steps:
         * 1. Parse the arguments required by the sample
         * 2. Login to the server
         * 3. Setup any resources required by the sample run
         * 4. Run the sample
         * 5. Cleanup any data created by the sample run, if cleanup=true
         * 6. Logout of the server
         */
//        new CloneVmManager().execute(args);
    }

    public void runcustom(String[] args) throws Exception{
        System.out.println("inside clone vm");
        for(String s:args){
            System.out.println("arg:->"+s);

        }
        new CloneVmManager().execute(args);
    }

}

as you can see it says You are susceptible to man-in-the-middle attacks as i am providing --skip-server-verification arg so am not sure it is authentication issue .

My arg would be like:

    String arg[] = {
            "--server","192.168.1.1","--username","[email protected]","--password","password","--skip-server-verification"}

Error:

2019-12-10 11:06:33.685  WARN 1140 --- [nio-8080-exec-3] c.v.v.i.p.c.r.h.TrustAllX509TrustManager : Skipped the validation of a certificate chain due to configuration policy. Your co
nnection is not secure!
2019-12-10 11:06:33.729  WARN 1140 --- [nio-8080-exec-3] c.v.v.i.p.c.r.h.AllowAllHostnameVerifier : Cannot validate the identity of 192.168.1.160 due to the hostname-verification bei
ng disabled. You are susceptible to man-in-the-middle attacks!
something went wrongUnauthenticated (com.vmware.vapi.std.errors.unauthenticated) => {
    messages = [LocalizableMessage (com.vmware.vapi.std.localizable_message) => {
    id = vapi.method.authentication.required,
    defaultMessage = This method requires authentication.,
    args = [],
    params = <null>,
    localized = <null>
}],
    data = <null>,
    errorType = UNAUTHENTICATED,
    challenge = <null>
}
com.vmware.vapi.std.errors.Unauthenticated: Unauthenticated (com.vmware.vapi.std.errors.unauthenticated) => {
    messages = [LocalizableMessage (com.vmware.vapi.std.localizable_message) => {
    id = vapi.method.authentication.required,
    defaultMessage = This method requires authentication.,
    args = [],
    params = <null>,
    localized = <null>
}],
    data = <null>,
    errorType = UNAUTHENTICATED,
    challenge = <null>
}
        at com.vmware.vapi.std.errors.Unauthenticated._newInstance2(Unauthenticated.java:244)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)

Solution

  • The VM#instantClone API is not available in vSphere 6.5. It is not available even in 6.7 or the latest 6.7 U3. It is only available in VMC on AWS at the moment.

    The "This method was added in vSphere API 6.7.1." statement (which refers 6.7 U1) from the reference documentation is wrong.