|
87 | 87 | import com.amazon.ec2.DisassociateAddressResponse; |
88 | 88 | import com.amazon.ec2.GetPasswordDataResponse; |
89 | 89 | import com.amazon.ec2.ImportKeyPairResponse; |
| 90 | +import com.amazon.ec2.LaunchPermissionItemType; |
90 | 91 | import com.amazon.ec2.ModifyImageAttributeResponse; |
91 | 92 | import com.amazon.ec2.RebootInstancesResponse; |
92 | 93 | import com.amazon.ec2.RegisterImageResponse; |
|
123 | 124 | import com.cloud.bridge.service.core.ec2.EC2Filter; |
124 | 125 | import com.cloud.bridge.service.core.ec2.EC2GroupFilterSet; |
125 | 126 | import com.cloud.bridge.service.core.ec2.EC2Image; |
| 127 | +import com.cloud.bridge.service.core.ec2.EC2ImageAttributes.ImageAttribute; |
| 128 | +import com.cloud.bridge.service.core.ec2.EC2ImageLaunchPermission; |
126 | 129 | import com.cloud.bridge.service.core.ec2.EC2ImportKeyPair; |
127 | 130 | import com.cloud.bridge.service.core.ec2.EC2InstanceFilterSet; |
128 | 131 | import com.cloud.bridge.service.core.ec2.EC2IpPermission; |
129 | 132 | import com.cloud.bridge.service.core.ec2.EC2KeyPairFilterSet; |
| 133 | +import com.cloud.bridge.service.core.ec2.EC2ModifyImageAttribute; |
130 | 134 | import com.cloud.bridge.service.core.ec2.EC2RebootInstances; |
131 | 135 | import com.cloud.bridge.service.core.ec2.EC2RegisterImage; |
132 | 136 | import com.cloud.bridge.service.core.ec2.EC2ReleaseAddress; |
@@ -1021,38 +1025,105 @@ private void registerImage( HttpServletRequest request, HttpServletResponse resp |
1021 | 1025 | serializeResponse(response, EC2response); |
1022 | 1026 | } |
1023 | 1027 |
|
1024 | | - private void modifyImageAttribute( HttpServletRequest request, HttpServletResponse response ) |
| 1028 | + private void modifyImageAttribute( HttpServletRequest request, HttpServletResponse response ) |
1025 | 1029 | throws ADBException, XMLStreamException, IOException { |
1026 | | - EC2Image image = new EC2Image(); |
| 1030 | + EC2ModifyImageAttribute ec2request = new EC2ModifyImageAttribute(); |
1027 | 1031 |
|
1028 | | - // -> its interesting to note that the SOAP API docs has description but the REST API docs do not |
1029 | | - String[] imageId = request.getParameterValues( "ImageId" ); |
1030 | | - if ( null != imageId && 0 < imageId.length ) |
1031 | | - image.setId( imageId[0] ); |
1032 | | - else { response.sendError(530, "Missing ImageId parameter" ); return; } |
| 1032 | + String[] imageId = request.getParameterValues( "ImageId" ); |
| 1033 | + if ( imageId != null && imageId.length > 0 ) |
| 1034 | + ec2request.setImageId( imageId[0]); |
| 1035 | + else { |
| 1036 | + response.sendError(530, "Missing ImageId parameter" ); |
| 1037 | + return; |
| 1038 | + } |
1033 | 1039 |
|
1034 | | - String[] description = request.getParameterValues( "Description" ); |
1035 | | - if ( null != description && 0 < description.length ) |
1036 | | - image.setDescription( description[0] ); |
1037 | | - else { response.sendError(530, "Missing Description parameter" ); return; } |
| 1040 | + String[] description = request.getParameterValues( "Description.Value" ); |
| 1041 | + if ( description != null && description.length > 0 ) { |
| 1042 | + ec2request.setAttribute(ImageAttribute.description); |
| 1043 | + ec2request.setDescription(description[0]); |
| 1044 | + } else { |
| 1045 | + //add all launch permissions to ec2request |
| 1046 | + ec2request = addLaunchPermImageAttribute(request, ec2request); |
| 1047 | + if (ec2request.getLaunchPermissionSet().length > 0) |
| 1048 | + ec2request.setAttribute(ImageAttribute.launchPermission); |
| 1049 | + else { |
| 1050 | + response.sendError(530, "Missing Attribute parameter - Description/LaunchPermission should be provided" ); |
| 1051 | + return; |
| 1052 | + } |
| 1053 | + } |
1038 | 1054 |
|
1039 | 1055 | // -> execute the request |
1040 | | - ModifyImageAttributeResponse EC2response = EC2SoapServiceImpl.toModifyImageAttributeResponse( ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute( image )); |
| 1056 | + ModifyImageAttributeResponse EC2response = EC2SoapServiceImpl.toModifyImageAttributeResponse( |
| 1057 | + ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute( ec2request )); |
1041 | 1058 | serializeResponse(response, EC2response); |
1042 | 1059 | } |
1043 | 1060 |
|
| 1061 | + private EC2ModifyImageAttribute addLaunchPermImageAttribute(HttpServletRequest request, EC2ModifyImageAttribute ec2request) { |
| 1062 | + String[] users = {".UserId", ".Group"}; |
| 1063 | + String[] operations = {"LaunchPermission.Add.", "LaunchPermission.Remove."}; |
| 1064 | + int nCount = 1; |
| 1065 | + |
| 1066 | + for (int i = 0; i < 2; i++) { |
| 1067 | + for (int j = 0; j < 2; j++) { |
| 1068 | + List<String> launchPermissionList = new ArrayList<String>(); |
| 1069 | + do { |
| 1070 | + String[] launchPermissionAddGroup = request.getParameterValues( operations[j] + nCount + users[i] ); |
| 1071 | + if (launchPermissionAddGroup != null && launchPermissionAddGroup.length > 0) |
| 1072 | + launchPermissionList.add(launchPermissionAddGroup[0]); |
| 1073 | + else |
| 1074 | + break; |
| 1075 | + nCount++; |
| 1076 | + } while (true); |
| 1077 | + if (nCount != 1) { |
| 1078 | + EC2ImageLaunchPermission ec2LaunchPermission = new EC2ImageLaunchPermission(); |
| 1079 | + if (operations[j].contains("Add")) |
| 1080 | + ec2LaunchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.add); |
| 1081 | + else |
| 1082 | + ec2LaunchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.remove); |
| 1083 | + for (String launchPerm : launchPermissionList) { |
| 1084 | + ec2LaunchPermission.addLaunchPermission(launchPerm); |
| 1085 | + } |
| 1086 | + ec2request.addLaunchPermission(ec2LaunchPermission); |
| 1087 | + nCount = 1; |
| 1088 | + } |
| 1089 | + } |
| 1090 | + } |
| 1091 | + |
| 1092 | + return ec2request; |
| 1093 | + } |
| 1094 | + |
1044 | 1095 | private void resetImageAttribute( HttpServletRequest request, HttpServletResponse response ) |
1045 | 1096 | throws ADBException, XMLStreamException, IOException { |
1046 | | - EC2Image image = new EC2Image(); |
| 1097 | + EC2ModifyImageAttribute ec2request = new EC2ModifyImageAttribute(); |
1047 | 1098 |
|
1048 | 1099 | String[] imageId = request.getParameterValues( "ImageId" ); |
1049 | | - if ( null != imageId && 0 < imageId.length ) |
1050 | | - image.setId( imageId[0] ); |
1051 | | - else { response.sendError(530, "Missing ImageId parameter" ); return; } |
| 1100 | + if ( imageId != null && imageId.length > 0) |
| 1101 | + ec2request.setImageId(imageId[0]); |
| 1102 | + else { |
| 1103 | + response.sendError(530, "Missing ImageId parameter" ); |
| 1104 | + return; |
| 1105 | + } |
| 1106 | + |
| 1107 | + String[] attribute = request.getParameterValues( "Attribute" ); |
| 1108 | + if ( attribute != null && attribute.length > 0 ) { |
| 1109 | + if (attribute[0].equalsIgnoreCase("launchPermission")) |
| 1110 | + ec2request.setAttribute(ImageAttribute.launchPermission); |
| 1111 | + else { |
| 1112 | + response.sendError(501, "Unsupported Attribute - only launchPermission supported" ); |
| 1113 | + return; |
| 1114 | + } |
| 1115 | + } else { |
| 1116 | + response.sendError(530, "Missing Attribute parameter" ); |
| 1117 | + return; |
| 1118 | + } |
| 1119 | + |
| 1120 | + EC2ImageLaunchPermission launchPermission = new EC2ImageLaunchPermission(); |
| 1121 | + launchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.reset); |
| 1122 | + ec2request.addLaunchPermission(launchPermission); |
1052 | 1123 |
|
1053 | 1124 | // -> execute the request |
1054 | | - image.setDescription( "" ); |
1055 | | - ResetImageAttributeResponse EC2response = EC2SoapServiceImpl.toResetImageAttributeResponse( ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute( image )); |
| 1125 | + ResetImageAttributeResponse EC2response = EC2SoapServiceImpl.toResetImageAttributeResponse( |
| 1126 | + ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute( ec2request )); |
1056 | 1127 | serializeResponse(response, EC2response); |
1057 | 1128 | } |
1058 | 1129 |
|
|
0 commit comments