Skip to content

Commit

Permalink
Filter network (#2356)
Browse files Browse the repository at this point in the history
* filter network

* address comments

* fix case

* allow cluster in flags

* allow cluster in flags

---------

Co-authored-by: arturrez <artur.reznikov@avalabs.org>
  • Loading branch information
sukantoraymond and arturrez authored Nov 22, 2024
1 parent ee1871b commit 2c2b457
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 26 deletions.
14 changes: 9 additions & 5 deletions cmd/blockchaincmd/add_validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ var (
networkoptions.Devnet,
networkoptions.Fuji,
networkoptions.Mainnet,
networkoptions.EtnaDevnet,
}

nodeIDStr string
Expand Down Expand Up @@ -128,18 +129,25 @@ func addValidator(_ *cobra.Command, args []string) error {
return err
}

sc, err := app.LoadSidecar(blockchainName)
if err != nil {
return fmt.Errorf("failed to load sidecar: %w", err)
}

networkOptionsList := networkoptions.GetNetworkFromSidecar(sc, addValidatorSupportedNetworkOptions)
network, err := networkoptions.GetNetworkFromCmdLineFlags(
app,
"",
globalNetworkFlags,
true,
false,
addValidatorSupportedNetworkOptions,
networkOptionsList,
"",
)
if err != nil {
return err
}

if network.ClusterName != "" {
clusterNameFlagValue = network.ClusterName
network = models.ConvertClusterToNetwork(network)
Expand Down Expand Up @@ -183,10 +191,6 @@ func addValidator(_ *cobra.Command, args []string) error {
return err
}

sc, err := app.LoadSidecar(blockchainName)
if err != nil {
return fmt.Errorf("failed to load sidecar: %w", err)
}
sovereign := sc.Sovereign

if sovereign && network.Kind == models.Mainnet {
Expand Down
13 changes: 7 additions & 6 deletions cmd/blockchaincmd/change_weight.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,24 +48,25 @@ func setWeight(_ *cobra.Command, args []string) error {
return err
}

sc, err := app.LoadSidecar(blockchainName)
if err != nil {
return fmt.Errorf("failed to load sidecar: %w", err)
}

networkOptionsList := networkoptions.GetNetworkFromSidecar(sc, removeValidatorSupportedNetworkOptions)
network, err := networkoptions.GetNetworkFromCmdLineFlags(
app,
"",
globalNetworkFlags,
true,
false,
removeValidatorSupportedNetworkOptions,
networkOptionsList,
"",
)
if err != nil {
return err
}

sc, err := app.LoadSidecar(blockchainName)
if err != nil {
return err
}

if network.Kind == models.Mainnet && sc.Sovereign {
return errNotSupportedOnMainnet
}
Expand Down
14 changes: 8 additions & 6 deletions cmd/blockchaincmd/remove_validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ var removeValidatorSupportedNetworkOptions = []networkoptions.NetworkOption{
networkoptions.Devnet,
networkoptions.Fuji,
networkoptions.Mainnet,
networkoptions.EtnaDevnet,
}

// avalanche blockchain removeValidator
Expand Down Expand Up @@ -70,13 +71,19 @@ func removeValidator(_ *cobra.Command, args []string) error {
return err
}

sc, err := app.LoadSidecar(blockchainName)
if err != nil {
return err
}

networkOptionsList := networkoptions.GetNetworkFromSidecar(sc, removeValidatorSupportedNetworkOptions)
network, err := networkoptions.GetNetworkFromCmdLineFlags(
app,
"",
globalNetworkFlags,
true,
false,
removeValidatorSupportedNetworkOptions,
networkOptionsList,
"",
)
if err != nil {
Expand All @@ -101,11 +108,6 @@ func removeValidator(_ *cobra.Command, args []string) error {
}
network.HandlePublicNetworkSimulation()

sc, err := app.LoadSidecar(blockchainName)
if err != nil {
return err
}

if sc.Sovereign && network.Kind == models.Mainnet {
return errNotSupportedOnMainnet
}
Expand Down
35 changes: 26 additions & 9 deletions pkg/networkoptions/network_options.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,21 +51,22 @@ func (n NetworkOption) String() string {
}

func NetworkOptionFromString(s string) NetworkOption {
switch s {
case "Mainnet":
switch {
case s == "Mainnet":
return Mainnet
case "Fuji Testnet":
case s == "Fuji Testnet":
return Fuji
case "Local Network":
case s == "Local Network":
return Local
case "Etna Devnet":
case s == "Etna Devnet":
return EtnaDevnet
case "Devnet":
case s == "Devnet" || strings.Contains(s, "Devnet"):
return Devnet
case "Cluster":
case s == "Cluster" || strings.Contains(s, "Cluster"):
return Cluster
default:
return Undefined
}
return Undefined
}

type NetworkFlags struct {
Expand Down Expand Up @@ -172,6 +173,21 @@ func GetSupportedNetworkOptionsForSubnet(
return filteredSupportedNetworkOptions, clusterNames, devnetEndpoints, nil
}

func GetNetworkFromSidecar(sc models.Sidecar, defaultOption []NetworkOption) []NetworkOption {
networkOptionsList := []NetworkOption{}
for scNetwork := range sc.Networks {
if NetworkOptionFromString(scNetwork) != Undefined {
networkOptionsList = append(networkOptionsList, NetworkOptionFromString(scNetwork))
}
}

// default network options to add validator options
if len(networkOptionsList) == 0 {
networkOptionsList = defaultOption
}
return networkOptionsList
}

func GetNetworkFromCmdLineFlags(
app *application.Avalanche,
promptStr string,
Expand Down Expand Up @@ -241,7 +257,8 @@ func GetNetworkFromCmdLineFlags(
}
}
// unsupported option
if networkOption != Undefined && !slices.Contains(supportedNetworkOptions, networkOption) {
// allow cluster because we can extract underlying network from cluster
if networkOption != Undefined && !slices.Contains(supportedNetworkOptions, networkOption) && networkOption != Cluster {
errMsg := fmt.Errorf("network flag %s is not supported. use one of %s", networkFlagsMap[networkOption], supportedNetworksFlags)
if subnetName != "" {
clustersMsg := ""
Expand Down

0 comments on commit 2c2b457

Please # to comment.