package io.fathom.cloud.compute.scheduler; import io.fathom.cloud.Clock; import io.fathom.cloud.CloudException; import io.fathom.cloud.protobuf.CloudModel.InstanceData; import io.fathom.cloud.protobuf.CloudModel.InstanceState; import java.io.IOException; import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Strings; public class StopInstanceOperation extends SchedulerOperation { private static final Logger log = LoggerFactory.getLogger(StopInstanceOperation.class); InstanceData instance; public void init(InstanceData instance) { this.instance = instance; } @Override public boolean run() throws CloudException, IOException { SchedulerHost host = scheduler.findHost(instance.getHostId()); if (host == null) { throw new IllegalStateException(); } String hostCookie = instance.getHostCookie(); if (!Strings.isNullOrEmpty(hostCookie)) { UUID containerId = UUID.fromString(hostCookie); host.stopContainer(containerId); } try (ConfigurationOperation config = host.startConfiguration()) { config.removeFirewallConfig(instance); config.applyChanges(); } services.updateInstance(instance, InstanceData.newBuilder().setInstanceState(InstanceState.TERMINATED) .setTerminatedAt(Clock.getTimestamp())); return true; } }