|
33 | 33 | import com.cloud.bridge.service.core.ec2.EC2CreateImageResponse; |
34 | 34 | import com.cloud.bridge.service.core.ec2.EC2CreateKeyPair; |
35 | 35 | import com.cloud.bridge.service.core.ec2.EC2CreateVolume; |
| 36 | +import com.cloud.bridge.service.core.ec2.EC2Tags; |
36 | 37 | import com.cloud.bridge.service.core.ec2.EC2DeleteKeyPair; |
37 | 38 | import com.cloud.bridge.service.core.ec2.EC2DescribeAddresses; |
38 | 39 | import com.cloud.bridge.service.core.ec2.EC2DescribeAddressesResponse; |
|
46 | 47 | import com.cloud.bridge.service.core.ec2.EC2DescribeInstancesResponse; |
47 | 48 | import com.cloud.bridge.service.core.ec2.EC2DescribeKeyPairs; |
48 | 49 | import com.cloud.bridge.service.core.ec2.EC2DescribeKeyPairsResponse; |
| 50 | +import com.cloud.bridge.service.core.ec2.EC2ResourceTag; |
49 | 51 | import com.cloud.bridge.service.core.ec2.EC2DescribeSecurityGroups; |
50 | 52 | import com.cloud.bridge.service.core.ec2.EC2DescribeSecurityGroupsResponse; |
51 | 53 | import com.cloud.bridge.service.core.ec2.EC2DescribeSnapshots; |
52 | 54 | import com.cloud.bridge.service.core.ec2.EC2DescribeSnapshotsResponse; |
| 55 | +import com.cloud.bridge.service.core.ec2.EC2DescribeTags; |
| 56 | +import com.cloud.bridge.service.core.ec2.EC2DescribeTagsResponse; |
53 | 57 | import com.cloud.bridge.service.core.ec2.EC2DescribeVolumes; |
54 | 58 | import com.cloud.bridge.service.core.ec2.EC2DescribeVolumesResponse; |
55 | 59 | import com.cloud.bridge.service.core.ec2.EC2DisassociateAddress; |
|
69 | 73 | import com.cloud.bridge.service.core.ec2.EC2RebootInstances; |
70 | 74 | import com.cloud.bridge.service.core.ec2.EC2RegisterImage; |
71 | 75 | import com.cloud.bridge.service.core.ec2.EC2ReleaseAddress; |
| 76 | +import com.cloud.bridge.service.core.ec2.EC2TagKeyValue; |
| 77 | +import com.cloud.bridge.service.core.ec2.EC2TagTypeId; |
72 | 78 | import com.cloud.bridge.service.core.ec2.EC2RunInstances; |
73 | 79 | import com.cloud.bridge.service.core.ec2.EC2RunInstancesResponse; |
74 | 80 | import com.cloud.bridge.service.core.ec2.EC2SSHKeyPair; |
|
79 | 85 | import com.cloud.bridge.service.core.ec2.EC2StartInstancesResponse; |
80 | 86 | import com.cloud.bridge.service.core.ec2.EC2StopInstances; |
81 | 87 | import com.cloud.bridge.service.core.ec2.EC2StopInstancesResponse; |
| 88 | +import com.cloud.bridge.service.core.ec2.EC2TagsFilterSet; |
82 | 89 | import com.cloud.bridge.service.core.ec2.EC2Volume; |
83 | 90 | import com.cloud.bridge.service.core.ec2.EC2VolumeFilterSet; |
84 | 91 | import com.cloud.bridge.service.exception.EC2ServiceException; |
@@ -199,6 +206,89 @@ public CreateVolumeResponse createVolume(CreateVolume createVolume) { |
199 | 206 | return toCreateVolumeResponse( engine.createVolume( request )); |
200 | 207 | } |
201 | 208 |
|
| 209 | + public CreateTagsResponse createTags(CreateTags createTags) { |
| 210 | + EC2Tags request = new EC2Tags(); |
| 211 | + CreateTagsType ctt = createTags.getCreateTags(); |
| 212 | + |
| 213 | + ResourceIdSetType resourceIds = ctt.getResourcesSet(); |
| 214 | + ResourceTagSetType resourceTags = ctt.getTagSet(); |
| 215 | + request = toResourceTypeAndIds(resourceIds); |
| 216 | + //add resource tag's to the request |
| 217 | + if (resourceTags != null) { |
| 218 | + ResourceTagSetItemType[] items = resourceTags.getItem(); |
| 219 | + if (items != null) { |
| 220 | + for( int i=0; i < items.length; i++ ) { |
| 221 | + EC2TagKeyValue param1 = new EC2TagKeyValue(); |
| 222 | + param1.setKey(items[i].getKey()); |
| 223 | + param1.setValue(items[i].getValue()); |
| 224 | + request.addResourceTag(param1); |
| 225 | + } |
| 226 | + } |
| 227 | + } |
| 228 | + return toCreateTagsResponse( engine.modifyTags( request, "create")); |
| 229 | + } |
| 230 | + |
| 231 | + public DeleteTagsResponse deleteTags(DeleteTags deleteTags) { |
| 232 | + EC2Tags request = new EC2Tags(); |
| 233 | + DeleteTagsType dtt = deleteTags.getDeleteTags(); |
| 234 | + |
| 235 | + ResourceIdSetType resourceIds = dtt.getResourcesSet(); |
| 236 | + DeleteTagsSetType resourceTags = dtt.getTagSet(); |
| 237 | + request = toResourceTypeAndIds(resourceIds); |
| 238 | + //add resource tag's to the request |
| 239 | + if (resourceTags != null) { |
| 240 | + DeleteTagsSetItemType[] items = resourceTags.getItem(); |
| 241 | + if (items != null) { |
| 242 | + for( int i=0; i < items.length; i++ ) { |
| 243 | + EC2TagKeyValue param1 = new EC2TagKeyValue(); |
| 244 | + param1.setKey(items[i].getKey()); |
| 245 | + if (items[i].getValue() != null) |
| 246 | + param1.setValue(items[i].getValue()); |
| 247 | + request.addResourceTag(param1); |
| 248 | + } |
| 249 | + } |
| 250 | + } |
| 251 | + return toDeleteTagsResponse( engine.modifyTags( request, "delete")); |
| 252 | + } |
| 253 | + |
| 254 | + private EC2Tags toResourceTypeAndIds(ResourceIdSetType resourceIds) { |
| 255 | + EC2Tags request = new EC2Tags(); |
| 256 | + //add resource-type and resource-id's to the request |
| 257 | + if (resourceIds != null) { |
| 258 | + ResourceIdSetItemType[] items = resourceIds.getItem(); |
| 259 | + List<String> resourceTypeList = new ArrayList<String>(); |
| 260 | + if (items != null) { |
| 261 | + for( int i=0; i < items.length; i++ ) { |
| 262 | + String resourceType = items[i].getResourceId().split(":")[0]; |
| 263 | + if (resourceTypeList.isEmpty()) |
| 264 | + resourceTypeList.add(resourceType); |
| 265 | + else { |
| 266 | + Boolean existsInList = false; |
| 267 | + for (String addedResourceType : resourceTypeList) { |
| 268 | + if (addedResourceType.equalsIgnoreCase(resourceType)) { |
| 269 | + existsInList = true; |
| 270 | + break; |
| 271 | + } |
| 272 | + } |
| 273 | + if (!existsInList) |
| 274 | + resourceTypeList.add(resourceType); |
| 275 | + } |
| 276 | + } |
| 277 | + for (String resourceType : resourceTypeList){ |
| 278 | + EC2TagTypeId param1 = new EC2TagTypeId(); |
| 279 | + param1.setResourceType(resourceType); |
| 280 | + for( int i=0; i < items.length; i++ ) { |
| 281 | + String[] resourceTag = items[i].getResourceId().split(":"); |
| 282 | + if (resourceType.equals(resourceTag[0])) |
| 283 | + param1.addResourceId(resourceTag[1]); |
| 284 | + } |
| 285 | + request.addResourceType(param1); |
| 286 | + } |
| 287 | + } |
| 288 | + } |
| 289 | + return request; |
| 290 | + } |
| 291 | + |
202 | 292 | public DeleteSecurityGroupResponse deleteSecurityGroup(DeleteSecurityGroup deleteSecurityGroup) { |
203 | 293 | DeleteSecurityGroupType sgt = deleteSecurityGroup.getDeleteSecurityGroup(); |
204 | 294 | return toDeleteSecurityGroupResponse( engine.deleteSecurityGroup( sgt.getGroupName())); |
@@ -434,7 +524,18 @@ public DescribeSnapshotsResponse describeSnapshots(DescribeSnapshots describeSna |
434 | 524 | return toDescribeSnapshotsResponse(engine.handleRequest(request)); |
435 | 525 | } |
436 | 526 |
|
437 | | - |
| 527 | + public DescribeTagsResponse describeTags(DescribeTags decsribeTags) { |
| 528 | + EC2DescribeTags request = new EC2DescribeTags(); |
| 529 | + DescribeTagsType dtt = decsribeTags.getDescribeTags(); |
| 530 | + |
| 531 | + FilterSetType fst = dtt.getFilterSet(); |
| 532 | + |
| 533 | + if (fst != null) |
| 534 | + request.setFilterSet( toTagsFilterSet( fst )); |
| 535 | + |
| 536 | + return toDescribeTagsResponse(engine.describeTags(request)); |
| 537 | + } |
| 538 | + |
438 | 539 | public DescribeVolumesResponse describeVolumes(DescribeVolumes describeVolumes) |
439 | 540 | { |
440 | 541 | EC2DescribeVolumes request = new EC2DescribeVolumes(); |
@@ -1094,8 +1195,28 @@ private EC2AvailabilityZonesFilterSet toAvailabiltyZonesFilterSet( FilterSetType |
1094 | 1195 | } |
1095 | 1196 | return azfs; |
1096 | 1197 | } |
1097 | | - |
1098 | | - |
| 1198 | + |
| 1199 | + private EC2TagsFilterSet toTagsFilterSet( FilterSetType fst ) { |
| 1200 | + EC2TagsFilterSet tfs = new EC2TagsFilterSet(); |
| 1201 | + |
| 1202 | + FilterType[] items = fst.getItem(); |
| 1203 | + if (items != null) { |
| 1204 | + for (FilterType item : items) { |
| 1205 | + EC2Filter oneFilter = new EC2Filter(); |
| 1206 | + String filterName = item.getName(); |
| 1207 | + oneFilter.setName( filterName ); |
| 1208 | + |
| 1209 | + ValueSetType vft = item.getValueSet(); |
| 1210 | + ValueType[] valueItems = vft.getItem(); |
| 1211 | + for (ValueType valueItem : valueItems) { |
| 1212 | + oneFilter.addValueEncoded( valueItem.getValue()); |
| 1213 | + } |
| 1214 | + tfs.addFilter( oneFilter ); |
| 1215 | + } |
| 1216 | + } |
| 1217 | + return tfs; |
| 1218 | + } |
| 1219 | + |
1099 | 1220 | // toMethods |
1100 | 1221 | public static DescribeVolumesResponse toDescribeVolumesResponse( EC2DescribeVolumesResponse engineResponse ) |
1101 | 1222 | { |
@@ -1931,7 +2052,48 @@ public static RevokeSecurityGroupIngressResponse toRevokeSecurityGroupIngressRes |
1931 | 2052 | response.setRevokeSecurityGroupIngressResponse( param1 ); |
1932 | 2053 | return response; |
1933 | 2054 | } |
1934 | | - |
| 2055 | + |
| 2056 | + public static CreateTagsResponse toCreateTagsResponse( boolean success ) { |
| 2057 | + CreateTagsResponse response = new CreateTagsResponse(); |
| 2058 | + CreateTagsResponseType param1 = new CreateTagsResponseType(); |
| 2059 | + |
| 2060 | + param1.set_return(success); |
| 2061 | + param1.setRequestId( UUID.randomUUID().toString()); |
| 2062 | + response.setCreateTagsResponse(param1); |
| 2063 | + return response; |
| 2064 | + } |
| 2065 | + |
| 2066 | + public static DeleteTagsResponse toDeleteTagsResponse( boolean success ) { |
| 2067 | + DeleteTagsResponse response = new DeleteTagsResponse(); |
| 2068 | + DeleteTagsResponseType param1 = new DeleteTagsResponseType(); |
| 2069 | + |
| 2070 | + param1.set_return(success); |
| 2071 | + param1.setRequestId( UUID.randomUUID().toString()); |
| 2072 | + response.setDeleteTagsResponse(param1); |
| 2073 | + return response; |
| 2074 | + } |
| 2075 | + |
| 2076 | + public static DescribeTagsResponse toDescribeTagsResponse( EC2DescribeTagsResponse engineResponse) { |
| 2077 | + DescribeTagsResponse response = new DescribeTagsResponse(); |
| 2078 | + DescribeTagsResponseType param1 = new DescribeTagsResponseType(); |
| 2079 | + |
| 2080 | + EC2ResourceTag[] tags = engineResponse.getTagsSet(); |
| 2081 | + TagSetType param2 = new TagSetType(); |
| 2082 | + for (EC2ResourceTag tag : tags) { |
| 2083 | + TagSetItemType param3 = new TagSetItemType(); |
| 2084 | + param3.setResourceId(tag.getResourceId()); |
| 2085 | + param3.setResourceType(tag.getResourceType()); |
| 2086 | + param3.setKey(tag.getKey()); |
| 2087 | + if (tag.getValue() != null) |
| 2088 | + param3.setValue(tag.getValue()); |
| 2089 | + param2.addItem(param3); |
| 2090 | + } |
| 2091 | + param1.setTagSet(param2); |
| 2092 | + param1.setRequestId( UUID.randomUUID().toString()); |
| 2093 | + response.setDescribeTagsResponse(param1); |
| 2094 | + return response; |
| 2095 | + } |
| 2096 | + |
1935 | 2097 | public DescribeKeyPairsResponse describeKeyPairs(DescribeKeyPairs describeKeyPairs) { |
1936 | 2098 |
|
1937 | 2099 | EC2DescribeKeyPairs ec2Request = new EC2DescribeKeyPairs(); |
@@ -2116,10 +2278,6 @@ public CreateSpotDatafeedSubscriptionResponse createSpotDatafeedSubscription(Cre |
2116 | 2278 | public CreateSubnetResponse createSubnet(CreateSubnet createSubnet) { |
2117 | 2279 | throw new EC2ServiceException(ClientError.Unsupported, "This operation is not available"); |
2118 | 2280 | } |
2119 | | - |
2120 | | - public CreateTagsResponse createTags(CreateTags createTags) { |
2121 | | - throw new EC2ServiceException(ClientError.Unsupported, "This operation is not available"); |
2122 | | - } |
2123 | 2281 |
|
2124 | 2282 | public CreateVpcResponse createVpc(CreateVpc createVpc) { |
2125 | 2283 | throw new EC2ServiceException(ClientError.Unsupported, "This operation is not available"); |
@@ -2156,10 +2314,6 @@ public DeleteSpotDatafeedSubscriptionResponse deleteSpotDatafeedSubscription(Del |
2156 | 2314 | public DeleteSubnetResponse deleteSubnet(DeleteSubnet deleteSubnet) { |
2157 | 2315 | throw new EC2ServiceException(ClientError.Unsupported, "This operation is not available"); |
2158 | 2316 | } |
2159 | | - |
2160 | | - public DeleteTagsResponse deleteTags(DeleteTags deleteTags) { |
2161 | | - throw new EC2ServiceException(ClientError.Unsupported, "This operation is not available"); |
2162 | | - } |
2163 | 2317 |
|
2164 | 2318 | public DeleteVpcResponse deleteVpc(DeleteVpc deleteVpc) { |
2165 | 2319 | throw new EC2ServiceException(ClientError.Unsupported, "This operation is not available"); |
@@ -2229,10 +2383,6 @@ public DescribeSubnetsResponse describeSubnets(DescribeSubnets describeSubnets) |
2229 | 2383 | throw new EC2ServiceException(ClientError.Unsupported, "This operation is not available"); |
2230 | 2384 | } |
2231 | 2385 |
|
2232 | | - public DescribeTagsResponse describeTags(DescribeTags describeTags) { |
2233 | | - throw new EC2ServiceException(ClientError.Unsupported, "This operation is not available"); |
2234 | | - } |
2235 | | - |
2236 | 2386 | public DescribeVpcsResponse describeVpcs(DescribeVpcs describeVpcs) { |
2237 | 2387 | throw new EC2ServiceException(ClientError.Unsupported, "This operation is not available"); |
2238 | 2388 | } |
|
0 commit comments