mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-24 14:38:45 +00:00
bug4811: image upgrade now has code to assign names to snapshots and can delete() image and snapshots
This commit is contained in:
+5
-2
@@ -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();
|
||||
}
|
||||
|
||||
+3
@@ -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);
|
||||
|
||||
+7
-6
@@ -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
|
||||
|
||||
+7
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user