Skip to content

Commit 0e3a8c1

Browse files
committed
Update CRD when schema validation changes
1 parent 014f133 commit 0e3a8c1

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

operator/src/main/java/oracle/kubernetes/operator/helpers/CRDHelper.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,21 +64,21 @@ static class CRDContext {
6464
this.model = createModel();
6565
}
6666

67-
private V1beta1CustomResourceDefinition createModel() {
67+
static V1beta1CustomResourceDefinition createModel() {
6868
return new V1beta1CustomResourceDefinition()
6969
.apiVersion("apiextensions.k8s.io/v1beta1")
7070
.kind("CustomResourceDefinition")
7171
.metadata(createMetadata())
7272
.spec(createSpec());
7373
}
7474

75-
private V1ObjectMeta createMetadata() {
75+
static V1ObjectMeta createMetadata() {
7676
return new V1ObjectMeta()
7777
.name(KubernetesConstants.CRD_NAME)
7878
.putLabelsItem(LabelConstants.RESOURCE_VERSION_LABEL, DEFAULT_OPERATOR_VERSION);
7979
}
8080

81-
private V1beta1CustomResourceDefinitionSpec createSpec() {
81+
static V1beta1CustomResourceDefinitionSpec createSpec() {
8282
return new V1beta1CustomResourceDefinitionSpec()
8383
.group(KubernetesConstants.DOMAIN_GROUP)
8484
.version(KubernetesConstants.DOMAIN_VERSION)
@@ -87,26 +87,26 @@ private V1beta1CustomResourceDefinitionSpec createSpec() {
8787
.validation(createSchemaValidation());
8888
}
8989

90-
private V1beta1CustomResourceDefinitionNames getCRDNames() {
90+
static V1beta1CustomResourceDefinitionNames getCRDNames() {
9191
return new V1beta1CustomResourceDefinitionNames()
9292
.plural(KubernetesConstants.DOMAIN_PLURAL)
9393
.singular(KubernetesConstants.DOMAIN_SINGULAR)
9494
.kind(KubernetesConstants.DOMAIN)
9595
.shortNames(Collections.singletonList(KubernetesConstants.DOMAIN_SHORT));
9696
}
9797

98-
private V1beta1CustomResourceValidation createSchemaValidation() {
98+
static V1beta1CustomResourceValidation createSchemaValidation() {
9999
return new V1beta1CustomResourceValidation().openAPIV3Schema(createOpenAPIV3Schema());
100100
}
101101

102-
private V1beta1JSONSchemaProps createOpenAPIV3Schema() {
102+
static V1beta1JSONSchemaProps createOpenAPIV3Schema() {
103103
Gson gson = new Gson();
104104
JsonElement jsonElement = gson.toJsonTree(createSchemaGenerator().generate(DomainSpec.class));
105105
V1beta1JSONSchemaProps spec = gson.fromJson(jsonElement, V1beta1JSONSchemaProps.class);
106106
return new V1beta1JSONSchemaProps().putPropertiesItem("spec", spec);
107107
}
108108

109-
private SchemaGenerator createSchemaGenerator() {
109+
static SchemaGenerator createSchemaGenerator() {
110110
SchemaGenerator generator = new SchemaGenerator();
111111
generator.setIncludeAdditionalProperties(false);
112112
generator.setSupportObjectReferences(false);
@@ -218,9 +218,19 @@ public boolean isOutdatedCRD(
218218
// For later versions of the product, we will want to do a complete comparison
219219
// of the version, supporting alpha and beta variants, e.g. v3alpha1 format, but
220220
// for now we just need to replace v1.
221-
return actual.getSpec().getVersion().equals("v1");
221+
return actual.getSpec().getVersion().equals("v1")
222+
|| (actual.getSpec().getVersion().equals("v2")
223+
&& (getSchemaValidation(actual) == null
224+
|| !getSchemaValidation(expected).equals(getSchemaValidation(actual))));
222225
// Similarly, we will later want to check:
223226
// VersionHelper.matchesResourceVersion(existingCRD.getMetadata(), DEFAULT_OPERATOR_VERSION)
224227
}
228+
229+
private V1beta1JSONSchemaProps getSchemaValidation(V1beta1CustomResourceDefinition crd) {
230+
if (crd != null && crd.getSpec() != null && crd.getSpec().getValidation() != null) {
231+
return crd.getSpec().getValidation().getOpenAPIV3Schema();
232+
}
233+
return null;
234+
}
225235
}
226236
}

operator/src/test/java/oracle/kubernetes/operator/helpers/CRDHelperTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
import static com.meterware.simplestub.Stub.createStrictStub;
88
import static oracle.kubernetes.LogMatcher.containsInfo;
9-
import static oracle.kubernetes.operator.VersionConstants.DEFAULT_OPERATOR_VERSION;
109
import static oracle.kubernetes.operator.VersionConstants.OPERATOR_V1;
1110
import static oracle.kubernetes.operator.logging.MessageKeys.CREATING_CRD;
1211
import static org.hamcrest.Matchers.sameInstance;
@@ -38,7 +37,7 @@ public class CRDHelperTest {
3837
private List<LogRecord> logRecords = new ArrayList<>();
3938

4039
private V1beta1CustomResourceDefinition defineDefaultCRD() {
41-
return defineCRD(KubernetesConstants.DOMAIN_VERSION, DEFAULT_OPERATOR_VERSION);
40+
return CRDHelper.CRDContext.createModel();
4241
}
4342

4443
private V1beta1CustomResourceDefinition defineCRD(String version, String operatorVersion) {

0 commit comments

Comments
 (0)