github.com/apprenda/kismatic@v1.12.0/integration-tests/validate.go (about) 1 package integration_tests 2 3 import ( 4 "bufio" 5 "fmt" 6 "html/template" 7 "log" 8 "os" 9 "os/exec" 10 "path/filepath" 11 "time" 12 13 homedir "github.com/mitchellh/go-homedir" 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/gomega" 16 ) 17 18 func validateMiniPkgInstallationDisabled(provisioner infrastructureProvisioner, distro linuxDistro) { 19 WithMiniInfrastructure(distro, provisioner, func(node NodeDeets, sshKey string) { 20 sshUser := node.SSHUser 21 if err := ValidateKismaticMiniDenyPkgInstallation(node, sshUser, sshKey); err == nil { 22 Fail("Missing dependencies, but still passed") 23 } 24 25 By("Adding docker repository") 26 prep := getPrepForDistro(distro) 27 theNode := []NodeDeets{node} 28 err := runViaSSH(prep.CommandsToPrepDockerRepo, theNode, sshKey, 5*time.Minute) 29 FailIfError(err, "failed to add docker repository") 30 31 if err = ValidateKismaticMiniDenyPkgInstallation(node, sshUser, sshKey); err == nil { 32 Fail("Missing dependencies, but still passed") 33 } 34 35 By("Installing Docker") 36 err = runViaSSH(prep.CommandsToInstallDocker, theNode, sshKey, 5*time.Minute) 37 FailIfError(err, "failed to install docker") 38 39 if err = ValidateKismaticMiniDenyPkgInstallation(node, sshUser, sshKey); err == nil { 40 Fail("Missing dependencies, but still passed") 41 } 42 43 By("Adding kubernetes repository") 44 err = runViaSSH(prep.CommandsToPrepKubernetesRepo, theNode, sshKey, 5*time.Minute) 45 FailIfError(err, "failed to add kubernetes repository") 46 47 if err = ValidateKismaticMiniDenyPkgInstallation(node, sshUser, sshKey); err == nil { 48 Fail("Missing dependencies, but still passed") 49 } 50 51 By("Installing Kubelet") 52 err = runViaSSH(prep.CommandsToInstallKubelet, theNode, sshKey, 5*time.Minute) 53 FailIfError(err, "failed to install the kubelet package") 54 55 if err = ValidateKismaticMiniDenyPkgInstallation(node, sshUser, sshKey); err == nil { 56 Fail("Missing dependencies, but still passed") 57 } 58 59 By("Installing Kubectl") 60 err = runViaSSH(prep.CommandsToInstallKubectl, theNode, sshKey, 5*time.Minute) 61 FailIfError(err, "failed to install the kubectl package") 62 63 if err = ValidateKismaticMiniDenyPkgInstallation(node, sshUser, sshKey); err == nil { 64 Fail("Missing dependencies, but still passed") 65 } 66 67 By("Installing Glusterfs Server") 68 err = runViaSSH(prep.CommandsToInstallGlusterfs, theNode, sshKey, 5*time.Minute) 69 FailIfError(err, "failed to install the glusterfs package") 70 71 err = ValidateKismaticMiniDenyPkgInstallation(node, sshUser, sshKey) 72 Expect(err).To(BeNil()) 73 }) 74 } 75 76 // ValidateKismaticMini runs validation against a mini Kubernetes cluster 77 func ValidateKismaticMini(node NodeDeets, user, sshKey string) PlanAWS { 78 By("Building a template") 79 template, err := template.New("planAWSOverlay").Parse(planAWSOverlay) 80 FailIfError(err, "Couldn't parse template") 81 82 log.Printf("Created single node for Kismatic Mini: %s (%s)", node.id, node.PublicIP) 83 By("Building a plan to set up an overlay network cluster on this hardware") 84 plan := PlanAWS{ 85 Etcd: []NodeDeets{node}, 86 Master: []NodeDeets{node}, 87 Worker: []NodeDeets{node}, 88 LoadBalancer: node.Hostname, 89 SSHUser: user, 90 SSHKeyFile: sshKey, 91 } 92 93 // Create template file 94 f, fileErr := os.Create("kismatic-testing.yaml") 95 FailIfError(fileErr, "Error waiting for nodes") 96 defer f.Close() 97 w := bufio.NewWriter(f) 98 execErr := template.Execute(w, &plan) 99 FailIfError(execErr, "Error filling in plan template") 100 w.Flush() 101 102 // Run validation 103 By("Validate our plan") 104 err = runValidate(f.Name()) 105 FailIfError(err, "Error validating plan") 106 return plan 107 } 108 109 func ValidateKismaticMiniDenyPkgInstallation(node NodeDeets, sshUser, sshKey string) error { 110 By("Building a template") 111 template, err := template.New("planAWSOverlay").Parse(planAWSOverlay) 112 FailIfError(err, "Couldn't parse template") 113 114 log.Printf("Created single node for Kismatic Mini: %s (%s)", node.id, node.PublicIP) 115 By("Building a plan to set up an overlay network cluster on this hardware") 116 plan := PlanAWS{ 117 DisablePackageInstallation: true, 118 Etcd: []NodeDeets{node}, 119 Master: []NodeDeets{node}, 120 Worker: []NodeDeets{node}, 121 Ingress: []NodeDeets{node}, 122 Storage: []NodeDeets{node}, 123 LoadBalancer: node.Hostname, 124 SSHUser: sshUser, 125 SSHKeyFile: sshKey, 126 } 127 128 // Create template file 129 f, fileErr := os.Create("kismatic-testing.yaml") 130 FailIfError(fileErr, "Error waiting for nodes") 131 defer f.Close() 132 w := bufio.NewWriter(f) 133 execErr := template.Execute(w, &plan) 134 FailIfError(execErr, "Error filling in plan template") 135 w.Flush() 136 137 // Run validation 138 By("Validate our plan") 139 return runValidate(f.Name()) 140 } 141 142 func ValidateKismaticMiniWithBadSSH(node NodeDeets, user, sshKey string) PlanAWS { 143 By("Building a template") 144 template, err := template.New("planAWSOverlay").Parse(planAWSOverlay) 145 FailIfError(err, "Couldn't parse template") 146 147 log.Printf("Created single node for Kismatic Mini: %s (%s)", node.id, node.PublicIP) 148 By("Building a plan to set up an overlay network cluster on this hardware") 149 plan := PlanAWS{ 150 Etcd: []NodeDeets{node}, 151 Master: []NodeDeets{node}, 152 Worker: []NodeDeets{node}, 153 LoadBalancer: node.Hostname, 154 SSHUser: user, 155 SSHKeyFile: sshKey, 156 } 157 158 // Create template file 159 f, fileErr := os.Create("kismatic-testing.yaml") 160 FailIfError(fileErr, "Error waiting for nodes") 161 defer f.Close() 162 w := bufio.NewWriter(f) 163 execErr := template.Execute(w, &plan) 164 FailIfError(execErr, "Error filling in plan template") 165 w.Flush() 166 167 // Run validation 168 By("Validate our plan") 169 err = runValidate(f.Name()) 170 FailIfSuccess(err) 171 return plan 172 } 173 174 func getBadSSHKeyFile() (string, error) { 175 dir, err := homedir.Dir() 176 if err != nil { 177 return "", err 178 } 179 // create empty file 180 _, err = os.Create(filepath.Join(dir, ".ssh", "bad.pem")) 181 if err != nil { 182 return "", fmt.Errorf("Unable to create tag file!") 183 } 184 185 return filepath.Join(dir, ".ssh", "bad.pem"), nil 186 } 187 188 func runValidate(planFile string) error { 189 cmd := exec.Command("./kismatic", "install", "validate", "-f", planFile) 190 cmd.Stdout = os.Stdout 191 cmd.Stderr = os.Stderr 192 return cmd.Run() 193 }