From f71abb56693c692f46813dea9b0adcafae814335 Mon Sep 17 00:00:00 2001
From: Maxime Bajeux <max.bajeux@gmail.com>
Date: Wed, 15 Jul 2020 00:55:29 +0200
Subject: [PATCH] feat(volumes): Expose the provisioner associated to a volume
 (#4030)

* feat(volumes): Expose the provisioner associated to a volume

* feat(volumes): fix import and add default value to provisioner
---
 api/portainer.go                                      | 1 +
 app/kubernetes/converters/storageClass.js             | 1 +
 app/kubernetes/models/storage-class/models.js         | 1 +
 app/kubernetes/views/configure/configureController.js | 1 +
 app/kubernetes/views/volumes/edit/volume.html         | 4 ++++
 5 files changed, 8 insertions(+)

diff --git a/api/portainer.go b/api/portainer.go
index 8e94b7694..428b07c97 100644
--- a/api/portainer.go
+++ b/api/portainer.go
@@ -342,6 +342,7 @@ type (
 	KubernetesStorageClassConfig struct {
 		Name        string   `json:"Name"`
 		AccessModes []string `json:"AccessModes"`
+		Provisioner string   `json:"Provisioner"`
 	}
 
 	// LDAPGroupSearchSettings represents settings used to search for groups in a LDAP server
diff --git a/app/kubernetes/converters/storageClass.js b/app/kubernetes/converters/storageClass.js
index 2aad0f02e..773c96862 100644
--- a/app/kubernetes/converters/storageClass.js
+++ b/app/kubernetes/converters/storageClass.js
@@ -7,6 +7,7 @@ class KubernetesStorageClassConverter {
   static apiToStorageClass(data) {
     const res = new KubernetesStorageClass();
     res.Name = data.metadata.name;
+    res.Provisioner = data.provisioner;
     return res;
   }
 }
diff --git a/app/kubernetes/models/storage-class/models.js b/app/kubernetes/models/storage-class/models.js
index 6ede8946a..153976f64 100644
--- a/app/kubernetes/models/storage-class/models.js
+++ b/app/kubernetes/models/storage-class/models.js
@@ -24,6 +24,7 @@ export function KubernetesStorageClassAccessPolicies() {
 const _KubernetesStorageClass = Object.freeze({
   Name: '',
   AccessModes: [],
+  Provisioner: '',
 });
 
 export class KubernetesStorageClass {
diff --git a/app/kubernetes/views/configure/configureController.js b/app/kubernetes/views/configure/configureController.js
index 53f876166..3a16083ce 100644
--- a/app/kubernetes/views/configure/configureController.js
+++ b/app/kubernetes/views/configure/configureController.js
@@ -41,6 +41,7 @@ class KubernetesConfigureController {
             const res = new KubernetesStorageClass();
             res.Name = item.Name;
             res.AccessModes = _.map(item.AccessModes, 'Name');
+            res.Provisioner = item.Provisioner;
             return res;
           }
         }),
diff --git a/app/kubernetes/views/volumes/edit/volume.html b/app/kubernetes/views/volumes/edit/volume.html
index 781457f1f..aee67f42a 100644
--- a/app/kubernetes/views/volumes/edit/volume.html
+++ b/app/kubernetes/views/volumes/edit/volume.html
@@ -37,6 +37,10 @@
                       <td>Storage</td>
                       <td>{{ ctrl.volume.PersistentVolumeClaim.StorageClass.Name }}</td>
                     </tr>
+                    <tr>
+                      <td>Provisioner</td>
+                      <td>{{ ctrl.volume.PersistentVolumeClaim.StorageClass.Provisioner ? ctrl.volume.PersistentVolumeClaim.StorageClass.Provisioner : '-' }}</td>
+                    </tr>
                     <tr>
                       <td>Size</td>
                       <td>{{ ctrl.volume.PersistentVolumeClaim.Storage }}</td>