github.com/iaas-resource-provision/iaas-rpc@v1.0.7-0.20211021023331-ed21f798c408/internal/command/arguments/refresh.go (about)

     1  package arguments
     2  
     3  import (
     4  	"github.com/iaas-resource-provision/iaas-rpc/internal/tfdiags"
     5  )
     6  
     7  // Refresh represents the command-line arguments for the apply command.
     8  type Refresh struct {
     9  	// State, Operation, and Vars are the common extended flags
    10  	State     *State
    11  	Operation *Operation
    12  	Vars      *Vars
    13  
    14  	// InputEnabled is used to disable interactive input for unspecified
    15  	// variable and backend config values. Default is true.
    16  	InputEnabled bool
    17  
    18  	// ViewType specifies which output format to use
    19  	ViewType ViewType
    20  }
    21  
    22  // ParseRefresh processes CLI arguments, returning a Refresh value and errors.
    23  // If errors are encountered, a Refresh value is still returned representing
    24  // the best effort interpretation of the arguments.
    25  func ParseRefresh(args []string) (*Refresh, tfdiags.Diagnostics) {
    26  	var diags tfdiags.Diagnostics
    27  	refresh := &Refresh{
    28  		State:     &State{},
    29  		Operation: &Operation{},
    30  		Vars:      &Vars{},
    31  	}
    32  
    33  	cmdFlags := extendedFlagSet("refresh", refresh.State, refresh.Operation, refresh.Vars)
    34  	cmdFlags.BoolVar(&refresh.InputEnabled, "input", true, "input")
    35  
    36  	var json bool
    37  	cmdFlags.BoolVar(&json, "json", false, "json")
    38  
    39  	if err := cmdFlags.Parse(args); err != nil {
    40  		diags = diags.Append(tfdiags.Sourceless(
    41  			tfdiags.Error,
    42  			"Failed to parse command-line flags",
    43  			err.Error(),
    44  		))
    45  	}
    46  
    47  	args = cmdFlags.Args()
    48  	if len(args) > 0 {
    49  		diags = diags.Append(tfdiags.Sourceless(
    50  			tfdiags.Error,
    51  			"Too many command line arguments",
    52  			"Expected at most one positional argument.",
    53  		))
    54  	}
    55  
    56  	diags = diags.Append(refresh.Operation.Parse())
    57  
    58  	// JSON view currently does not support input, so we disable it here
    59  	if json {
    60  		refresh.InputEnabled = false
    61  	}
    62  
    63  	switch {
    64  	case json:
    65  		refresh.ViewType = ViewJSON
    66  	default:
    67  		refresh.ViewType = ViewHuman
    68  	}
    69  
    70  	return refresh, diags
    71  }