From 3181afee142d74adac596ee27fb566980bb9b533 Mon Sep 17 00:00:00 2001 From: Cian Hatton Date: Tue, 2 Aug 2022 01:02:36 +0100 Subject: [PATCH] display details of started stack --- scripts/portainer/client/client.go | 14 +++++++++++--- scripts/portainer/main.go | 28 ++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/scripts/portainer/client/client.go b/scripts/portainer/client/client.go index e50228b..26cc8c2 100644 --- a/scripts/portainer/client/client.go +++ b/scripts/portainer/client/client.go @@ -79,11 +79,19 @@ func (c *PortainerClient) GetStackByName(name string) (*Stack, error) { return nil, nil } -func (c *PortainerClient) StartStack(stackId int) error { +type ResponseMessage struct { + Message string `json:"message"` + Details string `json:"details"` +} + +func (c *PortainerClient) StartStack(stackId int) (ResponseMessage, error) { url := fmt.Sprintf("api/stacks/%d/start", stackId) b, err := c.post(url, nil) - fmt.Println(string(b)) - return err + msg := ResponseMessage{} + if err := json.Unmarshal(b, &msg); err != nil { + return msg, err + } + return msg, err } func (c *PortainerClient) post(path string, payload interface{}) ([]byte, error) { jsonBytes, err := json.Marshal(payload) diff --git a/scripts/portainer/main.go b/scripts/portainer/main.go index 5df689b..a81a38e 100644 --- a/scripts/portainer/main.go +++ b/scripts/portainer/main.go @@ -32,6 +32,11 @@ func loadCreds() client.Credentials { return creds } +type StackResult struct { + Name string `json:"name"` + Id int `json:"id"` +} + func main() { args := os.Args if len(args) != 2 { @@ -49,9 +54,28 @@ func main() { if err != nil { log.Fatal(err) } + if s == nil { + log.Fatalf("no stack found with name: %s\n", stackName) + } + + msg, err := c.StartStack(s.ID) + if err != nil { + log.Fatal(err) + } + + if msg.Details != "" && !strings.Contains(msg.Details, "is already running") { + log.Fatalf("problem starting stack: %s", msg.Details) + } - err = c.StartStack(s.ID) - if err != nil && strings.Contains(err.Error(), "is already running") { + sr := StackResult{ + Name: stackName, + Id: s.ID, + } + + bytes, err := json.Marshal(sr) + if err != nil { log.Fatal(err) } + // output details of the stack that was started (or is already started) + fmt.Println(string(bytes)) }