use of io.dekorate.kubernetes.config.Annotation in project dekorate by dekorateio.
the class AddAnnotationDecoratorTest method shouldAddAnnotationToKind.
@Test
public void shouldAddAnnotationToKind() {
assertEquals("Pod", new PodBuilder().getKind());
Pod expectedPod = new PodBuilder().withNewMetadata().withName("pod").addToAnnotations("key1", "value1").endMetadata().build();
Service expectedService = new ServiceBuilder().withNewMetadata().withName("my-service").endMetadata().build();
Pod actualPod = new PodBuilder().withNewMetadata().withName("pod").endMetadata().accept(new AddAnnotationDecorator(null, new Annotation("key1", "value1", new String[] { "Pod" }))).build();
assertEquals(expectedPod, actualPod);
Service actualService = new ServiceBuilder().withNewMetadata().withName("my-service").endMetadata().accept(new AddAnnotationDecorator(null, new Annotation("key1", "value1", new String[] { "Pod" }))).build();
assertEquals(expectedService, actualService);
}
use of io.dekorate.kubernetes.config.Annotation in project quarkus by quarkusio.
the class KubernetesCommonHelper method createAnnotationDecorators.
private static List<DecoratorBuildItem> createAnnotationDecorators(Optional<Project> project, String target, String name, PlatformConfiguration config, Optional<MetricsCapabilityBuildItem> metricsConfiguration, List<KubernetesPortBuildItem> ports) {
List<DecoratorBuildItem> result = new ArrayList<>();
ZonedDateTime now = ZonedDateTime.now(ZoneOffset.UTC);
project.ifPresent(p -> {
ScmInfo scm = p.getScmInfo();
String vcsUrl = scm != null ? scm.getRemote().get("origin") : null;
String commitId = scm != null ? scm.getCommit() : null;
// Dekorate uses its own annotations. Let's replace them with the quarkus ones.
result.add(new DecoratorBuildItem(target, new RemoveAnnotationDecorator(Annotations.VCS_URL)));
result.add(new DecoratorBuildItem(target, new RemoveAnnotationDecorator(Annotations.COMMIT_ID)));
// Add quarkus vcs annotations
if (commitId != null) {
result.add(new DecoratorBuildItem(target, new AddAnnotationDecorator(name, new Annotation(QUARKUS_ANNOTATIONS_COMMIT_ID, commitId, new String[0]))));
}
if (vcsUrl != null) {
result.add(new DecoratorBuildItem(target, new AddAnnotationDecorator(name, new Annotation(QUARKUS_ANNOTATIONS_VCS_URL, vcsUrl, new String[0]))));
}
});
if (config.isAddBuildTimestamp()) {
result.add(new DecoratorBuildItem(target, new AddAnnotationDecorator(name, new Annotation(QUARKUS_ANNOTATIONS_BUILD_TIMESTAMP, now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd - HH:mm:ss Z")), new String[0]))));
}
if (config.getExposition().isPresent() && config.getExposition().get().expose) {
Map<String, String> expostionAnnotations = config.getExposition().get().annotations;
String kind = "Ingress";
if (config.getTargetPlatformName().equals(OPENSHIFT)) {
kind = "Route";
}
for (Map.Entry<String, String> annotation : expostionAnnotations.entrySet()) {
result.add(new DecoratorBuildItem(target, new AddAnnotationDecorator(name, annotation.getKey(), annotation.getValue(), kind)));
}
}
if (config.getPrometheusConfig().annotations) {
// Add metrics annotations
metricsConfiguration.ifPresent(m -> {
String path = m.metricsEndpoint();
String prefix = config.getPrometheusConfig().prefix;
if (!ports.isEmpty() && path != null) {
result.add(new DecoratorBuildItem(target, new AddAnnotationDecorator(name, config.getPrometheusConfig().scrape.orElse(prefix + "/scrape"), "true", PROMETHEUS_ANNOTATION_TARGETS)));
result.add(new DecoratorBuildItem(target, new AddAnnotationDecorator(name, config.getPrometheusConfig().path.orElse(prefix + "/path"), path, PROMETHEUS_ANNOTATION_TARGETS)));
result.add(new DecoratorBuildItem(target, new AddAnnotationDecorator(name, config.getPrometheusConfig().port.orElse(prefix + "/port"), "" + ports.get(0).getPort(), PROMETHEUS_ANNOTATION_TARGETS)));
result.add(new DecoratorBuildItem(target, new AddAnnotationDecorator(name, config.getPrometheusConfig().scheme.orElse(prefix + "/scheme"), "http", PROMETHEUS_ANNOTATION_TARGETS)));
}
});
}
// Add metrics annotations
return result;
}
use of io.dekorate.kubernetes.config.Annotation in project dekorate by dekorateio.
the class AddAnnotationDecoratorTest method shouldAddAnnotationToPod.
@Test
public void shouldAddAnnotationToPod() {
assertEquals("Pod", new PodBuilder().getKind());
Pod expected = new PodBuilder().withNewMetadata().withName("pod").addToAnnotations("key1", "value1").endMetadata().build();
Pod actual = new PodBuilder().withNewMetadata().withName("pod").endMetadata().accept(new AddAnnotationDecorator(new Annotation("key1", "value1", new String[0]))).build();
assertEquals(expected, actual);
}
use of io.dekorate.kubernetes.config.Annotation in project dekorate by dekorateio.
the class AbstractKubernetesManifestGenerator method addDecorators.
/**
* Add all decorator to the resources.
* This method will read the config and then add all the required decorator to the resources.
* The method is intended to be called from the generate method and thus marked as protected.
*
* @param group The group..
* @param config The config.
*/
protected void addDecorators(String group, C config) {
if (Strings.isNotNullOrEmpty(config.getServiceAccount())) {
resourceRegistry.decorate(new ApplyServiceAccountNamedDecorator(config.getName(), config.getServiceAccount()));
}
if (config.getImagePullPolicy() != ImagePullPolicy.IfNotPresent) {
resourceRegistry.decorate(group, new ApplyImagePullPolicyDecorator(config.getImagePullPolicy()));
}
for (String imagePullSecret : config.getImagePullSecrets()) {
resourceRegistry.decorate(new AddImagePullSecretDecorator(config.getName(), imagePullSecret));
}
// Metadata handling
Labels.createLabels(config).forEach(l -> {
resourceRegistry.decorate(group, new AddLabelDecorator(config.getName(), l));
resourceRegistry.decorate(group, new AddToSelectorDecorator(config.getName(), l.getKey(), l.getValue()));
resourceRegistry.decorate(group, new AddToMatchingLabelsDecorator(config.getName(), l.getKey(), l.getValue()));
});
for (Annotation annotation : config.getAnnotations()) {
resourceRegistry.decorate(new AddAnnotationDecorator(config.getName(), annotation));
}
if (Strings.isNotNullOrEmpty(config.getServiceAccount())) {
resourceRegistry.decorate(group, new ApplyServiceAccountNamedDecorator(config.getName(), config.getServiceAccount()));
}
if (config.getImagePullPolicy() != ImagePullPolicy.IfNotPresent) {
resourceRegistry.decorate(group, new ApplyImagePullPolicyDecorator(config.getName(), config.getImagePullPolicy()));
}
for (String imagePullSecret : config.getImagePullSecrets()) {
resourceRegistry.decorate(group, new AddImagePullSecretDecorator(config.getName(), imagePullSecret));
}
for (HostAlias hostAlias : config.getHostAliases()) {
resourceRegistry.decorate(new AddHostAliasesDecorator(config.getName(), hostAlias));
}
for (Container container : config.getSidecars()) {
resourceRegistry.decorate(group, new AddSidecarDecorator(config.getName(), container));
}
for (Env env : config.getEnvVars()) {
resourceRegistry.decorate(group, new AddEnvVarDecorator(config.getName(), config.getName(), env));
}
for (Port port : config.getPorts()) {
resourceRegistry.decorate(group, new AddPortDecorator(config.getName(), config.getName(), port));
}
for (Mount mount : config.getMounts()) {
resourceRegistry.decorate(group, new AddMountDecorator(config.getName(), config.getName(), mount));
}
for (SecretVolume volume : config.getSecretVolumes()) {
validateVolume(volume);
resourceRegistry.decorate(group, new AddSecretVolumeDecorator(volume));
}
for (ConfigMapVolume volume : config.getConfigMapVolumes()) {
validateVolume(volume);
resourceRegistry.decorate(group, new AddConfigMapVolumeDecorator(volume));
}
for (PersistentVolumeClaimVolume volume : config.getPvcVolumes()) {
resourceRegistry.decorate(group, new AddPvcVolumeDecorator(volume));
}
for (AzureFileVolume volume : config.getAzureFileVolumes()) {
resourceRegistry.decorate(group, new AddAzureFileVolumeDecorator(volume));
}
for (AzureDiskVolume volume : config.getAzureDiskVolumes()) {
resourceRegistry.decorate(group, new AddAzureDiskVolumeDecorator(volume));
}
for (AwsElasticBlockStoreVolume volume : config.getAwsElasticBlockStoreVolumes()) {
resourceRegistry.decorate(group, new AddAwsElasticBlockStoreVolumeDecorator(volume));
}
if (config.getCommand() != null && config.getCommand().length > 0) {
resourceRegistry.decorate(group, new ApplyCommandDecorator(config.getName(), config.getName(), config.getCommand()));
}
if (config.getArguments() != null && config.getArguments().length > 0) {
resourceRegistry.decorate(group, new ApplyArgsDecorator(config.getName(), config.getName(), config.getArguments()));
}
if (Probes.isConfigured(config.getLivenessProbe())) {
resourceRegistry.decorate(group, new AddLivenessProbeDecorator(config.getName(), config.getName(), config.getLivenessProbe()));
}
if (Probes.isConfigured(config.getReadinessProbe())) {
resourceRegistry.decorate(group, new AddReadinessProbeDecorator(config.getName(), config.getName(), config.getReadinessProbe()));
}
// Container resources
if (config.getLimitResources() != null) {
if (Strings.isNotNullOrEmpty(config.getLimitResources().getCpu())) {
resourceRegistry.decorate(group, new ApplyLimitsCpuDecorator(config.getName(), config.getName(), config.getLimitResources().getCpu()));
}
if (Strings.isNotNullOrEmpty(config.getLimitResources().getMemory())) {
resourceRegistry.decorate(group, new ApplyLimitsMemoryDecorator(config.getName(), config.getName(), config.getLimitResources().getMemory()));
}
}
if (config.getRequestResources() != null) {
if (Strings.isNotNullOrEmpty(config.getRequestResources().getCpu())) {
resourceRegistry.decorate(group, new ApplyRequestsCpuDecorator(config.getName(), config.getName(), config.getRequestResources().getCpu()));
}
if (Strings.isNotNullOrEmpty(config.getRequestResources().getMemory())) {
resourceRegistry.decorate(group, new ApplyRequestsMemoryDecorator(config.getName(), config.getName(), config.getRequestResources().getMemory()));
}
}
resourceRegistry.decorate(group, new RemoveProbesFromInitContainerDecorator());
}
Aggregations