Documentation ¶
Overview ¶
Package ec2config defines EC2 configuration.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BlockDeviceMapping ¶
BlockDeviceMapping defines a block device mapping.
type Config ¶
type Config struct { // EnvPrefix is used to update configuration via environmental variables. // The default is "AWS_K8S_TESTER_EC2_". EnvPrefix string `json:"env-prefix"` // AWSAccountID is the AWS account ID. AWSAccountID string `json:"aws-account-id"` // AWSRegion is the AWS region. AWSRegion string `json:"aws-region"` // 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://godoc.org/go.uber.org/zap#Open and https://godoc.org/go.uber.org/zap#Config for more details. LogOutputs []string `json:"log-outputs"` // LogOutputToUploadPath is the aws-k8s-tester log file path to upload to cloud storage. // Must be left empty. // This will be overwritten by cluster name. LogOutputToUploadPath string `json:"log-output-to-upload-path"` LogOutputToUploadPathBucket string `json:"log-output-to-upload-path-bucket"` LogOutputToUploadPathURL string `json:"log-output-to-upload-path-url"` // UploadTesterLogs is true to auto-upload log files. UploadTesterLogs bool `json:"upload-tester-logs"` // UploadBucketExpireDays is the number of days for objects in S3 bucket to expire. // Set 0 to not expire. UploadBucketExpireDays int `json:"upload-bucket-expire-days"` // Tag is the tag used for all cloudformation stacks. Tag string `json:"tag"` // Tags to add additional tags to the EC2 instances. Tags map[string]string `json:"tags"` // ClusterName is an unique ID for cluster. ClusterName string `json:"cluster-name"` // WaitBeforeDown is the duration to sleep before EC2 tear down. // This is for "test". WaitBeforeDown time.Duration `json:"wait-before-down"` // Down is true to automatically tear down EC2 in "test". // Note that this is meant to be used as a flag in "test". // Deployer implementation should not call "Down" inside "Up" method. Down bool `json:"down"` // ConfigPath is the configuration file path. // If empty, it is autopopulated. // Deployer is expected to update this file with latest status, // and to make a backup of original configuration // with the filename suffix ".backup.yaml" in the same directory. ConfigPath string `json:"config-path"` ConfigPathBucket string `json:"config-path-bucket"` // read-only to user ConfigPathURL string `json:"config-path-url"` // read-only to user UpdatedAt time.Time `json:"updated-at"` // read-only to user // ImageID is the Amazon Machine Image (AMI). ImageID string `json:"image-id"` // UserName is the user name used for running init scripts or SSH access. UserName string `json:"user-name"` // Plugins is the list of plugins. Plugins []string `json:"plugins"` // InitScript contains init scripts (run-instance UserData field). // Script must be started with "#!/usr/bin/env bash" IF "Plugins" field is not defined. // And will be base64-encoded. Do not base64-encode. Just configure as plain-text. // Let this "ec2" package base64-encode. // Outputs are saved in "/var/log/cloud-init-output.log" in EC2 instance. // "tail -f /var/log/cloud-init-output.log" to check the progress. // Reference: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html. // Note that if both "Plugins" and "InitScript" are not empty, // "InitScript" field is always appended to the scripts generated by "Plugins" field. InitScript string `json:"init-script"` // InitScriptCreated is true once the init script has been created. // This is to prevent redundant init script updates from plugins. InitScriptCreated bool `json:"init-script-created"` // InstanceType is the instance type. InstanceType string `json:"instance-type"` // ClusterSize is the number of EC2 instances to create. ClusterSize int `json:"cluster-size"` // KeyName is the name of the key pair used for SSH access. // Leave empty to create a temporary one. KeyName string `json:"key-name"` // KeyPath is the file path to the private key. KeyPath string `json:"key-path"` KeyPathBucket string `json:"key-path-bucket"` KeyPathURL string `json:"key-path-url"` // KeyCreateSkip is true to indicate that EC2 key pair has been created, so needs no creation. KeyCreateSkip bool `json:"key-create-skip"` // KeyCreated is true to indicate that EC2 key pair has been created, so needs be cleaned later. KeyCreated bool `json:"key-created"` // VPCCIDR is the VPC CIDR. VPCCIDR string `json:"vpc-cidr"` // VPCID is the VPC ID to use. // Leave empty to create a temporary one. VPCID string `json:"vpc-id"` // VPCCreated is true to indicate that EC2 VPC has been created, so needs be cleaned later. // Set this to false, if the VPC is reused from somewhere else, so the original VPC creator deletes the VPC. VPCCreated bool `json:"vpc-created"` // InternetGatewayID is the internet gateway ID. InternetGatewayID string `json:"internet-gateway-id"` // RouteTableIDs is the list of route table IDs. RouteTableIDs []string `json:"route-table-ids"` // SubnetIDs is a list of subnet IDs to use. // If empty, it will fetch subnets from a given or created VPC. // And randomly assign them to instances. SubnetIDs []string `json:"subnet-ids"` SubnetIDToAvailabilityZone map[string]string `json:"subnet-id-to-availability-zone"` // read-only to user // IngressRulesTCP is a map from TCP port range to CIDR to allow via security groups. IngressRulesTCP map[string]string `json:"ingress-rules-tcp"` // SecurityGroupIDs is the list of security group IDs. // Leave empty to create a temporary one. SecurityGroupIDs []string `json:"security-group-ids"` // AssociatePublicIPAddress is true to associate a public IP address. AssociatePublicIPAddress bool `json:"associate-public-ip-address"` // VolumeSize is the size of the default volume, in GiB. // // Constraints: 1-16384 for General Purpose SSD (gp2), 4-16384 for Provisioned // IOPS SSD (io1), 500-16384 for Throughput Optimized HDD (st1), 500-16384 for // Cold HDD (sc1), and 1-1024 for Magnetic (standard) volumes. If you specify // a snapshot, the volume size must be equal to or larger than the snapshot // size. // // Default: If you're creating the volume from a snapshot and don't specify // a volume size, the default is the snapshot size. VolumeSize int64 `json:"volume-size"` // Instances is a set of EC2 instances created from this configuration. Instances map[string]Instance `json:"instances"` // Wait is true to wait until all EC2 instances are ready. Wait bool `json:"wait"` // InstanceProfileFilePath is the JSON file path that defines the instance profile. InstanceProfileFilePath string `json:"instance-profile-file-path"` // InstanceProfileName is the name of an instance profile with permissions to manage EC2 instances. // NOTE THAT this always gets overwritten by 'ClusterName' and 'InstanceProfileFilePath'. InstanceProfileName string `json:"instance-profile-name"` // InstanceProfileCreated is true to indicate that instance profile has been created, so needs be cleaned later. InstanceProfileCreated bool `json:"instance-profile-created"` // InstanceProfilePolicyName is the name of instance profile. InstanceProfilePolicyName string `json:"instance-profile-policy-name"` // InstanceProfilePolicyARN is the ARN of instance profile. InstanceProfilePolicyARN string `json:"instance-profile-policy-arn"` // InstanceProfilePolicy is the instance profile policy. InstanceProfilePolicy string `json:"instance-profile-policy"` // InstanceProfilePolicyCreated is true to indicate that instance profile policy has been created, so needs be cleaned later. InstanceProfilePolicyCreated bool `json:"instance-profile-policy-created"` // InstanceProfileRoleName is the instance profile role name. InstanceProfileRoleName string `json:"instance-profile-role-name"` // InstanceProfileRoleCreated is true to indicate that instance profile role has been created, so needs be cleaned later. InstanceProfileRoleCreated bool `json:"instance-profile-role-created"` // CustomScript is executed at the end of EC2 init script. CustomScript string `json:"custom-script"` }
Config defines EC2 configuration.
func Load ¶
Load loads configuration from YAML.
Example usage:
import "github.com/aws/aws-k8s-tester/internal/ec2/config" cfg := config.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) SSHCommands ¶
SSHCommands returns the SSH commands.
func (*Config) UpdateFromEnvs ¶
UpdateFromEnvs updates fields from environmental variables.
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 EBS ¶
type EBS struct { DeleteOnTermination bool `json:"delete-on-termination"` Status string `json:"status"` VolumeID string `json:"volume-id"` }
EBS defines an EBS volume.
type Instance ¶
type Instance struct { ImageID string `json:"image-id"` InstanceID string `json:"instance-id"` InstanceType string `json:"instance-type"` KeyName string `json:"key-name"` Placement Placement `json:"placement"` PrivateDNSName string `json:"private-dns-name"` PrivateIP string `json:"private-ip"` PublicDNSName string `json:"public-dns-name"` PublicIP string `json:"public-ip"` State State `json:"state"` SubnetID string `json:"subnet-id"` VPCID string `json:"vpc-id"` BlockDeviceMappings []BlockDeviceMapping `json:"block-device-mappings"` EBSOptimized bool `json:"ebs-optimized"` RootDeviceName string `json:"root-device-name"` RootDeviceType string `json:"root-device-type"` SecurityGroups []SecurityGroup `json:"security-groups"` LaunchTime time.Time `json:"launch-time"` }
Instance represents an EC2 instance.
type Placement ¶
type Placement struct { AvailabilityZone string `json:"availability-zone"` Tenancy string `json:"tenancy"` }
Placement defines EC2 placement.
type SecurityGroup ¶
SecurityGroup defines a security group.