github.com/kubernetes-incubator/kube-aws@v0.16.4/test/integration/aws_test.go (about) 1 package integration 2 3 import ( 4 "fmt" 5 "os" 6 "testing" 7 8 "github.com/kubernetes-incubator/kube-aws/credential" 9 "github.com/kubernetes-incubator/kube-aws/pkg/api" 10 "github.com/kubernetes-incubator/kube-aws/test/helper" 11 ) 12 13 type testEnv struct { 14 t *testing.T 15 } 16 17 func (r testEnv) get(name string) string { 18 v := os.Getenv(name) 19 20 if v == "" { 21 r.t.Errorf("%s must be set", name) 22 r.t.FailNow() 23 } 24 25 return v 26 } 27 28 func useRealAWS() bool { 29 return os.Getenv("KUBE_AWS_INTEGRATION_TEST") != "" 30 } 31 32 type kubeAwsSettings struct { 33 clusterName string 34 s3URI string 35 etcdNodeDefaultInternalDomain string 36 externalDNSName string 37 keyName string 38 kmsKeyArn string 39 region string 40 encryptService credential.KMSEncryptionService 41 } 42 43 func newKubeAwsSettingsFromEnv(t *testing.T) kubeAwsSettings { 44 env := testEnv{t: t} 45 46 clusterName, clusterNameExists := os.LookupEnv("KUBE_AWS_CLUSTER_NAME") 47 48 if !clusterNameExists || clusterName == "" { 49 clusterName = "it" 50 t.Logf(`Falling back clusterName to a stub value "%s" for tests of validating stack templates. No assets will actually be uploaded to S3 and no clusters will be created with CloudFormation`, clusterName) 51 } 52 53 s3URI, s3URIExists := os.LookupEnv("KUBE_AWS_S3_DIR_URI") 54 55 if !s3URIExists || s3URI == "" { 56 s3URI = "s3://mybucket/mydir" 57 t.Logf(`Falling back s3URI to a stub value "%s" for tests of validating stack templates. No assets will actually be uploaded to S3 and no clusters will be created with CloudFormation`, s3URI) 58 } 59 60 if useRealAWS() { 61 externalDnsName := fmt.Sprintf("%s.%s", clusterName, env.get("KUBE_AWS_DOMAIN")) 62 keyName := env.get("KUBE_AWS_KEY_NAME") 63 kmsKeyArn := env.get("KUBE_AWS_KMS_KEY_ARN") 64 region := env.get("KUBE_AWS_REGION") 65 return kubeAwsSettings{ 66 clusterName: clusterName, 67 s3URI: s3URI, 68 etcdNodeDefaultInternalDomain: api.RegionForName(region).PrivateDomainName(), 69 externalDNSName: externalDnsName, 70 keyName: keyName, 71 kmsKeyArn: kmsKeyArn, 72 region: region, 73 } 74 } else { 75 return kubeAwsSettings{ 76 clusterName: clusterName, 77 s3URI: s3URI, 78 etcdNodeDefaultInternalDomain: api.RegionForName("us-west-1").PrivateDomainName(), 79 externalDNSName: "test.staging.core-os.net", 80 keyName: "test-key-name", 81 kmsKeyArn: "arn:aws:kms:us-west-1:xxxxxxxxx:key/xxxxxxxxxxxxxxxxxxx", 82 region: "us-west-1", 83 encryptService: helper.DummyEncryptService{}, 84 } 85 } 86 } 87 88 func (s kubeAwsSettings) mainClusterYaml() string { 89 return fmt.Sprintf(`clusterName: %s 90 s3URI: %s 91 apiEndpoints: 92 - name: public 93 dnsName: "%s" 94 loadBalancer: 95 hostedZone: 96 id: hostedzone-xxxx 97 keyName: "%s" 98 kmsKeyArn: "%s" 99 region: "%s" 100 etcd: 101 version: v3.3.17 102 `, 103 s.clusterName, 104 s.s3URI, 105 s.externalDNSName, 106 s.keyName, 107 s.kmsKeyArn, 108 s.region, 109 ) 110 } 111 112 func (s kubeAwsSettings) mainClusterYamlWithoutAPIEndpoint() string { 113 return fmt.Sprintf(`clusterName: %s 114 keyName: "%s" 115 s3URI: "%s" 116 kmsKeyArn: "%s" 117 region: "%s" 118 etcd: 119 version: v3.3.17 120 `, 121 s.clusterName, 122 s.keyName, 123 s.s3URI, 124 s.kmsKeyArn, 125 s.region, 126 ) 127 } 128 129 func (s kubeAwsSettings) minimumValidClusterYaml() string { 130 return s.minimumValidClusterYamlWithAZ("a") 131 } 132 133 func (s kubeAwsSettings) minimumValidClusterYamlWithAZ(suffix string) string { 134 return s.mainClusterYamlWithoutAPIEndpoint() + fmt.Sprintf(` 135 availabilityZone: %s 136 apiEndpoints: 137 - name: public 138 dnsName: "%s" 139 loadBalancer: 140 hostedZone: 141 id: hostedzone-xxxx 142 `, s.region+suffix, s.externalDNSName) 143 } 144 145 func (s kubeAwsSettings) withClusterName(n string) kubeAwsSettings { 146 s.clusterName = n 147 return s 148 } 149 150 func (s kubeAwsSettings) withRegion(r string) kubeAwsSettings { 151 s.region = r 152 s.kmsKeyArn = fmt.Sprintf("arn:aws:kms:%s:xxxxxxxxx:key/xxxxxxxxxxxxxxxxxxx", r) 153 return s 154 }