Documentation ¶
Overview ¶
Package eksconfig defines EKS test configuration.
Index ¶
- Constants
- Variables
- type AddOnALB2048
- type AddOnFargate
- type AddOnIRSA
- type AddOnJobEcho
- type AddOnJobPerl
- type AddOnManagedNodeGroups
- type AddOnNLBHelloWorld
- type AddOnSecrets
- type ClusterStatus
- type Config
- func (cfg *Config) IsAddOnALB2048Enabled() bool
- func (cfg *Config) IsAddOnFargateEnabled() bool
- func (cfg *Config) IsAddOnIRSAEnabled() bool
- func (cfg *Config) IsAddOnJobEchoEnabled() bool
- func (cfg *Config) IsAddOnJobPerlEnabled() bool
- func (cfg *Config) IsAddOnManagedNodeGroupsEnabled() bool
- func (cfg *Config) IsAddOnNLBHelloWorldEnabled() bool
- func (cfg *Config) IsAddOnSecretsEnabled() bool
- func (cfg *Config) KubectlCommand() string
- func (cfg *Config) KubectlCommands() (s string)
- func (cfg *Config) RecordStatus(status string)
- func (cfg *Config) SSHCommands() string
- func (cfg *Config) Sync() (err error)
- func (cfg *Config) UpdateFromEnvs() (err error)
- func (cfg *Config) ValidateAndSetDefaults() error
- type MNG
- type Parameters
- type Status
- type StatusManagedNodeGroup
- type StatusManagedNodeGroups
Constants ¶
const ( // EnvironmentVariablePrefix is the environment variable prefix used for "eksconfig". EnvironmentVariablePrefix = "AWS_K8S_TESTER_EKS_" // EnvironmentVariablePrefixParameters is the environment variable prefix used for "eksconfig". EnvironmentVariablePrefixParameters = "AWS_K8S_TESTER_EKS_PARAMETERS_" // EnvironmentVariablePrefixAddOnManagedNodeGroups is the environment variable prefix used for "eksconfig". EnvironmentVariablePrefixAddOnManagedNodeGroups = "AWS_K8S_TESTER_EKS_ADD_ON_MANAGED_NODE_GROUPS_" // EnvironmentVariablePrefixAddOnNLBHelloWorld is the environment variable prefix used for "eksconfig". EnvironmentVariablePrefixAddOnNLBHelloWorld = "AWS_K8S_TESTER_EKS_ADD_ON_NLB_HELLO_WORLD_" // EnvironmentVariablePrefixAddOnALB2048 is the environment variable prefix used for "eksconfig". EnvironmentVariablePrefixAddOnALB2048 = "AWS_K8S_TESTER_EKS_ADD_ON_ALB_2048_" // EnvironmentVariablePrefixAddOnJobPerl is the environment variable prefix used for "eksconfig". EnvironmentVariablePrefixAddOnJobPerl = "AWS_K8S_TESTER_EKS_ADD_ON_JOB_PERL_" // EnvironmentVariablePrefixAddOnJobEcho is the environment variable prefix used for "eksconfig". EnvironmentVariablePrefixAddOnJobEcho = "AWS_K8S_TESTER_EKS_ADD_ON_JOB_ECHO_" // EnvironmentVariablePrefixAddOnSecrets is the environment variable prefix used for "eksconfig". EnvironmentVariablePrefixAddOnSecrets = "AWS_K8S_TESTER_EKS_ADD_ON_SECRETS_" // EnvironmentVariablePrefixAddOnIRSA is the environment variable prefix used for "eksconfig". EnvironmentVariablePrefixAddOnIRSA = "AWS_K8S_TESTER_EKS_ADD_ON_IRSA_" // EnvironmentVariablePrefixAddOnFargate is the environment variable prefix used for "eksconfig". EnvironmentVariablePrefixAddOnFargate = "AWS_K8S_TESTER_EKS_ADD_ON_FARGATE_" )
const ( // DefaultNodeInstanceTypeCPU is the default EC2 instance type for CPU worker node. DefaultNodeInstanceTypeCPU = "c5.xlarge" // DefaultNodeInstanceTypeGPU is the default EC2 instance type for GPU worker node. DefaultNodeInstanceTypeGPU = "p3.8xlarge" // DefaultNodeVolumeSize is the default EC2 instance volume size for a worker node. DefaultNodeVolumeSize = 40 // MNGMaxLimit is the maximum number of "Managed Node Group"s per a EKS cluster. MNGMaxLimit = 10 // MNGNodesMaxLimit is the maximum number of nodes per a "Managed Node Group". MNGNodesMaxLimit = 100 )
const ClusterStatusDELETEDORNOTEXIST = "DELETED/NOT-EXIST"
ClusterStatusDELETEDORNOTEXIST defines the cluster status when the cluster is not found.
ref. https://docs.aws.amazon.com/eks/latest/APIReference/API_Cluster.html#AmazonEKS-Type-Cluster-status
CREATING ACTIVE UPDATING DELETING FAILED
Variables ¶
var DefaultConfig = Config{ ConfigPath: "", KubectlCommandsOutputPath: "", KubeConfigPath: "", Name: "", AWSCLIPath: "", Region: "us-west-2", LogLevel: logutil.DefaultLogLevel, LogOutputs: []string{"stderr"}, KubectlDownloadURL: "https://storage.googleapis.com/kubernetes-release/release/v1.14.10/bin/linux/amd64/kubectl", KubectlPath: "/tmp/kubectl-test-1.14.10", OnFailureDelete: true, OnFailureDeleteWaitSeconds: 120, Parameters: &Parameters{ RoleCreate: true, VPCCreate: true, SigningName: "eks", Version: "1.14", EncryptionCMKCreate: true, }, AddOnManagedNodeGroups: &AddOnManagedNodeGroups{ Enable: false, SigningName: "eks", RoleCreate: true, RemoteAccessKeyCreate: true, RemoteAccessPrivateKeyPath: filepath.Join(homedir.HomeDir(), ".ssh", "kube_aws_rsa"), RemoteAccessUserName: "ec2-user", LogsDir: "", }, AddOnNLBHelloWorld: &AddOnNLBHelloWorld{ Enable: false, DeploymentReplicas: 3, }, AddOnALB2048: &AddOnALB2048{ Enable: false, DeploymentReplicasALB: 3, DeploymentReplicas2048: 3, }, AddOnJobPerl: &AddOnJobPerl{ Enable: false, Completes: 30, Parallels: 10, }, AddOnJobEcho: &AddOnJobEcho{ Enable: false, Completes: 1000, Parallels: 100, Size: 100 * 1024, }, AddOnSecrets: &AddOnSecrets{ Enable: false, Objects: 10, Size: 10 * 1024, SecretQPS: 1, SecretBurst: 1, PodQPS: 100, PodBurst: 5, }, AddOnIRSA: &AddOnIRSA{ Enable: false, DeploymentReplicas: 10, }, AddOnFargate: &AddOnFargate{ Enable: false, RoleCreate: true, }, Status: &Status{Up: false}, StatusManagedNodeGroups: &StatusManagedNodeGroups{ NvidiaDriverInstalled: false, Nodes: make(map[string]StatusManagedNodeGroup), }, }
DefaultConfig is the default configuration.
- empty string creates a non-nil object for pointer-type field
- omitting an entire field returns nil value
- make sure to check both
MAKE SURE TO SYNC THE DEFAULT VALUES in "eks" templates
Functions ¶
This section is empty.
Types ¶
type AddOnALB2048 ¶ added in v0.5.0
type AddOnALB2048 struct { // Enable is 'true' to create this add-on. Enable bool `json:"enable"` // Created is true when the resource has been created. // Used for delete operations. Created bool `json:"created" read-only:"true"` // CreateTook is the duration that took to create the resource. CreateTook time.Duration `json:"create-took,omitempty" read-only:"true"` // CreateTookString is the duration that took to create the resource. CreateTookString string `json:"create-took-string,omitempty" read-only:"true"` // DeleteTook is the duration that took to create the resource. DeleteTook time.Duration `json:"delete-took,omitempty" read-only:"true"` // DeleteTookString is the duration that took to create the resource. DeleteTookString string `json:"delete-took-string,omitempty" read-only:"true"` // Namespace is the namespace to create "ALB" objects in. Namespace string `json:"namespace"` // DeploymentReplicasALB is the number of ALB replicas to deploy using "Deployment" object. DeploymentReplicasALB int32 `json:"deployment-replicas-alb"` // DeploymentReplicas2048 is the number of 2048 replicas to deploy using "Deployment" object. DeploymentReplicas2048 int32 `json:"deployment-replicas-2048"` // ALBARN is the ARN of the ALB created from the service. ALBARN string `json:"alb-arn" read-only:"true"` // ALBName is the name of the ALB created from the service. ALBName string `json:"alb-name" read-only:"true"` // URL is the URL for ALB 2048 Service. URL string `json:"url" read-only:"true"` }
AddOnALB2048 defines parameters for EKS cluster add-on ALB 2048 service.
type AddOnFargate ¶ added in v0.6.3
type AddOnFargate struct { // Enable is 'true' to create this add-on. Enable bool `json:"enable"` // Created is true when the resource has been created. // Used for delete operations. Created bool `json:"created" read-only:"true"` // CreateTook is the duration that took to create the resource. CreateTook time.Duration `json:"create-took,omitempty" read-only:"true"` // CreateTookString is the duration that took to create the resource. CreateTookString string `json:"create-took-string,omitempty" read-only:"true"` // DeleteTook is the duration that took to create the resource. DeleteTook time.Duration `json:"delete-took,omitempty" read-only:"true"` // DeleteTookString is the duration that took to create the resource. DeleteTookString string `json:"delete-took-string,omitempty" read-only:"true"` // Namespace is the namespace to create "Secret" and "Pod" objects in. Namespace string `json:"namespace"` // RoleName is the role name for Fargate. RoleName string `json:"role-name"` // RoleCreate is true to auto-create and delete role. RoleCreate bool `json:"role-create"` // RoleARN is the role ARN for Fargate. RoleARN string `json:"role-arn"` // RoleServicePrincipals is the Fargate role Service Principals RoleServicePrincipals []string `json:"role-service-principals"` // RoleManagedPolicyARNs is Fargate role managed policy ARNs. RoleManagedPolicyARNs []string `json:"role-managed-policy-arns"` RoleCFNStackID string `json:"role-cfn-stack-id" read-only:"true"` // ProfileName is the profile name for Fargate. ProfileName string `json:"profile-name"` // SecretName is the secret name for Fargate. SecretName string `json:"secret-name"` // PodName is the name of the Fargate Pod. PodName string `json:"pod-name"` // ContainerName is the name of the Fargate container. ContainerName string `json:"container-name"` }
AddOnFargate defines parameters for EKS cluster add-on "EKS on Fargate".
type AddOnIRSA ¶ added in v0.5.8
type AddOnIRSA struct { // Enable is 'true' to create this add-on. Enable bool `json:"enable"` // Created is true when the resource has been created. // Used for delete operations. Created bool `json:"created" read-only:"true"` // CreateTook is the duration that took to create the resource. CreateTook time.Duration `json:"create-took,omitempty" read-only:"true"` // CreateTookString is the duration that took to create the resource. CreateTookString string `json:"create-took-string,omitempty" read-only:"true"` // DeleteTook is the duration that took to create the resource. DeleteTook time.Duration `json:"delete-took,omitempty" read-only:"true"` // DeleteTookString is the duration that took to create the resource. DeleteTookString string `json:"delete-took-string,omitempty" read-only:"true"` // Namespace is the namespace to create "Secret" and "Pod" objects in. Namespace string `json:"namespace"` // RoleName is the role name for IRSA. RoleName string `json:"role-name"` // RoleARN is the role ARN for IRSA. RoleARN string `json:"role-arn"` // RoleManagedPolicyARNs is IRSA role managed policy ARNs. // ref. https://aws.amazon.com/blogs/opensource/introducing-fine-grained-iam-roles-service-accounts/ RoleManagedPolicyARNs []string `json:"role-managed-policy-arns"` RoleCFNStackID string `json:"role-cfn-stack-id" read-only:"true"` // ServiceAccountName is the ServiceAccount name. ServiceAccountName string `json:"service-account-name"` // ConfigMapName is the ConfigMap name. ConfigMapName string `json:"config-map-name"` // ConfigMapScriptFileName is the ConfigMap script name. ConfigMapScriptFileName string `json:"config-map-script-file-name"` // S3BucketName is the S3 bucket for IRSA tests. S3BucketName string `json:"s3-bucket-name"` // S3Key is the S3 key to write for IRSA tests. S3Key string `json:"s3-key"` // DeploymentName is the Deployment name. DeploymentName string `json:"deployment-name"` // DeploymentReplicas is the number of Deployment replicas. DeploymentReplicas int32 `json:"deployment-replicas"` // DeploymentResultPath is the output of "Deployment" run. DeploymentResultPath string `json:"deployment-result-path"` // DeploymentTook is the duration that took for Deployment resource. DeploymentTook time.Duration `json:"deployment-took,omitempty" read-only:"true"` // DeploymentTookString is the duration that took for Deployment resource. DeploymentTookString string `json:"deployment-took-string,omitempty" read-only:"true"` }
AddOnIRSA defines parameters for EKS cluster add-on "IAM Roles for Service Accounts (IRSA)".
type AddOnJobEcho ¶ added in v0.5.0
type AddOnJobEcho struct { // Enable is 'true' to create this add-on. Enable bool `json:"enable"` // Created is true when the resource has been created. // Used for delete operations. Created bool `json:"created" read-only:"true"` // CreateTook is the duration that took to create the resource. CreateTook time.Duration `json:"create-took,omitempty" read-only:"true"` // CreateTookString is the duration that took to create the resource. CreateTookString string `json:"create-took-string,omitempty" read-only:"true"` // DeleteTook is the duration that took to create the resource. DeleteTook time.Duration `json:"delete-took,omitempty" read-only:"true"` // DeleteTookString is the duration that took to create the resource. DeleteTookString string `json:"delete-took-string,omitempty" read-only:"true"` // Namespace is the namespace to create "Job" objects in. Namespace string `json:"namespace"` // Completes the desired number of successfully finished pods. Completes int `json:"completes"` // Parallels is the the maximum desired number of pods the // job should run at any given time. Parallels int `json:"parallels"` // Size is the job object size in bytes. // "Request entity too large: limit is 3145728" (3.1 MB). // "The Job "echo" is invalid: metadata.annotations: // Too long: must have at most 262144 characters". (0.26 MB) Size int `json:"size"` }
AddOnJobEcho defines parameters for EKS cluster add-on Job with echo.
type AddOnJobPerl ¶ added in v0.5.0
type AddOnJobPerl struct { // Enable is 'true' to create this add-on. Enable bool `json:"enable"` // Created is true when the resource has been created. // Used for delete operations. Created bool `json:"created" read-only:"true"` // CreateTook is the duration that took to create the resource. CreateTook time.Duration `json:"create-took,omitempty" read-only:"true"` // CreateTookString is the duration that took to create the resource. CreateTookString string `json:"create-took-string,omitempty" read-only:"true"` // DeleteTook is the duration that took to create the resource. DeleteTook time.Duration `json:"delete-took,omitempty" read-only:"true"` // DeleteTookString is the duration that took to create the resource. DeleteTookString string `json:"delete-took-string,omitempty" read-only:"true"` // Namespace is the namespace to create "Job" objects in. Namespace string `json:"namespace"` // Completes the desired number of successfully finished pods. Completes int `json:"completes"` // Parallels is the the maximum desired number of pods the // job should run at any given time. Parallels int `json:"parallels"` }
AddOnJobPerl defines parameters for EKS cluster add-on Job with Perl.
type AddOnManagedNodeGroups ¶ added in v0.5.5
type AddOnManagedNodeGroups struct { // Enable is true to auto-create a managed node group. Enable bool `json:"enable"` // Created is true when the resource has been created. // Used for delete operations. Created bool `json:"created" read-only:"true"` // RoleName is the name of the managed node group. RoleName string `json:"role-name"` // RoleCreate is true to auto-create and delete role. RoleCreate bool `json:"role-create"` // RoleARN is the role ARN that EKS managed node group uses to create AWS // resources for Kubernetes. // By default, it's empty which triggers tester to create one. RoleARN string `json:"role-arn"` // RoleServicePrincipals is the node group Service Principals RoleServicePrincipals []string `json:"role-service-principals"` // RoleManagedPolicyARNs is node group managed policy ARNs. RoleManagedPolicyARNs []string `json:"role-managed-policy-arns"` RoleCFNStackID string `json:"role-cfn-stack-id" read-only:"true"` // RequestHeaderKey defines EKS managed node group create cluster request header key. RequestHeaderKey string `json:"request-header-key,omitempty"` // RequestHeaderValue defines EKS managed node group create cluster request header value. RequestHeaderValue string `json:"request-header-value,omitempty"` // ResolverURL defines an AWS resolver endpoint for EKS API. // Must be left empty to use production EKS managed node group service. ResolverURL string `json:"resolver-url"` // SigningName is the EKS managed node group create request signing name. SigningName string `json:"signing-name"` // RemoteAccessKeyCreate is true to create the remote SSH access private key. RemoteAccessKeyCreate bool `json:"remote-access-key-create"` // RemoteAccessKeyName is the key name for node group SSH EC2 key pair. // ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html // ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html RemoteAccessKeyName string `json:"remote-access-key-name,omitempty"` // RemoteAccessPrivateKeyPath is the file path to store node group key pair private key. // Thus, deployer must delete the private key right after node group creation. // MAKE SURE PRIVATE KEY NEVER GETS UPLOADED TO CLOUD STORAGE AND DELETE AFTER USE!!! // ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html // ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html RemoteAccessPrivateKeyPath string `json:"remote-access-private-key-path,omitempty"` // RemoteAccessUserName is the user name for managed node group SSH access. // ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html // ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html RemoteAccessUserName string `json:"remote-access-user-name,omitempty"` // LogsDir is set to specify the target directory to store all remote log files. // If empty, it stores in the same directory as "ConfigPath". LogsDir string `json:"logs-dir,omitempty"` // MNGs maps from EKS Managed Node Group name to "MNG". MNGs map[string]MNG `json:"mngs,omitempty"` }
AddOnManagedNodeGroups defines parameters for EKS "Managed Node Group" creation. ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html
type AddOnNLBHelloWorld ¶ added in v0.5.0
type AddOnNLBHelloWorld struct { // Enable is 'true' to create this add-on. Enable bool `json:"enable"` // Created is true when the resource has been created. // Used for delete operations. Created bool `json:"created" read-only:"true"` // CreateTook is the duration that took to create the resource. CreateTook time.Duration `json:"create-took,omitempty" read-only:"true"` // CreateTookString is the duration that took to create the resource. CreateTookString string `json:"create-took-string,omitempty" read-only:"true"` // DeleteTook is the duration that took to create the resource. DeleteTook time.Duration `json:"delete-took,omitempty" read-only:"true"` // DeleteTookString is the duration that took to create the resource. DeleteTookString string `json:"delete-took-string,omitempty" read-only:"true"` // DeploymentReplicas is the number of replicas to deploy using "Deployment" object. DeploymentReplicas int32 `json:"deployment-replicas"` // Namespace is the namespace to create "NLB" objects in. Namespace string `json:"namespace"` // NLBARN is the ARN of the NLB created from the service. NLBARN string `json:"nlb-arn" read-only:"true"` // NLBName is the name of the NLB created from the service. NLBName string `json:"nlb-name" read-only:"true"` // URL is the host name for hello-world service. URL string `json:"url" read-only:"true"` }
AddOnNLBHelloWorld defines parameters for EKS cluster add-on NLB hello-world service.
type AddOnSecrets ¶ added in v0.5.5
type AddOnSecrets struct { // Enable is 'true' to create this add-on. Enable bool `json:"enable"` // Created is true when the resource has been created. // Used for delete operations. Created bool `json:"created" read-only:"true"` // CreateTook is the duration that took to create the resource. CreateTook time.Duration `json:"create-took,omitempty" read-only:"true"` // CreateTookString is the duration that took to create the resource. CreateTookString string `json:"create-took-string,omitempty" read-only:"true"` // DeleteTook is the duration that took to create the resource. DeleteTook time.Duration `json:"delete-took,omitempty" read-only:"true"` // DeleteTookString is the duration that took to create the resource. DeleteTookString string `json:"delete-took-string,omitempty" read-only:"true"` // Namespace is the namespace to create "Secret" and "Pod" objects in. Namespace string `json:"namespace"` // Objects is the number of "Secret" objects to write/read. Objects int `json:"objects"` // Size is the "Secret" value size in bytes. Size int `json:"size"` // SecretQPS is the number of "Secret" create requests to send // per second. Requests may be throttled by kube-apiserver. // Default rate limits from kube-apiserver are: // FLAG: --max-mutating-requests-inflight="200" // FLAG: --max-requests-inflight="400" SecretQPS uint `json:"secret-qps"` // SecretBurst is the number of "Secret" create requests that // a client can make in excess of the rate specified by the limiter. // Requests may be throttled by kube-apiserver. // Default rate limits from kube-apiserver are: // FLAG: --max-mutating-requests-inflight="200" // FLAG: --max-requests-inflight="400" SecretBurst uint `json:"secret-burst"` // CreatedSecretNames is the list of created "Secret" object names. CreatedSecretNames []string `json:"created-secret-names" read-only:"true"` // PodQPS is the number of "Pod" create requests to send // per second. Requests may be throttled by kube-apiserver. // Default rate limits from kube-apiserver are: // FLAG: --max-mutating-requests-inflight="200" // FLAG: --max-requests-inflight="400" PodQPS uint `json:"pod-qps"` // PodBurst is the number of "Pod" create requests that // a client can make in excess of the rate specified by the limiter. // Requests may be throttled by kube-apiserver. // Default rate limits from kube-apiserver are: // FLAG: --max-mutating-requests-inflight="200" // FLAG: --max-requests-inflight="400" PodBurst uint `json:"pod-burst"` // CreatedPodNames is the list of created "Pod" object names. CreatedPodNames []string `json:"created-pod-names" read-only:"true"` // WritesResultPath is the CSV file path to output Secret writes test results. WritesResultPath string `json:"writes-result-path"` // ReadsResultPath is the CSV file path to output Secret reads test results. ReadsResultPath string `json:"reads-result-path"` }
AddOnSecrets defines parameters for EKS cluster add-on "Secrets".
type ClusterStatus ¶ added in v0.6.5
ClusterStatus represents the cluster status.
type Config ¶
type Config struct { // ConfigPath is the configuration file path. // Deployer is expected to update this file with latest status. ConfigPath string `json:"config-path,omitempty"` // KubectlCommandsOutputPath is the output path for kubectl commands. KubectlCommandsOutputPath string `json:"kubectl-commands-output-path,omitempty"` // RemoteAccessCommandsOutputPath is the output path for ssh commands. RemoteAccessCommandsOutputPath string `json:"remote-access-commands-output-path,omitempty"` // Region is the AWS geographic area for EKS deployment. // If empty, set default region. Region string `json:"region,omitempty"` // Name is the cluster name. // If empty, deployer auto-populates it. Name string `json:"name,omitempty"` // 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. // Logs are appended to the existing file, if any. // Multiple values are accepted. If empty, it sets to 'default', which outputs to stderr. // See https://pkg.go.dev/go.uber.org/zap#Open and https://pkg.go.dev/go.uber.org/zap#Config for more details. LogOutputs []string `json:"log-outputs,omitempty"` // AWSCLIPath is the path for AWS CLI path. AWSCLIPath string `json:"aws-cli-path,omitempty"` // KubectlPath is the path to download the "kubectl". KubectlPath string `json:"kubectl-path,omitempty"` // KubectlDownloadURL is the download URL to download "kubectl" binary from. // https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html KubectlDownloadURL string `json:"kubectl-download-url,omitempty"` // KubeConfigPath is the file path of KUBECONFIG for the EKS cluster. // If empty, auto-generate one. // Deployer is expected to delete this on cluster tear down. KubeConfigPath string `json:"kubeconfig-path,omitempty"` // AWSIAMAuthenticatorPath is the path to aws-iam-authenticator. AWSIAMAuthenticatorPath string `json:"aws-iam-authenticator-path,omitempty"` // AWSIAMAuthenticatorDownloadURL is the download URL to download "aws-iam-authenticator" binary from. AWSIAMAuthenticatorDownloadURL string `json:"aws-iam-authenticator-download-url,omitempty"` // OnFailureDelete is true to delete all resources on creation fail. OnFailureDelete bool `json:"on-failure-delete"` // OnFailureDeleteWaitSeconds is the seconds to wait before deleting // all resources on creation fail. OnFailureDeleteWaitSeconds uint64 `json:"on-failure-delete-wait-seconds"` // CommandAfterCreateCluster is the command to execute after creating clusters. CommandAfterCreateCluster string `json:"command-after-create-cluster,omitempty"` CommandAfterCreateClusterOutputPath string `json:"command-after-create-cluster-output-path,omitempty" read-only:"true"` // CommandAfterCreateAddOns is the command to execute after creating clusters and add-ons. CommandAfterCreateAddOns string `json:"command-after-create-add-ons,omitempty"` CommandAfterCreateAddOnsOutputPath string `json:"command-after-create-add-ons-output-path,omitempty" read-only:"true"` // Parameters defines EKS "cluster" creation parameters. // It's ok to leave any parameters empty. // If empty, it will use default values. Parameters *Parameters `json:"parameters,omitempty"` // AddOnManagedNodeGroups defines EKS "Managed Node Group" // creation parameters. If empty, it will use default values. // ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html // ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html AddOnManagedNodeGroups *AddOnManagedNodeGroups `json:"add-on-managed-node-groups,omitempty"` // AddOnNLBHelloWorld defines parameters for EKS cluster // add-on NLB hello-world service. AddOnNLBHelloWorld *AddOnNLBHelloWorld `json:"add-on-nlb-hello-world,omitempty"` // AddOnALB2048 defines parameters for EKS cluster // add-on ALB 2048 service. AddOnALB2048 *AddOnALB2048 `json:"add-on-alb-2048,omitempty"` // AddOnJobPerl defines parameters for EKS cluster // add-on Job with Perl. AddOnJobPerl *AddOnJobPerl `json:"add-on-job-perl,omitempty"` // AddOnJobEcho defines parameters for EKS cluster // add-on Job with echo. AddOnJobEcho *AddOnJobEcho `json:"add-on-job-echo,omitempty"` // AddOnSecrets defines parameters for EKS cluster // add-on "Secrets". AddOnSecrets *AddOnSecrets `json:"add-on-secrets,omitempty"` // AddOnIRSA defines parameters for EKS cluster // add-on "IAM Roles for Service Accounts (IRSA)". AddOnIRSA *AddOnIRSA `json:"add-on-irsa,omitempty"` // AddOnFargate defines parameters for EKS cluster // add-on "EKS on Fargate". AddOnFargate *AddOnFargate `json:"add-on-fargate,omitempty"` // Status represents the current status of AWS resources. // Status is read-only. // Status cannot be configured via environmental variables. Status *Status `json:"status,omitempty" read-only:"true"` // StatusManagedNodeGroups represents EKS "Managed Node Group" status. // ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html // ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html StatusManagedNodeGroups *StatusManagedNodeGroups `json:"status-managed-node-groups" read-only:"true"` // contains filtered or unexported fields }
Config defines EKS configuration.
func Load ¶
Load loads configuration from YAML. Useful when injecting shared configuration via ConfigMap.
Example usage:
import "github.com/aws/aws-k8s-tester/eksconfig" cfg := eksconfig.Load("test.yaml") err := cfg.ValidateAndSetDefaults()
Do not set default values in this function. "ValidateAndSetDefaults" must be called separately, to prevent overwriting previous data when loaded from disks.
func (*Config) IsAddOnALB2048Enabled ¶ added in v0.6.7
func (*Config) IsAddOnFargateEnabled ¶ added in v0.6.7
func (*Config) IsAddOnIRSAEnabled ¶ added in v0.6.7
func (*Config) IsAddOnJobEchoEnabled ¶ added in v0.6.7
func (*Config) IsAddOnJobPerlEnabled ¶ added in v0.6.7
func (*Config) IsAddOnManagedNodeGroupsEnabled ¶ added in v0.6.7
func (*Config) IsAddOnNLBHelloWorldEnabled ¶ added in v0.6.7
func (*Config) IsAddOnSecretsEnabled ¶ added in v0.6.7
func (*Config) KubectlCommand ¶ added in v0.5.8
KubectlCommand returns the kubectl command.
func (*Config) KubectlCommands ¶
KubectlCommands returns the various kubectl commands.
func (*Config) RecordStatus ¶ added in v0.6.5
RecordStatus records cluster status.
func (*Config) SSHCommands ¶
SSHCommands returns the SSH commands.
func (*Config) UpdateFromEnvs ¶
UpdateFromEnvs updates fields from environmental variables. Empty values are ignored and do not overwrite fields with empty values. WARNING: The environmetal variable value always overwrites current field values if there's a conflict.
func (*Config) ValidateAndSetDefaults ¶
ValidateAndSetDefaults returns an error for invalid configurations. And updates empty fields with default values. At the end, it writes populated YAML to aws-k8s-tester config path.
type MNG ¶ added in v0.5.5
type MNG struct { // Name is the name of the managed node group. // ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html // ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html Name string `json:"name,omitempty"` // Tags defines EKS managed node group create tags. Tags map[string]string `json:"tags,omitempty"` // ReleaseVersion is the AMI version of the Amazon EKS-optimized AMI for the node group. // The version may differ from EKS "cluster" version. // ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html // ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html ReleaseVersion string `json:"release-version,omitempty"` // AMIType is the AMI type for the node group. // Allowed values are AL2_x86_64 and AL2_x86_64_GPU. // ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html // ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html AMIType string `json:"ami-type,omitempty"` // ASGMinSize is the minimum size of Node Group Auto Scaling Group. // ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html // ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html ASGMinSize int `json:"asg-min-size,omitempty"` // ASGMaxSize is the maximum size of Node Group Auto Scaling Group. // ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html // ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html ASGMaxSize int `json:"asg-max-size,omitempty"` // ASGDesiredCapacity is the desired capacity of Node Group ASG. // ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html // ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html ASGDesiredCapacity int `json:"asg-desired-capacity,omitempty"` // InstanceTypes is the EC2 instance types for the node instances. // ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html // ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html InstanceTypes []string `json:"instance-types,omitempty"` // VolumeSize is the node volume size. // ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html // ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html VolumeSize int `json:"volume-size,omitempty"` }
MNG represents parameters for one EKS "Managed Node Group".
type Parameters ¶ added in v0.5.0
type Parameters struct { // RoleName is the name of cluster role. RoleName string `json:"role-name"` // RoleCreate is true to auto-create and delete cluster role. RoleCreate bool `json:"role-create"` // RoleARN is the role ARN that EKS uses to create AWS resources for Kubernetes. // By default, it's empty which triggers tester to create one. RoleARN string `json:"role-arn"` // RoleServicePrincipals is the EKS Role Service Principals RoleServicePrincipals []string `json:"role-service-principals"` // RoleManagedPolicyARNs is EKS Role managed policy ARNs. RoleManagedPolicyARNs []string `json:"role-managed-policy-arns"` RoleCFNStackID string `json:"role-cfn-stack-id" read-only:"true"` // Tags defines EKS create cluster tags. Tags map[string]string `json:"tags"` // RequestHeaderKey defines EKS create cluster request header key. RequestHeaderKey string `json:"request-header-key"` // RequestHeaderValue defines EKS create cluster request header value. RequestHeaderValue string `json:"request-header-value"` // ResolverURL defines an AWS resolver endpoint for EKS API. // Must be left empty to use production EKS service. ResolverURL string `json:"resolver-url"` // SigningName is the EKS create request signing name. SigningName string `json:"signing-name"` // VPCCreate is true to auto-create and delete VPC. VPCCreate bool `json:"vpc-create"` // VPCID is the VPC ID for cluster creation. // If not empty, VPC is reused and not deleted. // If empty, VPC is created anew and deleted on cluster deletion. VPCID string `json:"vpc-id"` VPCCFNStackID string `json:"vpc-cfn-stack-id" read-only:"true"` // VpcCIDR is the IP range (CIDR notation) for VPC, must be a valid private // (RFC 1918) CIDR range. VPCCIDR string `json:"vpc-cidr,omitempty"` // PublicSubnetCIDR1 is the CIDR Block for subnet 1 within the VPC. PublicSubnetCIDR1 string `json:"public-subnet-cidr-1,omitempty"` // PublicSubnetCIDR2 is the CIDR Block for subnet 2 within the VPC. PublicSubnetCIDR2 string `json:"public-subnet-cidr-2,omitempty"` // PublicSubnetCIDR3 is the CIDR Block for subnet 3 within the VPC. PublicSubnetCIDR3 string `json:"public-subnet-cidr-3,omitempty"` // PrivateSubnetCIDR1 is the CIDR Block for subnet 1 within the VPC. PrivateSubnetCIDR1 string `json:"private-subnet-cidr-1,omitempty"` // PrivateSubnetCIDR2 is the CIDR Block for subnet 2 within the VPC. PrivateSubnetCIDR2 string `json:"private-subnet-cidr-2,omitempty"` // PublicSubnetIDs is the list of all public subnets in the VPC. PublicSubnetIDs []string `json:"public-subnet-ids" read-only:"true"` // PrivateSubnetIDs is the list of all private subnets in the VPC. PrivateSubnetIDs []string `json:"private-subnet-ids" read-only:"true"` // ControlPlaneSecurityGroupID is the security group ID for the cluster control // plane communication with worker nodes. ControlPlaneSecurityGroupID string `json:"control-plane-security-group-id" read-only:"true"` // Version is the version of EKS Kubernetes "cluster". // If empty, set default version. Version string `json:"version"` VersionValue float64 `json:"version-value" read-only:"true"` // EncryptionCMKCreate is true to auto-create and delete KMS CMK // for encryption feature. EncryptionCMKCreate bool `json:"encryption-cmk-create"` // EncryptionCMKARN is the KMS CMK ARN for encryption feature. // If not empty, the cluster is created with encryption feature // enabled. EncryptionCMKARN string `json:"encryption-cmk-arn"` }
Parameters defines parameters for EKS "cluster" creation.
type Status ¶ added in v0.5.0
type Status struct { // Up is true if the cluster is up. Up bool `json:"up"` // CreateTook is the duration that took to create the resource. CreateTook time.Duration `json:"create-took,omitempty" read-only:"true"` // CreateTookString is the duration that took to create the resource. CreateTookString string `json:"create-took-string,omitempty" read-only:"true"` // DeleteTook is the duration that took to create the resource. DeleteTook time.Duration `json:"delete-took,omitempty" read-only:"true"` // DeleteTookString is the duration that took to create the resource. DeleteTookString string `json:"delete-took-string,omitempty" read-only:"true"` // AWSAccountID is the account ID of the eks tester caller session. AWSAccountID string `json:"aws-account-id"` // AWSUserID is the user ID of the eks tester caller session. AWSUserID string `json:"aws-user-id"` // AWSIAMRoleARN is the user IAM Role ARN of the eks tester caller session. AWSIAMRoleARN string `json:"aws-iam-role-arn"` // AWSCredentialPath is automatically set via AWS SDK Go. // And to be mounted as a volume as 'Secret' object. AWSCredentialPath string `json:"aws-credential-path"` ClusterCFNStackID string `json:"cluster-cfn-stack-id"` ClusterARN string `json:"cluster-arn"` // ClusterAPIServerEndpoint is the cluster endpoint of the EKS cluster, // required for KUBECONFIG write. ClusterAPIServerEndpoint string `json:"cluster-api-server-endpoint"` // ClusterOIDCIssuerURL is the issuer URL for the OpenID Connect // (https://openid.net/connect/) identity provider . ClusterOIDCIssuerURL string `json:"cluster-oidc-issuer-url"` // ClusterOIDCIssuerHostPath is the issuer host path. ClusterOIDCIssuerHostPath string `json:"cluster-oidc-issuer-host-path"` // ClusterOIDCIssuerARN is the issuer ARN for the OpenID Connect // (https://openid.net/connect/) identity provider . ClusterOIDCIssuerARN string `json:"cluster-oidc-issuer-arn"` // ClusterOIDCIssuerCAThumbprint is the issuer CA thumbprint. ClusterOIDCIssuerCAThumbprint string `json:"cluster-oidc-issuer-ca-thumbprint"` // ClusterCA is the EKS cluster CA, required for KUBECONFIG write. ClusterCA string `json:"cluster-ca"` // ClusterCADecoded is the decoded EKS cluster CA, required for k8s.io/client-go. ClusterCADecoded string `json:"cluster-ca-decoded"` // ClusterStatusCurrent represents the current status of the cluster. ClusterStatusCurrent string `json:"cluster-status-current"` // ClusterStatus represents the status of the cluster. ClusterStatus []ClusterStatus `json:"cluster-status"` }
Status represents the current status of AWS resources. Read-only. Cannot be configured via environmental variables.
type StatusManagedNodeGroup ¶ added in v0.5.5
type StatusManagedNodeGroup struct { // CreateRequested is true if "CreateNodegroupRequest" has been sent. CreateRequested bool `json:"create-requested"` // CFNStackID is the CloudFormation stack ID for a managed node group. CFNStackID string `json:"cfn-stack-id"` RemoteAccessSecurityGroupID string `json:"remote-access-security-group-id"` // PhysicalID is the Physical ID for the created "AWS::EKS::Nodegroup". PhysicalID string `json:"physical-id"` // Status is the current status of EKS "Managed Node Group". Status string `json:"status"` // Instances maps an instance ID to an EC2 instance object for the node group. Instances map[string]ec2config.Instance `json:"instances"` // Logs maps each instance ID to a list of log file paths fetched via SSH access. Logs map[string][]string `json:"logs"` }
StatusManagedNodeGroup represents the status of EKS "Managed Node Group". ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html
type StatusManagedNodeGroups ¶ added in v0.5.5
type StatusManagedNodeGroups struct { // CreateTook is the duration that took to create the resource. CreateTook time.Duration `json:"create-took,omitempty" read-only:"true"` // CreateTookString is the duration that took to create the resource. CreateTookString string `json:"create-took-string,omitempty" read-only:"true"` // DeleteTook is the duration that took to create the resource. DeleteTook time.Duration `json:"delete-took,omitempty" read-only:"true"` // DeleteTookString is the duration that took to create the resource. DeleteTookString string `json:"delete-took-string,omitempty" read-only:"true"` // NvidiaDriverInstalled is true if nvidia driver has been installed. NvidiaDriverInstalled bool `json:"nvidia-driver-installed"` // Nodes maps from EKS "Managed Node Group" name to its status. // ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html // ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html Nodes map[string]StatusManagedNodeGroup `json:"nodes"` }
StatusManagedNodeGroups represents the status of EKS "Managed Node Group". ref. https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html