From 43994223882fa9205b3d7c0e0b824d9b72f4aa9c Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Mon, 26 Apr 2021 10:49:22 -0700 Subject: [PATCH 1/2] config: change LogColorOverride to "string" Fix https://github.com/aws/aws-k8s-tester/issues/211. Signed-off-by: Gyuho Lee --- ec2/ec2.go | 18 +------ ec2config/README.md | 2 +- ec2config/config.go | 12 +++-- ec2config/default.yaml | 42 ++++++++-------- ec2config/env_test.go | 4 +- ec2config/validate-defaults.go | 23 +++++++-- eks/eks.go | 18 +------ eksconfig/README.md | 88 ++++++++++++++++++---------------- eksconfig/config.go | 44 ++++++++++++----- eksconfig/default.yaml | 40 ++++++++-------- eksconfig/env_test.go | 4 +- 11 files changed, 153 insertions(+), 142 deletions(-) diff --git a/ec2/ec2.go b/ec2/ec2.go index 542cecc45..4bdd42e73 100644 --- a/ec2/ec2.go +++ b/ec2/ec2.go @@ -15,7 +15,6 @@ import ( "github.com/aws/aws-k8s-tester/ec2config" pkgaws "github.com/aws/aws-k8s-tester/pkg/aws" "github.com/aws/aws-k8s-tester/pkg/logutil" - "github.com/aws/aws-k8s-tester/pkg/terminal" "github.com/aws/aws-k8s-tester/version" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" @@ -37,7 +36,6 @@ import ( "github.com/aws/aws-sdk-go/service/ssm/ssmiface" "github.com/aws/aws-sdk-go/service/sts" "github.com/dustin/go-humanize" - "github.com/mitchellh/colorstring" "go.uber.org/zap" ) @@ -81,21 +79,7 @@ func New(cfg *ec2config.Config) (*Tester, error) { if err != nil { return nil, err } - lg.Info("set up log writer and file", zap.Strings("outputs", cfg.LogOutputs)) - - isColor := cfg.LogColor - co, cerr := terminal.IsColor() - if cerr == nil { - lg.Info("requested output in color", zap.String("output", co), zap.Error(cerr)) - colorstring.Printf("\n\n[light_green]HELLO COLOR\n\n") - isColor = true - } else if !cfg.LogColorOverride { - lg.Warn("requested output in color but not supported; overriding", zap.String("output", co), zap.Error(cerr)) - isColor = false - } else { - lg.Info("requested output color", zap.Bool("is-color", isColor), zap.String("output", co), zap.Error(cerr)) - } - cfg.LogColor = isColor + lg.Info("set up log writer and file", zap.Strings("outputs", cfg.LogOutputs), zap.Bool("is-color", cfg.LogColor)) cfg.Sync() fmt.Fprintf(logWriter, cfg.Colorize("\n\n[yellow]*********************************\n")) diff --git a/ec2config/README.md b/ec2config/README.md index a28e93d1b..3b5925082 100644 --- a/ec2config/README.md +++ b/ec2config/README.md @@ -17,7 +17,7 @@ | AWS_K8S_TESTER_EC2_AWS_IAM_ROLE_ARN | read-only "true" | *ec2config.Config.AWSIAMRoleARN | string | | AWS_K8S_TESTER_EC2_AWS_CREDENTIAL_PATH | read-only "true" | *ec2config.Config.AWSCredentialPath | string | | AWS_K8S_TESTER_EC2_LOG_COLOR | read-only "false" | *ec2config.Config.LogColor | bool | -| AWS_K8S_TESTER_EC2_LOG_COLOR_OVERRIDE | read-only "false" | *ec2config.Config.LogColorOverride | bool | +| AWS_K8S_TESTER_EC2_LOG_COLOR_OVERRIDE | read-only "false" | *ec2config.Config.LogColorOverride | string | | AWS_K8S_TESTER_EC2_LOG_LEVEL | read-only "false" | *ec2config.Config.LogLevel | string | | AWS_K8S_TESTER_EC2_LOG_OUTPUTS | read-only "false" | *ec2config.Config.LogOutputs | []string | | AWS_K8S_TESTER_EC2_ON_FAILURE_DELETE | read-only "false" | *ec2config.Config.OnFailureDelete | bool | diff --git a/ec2config/config.go b/ec2config/config.go index 61d585e9c..0358f8c7f 100644 --- a/ec2config/config.go +++ b/ec2config/config.go @@ -87,10 +87,14 @@ type Config struct { // LogColor is true to output logs in color. LogColor bool `json:"log-color"` - // LogColorOverride is true to use "LogColor" setting - // even if the current terminal does not support color outputs. - // Useful to output in color in HTML based log outputs (e.g. Prow). - LogColorOverride bool `json:"log-color-override"` + // LogColorOverride is not empty to override "LogColor" setting. + // If not empty, the automatic color check is not even run and use this value instead. + // For instance, github action worker might not support color device, + // thus exiting color check with the exit code 1. + // Useful to output in color in HTML based log outputs (e.g., Prow). + // Useful to skip terminal color check when there is no color device (e.g., Github action worker). + LogColorOverride string `json:"log-color-override"` + // LogLevel configures log level. Only supports debug, info, warn, error, panic, or fatal. Default 'info'. LogLevel string `json:"log-level"` // LogOutputs is a list of log outputs. Valid values are 'default', 'stderr', 'stdout', or file names. diff --git a/ec2config/default.yaml b/ec2config/default.yaml index 52dc794c7..7645bee76 100644 --- a/ec2config/default.yaml +++ b/ec2config/default.yaml @@ -1,9 +1,9 @@ asgs: - ec2-2021041219-integritynoq-asg: + ec2-2021042610-flowerp40w88-asg: ami-type: AL2_x86_64 asg-cfn-stack-id: "" - asg-cfn-stack-yaml-path: /home/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/default.asg.cfn.ec2-2021041219-integritynoq-asg.yaml - asg-cfn-stack-yaml-s3-key: ec2-2021041219-integritynoq/default.asg.cfn.ec2-2021041219-integritynoq-asg.yaml + asg-cfn-stack-yaml-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/default.asg.cfn.ec2-2021042610-flowerp40w88-asg.yaml + asg-cfn-stack-yaml-s3-key: ec2-2021042610-flowerp40w88/default.asg.cfn.ec2-2021042610-flowerp40w88-asg.yaml asg-desired-capacity: 1 asg-max-size: 1 asg-min-size: 1 @@ -13,12 +13,12 @@ asgs: instance-types: - c5.xlarge logs: null - name: ec2-2021041219-integritynoq-asg + name: ec2-2021042610-flowerp40w88-asg remote-access-user-name: ec2-user ssm-document-cfn-stack-id: "" ssm-document-cfn-stack-name: "" - ssm-document-cfn-stack-yaml-path: /home/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/default.ssm.cfn.ec2-2021041219-integritynoq-asg.yaml - ssm-document-cfn-stack-yaml-s3-key: ec2-2021041219-integritynoq/default.ssm.cfn.ec2-2021041219-integritynoq-asg.yaml + ssm-document-cfn-stack-yaml-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/default.ssm.cfn.ec2-2021042610-flowerp40w88-asg.yaml + ssm-document-cfn-stack-yaml-s3-key: ec2-2021042610-flowerp40w88/default.ssm.cfn.ec2-2021042610-flowerp40w88-asg.yaml ssm-document-command-ids: null ssm-document-commands: "" ssm-document-create: false @@ -40,44 +40,44 @@ asgs: took-string: "" volume-size: 40 asgs-fetch-logs: true -asgs-logs-dir: /home/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/ec2-2021041219-integritynoq-logs-remote +asgs-logs-dir: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/ec2-2021042610-flowerp40w88-logs-remote aws-account-id: "" aws-credential-path: "" aws-iam-role-arn: "" aws-user-id: "" -config-path: /home/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/default.yaml +config-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/default.yaml dhcp-options-domain-name: "" dhcp-options-domain-name-servers: null log-color: true -log-color-override: false +log-color-override: "" log-level: info log-outputs: - stderr -- /home/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/default.yaml.log -name: ec2-2021041219-integritynoq +- /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/default.yaml.log +name: ec2-2021042610-flowerp40w88 on-failure-delete: true on-failure-delete-wait-seconds: 120 partition: aws private-subnet-ids: null public-subnet-ids: null region: us-west-2 -remote-access-commands-output-path: /home/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/default.ssh.sh +remote-access-commands-output-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/default.ssh.sh remote-access-key-create: true -remote-access-key-name: ec2-2021041219-integritynoq-key -remote-access-private-key-path: /tmp/duneroi6ln.insecure.key +remote-access-key-name: ec2-2021042610-flowerp40w88-key +remote-access-private-key-path: /var/folders/xt/szh_n5x154x2hyhj0zkpd3qr0000gn/T/mountaincz.insecure.key role-arn: "" role-cfn-stack-id: "" -role-cfn-stack-yaml-path: /home/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/default.role.cfn.yaml -role-cfn-stack-yaml-s3-key: ec2-2021041219-integritynoq/default.role.cfn.yaml +role-cfn-stack-yaml-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/default.role.cfn.yaml +role-cfn-stack-yaml-s3-key: ec2-2021042610-flowerp40w88/default.role.cfn.yaml role-create: true role-managed-policy-arns: null -role-name: ec2-2021041219-integritynoq-role +role-name: ec2-2021042610-flowerp40w88-role role-service-principals: null s3-bucket-create: true s3-bucket-create-keep: true s3-bucket-lifecycle-expiration-days: 0 -s3-bucket-name: ec2-2021041219-integritynoq-s3-bucket -s3-dir: ec2-2021041219-integritynoq +s3-bucket-name: ec2-2021042610-flowerp40w88-s3-bucket +s3-dir: ec2-2021042610-flowerp40w88 security-group-id: "" ssh-ingress-ipv4-range: "" status: null @@ -99,7 +99,7 @@ time-frame-delete: total-nodes: 1 up: false vpc-cfn-stack-id: "" -vpc-cfn-stack-yaml-path: /home/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/default.vpc.cfn.yaml -vpc-cfn-stack-yaml-s3-key: ec2-2021041219-integritynoq/default.vpc.cfn.yaml +vpc-cfn-stack-yaml-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/ec2config/default.vpc.cfn.yaml +vpc-cfn-stack-yaml-s3-key: ec2-2021042610-flowerp40w88/default.vpc.cfn.yaml vpc-create: true vpc-id: "" diff --git a/ec2config/env_test.go b/ec2config/env_test.go index 397734d4c..da9ec1c1c 100644 --- a/ec2config/env_test.go +++ b/ec2config/env_test.go @@ -58,8 +58,8 @@ func TestEnv(t *testing.T) { if cfg.LogColor { t.Fatalf("unexpected cfg.LogColor %v", cfg.LogColor) } - if !cfg.LogColorOverride { - t.Fatalf("unexpected cfg.LogColorOverride %v", cfg.LogColorOverride) + if cfg.LogColorOverride != "true" { + t.Fatalf("unexpected LogColorOverride %q", cfg.LogColorOverride) } if !cfg.S3BucketCreate { t.Fatalf("unexpected cfg.S3BucketCreate %v", cfg.S3BucketCreate) diff --git a/ec2config/validate-defaults.go b/ec2config/validate-defaults.go index 58dfb28b2..bcdf20f80 100644 --- a/ec2config/validate-defaults.go +++ b/ec2config/validate-defaults.go @@ -7,6 +7,7 @@ import ( "path" "path/filepath" "regexp" + "strconv" "strings" "sync" "time" @@ -38,7 +39,9 @@ func NewDefault() *Config { ConfigPath: "", RemoteAccessCommandsOutputPath: "", - LogColor: true, + LogColor: true, + LogColorOverride: "", + LogLevel: logutil.DefaultLogLevel, // default, stderr, stdout, or file name // log file named with cluster name will be added automatically @@ -130,10 +133,22 @@ func (cfg *Config) validateConfig() error { return fmt.Errorf("region %q for partition %q not found in %+v", cfg.Region, cfg.Partition, regions) } - _, cerr := terminal.IsColor() - if cfg.LogColor && !cfg.LogColorOverride && cerr != nil { - cfg.LogColor = false + if cfg.LogColorOverride == "" { + _, cerr := terminal.IsColor() + if cfg.LogColor && cerr != nil { + cfg.LogColor = false + fmt.Fprintf(os.Stderr, "[WARN] LogColor is set to 'false' due to error %+v", cerr) + } + } else { + // non-empty override, don't even run "terminal.IsColor" + ov, perr := strconv.ParseBool(cfg.LogColorOverride) + if perr != nil { + return fmt.Errorf("failed to parse LogColorOverride %q (%v)", cfg.LogColorOverride, perr) + } + cfg.LogColor = ov + fmt.Fprintf(os.Stderr, "[WARN] LogColor is overwritten with %q", cfg.LogColorOverride) } + if len(cfg.LogOutputs) == 0 { return errors.New("LogOutputs is not empty") } diff --git a/eks/eks.go b/eks/eks.go index 3187d5df3..d3965234b 100644 --- a/eks/eks.go +++ b/eks/eks.go @@ -76,7 +76,6 @@ import ( "github.com/aws/aws-k8s-tester/pkg/httputil" k8s_client "github.com/aws/aws-k8s-tester/pkg/k8s-client" "github.com/aws/aws-k8s-tester/pkg/logutil" - "github.com/aws/aws-k8s-tester/pkg/terminal" "github.com/aws/aws-k8s-tester/pkg/user" "github.com/aws/aws-k8s-tester/version" aws_v2 "github.com/aws/aws-sdk-go-v2/aws" @@ -117,7 +116,6 @@ import ( "github.com/aws/aws-sdk-go/service/ssm/ssmiface" "github.com/aws/aws-sdk-go/service/sts" "github.com/dustin/go-humanize" - "github.com/mitchellh/colorstring" "go.uber.org/zap" "k8s.io/client-go/kubernetes" "k8s.io/klog" @@ -211,21 +209,7 @@ func New(cfg *eksconfig.Config) (ts *Tester, err error) { return nil, err } _ = zap.ReplaceGlobals(lg) - lg.Info("set up log writer and file", zap.Strings("outputs", cfg.LogOutputs)) - - isColor := cfg.LogColor - co, cerr := terminal.IsColor() - if cerr == nil { - lg.Info("requested output in color", zap.String("output", co), zap.Error(cerr)) - colorstring.Printf("\n\n[light_green]HELLO COLOR\n\n") - isColor = true - } else if !cfg.LogColorOverride { - lg.Warn("requested output in color but not supported; overriding", zap.String("output", co), zap.Error(cerr)) - isColor = false - } else { - lg.Info("requested output color", zap.Bool("is-color", isColor), zap.String("output", co), zap.Error(cerr)) - } - cfg.LogColor = isColor + lg.Info("set up log writer and file", zap.Strings("outputs", cfg.LogOutputs), zap.Bool("is-color", cfg.LogColor)) cfg.Sync() colorize := cfg.Colorize diff --git a/eksconfig/README.md b/eksconfig/README.md index 426bf6ef4..168da4b8b 100644 --- a/eksconfig/README.md +++ b/eksconfig/README.md @@ -55,7 +55,7 @@ AWS_K8S_TESTER_EKS_ADD_ON_CLUSTER_VERSION_UPGRADE_ENABLE=true \ | AWS_K8S_TESTER_EKS_KUBECTL_COMMANDS_OUTPUT_PATH | read-only "false" | *eksconfig.Config.KubectlCommandsOutputPath | string | | AWS_K8S_TESTER_EKS_REMOTE_ACCESS_COMMANDS_OUTPUT_PATH | read-only "false" | *eksconfig.Config.RemoteAccessCommandsOutputPath | string | | AWS_K8S_TESTER_EKS_LOG_COLOR | read-only "false" | *eksconfig.Config.LogColor | bool | -| AWS_K8S_TESTER_EKS_LOG_COLOR_OVERRIDE | read-only "false" | *eksconfig.Config.LogColorOverride | bool | +| AWS_K8S_TESTER_EKS_LOG_COLOR_OVERRIDE | read-only "false" | *eksconfig.Config.LogColorOverride | string | | AWS_K8S_TESTER_EKS_LOG_LEVEL | read-only "false" | *eksconfig.Config.LogLevel | string | | AWS_K8S_TESTER_EKS_LOG_OUTPUTS | read-only "false" | *eksconfig.Config.LogOutputs | []string | | AWS_K8S_TESTER_EKS_AWS_CLI_PATH | read-only "false" | *eksconfig.Config.AWSCLIPath | string | @@ -94,45 +94,51 @@ AWS_K8S_TESTER_EKS_ADD_ON_CLUSTER_VERSION_UPGRADE_ENABLE=true \ *----------------------------------------------------------------*-------------------*----------------------------------------------------------*----------------* -*----------------------------------------------------------------*-------------------*----------------------------------------------------*-------------------* -| ENVIRONMENTAL VARIABLE | READ ONLY | TYPE | GO TYPE | -*----------------------------------------------------------------*-------------------*----------------------------------------------------*-------------------* -| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_NAME | read-only "false" | *eksconfig.Parameters.RoleName | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_CREATE | read-only "false" | *eksconfig.Parameters.RoleCreate | bool | -| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_ARN | read-only "false" | *eksconfig.Parameters.RoleARN | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_SERVICE_PRINCIPALS | read-only "false" | *eksconfig.Parameters.RoleServicePrincipals | []string | -| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_MANAGED_POLICY_ARNS | read-only "false" | *eksconfig.Parameters.RoleManagedPolicyARNs | []string | -| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_CFN_STACK_ID | read-only "true" | *eksconfig.Parameters.RoleCFNStackID | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_CFN_STACK_YAML_PATH | read-only "true" | *eksconfig.Parameters.RoleCFNStackYAMLPath | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_CFN_STACK_YAML_S3_KEY | read-only "true" | *eksconfig.Parameters.RoleCFNStackYAMLS3Key | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_TAGS | read-only "false" | *eksconfig.Parameters.Tags | map[string]string | -| AWS_K8S_TESTER_EKS_PARAMETERS_REQUEST_HEADER_KEY | read-only "false" | *eksconfig.Parameters.RequestHeaderKey | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_REQUEST_HEADER_VALUE | read-only "false" | *eksconfig.Parameters.RequestHeaderValue | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_RESOLVER_URL | read-only "false" | *eksconfig.Parameters.ResolverURL | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_SIGNING_NAME | read-only "false" | *eksconfig.Parameters.SigningName | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CREATE | read-only "false" | *eksconfig.Parameters.VPCCreate | bool | -| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_ID | read-only "false" | *eksconfig.Parameters.VPCID | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CFN_STACK_ID | read-only "true" | *eksconfig.Parameters.VPCCFNStackID | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CFN_STACK_YAML_PATH | read-only "true" | *eksconfig.Parameters.VPCCFNStackYAMLPath | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CFN_STACK_YAML_S3_KEY | read-only "true" | *eksconfig.Parameters.VPCCFNStackYAMLS3Key | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CIDR_BLOCK1 | read-only "false" | *eksconfig.Parameters.VPCBlock1 | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CIDR_BLOCK2 | read-only "false" | *eksconfig.Parameters.VPCBlock2 | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CIDR_BLOCK3 | read-only "false" | *eksconfig.Parameters.VPCBlock3 | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CIDR_BLOCK4 | read-only "false" | *eksconfig.Parameters.VPCBlock4 | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_PUBLIC_SUBNET_CIDR_1 | read-only "false" | *eksconfig.Parameters.PublicSubnetCIDR1 | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_PUBLIC_SUBNET_CIDR_2 | read-only "false" | *eksconfig.Parameters.PublicSubnetCIDR2 | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_PUBLIC_SUBNET_CIDR_3 | read-only "false" | *eksconfig.Parameters.PublicSubnetCIDR3 | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_PRIVATE_SUBNET_CIDR_1 | read-only "false" | *eksconfig.Parameters.PrivateSubnetCIDR1 | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_PRIVATE_SUBNET_CIDR_2 | read-only "false" | *eksconfig.Parameters.PrivateSubnetCIDR2 | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_PUBLIC_SUBNET_IDS | read-only "true" | *eksconfig.Parameters.PublicSubnetIDs | []string | -| AWS_K8S_TESTER_EKS_PARAMETERS_PRIVATE_SUBNET_IDS | read-only "true" | *eksconfig.Parameters.PrivateSubnetIDs | []string | -| AWS_K8S_TESTER_EKS_PARAMETERS_DHCP_OPTIONS_DOMAIN_NAME | read-only "false" | *eksconfig.Parameters.DHCPOptionsDomainName | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_DHCP_OPTIONS_DOMAIN_NAME_SERVERS | read-only "false" | *eksconfig.Parameters.DHCPOptionsDomainNameServers | []string | -| AWS_K8S_TESTER_EKS_PARAMETERS_VERSION | read-only "false" | *eksconfig.Parameters.Version | string | -| AWS_K8S_TESTER_EKS_PARAMETERS_VERSION_VALUE | read-only "true" | *eksconfig.Parameters.VersionValue | float64 | -| AWS_K8S_TESTER_EKS_PARAMETERS_ENCRYPTION_CMK_CREATE | read-only "false" | *eksconfig.Parameters.EncryptionCMKCreate | bool | -| AWS_K8S_TESTER_EKS_PARAMETERS_ENCRYPTION_CMK_ARN | read-only "false" | *eksconfig.Parameters.EncryptionCMKARN | string | -*----------------------------------------------------------------*-------------------*----------------------------------------------------*-------------------* +*--------------------------------------------------------------------*-------------------*--------------------------------------------------------*-------------------* +| ENVIRONMENTAL VARIABLE | READ ONLY | TYPE | GO TYPE | +*--------------------------------------------------------------------*-------------------*--------------------------------------------------------*-------------------* +| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_NAME | read-only "false" | *eksconfig.Parameters.RoleName | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_CREATE | read-only "false" | *eksconfig.Parameters.RoleCreate | bool | +| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_ARN | read-only "false" | *eksconfig.Parameters.RoleARN | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_SERVICE_PRINCIPALS | read-only "false" | *eksconfig.Parameters.RoleServicePrincipals | []string | +| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_MANAGED_POLICY_ARNS | read-only "false" | *eksconfig.Parameters.RoleManagedPolicyARNs | []string | +| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_CFN_STACK_ID | read-only "true" | *eksconfig.Parameters.RoleCFNStackID | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_CFN_STACK_YAML_PATH | read-only "true" | *eksconfig.Parameters.RoleCFNStackYAMLPath | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_ROLE_CFN_STACK_YAML_S3_KEY | read-only "true" | *eksconfig.Parameters.RoleCFNStackYAMLS3Key | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_TAGS | read-only "false" | *eksconfig.Parameters.Tags | map[string]string | +| AWS_K8S_TESTER_EKS_PARAMETERS_REQUEST_HEADER_KEY | read-only "false" | *eksconfig.Parameters.RequestHeaderKey | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_REQUEST_HEADER_VALUE | read-only "false" | *eksconfig.Parameters.RequestHeaderValue | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_RESOLVER_URL | read-only "false" | *eksconfig.Parameters.ResolverURL | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_SIGNING_NAME | read-only "false" | *eksconfig.Parameters.SigningName | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CREATE | read-only "false" | *eksconfig.Parameters.VPCCreate | bool | +| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_ID | read-only "false" | *eksconfig.Parameters.VPCID | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CFN_STACK_ID | read-only "true" | *eksconfig.Parameters.VPCCFNStackID | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CFN_STACK_YAML_PATH | read-only "true" | *eksconfig.Parameters.VPCCFNStackYAMLPath | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CFN_STACK_YAML_S3_KEY | read-only "true" | *eksconfig.Parameters.VPCCFNStackYAMLS3Key | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CIDR_BLOCK1 | read-only "false" | *eksconfig.Parameters.VPCBlock1 | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CIDR_BLOCK2 | read-only "false" | *eksconfig.Parameters.VPCBlock2 | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CIDR_BLOCK3 | read-only "false" | *eksconfig.Parameters.VPCBlock3 | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_VPC_CIDR_BLOCK4 | read-only "false" | *eksconfig.Parameters.VPCBlock4 | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_PUBLIC_SUBNET_CIDR_1 | read-only "false" | *eksconfig.Parameters.PublicSubnetCIDR1 | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_PUBLIC_SUBNET_CIDR_2 | read-only "false" | *eksconfig.Parameters.PublicSubnetCIDR2 | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_PUBLIC_SUBNET_CIDR_3 | read-only "false" | *eksconfig.Parameters.PublicSubnetCIDR3 | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_PRIVATE_SUBNET_CIDR_1 | read-only "false" | *eksconfig.Parameters.PrivateSubnetCIDR1 | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_PRIVATE_SUBNET_CIDR_2 | read-only "false" | *eksconfig.Parameters.PrivateSubnetCIDR2 | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_PUBLIC_SUBNET_IDS | read-only "true" | *eksconfig.Parameters.PublicSubnetIDs | []string | +| AWS_K8S_TESTER_EKS_PARAMETERS_PRIVATE_SUBNET_IDS | read-only "true" | *eksconfig.Parameters.PrivateSubnetIDs | []string | +| AWS_K8S_TESTER_EKS_PARAMETERS_DHCP_OPTIONS_DOMAIN_NAME | read-only "false" | *eksconfig.Parameters.DHCPOptionsDomainName | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_DHCP_OPTIONS_DOMAIN_NAME_SERVERS | read-only "false" | *eksconfig.Parameters.DHCPOptionsDomainNameServers | []string | +| AWS_K8S_TESTER_EKS_PARAMETERS_VERSION | read-only "false" | *eksconfig.Parameters.Version | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_VERSION_VALUE | read-only "true" | *eksconfig.Parameters.VersionValue | float64 | +| AWS_K8S_TESTER_EKS_PARAMETERS_ENCRYPTION_CMK_CREATE | read-only "false" | *eksconfig.Parameters.EncryptionCMKCreate | bool | +| AWS_K8S_TESTER_EKS_PARAMETERS_ENCRYPTION_CMK_ARN | read-only "false" | *eksconfig.Parameters.EncryptionCMKARN | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_KUBE_APISERVER_MAX_REQUESTS_INFLIGHT | read-only "false" | *eksconfig.Parameters.KubeAPIServerMaxRequestsInflight | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_KUBE_CONTROLLER_MANAGER_QPS | read-only "false" | *eksconfig.Parameters.KubeControllerManagerQPS | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_KUBE_CONTROLLER_MANAGER_BURST | read-only "false" | *eksconfig.Parameters.KubeControllerManagerBurst | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_KUBE_SCHEDULER_QPS | read-only "false" | *eksconfig.Parameters.KubeSchedulerQPS | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_KUBE_SCHEDULER_BURST | read-only "false" | *eksconfig.Parameters.KubeSchedulerBurst | string | +| AWS_K8S_TESTER_EKS_PARAMETERS_FE_UPDATE_MASTER_FLAGS_URL | read-only "false" | *eksconfig.Parameters.FEUpdateMasterFlagsURL | string | +*--------------------------------------------------------------------*-------------------*--------------------------------------------------------*-------------------* *--------------------------------------------------------------*-------------------*------------------------------------------------*--------------------* @@ -849,7 +855,7 @@ AWS_K8S_TESTER_EKS_ADD_ON_CLUSTER_VERSION_UPGRADE_ENABLE=true \ *-----------------------------------------------------------------------------------*-------------------*--------------------------------------------------------------------*--------------------* -| ENVIRONMENTAL VARIABLE | READ ONLY | TYPE | GO TYPE | +| ENVIRONMENTAL VARIABLE | READ ONLY | TYPE | GO TYPE | *-----------------------------------------------------------------------------------*-------------------*--------------------------------------------------------------------*--------------------* | AWS_K8S_TESTER_EKS_ADD_ON_CLUSTER_LOADER_LOCAL_ENABLE | read-only "false" | *eksconfig.AddOnClusterLoaderLocal.Enable | bool | | AWS_K8S_TESTER_EKS_ADD_ON_CLUSTER_LOADER_LOCAL_CREATED | read-only "true" | *eksconfig.AddOnClusterLoaderLocal.Created | bool | diff --git a/eksconfig/config.go b/eksconfig/config.go index 528c6f4d3..4f3705be6 100644 --- a/eksconfig/config.go +++ b/eksconfig/config.go @@ -64,10 +64,14 @@ type Config struct { // LogColor is true to output logs in color. LogColor bool `json:"log-color"` - // LogColorOverride is true to use "LogColor" setting - // even if the current terminal does not support color outputs. - // Useful to output in color in HTML based log outputs (e.g. Prow). - LogColorOverride bool `json:"log-color-override"` + // LogColorOverride is not empty to override "LogColor" setting. + // If not empty, the automatic color check is not even run and use this value instead. + // For instance, github action worker might not support color device, + // thus exiting color check with the exit code 1. + // Useful to output in color in HTML based log outputs (e.g., Prow). + // Useful to skip terminal color check when there is no color device (e.g., Github action worker). + LogColorOverride string `json:"log-color-override"` + // LogLevel configures log level. Only supports debug, info, warn, error, panic, or fatal. Default 'info'. LogLevel string `json:"log-level"` // LogOutputs is a list of log outputs. Valid values are 'default', 'stderr', 'stdout', or file names. @@ -816,8 +820,9 @@ func NewDefault() *Config { AWSCLIPath: "", LogColor: true, - LogColorOverride: false, - LogLevel: logutil.DefaultLogLevel, + LogColorOverride: "", + + LogLevel: logutil.DefaultLogLevel, // default, stderr, stdout, or file name // log file named with cluster name will be added automatically LogOutputs: []string{"stderr"}, @@ -915,9 +920,10 @@ func NewDefault() *Config { var err error cfg.AWSCLIPath, err = exec.LookPath("aws") if err != nil { - panic(fmt.Errorf("aws CLI is not installed (%v); required for 'aws eks update-kubeconfig'", err)) + fmt.Fprintf(os.Stderr, "[WARN] aws CLI is not installed (%v); required for 'aws eks update-kubeconfig'\n", err) } + // TODO: check for ARM/x86 if runtime.GOOS == "darwin" { cfg.KubectlDownloadURL = strings.Replace(cfg.KubectlDownloadURL, "linux", "darwin", -1) } @@ -941,14 +947,14 @@ func (cfg *Config) ValidateAndSetDefaults() error { cfg.mu.Unlock() }() - // Generically defaults and validates addons that are members of cfg.Spec + // generically defaults and validates addons that are members of cfg.Spec spec := reflect.ValueOf(cfg.Spec) for i := 0; i < spec.NumField(); i++ { - // Skip if the field does not implement Addon or is Nil + // skip if the field does not implement Addon or is Nil if addon, ok := spec.Field(i).Interface().(Addon); ok && !reflect.ValueOf(addon).IsNil() { addon.Default(cfg) if err := addon.Validate(cfg); err != nil { - return fmt.Errorf("Failed to validate %s, %v", reflect.ValueOf(addon).Type(), err) + return fmt.Errorf("failed to validate %s, %v", reflect.ValueOf(addon).Type(), err) } } } @@ -1148,10 +1154,22 @@ func (cfg *Config) validateConfig() error { fmt.Fprintf(os.Stderr, "[WARN] region %q for partition %q not found in %+v", cfg.Region, cfg.Partition, regions) } - _, cerr := terminal.IsColor() - if cfg.LogColor && !cfg.LogColorOverride && cerr != nil { - cfg.LogColor = false + if cfg.LogColorOverride == "" { + _, cerr := terminal.IsColor() + if cfg.LogColor && cerr != nil { + cfg.LogColor = false + fmt.Fprintf(os.Stderr, "[WARN] LogColor is set to 'false' due to error %+v", cerr) + } + } else { + // non-empty override, don't even run "terminal.IsColor" + ov, perr := strconv.ParseBool(cfg.LogColorOverride) + if perr != nil { + return fmt.Errorf("failed to parse LogColorOverride %q (%v)", cfg.LogColorOverride, perr) + } + cfg.LogColor = ov + fmt.Fprintf(os.Stderr, "[WARN] LogColor is overwritten with %q", cfg.LogColorOverride) } + if len(cfg.LogOutputs) == 0 { return errors.New("LogOutputs is not empty") } diff --git a/eksconfig/default.yaml b/eksconfig/default.yaml index 0cc832a55..37960da5a 100644 --- a/eksconfig/default.yaml +++ b/eksconfig/default.yaml @@ -1,33 +1,32 @@ add-on-cni-vpc: null -aws-cli-path: /usr/local/bin/aws client-burst: 20 client-qps: 10 client-timeout: 15000000000 client-timeout-string: 15s clients: 2 command-after-create-add-ons: "" -command-after-create-add-ons-output-path: /Volumes/workplace/go/src/github.com/aws-k8s-tester/eksconfig/default.after-create-add-ons.out.log +command-after-create-add-ons-output-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/eksconfig/default.after-create-add-ons.out.log command-after-create-add-ons-timeout: 180000000000 command-after-create-add-ons-timeout-string: 3m0s command-after-create-cluster: "" -command-after-create-cluster-output-path: /Volumes/workplace/go/src/github.com/aws-k8s-tester/eksconfig/default.after-create-cluster.out.log +command-after-create-cluster-output-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/eksconfig/default.after-create-cluster.out.log command-after-create-cluster-timeout: 180000000000 command-after-create-cluster-timeout-string: 3m0s -config-path: /Volumes/workplace/go/src/github.com/aws-k8s-tester/eksconfig/default.yaml +config-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/eksconfig/default.yaml cw-namespace: aws-k8s-tester-eks -kubeconfig-path: /Volumes/workplace/go/src/github.com/aws-k8s-tester/eksconfig/default.kubeconfig.yaml -kubectl-commands-output-path: /Volumes/workplace/go/src/github.com/aws-k8s-tester/eksconfig/default.kubectl.sh +kubeconfig-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/eksconfig/default.kubeconfig.yaml +kubectl-commands-output-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/eksconfig/default.kubectl.sh kubectl-download-url: https://storage.googleapis.com/kubernetes-release/release/v1.18.9/bin/darwin/amd64/kubectl kubectl-path: /tmp/kubectl-test-v1.18.9 log-color: true -log-color-override: false +log-color-override: "" log-level: info log-outputs: - stderr -- /Volumes/workplace/go/src/github.com/aws-k8s-tester/eksconfig/default.log +- /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/eksconfig/default.log metadata: creationTimestamp: null -name: eks-2020101516-integritymo5 +name: eks-2021042610-mistyrkf7ksk on-failure-delete: true on-failure-delete-wait-seconds: 120 parameters: @@ -35,6 +34,7 @@ parameters: dhcp-options-domain-name-servers: null encryption-cmk-arn: "" encryption-cmk-create: true + kube-apiserver-max-requests-inflight: "" private-subnet-cidr-1: 10.3.0.0/17 private-subnet-cidr-2: 10.3.128.0/17 private-subnet-ids: null @@ -47,19 +47,19 @@ parameters: resolver-url: "" role-arn: "" role-cfn-stack-id: "" - role-cfn-stack-yaml-path: /Volumes/workplace/go/src/github.com/aws-k8s-tester/eksconfig/default.role.cfn.yaml - role-cfn-stack-yaml-s3-key: eks-2020101516-integritymo5/default.role.cfn.yaml + role-cfn-stack-yaml-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/eksconfig/default.role.cfn.yaml + role-cfn-stack-yaml-s3-key: eks-2021042610-mistyrkf7ksk/default.role.cfn.yaml role-create: true role-managed-policy-arns: null - role-name: eks-2020101516-integritymo5-role + role-name: eks-2021042610-mistyrkf7ksk-role role-service-principals: null signing-name: eks tags: null version: "1.18" version-value: 1.18 vpc-cfn-stack-id: "" - vpc-cfn-stack-yaml-path: /Volumes/workplace/go/src/github.com/aws-k8s-tester/eksconfig/default.vpc.cfn.yaml - vpc-cfn-stack-yaml-s3-key: eks-2020101516-integritymo5/default.vpc.cfn.yaml + vpc-cfn-stack-yaml-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/eksconfig/default.vpc.cfn.yaml + vpc-cfn-stack-yaml-s3-key: eks-2021042610-mistyrkf7ksk/default.vpc.cfn.yaml vpc-cidr-block1: 10.0.0.0/16 vpc-cidr-block2: 10.1.0.0/16 vpc-cidr-block3: 10.2.0.0/16 @@ -68,14 +68,14 @@ parameters: vpc-id: "" partition: aws region: us-west-2 -remote-access-commands-output-path: /Volumes/workplace/go/src/github.com/aws-k8s-tester/eksconfig/default.ssh.sh +remote-access-commands-output-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/eksconfig/default.ssh.sh remote-access-key-create: true -remote-access-key-name: eks-2020101516-integritymo5-remote-access-key -remote-access-private-key-path: /var/folders/hk/xl6wn6f946n6_l4qzxsk6xx82bpcvk/T/nitrod5t6a1xehy.insecure.key +remote-access-key-name: eks-2021042610-mistyrkf7ksk-remote-access-key +remote-access-private-key-path: /var/folders/xt/szh_n5x154x2hyhj0zkpd3qr0000gn/T/deluxe3rn4mmafi.insecure.key s3-bucket-create: true s3-bucket-create-keep: true s3-bucket-lifecycle-expiration-days: 0 -s3-bucket-name: eks-2020101516-integritymo5-s3-bucket +s3-bucket-name: eks-2021042610-mistyrkf7ksk-s3-bucket skip-delete-cluster-and-nodes: false spec: {} status: @@ -88,8 +88,8 @@ status: cluster-ca: "" cluster-ca-decoded: "" cluster-cfn-stack-id: "" - cluster-cfn-stack-yaml-path: /Volumes/workplace/go/src/github.com/aws-k8s-tester/eksconfig/default.cluster.cfn.yaml - cluster-cfn-stack-yaml-s3-key: eks-2020101516-integritymo5/default.cluster.cfn.yaml + cluster-cfn-stack-yaml-path: /Users/leegyuho/go/src/github.com/aws/aws-k8s-tester/eksconfig/default.cluster.cfn.yaml + cluster-cfn-stack-yaml-s3-key: eks-2021042610-mistyrkf7ksk/default.cluster.cfn.yaml cluster-control-plane-security-group-id: "" cluster-oidc-issuer-arn: "" cluster-oidc-issuer-ca-thumbprint: "" diff --git a/eksconfig/env_test.go b/eksconfig/env_test.go index ca46fc5b2..a0e90672e 100644 --- a/eksconfig/env_test.go +++ b/eksconfig/env_test.go @@ -642,8 +642,8 @@ spec: if cfg.LogColor { t.Fatalf("unexpected LogColor %v", cfg.LogColor) } - if !cfg.LogColorOverride { - t.Fatalf("unexpected LogColorOverride %v", cfg.LogColorOverride) + if cfg.LogColorOverride != "true" { + t.Fatalf("unexpected LogColorOverride %q", cfg.LogColorOverride) } if cfg.KubectlCommandsOutputPath != "hello-kubectl" { t.Fatalf("unexpected %q", cfg.KubectlCommandsOutputPath) From bc9b18fbc55bf385f8db4de6ffc3438a8de3ea4d Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Mon, 26 Apr 2021 10:51:31 -0700 Subject: [PATCH 2/2] CHANGELOG: update "LogColorOverride" change Signed-off-by: Gyuho Lee --- CHANGELOG/CHANGELOG-1.5.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG/CHANGELOG-1.5.md b/CHANGELOG/CHANGELOG-1.5.md index 4dca5c423..201b2082b 100644 --- a/CHANGELOG/CHANGELOG-1.5.md +++ b/CHANGELOG/CHANGELOG-1.5.md @@ -8,6 +8,12 @@ - Initial commit for [`"github.com/aws/aws-k8s-tester/client"`](https://github.com/aws/aws-k8s-tester/commit/de76767f6e0972d35370457dc67dd4959b9e638f). +### `ec2config` + +- Change [`LogColorOverride` field from `bool` to `string`](https://github.com/aws/aws-k8s-tester/pull/212). + - Fix https://github.com/aws/aws-k8s-tester/issues/211. + - If not empty, now `terminal.IsColor` is not run. + ### `eks` - Add [`eks/stresser2`](https://github.com/aws/aws-k8s-tester/pull/206). @@ -17,6 +23,9 @@ - Add [`AWS_K8S_TESTER_EKS_ADD_ON_CLUSTER_LOADER_LOCAL_CL2_SCHEDULER_THROUGHPUT_THRESHOLD`](https://github.com/aws/aws-k8s-tester/pull/208). - Add [`AWS_K8S_TESTER_EKS_ADD_ON_CLUSTER_LOADER_REMOTE_CL2_SCHEDULER_THROUGHPUT_THRESHOLD`](https://github.com/aws/aws-k8s-tester/pull/208). - Ignore error [for an unknown region](https://github.com/aws/aws-k8s-tester/pull/204). +- Change [`LogColorOverride` field from `bool` to `string`](https://github.com/aws/aws-k8s-tester/pull/212). + - Fix https://github.com/aws/aws-k8s-tester/issues/211. + - If not empty, now `terminal.IsColor` is not run. ### `k8s-tester`