@@ -2,10 +2,8 @@ package hosts
22
33import (
44 "fmt"
5- "log"
6- "os"
7-
85 "maps"
6+ "os"
97
108 serverscom "github.com/serverscom/serverscom-go-client/pkg"
119 "github.com/serverscom/srvctl/cmd/base"
@@ -14,6 +12,7 @@ import (
1412)
1513
1614type AddDSFlags struct {
15+ Skeleton bool
1716 InputPath string
1817 LocationID int
1918 ServerModelID int
@@ -32,6 +31,11 @@ type AddDSFlags struct {
3231 Labels map [string ]string
3332}
3433
34+ type AddSBMFlags struct {
35+ Skeleton bool
36+ InputPath string
37+ }
38+
3539func applyFlagsToInput (
3640 input * serverscom.DedicatedServerCreateInput ,
3741 flags * AddDSFlags ,
@@ -132,6 +136,11 @@ func newAddDSCmd(cmdContext *base.CmdContext) *cobra.Command {
132136 Short : "Create a dedicated server" ,
133137 Args : cobra .ArbitraryArgs ,
134138 RunE : func (cmd * cobra.Command , args []string ) error {
139+ formatter := cmdContext .GetOrCreateFormatter (cmd )
140+
141+ if flags .Skeleton {
142+ return formatter .FormatSkeleton ("hosts/add_ds.json" )
143+ }
135144
136145 manager := cmdContext .GetManager ()
137146 ctx , cancel := base .SetupContext (cmd , manager )
@@ -145,6 +154,11 @@ func newAddDSCmd(cmdContext *base.CmdContext) *cobra.Command {
145154 if err := base .ReadInputJSON (flags .InputPath , cmd .InOrStdin (), & input ); err != nil {
146155 return err
147156 }
157+ } else {
158+ required := []string {"input" }
159+ if err := base .ValidateFlags (cmd , required ); err != nil {
160+ return err
161+ }
148162 }
149163
150164 if len (input .Hosts ) == 0 && len (args ) == 0 {
@@ -171,7 +185,6 @@ func newAddDSCmd(cmdContext *base.CmdContext) *cobra.Command {
171185 }
172186
173187 if server != nil {
174- formatter := cmdContext .GetOrCreateFormatter (cmd )
175188 return formatter .Format (server )
176189 }
177190
@@ -180,6 +193,7 @@ func newAddDSCmd(cmdContext *base.CmdContext) *cobra.Command {
180193 }
181194
182195 cmd .Flags ().StringVarP (& flags .InputPath , "input" , "i" , "" , "path to input file or '-' to read from stdin" )
196+ cmd .Flags ().BoolVarP (& flags .Skeleton , "skeleton" , "s" , false , "JSON object with structure that is required to be passed" )
183197
184198 cmd .Flags ().IntVar (& flags .LocationID , "location-id" , 0 , "Create the server(s) in the specific location ID" )
185199 cmd .Flags ().IntVar (& flags .ServerModelID , "server-model-id" , 0 , "Use specific server model ID to create the server" )
@@ -201,12 +215,19 @@ func newAddDSCmd(cmdContext *base.CmdContext) *cobra.Command {
201215}
202216
203217func newAddSBMCmd (cmdContext * base.CmdContext ) * cobra.Command {
204- var path string
218+ flags := & AddSBMFlags {}
219+
205220 cmd := & cobra.Command {
206221 Use : "add --input <path>" ,
207222 Short : "Create an SBM server" ,
208223 Args : cobra .ExactArgs (0 ),
209224 RunE : func (cmd * cobra.Command , args []string ) error {
225+ formatter := cmdContext .GetOrCreateFormatter (cmd )
226+
227+ if flags .Skeleton {
228+ return formatter .FormatSkeleton ("hosts/add_sbm.json" )
229+ }
230+
210231 manager := cmdContext .GetManager ()
211232 ctx , cancel := base .SetupContext (cmd , manager )
212233 defer cancel ()
@@ -215,8 +236,15 @@ func newAddSBMCmd(cmdContext *base.CmdContext) *cobra.Command {
215236
216237 input := serverscom.SBMServerCreateInput {}
217238
218- if err := base .ReadInputJSON (path , cmd .InOrStdin (), & input ); err != nil {
219- return err
239+ if flags .InputPath != "" {
240+ if err := base .ReadInputJSON (flags .InputPath , cmd .InOrStdin (), & input ); err != nil {
241+ return err
242+ }
243+ } else {
244+ required := []string {"input" }
245+ if err := base .ValidateFlags (cmd , required ); err != nil {
246+ return err
247+ }
220248 }
221249
222250 scClient := cmdContext .GetClient ().SetVerbose (manager .GetVerbose (cmd )).GetScClient ()
@@ -227,18 +255,15 @@ func newAddSBMCmd(cmdContext *base.CmdContext) *cobra.Command {
227255 }
228256
229257 if server != nil {
230- formatter := cmdContext .GetOrCreateFormatter (cmd )
231258 return formatter .Format (server )
232259 }
233260
234261 return nil
235262 },
236263 }
237264
238- cmd .Flags ().StringVarP (& path , "input" , "i" , "" , "path to input file or '-' to read from stdin" )
239- if err := cmd .MarkFlagRequired ("input" ); err != nil {
240- log .Fatal (err )
241- }
265+ cmd .Flags ().StringVarP (& flags .InputPath , "input" , "i" , "" , "path to input file or '-' to read from stdin" )
266+ cmd .Flags ().BoolVarP (& flags .Skeleton , "skeleton" , "s" , false , "JSON object with structure that is required to be passed" )
242267
243268 return cmd
244269}
0 commit comments