提交 b0c73413 编写于 作者: N Niels de Vos

addons: when enabling storage-provisioner-gluster, mark other SCs non-default

There can only be one StorageClass be marked as default. When the
storage-provisioner-gluster addon is enabled, users expect it to be the
default StorageClass.

Instead of removing the "is-default" annotation from the other
StorageClasses, set it to "false". This leaves only the "glusterfile"
StorageClass as "is-default".
上级 3c3b7368
......@@ -198,7 +198,7 @@ var settings = []Setting{
name: "storage-provisioner-gluster",
set: SetBool,
validations: []setFn{IsValidAddon},
callbacks: []setFn{EnableOrDisableAddon},
callbacks: []setFn{EnableOrDisableStorageClasses},
},
{
name: "metrics-server",
......
......@@ -153,3 +153,25 @@ func EnableOrDisableDefaultStorageClass(name, val string) error {
}
return EnableOrDisableAddon(name, val)
}
func EnableOrDisableStorageClasses(name, val string) error {
enable, err := strconv.ParseBool(val)
if err != nil {
return errors.Wrap(err, "Error parsing boolean")
}
// Only StorageClass for 'name' should stay enabled
if enable {
class := "standard"
if name == "storage-provisioner-gluster" {
class = "glusterfile"
}
err := storageclass.DisableAllOtherStorageClasses(class)
if err != nil {
return errors.Wrap(err, "Error disabling storage classes")
}
}
return EnableOrDisableAddon(name, val)
}
......@@ -7,6 +7,8 @@ metadata:
k8s-app: storage-provisioner-gluster
kubernetes.io/minikube-addons: storage-provisioner-gluster
addonmanager.kubernetes.io/mode: Reconcile
annotations:
storageclass.beta.kubernetes.io/is-default-class: "true"
provisioner: gluster.org/glusterfile
reclaimPolicy: Delete
parameters:
......
......@@ -46,3 +46,34 @@ func DisableDefaultStorageClass() error {
return nil
}
func DisableAllOtherStorageClasses(name string) error {
loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, &clientcmd.ConfigOverrides{})
config, err := kubeConfig.ClientConfig()
if err != nil {
return errors.Wrap(err, "Error creating kubeConfig")
}
client, err := kubernetes.NewForConfig(config)
if err != nil {
return errors.Wrap(err, "Error creating new client from kubeConfig.ClientConfig()")
}
scList, err := client.Storage().StorageClasses().List(metav1.ListOptions{})
if err != nil {
return errors.Wrap(err, "Error listing StorageClasses")
}
for _, sc := range scList.Items {
if sc.Name == name {
continue
}
err = client.Storage().StorageClasses().Delete(sc.Name, &metav1.DeleteOptions{})
if err != nil {
return errors.Wrapf(err, "Error deleting storage class %s", sc.Name)
}
}
return nil
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册