default Map<String, List<String>> getAvailabilityZones(ServiceSettings settings) { String namespace = getNamespace(settings); List<String> zones = new ArrayList<>(); zones.add(namespace); Map<String, List<String>> availabilityZones = new HashMap<>(); availabilityZones.put(namespace, zones); return availabilityZones; }
default Map<String, List<String>> getAvailabilityZones(ServiceSettings settings) { String namespace = getNamespace(settings); List<String> zones = new ArrayList<>(); zones.add(namespace); Map<String, List<String>> availabilityZones = new HashMap<>(); availabilityZones.put(namespace, zones); return availabilityZones; }
@Override default Map<String, Object> buildRollbackPipeline(AccountDeploymentDetails<KubernetesAccount> details, SpinnakerRuntimeSettings runtimeSettings) { ServiceSettings settings = runtimeSettings.getServiceSettings(getService()); Map<String, Object> pipeline = DistributedService.super.buildRollbackPipeline(details, runtimeSettings); List<Map<String, Object>> stages = (List<Map<String, Object>>) pipeline.get("stages"); assert(stages != null && !stages.isEmpty()); for (Map<String, Object> stage : stages) { stage.put("namespaces", Collections.singletonList(getNamespace(settings))); stage.put("interestingHealthProviderNames", Collections.singletonList("KubernetesService")); stage.remove("region"); } return pipeline; }
@Override default Map<String, Object> buildRollbackPipeline(AccountDeploymentDetails<KubernetesAccount> details, SpinnakerRuntimeSettings runtimeSettings) { ServiceSettings settings = runtimeSettings.getServiceSettings(getService()); Map<String, Object> pipeline = DistributedService.super.buildRollbackPipeline(details, runtimeSettings); List<Map<String, Object>> stages = (List<Map<String, Object>>) pipeline.get("stages"); assert(stages != null && !stages.isEmpty()); for (Map<String, Object> stage : stages) { stage.put("namespaces", Collections.singletonList(getNamespace(settings))); stage.put("interestingHealthProviderNames", Collections.singletonList("KubernetesService")); stage.remove("region"); } return pipeline; }
default void deleteVersion(AccountDeploymentDetails<KubernetesAccount> details, ServiceSettings settings, Integer version) { String name = getVersionedName(version); String namespace = getNamespace(settings); KubernetesV1ProviderUtils.deleteReplicaSet(details, namespace, name); } }
default void resizeVersion(AccountDeploymentDetails<KubernetesAccount> details, ServiceSettings settings, int version, int targetSize) { String name = getVersionedName(version); String namespace = getNamespace(settings); KubernetesV1ProviderUtils.resize(details, namespace, name, targetSize); }
default void resizeVersion(AccountDeploymentDetails<KubernetesAccount> details, ServiceSettings settings, int version, int targetSize) { String name = getVersionedName(version); String namespace = getNamespace(settings); KubernetesV1ProviderUtils.resize(details, namespace, name, targetSize); }
default void deleteVersion(AccountDeploymentDetails<KubernetesAccount> details, ServiceSettings settings, Integer version) { String name = getVersionedName(version); String namespace = getNamespace(settings); KubernetesV1ProviderUtils.deleteReplicaSet(details, namespace, name); } }
@Override default <S> S connectToService(AccountDeploymentDetails<KubernetesAccount> details, SpinnakerRuntimeSettings runtimeSettings, SpinnakerService<S> service) { ServiceSettings settings = runtimeSettings.getServiceSettings(service); KubernetesV1ProviderUtils.Proxy proxy = KubernetesV1ProviderUtils.openProxy(getJobExecutor(), details); String endpoint = KubernetesV1ProviderUtils.proxyServiceEndpoint(proxy, getNamespace(settings), getServiceName(), settings.getPort()).toString(); return getServiceInterfaceFactory().createService(endpoint, service); }
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 connectToService(AccountDeploymentDetails<KubernetesAccount> details, SpinnakerRuntimeSettings runtimeSettings, SpinnakerService<S> service) { ServiceSettings settings = runtimeSettings.getServiceSettings(service); KubernetesV1ProviderUtils.Proxy proxy = KubernetesV1ProviderUtils.openProxy(getJobExecutor(), details); String endpoint = KubernetesV1ProviderUtils.proxyServiceEndpoint(proxy, getNamespace(settings), getServiceName(), settings.getPort()).toString(); return getServiceInterfaceFactory().createService(endpoint, service); }
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), " "); }
String namespace = getNamespace(settings);
String namespace = getNamespace(settings);
default Map<String, Object> getLoadBalancerDescription(AccountDeploymentDetails<KubernetesAccount> details, SpinnakerRuntimeSettings runtimeSettings) { ServiceSettings settings = runtimeSettings.getServiceSettings(getService()); int port = settings.getPort(); String accountName = details.getAccount().getName(); KubernetesLoadBalancerDescription description = new KubernetesLoadBalancerDescription(); String namespace = getNamespace(settings); String name = getServiceName(); Names parsedName = Names.parseName(name); description.setApp(parsedName.getApp()); description.setStack(parsedName.getStack()); description.setDetail(parsedName.getDetail()); description.setName(name); description.setNamespace(namespace); description.setAccount(accountName); KubernetesNamedServicePort servicePort = new KubernetesNamedServicePort(); servicePort.setPort(port); servicePort.setTargetPort(port); servicePort.setName("http"); servicePort.setProtocol("TCP"); KubernetesNamedServicePort monitoringPort = new KubernetesNamedServicePort(); monitoringPort.setPort(8008); monitoringPort.setTargetPort(8008); monitoringPort.setName("monitoring"); monitoringPort.setProtocol("TCP"); List<KubernetesNamedServicePort> servicePorts = new ArrayList<>(); servicePorts.add(servicePort); servicePorts.add(monitoringPort); description.setPorts(servicePorts); return getObjectMapper().convertValue(description, new TypeReference<Map<String, Object>>() { }); }
default Map<String, Object> getLoadBalancerDescription(AccountDeploymentDetails<KubernetesAccount> details, SpinnakerRuntimeSettings runtimeSettings) { ServiceSettings settings = runtimeSettings.getServiceSettings(getService()); int port = settings.getPort(); String accountName = details.getAccount().getName(); KubernetesLoadBalancerDescription description = new KubernetesLoadBalancerDescription(); String namespace = getNamespace(settings); String name = getServiceName(); Names parsedName = Names.parseName(name); description.setApp(parsedName.getApp()); description.setStack(parsedName.getStack()); description.setDetail(parsedName.getDetail()); description.setName(name); description.setNamespace(namespace); description.setAccount(accountName); KubernetesNamedServicePort servicePort = new KubernetesNamedServicePort(); servicePort.setPort(port); servicePort.setTargetPort(port); servicePort.setName("http"); servicePort.setProtocol("TCP"); KubernetesNamedServicePort monitoringPort = new KubernetesNamedServicePort(); monitoringPort.setPort(8008); monitoringPort.setTargetPort(8008); monitoringPort.setName("monitoring"); monitoringPort.setProtocol("TCP"); List<KubernetesNamedServicePort> servicePorts = new ArrayList<>(); servicePorts.add(servicePort); servicePorts.add(monitoringPort); description.setPorts(servicePorts); return getObjectMapper().convertValue(description, new TypeReference<Map<String, Object>>() { }); }
String namespace = getNamespace(settings); String name = getServiceName(); Names parsedName = Names.parseName(name);
.getDeploymentEnvironment(); String accountName = details.getAccount().getName(); String namespace = getNamespace(settings); String name = getServiceName(); Names parsedName = Names.parseName(name);
@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); }