mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-09 16:00:22 +00:00
a4a2dc93c1
createCustomConfigmap helps to create a custom cluster entry in the configmap, however this was coupled with subvolumegroup filling in the cluster configuration. This commit helps to make it more general and the subvolumegroup filling is controlled now with a flag Signed-off-by: Humble Chirammal <hchiramm@redhat.com>
144 lines
3.4 KiB
Go
144 lines
3.4 KiB
Go
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
|
|
|
|
return retryKubectlFile(cephCSINamespace, kubectlDelete, path, deployTimeout)
|
|
}
|
|
|
|
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 {
|
|
return fmt.Errorf("failed to update configmap: %w", updateErr)
|
|
}
|
|
}
|
|
if apierrs.IsNotFound(err) {
|
|
_, err = c.CoreV1().ConfigMaps(cephCSINamespace).Create(context.TODO(), &cm, metav1.CreateOptions{})
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
// createCustomConfigMap provides multiple clusters information.
|
|
func createCustomConfigMap(
|
|
c kubernetes.Interface,
|
|
pluginPath string,
|
|
clusterInfo map[string]map[string]string) error {
|
|
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
|
|
for key := range clusterInfo {
|
|
clusterID = append(clusterID, key)
|
|
}
|
|
conmap := []util.ClusterInfo{
|
|
{
|
|
ClusterID: clusterID[0],
|
|
Monitors: mons,
|
|
},
|
|
{
|
|
ClusterID: clusterID[1],
|
|
Monitors: mons,
|
|
},
|
|
}
|
|
|
|
// 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
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
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{})
|
|
if err != nil {
|
|
return fmt.Errorf("failed to update configmap: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|