default String connectCommand(AccountDeploymentDetails<KubernetesAccount> details, SpinnakerRuntimeSettings runtimeSettings, int localPort) { ServiceSettings settings = runtimeSettings.getServiceSettings(getService()); RunningServiceDetails runningServiceDetails = getRunningServiceDetails(details, runtimeSettings); Map<Integer, List<Instance>> instances = runningServiceDetails.getInstances(); Integer latest = runningServiceDetails.getLatestEnabledVersion(); String namespace = getNamespace(settings); List<Instance> latestInstances = instances.get(latest); if (latestInstances == null || latestInstances.isEmpty()) { throw new HalException(Problem.Severity.FATAL, "No instances running in latest server group for service " + getServiceName() + " in namespace " + namespace); } return Strings.join(KubernetesV1ProviderUtils.kubectlPortForwardCommand(details, namespace, latestInstances.get(0).getId(), settings.getPort(), localPort), " "); }
default String connectCommand(AccountDeploymentDetails<KubernetesAccount> details, SpinnakerRuntimeSettings runtimeSettings, int localPort) { ServiceSettings settings = runtimeSettings.getServiceSettings(getService()); RunningServiceDetails runningServiceDetails = getRunningServiceDetails(details, runtimeSettings); Map<Integer, List<Instance>> instances = runningServiceDetails.getInstances(); Integer latest = runningServiceDetails.getLatestEnabledVersion(); String namespace = getNamespace(settings); List<Instance> latestInstances = instances.get(latest); if (latestInstances == null || latestInstances.isEmpty()) { throw new HalException(Problem.Severity.FATAL, "No instances running in latest server group for service " + getServiceName() + " in namespace " + namespace); } return Strings.join(KubernetesV1ProviderUtils.kubectlPortForwardCommand(details, namespace, latestInstances.get(0).getId(), settings.getPort(), localPort), " "); }
@Override default <S> S connectToInstance(AccountDeploymentDetails<KubernetesAccount> details, SpinnakerRuntimeSettings runtimeSettings, SpinnakerService<S> sidecar, String instanceId) { ServiceSettings settings = runtimeSettings.getServiceSettings(sidecar); String namespace = getNamespace(settings); int localPort = SocketUtils.findAvailableTcpPort(); int targetPort = settings.getPort(); List<String> command = KubernetesV1ProviderUtils.kubectlPortForwardCommand(details, namespace, instanceId, targetPort, localPort); JobRequest request = new JobRequest().setTokenizedCommand(command); String jobId = getJobExecutor().startJob(request); // Wait for the proxy to spin up. DaemonTaskHandler.safeSleep(TimeUnit.SECONDS.toMillis(5)); JobStatus status = getJobExecutor().updateJob(jobId); // This should be a long-running job. if (status.getState() == JobStatus.State.COMPLETED) { throw new HalException(Problem.Severity.FATAL, "Unable to establish a proxy against " + getServiceName() + ":\n" + status.getStdOut() + "\n" + status.getStdErr()); } return getServiceInterfaceFactory().createService(settings.getScheme() + "://localhost:" + localPort, sidecar); }
@Override default <S> S connectToInstance(AccountDeploymentDetails<KubernetesAccount> details, SpinnakerRuntimeSettings runtimeSettings, SpinnakerService<S> sidecar, String instanceId) { ServiceSettings settings = runtimeSettings.getServiceSettings(sidecar); String namespace = getNamespace(settings); int localPort = SocketUtils.findAvailableTcpPort(); int targetPort = settings.getPort(); List<String> command = KubernetesV1ProviderUtils.kubectlPortForwardCommand(details, namespace, instanceId, targetPort, localPort); JobRequest request = new JobRequest().setTokenizedCommand(command); String jobId = getJobExecutor().startJob(request); // Wait for the proxy to spin up. DaemonTaskHandler.safeSleep(TimeUnit.SECONDS.toMillis(5)); JobStatus status = getJobExecutor().updateJob(jobId); // This should be a long-running job. if (status.getState() == JobStatus.State.COMPLETED) { throw new HalException(Problem.Severity.FATAL, "Unable to establish a proxy against " + getServiceName() + ":\n" + status.getStdOut() + "\n" + status.getStdErr()); } return getServiceInterfaceFactory().createService(settings.getScheme() + "://localhost:" + localPort, sidecar); }