package io.cattle.platform.vm.api; import io.cattle.platform.api.action.ActionHandler; import io.cattle.platform.archaius.util.ArchaiusUtil; import io.cattle.platform.core.model.Host; import io.cattle.platform.core.model.Instance; import io.cattle.platform.docker.api.model.HostAccess; import io.cattle.platform.docker.util.DockerUtils; import io.cattle.platform.host.model.HostApiAccess; import io.cattle.platform.host.service.HostApiService; import io.cattle.platform.object.ObjectManager; import io.cattle.platform.util.type.CollectionUtils; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import java.util.Map; import javax.inject.Inject; import com.netflix.config.DynamicStringProperty; public class InstanceConsoleActionHandler implements ActionHandler { private static final DynamicStringProperty CONSOLE_AGENT_PATH = ArchaiusUtil.getString("console.agent.path"); @Inject HostApiService apiService; @Inject ObjectManager objectManager; @Override public String getName() { return "instance.console"; } @Override public Object perform(String name, Object obj, ApiRequest request) { if (!(obj instanceof Instance)) { return null; } Host host = null; Instance instance = null; if (obj instanceof Instance) { instance = (Instance)obj; host = DockerUtils.getHostFromContainer(objectManager, instance, null); } if (host == null) { return null; } String dockerId = DockerUtils.getDockerIdentifier(instance); Map<String, Object> data = CollectionUtils.asMap("container", dockerId); HostApiAccess apiAccess = apiService.getAccess(request, host.getId(), CollectionUtils.asMap("console", data), CONSOLE_AGENT_PATH.get()); if (apiAccess == null) { return null; } return new HostAccess(apiAccess.getUrl(), apiAccess.getAuthenticationToken()); } }