PLTCONN-3577: Customizer upload & cleanup

This commit is contained in:
fangming-ning-sp
2023-09-06 16:05:54 -05:00
parent fe2fb3807f
commit 80af0b4c6d
7 changed files with 99 additions and 14 deletions

View File

@@ -23,6 +23,7 @@ func newConnCustomizersCmd(client client.Client) *cobra.Command {
newCustomizerGetCmd(client),
newCustomizerUpdateCmd(client),
newCustomizerDeleteCmd(client),
newCustomizerCreateVersionCmd(client),
)
return cmd

View File

@@ -0,0 +1,83 @@
// Copyright (c) 2023, SailPoint Technologies, Inc. All rights reserved.
package connector
import (
"archive/zip"
"encoding/json"
"fmt"
"io"
"net/http"
"os"
"github.com/olekukonko/tablewriter"
"github.com/sailpoint-oss/sailpoint-cli/internal/client"
"github.com/sailpoint-oss/sailpoint-cli/internal/util"
"github.com/spf13/cobra"
)
func newCustomizerCreateVersionCmd(client client.Client) *cobra.Command {
cmd := &cobra.Command{
Use: "upload",
Short: "Upload connector customizer",
Example: "sail conn customizers upload -c 1234 -f path/to/zip/archive.zip",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
id := cmd.Flags().Lookup("id").Value.String()
archivePath := cmd.Flags().Lookup("file").Value.String()
f, err := os.Open(archivePath)
if err != nil {
return err
}
info, err := f.Stat()
if err != nil {
return err
}
_, err = zip.NewReader(f, info.Size())
if err != nil {
return err
}
_, err = f.Seek(0, io.SeekStart)
if err != nil {
return err
}
resp, err := client.Post(cmd.Context(), util.ResourceUrl(connectorCustomizersEndpoint, id, "versions"), "application/zip", f)
if err != nil {
return err
}
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
if resp.StatusCode != http.StatusOK {
body, _ := io.ReadAll(resp.Body)
return fmt.Errorf("upload customizer failed. status: %s\nbody: %s", resp.Status, string(body))
}
var cv customizerVersion
err = json.NewDecoder(resp.Body).Decode(&cv)
if err != nil {
return err
}
table := tablewriter.NewWriter(cmd.OutOrStdout())
table.SetHeader(customizerVersionColumns)
table.Append(cv.columns())
table.Render()
return nil
},
}
cmd.Flags().StringP("id", "c", "", "Connector customizer ID")
_ = cmd.MarkFlagRequired("id")
cmd.Flags().StringP("file", "f", "", "ZIP Archive")
_ = cmd.MarkFlagRequired("file")
return cmd
}

View File

@@ -39,7 +39,7 @@ func newCustomizerDeleteCmd(client client.Client) *cobra.Command {
},
}
cmd.Flags().StringP("id", "c", "", "Connector ID or Alias")
cmd.Flags().StringP("id", "c", "", "Connector customizer ID")
_ = cmd.MarkFlagRequired("id")
return cmd

View File

@@ -50,7 +50,7 @@ func newCustomizerGetCmd(client client.Client) *cobra.Command {
},
}
cmd.Flags().StringP("id", "c", "", "Connector ID or Alias")
cmd.Flags().StringP("id", "c", "", "Connector customizer ID")
_ = cmd.MarkFlagRequired("id")
return cmd

View File

@@ -39,17 +39,6 @@ func newCustomizerListCmd(client client.Client) *cobra.Command {
return err
}
// raw, err := io.ReadAll(resp.Body)
// if err != nil {
// return err
// }
// var tags []tag
// err = json.Unmarshal(raw, &tags)
// if err != nil {
// return err
// }
table := tablewriter.NewWriter(cmd.OutOrStdout())
table.SetHeader(customizerColumns)
for _, c := range customizers {

View File

@@ -58,7 +58,7 @@ func newCustomizerUpdateCmd(client client.Client) *cobra.Command {
},
}
cmd.Flags().StringP("id", "c", "", "Specify connector customizer id")
cmd.Flags().StringP("id", "c", "", "Connector customizer ID")
_ = cmd.MarkFlagRequired("id")
cmd.Flags().StringP("name", "n", "", "name of the connector customizer")

View File

@@ -68,3 +68,15 @@ func (c customizer) columns() []string {
}
var customizerColumns = []string{"ID", "Name", "Version"}
type customizerVersion struct {
CustomizerID string `json:"connectorCustomizerId"`
ImageID string `json:"imageId"`
Version int `json:"version"`
}
func (c customizerVersion) columns() []string {
return []string{c.CustomizerID, c.ImageID, strconv.Itoa(c.Version)}
}
var customizerVersionColumns = []string{"Customizer ID", "Image ID", "Version"}