Skip to content

Commit 8fa839e

Browse files
committed
feat: add version information to configuration
1 parent 174097f commit 8fa839e

File tree

11 files changed

+195
-66
lines changed

11 files changed

+195
-66
lines changed

operator-framework-core/pom.xml

Lines changed: 86 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2,72 +2,96 @@
22
<project xmlns="http://maven.apache.org/POM/4.0.0"
33
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
44
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5-
<modelVersion>4.0.0</modelVersion>
6-
<parent>
7-
<groupId>io.javaoperatorsdk</groupId>
8-
<artifactId>java-operator-sdk</artifactId>
9-
<version>1.7.1-SNAPSHOT</version>
10-
<relativePath>../pom.xml</relativePath>
11-
</parent>
5+
<modelVersion>4.0.0</modelVersion>
6+
<parent>
7+
<groupId>io.javaoperatorsdk</groupId>
8+
<artifactId>java-operator-sdk</artifactId>
9+
<version>1.7.1-SNAPSHOT</version>
10+
<relativePath>../pom.xml</relativePath>
11+
</parent>
1212

13-
<artifactId>operator-framework-core</artifactId>
14-
<name>Operator SDK - Framework - Core</name>
15-
<description>Core framework for implementing Kubernetes operators</description>
16-
<packaging>jar</packaging>
13+
<artifactId>operator-framework-core</artifactId>
14+
<name>Operator SDK - Framework - Core</name>
15+
<description>Core framework for implementing Kubernetes operators</description>
16+
<packaging>jar</packaging>
1717

18-
<properties>
19-
<java.version>11</java.version>
20-
<maven.compiler.source>11</maven.compiler.source>
21-
<maven.compiler.target>11</maven.compiler.target>
22-
</properties>
18+
<properties>
19+
<java.version>11</java.version>
20+
<maven.compiler.source>11</maven.compiler.source>
21+
<maven.compiler.target>11</maven.compiler.target>
22+
</properties>
2323

24-
<build>
25-
<plugins>
26-
<plugin>
27-
<groupId>org.apache.maven.plugins</groupId>
28-
<artifactId>maven-surefire-plugin</artifactId>
29-
<version>${surefire.version}</version>
30-
</plugin>
31-
</plugins>
32-
</build>
24+
<build>
25+
<plugins>
26+
<plugin>
27+
<groupId>org.apache.maven.plugins</groupId>
28+
<artifactId>maven-surefire-plugin</artifactId>
29+
<version>${surefire.version}</version>
30+
</plugin>
31+
<plugin>
32+
<groupId>pl.project13.maven</groupId>
33+
<artifactId>git-commit-id-plugin</artifactId>
34+
<version>4.0.3</version>
35+
<executions>
36+
<execution>
37+
<id>get-the-git-infos</id>
38+
<goals>
39+
<goal>revision</goal>
40+
</goals>
41+
<phase>initialize</phase>
42+
</execution>
43+
</executions>
44+
<configuration>
45+
<generateGitPropertiesFile>true</generateGitPropertiesFile>
46+
<generateGitPropertiesFilename>${project.build.outputDirectory}/version.properties
47+
</generateGitPropertiesFilename>
48+
<includeOnlyProperties>
49+
<includeOnlyProperty>^git.build.(time|version)$</includeOnlyProperty>
50+
<includeOnlyProperty>^git.commit.id.(abbrev|full)$</includeOnlyProperty>
51+
</includeOnlyProperties>
52+
<commitIdGenerationMode>full</commitIdGenerationMode>
53+
</configuration>
54+
</plugin>
55+
</plugins>
56+
</build>
3357

3458

35-
<dependencies>
36-
<dependency>
37-
<groupId>io.fabric8</groupId>
38-
<artifactId>openshift-client</artifactId>
39-
</dependency>
40-
<dependency>
41-
<groupId>org.slf4j</groupId>
42-
<artifactId>slf4j-api</artifactId>
43-
</dependency>
59+
<dependencies>
60+
<dependency>
61+
<groupId>io.fabric8</groupId>
62+
<artifactId>openshift-client</artifactId>
63+
</dependency>
64+
<dependency>
65+
<groupId>org.slf4j</groupId>
66+
<artifactId>slf4j-api</artifactId>
67+
</dependency>
4468

45-
<dependency>
46-
<groupId>org.junit.jupiter</groupId>
47-
<artifactId>junit-jupiter-api</artifactId>
48-
<scope>test</scope>
49-
</dependency>
50-
<dependency>
51-
<groupId>org.junit.jupiter</groupId>
52-
<artifactId>junit-jupiter-engine</artifactId>
53-
<scope>test</scope>
54-
</dependency>
55-
<dependency>
56-
<groupId>org.mockito</groupId>
57-
<artifactId>mockito-core</artifactId>
58-
<scope>test</scope>
59-
</dependency>
60-
<dependency>
61-
<groupId>org.apache.logging.log4j</groupId>
62-
<artifactId>log4j-slf4j-impl</artifactId>
63-
<version>2.13.3</version>
64-
<scope>test</scope>
65-
</dependency>
66-
<dependency>
67-
<groupId>org.assertj</groupId>
68-
<artifactId>assertj-core</artifactId>
69-
<version>3.18.0</version>
70-
<scope>test</scope>
71-
</dependency>
72-
</dependencies>
69+
<dependency>
70+
<groupId>org.junit.jupiter</groupId>
71+
<artifactId>junit-jupiter-api</artifactId>
72+
<scope>test</scope>
73+
</dependency>
74+
<dependency>
75+
<groupId>org.junit.jupiter</groupId>
76+
<artifactId>junit-jupiter-engine</artifactId>
77+
<scope>test</scope>
78+
</dependency>
79+
<dependency>
80+
<groupId>org.mockito</groupId>
81+
<artifactId>mockito-core</artifactId>
82+
<scope>test</scope>
83+
</dependency>
84+
<dependency>
85+
<groupId>org.apache.logging.log4j</groupId>
86+
<artifactId>log4j-slf4j-impl</artifactId>
87+
<version>2.13.3</version>
88+
<scope>test</scope>
89+
</dependency>
90+
<dependency>
91+
<groupId>org.assertj</groupId>
92+
<artifactId>assertj-core</artifactId>
93+
<version>3.18.0</version>
94+
<scope>test</scope>
95+
</dependency>
96+
</dependencies>
7397
</project>

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AbstractConfigurationService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010
public abstract class AbstractConfigurationService implements ConfigurationService {
1111

1212
private final Map<String, ControllerConfiguration> configurations = new ConcurrentHashMap<>();
13+
private final Version version;
14+
15+
public AbstractConfigurationService(Version version) {
16+
this.version = version;
17+
}
1318

1419
protected <R extends CustomResource> void register(ControllerConfiguration<R> config) {
1520
final var name = config.getName();
@@ -41,4 +46,9 @@ public <R extends CustomResource> ControllerConfiguration<R> getConfigurationFor
4146
public Set<String> getKnownControllerNames() {
4247
return configurations.keySet();
4348
}
49+
50+
@Override
51+
public Version getVersion() {
52+
return version;
53+
}
4454
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ default Config getClientConfiguration() {
1515
}
1616

1717
Set<String> getKnownControllerNames();
18+
19+
Version getVersion();
1820
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.javaoperatorsdk.operator.api.config;
2+
3+
import java.io.IOException;
4+
import java.text.DateFormat;
5+
import java.text.ParseException;
6+
import java.time.Instant;
7+
import java.util.Date;
8+
import java.util.Properties;
9+
10+
public class Utils {
11+
12+
public static Version loadFromProperties() {
13+
final var is =
14+
Thread.currentThread().getContextClassLoader().getResourceAsStream("version.properties");
15+
final var properties = new Properties();
16+
try {
17+
properties.load(is);
18+
} catch (IOException e) {
19+
e.printStackTrace();
20+
}
21+
22+
Date builtTime;
23+
try {
24+
builtTime = DateFormat.getDateTimeInstance().parse(properties.getProperty("git.build.time"));
25+
} catch (ParseException e) {
26+
builtTime = Date.from(Instant.EPOCH);
27+
}
28+
return new Version(
29+
properties.getProperty("git.build.version", "unknown"),
30+
properties.getProperty("git.commit.id.abbrev", "unknown"),
31+
builtTime);
32+
}
33+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package io.javaoperatorsdk.operator.api.config;
2+
3+
import java.util.Date;
4+
5+
public class Version {
6+
private final String project;
7+
private final String commit;
8+
private final Date builtTime;
9+
10+
public Version(String project, String commit, Date builtTime) {
11+
this.project = project;
12+
this.commit = commit;
13+
this.builtTime = builtTime;
14+
}
15+
16+
public String getProject() {
17+
return project;
18+
}
19+
20+
public String getCommit() {
21+
return commit;
22+
}
23+
24+
public Date getBuiltTime() {
25+
return builtTime;
26+
}
27+
}

operator-framework-quarkus-extension/deployment/src/main/java/io/javaoperatorsdk/quarkus/extension/deployment/QuarkusExtensionProcessor.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77
import io.javaoperatorsdk.operator.api.config.ConfigurationService;
88
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
99
import io.javaoperatorsdk.operator.api.config.RetryConfiguration;
10+
import io.javaoperatorsdk.operator.api.config.Utils;
1011
import io.javaoperatorsdk.quarkus.extension.ConfigurationServiceRecorder;
1112
import io.javaoperatorsdk.quarkus.extension.ExternalConfiguration;
1213
import io.javaoperatorsdk.quarkus.extension.ExternalControllerConfiguration;
1314
import io.javaoperatorsdk.quarkus.extension.OperatorProducer;
1415
import io.javaoperatorsdk.quarkus.extension.QuarkusConfigurationService;
1516
import io.javaoperatorsdk.quarkus.extension.QuarkusControllerConfiguration;
17+
import io.javaoperatorsdk.quarkus.extension.Version;
1618
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
1719
import io.quarkus.arc.deployment.SyntheticBeanBuildItem;
1820
import io.quarkus.deployment.annotations.BuildProducer;
@@ -79,7 +81,12 @@ void createConfigurationServiceAndOperator(
7981
.map(ci -> createControllerConfiguration(ci, additionalBeans, reflectionClasses))
8082
.collect(Collectors.toList());
8183

82-
final var supplier = recorder.configurationServiceSupplier(controllerConfigs);
84+
final var version = Utils.loadFromProperties();
85+
86+
final var supplier =
87+
recorder.configurationServiceSupplier(
88+
new Version(version.getProject(), version.getCommit(), version.getBuiltTime()),
89+
controllerConfigs);
8390
syntheticBeanBuildItemBuildProducer.produce(
8491
SyntheticBeanBuildItem.configure(QuarkusConfigurationService.class)
8592
.scope(Singleton.class)

operator-framework-quarkus-extension/runtime/src/main/java/io/javaoperatorsdk/quarkus/extension/ConfigurationServiceRecorder.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.fabric8.kubernetes.client.KubernetesClient;
44
import io.javaoperatorsdk.operator.api.config.ConfigurationService;
55
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
6+
import io.javaoperatorsdk.operator.api.config.Version;
67
import io.quarkus.arc.Arc;
78
import io.quarkus.runtime.annotations.Recorder;
89
import java.util.List;
@@ -12,9 +13,9 @@
1213
public class ConfigurationServiceRecorder {
1314

1415
public Supplier<ConfigurationService> configurationServiceSupplier(
15-
List<ControllerConfiguration> controllerConfigs) {
16+
Version version, List<ControllerConfiguration> controllerConfigs) {
1617
return () ->
1718
new QuarkusConfigurationService(
18-
controllerConfigs, Arc.container().instance(KubernetesClient.class).get());
19+
version, controllerConfigs, Arc.container().instance(KubernetesClient.class).get());
1920
}
2021
}

operator-framework-quarkus-extension/runtime/src/main/java/io/javaoperatorsdk/quarkus/extension/QuarkusConfigurationService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import io.javaoperatorsdk.operator.api.ResourceController;
77
import io.javaoperatorsdk.operator.api.config.AbstractConfigurationService;
88
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
9+
import io.javaoperatorsdk.operator.api.config.Version;
910
import io.quarkus.arc.runtime.ClientProxyUnwrapper;
1011
import java.util.List;
1112

@@ -14,7 +15,8 @@ public class QuarkusConfigurationService extends AbstractConfigurationService {
1415
private final KubernetesClient client;
1516

1617
public QuarkusConfigurationService(
17-
List<ControllerConfiguration> configurations, KubernetesClient client) {
18+
Version version, List<ControllerConfiguration> configurations, KubernetesClient client) {
19+
super(version);
1820
this.client = client;
1921
if (configurations != null && !configurations.isEmpty()) {
2022
configurations.forEach(this::register);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.javaoperatorsdk.quarkus.extension;
2+
3+
import io.quarkus.runtime.annotations.RecordableConstructor;
4+
import java.util.Date;
5+
6+
/** Re-publish with a recordable constructor so that quarkus can do its thing with it! */
7+
public class Version extends io.javaoperatorsdk.operator.api.config.Version {
8+
9+
@RecordableConstructor
10+
public Version(String project, String commit, Date builtTime) {
11+
super(project, commit, builtTime);
12+
}
13+
}

operator-framework-spring-boot-starter/src/main/java/io/javaoperatorsdk/operator/springboot/starter/OperatorAutoConfiguration.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.javaoperatorsdk.operator.api.ResourceController;
1212
import io.javaoperatorsdk.operator.api.config.AbstractConfigurationService;
1313
import io.javaoperatorsdk.operator.api.config.RetryConfiguration;
14+
import io.javaoperatorsdk.operator.api.config.Utils;
1415
import io.javaoperatorsdk.operator.config.runtime.AnnotationConfiguration;
1516
import java.util.List;
1617
import java.util.Optional;
@@ -26,6 +27,10 @@
2627
public class OperatorAutoConfiguration extends AbstractConfigurationService {
2728
@Autowired private OperatorConfigurationProperties configuration;
2829

30+
public OperatorAutoConfiguration() {
31+
super(Utils.loadFromProperties());
32+
}
33+
2934
@Bean
3035
@ConditionalOnMissingBean
3136
public KubernetesClient kubernetesClient() {

0 commit comments

Comments
 (0)