2020-09-03 09:34:29 +00:00
|
|
|
package e2e
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/ceph/ceph-csi/internal/util"
|
|
|
|
|
|
|
|
v1 "k8s.io/api/core/v1"
|
|
|
|
apierrs "k8s.io/apimachinery/pkg/api/errors"
|
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
|
|
"k8s.io/client-go/kubernetes"
|
|
|
|
"k8s.io/kubernetes/test/e2e/framework"
|
|
|
|
)
|
|
|
|
|
|
|
|
func deleteConfigMap(pluginPath string) error {
|
|
|
|
path := pluginPath + configMap
|
2021-07-22 05:45:17 +00:00
|
|
|
|
2021-07-28 03:51:18 +00:00
|
|
|
return retryKubectlFile(cephCSINamespace, kubectlDelete, path, deployTimeout)
|
2020-09-03 09:34:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func createConfigMap(pluginPath string, c kubernetes.Interface, f *framework.Framework) error {
|
|
|
|
path := pluginPath + configMap
|
|
|
|
cm := v1.ConfigMap{}
|
|
|
|
err := unmarshal(path, &cm)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
fsID, stdErr, err := execCommandInToolBoxPod(f, "ceph fsid", rookNamespace)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
if stdErr != "" {
|
|
|
|
return fmt.Errorf("error getting fsid %v", stdErr)
|
|
|
|
}
|
|
|
|
// remove new line present in fsID
|
|
|
|
fsID = strings.Trim(fsID, "\n")
|
|
|
|
// get mon list
|
|
|
|
mons, err := getMons(rookNamespace, c)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
conmap := []util.ClusterInfo{{
|
|
|
|
ClusterID: fsID,
|
|
|
|
Monitors: mons,
|
|
|
|
RadosNamespace: radosNamespace,
|
|
|
|
}}
|
|
|
|
if upgradeTesting {
|
|
|
|
subvolumegroup = "csi"
|
|
|
|
}
|
|
|
|
conmap[0].CephFS.SubvolumeGroup = subvolumegroup
|
|
|
|
data, err := json.Marshal(conmap)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
cm.Data["config.json"] = string(data)
|
|
|
|
cm.Namespace = cephCSINamespace
|
|
|
|
// if the configmap is present update it,during cephcsi helm charts
|
|
|
|
// deployment empty configmap gets created we need to override it
|
|
|
|
_, err = c.CoreV1().ConfigMaps(cephCSINamespace).Get(context.TODO(), cm.Name, metav1.GetOptions{})
|
|
|
|
|
|
|
|
if err == nil {
|
|
|
|
_, updateErr := c.CoreV1().ConfigMaps(cephCSINamespace).Update(context.TODO(), &cm, metav1.UpdateOptions{})
|
|
|
|
if updateErr != nil {
|
2021-05-11 09:28:56 +00:00
|
|
|
return fmt.Errorf("failed to update configmap: %w", updateErr)
|
2020-09-03 09:34:29 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if apierrs.IsNotFound(err) {
|
|
|
|
_, err = c.CoreV1().ConfigMaps(cephCSINamespace).Create(context.TODO(), &cm, metav1.CreateOptions{})
|
|
|
|
}
|
|
|
|
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// createCustomConfigMap provides multiple clusters information.
|
2021-10-01 04:06:06 +00:00
|
|
|
func createCustomConfigMap(
|
|
|
|
c kubernetes.Interface,
|
|
|
|
pluginPath string,
|
|
|
|
clusterInfo map[string]map[string]string) error {
|
2020-09-03 09:34:29 +00:00
|
|
|
path := pluginPath + configMap
|
|
|
|
cm := v1.ConfigMap{}
|
|
|
|
err := unmarshal(path, &cm)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
// get mon list
|
|
|
|
mons, err := getMons(rookNamespace, c)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
// get clusterIDs
|
|
|
|
var clusterID []string
|
2021-10-01 04:06:06 +00:00
|
|
|
for key := range clusterInfo {
|
2020-09-03 09:34:29 +00:00
|
|
|
clusterID = append(clusterID, key)
|
|
|
|
}
|
|
|
|
conmap := []util.ClusterInfo{
|
|
|
|
{
|
|
|
|
ClusterID: clusterID[0],
|
|
|
|
Monitors: mons,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
ClusterID: clusterID[1],
|
|
|
|
Monitors: mons,
|
2021-07-13 13:09:31 +00:00
|
|
|
},
|
|
|
|
}
|
2021-10-01 04:06:06 +00:00
|
|
|
|
|
|
|
// fill radosNamespace and subvolgroups
|
|
|
|
for cluster, confItems := range clusterInfo {
|
|
|
|
for i, j := range confItems {
|
|
|
|
switch i {
|
|
|
|
case "subvolumeGroup":
|
|
|
|
for c := range conmap {
|
|
|
|
if conmap[c].ClusterID == cluster {
|
|
|
|
conmap[c].CephFS.SubvolumeGroup = j
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case "radosNamespace":
|
|
|
|
for c := range conmap {
|
|
|
|
if conmap[c].ClusterID == cluster {
|
|
|
|
conmap[c].RadosNamespace = j
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-09-03 09:34:29 +00:00
|
|
|
}
|
2021-10-01 04:06:06 +00:00
|
|
|
|
2020-09-03 09:34:29 +00:00
|
|
|
data, err := json.Marshal(conmap)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
cm.Data["config.json"] = string(data)
|
|
|
|
cm.Namespace = cephCSINamespace
|
|
|
|
// since a configmap is already created, update the existing configmap
|
|
|
|
_, err = c.CoreV1().ConfigMaps(cephCSINamespace).Update(context.TODO(), &cm, metav1.UpdateOptions{})
|
2021-05-11 09:28:56 +00:00
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("failed to update configmap: %w", err)
|
|
|
|
}
|
2021-07-22 05:45:17 +00:00
|
|
|
|
2021-05-11 09:28:56 +00:00
|
|
|
return nil
|
2020-09-03 09:34:29 +00:00
|
|
|
}
|