packer-cn/vendor/github.com/scaleway/scaleway-sdk-go/scw/config_legacy.go

93 lines
2.3 KiB
Go

package scw
import (
"encoding/json"
"io/ioutil"
"os"
"path/filepath"
"github.com/scaleway/scaleway-sdk-go/internal/errors"
"github.com/scaleway/scaleway-sdk-go/logger"
"gopkg.in/yaml.v2"
)
// configV1 is a Scaleway CLI configuration file
type configV1 struct {
// Organization is the identifier of the Scaleway organization
Organization string `json:"organization"`
// Token is the authentication token for the Scaleway organization
Token string `json:"token"`
// Version is the actual version of scw CLI
Version string `json:"version"`
}
func unmarshalConfV1(content []byte) (*configV1, error) {
var config configV1
err := json.Unmarshal(content, &config)
if err != nil {
return nil, err
}
return &config, err
}
func (v1 *configV1) toV2() *Config {
return &Config{
Profile: Profile{
DefaultOrganizationID: &v1.Organization,
DefaultProjectID: &v1.Organization, // v1 config is not aware of project, so default project is set to organization ID
SecretKey: &v1.Token,
// ignore v1 version
},
}
}
// MigrateLegacyConfig will migrate the legacy config to the V2 when none exist yet.
// Returns a boolean set to true when the migration happened.
// TODO: get accesskey from account?
func MigrateLegacyConfig() (bool, error) {
// STEP 1: try to load config file V2
v2Path, v2PathOk := getConfigV2FilePath()
if !v2PathOk || fileExist(v2Path) {
return false, nil
}
// STEP 2: try to load config file V1
v1Path, v1PathOk := getConfigV1FilePath()
if !v1PathOk {
return false, nil
}
file, err := ioutil.ReadFile(v1Path)
if err != nil {
return false, nil
}
confV1, err := unmarshalConfV1(file)
if err != nil {
return false, errors.Wrap(err, "content of config file %s is invalid json", v1Path)
}
// STEP 3: create dir
err = os.MkdirAll(filepath.Dir(v2Path), 0700)
if err != nil {
return false, errors.Wrap(err, "mkdir did not work on %s", filepath.Dir(v2Path))
}
// STEP 4: marshal yaml config
newConfig := confV1.toV2()
file, err = yaml.Marshal(newConfig)
if err != nil {
return false, err
}
// STEP 5: save config
err = ioutil.WriteFile(v2Path, file, defaultConfigPermission)
if err != nil {
return false, errors.Wrap(err, "cannot write file %s", v2Path)
}
// STEP 6: log success
logger.Warningf("migrated existing config to %s", v2Path)
return true, nil
}