From 4dd1d6526790d0d3aef22a2102066948ab6e0a82 Mon Sep 17 00:00:00 2001 From: tok-kkk Date: Wed, 20 Oct 2021 12:21:23 +1100 Subject: [PATCH 1/4] add custom command to deploy multiple darknodes at the same time --- cmd/flag.go | 6 +- cmd/main.go | 19 +++++++ cmd/provider/aws.go | 118 +++++++++++++++++++++++++++++++++++++++ cmd/provider/do.go | 4 ++ cmd/provider/gcp.go | 4 ++ cmd/provider/provider.go | 14 ++++- go.sum | 37 +----------- util/node.go | 4 +- 8 files changed, 166 insertions(+), 40 deletions(-) diff --git a/cmd/flag.go b/cmd/flag.go index b4a8579d..0afac0ee 100644 --- a/cmd/flag.go +++ b/cmd/flag.go @@ -11,6 +11,10 @@ var ( Name: "name", Usage: "A unique human-readable `string` for identifying the Darknode", } + NumberFlag = cli.IntFlag{ + Name: "n", + Usage: "Number of darknodes to deploy", + } TagsFlag = cli.StringFlag{ Name: "tags", Usage: "Multiple human-readable comma separated `strings` for identifying groups of Darknodes", @@ -25,7 +29,7 @@ var ( Usage: "Network of your Darknode (default: mainnet)", } ConfigFlag = cli.StringFlag{ - Name: "config", + Name: "config", Usage: "Path of the config file", } AddressFlag = cli.StringFlag{ diff --git a/cmd/main.go b/cmd/main.go index 20b0c038..22a7fd60 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -56,6 +56,25 @@ func main() { return p.Deploy(c) }, }, + { + Name: "multi-up", + Usage: "Deploy multiple", + Flags: []cli.Flag{ + // General + NameFlag, TagsFlag, NetworkFlag, NumberFlag, + // AWS + AwsFlag, AwsAccessKeyFlag, AwsSecretKeyFlag, + // Digital Ocean + DoFlag, DoRegionFlag, DoSizeFlag, DoTokenFlag, + }, + Action: func(c *cli.Context) error { + p, err := provider.ParseProvider(c) + if err != nil { + return err + } + return p.DeployMultiple(c) + }, + }, { Name: "destroy", Usage: "Destroy one of your Darknode", diff --git a/cmd/provider/aws.go b/cmd/provider/aws.go index 22360d3e..dc390491 100644 --- a/cmd/provider/aws.go +++ b/cmd/provider/aws.go @@ -3,9 +3,17 @@ package provider import ( "fmt" "math/rand" + "os" + "path/filepath" "strings" + "sync" + "text/template" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/ec2" + "github.com/fatih/color" "github.com/renproject/darknode-cli/darknode" "github.com/renproject/darknode-cli/util" "github.com/urfave/cli" @@ -97,6 +105,93 @@ func (p providerAws) Deploy(ctx *cli.Context) error { return outputURL(name) } +func (p providerAws) DeployMultiple(ctx *cli.Context) error { + prefix := ctx.String("name") + tags := ctx.String("tags") + n := ctx.Int("n") + + if n <= 0 { + return fmt.Errorf("invalid n, must be possitive number") + } + + regions, err := p.AvailableRegions() + if err != nil { + return err + } + + ch := make(chan awsTerraform) + wg := new(sync.WaitGroup) + + // Start 20 background workers + for i := 0; i < 5; i++ { + go func() { + for { + config := <-ch + name := config.Name + + // Initialization + network, err := darknode.NewNetwork(ctx.String("network")) + if err != nil { + color.Red("invalid network, %v", err) + return + } + if err := initNode(name, tags, network, ""); err != nil { + color.Red("failed to initialize darknode, %v", err) + return + } + + t, err := template.New("aws").Parse(awsTemplate) + if err != nil { + color.Red("failed to initialize aws template, %v", err) + return + } + tfFile, err := os.Create(filepath.Join(util.NodePath(name), "main.tf")) + if err != nil { + color.Red("failed to create terraform config, %v", err) + return + } + if err := t.Execute(tfFile, config); err != nil { + color.Red("failed to execute terraform, %v", err) + return + } + + if err := runTerraformSilent(name); err != nil { + color.Red("failed to create terraform config, %v", err) + return + } + wg.Done() + } + }() + } + + latestVersion, err := util.LatestStableRelease() + if err != nil { + return err + } + + for i := 1; i <= n; i++ { + name := fmt.Sprintf("%v-%v", prefix, i) + tf := awsTerraform{ + Name: name, + Region: regions[i%len(regions)], + InstanceType: "t3.micro", + ConfigPath: fmt.Sprintf("~/.darknode/darknodes/%v/config.json", name), + PubKeyPath: fmt.Sprintf("~/.darknode/darknodes/%v/ssh_keypair.pub", name), + PriKeyPath: fmt.Sprintf("~/.darknode/darknodes/%v/ssh_keypair", name), + AccessKey: p.accessKey, + SecretKey: p.secretKey, + ServiceFile: darknodeService, + LatestVersion: latestVersion, + } + ch <- tf + wg.Add(1) + color.Green("Deploying %v", name) + } + + wg.Wait() + return nil +} + func (p providerAws) validateRegionAndInstance(ctx *cli.Context) (string, string, error) { // TODO : use aws api to validate the region and instance type region := strings.ToLower(strings.TrimSpace(ctx.String("aws-region"))) @@ -115,3 +210,26 @@ func (p providerAws) validateRegionAndInstance(ctx *cli.Context) (string, string return region, instance, nil } + +// AvailableRegions returns all available regions +func (p providerAws) AvailableRegions() ([]string, error) { + cred := credentials.NewStaticCredentials(p.accessKey, p.secretKey, "") + sess, err := session.NewSession(&aws.Config{ + Region: aws.String("us-east-1"), + Credentials: cred, + }) + service := ec2.New(sess) + input := &ec2.DescribeRegionsInput{} + result, err := service.DescribeRegions(input) + if err != nil { + return nil, err + } + regions := make([]string, len(result.Regions)) + for i := range result.Regions { + if *result.Regions[i].RegionName == "us-east-1" || *result.Regions[i].RegionName == "" { + continue + } + regions[i] = *result.Regions[i].RegionName + } + return regions, nil +} diff --git a/cmd/provider/do.go b/cmd/provider/do.go index 16b5ae19..67b70f47 100644 --- a/cmd/provider/do.go +++ b/cmd/provider/do.go @@ -62,6 +62,10 @@ func (p providerDo) Deploy(ctx *cli.Context) error { return outputURL(name) } +func (p providerDo) DeployMultiple(ctx *cli.Context) error { + panic("implement me") +} + func validateRegionAndDroplet(ctx *cli.Context) (string, string, error) { region := ctx.String("do-region") droplet := ctx.String("do-droplet") diff --git a/cmd/provider/gcp.go b/cmd/provider/gcp.go index 1055ad0f..0ce44074 100644 --- a/cmd/provider/gcp.go +++ b/cmd/provider/gcp.go @@ -105,6 +105,10 @@ func (p providerGcp) Deploy(ctx *cli.Context) error { return outputURL(name) } +func (p providerGcp) DeployMultiple(ctx *cli.Context) error { + panic("implement me") +} + func (p providerGcp) projectID() (string, error) { data, err := ioutil.ReadFile(p.credFile) if err != nil { diff --git a/cmd/provider/provider.go b/cmd/provider/provider.go index 4a5a68b8..2790ea64 100644 --- a/cmd/provider/provider.go +++ b/cmd/provider/provider.go @@ -53,6 +53,7 @@ WantedBy=default.target` type Provider interface { Name() string Deploy(ctx *cli.Context) error + DeployMultiple(ctx *cli.Context) error } func ParseProvider(ctx *cli.Context) (Provider, error) { @@ -95,7 +96,7 @@ func initNode(name, tags string, network darknode.Network, configFile string) er var conf darknode.Config if configFile != "" { path, err := filepath.Abs(configFile) - if err != nil{ + if err != nil { return errors.New("invalid config path") } @@ -161,6 +162,17 @@ func runTerraform(name string) error { return util.Run("bash", "-c", apply) } +func runTerraformSilent(name string) error { + path := util.NodePath(name) + init := fmt.Sprintf("cd %v && terraform init", path) + if err := util.SilentRun("bash", "-c", init); err != nil { + return err + } + + apply := fmt.Sprintf("cd %v && terraform apply -auto-approve -no-color", path) + return util.SilentRun("bash", "-c", apply) +} + // outputURL writes success message and the URL for registering the node to the terminal. func outputURL(name string) error { url, err := util.RegisterUrl(name) diff --git a/go.sum b/go.sum index 3f857cee..e442feb5 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0 h1:ROfEUZz+Gh5pa62DJWXSaonyu3StP6EA6lPEXPI6mCo= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9 h1:HD8gA2tkByhMAwYaFAX9w2l7vxvBQ5NMoxDrkhqhtn4= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= @@ -12,7 +10,6 @@ github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.26.1/go.mod h1:NbSGBSSndYaIhRcBtY9V0U7AyH+x71bG668AuWys/yU= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -34,17 +31,12 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/btcsuite/btcd v0.0.0-20190807005414-4063feeff79a/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d h1:yJzD/yFppdVCf6ApMkVy8cUxV0XrxdP9rVf6D87/Mng= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd h1:qdGvebPBDuYDPGi1WCPjy1tGyMpmDK8IEapSsszn7HE= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723 h1:ZA/jbKoGcVAnER6pCHPEkGdZOV7U1oLUedErBHCUMs0= github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -68,16 +60,13 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set v1.7.1 h1:SCQV0S6gTtp6itiFrTqI+pfmJ4LN85S1YzhDf9rTHJQ= github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/dgraph-io/badger v1.6.0 h1:DshxFxZWXUcO0xX476VJC07Xsr6ZCBVRHKZ93Oh7Evo= github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger v1.6.1 h1:w9pSFNSdq/JPM1N12Fz/F/bzo993Is1W+Q7HjPzi7yg= github.com/dgraph-io/badger v1.6.1/go.mod h1:FRmFw3uxvcpa8zG3Rxs0th+hCLIuaQg8HlNV5bjgnuU= github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3 h1:jh22xisGBjrEVnRZ1DVTpBVQm0Xndu8sMl0CWDzSIBI= github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20191112170834-c2139c5d712b h1:SeiGBzKrEtuDddnBABHkp4kq9sBGE9nuYmk6FPTg0zg= github.com/dgryski/go-farm v0.0.0-20191112170834-c2139c5d712b/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= @@ -108,11 +97,9 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0 h1:8HUsc87TaSWLKwrnumgC8/YconD2fJQsRJAsWaPg2ic= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -121,9 +108,7 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9 h1:uHTyIjqVhYRhLbJ8nIiOJHkEZZ+5YoOsAbD3sk82NiE= github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -131,7 +116,6 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= @@ -147,9 +131,7 @@ github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= @@ -191,10 +173,9 @@ github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+ github.com/jbenet/go-base58 v0.0.0-20150317085156-6237cf65f3a6 h1:4zOlv2my+vf98jT1nQt4bT/yKWUImevYPJ2H344CloE= github.com/jbenet/go-base58 v0.0.0-20150317085156-6237cf65f3a6/go.mod h1:r/8JmuR0qjuCiEhAolkfvdZgmPiHTnJaG0UXCSeR1Zo= github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89 h1:12K8AlpT0/6QUXSfV0yi4Q0jkbq8NDtIKFtF61AoqV0= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -202,7 +183,6 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9 h1:ZHuwnjpP8LsVsUYqTqeVAI+GfDfJ6UNPrExZF+vX/DQ= github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.9.8/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.1/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= @@ -252,7 +232,6 @@ github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FW github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.9.0 h1:SZjF721BByVj8QH636/8S2DnX4n0Re3SteMmw3N+tzc= github.com/onsi/ginkgo v1.9.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -267,7 +246,6 @@ github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtP github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pierrec/lz4 v2.4.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -293,7 +271,6 @@ github.com/renproject/aw v0.3.7 h1:KRqeAs/ALx2EtdCHH5PqVe+tpSTclOxUDexN7O4NndI= github.com/renproject/aw v0.3.7/go.mod h1:CpgAzPcLoCoOEf9HsMMhVtWXuIGTZ1eqAGSPegmj5YI= github.com/renproject/id v0.1.1 h1:KaV31Xp7SSlyUs5O0vHIw9rhhzrJ0lTOkQXVgbgyPEU= github.com/renproject/id v0.1.1/go.mod h1:i4OJzgjl4XLcU7nfU9UshX7PaBVpnTk3gEVj8dKa6f8= -github.com/renproject/kv v1.1.0 h1:xaEVeieSSuJrTFj/uvPveyB/gLqEqurJhQLoOKJF8/s= github.com/renproject/kv v1.1.0/go.mod h1:B+LKu5xLj9t65LrbsSyzTcgLcPdWCd0qxFEtNB7NRo8= github.com/renproject/kv v1.1.2 h1:P18yHdDVJTEZ9yeyx6o82ICY1m6f+VdtAt/ouZez+AU= github.com/renproject/kv v1.1.2/go.mod h1:78bvdAtYiYxCoT9ihVhl8qdmjl7s9fST/FkRLnZ6rXY= @@ -334,12 +311,10 @@ github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUW github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/syndtr/goleveldb v1.0.1-0.20190318030020-c3a204f8e965 h1:1oFLiOyVl+W7bnBzGhf7BbIv9loSFQcieWWYIjLqcAw= github.com/syndtr/goleveldb v1.0.1-0.20190318030020-c3a204f8e965/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d h1:gZZadD8H+fF+n9CmNhYL1Y0dJB+kLOmKd7FbPJLeGHs= github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= @@ -368,7 +343,6 @@ golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708 h1:pXVtWnwHkrWD9ru3sDxY/qFK/bfc0egRovX91EjWjf4= golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -396,7 +370,6 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191112182307-2180aed22343 h1:00ohfJ4K98s3m6BGUoBd8nyfp4Yl0GoIKvw5abItTjI= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -423,9 +396,7 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191113165036-4c7a9d0fe056 h1:dHtDnRWQtSx0Hjq9kvKFpBh9uPPKfQN70NZZmvssGwk= golang.org/x/sys v0.0.0-20191113165036-4c7a9d0fe056/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -434,7 +405,6 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200722175500-76b94024e4b6 h1:X9xIZ1YU8bLZA3l6gqDUHSFiD0GFI9S548h6C8nDtOY= golang.org/x/sys v0.0.0-20200722175500-76b94024e4b6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= @@ -456,21 +426,18 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt google.golang.org/api v0.13.0 h1:Q3Ui3V3/CVinFWFiW39Iw0kMuVrRzYX0wN6OPFp0lTA= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873 h1:nfPFGzJkUDX6uBmpN/pSw7MbOAWegH5QDQuoXFHedLg= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200218151345-dad8c97a84f5/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1 h1:Hz2g2wirWK7H0qIIhGIqRGTuMwTE8HEKFnDZZ7lm9NU= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -488,7 +455,6 @@ google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4 google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/bsm/ratelimit.v1 v1.0.0-20160220154919-db14e161995a/go.mod h1:KF9sEfUPAXdG8Oev9e99iLGnl2uJMjc5B+4y3O7x610= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= @@ -510,7 +476,6 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWD gopkg.in/urfave/cli.v1 v1.20.0 h1:NdAVW6RYxDif9DhDHaAortIu956m2c0v+09AZBPTbE0= gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/util/node.go b/util/node.go index 78437822..ccd8d395 100644 --- a/util/node.go +++ b/util/node.go @@ -172,7 +172,7 @@ func LatestStableRelease() (string, error) { client := github.NewClient(nil) opts := &github.ListOptions{ - PerPage: 25, + PerPage: 50, } latest, err := version.NewVersion("0.0.0") if err != nil { @@ -206,7 +206,7 @@ func LatestStableRelease() (string, error) { } } } - if response.NextPage == 0{ + if response.NextPage == 0 { break } opts.Page = response.NextPage From de91032fe3c04bfde20f7942bea738f526cd9f15 Mon Sep 17 00:00:00 2001 From: tok-kkk Date: Wed, 20 Oct 2021 14:44:12 +1100 Subject: [PATCH 2/4] update register command to output the contract call params --- cmd/main.go | 60 ++++++++++++++++++++++++++++++++++------ cmd/provider/aws.go | 4 +-- cmd/provider/provider.go | 2 +- 3 files changed, 54 insertions(+), 12 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index 22a7fd60..19b02603 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "encoding/json" "log" "math/rand" "os" @@ -12,6 +13,8 @@ import ( "github.com/google/go-github/github" "github.com/hashicorp/go-version" "github.com/renproject/darknode-cli/cmd/provider" + "github.com/renproject/darknode-cli/darknode" + "github.com/renproject/darknode-cli/darknode/addr" "github.com/renproject/darknode-cli/util" "github.com/urfave/cli" ) @@ -168,20 +171,59 @@ func main() { { Name: "register", Usage: "Redirect you to the register page of a particular darknode", - Flags: []cli.Flag{}, + Flags: []cli.Flag{TagsFlag}, Action: func(c *cli.Context) error { name := c.Args().First() - if err := util.ValidateNodeName(name); err != nil { - return err + tags := c.String("tags") + + type Call struct { + DarknodeName string `json:"darknode_name"` + DarknodeID string `json:"_darknodeID"` } + if tags != "" { + nodes, err := util.GetNodesByTags(tags) + if err != nil { + return err + } + calls := make([]Call, len(nodes)) - url, err := util.RegisterUrl(name) - if err != nil { - return err + for i, node := range nodes { + path := filepath.Join(util.NodePath(node), "config.json") + config, err := darknode.NewConfigFromJSONFile(path) + if err != nil { + return err + } + id := addr.FromPublicKey(config.Keystore.Ecdsa.PublicKey) + ethAddr, err := id.ToEthereumAddress() + if err != nil { + return err + } + calls[i] = Call{ + DarknodeName: node, + DarknodeID: ethAddr.Hex(), + } + } + + data, err := json.MarshalIndent(calls, "", " ") + if err != nil { + return err + } + color.Green("%v", string(data)) + + return nil + } else { + if err := util.ValidateNodeName(name); err != nil { + return err + } + + url, err := util.RegisterUrl(name) + if err != nil { + return err + } + color.Green("If the browser doesn't open for you, please copy the following url and open in browser.") + color.Green(url) + return util.OpenInBrowser(url) } - color.Green("If the browser doesn't open for you, please copy the following url and open in browser.") - color.Green(url) - return util.OpenInBrowser(url) }, }, } diff --git a/cmd/provider/aws.go b/cmd/provider/aws.go index dc390491..8bb43ef3 100644 --- a/cmd/provider/aws.go +++ b/cmd/provider/aws.go @@ -224,12 +224,12 @@ func (p providerAws) AvailableRegions() ([]string, error) { if err != nil { return nil, err } - regions := make([]string, len(result.Regions)) + regions := make([]string, 0, len(result.Regions)) for i := range result.Regions { if *result.Regions[i].RegionName == "us-east-1" || *result.Regions[i].RegionName == "" { continue } - regions[i] = *result.Regions[i].RegionName + regions = append(regions, *result.Regions[i].RegionName) } return regions, nil } diff --git a/cmd/provider/provider.go b/cmd/provider/provider.go index 2790ea64..db4d9dc1 100644 --- a/cmd/provider/provider.go +++ b/cmd/provider/provider.go @@ -117,7 +117,7 @@ func initNode(name, tags string, network darknode.Network, configFile string) er } } - configData, err := json.MarshalIndent(conf, "", " ") + configData, err := json.MarshalIndent(conf, "", " ") if err != nil { return err } From 974b86ae187327d2e0097705b641a0d5d1ca1129 Mon Sep 17 00:00:00 2001 From: tok-kkk Date: Wed, 20 Oct 2021 15:12:38 +1100 Subject: [PATCH 3/4] update version file --- VERSION | 2 +- cmd/provider/aws.go | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/VERSION b/VERSION index 312883d2..b8a66b97 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.0.15 \ No newline at end of file +3.0.16-beta \ No newline at end of file diff --git a/cmd/provider/aws.go b/cmd/provider/aws.go index 8bb43ef3..35b81009 100644 --- a/cmd/provider/aws.go +++ b/cmd/provider/aws.go @@ -226,9 +226,6 @@ func (p providerAws) AvailableRegions() ([]string, error) { } regions := make([]string, 0, len(result.Regions)) for i := range result.Regions { - if *result.Regions[i].RegionName == "us-east-1" || *result.Regions[i].RegionName == "" { - continue - } regions = append(regions, *result.Regions[i].RegionName) } return regions, nil From d9d9783373298e944f208f7bb133a36610f80f5c Mon Sep 17 00:00:00 2001 From: tok-kkk Date: Tue, 9 Nov 2021 09:42:15 +1100 Subject: [PATCH 4/4] automatically check the starting index --- VERSION | 2 +- cmd/provider/aws.go | 84 ++++++++++++++++++++++++++------------------- 2 files changed, 50 insertions(+), 36 deletions(-) diff --git a/VERSION b/VERSION index b8a66b97..ea5d8eae 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.0.16-beta \ No newline at end of file +3.0.16-beta2 \ No newline at end of file diff --git a/cmd/provider/aws.go b/cmd/provider/aws.go index 35b81009..6abda776 100644 --- a/cmd/provider/aws.go +++ b/cmd/provider/aws.go @@ -126,40 +126,42 @@ func (p providerAws) DeployMultiple(ctx *cli.Context) error { for i := 0; i < 5; i++ { go func() { for { - config := <-ch - name := config.Name - - // Initialization - network, err := darknode.NewNetwork(ctx.String("network")) - if err != nil { - color.Red("invalid network, %v", err) - return - } - if err := initNode(name, tags, network, ""); err != nil { - color.Red("failed to initialize darknode, %v", err) - return - } - - t, err := template.New("aws").Parse(awsTemplate) - if err != nil { - color.Red("failed to initialize aws template, %v", err) - return - } - tfFile, err := os.Create(filepath.Join(util.NodePath(name), "main.tf")) - if err != nil { - color.Red("failed to create terraform config, %v", err) - return - } - if err := t.Execute(tfFile, config); err != nil { - color.Red("failed to execute terraform, %v", err) - return - } - - if err := runTerraformSilent(name); err != nil { - color.Red("failed to create terraform config, %v", err) - return - } - wg.Done() + func() { + config := <-ch + name := config.Name + defer wg.Done() + + // Initialization + network, err := darknode.NewNetwork(ctx.String("network")) + if err != nil { + color.Red("invalid network, %v", err) + return + } + if err := initNode(name, tags, network, ""); err != nil { + color.Red("failed to initialize darknode, %v", err) + return + } + + t, err := template.New("aws").Parse(awsTemplate) + if err != nil { + color.Red("failed to initialize aws template, %v", err) + return + } + tfFile, err := os.Create(filepath.Join(util.NodePath(name), "main.tf")) + if err != nil { + color.Red("failed to create terraform config, %v", err) + return + } + if err := t.Execute(tfFile, config); err != nil { + color.Red("failed to execute terraform, %v", err) + return + } + + if err := runTerraformSilent(name); err != nil { + color.Red("failed to create terraform config, %v", err) + return + } + }() } }() } @@ -169,7 +171,19 @@ func (p providerAws) DeployMultiple(ctx *cli.Context) error { return err } - for i := 1; i <= n; i++ { + // Found the starting index + startIndex := 1 + for ; startIndex <= 1000; startIndex ++ { + name := fmt.Sprintf("%v-%v", prefix, startIndex) + if err := util.ValidateNodeName(name); err != nil { + break + } + } + if startIndex == 999 { + return fmt.Errorf("try using a different prefix for your darknodes") + } + + for i := startIndex; i < startIndex + n ; i++ { name := fmt.Sprintf("%v-%v", prefix, i) tf := awsTerraform{ Name: name,