Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions api/src/main/java/com/intuit/tank/vm/vmManager/VMInformation.java
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,44 @@ public String getPrivateDNS() {
return (String) this.items.get("privateDns");
}

/**
* Set the virtual machine private IP address
*
* @param data
* The virtual machine's private IP address
*/
public void setPrivateIp(String data) {
this.items.put("privateIp", data);
}

/**
* Get the virtual machine private IP address
*
* @return The virtual machine's private IP address
*/
public String getPrivateIp() {
return (String) this.items.get("privateIp");
}

/**
* Set the virtual machine public IP address
*
* @param data
* The virtual machine's public IP address
*/
public void setPublicIp(String data) {
this.items.put("publicIp", data);
}

/**
* Get the virtual machine public IP address
*
* @return The virtual machine's public IP address
*/
public String getPublicIp() {
return (String) this.items.get("publicIp");
}

public void setLaunchTime(Calendar data) {
this.items.put("launchTime", data);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,12 @@ private void relaunch(ArrayList<VMInformation> instances) {
// Add directly to started instances since these are restarted from scratch
startedInstances.add(newInfo);
vmTracker.setStatus(createCloudStatus(instanceRequest, newInfo));
LOG.info(new ObjectMessage(Map.of("Message","Added image (" + newInfo.getInstanceId() + ") to VMImage table for job " + jobId)));
LOG.info(new ObjectMessage(Map.of(
"Message", "Added relaunched image to VMImage table for job " + jobId,
"instanceId", newInfo.getInstanceId(),
"publicIp", newInfo.getPublicIp() != null ? newInfo.getPublicIp() : "N/A",
"privateIp", newInfo.getPrivateIp() != null ? newInfo.getPrivateIp() : "N/A"
)));
try {
dao.addImageFromInfo(instanceRequest.getJobId(), newInfo,
instanceRequest.getRegion());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ public void run() {
for (VMInformation info : vmInfo) {
vmTracker.setStatus(createCloudStatus(request, info));
dao.addImageFromInfo(request.getJobId(), info, request.getRegion());
logger.info("Added image (" + info.getInstanceId() +
") with publicIp=" + (info.getPublicIp() != null ? info.getPublicIp() : "N/A") +
", privateIp=" + (info.getPrivateIp() != null ? info.getPrivateIp() : "N/A") +
" to VMImage table");
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,12 @@ private void persistInstances(VMInstanceRequest instanceRequest, List<VMInformat
try {
vmTracker.setStatus(createCloudStatus(instanceRequest, info));
dao.addImageFromInfo(request.getJobId(), info, request.getRegion());
logger.info(new ObjectMessage(Map.of("Message","Added image (" + info.getInstanceId() + ") to VMImage table")));
logger.info(new ObjectMessage(Map.of(
"Message", "Added image to VMImage table",
"instanceId", info.getInstanceId(),
"publicIp", info.getPublicIp() != null ? info.getPublicIp() : "N/A",
"privateIp", info.getPrivateIp() != null ? info.getPrivateIp() : "N/A"
)));
} catch (Exception e) {
logger.warn(new ObjectMessage(Map.of("Message", "Error persisting VM Image: " + e)), e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ public static VMInformation instanceToVmInformation(String requesterId, Instance
info.setPlatform(instance.platformAsString());
info.setPrivateDNS(instance.privateDnsName());
info.setPublicDNS(instance.publicDnsName());
info.setPrivateIp(instance.privateIpAddress());
info.setPublicIp(instance.publicIpAddress());
info.setState(instance.state().nameAsString());
info.setSize(instance.instanceTypeAsString());
return info;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,32 @@ public List<VMInformation> create(VMRequest request) {
result.addAll(AmazonDataConverter.processReservation(response.requesterId(), response.instances(), vmRegion));
});

// Wait for instances to get public IPs assigned and refresh the details
if (!result.isEmpty()) {
try {
// Brief wait to allow AWS to assign public IPs
Thread.sleep(3000);
List<String> instanceIds = result.stream()
.map(VMInformation::getInstanceId)
.collect(Collectors.toList());
DescribeInstancesResponse described = ec2AsyncClient.describeInstances(
DescribeInstancesRequest.builder().instanceIds(instanceIds).build()
).get();
// Update result with fresh instance data that includes public IPs
List<VMInformation> updated = described.reservations().stream()
.flatMap(reservation -> reservation.instances().stream()
.map(instance -> AmazonDataConverter.instanceToVmInformation(
reservation.requesterId(), instance, vmRegion)))
.collect(Collectors.toList());
result.clear();
result.addAll(updated);
LOG.debug("Refreshed {} instance details with public IP information", updated.size());
} catch (InterruptedException e) {
LOG.warn("Interrupted while waiting for public IP assignment", e);
Thread.currentThread().interrupt();
}
}

if (instanceRequest.isUseEips()) {
Set<Address> availableEips = new HashSet<Address>();
synchronized (instanceRequest.getRegion()) {
Expand Down