Skip to content

Commit 2424a54

Browse files
authored
add 'delete' command to tfuser (#474)
* tfuser: add command to delete reservation * tfuser: add flag to live command to also list expired reservations
1 parent f055296 commit 2424a54

File tree

5 files changed

+73
-9
lines changed

5 files changed

+73
-9
lines changed

pkg/gedis/commands_provision.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,18 @@ func (g *Gedis) Feedback(id string, r *provision.Result) error {
172172
}
173173

174174
// Deleted implements provision.Feedbacker
175-
func (g *Gedis) Deleted(id string) error { return nil }
175+
func (g *Gedis) Deleted(id string) error {
176+
_, err := g.Send("tfgrid.workloads.workload_manager", "workload_deleted", Args{})
177+
return err
178+
}
179+
180+
// Delete marks a reservation to be deleted
181+
func (g *Gedis) Delete(id string) error {
182+
_, err := g.Send("tfgrid.workloads.workload_manager", "sign_delete", Args{
183+
"reservation_id": id,
184+
})
185+
return err
186+
}
176187

177188
func reservationFromSchema(w types.TfgridReservationWorkload1) (*provision.Reservation, error) {
178189
reservation := &provision.Reservation{

pkg/provision/remote_store.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,3 +166,25 @@ func (s *HTTPStore) Deleted(id string) error {
166166
}
167167
return nil
168168
}
169+
170+
// Delete marks a reservation as to be deleted
171+
func (s *HTTPStore) Delete(id string) error {
172+
url := fmt.Sprintf("%s/reservations/%s", s.baseURL, id)
173+
174+
req, err := http.NewRequest("DELETE", url, nil)
175+
if err != nil {
176+
return err
177+
}
178+
179+
resp, err := http.DefaultClient.Do(req)
180+
if err != nil {
181+
return err
182+
}
183+
184+
defer resp.Body.Close()
185+
186+
if resp.StatusCode != http.StatusOK {
187+
return fmt.Errorf("wrong response status code %s", resp.Status)
188+
}
189+
return nil
190+
}

tools/tfuser/cmds_live.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ func cmdsLive(c *cli.Context) error {
1919
seedPath = c.String("seed")
2020
start = c.Int("start")
2121
end = c.Int("end")
22+
expired = c.Bool("expired")
2223
)
2324

2425
keypair, err := identity.LoadKeyPair(seedPath)
@@ -30,6 +31,7 @@ func cmdsLive(c *cli.Context) error {
3031
poolSize: 10,
3132
start: start,
3233
end: end,
34+
expired: expired,
3335
}
3436

3537
cResults := s.Scrap(keypair.Identity())
@@ -96,11 +98,13 @@ type scraper struct {
9698
poolSize int
9799
start int
98100
end int
101+
expired bool
99102
wg sync.WaitGroup
100103
}
101104
type job struct {
102-
id int
103-
user string
105+
id int
106+
user string
107+
expired bool
104108
}
105109
type res struct {
106110
provision.Reservation
@@ -125,8 +129,9 @@ func (s *scraper) Scrap(user string) chan res {
125129
}()
126130
for i := s.start; i < s.end; i++ {
127131
cIn <- job{
128-
id: i,
129-
user: user,
132+
id: i,
133+
user: user,
134+
expired: s.expired,
130135
}
131136
}
132137
}()
@@ -150,7 +155,7 @@ func worker(wg *sync.WaitGroup, cIn <-chan job, cOut chan<- res) {
150155
continue
151156
}
152157

153-
if res.Expired() == true {
158+
if !job.expired && res.Expired() == true {
154159
continue
155160
}
156161
if res.User != job.user {

tools/tfuser/cmds_provision.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,13 @@ func embed(schema interface{}, t provision.ReservationType) (*provision.Reservat
146146

147147
return r, nil
148148
}
149+
150+
func cmdsDeleteReservation(c *cli.Context) error {
151+
id := c.String("id")
152+
153+
if err := client.Delete(id); err != nil {
154+
return errors.Wrapf(err, "failed to mark reservation %s to be deleted", id)
155+
}
156+
fmt.Printf("Reservation %v marked as to be deleted\n", id)
157+
return nil
158+
}

tools/tfuser/main.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,17 @@ func main() {
307307
},
308308
Action: cmdsProvision,
309309
},
310+
{
311+
Name: "delete",
312+
Usage: "Mark a workload as to be deleted",
313+
Flags: []cli.Flag{
314+
cli.StringFlag{
315+
Name: "id",
316+
Usage: "workload id",
317+
},
318+
},
319+
Action: cmdsDeleteReservation,
320+
},
310321
{
311322
Name: "live",
312323
Usage: "show you all the reservations that are still alive",
@@ -325,6 +336,10 @@ func main() {
325336
Usage: "end scrapping at that reservation ID",
326337
Value: 500,
327338
},
339+
cli.BoolFlag{
340+
Name: "expired",
341+
Usage: "include expired reservations",
342+
},
328343
},
329344
Action: cmdsLive,
330345
},
@@ -336,18 +351,19 @@ func main() {
336351
}
337352
}
338353

339-
type reserver interface {
354+
type reserveDeleter interface {
340355
Reserve(r *provision.Reservation) (string, error)
356+
Delete(id string) error
341357
}
342358
type clientIface interface {
343359
network.TNoDB
344-
reserver
360+
reserveDeleter
345361
}
346362

347363
func getClient(addr string) (clientIface, error) {
348364
type client struct {
349365
network.TNoDB
350-
reserver
366+
reserveDeleter
351367
}
352368

353369
u, err := url.Parse(addr)

0 commit comments

Comments
 (0)