default String makeValidLabel(String value) { value = value.replaceAll("[^A-Za-z0-9-_.]", ""); while (!value.isEmpty() && !characterAlphanumeric(value, 0)) { value = value.substring(1); } while (!value.isEmpty() && !characterAlphanumeric(value, value.length() - 1)) { value = value.substring(0, value.length() - 1); } return value; }
public List<KubernetesV2Service> getServicesByPriority(List<SpinnakerService.Type> serviceTypes) { List<KubernetesV2Service> result = getFieldsOfType(KubernetesV2Service.class).stream() .filter(d -> serviceTypes.contains(d.getService().getType())) .sorted((d1, d2) -> d2.getDeployPriority().compareTo(d1.getDeployPriority())) .collect(Collectors.toList()); return result; }
GenerateService.ResolvedConfiguration resolvedConfiguration) { SpinnakerRuntimeSettings runtimeSettings = resolvedConfiguration.getRuntimeSettings(); ServiceSettings settings = resolvedConfiguration.getServiceSettings(getService()); List<ConfigSource> configSources = stageConfig(executor, details, resolvedConfiguration); List<SidecarConfig> sidecarConfigs = getSidecarConfigs(details); String primaryContainer = buildContainer(getService().getCanonicalName(), details, settings, configSources, env); List<String> sidecarContainers = getSidecars(runtimeSettings).stream() .map(SidecarService::getService) .map(s -> buildContainer(s.getCanonicalName(), details, runtimeSettings.getServiceSettings(s), configSources, env)) .collect(Collectors.toList()); .addBinding("initContainers", getInitContainers(details)) .addBinding("hostAliases", getHostAliases(details)) .addBinding("imagePullSecrets", settings.getKubernetes().getImagePullSecrets()) .addBinding("serviceAccountName", settings.getKubernetes().getServiceAccountName()) .addBinding("terminationGracePeriodSeconds", terminationGracePeriodSeconds()) .addBinding("nodeSelector", settings.getKubernetes().getNodeSelector()) .addBinding("volumes", combineVolumes(configSources, settings.getKubernetes(), sidecarConfigs)) .toString();
default String getResourceYaml(AccountDeploymentDetails<KubernetesAccount> details, GenerateService.ResolvedConfiguration resolvedConfiguration) { ServiceSettings settings = resolvedConfiguration.getServiceSettings(getService()); SpinnakerRuntimeSettings runtimeSettings = resolvedConfiguration.getRuntimeSettings(); String namespace = getNamespace(settings); List<ConfigSource> configSources = stageConfig(details, resolvedConfiguration); Map<String, String> env = configSources.stream() .map(ConfigSource::getEnv) CustomSizing customSizing = details.getDeploymentConfiguration().getDeploymentEnvironment().getCustomSizing(); if (customSizing != null) { Map componentSizing = customSizing.getOrDefault(getService().getServiceName(), new HashMap()); targetSize = (Integer) componentSizing.getOrDefault("replicas", targetSize); String primaryContainer = buildContainer(getService().getCanonicalName(), details, settings, configSources, env); List<String> sidecarContainers = getSidecars(runtimeSettings).stream() .map(SidecarService::getService) .map(s -> buildContainer(s.getCanonicalName(), details, runtimeSettings.getServiceSettings(s), configSources, env)) .collect(Collectors.toList()); .addBinding("terminationGracePeriodSeconds", terminationGracePeriodSeconds()) .addBinding("volumes", volumes); String version = makeValidLabel(details.getDeploymentConfiguration().getVersion()); if (version.isEmpty()) { version = "unknown"; .addBinding("name", getService().getCanonicalName()) .addBinding("namespace", namespace)
default ServiceSettings buildServiceSettings(DeploymentConfiguration deploymentConfiguration) { KubernetesSharedServiceSettings kubernetesSharedServiceSettings = new KubernetesSharedServiceSettings(deploymentConfiguration); ServiceSettings settings = defaultServiceSettings(deploymentConfiguration); String location = kubernetesSharedServiceSettings.getDeployLocation(); settings.setAddress(buildAddress(location)) .setArtifactId(getArtifactId(deploymentConfiguration.getName())) .setLocation(location) .setEnabled(isEnabled(deploymentConfiguration)); if (runsOnJvm()) { // Use half the available memory allocated to the container for the JVM heap settings.getEnv().put("JAVA_OPTS", "-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=2"); } return settings; }
default String getArtifactId(String deploymentName) { String artifactName = getArtifact().getName(); String version = getArtifactService().getArtifactVersion(deploymentName, getArtifact()); version = Versions.isLocal(version) ? Versions.fromLocal(version) : version; KubernetesImageDescription image = KubernetesImageDescription.builder() .registry(getDockerRegistry(deploymentName, getArtifact())) .repository(artifactName) .tag(version) .build(); return KubernetesUtil.getImageId(image); }
@Override public RemoteAction connectCommand(KubectlServiceProvider serviceProvider, AccountDeploymentDetails<KubernetesAccount> deploymentDetails, SpinnakerRuntimeSettings runtimeSettings, List<SpinnakerService.Type> serviceTypes) { RemoteAction result = new RemoteAction(); String connectCommands = String.join(" &\n", serviceTypes.stream() .map(t -> serviceProvider.getService(t) .connectCommand(deploymentDetails, runtimeSettings)) .collect(Collectors.toList())); result.setScript("#!/bin/bash\n" + connectCommands); result.setScriptDescription( "The generated script will open connections to the API & UI servers using ssh tunnels"); result.setAutoRun(false); return result; }
default ServiceSettings buildServiceSettings(DeploymentConfiguration deploymentConfiguration) { KubernetesSharedServiceSettings kubernetesSharedServiceSettings = new KubernetesSharedServiceSettings(deploymentConfiguration); ServiceSettings settings = defaultServiceSettings(deploymentConfiguration); String location = kubernetesSharedServiceSettings.getDeployLocation(); settings.setAddress(buildAddress(location)) .setArtifactId(getArtifactId(deploymentConfiguration.getName())) .setLocation(location) .setEnabled(isEnabled(deploymentConfiguration)); if (runsOnJvm()) { // Use half the available memory allocated to the container for the JVM heap settings.getEnv().put("JAVA_OPTS", "-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=2"); } return settings; }
default String getArtifactId(String deploymentName) { String artifactName = getArtifact().getName(); String version = getArtifactService().getArtifactVersion(deploymentName, getArtifact()); version = Versions.isLocal(version) ? Versions.fromLocal(version) : version; KubernetesImageDescription image = KubernetesImageDescription.builder() .registry(getDockerRegistry(deploymentName, getArtifact())) .repository(artifactName) .tag(version) .build(); return KubernetesUtil.getImageId(image); }
@Override public RemoteAction connectCommand(KubectlServiceProvider serviceProvider, AccountDeploymentDetails<KubernetesAccount> deploymentDetails, SpinnakerRuntimeSettings runtimeSettings, List<SpinnakerService.Type> serviceTypes) { RemoteAction result = new RemoteAction(); String connectCommands = String.join(" &\n", serviceTypes.stream() .map(t -> serviceProvider.getService(t) .connectCommand(deploymentDetails, runtimeSettings)) .collect(Collectors.toList())); result.setScript("#!/bin/bash\n" + connectCommands); result.setScriptDescription( "The generated script will open connections to the API & UI servers using ssh tunnels"); result.setAutoRun(false); return result; }
public List<KubernetesV2Service> getServicesByPriority(List<SpinnakerService.Type> serviceTypes) { List<KubernetesV2Service> result = getFieldsOfType(KubernetesV2Service.class).stream() .filter(d -> serviceTypes.contains(d.getService().getType())) .sorted((d1, d2) -> d2.getDeployPriority().compareTo(d1.getDeployPriority())) .collect(Collectors.toList()); return result; }
default String makeValidLabel(String value) { value = value.replaceAll("[^A-Za-z0-9-_.]", ""); while (!value.isEmpty() && !characterAlphanumeric(value, 0)) { value = value.substring(1); } while (!value.isEmpty() && !characterAlphanumeric(value, value.length() - 1)) { value = value.substring(0, value.length() - 1); } return value; }