Skip to content

Commit 3b3b125

Browse files
committed
derive zone as well in private parent derive uniq_id helper
1 parent 19027ab commit 3b3b125

File tree

7 files changed

+59
-51
lines changed

7 files changed

+59
-51
lines changed

cmd/cloudPrivateParentDelete.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ as well as how many resources each Cloud Server gets.`,
4747

4848
// if passed a private-parent flag, derive its uniq_id
4949
var privateParentUniqId string
50-
privateParentUniqId, err := lwCliInst.DerivePrivateParentUniqId(nameFlag)
50+
privateParentUniqId, _, err := lwCliInst.DerivePrivateParentUniqId(nameFlag)
5151
if err != nil {
5252
lwCliInst.Die(err)
5353
}

cmd/cloudPrivateParentDetails.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ as well as how many resources each Cloud Server gets.`,
3737

3838
// if passed a private-parent flag, derive its uniq_id
3939
var privateParentUniqId string
40-
privateParentUniqId, err := lwCliInst.DerivePrivateParentUniqId(nameFlag)
40+
privateParentUniqId, _, err := lwCliInst.DerivePrivateParentUniqId(nameFlag)
4141
if err != nil {
4242
lwCliInst.Die(err)
4343
}

cmd/cloudServerClone.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,17 @@ Server is not on a Private Parent.`,
7373

7474
var privateParentUniqId string
7575
if privateParentFlag != "" {
76-
var err error
77-
privateParentUniqId, err = lwCliInst.DerivePrivateParentUniqId(privateParentFlag)
76+
var (
77+
err error
78+
zone int64
79+
)
80+
privateParentUniqId, zone, err = lwCliInst.DerivePrivateParentUniqId(privateParentFlag)
7881
if err != nil {
7982
lwCliInst.Die(err)
8083
}
84+
if zoneFlag == -1 {
85+
zoneFlag = zone
86+
}
8187
}
8288

8389
// buildout api bleed/server/clone parameters

cmd/cloudServerCreate.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ For a list of backups, see 'cloud backups list'
6868
params.BackupDays, _ = cmd.Flags().GetInt("backup-days")
6969
params.BackupQuota, _ = cmd.Flags().GetInt("backup-quota")
7070
params.Bandwidth, _ = cmd.Flags().GetString("bandwidth")
71-
params.Zone, _ = cmd.Flags().GetInt("zone")
71+
params.Zone, _ = cmd.Flags().GetInt64("zone")
7272
params.WinAv, _ = cmd.Flags().GetString("winav")
7373
params.MsSql, _ = cmd.Flags().GetString("ms-sql")
7474
params.PrivateParent, _ = cmd.Flags().GetString("private-parent")
@@ -114,7 +114,7 @@ func init() {
114114
cloudServerCreateCmd.Flags().Int("backup-days", -1, "Enable daily backup plan. This is the amount of days to keep a backup")
115115
cloudServerCreateCmd.Flags().Int("backup-quota", -1, "Enable quota backup plan. This is the total amount of GB to keep.")
116116
cloudServerCreateCmd.Flags().String("bandwidth", "SS.10000", "bandwidth package to use")
117-
cloudServerCreateCmd.Flags().Int("zone", 0, "zone (id) to create new Cloud Server in (see 'cloud server options --zones')")
117+
cloudServerCreateCmd.Flags().Int64("zone", 0, "zone (id) to create new Cloud Server in (see 'cloud server options --zones')")
118118
cloudServerCreateCmd.Flags().String("password", "", "root or administrator password to set")
119119

120120
cloudServerCreateCmd.Flags().Int("backup-id", -1, "id of cloud backup to create from (see 'cloud backup list')")
@@ -133,8 +133,4 @@ func init() {
133133
// windows specific
134134
cloudServerCreateCmd.Flags().String("winav", "", "Use only with Windows Servers. Typically (None or NOD32) for value when set")
135135
cloudServerCreateCmd.Flags().String("ms-sql", "", "Microsoft SQL Server")
136-
137-
if err := cloudServerCreateCmd.MarkFlagRequired("zone"); err != nil {
138-
lwCliInst.Die(err)
139-
}
140136
}

instance/cloudServerCreate.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ type CloudServerCreateParams struct {
3737
BackupDays int `yaml:"backup-days"` // daily backup plan; how many days to keep a backup
3838
BackupQuota int `yaml:"backup-quota"` // backup quota plan; how many gb of backups to keep
3939
Bandwidth string `yaml:"bandwidth"`
40-
Zone int `yaml:"zone"`
40+
Zone int64 `yaml:"zone"`
4141
WinAv string `yaml:"winav"` // windows
4242
MsSql string `yaml:"ms-sql"` // windows
4343
PrivateParent string `yaml:"private-parent"`
@@ -74,14 +74,18 @@ func (s *CloudServerCreateParams) UnmarshalYAML(unmarshal func(interface{}) erro
7474
func (ci *Client) CloudServerCreate(params *CloudServerCreateParams) (string, error) {
7575
var err error
7676

77-
// if passed a private-parent flag, derive its uniq_id
77+
// if passed a private-parent flag, derive its uniq_id and zone
7878
if params.PrivateParent != "" {
79-
params.PrivateParent, err = ci.DerivePrivateParentUniqId(params.PrivateParent)
79+
params.PrivateParent, params.Zone, err = ci.DerivePrivateParentUniqId(params.PrivateParent)
8080
if err != nil {
8181
return "", err
8282
}
8383
}
8484

85+
if params.Zone <= 0 {
86+
return "", fmt.Errorf("--zone must be given")
87+
}
88+
8589
// default password
8690
if params.Password == "" {
8791
params.Password = utils.RandomString(25)
@@ -132,7 +136,7 @@ func (ci *Client) CloudServerCreate(params *CloudServerCreateParams) (string, er
132136
}
133137

134138
validateFields := map[interface{}]interface{}{
135-
params.Zone: map[string]string{"type": "PositiveInt", "optional": "true"},
139+
params.Zone: "PositiveInt64",
136140
params.Hostname: "NonEmptyString",
137141
params.Type: "NonEmptyString",
138142
params.Ips: "PositiveInt",

instance/cloudServerResize.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ func (self *Client) CloudServerResize(params *CloudServerResizeParams) (result s
136136
}
137137

138138
var privateParentUniqId string
139-
privateParentUniqId, err = self.DerivePrivateParentUniqId(params.PrivateParent)
139+
privateParentUniqId, _, err = self.DerivePrivateParentUniqId(params.PrivateParent)
140140
if err != nil {
141141
return
142142
}

instance/private_parents.go

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"strings"
2121

2222
"github.com/liquidweb/liquidweb-cli/types/api"
23+
"github.com/liquidweb/liquidweb-cli/validate"
2324
)
2425

2526
// it helped package scope and getting access to the global client variable to
@@ -28,19 +29,18 @@ import (
2829
// or maybe the "instance" package name just makes it feel wrong...
2930
// feedback is welcome
3031

31-
func (ci *Client) DerivePrivateParentUniqId(name string) (string, error) {
32-
var (
33-
privateParentUniqId string
34-
privateParentDetails apiTypes.CloudPrivateParentDetails
35-
privateParentDetailsErr error
36-
)
37-
32+
func (ci *Client) DerivePrivateParentUniqId(name string) (uniqId string, zone int64, privateParentDetailsErr error) {
3833
// if name looks like a uniq_id, try it as a uniq_id first.
39-
if len(name) == 6 && strings.ToUpper(name) == name {
34+
validateFields := map[interface{}]interface{}{
35+
strings.ToUpper(name): "UniqId",
36+
}
37+
if err := validate.Validate(validateFields); err == nil {
38+
var privateParentDetails apiTypes.CloudPrivateParentDetails
4039
if err := ci.CallLwApiInto("bleed/storm/private/parent/details",
4140
map[string]interface{}{"uniq_id": name},
4241
&privateParentDetails); err == nil {
43-
privateParentUniqId = name
42+
uniqId = name
43+
zone = privateParentDetails.Zone.Id
4444
} else {
4545
privateParentDetailsErr = fmt.Errorf(
4646
"failed fetching parent details treating given --private-parent arg as a uniq-id [%s]: %s",
@@ -49,44 +49,46 @@ func (ci *Client) DerivePrivateParentUniqId(name string) (string, error) {
4949
}
5050

5151
// if we havent found the pp details yet, try assuming name is the name of the pp
52-
if privateParentUniqId == "" {
52+
if uniqId == "" {
5353
methodArgs := AllPaginatedResultsArgs{
5454
Method: "bleed/storm/private/parent/list",
5555
ResultsPerPage: 100,
5656
}
5757
results, err := ci.AllPaginatedResults(&methodArgs)
58-
if err != nil {
59-
ci.Die(err)
60-
}
61-
62-
for _, item := range results.Items {
63-
var privateParentDetails apiTypes.CloudPrivateParentDetails
64-
if err := CastFieldTypes(item, &privateParentDetails); err != nil {
65-
ci.Die(err)
66-
}
58+
if err == nil {
59+
for _, item := range results.Items {
60+
var privateParentDetails apiTypes.CloudPrivateParentDetails
61+
if err := CastFieldTypes(item, &privateParentDetails); err != nil {
62+
privateParentDetailsErr = fmt.Errorf("%s %w", privateParentDetailsErr, err)
63+
break
64+
}
6765

68-
if privateParentDetails.Domain == name {
69-
// found it get details
70-
err := ci.CallLwApiInto("bleed/storm/private/parent/details",
71-
map[string]interface{}{
72-
"uniq_id": privateParentDetails.UniqId,
73-
},
74-
&privateParentDetails)
75-
if err != nil {
76-
privateParentDetailsErr = fmt.Errorf(
77-
"failed fetching private parent details for discovered uniq-id [%s] error: %s %w",
78-
privateParentDetails.UniqId, err, privateParentDetailsErr)
79-
return "", privateParentDetailsErr
66+
if privateParentDetails.Domain == name {
67+
// found it get details
68+
err := ci.CallLwApiInto("bleed/storm/private/parent/details",
69+
map[string]interface{}{
70+
"uniq_id": privateParentDetails.UniqId,
71+
},
72+
&privateParentDetails)
73+
if err != nil {
74+
privateParentDetailsErr = fmt.Errorf(
75+
"failed fetching private parent details for discovered uniq-id [%s] error: %w %s",
76+
privateParentDetails.UniqId, err, privateParentDetailsErr)
77+
break
78+
}
79+
uniqId = privateParentDetails.UniqId
80+
zone = privateParentDetails.Zone.Id
81+
break // found the uniq_id so break
8082
}
81-
privateParentUniqId = privateParentDetails.UniqId
82-
break // found the uniq_id so break
8383
}
84+
} else {
85+
privateParentDetailsErr = fmt.Errorf("%s %w", privateParentDetailsErr, err)
8486
}
8587
}
8688

87-
if privateParentUniqId == "" {
88-
return "", fmt.Errorf("failed deriving uniq-id of private parent from [%s]: %s", name, privateParentDetailsErr)
89+
if uniqId == "" || zone == 0 {
90+
privateParentDetailsErr = fmt.Errorf("failed deriving uniq-id and/or zone of private parent from [%s]: %w", name, privateParentDetailsErr)
8991
}
9092

91-
return privateParentUniqId, nil
93+
return
9294
}

0 commit comments

Comments
 (0)