forked from bsteciuk/kismatic
/
cloud_integration.go
38 lines (29 loc) · 1.6 KB
/
cloud_integration.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package integration_tests
import (
"fmt"
"time"
"github.com/apprenda/kismatic/pkg/retry"
)
func testAWSCloudProvider(node NodeDeets, sshKey string) error {
// uses an ECR image to test cloud-provider
if err := runViaSSH([]string{`sudo kubectl --kubeconfig /root/.kube/config run cloud-provider-nginx --image=633668368853.dkr.ecr.us-east-1.amazonaws.com/kismatic/nginx --replicas=2 --port=80`}, []NodeDeets{node}, sshKey, 1*time.Minute); err != nil {
return fmt.Errorf("error creating nginx deployment: %v", err)
}
if err := runViaSSH([]string{`sudo kubectl --kubeconfig /root/.kube/config expose deployment cloud-provider-nginx --port=80 --type=LoadBalancer`}, []NodeDeets{node}, sshKey, 1*time.Minute); err != nil {
return fmt.Errorf("error creating exposing nginx deployment with a LoadBalancer: %v", err)
}
testErr := retry.WithBackoff(func() error {
return runViaSSH([]string{"curl `sudo kubectl --kubeconfig /root/.kube/config get svc cloud-provider-nginx -o jsonpath={.status.loadBalancer.ingress[0].hostname}`"}, []NodeDeets{node}, sshKey, 1*time.Minute)
}, 8)
if testErr != nil {
// get info for diagnosing failure
runViaSSH([]string{"sudo kubectl --kubeconfig /root/.kube/config describe svc cloud-provider-nginx"}, []NodeDeets{node}, sshKey, 1*time.Minute)
}
if err := runViaSSH([]string{`sudo kubectl --kubeconfig /root/.kube/config delete svc cloud-provider-nginx`}, []NodeDeets{node}, sshKey, 1*time.Minute); err != nil {
return fmt.Errorf("error deleting service: %v", err)
}
if testErr != nil {
return fmt.Errorf("error curling LoadBalancer endpoint: %v", testErr)
}
return nil
}