@@ -67,17 +67,15 @@ type imageConfig struct {
6767type inputModel struct {
6868 * globalflags.GlobalFlagModel
6969
70+ Id * string
7071 Name string
7172 DiskFormat string
7273 LocalFilePath string
7374 Labels * map [string ]string
7475 Config * imageConfig
7576 MinDiskSize * int64
7677 MinRam * int64
77- Owner * string
7878 Protected * bool
79- Scope * string
80- Status * string
8179}
8280
8381func NewCmd (p * print.Printer ) * cobra.Command {
@@ -90,7 +88,7 @@ func NewCmd(p *print.Printer) *cobra.Command {
9088 examples .NewExample (`Create a named imaged` , `$ stackit beta image create --name my-new-image --disk-format=raw --local-file-path=/my/raw/image` ),
9189 examples .NewExample (`Create a named image with labels` , `$ stackit beta image create --name my-new-image --disk-format=raw --local-file-path=/my/raw/image--labels dev,amd64` ),
9290 ),
93- RunE : func (cmd * cobra.Command , _ []string ) error {
91+ RunE : func (cmd * cobra.Command , _ []string ) ( err error ) {
9492 ctx := context .Background ()
9593 model , err := parseInput (p , cmd )
9694 if err != nil {
@@ -108,7 +106,11 @@ func NewCmd(p *print.Printer) *cobra.Command {
108106 if err != nil {
109107 return fmt .Errorf ("create image: file %q is not readable: %w" , model .LocalFilePath , err )
110108 }
111- defer file .Close ()
109+ defer func () {
110+ if inner := file .Close (); inner != nil {
111+ err = fmt .Errorf ("error closing input file: %w (%w)" , inner , err )
112+ }
113+ }()
112114
113115 if ! model .AssumeYes {
114116 prompt := fmt .Sprintf ("Are you sure you want to create the image %q?" , model .Name )
@@ -125,6 +127,7 @@ func NewCmd(p *print.Printer) *cobra.Command {
125127 if err != nil {
126128 return fmt .Errorf ("create image: %w" , err )
127129 }
130+ model .Id = result .Id
128131 url , ok := result .GetUploadUrlOk ()
129132 if ! ok {
130133 return fmt .Errorf ("create image: no upload URL has been provided" )
@@ -145,7 +148,7 @@ func NewCmd(p *print.Printer) *cobra.Command {
145148 return cmd
146149}
147150
148- func uploadFile (ctx context.Context , p * print.Printer , file * os.File , url string ) error {
151+ func uploadFile (ctx context.Context , p * print.Printer , file * os.File , url string ) ( err error ) {
149152 var filesize int64
150153 if stat , err := file .Stat (); err != nil {
151154 p .Debug (print .DebugLevel , "create image: cannot open file %q: %w" , file .Name (), err )
@@ -168,6 +171,11 @@ func uploadFile(ctx context.Context, p *print.Printer, file *os.File, url string
168171 if err != nil {
169172 return fmt .Errorf ("create image: error contacting server for upload: %w" , err )
170173 }
174+ defer func () {
175+ if inner := uploadResponse .Body .Close (); inner != nil {
176+ err = fmt .Errorf ("error closing file: %wqq (%w)" , inner , err )
177+ }
178+ }()
171179 if uploadResponse .StatusCode != http .StatusOK {
172180 return fmt .Errorf ("create image: server rejected image upload with %s" , uploadResponse .Status )
173181 }
@@ -258,7 +266,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli
258266 return request
259267}
260268
261- func createPayload (ctx context.Context , model * inputModel ) iaas.CreateImagePayload {
269+ func createPayload (_ context.Context , model * inputModel ) iaas.CreateImagePayload {
262270 var labelsMap * map [string ]any
263271 if model .Labels != nil && len (* model .Labels ) > 0 {
264272 // convert map[string]string to map[string]interface{}
@@ -315,7 +323,7 @@ func outputResult(p *print.Printer, model *inputModel, resp *iaas.ImageCreateRes
315323
316324 return nil
317325 default :
318- p .Outputf ("Created image %q\n " , model .Name )
326+ p .Outputf ("Created image %q with id %s \n " , model .Name , * model . Id )
319327 return nil
320328 }
321329}
0 commit comments