diff --git a/cli/server/new.go b/cli/server/new.go index 384ca645..030ce7b3 100644 --- a/cli/server/new.go +++ b/cli/server/new.go @@ -1,17 +1,13 @@ package server import ( - "bytes" "context" - "encoding/json" "errors" "fmt" - "io/ioutil" - "net/http" - "time" "coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/libcapsul" "github.com/hetznercloud/hcloud-go/hcloud" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" @@ -182,8 +178,8 @@ environment variable or otherwise passing the "--env/-e" flag. }, }, Action: func(c *cli.Context) error { - name := c.Args().First() - if name == "" { + capsulName := c.Args().First() + if capsulName == "" { internal.ShowSubcommandHelpAndError(c, errors.New("no name provided")) } @@ -191,57 +187,17 @@ environment variable or otherwise passing the "--env/-e" flag. logrus.Fatal("Capsul API token is missing") } - // yep, the response time is quite slow, something to fix on the Capsul side - client := &http.Client{Timeout: 20 * time.Second} - capsulCreateURL := fmt.Sprintf("https://%s/api/capsul/create", capsulInstance) - logrus.Debugf("using '%s' as capsul create url", capsulCreateURL) - values := map[string]string{ - "name": name, - "size": capsulType, - "os": capsulImage, - "ssh_key_0": capsulSSHKey, - } - payload, err := json.Marshal(values) + capsulClient := libcapsul.New(capsulCreateURL, capsulAPIToken) + resp, err := capsulClient.Create(capsulName, capsulType, capsulImage, capsulSSHKey) if err != nil { logrus.Fatal(err) } - req, err := http.NewRequest("POST", capsulCreateURL, bytes.NewBuffer(payload)) - if err != nil { - logrus.Fatal(err) - } - - req.Header = http.Header{ - "Content-Type": []string{"application/json"}, - "Authorization": []string{capsulAPIToken}, - } - - res, err := client.Do(req) - if err != nil { - logrus.Fatal(err) - } - defer res.Body.Close() - - if res.StatusCode != http.StatusOK { - body, err := ioutil.ReadAll(res.Body) - if err != nil { - panic(err) - } - logrus.Fatal(string(body)) - } - - type capsulCreateResponse struct{ ID string } - var resp capsulCreateResponse - if err := json.NewDecoder(res.Body).Decode(&resp); err != nil { - logrus.Fatal(err) - } - logrus.Debugf("capsul created with ID: '%s'", resp.ID) - tableColumns := []string{"Name", "ID"} table := formatter.CreateTable(tableColumns) - table.Append([]string{name, resp.ID}) + table.Append([]string{capsulName, resp.ID}) table.Render() return nil diff --git a/go.mod b/go.mod index 58d0c09e..3fc827c0 100644 --- a/go.mod +++ b/go.mod @@ -25,6 +25,7 @@ require ( ) require ( + coopcloud.tech/libcapsul v0.0.0-20211020153234-f1386b5cf79d github.com/Microsoft/hcsshim v0.8.21 // indirect github.com/containerd/containerd v1.5.5 // indirect github.com/docker/docker-credential-helpers v0.6.4 // indirect @@ -33,7 +34,7 @@ require ( github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/libdns/gandi v1.0.2 - github.com/libdns/libdns v0.2.1 // indirect + github.com/libdns/libdns v0.2.1 github.com/moby/sys/mount v0.2.0 // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/opencontainers/runc v1.0.2 // indirect diff --git a/go.sum b/go.sum index fac8183c..59bfde5a 100644 --- a/go.sum +++ b/go.sum @@ -21,6 +21,8 @@ cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIA cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +coopcloud.tech/libcapsul v0.0.0-20211020153234-f1386b5cf79d h1:5A69AFx2BP5J43Y9SaB9LlAIMLr2SWqbzfgjUh8sgKM= +coopcloud.tech/libcapsul v0.0.0-20211020153234-f1386b5cf79d/go.mod h1:HEQ9pSJRsDKabMxPfYCCzpVpAreLoC4Gh4SkVyOaKvk= coopcloud.tech/tagcmp v0.0.0-20211011140827-4f27c74467eb h1:Jf+Dnna2kXcNQvcA5JMp6d2Uyvg2pIVJfip9+X5FrH0= coopcloud.tech/tagcmp v0.0.0-20211011140827-4f27c74467eb/go.mod h1:ESVm0wQKcbcFi06jItF3rI7enf4Jt2PvbkWpDDHk1DQ= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=