@@ -118,8 +118,8 @@ public static File base64StringToFile(String encodedIsoData, String folder, Stri
118118 * This method will build the metadata files required by OpenStack driver. Then, an ISO is going to be generated and returned as a String in base 64.
119119 * If vmData is null, we throw a {@link CloudRuntimeException}. Moreover, {@link IOException} are captured and re-thrown as {@link CloudRuntimeException}.
120120 */
121- public static String buildConfigDrive (NicProfile nic , List <String []> vmData , String isoFileName , String driveLabel , Map <String , String > customUserdataParams , List <Network .Service > supportedServices ) {
122- if (vmData == null && nic == null ) {
121+ public static String buildConfigDrive (List < NicProfile > nics , List <String []> vmData , String isoFileName , String driveLabel , Map <String , String > customUserdataParams , Map < Long , List <Network .Service > > supportedServices ) {
122+ if (vmData == null && nics == null ) {
123123 throw new CloudRuntimeException ("No VM metadata and nic profile provided" );
124124 }
125125
@@ -132,11 +132,14 @@ public static String buildConfigDrive(NicProfile nic, List<String[]> vmData, Str
132132 File openStackFolder = new File (tempDirName + ConfigDrive .openStackConfigDriveName );
133133
134134 writeVendorEmptyJsonFile (openStackFolder );
135- writeNetworkData (nic , supportedServices , openStackFolder );
136- if (supportedServices .contains (Network .Service .UserData )) {
137- writeVmMetadata (vmData , tempDirName , openStackFolder , customUserdataParams );
135+ writeNetworkData (nics , supportedServices , openStackFolder );
136+ for (NicProfile nic : nics ) {
137+ if (supportedServices .get (nic .getId ()).contains (Network .Service .UserData )) {
138+ writeVmMetadata (vmData , tempDirName , openStackFolder , customUserdataParams );
138139
139- linkUserData (tempDirName );
140+ linkUserData (tempDirName );
141+ break ;
142+ }
140143 }
141144
142145 return generateAndRetrieveIsoAsBase64Iso (isoFileName , driveLabel , tempDirName );
@@ -244,21 +247,24 @@ static JsonObject getExistingNetworkData(File openStackFolder) {
244247 /**
245248 * First we generate a JSON object using {@link #getNetworkDataJsonObjectForNic(NicProfile, List)}, then we write it to a file called "network_data.json".
246249 */
247- static void writeNetworkData (NicProfile nic , List <Network .Service > supportedServices , File openStackFolder ) {
248- JsonObject networkData = getNetworkDataJsonObjectForNic (nic , supportedServices );
249- JsonObject existingNetworkData = getExistingNetworkData (openStackFolder );
250+ static void writeNetworkData (List <NicProfile > nics , Map <Long , List <Network .Service >> supportedServices , File openStackFolder ) {
250251
251252 JsonObject finalNetworkData = new JsonObject ();
252- mergeJsonArraysAndUpdateObject (finalNetworkData , existingNetworkData , networkData , "links" , "id" , "type" );
253- mergeJsonArraysAndUpdateObject (finalNetworkData , existingNetworkData , networkData , "networks" , "id" , "type" );
254- mergeJsonArraysAndUpdateObject (finalNetworkData , existingNetworkData , networkData , "services" , "address" , "type" );
253+ for (NicProfile nic : nics ) {
254+ List <Network .Service > supportedService = supportedServices .get (nic .getId ());
255+ JsonObject networkData = getNetworkDataJsonObjectForNic (nic , supportedService );
256+
257+ mergeJsonArraysAndUpdateObject (finalNetworkData , networkData , "links" , "id" , "type" );
258+ mergeJsonArraysAndUpdateObject (finalNetworkData , networkData , "networks" , "id" , "type" );
259+ mergeJsonArraysAndUpdateObject (finalNetworkData , networkData , "services" , "address" , "type" );
260+ }
255261
256- writeFile (openStackFolder , "network_data.json" , existingNetworkData .toString ());
262+ writeFile (openStackFolder , "network_data.json" , finalNetworkData .toString ());
257263 }
258264
259- static void mergeJsonArraysAndUpdateObject (JsonObject finalObject , JsonObject obj1 , JsonObject obj2 , String memberName , String keyPart1 , String keyPart2 ) {
260- JsonArray existingMembers = obj1 .has (memberName ) ? obj1 .get (memberName ).getAsJsonArray () : new JsonArray ();
261- JsonArray newMembers = obj2 .has (memberName ) ? obj2 .get (memberName ).getAsJsonArray () : new JsonArray ();
265+ static void mergeJsonArraysAndUpdateObject (JsonObject finalObject , JsonObject newObj , String memberName , String keyPart1 , String keyPart2 ) {
266+ JsonArray existingMembers = finalObject .has (memberName ) ? finalObject .get (memberName ).getAsJsonArray () : new JsonArray ();
267+ JsonArray newMembers = newObj .has (memberName ) ? newObj .get (memberName ).getAsJsonArray () : new JsonArray ();
262268
263269 if (existingMembers .size () > 0 || newMembers .size () > 0 ) {
264270 JsonArray finalMembers = new JsonArray ();
0 commit comments