github.com/scaleway/scaleway-cli@v1.11.1/pkg/cli/x_marketplace.go (about) 1 // Copyright (C) 2015 Scaleway. All rights reserved. 2 // Use of this source code is governed by a MIT-style 3 // license that can be found in the LICENSE.md file. 4 5 package cli 6 7 import ( 8 "encoding/json" 9 10 "github.com/scaleway/scaleway-cli/pkg/api" 11 ) 12 13 var cmdMarketplace = &Command{ 14 Exec: runMarketplace, 15 UsageLine: "_marketplace -r VERB [FIELD]+", 16 Description: "", 17 Hidden: true, 18 Help: "List, read and write and delete marketplace", 19 Examples: ` 20 $ scw _marketplace -r GET images 21 $ scw _marketplace -r GET versions UUID_IMAGE 22 $ scw _marketplace -r GET local_images UUID_IMAGE UUID_LOCAL_VERSION 23 $ scw _marketplace -r POST images <data> 24 $ scw _marketplace -r POST versions UUID_IMAGE <data> 25 $ scw _marketplace -r POST local_images UUID_IMAGE UUID_LOCAL_VERSION <data> 26 $ scw _marketplace -r POST images <data> 27 $ scw _marketplace -r PUT versions UUID_IMAGE <data> 28 $ scw _marketplace -r PUT local_images UUID_IMAGE UUID_LOCAL_VERSION <data> 29 $ scw _marketplace -r PUT images <data> 30 $ scw _marketplace -r PUT versions UUID_IMAGE <data> 31 $ scw _marketplace -r DELETE local_images UUID_IMAGE UUID_LOCAL_VERSION 32 $ scw _marketplace -r DELETE images 33 $ scw _marketplace -r DELETE versions UUID_IMAGE 34 $ scw _marketplace -r DELETE local_images UUID_IMAGE UUID_LOCAL_VERSION 35 `, 36 } 37 38 func init() { 39 cmdMarketplace.Flag.BoolVar(&marketplaceHelp, []string{"h", "-help"}, false, "Print usage") 40 cmdMarketplace.Flag.StringVar(&marketplaceRequestType, []string{"r", "-request"}, "", "Choice a request type") 41 } 42 43 // Flags 44 var marketplaceHelp bool // -h, --help flag 45 var marketplaceRequestType string // -r, --request flag 46 47 func getMarketPlace(cmd *Command, args []string) error { 48 ctx := cmd.GetContext(args) 49 50 switch args[0] { 51 case "images": 52 if len(args) == 2 { 53 marketplaceImages, err := ctx.API.GetMarketPlaceImages(args[1]) 54 if err != nil { 55 return err 56 } 57 printRawMode(cmd.Streams().Stdout, marketplaceImages) 58 return nil 59 } 60 marketplaceImages, err := ctx.API.GetMarketPlaceImages("") 61 if err != nil { 62 return err 63 } 64 printRawMode(cmd.Streams().Stdout, marketplaceImages) 65 case "versions": 66 if len(args) != 3 && len(args) != 2 { 67 return cmd.PrintUsage() 68 } 69 if len(args) == 3 { 70 marketplaceVersions, err := ctx.API.GetMarketPlaceImageVersions(args[1], args[2]) 71 if err != nil { 72 return err 73 } 74 printRawMode(cmd.Streams().Stdout, marketplaceVersions) 75 return nil 76 } 77 marketplaceVersions, err := ctx.API.GetMarketPlaceImageVersions(args[1], "") 78 if err != nil { 79 return err 80 } 81 printRawMode(cmd.Streams().Stdout, marketplaceVersions) 82 case "current_versions": 83 if len(args) < 2 { 84 return cmd.PrintUsage() 85 } 86 marketplaceVersions, err := ctx.API.GetMarketPlaceImageCurrentVersion(args[1]) 87 if err != nil { 88 return err 89 } 90 printRawMode(cmd.Streams().Stdout, marketplaceVersions) 91 case "local_images": 92 if len(args) != 3 && len(args) != 4 { 93 return cmd.PrintUsage() 94 } 95 if len(args) == 4 { 96 marketplaceLocalVersions, err := ctx.API.GetMarketPlaceLocalImages(args[1], args[2], args[3]) 97 if err != nil { 98 return err 99 } 100 printRawMode(cmd.Streams().Stdout, marketplaceLocalVersions) 101 return nil 102 } 103 marketplaceLocalVersions, err := ctx.API.GetMarketPlaceLocalImages(args[1], args[2], "") 104 if err != nil { 105 return err 106 } 107 printRawMode(cmd.Streams().Stdout, marketplaceLocalVersions) 108 default: 109 return cmd.PrintUsage() 110 } 111 return nil 112 } 113 114 func postMarketPlace(cmd *Command, args []string) error { 115 ctx := cmd.GetContext(args) 116 117 switch args[0] { 118 case "images": 119 var data api.MarketImage 120 121 if len(args) < 2 { 122 123 } 124 err := json.Unmarshal([]byte(args[1]), &data) 125 if err != nil { 126 return err 127 } 128 err = ctx.API.PostMarketPlaceImage(data) 129 if err != nil { 130 return err 131 } 132 case "versions": 133 var data api.MarketVersion 134 135 if len(args) < 3 { 136 return cmd.PrintUsage() 137 } 138 err := json.Unmarshal([]byte(args[2]), &data) 139 if err != nil { 140 return err 141 } 142 err = ctx.API.PostMarketPlaceImageVersion(args[1], data) 143 if err != nil { 144 return err 145 } 146 case "local_images": 147 var data api.MarketLocalImage 148 149 if len(args) < 4 { 150 return cmd.PrintUsage() 151 } 152 err := json.Unmarshal([]byte(args[3]), &data) 153 if err != nil { 154 return err 155 } 156 err = ctx.API.PostMarketPlaceLocalImage(args[0], args[1], args[2], data) 157 if err != nil { 158 return err 159 } 160 default: 161 return cmd.PrintUsage() 162 } 163 return nil 164 } 165 166 func putMarketPlace(cmd *Command, args []string) error { 167 ctx := cmd.GetContext(args) 168 169 switch args[0] { 170 case "images": 171 var data api.MarketImage 172 173 if len(args) < 2 { 174 return cmd.PrintUsage() 175 } 176 err := json.Unmarshal([]byte(args[1]), &data) 177 if err != nil { 178 return err 179 } 180 err = ctx.API.PostMarketPlaceImage(data) 181 if err != nil { 182 return err 183 } 184 case "versions": 185 var data api.MarketVersion 186 187 if len(args) < 3 { 188 return cmd.PrintUsage() 189 } 190 err := json.Unmarshal([]byte(args[2]), &data) 191 if err != nil { 192 return err 193 } 194 err = ctx.API.PostMarketPlaceImageVersion(args[1], data) 195 if err != nil { 196 return err 197 } 198 case "local_images": 199 var data api.MarketLocalImage 200 201 if len(args) < 4 { 202 return cmd.PrintUsage() 203 } 204 err := json.Unmarshal([]byte(args[3]), &data) 205 if err != nil { 206 return err 207 } 208 err = ctx.API.PostMarketPlaceLocalImage(args[0], args[1], args[2], data) 209 if err != nil { 210 return err 211 } 212 default: 213 return cmd.PrintUsage() 214 } 215 return nil 216 } 217 218 func deleteMarketPlace(cmd *Command, args []string) error { 219 ctx := cmd.GetContext(args) 220 221 switch args[0] { 222 case "images": 223 if len(args) < 1 { 224 return cmd.PrintUsage() 225 } 226 err := ctx.API.DeleteMarketPlaceImage(args[0]) 227 if err != nil { 228 return err 229 } 230 case "versions": 231 if len(args) < 3 { 232 return cmd.PrintUsage() 233 } 234 err := ctx.API.DeleteMarketPlaceImageVersion(args[0], args[1]) 235 if err != nil { 236 return err 237 } 238 case "local_images": 239 if len(args) < 4 { 240 return cmd.PrintUsage() 241 } 242 err := ctx.API.DeleteMarketPlaceLocalImage(args[0], args[1], args[2]) 243 if err != nil { 244 return err 245 } 246 default: 247 return cmd.PrintUsage() 248 } 249 return nil 250 } 251 252 func runMarketplace(cmd *Command, args []string) error { 253 if marketplaceHelp { 254 return cmd.PrintUsage() 255 } 256 if len(args) < 1 { 257 return cmd.PrintShortUsage() 258 } 259 switch marketplaceRequestType { 260 case "GET": 261 return getMarketPlace(cmd, args) 262 case "POST": 263 return postMarketPlace(cmd, args) 264 case "PUT": 265 return putMarketPlace(cmd, args) 266 case "DELETE": 267 return deleteMarketPlace(cmd, args) 268 default: 269 return cmd.PrintUsage() 270 } 271 }