java vCenter SDK, как подключить несколько сетей к vApp?
Я тестирую vCloud Java SDK, и у меня есть некоторые проблемы с настройками сети.
Я достиг создания vApp из шаблона, но проблема в том, что vApp получает неправильные сетевые интерфейсы.
У меня есть два названных интерфейса (см. Рисунок):
1.) 4PM-GR-test-Routed
2.) 4 PM-GR-test-LAN-servers-arc-VLAN
Я когда я создаю vApp через шаблон с
Vapp vapp = vdc.instantiateVappTemplate(instVappTemplParams);
если я контролирую instVappTemplParams, то в параметрах есть обе сети, но в конечном созданном vApp есть две сети, каждая из которых называется 4PM-GR-test-Routed
Я использую следующий код:
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;
}
И когда я вызываю метод для установки IP-адресов филана, я получаю две сети с таким же именем, как я говорил ранее.
Код для настройки 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);
}
}
}
1 ответ
Решение
Я понял, что это ошибка в моем коде
этот код давал мне всегда одно и то же имя
String neteworkName = vdc.getAvailableNetworkRefs().iterator().next().getName();
так должно быть
String neteworkName = networkConnection.getNetwork();