mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-22 14:20:19 +00:00
util: make util.ClusterInfo usable outside util package
functions like getClusterInfo() returns struct instead of a set of strings. Fix: #998 Signed-off-by: Yug Gupta <ygupta@redhat.com>
This commit is contained in:
parent
63c458bd63
commit
2cdf5c3b9f
13
e2e/utils.go
13
e2e/utils.go
@ -12,6 +12,8 @@ import (
|
|||||||
|
|
||||||
// _ "github.com/kubernetes-csi/external-snapshotter/pkg/apis/volumesnapshot/v1alpha1" // nolint
|
// _ "github.com/kubernetes-csi/external-snapshotter/pkg/apis/volumesnapshot/v1alpha1" // nolint
|
||||||
// _ "github.com/kubernetes-csi/external-snapshotter/pkg/client/clientset/versioned/typed/volumesnapshot/v1alpha1" // nolint
|
// _ "github.com/kubernetes-csi/external-snapshotter/pkg/client/clientset/versioned/typed/volumesnapshot/v1alpha1" // nolint
|
||||||
|
"github.com/ceph/ceph-csi/internal/util"
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo" // nolint
|
. "github.com/onsi/ginkgo" // nolint
|
||||||
. "github.com/onsi/gomega" // nolint
|
. "github.com/onsi/gomega" // nolint
|
||||||
apps "k8s.io/api/apps/v1"
|
apps "k8s.io/api/apps/v1"
|
||||||
@ -365,15 +367,6 @@ func deleteConfigMap(pluginPath string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// matches the definition in internal/util/csiconfig.go
|
|
||||||
type clusterInfo struct {
|
|
||||||
ClusterID string `json:"clusterID"`
|
|
||||||
Monitors []string `json:"monitors"`
|
|
||||||
CephFS struct {
|
|
||||||
SubvolumeGroup string `json:"subvolumeGroup"`
|
|
||||||
} `json:"cephFS"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createConfigMap(pluginPath string, c kubernetes.Interface, f *framework.Framework) {
|
func createConfigMap(pluginPath string, c kubernetes.Interface, f *framework.Framework) {
|
||||||
path := pluginPath + configMap
|
path := pluginPath + configMap
|
||||||
cm := v1.ConfigMap{}
|
cm := v1.ConfigMap{}
|
||||||
@ -388,7 +381,7 @@ func createConfigMap(pluginPath string, c kubernetes.Interface, f *framework.Fra
|
|||||||
fsID = strings.Trim(fsID, "\n")
|
fsID = strings.Trim(fsID, "\n")
|
||||||
// get mon list
|
// get mon list
|
||||||
mons := getMons(rookNamespace, c)
|
mons := getMons(rookNamespace, c)
|
||||||
conmap := []clusterInfo{{
|
conmap := []util.ClusterInfo{{
|
||||||
ClusterID: fsID,
|
ClusterID: fsID,
|
||||||
Monitors: mons,
|
Monitors: mons,
|
||||||
}}
|
}}
|
||||||
|
@ -20,6 +20,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/container-storage-interface/spec/lib/go/csi"
|
"github.com/container-storage-interface/spec/lib/go/csi"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
@ -110,30 +111,34 @@ func extractMounter(dest *string, options map[string]string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getClusterInformation(options map[string]string) (string, string, string, error) {
|
func getClusterInformation(options map[string]string) (*util.ClusterInfo, error) {
|
||||||
clusterID, ok := options["clusterID"]
|
clusterID, ok := options["clusterID"]
|
||||||
if !ok {
|
if !ok {
|
||||||
err := fmt.Errorf("clusterID must be set")
|
err := fmt.Errorf("clusterID must be set")
|
||||||
return "", "", "", err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := validateNonEmptyField(clusterID, "clusterID"); err != nil {
|
if err := validateNonEmptyField(clusterID, "clusterID"); err != nil {
|
||||||
return "", "", "", err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
monitors, err := util.Mons(csiConfigFile, clusterID)
|
monitors, err := util.Mons(csiConfigFile, clusterID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = errors.Wrapf(err, "failed to fetch monitor list using clusterID (%s)", clusterID)
|
err = errors.Wrapf(err, "failed to fetch monitor list using clusterID (%s)", clusterID)
|
||||||
return "", "", "", err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
subvolumeGroup, err := util.CephFSSubvolumeGroup(csiConfigFile, clusterID)
|
subvolumeGroup, err := util.CephFSSubvolumeGroup(csiConfigFile, clusterID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = errors.Wrapf(err, "failed to fetch subvolumegroup using clusterID (%s)", clusterID)
|
err = errors.Wrapf(err, "failed to fetch subvolumegroup using clusterID (%s)", clusterID)
|
||||||
return "", "", "", err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
clusterData := &util.ClusterInfo{
|
||||||
return clusterID, monitors, subvolumeGroup, err
|
ClusterID: clusterID,
|
||||||
|
Monitors: strings.Split(monitors, ","),
|
||||||
|
}
|
||||||
|
clusterData.CephFS.SubvolumeGroup = subvolumeGroup
|
||||||
|
return clusterData, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// newVolumeOptions generates a new instance of volumeOptions from the provided
|
// newVolumeOptions generates a new instance of volumeOptions from the provided
|
||||||
@ -146,12 +151,16 @@ func newVolumeOptions(ctx context.Context, requestName string, req *csi.CreateVo
|
|||||||
)
|
)
|
||||||
|
|
||||||
volOptions := req.GetParameters()
|
volOptions := req.GetParameters()
|
||||||
|
clusterData, err := getClusterInformation(volOptions)
|
||||||
|
|
||||||
opts.ClusterID, opts.Monitors, opts.SubvolumeGroup, err = getClusterInformation(volOptions)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
opts.ClusterID = clusterData.ClusterID
|
||||||
|
opts.Monitors = strings.Join(clusterData.Monitors, ",")
|
||||||
|
opts.SubvolumeGroup = clusterData.CephFS.SubvolumeGroup
|
||||||
|
|
||||||
if err = extractOptionalOption(&opts.Pool, "pool", volOptions); err != nil {
|
if err = extractOptionalOption(&opts.Pool, "pool", volOptions); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -373,11 +382,16 @@ func newVolumeOptionsFromStaticVolume(volID string, options map[string]string) (
|
|||||||
// store NOT of static boolean
|
// store NOT of static boolean
|
||||||
opts.ProvisionVolume = !staticVol
|
opts.ProvisionVolume = !staticVol
|
||||||
|
|
||||||
opts.ClusterID, opts.Monitors, opts.SubvolumeGroup, err = getClusterInformation(options)
|
clusterData, err := getClusterInformation(options)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
opts.ClusterID = clusterData.ClusterID
|
||||||
|
opts.Monitors = strings.Join(clusterData.Monitors, ",")
|
||||||
|
opts.SubvolumeGroup = clusterData.CephFS.SubvolumeGroup
|
||||||
|
|
||||||
if err = extractOption(&opts.RootPath, "rootPath", options); err != nil {
|
if err = extractOption(&opts.RootPath, "rootPath", options); err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
@ -29,8 +29,8 @@ const (
|
|||||||
defaultCsiSubvolumeGroup = "csi"
|
defaultCsiSubvolumeGroup = "csi"
|
||||||
)
|
)
|
||||||
|
|
||||||
// clusterInfo strongly typed JSON spec for the above JSON structure
|
// ClusterInfo strongly typed JSON spec for the below JSON structure
|
||||||
type clusterInfo struct {
|
type ClusterInfo struct {
|
||||||
// ClusterID is used for unique identification
|
// ClusterID is used for unique identification
|
||||||
ClusterID string `json:"clusterID"`
|
ClusterID string `json:"clusterID"`
|
||||||
// Monitors is monitor list for corresponding cluster ID
|
// Monitors is monitor list for corresponding cluster ID
|
||||||
@ -58,29 +58,29 @@ type clusterInfo struct {
|
|||||||
// },
|
// },
|
||||||
// ...
|
// ...
|
||||||
// ]
|
// ]
|
||||||
func readClusterInfo(pathToConfig, clusterID string) (clusterInfo, error) {
|
func readClusterInfo(pathToConfig, clusterID string) (*ClusterInfo, error) {
|
||||||
var config []clusterInfo
|
var config []ClusterInfo
|
||||||
|
|
||||||
// #nosec
|
// #nosec
|
||||||
content, err := ioutil.ReadFile(pathToConfig)
|
content, err := ioutil.ReadFile(pathToConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("error fetching configuration for cluster ID (%s). (%s)", clusterID, err)
|
err = fmt.Errorf("error fetching configuration for cluster ID (%s). (%s)", clusterID, err)
|
||||||
return clusterInfo{}, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = json.Unmarshal(content, &config)
|
err = json.Unmarshal(content, &config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return clusterInfo{}, fmt.Errorf("unmarshal failed: %v. raw buffer response: %s",
|
return nil, fmt.Errorf("unmarshal failed: %v. raw buffer response: %s",
|
||||||
err, string(content))
|
err, string(content))
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, cluster := range config {
|
for _, cluster := range config {
|
||||||
if cluster.ClusterID == clusterID {
|
if cluster.ClusterID == clusterID {
|
||||||
return cluster, nil
|
return &cluster, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return clusterInfo{}, fmt.Errorf("missing configuration for cluster ID (%s)", clusterID)
|
return nil, fmt.Errorf("missing configuration for cluster ID (%s)", clusterID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mons returns a comma separated MON list from the csi config for the given clusterID
|
// Mons returns a comma separated MON list from the csi config for the given clusterID
|
||||||
|
Loading…
Reference in New Issue
Block a user