13
12
"github.com/juju/errors"
14
13
"github.com/juju/schema"
15
"github.com/juju/utils"
17
15
"github.com/juju/juju/environs/config"
21
SdcAccount = "SDC_ACCOUNT"
22
SdcKeyId = "SDC_KEY_ID"
24
MantaUser = "MANTA_USER"
25
MantaKeyId = "MANTA_KEY_ID"
26
MantaUrl = "MANTA_URL"
27
MantaPrivateKeyFile = "MANTA_PRIVATE_KEY_FILE"
19
SdcAccount = "SDC_ACCOUNT"
20
SdcKeyId = "SDC_KEY_ID"
29
23
sdcUser = "sdc-user"
30
24
sdcKeyId = "sdc-key-id"
32
mantaUser = "manta-user"
33
mantaKeyId = "manta-key-id"
34
mantaUrl = "manta-url"
35
26
privateKeyPath = "private-key-path"
36
27
algorithm = "algorithm"
37
controlDir = "control-dir"
38
28
privateKey = "private-key"
41
31
var environmentVariables = map[string]string{
46
mantaKeyId: MantaKeyId,
48
privateKeyPath: MantaPrivateKeyFile,
51
37
var configFields = schema.Fields{
52
sdcUser: schema.String(),
53
sdcKeyId: schema.String(),
54
sdcUrl: schema.String(),
55
mantaUser: schema.String(),
56
mantaKeyId: schema.String(),
57
mantaUrl: schema.String(),
58
privateKeyPath: schema.String(),
59
algorithm: schema.String(),
60
controlDir: schema.String(),
61
privateKey: schema.String(),
38
sdcUser: schema.String(),
39
sdcKeyId: schema.String(),
40
sdcUrl: schema.String(),
41
algorithm: schema.String(),
42
privateKey: schema.String(),
64
45
var configDefaults = schema.Defaults{
65
sdcUrl: "https://us-west-1.api.joyentcloud.com",
66
mantaUrl: "https://us-east.manta.joyent.com",
67
algorithm: "rsa-sha256",
68
privateKeyPath: schema.Omit,
70
sdcKeyId: schema.Omit,
71
mantaUser: schema.Omit,
72
mantaKeyId: schema.Omit,
73
privateKey: schema.Omit,
46
sdcUrl: "https://us-west-1.api.joyentcloud.com",
47
algorithm: "rsa-sha256",
49
sdcKeyId: schema.Omit,
50
privateKey: schema.Omit,
76
53
var requiredFields = []string{
84
58
// privatekey and privatekeypath are handled separately
87
61
var configSecretFields = []string{
95
67
var configImmutableFields = []string{
135
105
if localEnvVariable != "" {
136
106
envConfig.attrs[field] = localEnvVariable
138
if field != privateKeyPath {
139
return nil, fmt.Errorf("cannot get %s value from model variable %s", field, envVar)
108
return nil, fmt.Errorf("cannot get %s value from model variable %s", field, envVar)
145
if err := ensurePrivateKeyOrPath(envConfig); err != nil {
113
if err := ensurePrivateKey(envConfig); err != nil {
149
// Now that we've ensured private-key-path is properly set, we go back and set
150
// up the private key - this is used to sign requests.
151
if nilOrEmptyString(envConfig.attrs[privateKey]) {
152
keyFile, err := utils.NormalizePath(envConfig.attrs[privateKeyPath].(string))
156
priv, err := ioutil.ReadFile(keyFile)
160
envConfig.attrs[privateKey] = string(priv)
163
117
// Check for missing fields.
164
118
for _, field := range requiredFields {
165
119
if nilOrEmptyString(envConfig.attrs[field]) {
169
123
return envConfig, nil
172
// Ensure private-key-path is set.
173
func ensurePrivateKeyOrPath(envConfig *environConfig) error {
174
if !nilOrEmptyString(envConfig.attrs[privateKeyPath]) {
177
if path := os.Getenv(environmentVariables[privateKeyPath]); path != "" {
178
envConfig.attrs[privateKeyPath] = path
126
// Ensure private-key is set.
127
func ensurePrivateKey(envConfig *environConfig) error {
181
128
if !nilOrEmptyString(envConfig.attrs[privateKey]) {
185
131
return errors.New("no ssh private key specified in joyent configuration")
206
152
return ecfg.attrs[sdcKeyId].(string)
209
func (ecfg *environConfig) mantaUrl() string {
210
return ecfg.attrs[mantaUrl].(string)
213
func (ecfg *environConfig) mantaUser() string {
214
return ecfg.attrs[mantaUser].(string)
217
func (ecfg *environConfig) mantaKeyId() string {
218
return ecfg.attrs[mantaKeyId].(string)
221
155
func (ecfg *environConfig) privateKey() string {
222
156
if v, ok := ecfg.attrs[privateKey]; ok {
223
157
return v.(string)
229
163
return ecfg.attrs[algorithm].(string)
232
func (c *environConfig) controlDir() string {
233
return c.attrs[controlDir].(string)
236
func (c *environConfig) ControlDir() string {
237
return c.controlDir()
240
166
func (ecfg *environConfig) SdcUrl() string {
241
167
return ecfg.sdcUrl()