// create a cluster and run test func runTest(t *Test, pltfrm string) error { var err error var cluster platform.Cluster if pltfrm == "qemu" { cluster, err = platform.NewQemuCluster(*QemuImage) } else if pltfrm == "gce" { cluster, err = platform.NewGCECluster(GCEOpts()) } else { plog.Errorf("Invalid platform: %v", pltfrm) } if err != nil { return fmt.Errorf("Cluster failed: %v", err) } defer func() { if err := cluster.Destroy(); err != nil { plog.Errorf("cluster.Destroy(): %v", err) } }() url, err := cluster.GetDiscoveryURL(t.ClusterSize) if err != nil { return fmt.Errorf("Failed to create discovery endpoint: %v", err) } cfgs := makeConfigs(url, t.CloudConfig, t.ClusterSize) for i := 0; i < t.ClusterSize; i++ { _, err := cluster.NewMachine(cfgs[i]) if err != nil { return fmt.Errorf("Cluster failed starting machine: %v", err) } plog.Infof("%v instance up", pltfrm) } // pass along all registered native functions var names []string for k := range t.NativeFuncs { names = append(names, k) } // Cluster -> TestCluster tcluster := platform.TestCluster{t.Name, names, cluster} // drop kolet binary on machines if t.NativeFuncs != nil { err = scpKolet(tcluster) if err != nil { return fmt.Errorf("dropping kolet binary: %v", err) } } // run test err = t.Run(tcluster) return err }
func runBootchart(cmd *cobra.Command, args []string) { if len(args) != 0 { fmt.Fprintf(os.Stderr, "No args accepted\n") os.Exit(2) } var ( cluster platform.Cluster err error ) if kolaPlatform == "qemu" { cluster, err = platform.NewQemuCluster(kola.QEMUOptions) } else if kolaPlatform == "gce" { cluster, err = platform.NewGCECluster(kola.GCEOptions) } else if kolaPlatform == "aws" { cluster, err = platform.NewAWSCluster(kola.AWSOptions) } else { fmt.Fprintf(os.Stderr, "Invalid platform: %v", kolaPlatform) } if err != nil { fmt.Fprintf(os.Stderr, "Cluster failed: %v\n", err) os.Exit(1) } defer cluster.Destroy() m, err := cluster.NewMachine("") if err != nil { fmt.Fprintf(os.Stderr, "Machine failed: %v\n", err) os.Exit(1) } defer m.Destroy() ssh, err := m.SSHSession() if err != nil { fmt.Fprintf(os.Stderr, "SSH failed: %v\n", err) os.Exit(1) } ssh.Stdout = os.Stdout ssh.Stderr = os.Stderr if err = ssh.Run("systemd-analyze plot"); err != nil { fmt.Fprintf(os.Stderr, "SSH failed: %v\n", err) os.Exit(1) } }
func runSpawn(cmd *cobra.Command, args []string) { var userdata []byte var err error var cluster platform.Cluster if spawnUserData != "" { userdata, err = ioutil.ReadFile(spawnUserData) if err != nil { die("Reading userdata failed: %v", err) } } switch kolaPlatform { case "qemu": cluster, err = platform.NewQemuCluster(kola.QEMUOptions) case "gce": cluster, err = platform.NewGCECluster(kola.GCEOptions) case "aws": cluster, err = platform.NewAWSCluster(kola.AWSOptions) default: err = fmt.Errorf("invalid platform %q", kolaPlatform) } if err != nil { die("Cluster failed: %v", err) } mach, err := cluster.NewMachine(string(userdata)) if err != nil { die("Spawning instance failed: %v", err) } if spawnRemove { defer mach.Destroy() } if spawnShell { if err := platform.Manhole(mach); err != nil { die("Manhole failed: %v", err) } } }
// create a cluster and run test func RunTest(t *Test, pltfrm string) error { var err error var cluster platform.Cluster switch pltfrm { case "qemu": cluster, err = platform.NewQemuCluster(QEMUOptions) case "gce": cluster, err = platform.NewGCECluster(GCEOptions) case "aws": cluster, err = platform.NewAWSCluster(AWSOptions) default: err = fmt.Errorf("invalid platform %q", pltfrm) } if err != nil { return fmt.Errorf("Cluster failed: %v", err) } defer func() { if err := cluster.Destroy(); err != nil { plog.Errorf("cluster.Destroy(): %v", err) } }() url, err := cluster.GetDiscoveryURL(t.ClusterSize) if err != nil { return fmt.Errorf("Failed to create discovery endpoint: %v", err) } cfgs := makeConfigs(url, t.CloudConfig, t.ClusterSize) if t.ClusterSize > 0 { _, err := platform.NewMachines(cluster, cfgs) if err != nil { return fmt.Errorf("Cluster failed starting machines: %v", err) } } // pass along all registered native functions var names []string for k := range t.NativeFuncs { names = append(names, k) } // prevent unsafe access if tests ever become parallel and access tempTestOptions := make(map[string]string, 0) for k, v := range testOptions { tempTestOptions[k] = v } // Cluster -> TestCluster tcluster := platform.TestCluster{ Name: t.Name, NativeFuncs: names, Options: tempTestOptions, Cluster: cluster, } // drop kolet binary on machines if t.NativeFuncs != nil { err = scpKolet(tcluster) if err != nil { return fmt.Errorf("dropping kolet binary: %v", err) } } // run test err = t.Run(tcluster) // give some time for the remote journal to be flushed so it can be read // before we run the deferred machine destruction if err != nil { time.Sleep(10 * time.Second) } return err }