diff --git a/lib/config/genconfig/awshaprovisionconfig.go b/lib/config/genconfig/awshaprovisionconfig.go index 7a29c5a9c27..1040d4c523a 100644 --- a/lib/config/genconfig/awshaprovisionconfig.go +++ b/lib/config/genconfig/awshaprovisionconfig.go @@ -13,6 +13,8 @@ const ( AWS_MACHINE_TYPE_REGEX = "^((a1|c1|c3|c4|c5|c5a|c5ad|c5d|c5n|c6a|c6g|c6gd|c6gn|c6i|c6id|c7g|cc2|d2|d3|d3en|dl1|f1|g2|g3|g3s|g4ad|g4dn|g5|g5g|h1|i2|i3|i3en|i4i|im4gn|inf1|is4gen|m1|m2|m3|m4|m5|m5a|m5ad|m5d|m5dn|m5n|m5zn|m6a|m6g|m6gd|m6i|m6id|mac1|mac2|p2|p3|p3dn|p4d|r3|r4|r5|r5a|r5ad|r5b|r5d|r5dn|r5n|r6a|r6g|r6gd|r6i|r6id|t1|t2|t3|t3a|t4g|trn1|u-12tb1|u-3tb1|u-6tb1|u-9tb1|vt1|x1|x1e|x2gd|x2idn|x2iedn|x2iezn|z1d)\\.(10xlarge|112xlarge|12xlarge|16xlarge|18xlarge|24xlarge|2xlarge|32xlarge|3xlarge|48xlarge|4xlarge|56xlarge|6xlarge|8xlarge|9xlarge|large|medium|metal|micro|nano|small|xlarge))$" AWS_VOL_TYPE_REGEX = "^(gp2|gp3|io2|io1|st1|sc1)$" IP_REGEX = "^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}$" + URL_OPTIONAL_PORT = "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9](:{1}[0-9]{1,5})?$" + URL_REQUIRED_PORT = "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]:{1}[0-9]{1,5}$" ) type AwsHaProvisionConfig struct { @@ -35,11 +37,27 @@ func (c *AwsHaProvisionConfig) Toml() (tomlBytes []byte, err error) { } func (c *AwsHaProvisionConfig) Prompts() (err error) { + err = c.PromptAwsArchitecture() + if err != nil { + return + } + err = c.PromptAwsConfig() if err != nil { return } + err = c.PromptBackup() + if err != nil { + return + } + + err = c.Config.Verify() + if err != nil { + fmt.Println("ERRORs in Validation:\n", err) + return nil + } + return } @@ -133,7 +151,7 @@ func (c *AwsHaProvisionConfig) PromptRegion() (err error) { } func (c *AwsHaProvisionConfig) PromptVpcId() (err error) { - vpcId, err := c.Prompt.InputString("AWS VPC ID") + vpcId, err := c.Prompt.InputStringRequired("AWS VPC ID") if err != nil { return } @@ -214,7 +232,7 @@ func (c *AwsHaProvisionConfig) PromptPublicSubnet() (err error) { } func (c *AwsHaProvisionConfig) PromptSshKeyPairName() (err error) { - sshKeyPairName, err := c.Prompt.InputString("AWS SSH Key Pair Name") + sshKeyPairName, err := c.Prompt.InputStringRequired("AWS SSH Key Pair Name") if err != nil { return } @@ -223,7 +241,7 @@ func (c *AwsHaProvisionConfig) PromptSshKeyPairName() (err error) { } func (c *AwsHaProvisionConfig) PromptAmi() (err error) { - amiId, err := c.Prompt.InputString("AWS AMI ID") + amiId, err := c.Prompt.InputStringRequired("AWS AMI ID") if err != nil { return } @@ -318,7 +336,7 @@ func (c *AwsHaProvisionConfig) PromptAwsManagedPostgresql() (err error) { } func (c *AwsHaProvisionConfig) PromptPgUrl() (err error) { - pgUrl, err := c.Prompt.InputStringRegex("AWS Managed RDS PostgreSQL URL", "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9](:{1}[0-9]{1,5})?$") + pgUrl, err := c.Prompt.InputStringRegex("AWS Managed RDS PostgreSQL URL:", URL_REQUIRED_PORT) if err != nil { return } @@ -437,7 +455,7 @@ func (c *AwsHaProvisionConfig) PromptOsDomainName() (err error) { } func (c *AwsHaProvisionConfig) PromptOsDomainUrl() (err error) { - osDomainUrl, err := c.Prompt.InputStringRegex("AWS Managed OpenSearch Domain URL", "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9](:{1}[0-9]{1,5})?$") + osDomainUrl, err := c.Prompt.InputStringRegex("AWS Managed OpenSearch Domain URL", URL_OPTIONAL_PORT) if err != nil { return } @@ -526,11 +544,33 @@ func (c *AwsHaProvisionConfig) PromptChefManaged() (err error) { } func (c *AwsHaProvisionConfig) PromptAutomate() (err error) { + err = c.PromptAutomateFqdn() + if err != nil { + return + } + err = c.PromptAutomateLoadBalancerCertArn() if err != nil { return } + err = c.PromptAutomateFqdnRootCa() + if err != nil { + return + } + + c.DefaultAutomateConfigValues() + + err = c.PromptAutomateAdminPassword() + if err != nil { + return + } + + err = c.PromptAutomateNodes() + if err != nil { + return + } + err = c.PromptAutomateInstanceType() if err != nil { return @@ -554,11 +594,26 @@ func (c *AwsHaProvisionConfig) PromptAutomate() (err error) { } func (c *AwsHaProvisionConfig) PromptChefInfraServer() (err error) { + err = c.PromptChefInfraServerFqdn() + if err != nil { + return + } + err = c.PromptChefInfrServerLoadBalancerCertArn() if err != nil { return } + err = c.PromptChefInfraServerFqdnRootCa() + if err != nil { + return + } + + err = c.PromptChefInfraServerNodes() + if err != nil { + return + } + err = c.PromptChefInfraServerInstanceType() if err != nil { return @@ -582,6 +637,11 @@ func (c *AwsHaProvisionConfig) PromptChefInfraServer() (err error) { } func (c *AwsHaProvisionConfig) PromptPgChefManaged() (err error) { + err = c.PromptPostgresqlNodes() + if err != nil { + return + } + err = c.PromptPostgresqlInstanceType() if err != nil { return @@ -605,6 +665,11 @@ func (c *AwsHaProvisionConfig) PromptPgChefManaged() (err error) { } func (c *AwsHaProvisionConfig) PromptOsChefManaged() (err error) { + err = c.PromptOpenSearchNodes() + if err != nil { + return + } + err = c.PromptOpenSearchInstanceType() if err != nil { return @@ -627,6 +692,126 @@ func (c *AwsHaProvisionConfig) PromptOsChefManaged() (err error) { return } +func (c *AwsHaProvisionConfig) DefaultAutomateConfigValues() { + c.Config.InitAutomate().InitConfig() + c.Config.Automate.Config.ConfigFile = "configs/automate.toml" +} + +func (c *AwsHaProvisionConfig) PromptAutomateFqdn() (err error) { + automateFqdn, err := c.Prompt.InputStringRegex("Automate FQDN", "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$") + if err != nil { + return + } + c.Config.InitAutomate().InitConfig() + c.Config.Automate.Config.Fqdn = automateFqdn + return +} + +func (c *AwsHaProvisionConfig) PromptAutomateFqdnRootCa() (err error) { + automateFqdnRootCaFilePath, err := c.Prompt.InputExistingFilePath("Automate FQDN Root CA File Path") + if err != nil { + return + } + + automateFqdnRootCaFile, err := c.FileUtils.ReadFile(automateFqdnRootCaFilePath) + if err != nil { + return + } + + automateFqdnRootCa := string(automateFqdnRootCaFile) + + c.Config.InitAutomate().InitConfig() + c.Config.Automate.Config.FqdnRootCA = automateFqdnRootCa + return +} + +func (c *AwsHaProvisionConfig) PromptHaveCustomCerts(nodeType string) (customCerts bool, err error) { + if c.HasCustomCerts { + customCerts, err = c.Prompt.Confirm("Do you have custom certs for "+nodeType+" Nodes", "yes", "no") + if err != nil { + return + } + } + return +} + +func (c *AwsHaProvisionConfig) PromptPrivatePublicCert(nodeType string) (privateKey, publicKey string, err error) { + msgPubKey := "Provide Cert Public Key file path for " + nodeType + " Node" + msgPriKey := "Provide Cert Private Key file path for " + nodeType + " Node" + + publicKeyFilePath, err := c.Prompt.InputExistingFilePath(msgPubKey) + if err != nil { + return + } + + fmt.Println() + fmt.Println() + + privateKeyFilePath, err := c.Prompt.InputExistingFilePath(msgPriKey) + if err != nil { + return + } + + publicKeyFile, err := c.FileUtils.ReadFile(publicKeyFilePath) + if err != nil { + return + } + + publicKey = string(publicKeyFile) + + privateKeyFile, err := c.FileUtils.ReadFile(privateKeyFilePath) + if err != nil { + return + } + + privateKey = string(privateKeyFile) + + return +} + +func (c *AwsHaProvisionConfig) PromptNodeIp(msg string) (ip string, err error) { + ip, err = c.Prompt.InputStringRegex(msg, IP_REGEX) + if err != nil { + return + } + return +} + +func (c *AwsHaProvisionConfig) PromptAutomateNodes() (err error) { + automateNodeCount, err := c.Prompt.InputIntRange("No. of Automate Nodes", 1, 100) + if err != nil { + return + } + c.Config.InitAutomate().InitConfig() + c.Config.Automate.Config.InstanceCount = fmt.Sprint(automateNodeCount) + + hasCustomCerts, err := c.PromptHaveCustomCerts("Automate") + if err != nil { + return err + } + + c.Config.Automate.Config.EnableCustomCerts = hasCustomCerts + + if hasCustomCerts { + priKey, pubKey, err := c.PromptPrivatePublicCert("Automate") + if err != nil { + return err + } + c.Config.Automate.Config.PrivateKey = priKey + c.Config.Automate.Config.PublicKey = pubKey + } + return +} + +func (c *AwsHaProvisionConfig) PromptAutomateAdminPassword() (err error) { + adminPass, err := c.Prompt.InputPasswordRegex("Automate Dashboard Admin User Password", "^.{8,35}$") + if err != nil { + return + } + c.Config.InitAutomate().InitConfig().AdminPassword = adminPass + return +} + func (c *AwsHaProvisionConfig) PromptAutomateInstanceType() (err error) { instanceType, err := c.Prompt.InputStringRegexDefault("AWS Instance type for Automate", AWS_MACHINE_TYPE_REGEX, "t3.medium") if err != nil { @@ -636,6 +821,61 @@ func (c *AwsHaProvisionConfig) PromptAutomateInstanceType() (err error) { return } +func (c *AwsHaProvisionConfig) PromptChefInfraServerFqdn() (err error) { + chefInfraServerFqdn, err := c.Prompt.InputStringRegex("Chef Infra Server FQDN", "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$") + if err != nil { + return + } + c.Config.InitChefServer().InitConfig() + c.Config.ChefServer.Config.ChefServerFqdn = chefInfraServerFqdn + return +} + +func (c *AwsHaProvisionConfig) PromptChefInfraServerFqdnRootCa() (err error) { + chefInfraServerFqdnRootCaFilePath, err := c.Prompt.InputExistingFilePath("Chef Infra Server FQDN Root CA File Path") + if err != nil { + return + } + + chefInfraServerFqdnRootCaFile, err := c.FileUtils.ReadFile(chefInfraServerFqdnRootCaFilePath) + if err != nil { + return + } + + chefInfraServerFqdnRootCa := string(chefInfraServerFqdnRootCaFile) + + c.Config.InitChefServer().InitConfig() + c.Config.ChefServer.Config.FqdnRootCA = chefInfraServerFqdnRootCa + return +} + +func (c *AwsHaProvisionConfig) PromptChefInfraServerNodes() (err error) { + chefServerNodeCount, err := c.Prompt.InputIntRange("No. of Chef Infra Server Nodes", 1, 100) + if err != nil { + return + } + c.Config.InitChefServer().InitConfig() + c.Config.ChefServer.Config.InstanceCount = fmt.Sprint(chefServerNodeCount) + + hasCustomCerts, err := c.PromptHaveCustomCerts("Chef Infra Server") + if err != nil { + return err + } + + c.Config.Automate.Config.EnableCustomCerts = hasCustomCerts + + if hasCustomCerts { + priKey, pubKey, err := c.PromptPrivatePublicCert("Chef Infra Server") + if err != nil { + return err + } + c.Config.ChefServer.Config.PrivateKey = priKey + c.Config.ChefServer.Config.PublicKey = pubKey + } + + return +} + func (c *AwsHaProvisionConfig) PromptChefInfraServerInstanceType() (err error) { instanceType, err := c.Prompt.InputStringRegexDefault("AWS Instance type for Chef Infra Server", AWS_MACHINE_TYPE_REGEX, "t3.medium") if err != nil { @@ -681,6 +921,32 @@ func (c *AwsHaProvisionConfig) PromptChefInfraServerVolSize() (err error) { return } +func (c *AwsHaProvisionConfig) PromptPostgresqlNodes() (err error) { + postgresqlNodeCount, err := c.Prompt.InputIntRange("No. of Postgresql Nodes", 1, 100) + if err != nil { + return + } + c.Config.InitPostgresql().InitConfig() + c.Config.Postgresql.Config.InstanceCount = fmt.Sprint(postgresqlNodeCount) + + hasCustomCerts, err := c.PromptHaveCustomCerts("Postgresql") + if err != nil { + return err + } + + c.Config.Automate.Config.EnableCustomCerts = hasCustomCerts + + if hasCustomCerts { + priKey, pubKey, err := c.PromptPrivatePublicCert("Postgresql") + if err != nil { + return err + } + c.Config.Postgresql.Config.PrivateKey = priKey + c.Config.Postgresql.Config.PublicKey = pubKey + } + return +} + func (c *AwsHaProvisionConfig) PromptPostgresqlVolSize() (err error) { size, err := c.Prompt.InputIntDefaultRange("AWS EBS Volume Size for PostgreSQL", 200, 200, 16384) if err != nil { @@ -690,6 +956,32 @@ func (c *AwsHaProvisionConfig) PromptPostgresqlVolSize() (err error) { return } +func (c *AwsHaProvisionConfig) PromptOpenSearchNodes() (err error) { + opensearchNodeCount, err := c.Prompt.InputIntRange("No. of OpenSearch Nodes", 1, 100) + if err != nil { + return + } + c.Config.InitOpenSearch().InitConfig() + c.Config.Opensearch.Config.InstanceCount = fmt.Sprint(opensearchNodeCount) + + hasCustomCerts, err := c.PromptHaveCustomCerts("OpenSearch") + if err != nil { + return err + } + + c.Config.Automate.Config.EnableCustomCerts = hasCustomCerts + + if hasCustomCerts { + priKey, pubKey, err := c.PromptPrivatePublicCert("OpenSearch") + if err != nil { + return err + } + c.Config.Opensearch.Config.PrivateKey = priKey + c.Config.Opensearch.Config.PublicKey = pubKey + } + return +} + func (c *AwsHaProvisionConfig) PromptOpenSearchVolSize() (err error) { size, err := c.Prompt.InputIntDefaultRange("AWS EBS Volume Size for OpenSearch", 200, 200, 16384) if err != nil { @@ -797,3 +1089,137 @@ func (c *AwsHaProvisionConfig) PromptLoadBalancerAccessLogs() (err error) { c.Config.InitAws().InitConfigAwsSettings().LbAccessLogs = fmt.Sprint(enableAccessLogs) return } + +func (c *AwsHaProvisionConfig) DefaultAwsValues() { + c.Config.InitArchitecture().InitAws() + c.Config.Architecture.Aws.SecretsKeyFile = "/hab/a2_deploy_workspace/secrets.key" + c.Config.Architecture.Aws.SecretsStoreFile = "/hab/a2_deploy_workspace/secrets.json" + c.Config.Architecture.Aws.Architecture = "aws" + c.Config.Architecture.Aws.WorkspacePath = "/hab/a2_deploy_workspace" +} + +func (c *AwsHaProvisionConfig) PromptAwsArchitecture() (err error) { + c.DefaultAwsValues() + + err = c.PromptSsh() + if err != nil { + return + } + + err = c.PromptCustomCerts() + if err != nil { + return + } + + return +} + +func (c *AwsHaProvisionConfig) PromptSsh() (err error) { + sshUser, err := c.PromptSshUser() + if err != nil { + return + } + + err = c.PromptSshGroup(sshUser) + if err != nil { + return + } + + err = c.PromptSshPort() + if err != nil { + return + } + + err = c.PromptSshKey() + if err != nil { + return + } + return +} + +func (c *AwsHaProvisionConfig) PromptSshUser() (sshUser string, err error) { + sshUser, err = c.Prompt.InputWord("SSH User Name") + if err != nil { + return + } + c.Config.InitArchitecture().InitAws() + c.Config.Architecture.Aws.SSHUser = sshUser + return +} + +func (c *AwsHaProvisionConfig) PromptSshGroup(sshUser string) (err error) { + sshGroup, err := c.Prompt.InputWordDefault("SSH Group", sshUser) + if err != nil { + return + } + c.Config.InitArchitecture().InitAws() + c.Config.Architecture.Aws.SSHGroupName = sshGroup + return +} + +func (c *AwsHaProvisionConfig) PromptSshPort() (err error) { + sshPort, err := c.Prompt.InputWordDefault("SSH Port", "22") + if err != nil { + return + } + c.Config.InitArchitecture().InitAws() + c.Config.Architecture.Aws.SSHPort = sshPort + return +} + +func (c *AwsHaProvisionConfig) PromptSshKey() (err error) { + sshKeyFile, err := c.Prompt.InputExistingFilePath("SSH Private Key File Path [*.pem downloaded for SSH Key Pair from AWS]") + if err != nil { + return + } + c.Config.InitArchitecture().InitAws() + c.Config.Architecture.Aws.SSHKeyFile = sshKeyFile + return +} + +func (c *AwsHaProvisionConfig) PromptCustomCerts() (err error) { + noCustomCerts, err := c.Prompt.Confirm("Will you use custom certs for any service like Automate, Chef Infra Server, PostgreSQL, OpenSearch", "no", "yes") + if err != nil { + return + } + c.HasCustomCerts = !noCustomCerts + c.Config.InitAutomate().InitConfig().EnableCustomCerts = c.HasCustomCerts + c.Config.InitChefServer().InitConfig().EnableCustomCerts = c.HasCustomCerts + c.Config.InitPostgresql().InitConfig().EnableCustomCerts = c.HasCustomCerts + c.Config.InitOpenSearch().InitConfig().EnableCustomCerts = c.HasCustomCerts + return +} + +func (c *AwsHaProvisionConfig) PromptBackup() (err error) { + isBackupNeeded, err := c.Prompt.Confirm("Backup need to be configured during deployment", "yes", "no") + if isBackupNeeded { + c.Config.InitArchitecture().InitAws().BackupMount = "/mnt/automate_backups" + backupConfig := "s3" + + if !c.Config.InitAws().InitConfigAwsSettings().SetupManagedServices { + backupOption, err1 := c.Prompt.Select("Which backup option will you use", "AWS S3", "EFS") + if err1 != nil { + return err1 + } + switch backupOption { + case "AWS S3": + backupConfig = "s3" + case "EFS": + backupConfig = "efs" + } + } + + c.Config.InitArchitecture().InitAws().BackupConfig = backupConfig + + if backupConfig == "s3" { + + s3Bucket, err1 := c.Prompt.InputStringRequired("AWS S3 Bucket Name") + if err1 != nil { + return err1 + } + c.Config.InitArchitecture().InitAws().S3BucketName = s3Bucket + } + + } + return +} diff --git a/lib/config/genconfig/awshaprovisionconfig_test.go b/lib/config/genconfig/awshaprovisionconfig_test.go index 37fee18dc3f..56530df524a 100644 --- a/lib/config/genconfig/awshaprovisionconfig_test.go +++ b/lib/config/genconfig/awshaprovisionconfig_test.go @@ -86,8 +86,8 @@ func TestPromptsCidrAWSManaged(t *testing.T) { chefInfraServerInstanceVolIops := "\r" input(b, chefInfraServerInstanceVolIops) - managedDb := "\r" - input(b, managedDb) + awsManagedDb := "\r" + input(b, awsManagedDb) osDomainName := "opensearch-domain-name\n" input(b, osDomainName) @@ -151,211 +151,7 @@ func TestPromptsCidrAWSManaged(t *testing.T) { assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) - -} - -func TestPromptsErr(t *testing.T) { - profile := "" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - // pad(len(profile), b) - - // region := "Asia" + moveDown + "\r" - // b.WriteString(region) - // pad(len(region), b) - - // vpcId := "vpc-1234\n" - // b.WriteString(vpcId) - // pad(len(vpcId), b) - - // chooseCidrBlock := "\r" - // b.WriteString(chooseCidrBlock) - // pad(len(chooseCidrBlock), b) - - // ciderBlockAddr := "172.31.192.0\n" - // b.WriteString(ciderBlockAddr) - // pad(len(ciderBlockAddr), b) - - // sshKeyPairName := "my-ssh-key\n" - // b.WriteString(sshKeyPairName) - // pad(len(sshKeyPairName), b) - - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.NotNil(t, config.Config) - assert.Nil(t, config.Config.Aws) - // assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - // assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - // assert.Equal(t, "172.31.192.0", config.Config.Aws.Config.AwsCidrBlockAddr) - // assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) - -} - -func TestPromptsErrCidr(t *testing.T) { - profile := "default\n" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - // chooseCidrBlock := "\r" - // b.WriteString(chooseCidrBlock) - // pad(len(chooseCidrBlock), b) - - // ciderBlockAddr := "172.31.192.0\n" - // b.WriteString(ciderBlockAddr) - // pad(len(ciderBlockAddr), b) - - // sshKeyPairName := "my-ssh-key\n" - // b.WriteString(sshKeyPairName) - // pad(len(sshKeyPairName), b) - - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - assert.Equal(t, "", config.Config.Aws.Config.AwsCidrBlockAddr) - // assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) - -} - -func TestPromptsErrCidrBlockAddr(t *testing.T) { - profile := "default\n" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - chooseCidrBlock := "\r" - b.WriteString(chooseCidrBlock) - pad(len(chooseCidrBlock), b) - - // ciderBlockAddr := "172.31.192.0\n" - // b.WriteString(ciderBlockAddr) - // pad(len(ciderBlockAddr), b) - - // sshKeyPairName := "my-ssh-key\n" - // b.WriteString(sshKeyPairName) - // pad(len(sshKeyPairName), b) - - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - assert.Equal(t, "", config.Config.Aws.Config.AwsCidrBlockAddr) - // assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) - + assert.Equal(t, "true", config.Config.Aws.Config.LbAccessLogs) } func TestPromptsPublicSubnetsChefManaged(t *testing.T) { @@ -437,99 +233,32 @@ func TestPromptsPublicSubnetsChefManaged(t *testing.T) { chefInfraServerInstanceVolIops := "\r" input(b, chefInfraServerInstanceVolIops) - managedDb := moveDown + "\r" - input(b, managedDb) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.NoError(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - assert.Equal(t, []string{"172.31.192.1", "172.31.192.2", "172.31.192.3"}, config.Config.Aws.Config.PrivateCustomSubnets) - assert.Equal(t, []string{"172.31.192.4", "172.31.192.5", "172.31.192.6"}, config.Config.Aws.Config.PublicCustomSubnets) - assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrProfile(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - // pad(len(profile), b) - - // region := "Asia" + moveDown + "\r" - // b.WriteString(region) - // pad(len(region), b) - - // vpcId := "vpc-1234\n" - // b.WriteString(vpcId) - // pad(len(vpcId), b) - - // chooseCidrBlock := moveDown + "\r" - // b.WriteString(chooseCidrBlock) - // pad(len(chooseCidrBlock), b) - - // priSubnet1 := "172.31.192.1\n" - // b.WriteString(priSubnet1) - // pad(len(priSubnet1), b) - - // priSubnet2 := "172.31.192.2\n" - // b.WriteString(priSubnet2) - // pad(len(priSubnet2), b) - - // priSubnet3 := "172.31.192.3\n" - // b.WriteString(priSubnet3) - // pad(len(priSubnet3), b) - - // choosePubSubnet := "\r" - // b.WriteString(choosePubSubnet) - // pad(len(choosePubSubnet), b) + chefManagedDb := moveDown + "\r" + input(b, chefManagedDb) - // pubSubnet1 := "172.31.192.4\n" - // b.WriteString(pubSubnet1) - // pad(len(pubSubnet1), b) + postgresqlInstanceType := "\r" + input(b, postgresqlInstanceType) - // pubSubnet2 := "172.31.192.5\n" - // b.WriteString(pubSubnet2) - // pad(len(pubSubnet2), b) + postgresqlInstanceVolSize := "\r" + input(b, postgresqlInstanceVolSize) - // pubSubnet3 := "172.31.192.6\n" - // b.WriteString(pubSubnet3) - // pad(len(pubSubnet3), b) + postgresqlInstanceVolType := "\r" + input(b, postgresqlInstanceVolType) - // sshKeyPairName := "my-ssh-key\n" - // b.WriteString(sshKeyPairName) - // pad(len(sshKeyPairName), b) + postgresqlInstanceVolIops := "\r" + input(b, postgresqlInstanceVolIops) - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) + opensearchInstanceType := "\r" + input(b, opensearchInstanceType) - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) + opensearchInstanceVolSize := "\r" + input(b, opensearchInstanceVolSize) - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) + opensearchInstanceVolType := "\r" + input(b, opensearchInstanceVolType) - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) + opensearchInstanceVolIops := "\r" + input(b, opensearchInstanceVolIops) outBuf := &bytes.Buffer{} out := ioutils.NewNopWriteCloser(outBuf) @@ -543,1286 +272,7 @@ func TestPromptsErrProfile(t *testing.T) { err := config.Prompts() - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - // assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - // assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - // assert.Equal(t, []string{"172.31.192.1", "172.31.192.2", "172.31.192.3"}, config.Config.Aws.Config.PrivateCustomSubnets) - // assert.Equal(t, []string{"172.31.192.4", "172.31.192.5", "172.31.192.6"}, config.Config.Aws.Config.PublicCustomSubnets) - // assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrVpc(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - // vpcId := "vpc-1234\n" - // b.WriteString(vpcId) - // pad(len(vpcId), b) - - // chooseCidrBlock := moveDown + "\r" - // b.WriteString(chooseCidrBlock) - // pad(len(chooseCidrBlock), b) - - // priSubnet1 := "172.31.192.1\n" - // b.WriteString(priSubnet1) - // pad(len(priSubnet1), b) - - // priSubnet2 := "172.31.192.2\n" - // b.WriteString(priSubnet2) - // pad(len(priSubnet2), b) - - // priSubnet3 := "172.31.192.3\n" - // b.WriteString(priSubnet3) - // pad(len(priSubnet3), b) - - // choosePubSubnet := "\r" - // b.WriteString(choosePubSubnet) - // pad(len(choosePubSubnet), b) - - // pubSubnet1 := "172.31.192.4\n" - // b.WriteString(pubSubnet1) - // pad(len(pubSubnet1), b) - - // pubSubnet2 := "172.31.192.5\n" - // b.WriteString(pubSubnet2) - // pad(len(pubSubnet2), b) - - // pubSubnet3 := "172.31.192.6\n" - // b.WriteString(pubSubnet3) - // pad(len(pubSubnet3), b) - - // sshKeyPairName := "my-ssh-key\n" - // b.WriteString(sshKeyPairName) - // pad(len(sshKeyPairName), b) - - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "", config.Config.Aws.Config.AwsVpcID) - // assert.Equal(t, []string{"172.31.192.1", "172.31.192.2", "172.31.192.3"}, config.Config.Aws.Config.PrivateCustomSubnets) - // assert.Equal(t, []string{"172.31.192.4", "172.31.192.5", "172.31.192.6"}, config.Config.Aws.Config.PublicCustomSubnets) - // assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrCidrChoose(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - chooseCidrBlock := moveDown + "\r" - b.WriteString(chooseCidrBlock) - pad(len(chooseCidrBlock), b) - - // priSubnet1 := "172.31.192.1\n" - // b.WriteString(priSubnet1) - // pad(len(priSubnet1), b) - - // priSubnet2 := "172.31.192.2\n" - // b.WriteString(priSubnet2) - // pad(len(priSubnet2), b) - - // priSubnet3 := "172.31.192.3\n" - // b.WriteString(priSubnet3) - // pad(len(priSubnet3), b) - - // choosePubSubnet := "\r" - // b.WriteString(choosePubSubnet) - // pad(len(choosePubSubnet), b) - - // pubSubnet1 := "172.31.192.4\n" - // b.WriteString(pubSubnet1) - // pad(len(pubSubnet1), b) - - // pubSubnet2 := "172.31.192.5\n" - // b.WriteString(pubSubnet2) - // pad(len(pubSubnet2), b) - - // pubSubnet3 := "172.31.192.6\n" - // b.WriteString(pubSubnet3) - // pad(len(pubSubnet3), b) - - // sshKeyPairName := "my-ssh-key\n" - // b.WriteString(sshKeyPairName) - // pad(len(sshKeyPairName), b) - - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - // assert.Equal(t, []string{"172.31.192.1", "172.31.192.2", "172.31.192.3"}, config.Config.Aws.Config.PrivateCustomSubnets) - // assert.Equal(t, []string{"172.31.192.4", "172.31.192.5", "172.31.192.6"}, config.Config.Aws.Config.PublicCustomSubnets) - // assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrPriSub1(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - chooseCidrBlock := moveDown + "\r" - b.WriteString(chooseCidrBlock) - pad(len(chooseCidrBlock), b) - - // priSubnet1 := "172.31.192.1\n" - // b.WriteString(priSubnet1) - // pad(len(priSubnet1), b) - - // priSubnet2 := "172.31.192.2\n" - // b.WriteString(priSubnet2) - // pad(len(priSubnet2), b) - - // priSubnet3 := "172.31.192.3\n" - // b.WriteString(priSubnet3) - // pad(len(priSubnet3), b) - - // choosePubSubnet := "\r" - // b.WriteString(choosePubSubnet) - // pad(len(choosePubSubnet), b) - - // pubSubnet1 := "172.31.192.4\n" - // b.WriteString(pubSubnet1) - // pad(len(pubSubnet1), b) - - // pubSubnet2 := "172.31.192.5\n" - // b.WriteString(pubSubnet2) - // pad(len(pubSubnet2), b) - - // pubSubnet3 := "172.31.192.6\n" - // b.WriteString(pubSubnet3) - // pad(len(pubSubnet3), b) - - // sshKeyPairName := "my-ssh-key\n" - // b.WriteString(sshKeyPairName) - // pad(len(sshKeyPairName), b) - - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - assert.Equal(t, []string(nil), config.Config.Aws.Config.PrivateCustomSubnets) - // assert.Equal(t, []string{"172.31.192.4", "172.31.192.5", "172.31.192.6"}, config.Config.Aws.Config.PublicCustomSubnets) - // assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrPriSub2(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - chooseCidrBlock := moveDown + "\r" - b.WriteString(chooseCidrBlock) - pad(len(chooseCidrBlock), b) - - priSubnet1 := "172.31.192.1\n" - b.WriteString(priSubnet1) - pad(len(priSubnet1), b) - - // priSubnet2 := "172.31.192.2\n" - // b.WriteString(priSubnet2) - // pad(len(priSubnet2), b) - - // priSubnet3 := "172.31.192.3\n" - // b.WriteString(priSubnet3) - // pad(len(priSubnet3), b) - - // choosePubSubnet := "\r" - // b.WriteString(choosePubSubnet) - // pad(len(choosePubSubnet), b) - - // pubSubnet1 := "172.31.192.4\n" - // b.WriteString(pubSubnet1) - // pad(len(pubSubnet1), b) - - // pubSubnet2 := "172.31.192.5\n" - // b.WriteString(pubSubnet2) - // pad(len(pubSubnet2), b) - - // pubSubnet3 := "172.31.192.6\n" - // b.WriteString(pubSubnet3) - // pad(len(pubSubnet3), b) - - // sshKeyPairName := "my-ssh-key\n" - // b.WriteString(sshKeyPairName) - // pad(len(sshKeyPairName), b) - - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - assert.Equal(t, []string{"172.31.192.1"}, config.Config.Aws.Config.PrivateCustomSubnets) - // assert.Equal(t, []string{"172.31.192.4", "172.31.192.5", "172.31.192.6"}, config.Config.Aws.Config.PublicCustomSubnets) - // assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrPriSub3(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - chooseCidrBlock := moveDown + "\r" - b.WriteString(chooseCidrBlock) - pad(len(chooseCidrBlock), b) - - priSubnet1 := "172.31.192.1\n" - b.WriteString(priSubnet1) - pad(len(priSubnet1), b) - - priSubnet2 := "172.31.192.2\n" - b.WriteString(priSubnet2) - pad(len(priSubnet2), b) - - // priSubnet3 := "172.31.192.3\n" - // b.WriteString(priSubnet3) - // pad(len(priSubnet3), b) - - // choosePubSubnet := "\r" - // b.WriteString(choosePubSubnet) - // pad(len(choosePubSubnet), b) - - // pubSubnet1 := "172.31.192.4\n" - // b.WriteString(pubSubnet1) - // pad(len(pubSubnet1), b) - - // pubSubnet2 := "172.31.192.5\n" - // b.WriteString(pubSubnet2) - // pad(len(pubSubnet2), b) - - // pubSubnet3 := "172.31.192.6\n" - // b.WriteString(pubSubnet3) - // pad(len(pubSubnet3), b) - - // sshKeyPairName := "my-ssh-key\n" - // b.WriteString(sshKeyPairName) - // pad(len(sshKeyPairName), b) - - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - assert.Equal(t, []string{"172.31.192.1", "172.31.192.2"}, config.Config.Aws.Config.PrivateCustomSubnets) - // assert.Equal(t, []string{"172.31.192.4", "172.31.192.5", "172.31.192.6"}, config.Config.Aws.Config.PublicCustomSubnets) - // assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrChoosePubSub(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - chooseCidrBlock := moveDown + "\r" - b.WriteString(chooseCidrBlock) - pad(len(chooseCidrBlock), b) - - priSubnet1 := "172.31.192.1\n" - b.WriteString(priSubnet1) - pad(len(priSubnet1), b) - - priSubnet2 := "172.31.192.2\n" - b.WriteString(priSubnet2) - pad(len(priSubnet2), b) - - priSubnet3 := "172.31.192.3\n" - b.WriteString(priSubnet3) - pad(len(priSubnet3), b) - - // choosePubSubnet := "\r" - // b.WriteString(choosePubSubnet) - // pad(len(choosePubSubnet), b) - - // pubSubnet1 := "172.31.192.4\n" - // b.WriteString(pubSubnet1) - // pad(len(pubSubnet1), b) - - // pubSubnet2 := "172.31.192.5\n" - // b.WriteString(pubSubnet2) - // pad(len(pubSubnet2), b) - - // pubSubnet3 := "172.31.192.6\n" - // b.WriteString(pubSubnet3) - // pad(len(pubSubnet3), b) - - // sshKeyPairName := "my-ssh-key\n" - // b.WriteString(sshKeyPairName) - // pad(len(sshKeyPairName), b) - - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - assert.Equal(t, []string{"172.31.192.1", "172.31.192.2", "172.31.192.3"}, config.Config.Aws.Config.PrivateCustomSubnets) - // assert.Equal(t, []string{"172.31.192.4", "172.31.192.5", "172.31.192.6"}, config.Config.Aws.Config.PublicCustomSubnets) - // assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrPubSub1(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - chooseCidrBlock := moveDown + "\r" - b.WriteString(chooseCidrBlock) - pad(len(chooseCidrBlock), b) - - priSubnet1 := "172.31.192.1\n" - b.WriteString(priSubnet1) - pad(len(priSubnet1), b) - - priSubnet2 := "172.31.192.2\n" - b.WriteString(priSubnet2) - pad(len(priSubnet2), b) - - priSubnet3 := "172.31.192.3\n" - b.WriteString(priSubnet3) - pad(len(priSubnet3), b) - - choosePubSubnet := "\r" - b.WriteString(choosePubSubnet) - pad(len(choosePubSubnet), b) - - // pubSubnet1 := "172.31.192.4\n" - // b.WriteString(pubSubnet1) - // pad(len(pubSubnet1), b) - - // pubSubnet2 := "172.31.192.5\n" - // b.WriteString(pubSubnet2) - // pad(len(pubSubnet2), b) - - // pubSubnet3 := "172.31.192.6\n" - // b.WriteString(pubSubnet3) - // pad(len(pubSubnet3), b) - - // sshKeyPairName := "my-ssh-key\n" - // b.WriteString(sshKeyPairName) - // pad(len(sshKeyPairName), b) - - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - assert.Equal(t, []string{"172.31.192.1", "172.31.192.2", "172.31.192.3"}, config.Config.Aws.Config.PrivateCustomSubnets) - assert.Equal(t, []string(nil), config.Config.Aws.Config.PublicCustomSubnets) - // assert.Equal(t, []string{"172.31.192.4", "172.31.192.5", "172.31.192.6"}, config.Config.Aws.Config.PublicCustomSubnets) - // assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrPubSub2(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - chooseCidrBlock := moveDown + "\r" - b.WriteString(chooseCidrBlock) - pad(len(chooseCidrBlock), b) - - priSubnet1 := "172.31.192.1\n" - b.WriteString(priSubnet1) - pad(len(priSubnet1), b) - - priSubnet2 := "172.31.192.2\n" - b.WriteString(priSubnet2) - pad(len(priSubnet2), b) - - priSubnet3 := "172.31.192.3\n" - b.WriteString(priSubnet3) - pad(len(priSubnet3), b) - - choosePubSubnet := "\r" - b.WriteString(choosePubSubnet) - pad(len(choosePubSubnet), b) - - pubSubnet1 := "172.31.192.4\n" - b.WriteString(pubSubnet1) - pad(len(pubSubnet1), b) - - // pubSubnet2 := "172.31.192.5\n" - // b.WriteString(pubSubnet2) - // pad(len(pubSubnet2), b) - - // pubSubnet3 := "172.31.192.6\n" - // b.WriteString(pubSubnet3) - // pad(len(pubSubnet3), b) - - // sshKeyPairName := "my-ssh-key\n" - // b.WriteString(sshKeyPairName) - // pad(len(sshKeyPairName), b) - - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - assert.Equal(t, []string{"172.31.192.1", "172.31.192.2", "172.31.192.3"}, config.Config.Aws.Config.PrivateCustomSubnets) - assert.Equal(t, []string{"172.31.192.4"}, config.Config.Aws.Config.PublicCustomSubnets) - // assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrPubSub3(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - chooseCidrBlock := moveDown + "\r" - b.WriteString(chooseCidrBlock) - pad(len(chooseCidrBlock), b) - - priSubnet1 := "172.31.192.1\n" - b.WriteString(priSubnet1) - pad(len(priSubnet1), b) - - priSubnet2 := "172.31.192.2\n" - b.WriteString(priSubnet2) - pad(len(priSubnet2), b) - - priSubnet3 := "172.31.192.3\n" - b.WriteString(priSubnet3) - pad(len(priSubnet3), b) - - choosePubSubnet := "\r" - b.WriteString(choosePubSubnet) - pad(len(choosePubSubnet), b) - - pubSubnet1 := "172.31.192.4\n" - b.WriteString(pubSubnet1) - pad(len(pubSubnet1), b) - - pubSubnet2 := "172.31.192.5\n" - b.WriteString(pubSubnet2) - pad(len(pubSubnet2), b) - - // pubSubnet3 := "172.31.192.6\n" - // b.WriteString(pubSubnet3) - // pad(len(pubSubnet3), b) - - // sshKeyPairName := "my-ssh-key\n" - // b.WriteString(sshKeyPairName) - // pad(len(sshKeyPairName), b) - - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - assert.Equal(t, []string{"172.31.192.1", "172.31.192.2", "172.31.192.3"}, config.Config.Aws.Config.PrivateCustomSubnets) - assert.Equal(t, []string{"172.31.192.4", "172.31.192.5"}, config.Config.Aws.Config.PublicCustomSubnets) - // assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrSshKeyPairName(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - chooseCidrBlock := moveDown + "\r" - b.WriteString(chooseCidrBlock) - pad(len(chooseCidrBlock), b) - - priSubnet1 := "172.31.192.1\n" - b.WriteString(priSubnet1) - pad(len(priSubnet1), b) - - priSubnet2 := "172.31.192.2\n" - b.WriteString(priSubnet2) - pad(len(priSubnet2), b) - - priSubnet3 := "172.31.192.3\n" - b.WriteString(priSubnet3) - pad(len(priSubnet3), b) - - choosePubSubnet := "\r" - b.WriteString(choosePubSubnet) - pad(len(choosePubSubnet), b) - - pubSubnet1 := "172.31.192.4\n" - b.WriteString(pubSubnet1) - pad(len(pubSubnet1), b) - - pubSubnet2 := "172.31.192.5\n" - b.WriteString(pubSubnet2) - pad(len(pubSubnet2), b) - - pubSubnet3 := "172.31.192.6\n" - b.WriteString(pubSubnet3) - pad(len(pubSubnet3), b) - - // sshKeyPairName := "my-ssh-key\n" - // b.WriteString(sshKeyPairName) - // pad(len(sshKeyPairName), b) - - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - assert.Equal(t, []string{"172.31.192.1", "172.31.192.2", "172.31.192.3"}, config.Config.Aws.Config.PrivateCustomSubnets) - assert.Equal(t, []string{"172.31.192.4", "172.31.192.5", "172.31.192.6"}, config.Config.Aws.Config.PublicCustomSubnets) - assert.Equal(t, "", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrAmiId(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - chooseCidrBlock := moveDown + "\r" - b.WriteString(chooseCidrBlock) - pad(len(chooseCidrBlock), b) - - priSubnet1 := "172.31.192.1\n" - b.WriteString(priSubnet1) - pad(len(priSubnet1), b) - - priSubnet2 := "172.31.192.2\n" - b.WriteString(priSubnet2) - pad(len(priSubnet2), b) - - priSubnet3 := "172.31.192.3\n" - b.WriteString(priSubnet3) - pad(len(priSubnet3), b) - - choosePubSubnet := "\r" - b.WriteString(choosePubSubnet) - pad(len(choosePubSubnet), b) - - pubSubnet1 := "172.31.192.4\n" - b.WriteString(pubSubnet1) - pad(len(pubSubnet1), b) - - pubSubnet2 := "172.31.192.5\n" - b.WriteString(pubSubnet2) - pad(len(pubSubnet2), b) - - pubSubnet3 := "172.31.192.6\n" - b.WriteString(pubSubnet3) - pad(len(pubSubnet3), b) - - sshKeyPairName := "my-ssh-key\n" - b.WriteString(sshKeyPairName) - pad(len(sshKeyPairName), b) - - // amiId := "ami-01c7ecac079939e18\n" - // b.WriteString(amiId) - // pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - assert.Equal(t, []string{"172.31.192.1", "172.31.192.2", "172.31.192.3"}, config.Config.Aws.Config.PrivateCustomSubnets) - assert.Equal(t, []string{"172.31.192.4", "172.31.192.5", "172.31.192.6"}, config.Config.Aws.Config.PublicCustomSubnets) - assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - assert.Equal(t, "", config.Config.Aws.Config.AmiID) - // assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrDelOnTerm(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - chooseCidrBlock := moveDown + "\r" - b.WriteString(chooseCidrBlock) - pad(len(chooseCidrBlock), b) - - priSubnet1 := "172.31.192.1\n" - b.WriteString(priSubnet1) - pad(len(priSubnet1), b) - - priSubnet2 := "172.31.192.2\n" - b.WriteString(priSubnet2) - pad(len(priSubnet2), b) - - priSubnet3 := "172.31.192.3\n" - b.WriteString(priSubnet3) - pad(len(priSubnet3), b) - - choosePubSubnet := "\r" - b.WriteString(choosePubSubnet) - pad(len(choosePubSubnet), b) - - pubSubnet1 := "172.31.192.4\n" - b.WriteString(pubSubnet1) - pad(len(pubSubnet1), b) - - pubSubnet2 := "172.31.192.5\n" - b.WriteString(pubSubnet2) - pad(len(pubSubnet2), b) - - pubSubnet3 := "172.31.192.6\n" - b.WriteString(pubSubnet3) - pad(len(pubSubnet3), b) - - sshKeyPairName := "my-ssh-key\n" - b.WriteString(sshKeyPairName) - pad(len(sshKeyPairName), b) - - amiId := "ami-01c7ecac079939e18\n" - b.WriteString(amiId) - pad(len(amiId), b) - - // delOnTermination := "\r" - // b.WriteString(delOnTermination) - // pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - assert.Equal(t, []string{"172.31.192.1", "172.31.192.2", "172.31.192.3"}, config.Config.Aws.Config.PrivateCustomSubnets) - assert.Equal(t, []string{"172.31.192.4", "172.31.192.5", "172.31.192.6"}, config.Config.Aws.Config.PublicCustomSubnets) - assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrAutomateType(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - chooseCidrBlock := moveDown + "\r" - b.WriteString(chooseCidrBlock) - pad(len(chooseCidrBlock), b) - - priSubnet1 := "172.31.192.1\n" - b.WriteString(priSubnet1) - pad(len(priSubnet1), b) - - priSubnet2 := "172.31.192.2\n" - b.WriteString(priSubnet2) - pad(len(priSubnet2), b) - - priSubnet3 := "172.31.192.3\n" - b.WriteString(priSubnet3) - pad(len(priSubnet3), b) - - choosePubSubnet := "\r" - b.WriteString(choosePubSubnet) - pad(len(choosePubSubnet), b) - - pubSubnet1 := "172.31.192.4\n" - b.WriteString(pubSubnet1) - pad(len(pubSubnet1), b) - - pubSubnet2 := "172.31.192.5\n" - b.WriteString(pubSubnet2) - pad(len(pubSubnet2), b) - - pubSubnet3 := "172.31.192.6\n" - b.WriteString(pubSubnet3) - pad(len(pubSubnet3), b) - - sshKeyPairName := "my-ssh-key\n" - b.WriteString(sshKeyPairName) - pad(len(sshKeyPairName), b) - - amiId := "ami-01c7ecac079939e18\n" - b.WriteString(amiId) - pad(len(amiId), b) - - delOnTermination := "\r" - b.WriteString(delOnTermination) - pad(len(delOnTermination), b) - - // automateInstanceType := "\r" - // b.WriteString(automateInstanceType) - // pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) - assert.Equal(t, "default", config.Config.Aws.Config.Profile) - assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) - assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) - assert.Equal(t, []string{"172.31.192.1", "172.31.192.2", "172.31.192.3"}, config.Config.Aws.Config.PrivateCustomSubnets) - assert.Equal(t, []string{"172.31.192.4", "172.31.192.5", "172.31.192.6"}, config.Config.Aws.Config.PublicCustomSubnets) - assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) - assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) - assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) - assert.Equal(t, "", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) -} - -func TestPromptsErrChefInfraType(t *testing.T) { - profile := "\r" - b := bytes.NewBuffer([]byte(profile)) - in := io.NopCloser(b) - pad(len(profile), b) - - region := "Asia" + moveDown + "\r" - b.WriteString(region) - pad(len(region), b) - - vpcId := "vpc-1234\n" - b.WriteString(vpcId) - pad(len(vpcId), b) - - chooseCidrBlock := moveDown + "\r" - b.WriteString(chooseCidrBlock) - pad(len(chooseCidrBlock), b) - - priSubnet1 := "172.31.192.1\n" - b.WriteString(priSubnet1) - pad(len(priSubnet1), b) - - priSubnet2 := "172.31.192.2\n" - b.WriteString(priSubnet2) - pad(len(priSubnet2), b) - - priSubnet3 := "172.31.192.3\n" - b.WriteString(priSubnet3) - pad(len(priSubnet3), b) - - choosePubSubnet := "\r" - b.WriteString(choosePubSubnet) - pad(len(choosePubSubnet), b) - - pubSubnet1 := "172.31.192.4\n" - b.WriteString(pubSubnet1) - pad(len(pubSubnet1), b) - - pubSubnet2 := "172.31.192.5\n" - b.WriteString(pubSubnet2) - pad(len(pubSubnet2), b) - - pubSubnet3 := "172.31.192.6\n" - b.WriteString(pubSubnet3) - pad(len(pubSubnet3), b) - - sshKeyPairName := "my-ssh-key\n" - b.WriteString(sshKeyPairName) - pad(len(sshKeyPairName), b) - - amiId := "ami-01c7ecac079939e18\n" - b.WriteString(amiId) - pad(len(amiId), b) - - delOnTermination := "\r" - b.WriteString(delOnTermination) - pad(len(delOnTermination), b) - - automateInstanceType := "\r" - b.WriteString(automateInstanceType) - pad(len(automateInstanceType), b) - - // chefInfraInstanceType := "\r" - // b.WriteString(chefInfraInstanceType) - // pad(len(automateInstanceType), b) - - outBuf := &bytes.Buffer{} - out := ioutils.NewNopWriteCloser(outBuf) - p := pmt.PromptFactory(in, out) - - config := AwsHaProvisionConfig{ - Prompt: p, - FileUtils: &fileutils.MockFileSystemUtils{}, - Config: &config.HaDeployConfig{}, - } - - err := config.Prompts() - - assert.Error(t, err) + assert.NoError(t, err) assert.Equal(t, "default", config.Config.Aws.Config.Profile) assert.Equal(t, "ap-south-2", config.Config.Aws.Config.Region) assert.Equal(t, "vpc-1234", config.Config.Aws.Config.AwsVpcID) @@ -1831,7 +281,24 @@ func TestPromptsErrChefInfraType(t *testing.T) { assert.Equal(t, "my-ssh-key", config.Config.Aws.Config.SSHKeyPairName) assert.Equal(t, "ami-01c7ecac079939e18", config.Config.Aws.Config.AmiID) assert.Equal(t, false, config.Config.Aws.Config.DeleteOnTermination) + assert.Equal(t, "true", config.Config.Aws.Config.LbAccessLogs) + assert.Equal(t, "arn:aws:acm:ca-central-1:112758395563:certificate/1754e15c-5834-44b0-82a7-0508c3155601", config.Config.Aws.Config.AutomateLbCertificateArn) assert.Equal(t, "t3.medium", config.Config.Aws.Config.AutomateServerInstanceType) - assert.Equal(t, "", config.Config.Aws.Config.ChefServerInstanceType) - // assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) + assert.Equal(t, "200", config.Config.Aws.Config.AutomateEbsVolumeSize) + assert.Equal(t, "gp3", config.Config.Aws.Config.AutomateEbsVolumeType) + assert.Equal(t, "100", config.Config.Aws.Config.AutomateEbsVolumeIops) + assert.Equal(t, "arn:aws:acm:ca-central-1:112758395563:certificate/1754e15c-5834-44b0-82a7-0508c3155601", config.Config.Aws.Config.ChefServerLbCertificateArn) + assert.Equal(t, "t3.medium", config.Config.Aws.Config.ChefServerInstanceType) + assert.Equal(t, "200", config.Config.Aws.Config.ChefEbsVolumeSize) + assert.Equal(t, "gp3", config.Config.Aws.Config.ChefEbsVolumeType) + assert.Equal(t, "100", config.Config.Aws.Config.ChefEbsVolumeIops) + assert.Equal(t, false, config.Config.Aws.Config.SetupManagedServices) + assert.Equal(t, "m5.large", config.Config.Aws.Config.PostgresqlServerInstanceType) + assert.Equal(t, "200", config.Config.Aws.Config.PostgresqlEbsVolumeSize) + assert.Equal(t, "gp3", config.Config.Aws.Config.PostgresqlEbsVolumeType) + assert.Equal(t, "100", config.Config.Aws.Config.PostgresqlEbsVolumeIops) + assert.Equal(t, "m5.large", config.Config.Aws.Config.OpensearchServerInstanceType) + assert.Equal(t, "200", config.Config.Aws.Config.OpensearchEbsVolumeSize) + assert.Equal(t, "gp3", config.Config.Aws.Config.OpensearchEbsVolumeType) + assert.Equal(t, "100", config.Config.Aws.Config.OpensearchEbsVolumeIops) } diff --git a/lib/config/genconfig/hadeployconfig.go b/lib/config/genconfig/hadeployconfig.go index 5b1e9d2f9cf..d5b9427595d 100644 --- a/lib/config/genconfig/hadeployconfig.go +++ b/lib/config/genconfig/hadeployconfig.go @@ -92,6 +92,10 @@ func (c *HaDeployConfigGen) PromptCustomCerts() (err error) { return } c.HasCustomCerts = !noCustomCerts + c.Config.InitAutomate().InitConfig().EnableCustomCerts = c.HasCustomCerts + c.Config.InitChefServer().InitConfig().EnableCustomCerts = c.HasCustomCerts + c.Config.InitPostgresql().InitConfig().EnableCustomCerts = c.HasCustomCerts + c.Config.InitOpenSearch().InitConfig().EnableCustomCerts = c.HasCustomCerts return } @@ -243,7 +247,7 @@ func (c *HaDeployConfigGen) GetExternalOsType() (dbType string) { } func (c *HaDeployConfigGen) PromptExternalPostgresqlInstanceUrl() (err error) { - pgUrl, err := c.Prompt.InputStringRegex(c.GetExternalPgType()+" URL:", "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]:{1}[0-9]{1,5}$") + pgUrl, err := c.Prompt.InputStringRegex(c.GetExternalPgType()+" URL:", URL_REQUIRED_PORT) if err != nil { return } @@ -253,7 +257,7 @@ func (c *HaDeployConfigGen) PromptExternalPostgresqlInstanceUrl() (err error) { } func (c *HaDeployConfigGen) PromptExternalPostgresqlSuperUser() (err error) { - user, err := c.Prompt.InputString(c.GetExternalPgType() + " Super Username") + user, err := c.Prompt.InputStringRequired(c.GetExternalPgType() + " Super Username") if err != nil { return } @@ -273,7 +277,7 @@ func (c *HaDeployConfigGen) PromptExternalPostgresqlSuperUserPassword() (err err } func (c *HaDeployConfigGen) PromptExternalPostgresqlDbUser() (err error) { - user, err := c.Prompt.InputString(c.GetExternalPgType() + " Db Username") + user, err := c.Prompt.InputStringRequired(c.GetExternalPgType() + " Db Username") if err != nil { return } @@ -311,7 +315,7 @@ func (c *HaDeployConfigGen) PromptExternalPostgresqlRootCert() (err error) { } func (c *HaDeployConfigGen) PromptExternalOpenSearchDomainName() (err error) { - domainName, err := c.Prompt.InputString(c.GetExternalOsType() + " Domain Name") + domainName, err := c.Prompt.InputStringRequired(c.GetExternalOsType() + " Domain Name") if err != nil { return } @@ -321,7 +325,7 @@ func (c *HaDeployConfigGen) PromptExternalOpenSearchDomainName() (err error) { } func (c *HaDeployConfigGen) PromptExternalOpenSearchDomainUrl() (err error) { - domainUrl, err := c.Prompt.InputStringRegex(c.GetExternalOsType()+" Domain URL", "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9](:{1}[0-9]{1,5})?$") + domainUrl, err := c.Prompt.InputStringRegex(c.GetExternalOsType()+" Domain URL", URL_OPTIONAL_PORT) if err != nil { return } @@ -331,7 +335,7 @@ func (c *HaDeployConfigGen) PromptExternalOpenSearchDomainUrl() (err error) { } func (c *HaDeployConfigGen) PromptExternalOpenSearchUser() (err error) { - user, err := c.Prompt.InputString(c.GetExternalOsType() + " Username") + user, err := c.Prompt.InputStringRequired(c.GetExternalOsType() + " Username") if err != nil { return } @@ -369,7 +373,7 @@ func (c *HaDeployConfigGen) PromptExternalOpenSearchRootCert() (err error) { } func (c *HaDeployConfigGen) PromptExternalOpenSearchAwsSnapshotArn() (err error) { - arn, err := c.Prompt.InputString(c.GetExternalOsType() + " Snapshot ARN") + arn, err := c.Prompt.InputStringRequired(c.GetExternalOsType() + " Snapshot ARN") if err != nil { return } @@ -379,7 +383,7 @@ func (c *HaDeployConfigGen) PromptExternalOpenSearchAwsSnapshotArn() (err error) } func (c *HaDeployConfigGen) PromptExternalOpenSearchAwsSnapshotUserAccessKey() (err error) { - key, err := c.Prompt.InputString(c.GetExternalOsType() + " Snapshot User Access Key") + key, err := c.Prompt.InputStringRequired(c.GetExternalOsType() + " Snapshot User Access Key") if err != nil { return } @@ -389,7 +393,7 @@ func (c *HaDeployConfigGen) PromptExternalOpenSearchAwsSnapshotUserAccessKey() ( } func (c *HaDeployConfigGen) PromptExternalOpenSearchAwsSnapshotUserAccessSecret() (err error) { - secret, err := c.Prompt.InputString(c.GetExternalOsType() + " Snapshot User Access Secret") + secret, err := c.Prompt.InputStringRequired(c.GetExternalOsType() + " Snapshot User Access Secret") if err != nil { return } @@ -409,6 +413,11 @@ func (c *HaDeployConfigGen) PromptAutomate() (err error) { return } + err = c.PromptAutomateAdminPassword() + if err != nil { + return + } + err = c.PromptAutomateFqdnRootCa() if err != nil { return @@ -424,6 +433,15 @@ func (c *HaDeployConfigGen) PromptAutomate() (err error) { return } +func (c *HaDeployConfigGen) PromptAutomateAdminPassword() (err error) { + adminPass, err := c.Prompt.InputPasswordRegex("Automate Dashboard Admin User Password", "^.{8,35}$") + if err != nil { + return + } + c.Config.InitAutomate().InitConfig().AdminPassword = adminPass + return +} + func (c *HaDeployConfigGen) PromptChefServer() (err error) { err = c.PromptChefInfraServerFqdn() if err != nil { @@ -471,6 +489,8 @@ func (c *HaDeployConfigGen) PromptChefInfraServerNodes() (err error) { return err } + c.Config.Automate.Config.EnableCustomCerts = hasCustomCerts + if hasCustomCerts && !hasCustomCertsPerNode { priKey, pubKey, err := c.PromptPrivatePublicCert("", "Chef Infra Server") if err != nil { @@ -521,6 +541,8 @@ func (c *HaDeployConfigGen) PromptOpenSearchNodes() (err error) { return err } + c.Config.Automate.Config.EnableCustomCerts = hasCustomCerts + if hasCustomCerts && !hasCustomCertsPerNode { priKey, pubKey, err := c.PromptPrivatePublicCert("", "OpenSearch") if err != nil { @@ -571,6 +593,8 @@ func (c *HaDeployConfigGen) PromptPostgresqlNodes() (err error) { return err } + c.Config.Automate.Config.EnableCustomCerts = hasCustomCerts + if hasCustomCerts && !hasCustomCertsPerNode { priKey, pubKey, err := c.PromptPrivatePublicCert("", "Postgresql") if err != nil { @@ -684,6 +708,8 @@ func (c *HaDeployConfigGen) PromptAutomateNodes() (err error) { return err } + c.Config.Automate.Config.EnableCustomCerts = hasCustomCerts + if hasCustomCerts && !hasCustomCertsPerNode { priKey, pubKey, err := c.PromptPrivatePublicCert("", "Automate") if err != nil { diff --git a/lib/config/genconfig/hadeployconfig_test.go b/lib/config/genconfig/hadeployconfig_test.go index 8d7e4f65432..688e8aa69f4 100644 --- a/lib/config/genconfig/hadeployconfig_test.go +++ b/lib/config/genconfig/hadeployconfig_test.go @@ -1,7 +1,137 @@ package genconfig -import "testing" +import ( + "bytes" + "io" + "testing" + + "github.com/chef/automate/lib/config" + "github.com/chef/automate/lib/io/fileutils" + "github.com/chef/automate/lib/ioutils" + "github.com/chef/automate/lib/pmt" + "github.com/stretchr/testify/assert" +) func TestOnPremPrompts(t *testing.T) { + b := bytes.NewBuffer([]byte("")) + in := io.NopCloser(b) + profile := "default\n" + input(b, profile) + + region := "Asia" + moveDown + "\r" + input(b, region) + + vpcId := "vpc-1234\n" + input(b, vpcId) + + chooseCidrBlock := "\r" + input(b, chooseCidrBlock) + + ciderBlockAddr := "172.31.192.0\n" + input(b, ciderBlockAddr) + + sshKeyPairName := "my-ssh-key\n" + input(b, sshKeyPairName) + + amiId := "ami-01c7ecac079939e18\n" + input(b, amiId) + + delOnTermination := "\r" + input(b, delOnTermination) + + accessLogsEnable := "\r" + input(b, accessLogsEnable) + + automateLbCertArn := "arn:aws:acm:ca-central-1:112758395563:certificate/1754e15c-5834-44b0-82a7-0508c3155601\n" + input(b, automateLbCertArn) + + automateInstanceType := "\r" + input(b, automateInstanceType) + + automateInstanceVolSize := "\r" + input(b, automateInstanceVolSize) + + automateInstanceVolType := "\r" + input(b, automateInstanceVolType) + + automateInstanceVolIops := "\r" + input(b, automateInstanceVolIops) + + chefInfraServerLbCertArn := "arn:aws:acm:ca-central-1:112758395563:certificate/1754e15c-5834-44b0-82a7-0508c3155601\n" + input(b, chefInfraServerLbCertArn) + + chefInfraServerInstanceType := "\r" + input(b, chefInfraServerInstanceType) + + chefInfraServerInstanceVolSize := "\r" + input(b, chefInfraServerInstanceVolSize) + + chefInfraServerInstanceVolType := "\r" + input(b, chefInfraServerInstanceVolType) + + chefInfraServerInstanceVolIops := "\r" + input(b, chefInfraServerInstanceVolIops) + + awsManagedDb := "\r" + input(b, awsManagedDb) + + osDomainName := "opensearch-domain-name\n" + input(b, osDomainName) + + osDomainUrl := "search-managed-services-os-eckom3msrwqlmjlgbdu.us-east-1.es.amazonaws.com\n" + input(b, osDomainUrl) + + osUser := "admin\n" + input(b, osUser) + + osPass := "pass\n" + input(b, osPass) + + osDefaultAWSOsCerts := "\r" + input(b, osDefaultAWSOsCerts) + + osSnapshotRoleArn := "arn:aws:iam::1127583934333:role/managed-services\n" + input(b, osSnapshotRoleArn) + + osSnapshotUserAccessKeyId := "AKIAKDKEFPQS7Q7ADEFE\n" + input(b, osSnapshotUserAccessKeyId) + + osSnapshotUserAccessKeySecret := "sdkskeksljnlvinlsilenklfisdflielisliefl\n" + input(b, osSnapshotUserAccessKeySecret) + + pgUrl := "managed-rds-db.cww4poze5gkx.ap-northeast-1.rds.amazonaws.com:5432\n" + input(b, pgUrl) + + pgSuperUser := "root\n" + input(b, pgSuperUser) + + pgSuperPass := "pass\n" + input(b, pgSuperPass) + + pgDbUser := "dbuser\n" + input(b, pgDbUser) + + pgDbPass := "dbuser\n" + input(b, pgDbPass) + + osDefaultAWSPgCerts := "\r" + input(b, osDefaultAWSPgCerts) + + outBuf := &bytes.Buffer{} + out := ioutils.NewNopWriteCloser(outBuf) + p := pmt.PromptFactory(in, out) + + c := HaDeployConfigGen{ + Prompt: p, + FileUtils: &fileutils.MockFileSystemUtils{}, + Config: &config.HaDeployConfig{}, + } + + err := c.Prompts() + + assert.NoError(t, err) + assert.Equal(t, "/hab/a2_deploy_workspace/secrets.key", c.Config.Architecture.ExistingInfra.SecretsKeyFile) + assert.Equal(t, "/hab/a2_deploy_workspace/secrets.json", c.Config.Architecture.ExistingInfra.SecretsStoreFile) + assert.Equal(t, "existing_nodes", c.Config.Architecture.ExistingInfra.Architecture) } diff --git a/lib/config/hadeployconfig.go b/lib/config/hadeployconfig.go index c02203242e7..e57085bf48d 100644 --- a/lib/config/hadeployconfig.go +++ b/lib/config/hadeployconfig.go @@ -254,6 +254,13 @@ func (c *Architecture) InitExistingInfra() *ConfigInitials { return c.ExistingInfra } +func (c *Architecture) InitAws() *ConfigInitials { + if c.Aws == nil { + c.Aws = &ConfigInitials{} + } + return c.Aws +} + func (c *HaDeployConfig) InitAutomate() *AutomateSettings { if c.Automate == nil { c.Automate = &AutomateSettings{} diff --git a/lib/pmt/prompt.go b/lib/pmt/prompt.go index 44eb217d2f6..4dc21f8a66b 100644 --- a/lib/pmt/prompt.go +++ b/lib/pmt/prompt.go @@ -32,6 +32,7 @@ type Prompt interface { InputString(label string) (result string, err error) InputStringRequired(label string) (result string, err error) InputPassword(label string) (result string, err error) + InputPasswordRegex(label string, regexCheck string) (result string, err error) InputStringRegexDefault(label string, regexCheck string, defaultVal string) (result string, err error) InputStringDefault(label string, defaultVal string) (result string, err error) InputExistingFilePathDefault(label string, defaultVal string) (result string, err error) @@ -462,7 +463,8 @@ func (p *PromptImp) InputStringRegexDefault(label string, regexCheck string, def func (p *PromptImp) InputStringRequired(label string) (result string, err error) { validate := func(input string) error { - if len(input) < 0 { + trimInput := strings.Trim(input, " ") + if len(trimInput) < 1 { return fmt.Errorf("this is a required field") } return nil @@ -499,7 +501,31 @@ func (p *PromptImp) InputString(label string) (result string, err error) { } return } +func (p *PromptImp) InputPasswordRegex(label string, regexCheck string) (result string, err error) { + validate := func(input string) error { + var check = regexp.MustCompile(regexCheck).MatchString + if !check(input) { + return fmt.Errorf("regex check failed (%v) ", regexCheck) + } + return nil + } + + prompt := promptui.Prompt{ + Label: label, + Stdin: p.Stdin, + Stdout: p.Stdout, + Mask: '*', + Validate: validate, + } + result, err = prompt.Run() + + if err != nil { + err = fmt.Errorf("prompt failed %v", err) + return + } + return +} func (p *PromptImp) InputPassword(label string) (result string, err error) { prompt := promptui.Prompt{ Label: label,