Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Start stop relayer #1631

Merged
merged 57 commits into from
Apr 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
963372d
add network options with cluster + teleporter deploy cmd
felipemadero Mar 13, 2024
62b7712
fix e2e v1
felipemadero Mar 13, 2024
81afaab
point to correct branch
felipemadero Mar 13, 2024
765ef4d
increase time of cli setup from source for e2e
felipemadero Mar 13, 2024
98e17e7
force 10 min cli setup from source if e2e
felipemadero Mar 13, 2024
dd23f25
lint
felipemadero Mar 13, 2024
920f144
add basic relayer commands
felipemadero Mar 13, 2024
db4fd66
partial work
felipemadero Mar 13, 2024
3c723a7
awm relayer host selection working
felipemadero Mar 13, 2024
7f919c8
Merge branch 'main' into relayer-on-devnet
felipemadero Mar 14, 2024
9307523
nits
felipemadero Mar 14, 2024
d9a63a8
add cchain teleporter info to cluster
felipemadero Mar 14, 2024
bf1d83b
nits
felipemadero Mar 14, 2024
d995763
nits
felipemadero Mar 15, 2024
987fc67
partial work
felipemadero Mar 15, 2024
c0bf6a3
nits
felipemadero Mar 15, 2024
d4744ea
almost
felipemadero Mar 15, 2024
a25e43f
relayer working
felipemadero Mar 15, 2024
7403a3b
nits
felipemadero Mar 15, 2024
4611fd9
all good except receipt
felipemadero Mar 15, 2024
f842810
add -y flag to node destroy
felipemadero Mar 15, 2024
d6ffd6b
nit
felipemadero Mar 15, 2024
3759481
add clusters to key list network options
felipemadero Mar 15, 2024
110cc7a
add flag to key list to have a shortest way to specify chains to show
felipemadero Mar 15, 2024
2673d4c
Merge branch 'main' into relayer-on-devnet
felipemadero Mar 15, 2024
a7d77e2
add tx hash for failed msg at destination
felipemadero Mar 15, 2024
3a03886
partial work
felipemadero Mar 15, 2024
7a40fd2
bump golang
felipemadero Mar 16, 2024
7caac5b
add trace to teleporter msg is receipt status is wrong
felipemadero Mar 16, 2024
f5e7294
enable first creating a subnet then creating a blockchain
felipemadero Mar 16, 2024
4c77ee9
improve add subnet validators speed
felipemadero Mar 16, 2024
78e33a4
nit
felipemadero Mar 16, 2024
40121de
seems pretty well
felipemadero Mar 16, 2024
8c8a408
seems pretty weel
felipemadero Mar 16, 2024
62f6d96
add proposer vm setup simil teleporter e2e
felipemadero Mar 16, 2024
8276c6c
just create subnet/blockchain on one subnet deploy
felipemadero Mar 16, 2024
aabfaee
working!
felipemadero Mar 17, 2024
ce7d6d9
nit
felipemadero Mar 17, 2024
2dc3224
nit
felipemadero Mar 17, 2024
fff97fa
nit
felipemadero Mar 17, 2024
6130333
nit
felipemadero Mar 18, 2024
ebada02
subnet join to not fail if blockchain was not deployed yet
felipemadero Mar 18, 2024
ee7122b
local stop almost working
felipemadero Mar 19, 2024
fafe0f7
nit
felipemadero Mar 19, 2024
8f9e02f
start accessing node related functions from teleportercmd
felipemadero Mar 19, 2024
109681d
basic remote start/stop without check for process status
felipemadero Mar 19, 2024
bc9ee95
add node lib
felipemadero Mar 19, 2024
869bf9d
disable cli setup from source
felipemadero Mar 22, 2024
7f0b770
nit
felipemadero Mar 22, 2024
897015c
Merge branch 'main' into start-stop-relayer
felipemadero Mar 23, 2024
03e28b8
Merge branch 'main' into start-stop-relayer
felipemadero Apr 3, 2024
2550cd9
Merge branch 'main' into start-stop-relayer
felipemadero Apr 3, 2024
35a64e9
nit
felipemadero Apr 3, 2024
fa365dc
lint
felipemadero Apr 3, 2024
75f0e49
address PR comments
felipemadero Apr 3, 2024
ce4f12c
addres PR comments
felipemadero Apr 3, 2024
22dff0a
Merge branch 'main' into start-stop-relayer
felipemadero Apr 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 5 additions & 43 deletions cmd/nodecmd/wiz.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"github.com/ava-labs/avalanche-cli/pkg/constants"
"github.com/ava-labs/avalanche-cli/pkg/models"
"github.com/ava-labs/avalanche-cli/pkg/networkoptions"
"github.com/ava-labs/avalanche-cli/pkg/node"
"github.com/ava-labs/avalanche-cli/pkg/ssh"
"github.com/ava-labs/avalanche-cli/pkg/subnet"
"github.com/ava-labs/avalanche-cli/pkg/teleporter"
Expand Down Expand Up @@ -266,7 +267,7 @@ func wiz(cmd *cobra.Command, args []string) error {
var awmRelayerHost *models.Host
if sc.TeleporterReady && sc.RunRelayer && isEVMGenesis {
// get or set AWM Relayer host and configure/stop service
awmRelayerHost, err = getAWMRelayerHost(clusterName)
awmRelayerHost, err = node.GetAWMRelayerHost(app, clusterName)
if err != nil {
return err
}
Expand Down Expand Up @@ -486,31 +487,10 @@ func updateProposerVMs(
return teleporter.SetProposerVM(app, network, "C", "")
}

func getHostWithCloudID(clusterName string, cloudID string) (*models.Host, error) {
hosts, err := ansible.GetInventoryFromAnsibleInventoryFile(app.GetAnsibleInventoryDirPath(clusterName))
if err != nil {
return nil, err
}
monitoringInventoryFile := app.GetMonitoringInventoryDir(clusterName)
if utils.FileExists(monitoringInventoryFile) {
monitoringHosts, err := ansible.GetInventoryFromAnsibleInventoryFile(monitoringInventoryFile)
if err != nil {
return nil, err
}
hosts = append(hosts, monitoringHosts...)
}
for _, host := range hosts {
if host.GetCloudID() == cloudID {
return host, nil
}
}
return nil, nil
}

func setAWMRelayerHost(host *models.Host) error {
cloudID := host.GetCloudID()
ux.Logger.PrintToUser("")
ux.Logger.PrintToUser("configuring AWM Relayer on host %s", cloudID)
ux.Logger.PrintToUser("configuring AWM RElayer on host %s", cloudID)
nodeConfig, err := app.LoadClusterNodeConfig(cloudID)
if err != nil {
return err
Expand Down Expand Up @@ -539,24 +519,6 @@ func updateAWMRelayerHostConfig(host *models.Host, subnetName string, clusterNam
return ssh.RunSSHStartAWMRelayerService(host)
}

func getAWMRelayerHost(clusterName string) (*models.Host, error) {
clusterConfig, err := app.GetClusterConfig(clusterName)
if err != nil {
return nil, err
}
relayerCloudID := ""
for _, cloudID := range clusterConfig.GetCloudIDs() {
nodeConfig, err := app.LoadClusterNodeConfig(cloudID)
if err != nil {
return nil, err
}
if nodeConfig.IsAWMRelayer {
relayerCloudID = nodeConfig.NodeID
}
}
return getHostWithCloudID(clusterName, relayerCloudID)
}

func chooseAWMRelayerHost(clusterName string) (*models.Host, error) {
// first look up for separate monitoring host
monitoringInventoryFile := app.GetMonitoringInventoryDir(clusterName)
Expand All @@ -575,11 +537,11 @@ func chooseAWMRelayerHost(clusterName string) (*models.Host, error) {
return nil, err
}
if len(clusterConfig.APINodes) > 0 {
return getHostWithCloudID(clusterName, clusterConfig.APINodes[0])
return node.GetHostWithCloudID(app, clusterName, clusterConfig.APINodes[0])
}
// finally go for other hosts
if len(clusterConfig.Nodes) > 0 {
return getHostWithCloudID(clusterName, clusterConfig.Nodes[0])
return node.GetHostWithCloudID(app, clusterName, clusterConfig.Nodes[0])
}
return nil, fmt.Errorf("no hosts found on cluster")
}
Expand Down
2 changes: 2 additions & 0 deletions cmd/teleportercmd/relayer.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,7 @@ and configuring an AWM relayer on localhost.`,
}
cmd.AddCommand(newPrepareRelayerServiceCmd())
cmd.AddCommand(newAddSubnetToRelayerServiceCmd())
cmd.AddCommand(newStopRelayerCmd())
cmd.AddCommand(newStartRelayerCmd())
return cmd
}
76 changes: 76 additions & 0 deletions cmd/teleportercmd/startRelayer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
// Copyright (C) 2022, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package teleportercmd

import (
"fmt"

"github.com/ava-labs/avalanche-cli/pkg/models"
"github.com/ava-labs/avalanche-cli/pkg/networkoptions"
"github.com/ava-labs/avalanche-cli/pkg/node"
"github.com/ava-labs/avalanche-cli/pkg/ssh"
"github.com/ava-labs/avalanche-cli/pkg/teleporter"
"github.com/ava-labs/avalanche-cli/pkg/ux"

"github.com/spf13/cobra"
)

var startRelayerNetworkOptions = []networkoptions.NetworkOption{networkoptions.Local, networkoptions.Cluster}

// avalanche teleporter relayer start
func newStartRelayerCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "start",
Short: "starts AWM relayer",
Long: `Starts AWM relayer on the specified network (Currently only for local network).`,
SilenceUsage: true,
RunE: startRelayer,
Args: cobra.ExactArgs(0),
}
networkoptions.AddNetworkFlagsToCmd(cmd, &globalNetworkFlags, true, startRelayerNetworkOptions)
return cmd
}

func startRelayer(_ *cobra.Command, _ []string) error {
network, err := networkoptions.GetNetworkFromCmdLineFlags(
app,
globalNetworkFlags,
false,
startRelayerNetworkOptions,
"",
)
if err != nil {
return err
}
switch {
case network.Kind == models.Local:
if relayerIsUp, _, _, err := teleporter.RelayerIsUp(
app.GetAWMRelayerRunPath(),
); err != nil {
return err
} else if relayerIsUp {
return fmt.Errorf("local AWM relayer is already running")
}
if err := teleporter.DeployRelayer(
app.GetAWMRelayerBinDir(),
app.GetAWMRelayerConfigPath(),
app.GetAWMRelayerLogPath(),
app.GetAWMRelayerRunPath(),
app.GetAWMRelayerStorageDir(),
); err != nil {
return err
}
ux.Logger.GreenCheckmarkToUser("Local AWM Relayer successfully started")
ux.Logger.PrintToUser("Logs can be found at %s", app.GetAWMRelayerLogPath())
case network.ClusterName != "":
host, err := node.GetAWMRelayerHost(app, network.ClusterName)
if err != nil {
return err
}
if err := ssh.RunSSHStartAWMRelayerService(host); err != nil {
return err
}
ux.Logger.GreenCheckmarkToUser("Remote AWM Relayer on %s successfully started", host.GetCloudID())
}
return nil
}
74 changes: 74 additions & 0 deletions cmd/teleportercmd/stopRelayer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
// Copyright (C) 2022, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package teleportercmd

import (
"fmt"

"github.com/ava-labs/avalanche-cli/pkg/models"
"github.com/ava-labs/avalanche-cli/pkg/networkoptions"
"github.com/ava-labs/avalanche-cli/pkg/node"
"github.com/ava-labs/avalanche-cli/pkg/ssh"
"github.com/ava-labs/avalanche-cli/pkg/teleporter"
"github.com/ava-labs/avalanche-cli/pkg/ux"

"github.com/spf13/cobra"
)

var stopRelayerNetworkOptions = []networkoptions.NetworkOption{networkoptions.Local, networkoptions.Cluster}

// avalanche teleporter relayer stop
func newStopRelayerCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "stop",
Short: "stops AWM relayer",
Long: `Stops AWM relayer on the specified network (Currently only for local network, cluster).`,
SilenceUsage: true,
RunE: stopRelayer,
Args: cobra.ExactArgs(0),
}
networkoptions.AddNetworkFlagsToCmd(cmd, &globalNetworkFlags, true, stopRelayerNetworkOptions)
return cmd
}

func stopRelayer(_ *cobra.Command, _ []string) error {
network, err := networkoptions.GetNetworkFromCmdLineFlags(
app,
globalNetworkFlags,
false,
stopRelayerNetworkOptions,
"",
)
if err != nil {
return err
}
switch {
case network.Kind == models.Local:
b, _, _, err := teleporter.RelayerIsUp(
app.GetAWMRelayerRunPath(),
)
if err != nil {
return err
}
if !b {
return fmt.Errorf("there is no CLI-managed local AWM relayer running")
}
if err := teleporter.RelayerCleanup(
app.GetAWMRelayerRunPath(),
app.GetAWMRelayerStorageDir(),
); err != nil {
return err
}
ux.Logger.GreenCheckmarkToUser("Local AWM Relayer successfully stopped")
case network.ClusterName != "":
host, err := node.GetAWMRelayerHost(app, network.ClusterName)
if err != nil {
return err
}
if err := ssh.RunSSHStopAWMRelayerService(host); err != nil {
return err
}
ux.Logger.GreenCheckmarkToUser("Remote AWM Relayer on %s successfully stopped", host.GetCloudID())
}
return nil
}
47 changes: 47 additions & 0 deletions pkg/node/node.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// Copyright (C) 2022, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package node

import (
"github.com/ava-labs/avalanche-cli/pkg/ansible"
"github.com/ava-labs/avalanche-cli/pkg/application"
"github.com/ava-labs/avalanche-cli/pkg/models"
"github.com/ava-labs/avalanche-cli/pkg/utils"
)

func GetHostWithCloudID(app *application.Avalanche, clusterName string, cloudID string) (*models.Host, error) {
hosts, err := ansible.GetInventoryFromAnsibleInventoryFile(app.GetAnsibleInventoryDirPath(clusterName))
if err != nil {
return nil, err
}
monitoringInventoryFile := app.GetMonitoringInventoryDir(clusterName)
if utils.FileExists(monitoringInventoryFile) {
monitoringHosts, err := ansible.GetInventoryFromAnsibleInventoryFile(monitoringInventoryFile)
if err != nil {
return nil, err
}
hosts = append(hosts, monitoringHosts...)
}
for _, host := range hosts {
if host.GetCloudID() == cloudID {
return host, nil
}
}
return nil, nil
}

func GetAWMRelayerHost(app *application.Avalanche, clusterName string) (*models.Host, error) {
clusterConfig, err := app.GetClusterConfig(clusterName)
if err != nil {
return nil, err
}
relayerCloudID := ""
for _, cloudID := range clusterConfig.GetCloudIDs() {
if nodeConfig, err := app.LoadClusterNodeConfig(cloudID); err != nil {
return nil, err
} else if nodeConfig.IsAWMRelayer {
relayerCloudID = nodeConfig.NodeID
}
}
return GetHostWithCloudID(app, clusterName, relayerCloudID)
}
Loading
Loading