bug4811: image upgrade now has code to assign names to snapshots and can delete() image and snapshots

This commit is contained in:
Axel Uhl
2020-11-06 20:29:51 +01:00
parent 8e8d51c64e
commit 19c132e61d
5 changed files with 24 additions and 10 deletions
@@ -27,8 +27,10 @@ import com.sap.sailing.landscape.procedures.StartSailingAnalyticsMaster;
import com.sap.sailing.landscape.procedures.UpgradeAmi;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.landscape.InboundReplicationConfiguration;
import com.sap.sse.landscape.application.ApplicationProcessMetrics;
import com.sap.sse.landscape.aws.AmazonMachineImage;
import com.sap.sse.landscape.aws.AwsInstance;
import com.sap.sse.landscape.aws.AwsLandscape;
import com.sap.sse.landscape.aws.Tags;
@@ -75,8 +77,9 @@ public class TestProcedures {
imageUpgradeProcedureBuilder.build();
try {
imageUpgradeProcedure.run();
int continueHere;
// TODO add test verdicts
final AmazonMachineImage<String, SailingAnalyticsMetrics> upgradedAmi = imageUpgradeProcedure.getUpgradedAmi();
assertTrue(upgradedAmi.getCreatedAt().until(TimePoint.now()).compareTo(Duration.ONE_MINUTE.times(5)) < 0);
assertEquals(3, Util.size(upgradedAmi.getBlockDeviceMappings()));
} finally {
imageUpgradeProcedure.getUpgradedAmi().delete();
}
@@ -119,6 +119,9 @@ implements Procedure<ShardingKey, SailingAnalyticsMetrics, MasterProcessT, Repli
private BuilderImpl() {
super();
deviceNamesToSnapshotBaseNames = new HashMap<>();
setSnapshotBaseName("/dev/xvda", "System");
setSnapshotBaseName("/dev/sdc", "Swap");
setSnapshotBaseName("/dev/sdf", "Home");
setNoShutdown(false);
}
@@ -120,6 +120,8 @@ extends Landscape<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> {
AmazonMachineImage<ShardingKey, MetricsT> createImage(AwsInstance<ShardingKey, MetricsT> instance, String imageName);
void deleteImage(Region region, String imageId);
AmazonMachineImage<ShardingKey, MetricsT> getLatestImageWithTag(Region region, String tagName, String tagValue);
void setSnapshotName(Region region, String snapshotId, String snapshotName);
@@ -1,6 +1,5 @@
package com.sap.sse.landscape.aws.impl;
import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -10,6 +9,7 @@ import com.sap.sse.common.TimePoint;
import com.sap.sse.landscape.Region;
import com.sap.sse.landscape.application.ApplicationProcessMetrics;
import com.sap.sse.landscape.aws.AmazonMachineImage;
import com.sap.sse.landscape.aws.AwsLandscape;
import software.amazon.awssdk.services.ec2.model.BlockDeviceMapping;
import software.amazon.awssdk.services.ec2.model.Image;
@@ -18,14 +18,16 @@ public class AmazonMachineImageImpl<ShardingKey, MetricsT extends ApplicationPro
private static final long serialVersionUID = 1615200981492476022L;
private final Image image;
private final Region region;
private final AwsLandscape<ShardingKey, MetricsT, ?, ?> landscape;
public AmazonMachineImageImpl(Image image, Region region) {
public AmazonMachineImageImpl(Image image, Region region, AwsLandscape<ShardingKey, MetricsT, ?, ?> landscape) {
this.image = image;
this.region = region;
this.landscape = landscape;
}
@Override
public Serializable getId() {
public String getId() {
return image.imageId();
}
@@ -63,11 +65,10 @@ public class AmazonMachineImageImpl<ShardingKey, MetricsT extends ApplicationPro
public void delete() {
for (final BlockDeviceMapping blockDeviceMapping : getBlockDeviceMappings()) {
if (blockDeviceMapping.ebs() != null) {
// TODO landscape.deleteSnapshot(blockDeviceMapping.ebs().snapshotId())
landscape.deleteSnapshot(getRegion(), blockDeviceMapping.ebs().snapshotId());
}
}
int forceWarningTODO;
// TODO implement AmazonMachineImageImpl.delete(); we probably want landscape here...
landscape.deleteImage(getRegion(), getId());
}
@Override
@@ -450,7 +450,7 @@ ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterP
public AmazonMachineImage<ShardingKey, MetricsT> getImage(com.sap.sse.landscape.Region region, String imageId) {
final DescribeImagesResponse response = getEc2Client(getRegion(region))
.describeImages(DescribeImagesRequest.builder().imageIds(imageId).build());
return new AmazonMachineImageImpl<>(response.images().iterator().next(), region);
return new AmazonMachineImageImpl<>(response.images().iterator().next(), region, this);
}
@Override
@@ -463,11 +463,16 @@ ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterP
return getImage(instance.getRegion(), imageId);
}
@Override
public void deleteImage(com.sap.sse.landscape.Region region, String imageId) {
getEc2Client(getRegion(region)).deregisterImage(b->b.imageId(imageId));
}
@Override
public AmazonMachineImage<ShardingKey, MetricsT> getLatestImageWithTag(com.sap.sse.landscape.Region region, String tagName, String tagValue) {
final DescribeImagesResponse response = getEc2Client(getRegion(region))
.describeImages(DescribeImagesRequest.builder().filters(Filter.builder().name("tag:"+tagName).values(tagValue).build()).build());
return new AmazonMachineImageImpl<>(response.images().stream().max(getMachineImageCreationDateComparator()).get(), region);
return new AmazonMachineImageImpl<>(response.images().stream().max(getMachineImageCreationDateComparator()).get(), region, this);
}
@Override