...

Source file src/edge-infra.dev/pkg/edge/edgecli/commands/terminal/modify/modify.go

Documentation: edge-infra.dev/pkg/edge/edgecli/commands/terminal/modify

     1  package modify
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	"edge-infra.dev/pkg/edge/api/graph/model"
     8  	"edge-infra.dev/pkg/edge/edgecli"
     9  	"edge-infra.dev/pkg/edge/edgecli/constructors"
    10  	"edge-infra.dev/pkg/edge/edgecli/flagutil"
    11  	"edge-infra.dev/pkg/lib/cli/command"
    12  	"edge-infra.dev/pkg/lib/cli/rags"
    13  )
    14  
    15  func NewCmd(cfg *edgecli.Config) *command.Command {
    16  	var cmd *command.Command
    17  	flagsets := flagutil.GetConnectionFlags(cfg)
    18  
    19  	cmd = &command.Command{
    20  		ShortUsage: "edge terminal modify",
    21  		ShortHelp:  "Modify a Terminal belonging to a Cluster",
    22  		Flags: append(
    23  			flagsets,
    24  			&rags.Rag{
    25  				Name:     flagutil.StoreFlag,
    26  				Value:    &rags.String{},
    27  				Usage:    "Name of the Store - Must be unique",
    28  				Required: true,
    29  			},
    30  			&rags.Rag{
    31  				Name:     flagutil.BannerFlag,
    32  				Value:    &rags.String{},
    33  				Usage:    "Banner name",
    34  				Required: true,
    35  			},
    36  			// A terminal is comprised of some atomic data fields, and a list of
    37  			// network interfaces. Simple to support all atomic fields. But to modify an
    38  			// interface, need to be able to say _which_ to modify.
    39  			&rags.Rag{
    40  				Name:     flagutil.TerminalID,
    41  				Value:    &rags.String{},
    42  				Usage:    "ID of Terminal",
    43  				Required: true,
    44  			},
    45  			// Atomic data fields. All flags optional, so only have to specify the ones you want
    46  			// to change
    47  			&rags.Rag{
    48  				Name:     flagutil.LaneFlag,
    49  				Usage:    "Lane number",
    50  				Value:    &rags.String{},
    51  				Required: false,
    52  			},
    53  			&rags.Rag{
    54  				Name:     flagutil.RoleFlag,
    55  				Usage:    "Role of the Terminal, e.g. worker",
    56  				Value:    &rags.String{},
    57  				Required: false,
    58  			},
    59  			&rags.Rag{
    60  				Name:     flagutil.ClassFlag,
    61  				Usage:    "Class of the Terminal: 'server' or 'touchpoint'",
    62  				Value:    &rags.String{},
    63  				Required: false,
    64  			},
    65  			&rags.Rag{
    66  				Name:     flagutil.DiscoverDisksFlag,
    67  				Usage:    "Disk discovery option",
    68  				Value:    &rags.String{},
    69  				Required: false,
    70  			},
    71  			&rags.Rag{
    72  				Name:     flagutil.BootDiskFlag,
    73  				Usage:    "Boot disk option",
    74  				Value:    &rags.String{},
    75  				Required: false,
    76  			},
    77  			&rags.Rag{
    78  				Name:     flagutil.PrimaryInterfaceFlag,
    79  				Usage:    "UUID of existing interface on terminal",
    80  				Value:    &rags.String{},
    81  				Required: false,
    82  			},
    83  			&rags.Rag{
    84  				Name:     flagutil.ExistingEfiFlag,
    85  				Usage:    "Disk path of existing EFI partition on terminal",
    86  				Value:    &rags.String{},
    87  				Required: false,
    88  			},
    89  		),
    90  		Exec: func(_ context.Context, _ []string) error {
    91  			if err := flagutil.ValidateRequiredFlags(cmd.Rags); err != nil {
    92  				return err
    93  			}
    94  
    95  			registrar, err := constructors.BuildRegistrar(cmd.Rags)
    96  			if err != nil {
    97  				return err
    98  			}
    99  
   100  			terminalID := flagutil.GetStringFlag(cmd.Rags, flagutil.TerminalID)
   101  
   102  			role := flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.RoleFlag)
   103  			class := flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.ClassFlag)
   104  			discoverDisks := flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.DiscoverDisksFlag)
   105  			updatedTerminal := model.TerminalUpdateInput{
   106  				Lane:             flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.LaneFlag),
   107  				Role:             (*model.TerminalRoleType)(role),
   108  				Class:            (*model.TerminalClassType)(class),
   109  				DiscoverDisks:    (*model.TerminalDiscoverDisksType)(discoverDisks),
   110  				BootDisk:         flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.BootDiskFlag),
   111  				ExistingEfiPart:  flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.ExistingEfiFlag),
   112  				PrimaryInterface: flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.PrimaryInterfaceFlag),
   113  			}
   114  
   115  			reqCtx, cancelReq := context.WithTimeout(context.Background(), flagutil.BffReqTimeout)
   116  			defer cancelReq()
   117  
   118  			if _, err := registrar.ModifyTerminal(reqCtx, terminalID, &updatedTerminal); err != nil {
   119  				fmt.Println("an error occurred whilst modifying the terminal")
   120  				return err
   121  			}
   122  
   123  			fmt.Println("Terminal modified successfully!")
   124  
   125  			return nil
   126  		},
   127  	}
   128  	return cmd
   129  }
   130  

View as plain text