diff --git a/core/provider/digitalocean/provider.go b/core/provider/digitalocean/provider.go index cc7899c..9f5def9 100644 --- a/core/provider/digitalocean/provider.go +++ b/core/provider/digitalocean/provider.go @@ -189,11 +189,22 @@ func (p *Provider) CreateTask(ctx context.Context, definition provider.TaskDefin } _, _, err = task.dockerClient.ImageInspectWithRaw(ctx, definition.Image.Image) + registryAuth := doConfig["docker_auth"] if err != nil { p.logger.Info("image not found, pulling", zap.String("image", definition.Image.Image)) - if err = task.dockerClient.ImagePull(ctx, p.logger, definition.Image.Image, image.PullOptions{ - RegistryAuth: doConfig["docker_auth"], - }); err != nil { + for retries := 5; retries > 0; retries-- { + err = task.dockerClient.ImagePull(ctx, p.logger, definition.Image.Image, image.PullOptions{ + RegistryAuth: registryAuth, + }) + if err != nil { + p.logger.Info("got rate limited on docker pull, sleeping 10 seconds and going again") + time.Sleep(10 * time.Second) + } else { + break + } + } + if err != nil { + p.logger.Error("failed to pull image", zap.String("image", definition.Image.Image), zap.Error(err)) return nil, err } } diff --git a/core/types/chain.go b/core/types/chain.go index 3e49c85..1b84798 100644 --- a/core/types/chain.go +++ b/core/types/chain.go @@ -65,7 +65,8 @@ type ChainConfig struct { NumValidators int // NumValidators is the number of validators to create NumNodes int // NumNodes is the number of nodes to create - BinaryName string // BinaryName is the name of the chain binary in the Docker image + BinaryName string // BinaryName is the name of the chain binary in the Docker image + Entrypoint []string // Entrypoint is the list of arguments to invoke in the entrypoint of the Docker image Image provider.ImageDefinition // Image is the Docker ImageDefinition of the chain diff --git a/cosmos/node/init.go b/cosmos/node/init.go index a47e465..c50bab3 100644 --- a/cosmos/node/init.go +++ b/cosmos/node/init.go @@ -22,5 +22,14 @@ func (n *Node) InitHome(ctx context.Context) error { return fmt.Errorf("failed to init home (exit code %d): %s, stdout: %s", exitCode, stderr, stdout) } + clientConfig := GenerateDefaultClientConfig(n.GetChainConfig().ChainId) + if err := n.ModifyTomlConfigFile( + ctx, + "config/client.toml", + clientConfig, + ); err != nil { + return err + } + return nil } diff --git a/cosmos/node/node.go b/cosmos/node/node.go index 0c89e59..bc285c9 100644 --- a/cosmos/node/node.go +++ b/cosmos/node/node.go @@ -60,11 +60,18 @@ func CreateNode(ctx context.Context, logger *zap.Logger, infraProvider provider. node.logger.Info("creating node", zap.String("name", nodeConfig.Name)) + entrypoint := []string{chainConfig.BinaryName} + if len(chainConfig.Entrypoint) > 0 { + entrypoint = chainConfig.Entrypoint + } + def := provider.TaskDefinition{ - Name: nodeConfig.Name, - Image: chainConfig.Image, - Ports: append([]string{"9090", "26656", "26657", "26660", "1317"}, chainConfig.AdditionalPorts...), - Entrypoint: append([]string{chainConfig.BinaryName, "--home", chainConfig.HomeDir, "start"}, chainConfig.AdditionalStartFlags...), + Name: nodeConfig.Name, + Image: chainConfig.Image, + Ports: append([]string{"9090", "26656", "26657", "26660", "1317"}, chainConfig.AdditionalPorts...), + Entrypoint: append( + append(entrypoint, "--home", chainConfig.HomeDir, "start"), + chainConfig.AdditionalStartFlags...), DataDir: chainConfig.HomeDir, Environment: map[string]string{"GODEBUG": "blockprofilerate=1"}, }