diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateBuilder.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateBuilder.java
index 36fbf78286..f32388d81b 100644
--- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateBuilder.java
+++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateBuilder.java
@@ -53,6 +53,7 @@
import org.csanchez.jenkins.plugins.kubernetes.pod.decorator.PodDecorator;
import org.csanchez.jenkins.plugins.kubernetes.volumes.PodVolume;
import org.csanchez.jenkins.plugins.kubernetes.volumes.ConfigMapVolume;
+import org.csanchez.jenkins.plugins.kubernetes.volumes.PersistentVolumeClaim;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
@@ -189,7 +190,11 @@ public Pod build() {
String podName = agent.getPodName();
int i = 0;
for (final PodVolume volume : template.getVolumes()) {
- final String volumeName = "volume-" + i;
+ String volumeNameTmp = "volume-" + i;
+ if (volume instanceof PersistentVolumeClaim) {
+ volumeNameTmp = "volume-" + ((PersistentVolumeClaim)volume).getClaimName();
+ }
+ final String volumeName = volumeNameTmp;
final String mountPath = normalizePath(volume.getMountPath());
if (!volumeMounts.containsKey(mountPath)) {
VolumeMountBuilder volumeMountBuilder = new VolumeMountBuilder() //
@@ -202,8 +207,17 @@ public Pod build() {
volumeMountBuilder = volumeMountBuilder.withSubPath(normalizePath(subPath));
}
}
+ if (volume instanceof PersistentVolumeClaim) {
+ final PersistentVolumeClaim pvcVolume = (PersistentVolumeClaim) volume;
+ String subPath = pvcVolume.getSubPath();
+ if (subPath != null && subPath.length()>0) {
+ volumeMountBuilder = volumeMountBuilder.withSubPath(normalizePath(subPath));
+ }
+ }
volumeMounts.put(mountPath, volumeMountBuilder.build());
- volumes.put(volumeName, volume.buildVolume(volumeName, podName));
+ if (!volumes.containsKey(volumeName)) {
+ volumes.put(volumeName, volume.buildVolume(volumeName, podName));
+ }
i++;
}
}
diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/volumes/PersistentVolumeClaim.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/volumes/PersistentVolumeClaim.java
index 7c8378e3b2..cd0b638893 100644
--- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/volumes/PersistentVolumeClaim.java
+++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/volumes/PersistentVolumeClaim.java
@@ -28,6 +28,7 @@
import edu.umd.cs.findbugs.annotations.NonNull;
import org.jenkinsci.Symbol;
import org.kohsuke.stapler.DataBoundConstructor;
+import org.kohsuke.stapler.DataBoundSetter;
import hudson.Extension;
import hudson.model.Descriptor;
@@ -36,6 +37,7 @@
public class PersistentVolumeClaim extends PodVolume {
private String mountPath;
+ private String subPath;
private String claimName;
@CheckForNull
private Boolean readOnly;
@@ -61,6 +63,14 @@ public Boolean getReadOnly() {
return readOnly != null && readOnly;
}
+ public String getSubPath() {
+ return subPath;
+ }
+
+ @DataBoundSetter
+ public void setSubPath(String subPath) {
+ this.subPath = subPath;
+ }
@Override
public Volume buildVolume(String volumeName) {
return new VolumeBuilder()
diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/volumes/PersistentVolumeClaim/config.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/volumes/PersistentVolumeClaim/config.jelly
index 104fe0c8bb..b4ee868551 100644
--- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/volumes/PersistentVolumeClaim/config.jelly
+++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/volumes/PersistentVolumeClaim/config.jelly
@@ -13,5 +13,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/volumes/PersistentVolumeClaim/config_zh_CN.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/volumes/PersistentVolumeClaim/config_zh_CN.properties
index 43067846a5..35e1072d35 100644
--- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/volumes/PersistentVolumeClaim/config_zh_CN.properties
+++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/volumes/PersistentVolumeClaim/config_zh_CN.properties
@@ -23,3 +23,4 @@
Claim\ Name=\u7533\u660E\u503C
Read\ Only=\u53EA\u8BFB
Mount\ path=\u6302\u8F7D\u8DEF\u5F84
+Mount\ subPath=\u5b50\u8def\u5f84
diff --git a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/PersistentVolumeClaimTest.java b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/PersistentVolumeClaimTest.java
new file mode 100644
index 0000000000..abacc0415e
--- /dev/null
+++ b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/PersistentVolumeClaimTest.java
@@ -0,0 +1,23 @@
+package org.csanchez.jenkins.plugins.kubernetes;
+
+import org.csanchez.jenkins.plugins.kubernetes.volumes.PersistentVolumeClaim;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+
+public class PersistentVolumeClaimTest {
+
+ @Test
+ public void testNullSubPathValue() {
+ PersistentVolumeClaim persistentVolumeClaim= new PersistentVolumeClaim("oneMountPath", "Myvolume",false);
+ assertNull(persistentVolumeClaim.getSubPath());
+ }
+
+ @Test
+ public void testValidSubPathValue() {
+ PersistentVolumeClaim persistentVolumeClaim= new PersistentVolumeClaim("oneMountPath", "Myvolume",false);
+ persistentVolumeClaim.setSubPath("miSubpath");
+ assertEquals(persistentVolumeClaim.getSubPath(),"miSubpath");
+ }
+
+}