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  }