Skip to content

Commit

Permalink
fix (jkube-kit) : Generate yaml files for different environments (ecl…
Browse files Browse the repository at this point in the history
…ipse-jkube#1218)

Modify ResourceServiceConfig to recieve a list of files as resourceDirs
instead of receiving a single resourceDir. Resource fragments in these
files can be combined while generating resources.

Signed-off-by: Rohan Kumar <rohaan@redhat.com>
  • Loading branch information
rohanKanojia committed May 4, 2022
1 parent 81a8b28 commit 213d59c
Show file tree
Hide file tree
Showing 44 changed files with 562 additions and 77 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Usage:
* Fix #1194: jkube controller name configuration ignored when using resource fragments
* Fix #1201: ThorntailV2Generator works with Gradle Plugins
* Fix #1208: Allow env variables to be passed to a webapp generator s2i builder
* Fix #1218: Generate yaml files for different environments
* Fix #1251: Generate a preview of jkube documentation for PR if needed
* Fix #1259: Add integration test and docs for NameEnricher
* Fix #1260: Add documentation for PodAnnotationEnricher
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ Defaults to 0.

| *resourceEnvironment*
| Environment name where resources are placed. For example, if you set this property to dev and resourceDir is the
default one, plugin will look at `src/main/jkube/dev`.
default one, plugin will look at `src/main/jkube/dev`. Multiple environments can also be provided in form of comma separated strings. Resource fragments in these directories will be combined while generating resources.

Defaults to `null`.
| `jkube.environment`
Expand Down
21 changes: 21 additions & 0 deletions gradle-plugin/it/src/it/multi-environments/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
plugins {
id 'org.eclipse.jkube.kubernetes' version "${jKubeVersion}"
id 'org.eclipse.jkube.openshift' version "${jKubeVersion}"
id 'java'
}

group = 'org.eclipse.jkube.integration.tests.gradle'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
mavenCentral()
}

kubernetes {
offline = true
}

openshift {
offline = true
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
apiVersion: v1
kind: List
items:
- apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: multi-environments
provider: jkube
version: "@ignore@"
group: org.eclipse.jkube.integration.tests.gradle
name: common
data:
type: common
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
apiVersion: v1
kind: List
items:
- apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: multi-environments
provider: jkube
version: "@ignore@"
group: org.eclipse.jkube.integration.tests.gradle
name: common
data:
type: common
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
apiVersion: v1
kind: List
items:
- apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: multi-environments
provider: jkube
version: "@ignore@"
group: org.eclipse.jkube.integration.tests.gradle
name: common
data:
type: common
- apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: multi-environments
provider: jkube
version: "@ignore@"
group: org.eclipse.jkube.integration.tests.gradle
name: dev
data:
type: dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
apiVersion: v1
kind: List
items:
- apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: multi-environments
provider: jkube
version: "@ignore@"
group: org.eclipse.jkube.integration.tests.gradle
name: common
data:
type: common
- apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: multi-environments
provider: jkube
version: "@ignore@"
group: org.eclipse.jkube.integration.tests.gradle
name: dev
data:
type: dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
apiVersion: v1
kind: List
items:
- apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: multi-environments
provider: jkube
version: "@ignore@"
group: org.eclipse.jkube.integration.tests.gradle
name: common
data:
type: common
- apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: multi-environments
provider: jkube
version: "@ignore@"
group: org.eclipse.jkube.integration.tests.gradle
name: prod
data:
type: prod
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
apiVersion: v1
kind: List
items:
- apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: multi-environments
provider: jkube
version: "@ignore@"
group: org.eclipse.jkube.integration.tests.gradle
name: common
data:
type: common
- apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: multi-environments
provider: jkube
version: "@ignore@"
group: org.eclipse.jkube.integration.tests.gradle
name: prod
data:
type: prod
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
apiVersion: v1
kind: List
items:
- apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: multi-environments
provider: jkube
version: "@ignore@"
group: org.eclipse.jkube.integration.tests.gradle
name: dev
data:
type: dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
apiVersion: v1
kind: List
items:
- apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: multi-environments
provider: jkube
version: "@ignore@"
group: org.eclipse.jkube.integration.tests.gradle
name: dev
data:
type: dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
apiVersion: v1
kind: List
items:
- apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: multi-environments
provider: jkube
version: "@ignore@"
group: org.eclipse.jkube.integration.tests.gradle
name: prod
data:
type: prod
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
apiVersion: v1
kind: List
items:
- apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: multi-environments
provider: jkube
version: "@ignore@"
group: org.eclipse.jkube.integration.tests.gradle
name: prod
data:
type: prod
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#
# Copyright (c) 2019 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at:
#
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
# Red Hat, Inc. - initial API and implementation
#

data:
type: common
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#
# Copyright (c) 2019 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at:
#
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
# Red Hat, Inc. - initial API and implementation
#

data:
type: dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#
# Copyright (c) 2019 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at:
#
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
# Red Hat, Inc. - initial API and implementation
#

data:
type: prod
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/**
* Copyright (c) 2019 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at:
*
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
package org.eclipse.jkube.gradle.plugin.tests;

import net.minidev.json.parser.ParseException;
import org.eclipse.jkube.kit.common.ResourceVerify;
import org.gradle.testkit.runner.BuildResult;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

@RunWith(Parameterized.class)
public class MultiEnvironmentsIT {
@Rule
public final ITGradleRunner gradleRunner = new ITGradleRunner();

@Parameterized.Parameters(name = "environment {0}")
public static Collection<Object[]> data() {
return Arrays.asList(
new Object[] { "common" },
new Object[] { "dev" },
new Object[] { "prod" },
new Object[] { "common,dev"},
new Object[] { "common,prod"}
);
}

@Parameterized.Parameter
public String environment;

@Test
public void k8sResource_whenRun_generatesK8sManifestsContainingConfigMap() throws IOException, ParseException {
// When
final BuildResult result = gradleRunner.withITProject("multi-environments")
.withArguments("build", "-Pjkube.environment=" + environment, "k8sResource", "--stacktrace")
.build();
// Then
ResourceVerify.verifyResourceDescriptors(gradleRunner.resolveDefaultKubernetesResourceFile(),
gradleRunner.resolveFile("expected", environment.replace(",", "and"), "kubernetes.yml"));
assertThat(result).extracting(BuildResult::getOutput).asString()
.contains("Running in Kubernetes mode");
}

@Test
public void ocResource_whenRun_generatesOpenShiftManifestsContainingConfigMap() throws IOException, ParseException {
// When
final BuildResult result = gradleRunner.withITProject("multi-environments")
.withArguments("build", "-Pjkube.environment=" + environment, "ocResource", "--stacktrace")
.build();
// Then
ResourceVerify.verifyResourceDescriptors(gradleRunner.resolveDefaultOpenShiftResourceFile(),
gradleRunner.resolveFile("expected", environment.replace(",", "and"), "openshift.yml"));
assertThat(result).extracting(BuildResult::getOutput).asString()
.contains("Running in OpenShift mode");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -161,15 +161,15 @@ protected ClusterConfiguration initClusterConfiguration() {
System.getProperties(), kubernetesExtension.javaProject.getProperties()).build();
}

protected final File resolveResourceSourceDirectory() {
return ResourceUtil.getFinalResourceDir(kubernetesExtension.getResourceSourceDirectoryOrDefault(),
protected final List<File> resolveResourceSourceDirectory() {
return ResourceUtil.getFinalResourceDirs(kubernetesExtension.getResourceSourceDirectoryOrDefault(),
kubernetesExtension.getResourceEnvironmentOrNull());
}


protected ProcessorConfig extractGeneratorConfig() {
try {
return ProfileUtil.blendProfileWithConfiguration(ProfileUtil.GENERATOR_CONFIG, kubernetesExtension.getProfileOrNull(), kubernetesExtension.getResourceTargetDirectoryOrDefault(), kubernetesExtension.generator);
return ProfileUtil.blendProfileWithConfiguration(ProfileUtil.GENERATOR_CONFIG, kubernetesExtension.getProfileOrNull(), ResourceUtil.getFinalResourceDirs(kubernetesExtension.getResourceSourceDirectoryOrDefault(), kubernetesExtension.getResourceEnvironmentOrNull()), kubernetesExtension.generator);
} catch (IOException e) {
throw new IllegalArgumentException("Cannot extract generator config: " + e, e);
}
Expand Down

0 comments on commit 213d59c

Please sign in to comment.