@@ -2,8 +2,10 @@ package provision
2
2
3
3
import (
4
4
"context"
5
+ "encoding/base64"
5
6
"fmt"
6
- "github.com/vultr/govultr"
7
+ "github.com/vultr/govultr/v2"
8
+ "golang.org/x/oauth2"
7
9
"strconv"
8
10
"strings"
9
11
)
@@ -16,24 +18,20 @@ type VultrProvisioner struct {
16
18
}
17
19
18
20
func NewVultrProvisioner (accessKey string ) (* VultrProvisioner , error ) {
21
+ config := & oauth2.Config {}
22
+ ts := config .TokenSource (context .Background (), & oauth2.Token {AccessToken : accessKey })
23
+ vultrClient := govultr .NewClient (oauth2 .NewClient (context .Background (), ts ))
19
24
return & VultrProvisioner {
20
- client : govultr . NewClient ( nil , accessKey ) ,
25
+ client : vultrClient ,
21
26
}, nil
22
27
}
23
28
24
29
func (v * VultrProvisioner ) Provision (host BasicHost ) (* ProvisionedHost , error ) {
25
-
26
- script , err := v .client .StartupScript .Create (context .Background (), host .Name , host .UserData , "boot" )
27
- if err != nil {
28
- return nil , err
29
- }
30
-
31
- region , err := v .lookupRegion (host .Region )
32
- if err != nil {
33
- return nil , err
34
- }
35
-
36
- plan , err := strconv .Atoi (host .Plan )
30
+ script , err := v .client .StartupScript .Create (context .Background (), & govultr.StartupScriptReq {
31
+ Script : base64 .StdEncoding .EncodeToString ([]byte (host .UserData )),
32
+ Name : host .Name ,
33
+ Type : "boot" ,
34
+ })
37
35
if err != nil {
38
36
return nil , err
39
37
}
@@ -43,39 +41,42 @@ func (v *VultrProvisioner) Provision(host BasicHost) (*ProvisionedHost, error) {
43
41
return nil , err
44
42
}
45
43
46
- opts := & govultr.ServerOptions {
47
- ScriptID : script .ScriptID ,
44
+ opts := & govultr.InstanceCreateReq {
45
+ ScriptID : script .ID ,
46
+ Region : host .Region ,
47
+ Plan : host .Plan ,
48
+ OsID : os ,
48
49
Hostname : host .Name ,
49
50
Label : host .Name ,
50
51
Tag : exiteNodeTag ,
51
52
}
52
53
53
- result , err := v .client .Server .Create (context .Background (), * region , plan , os , opts )
54
+ result , err := v .client .Instance .Create (context .Background (), opts )
54
55
if err != nil {
55
56
return nil , err
56
57
}
57
58
58
59
return & ProvisionedHost {
59
60
IP : result .MainIP ,
60
- ID : result .InstanceID ,
61
- Status : result .ServerState ,
61
+ ID : result .ID ,
62
+ Status : result .ServerStatus ,
62
63
}, nil
63
64
}
64
65
65
66
func (v * VultrProvisioner ) Status (id string ) (* ProvisionedHost , error ) {
66
- server , err := v .client .Server . GetServer (context .Background (), id )
67
+ server , err := v .client .Instance . Get (context .Background (), id )
67
68
if err != nil {
68
69
return nil , err
69
70
}
70
71
71
- status := server .ServerState
72
- if status == "ok" {
72
+ status := server .ServerStatus
73
+ if status == vultrHostRunning {
73
74
status = ActiveStatus
74
75
}
75
76
76
77
return & ProvisionedHost {
77
78
IP : server .MainIP ,
78
- ID : server .InstanceID ,
79
+ ID : server .ID ,
79
80
Status : status ,
80
81
}, nil
81
82
}
@@ -92,20 +93,20 @@ func (v *VultrProvisioner) Delete(request HostDeleteRequest) error {
92
93
}
93
94
}
94
95
95
- server , err := v .client .Server . GetServer (context .Background (), id )
96
+ server , err := v .client .Instance . Get (context .Background (), id )
96
97
if err != nil {
97
98
return err
98
99
}
99
100
100
- err = v .client .Server .Delete (context .Background (), id )
101
+ err = v .client .Instance .Delete (context .Background (), id )
101
102
if err != nil {
102
103
return err
103
104
}
104
105
105
- scripts , err := v .client .StartupScript .List (context .Background ())
106
+ scripts , _ , err := v .client .StartupScript .List (context .Background (), nil )
106
107
for _ , s := range scripts {
107
108
if s .Name == server .Label {
108
- _ = v .client .StartupScript .Delete (context .Background (), s .ScriptID )
109
+ _ = v .client .StartupScript .Delete (context .Background (), s .ID )
109
110
break
110
111
}
111
112
}
@@ -115,27 +116,30 @@ func (v *VultrProvisioner) Delete(request HostDeleteRequest) error {
115
116
116
117
// List returns a list of exit nodes
117
118
func (v * VultrProvisioner ) List (filter ListFilter ) ([]* ProvisionedHost , error ) {
118
- servers , err := v .client .Server . ListByTag (context .Background (), filter . Filter )
119
+ servers , _ , err := v .client .Instance . List (context .Background (), nil )
119
120
if err != nil {
120
121
return nil , err
121
122
}
122
123
123
124
var inlets []* ProvisionedHost
124
125
for _ , server := range servers {
125
- host := & ProvisionedHost {
126
- IP : server .MainIP ,
127
- ID : server .InstanceID ,
128
- Status : vultrToInletsStatus (server .Status ),
126
+ if server .Tag == filter .Filter {
127
+ host := & ProvisionedHost {
128
+ IP : server .MainIP ,
129
+ ID : server .ID ,
130
+ Status : vultrToInletsStatus (server .Status ),
131
+ }
132
+ inlets = append (inlets , host )
129
133
}
130
- inlets = append ( inlets , host )
134
+
131
135
}
132
136
133
137
return inlets , nil
134
138
}
135
139
136
140
func (v * VultrProvisioner ) lookupID (request HostDeleteRequest ) (string , error ) {
137
141
138
- inlets , err := v .List (ListFilter {Filter : exiteNodeTag , ProjectID : request . ProjectID })
142
+ inlets , err := v .List (ListFilter {Filter : exiteNodeTag })
139
143
if err != nil {
140
144
return "" , err
141
145
}
@@ -153,14 +157,14 @@ func (v *VultrProvisioner) lookupRegion(id string) (*int, error) {
153
157
return & result , nil
154
158
}
155
159
156
- regions , err := v .client .Region .List (context .Background ())
160
+ regions , _ , err := v .client .Region .List (context .Background (), nil )
157
161
if err != nil {
158
162
return nil , err
159
163
}
160
164
161
165
for _ , region := range regions {
162
- if strings .EqualFold (id , region .RegionCode ) || strings . EqualFold ( id , region . Name ) {
163
- regionId , _ := strconv .Atoi (region .RegionID )
166
+ if strings .EqualFold (id , region .ID ) {
167
+ regionId , _ := strconv .Atoi (region .ID )
164
168
return & regionId , nil
165
169
}
166
170
}
0 commit comments