0

vCloud Java SDK をテストしていますが、ネットワーク設定に問題があります。

テンプレートから vApp を作成することはできましたが、問題は、vApp が間違ったネットワーク インターフェイスを取得することです。

名前が付けられた 2 つのインターフェイスがあります (図を参照)。

ここに画像の説明を入力

1.) 4PM-GR-test-Routed

2.) 4PM-GR-test-LAN​​-servers-arc-VLAN

テンプレートを使用して vApp を作成すると、

Vapp vapp = vdc.instantiateVappTemplate(instVappTemplParams);

instVappTemplParamsを制御すると、params に両方のネットワークがありますが、最終的に作成された vApp には4PM-GR-test-Routedという名前の 2 つのネットワークがあります

私は次のコードを使用します:

public static Vapp newvAppFromTemplate(ReferenceType vAppTemplateReference, Vdc vdc) throws VCloudException {
    System.out.println("Instantiating " + vAppTemplateReference.getName() + " " + vAppTemplateReference.getHref());
    System.out.println("-------------------------------");

    // get the href of the OrgNetwork to which we can connect the vApp network
    if (vdc.getAvailableNetworkRefs().size() == 0) {
        System.out.println("No Networks in vdc to instantiate the vapp");
        System.exit(0);
    }

    List<ReferenceType> networks = new ArrayList<ReferenceType>(vdc.getAvailableNetworkRefs());

    // fill in the NetworkConfigSection
    NetworkConfigSectionType networkConfigSection = new NetworkConfigSectionType();
    MsgType networkInfo = new MsgType();
    networkConfigSection.setInfo(networkInfo);
    List<VAppNetworkConfigurationType> vAppNetworkConfigs = networkConfigSection.getNetworkConfig();

    // specify the NetworkConfiguration for the vApp network
    Iterator<ReferenceType> networkIterator = vdc.getAvailableNetworkRefs().iterator();     
    while(networkIterator.hasNext()){

        ReferenceType networkReference = networkIterator.next();
        System.out.println(networkReference.getName());
        NetworkConfigurationType networkConfiguration = new NetworkConfigurationType();
        networkConfiguration.setParentNetwork(networkReference);
        networkConfiguration.setFenceMode(FenceModeValuesType.BRIDGED.value());

        VAppNetworkConfigurationType vAppNetworkConfiguration = new VAppNetworkConfigurationType();
        vAppNetworkConfiguration.setConfiguration(networkConfiguration);
        vAppNetworkConfiguration.setNetworkName(networkReference.getName());

        vAppNetworkConfigs.add(vAppNetworkConfiguration);
    }

    // fill in remaining InstantititonParams (name, Source)
    InstantiationParamsType instantiationParams = new InstantiationParamsType();
    List<JAXBElement<? extends SectionType>> sections = instantiationParams.getSection();
    sections.add(new ObjectFactory().createNetworkConfigSection(networkConfigSection));

    // create the request body (InstantiateVAppTemplateParams)
    InstantiateVAppTemplateParamsType instVappTemplParams = new InstantiateVAppTemplateParamsType();
    instVappTemplParams.setName("4pm-test-00004");
    instVappTemplParams.setSource(vAppTemplateReference);
    instVappTemplParams.setInstantiationParams(instantiationParams);

    // make the request, and get an href to the vApp in return
    Vapp vapp = vdc.instantiateVappTemplate(instVappTemplParams);
    return vapp;
}

そして、filan IP-s を設定するメソッドを呼び出すと、前に言ったように、同じ名前の 2 つのネットワークを取得しました。

ip-a を設定するコードは次のとおりです。

public static void configureVMsIPAddressingMode(ReferenceType vappRef,Vdc vdc) throws VCloudException, TimeoutException {

    System.out.println("    Configuring VM Ip Addressing Mode");
    Vapp vapp = Vapp.getVappByReference(vcloudClient, vappRef);
    List<VM> childVms = vapp.getChildrenVms();

    for (VM childVm : childVms) {
        NetworkConnectionSectionType networkConnectionSection = childVm.getNetworkConnectionSection();
        List<NetworkConnectionType> networkConnections = networkConnectionSection.getNetworkConnection();
        for (NetworkConnectionType networkConnection : networkConnections) {
            String neteworkName = vdc.getAvailableNetworkRefs().iterator().next().getName();
            networkConnection.setIpAddressAllocationMode(IpAddressAllocationModeType.MANUAL.value());
            networkConnection.setNetwork(neteworkName);

            System.out.println(neteworkName);

            if(neteworkName.equals("4PM-GR-test-Routed")){
                networkConnection.setIpAddress("192.168.135.4");
            }else{
                networkConnection.setIpAddress("10.30.1.4");
            }

        }
        childVm.updateSection(networkConnectionSection).waitForTask(0);
        for (String ip : VM.getVMByReference(vcloudClient,childVm.getReference()).getIpAddressesById().values()) {
            System.out.println("        " + ip);
        }
    }
}
4

1 に答える 1

0

私はそれが私のコードのバグであることを理解しました

このコードは常に同じ名前を付けていました

String neteworkName = vdc.getAvailableNetworkRefs().iterator().next().getName();

そのはず

String neteworkName = networkConnection.getNetwork(); 
于 2013-02-22T12:36:07.870 に答える