use of io.dekorate.kubernetes.config.Configuration in project dekorate by dekorateio.
the class KubernetesManifestGenerator method generate.
public void generate(KubernetesConfig config) {
LOGGER.info("Processing kubernetes configuration.");
ImageConfiguration imageConfig = getImageConfiguration(getProject(), config, configurationRegistry);
Optional<Deployment> existingDeployment = resourceRegistry.groups().getOrDefault(KUBERNETES, new KubernetesListBuilder()).buildItems().stream().filter(i -> i instanceof Deployment).map(i -> (Deployment) i).filter(i -> i.getMetadata().getName().equals(config.getName())).findAny();
if (!existingDeployment.isPresent()) {
resourceRegistry.add(KUBERNETES, createDeployment(config, imageConfig));
}
addDecorators(KUBERNETES, config);
}
use of io.dekorate.kubernetes.config.Configuration in project dekorate by dekorateio.
the class OpenshiftManifestGenerator method generate.
public void generate(OpenshiftConfig config) {
LOGGER.info("Processing openshift configuration.");
ImageConfiguration imageConfig = getImageConfiguration(getProject(), config, configurationRegistry);
Optional<DeploymentConfig> existingDeploymentConfig = resourceRegistry.groups().getOrDefault(OPENSHIFT, new KubernetesListBuilder()).buildItems().stream().filter(i -> i instanceof DeploymentConfig).map(i -> (DeploymentConfig) i).filter(i -> i.getMetadata().getName().equals(config.getName())).findAny();
if (!existingDeploymentConfig.isPresent()) {
resourceRegistry.add(OPENSHIFT, createDeploymentConfig(config, imageConfig));
}
if (config.isHeadless()) {
resourceRegistry.decorate(OPENSHIFT, new ApplyHeadlessDecorator(config.getName()));
}
for (Container container : config.getInitContainers()) {
resourceRegistry.decorate(OPENSHIFT, new AddInitContainerDecorator(config.getName(), container));
}
if (config.getPorts().length > 0) {
resourceRegistry.decorate(OPENSHIFT, new AddServiceResourceDecorator(config));
}
addDecorators(OPENSHIFT, config, imageConfig);
}
use of io.dekorate.kubernetes.config.Configuration in project dekorate by dekorateio.
the class KnativeManifestGenerator method generate.
public void generate(KnativeConfig config) {
Optional<Service> existingService = resourceRegistry.groups().getOrDefault(KNATIVE, new KubernetesListBuilder()).buildItems().stream().filter(i -> i instanceof Service).map(i -> (Service) i).filter(i -> i.getMetadata().getName().equals(config.getName())).findAny();
if (!existingService.isPresent()) {
resourceRegistry.add(KNATIVE, createService(config));
}
Project project = getProject();
Optional<VcsConfig> vcsConfig = configurationRegistry.get(VcsConfig.class);
String remote = vcsConfig.map(VcsConfig::getRemote).orElse(Git.ORIGIN);
boolean httpsPrefered = vcsConfig.map(VcsConfig::isHttpsPreferred).orElse(false);
String vcsUrl = project.getScmInfo() != null && Strings.isNotNullOrEmpty(project.getScmInfo().getRemote().get(Git.ORIGIN)) ? Git.getRemoteUrl(project.getRoot(), remote, httpsPrefered).orElse(Labels.UNKNOWN) : Labels.UNKNOWN;
resourceRegistry.decorate(KNATIVE, new AddVcsUrlAnnotationDecorator(config.getName(), Annotations.VCS_URL, vcsUrl));
resourceRegistry.decorate(KNATIVE, new AddCommitIdAnnotationDecorator());
resourceRegistry.decorate(KNATIVE, new ApplyPortNameDecorator(null, null, config.getHttpTransportVersion() != null ? config.getHttpTransportVersion().name().toLowerCase() : "http1", Ports.webPortNames().toArray(new String[Ports.webPortNames().size()])));
addDecorators(KNATIVE, config);
if (config.getMinScale() != null && config.getMinScale() != 0) {
resourceRegistry.decorate(KNATIVE, new ApplyMinScaleDecorator(config.getName(), config.getMinScale()));
}
if (config.getMaxScale() != null && config.getMaxScale() != 0) {
resourceRegistry.decorate(KNATIVE, new ApplyMaxScaleDecorator(config.getName(), config.getMaxScale()));
}
if (!config.isScaleToZeroEnabled()) {
resourceRegistry.decorate(KNATIVE, new AddConfigMapResourceProvidingDecorator("config-autoscaler"));
resourceRegistry.decorate(KNATIVE, new AddConfigMapDataDecorator("config-autoscaler", "enable-scale-to-zero", String.valueOf(config.isAutoDeployEnabled())));
}
if (Strings.isNotNullOrEmpty(config.getRevisionName())) {
resourceRegistry.decorate(KNATIVE, new ApplyRevisionNameDecorator(config.getName(), config.getRevisionName()));
}
if (config.getRevisionAutoScaling() != null) {
if (config.getRevisionAutoScaling().getMetric() != null && config.getRevisionAutoScaling().getMetric() != AutoscalingMetric.concurrency) {
resourceRegistry.decorate(KNATIVE, new ApplyLocalAutoscalingMetricDecorator(config.getName(), config.getRevisionAutoScaling().getMetric()));
}
if (config.getRevisionAutoScaling().getContainerConcurrency() != null) {
resourceRegistry.decorate(KNATIVE, new ApplyLocalContainerConcurrencyDecorator(config.getName(), config.getRevisionAutoScaling().getContainerConcurrency()));
}
// Local autoscaling configuration
if (config.getRevisionAutoScaling().getAutoScalerClass() != null && config.getRevisionAutoScaling().getAutoScalerClass() != AutoScalerClass.kpa) {
resourceRegistry.decorate(KNATIVE, new ApplyLocalAutoscalingClassDecorator(config.getName(), config.getRevisionAutoScaling().getAutoScalerClass()));
}
if (config.getRevisionAutoScaling().getTarget() != null && config.getRevisionAutoScaling().getTarget() != 0) {
resourceRegistry.decorate(KNATIVE, new ApplyLocalAutoscalingTargetDecorator(config.getName(), config.getRevisionAutoScaling().getTarget()));
}
if (config.getRevisionAutoScaling().getTarget() != null && config.getRevisionAutoScaling().getTarget() != 200 && config.getRevisionAutoScaling().getMetric() == AutoscalingMetric.rps) {
resourceRegistry.decorate(KNATIVE, new ApplyLocalContainerConcurrencyDecorator(config.getName(), config.getRevisionAutoScaling().getTarget()));
}
if (config.getRevisionAutoScaling().getTargetUtilizationPercentage() != null && config.getRevisionAutoScaling().getTargetUtilizationPercentage() != 70) {
resourceRegistry.decorate(KNATIVE, new ApplyLocalContainerConcurrencyDecorator(config.getName(), config.getRevisionAutoScaling().getTargetUtilizationPercentage()));
}
}
// Global autoscaling configuration
if (config.getGlobalAutoScaling() != null) {
if (!isDefault(config.getGlobalAutoScaling())) {
resourceRegistry.decorate(KNATIVE, new AddConfigMapResourceProvidingDecorator("config-autoscaler"));
if (config.getGlobalAutoScaling().getAutoScalerClass() != null && config.getGlobalAutoScaling().getAutoScalerClass() != AutoScalerClass.kpa) {
resourceRegistry.decorate(KNATIVE, new ApplyGlobalAutoscalingClassDecorator(config.getGlobalAutoScaling().getAutoScalerClass()));
}
if (config.getGlobalAutoScaling().getRequestsPerSecond() != null && config.getGlobalAutoScaling().getRequestsPerSecond() != 200) {
resourceRegistry.decorate(KNATIVE, new ApplyGlobalRequestsPerSecondTargetDecorator(config.getGlobalAutoScaling().getRequestsPerSecond()));
}
if (config.getGlobalAutoScaling().getTargetUtilizationPercentage() != null && config.getGlobalAutoScaling().getTargetUtilizationPercentage() != 70) {
resourceRegistry.decorate(KNATIVE, new ApplyGlobalContainerConcurrencyDecorator(config.getGlobalAutoScaling().getTargetUtilizationPercentage()));
}
}
if (config.getGlobalAutoScaling().getContainerConcurrency() != null && config.getGlobalAutoScaling().getContainerConcurrency() != 0) {
resourceRegistry.decorate(KNATIVE, new AddConfigMapResourceProvidingDecorator("config-defaults"));
resourceRegistry.decorate(KNATIVE, new ApplyGlobalContainerConcurrencyDecorator(config.getGlobalAutoScaling().getContainerConcurrency()));
}
}
for (Traffic traffic : config.getTraffic()) {
String revisionName = Strings.isNotNullOrEmpty(config.getRevisionName()) ? config.getRevisionName() : null;
String tag = Strings.isNotNullOrEmpty(traffic.getTag()) ? traffic.getTag() : null;
boolean latestRevision = revisionName == null ? true : traffic.isLatestRevision();
long percentage = traffic.getPercentage();
resourceRegistry.decorate(KNATIVE, new ApplyTrafficDecorator(config.getName(), revisionName, latestRevision, percentage, tag));
}
// Revision specific stuff
for (Container container : config.getSidecars()) {
resourceRegistry.decorate(KNATIVE, new AddSidecarToRevisionDecorator(config.getName(), container));
}
for (SecretVolume volume : config.getSecretVolumes()) {
validateVolume(volume);
resourceRegistry.decorate(KNATIVE, new AddSecretVolumeToRevisionDecorator(volume));
}
for (ConfigMapVolume volume : config.getConfigMapVolumes()) {
validateVolume(volume);
resourceRegistry.decorate(KNATIVE, new AddConfigMapVolumeToRevisionDecorator(volume));
}
for (PersistentVolumeClaimVolume volume : config.getPvcVolumes()) {
resourceRegistry.decorate(KNATIVE, new AddPvcVolumeToRevisionDecorator(volume));
}
for (AzureFileVolume volume : config.getAzureFileVolumes()) {
resourceRegistry.decorate(KNATIVE, new AddAzureFileVolumeToRevisionDecorator(volume));
}
for (AzureDiskVolume volume : config.getAzureDiskVolumes()) {
resourceRegistry.decorate(KNATIVE, new AddAzureDiskVolumeToRevisionDecorator(volume));
}
for (AwsElasticBlockStoreVolume volume : config.getAwsElasticBlockStoreVolumes()) {
resourceRegistry.decorate(KNATIVE, new AddAwsElasticBlockStoreVolumeToRevisionDecorator(volume));
}
for (HostAlias hostAlias : config.getHostAliases()) {
resourceRegistry.decorate(KNATIVE, new AddHostAliasesToRevisionDecorator(hostAlias));
}
}
use of io.dekorate.kubernetes.config.Configuration in project dekorate by dekorateio.
the class SpringBootApplicationGenerator method addConfiguration.
default void addConfiguration(Map map) {
Session session = getSession();
session.getConfigurationRegistry().add(new ConfigurationSupplier(new SpringApplicationConfigBuilder()));
session.getConfigurationRegistry().add(new SetSpringBootRuntime());
session.getConfigurationRegistry().add(new SetSpringBootVersion());
session.getManifestGenerators().add(new ManifestGenerator() {
@Override
public int order() {
return 410;
}
@Override
public String getKey() {
return "spring";
}
@Override
public void generate(Configuration config) {
LOGGER.info("Processing service monitor config.");
session.getResourceRegistry().decorate(new EndpointPathDecorator("http", "/actuator/prometheus"));
}
@Override
public boolean accepts(Class config) {
return SpringApplicationConfig.class.equals(config) || EditableServiceMonitorConfig.class.equals(config);
}
});
if (isActuatorAvailable()) {
// Users configuration should take priority, so add but don't overwrite.
session.getConfigurationRegistry().add(new AddLivenessProbeConfigurator(new ProbeBuilder().withHttpActionPath("/actuator/info").build(), false));
session.getConfigurationRegistry().add(new AddReadinessProbeConfigurator(new ProbeBuilder().withHttpActionPath("/actuator/health").build(), false));
}
if (isSpringCloudKubernetesAvailable()) {
session.getManifestGenerators().add(new ManifestGenerator() {
@Override
public int order() {
// We just want to run right after KubernetesManifestGenerator or OpenshiftManifestGenerator.
return 310;
}
@Override
public String getKey() {
return "spring";
}
@Override
public void generate(Configuration config) {
LOGGER.info("Detected spring cloud kubernetes.");
session.getResourceRegistry().decorate(new ApplyServiceAccountNamedDecorator());
session.getResourceRegistry().decorate(new AddServiceAccountResourceDecorator());
session.getResourceRegistry().decorate(new AddRoleBindingResourceDecorator("view"));
}
@Override
public boolean accepts(Class config) {
return SpringApplicationConfig.class.isAssignableFrom(config);
}
});
}
}
Aggregations