diff options
Diffstat (limited to 'clover/cloverctl/src/cloverctl')
63 files changed, 2405 insertions, 0 deletions
diff --git a/clover/cloverctl/src/cloverctl/cmd/clear.go b/clover/cloverctl/src/cloverctl/cmd/clear.go new file mode 100644 index 0000000..eab784a --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/clear.go @@ -0,0 +1,26 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" +) + +var clearCmd = &cobra.Command{ + Use: "clear", + Short: "Truncate visibility tables", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Uncomplete command") + }, +} + +func init() { + rootCmd.AddCommand(clearCmd) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/clear_visibility.go b/clover/cloverctl/src/cloverctl/cmd/clear_visibility.go new file mode 100644 index 0000000..2e66637 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/clear_visibility.go @@ -0,0 +1,44 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "os" + "gopkg.in/resty.v1" + "github.com/spf13/cobra" +) + + +var visibilityclearCmd = &cobra.Command{ + Use: "visibility", + Short: "Clear visibility data", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + clearCollector() + }, +} + +func init() { + clearCmd.AddCommand(visibilityclearCmd) +} + +func clearCollector() { + checkControllerIP() + url := controllerIP + "/visibility/clear" + + resp, err := resty.R(). + Get(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) +} + + diff --git a/clover/cloverctl/src/cloverctl/cmd/create.go b/clover/cloverctl/src/cloverctl/cmd/create.go new file mode 100644 index 0000000..a66acf9 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/create.go @@ -0,0 +1,26 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" +) + +var createCmd = &cobra.Command{ + Use: "create", + Short: "Create clover configurations and deployments", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Incomplete command") + }, +} + +func init() { + rootCmd.AddCommand(createCmd) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/create_docker_registry.go b/clover/cloverctl/src/cloverctl/cmd/create_docker_registry.go new file mode 100644 index 0000000..37e8aeb --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/create_docker_registry.go @@ -0,0 +1,61 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "io/ioutil" + "os" + "gopkg.in/resty.v1" + "github.com/ghodss/yaml" + "github.com/spf13/cobra" +) + + +var dockerregistryCmd = &cobra.Command{ + Use: "docker-registry", + Short: "Add one docker registry from yaml file to spinnaker", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + createDockerRegistry() + }, +} + +func init() { + providercreateCmd.AddCommand(dockerregistryCmd) + dockerregistryCmd.Flags().StringVarP(&cloverFile, "file", "f", "", + "Input yaml file to add docker registry") + dockerregistryCmd.MarkFlagRequired("file") + +} + +func createDockerRegistry() { + checkControllerIP() + url := controllerIP + "/halyard/addregistry" + in, err := ioutil.ReadFile(cloverFile) + if err != nil { + fmt.Println("Please specify a valid yaml file") + os.Exit(1) + } + out_json, err := yaml.YAMLToJSON(in) + if err != nil { + fmt.Printf("Invalid yaml: %v\n", err) + os.Exit(1) + } + + resp, err := resty.R(). + SetHeader("Content-Type", "application/json"). + SetBody(out_json). + Post(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) + +} diff --git a/clover/cloverctl/src/cloverctl/cmd/create_idsrules.go b/clover/cloverctl/src/cloverctl/cmd/create_idsrules.go new file mode 100644 index 0000000..6e59297 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/create_idsrules.go @@ -0,0 +1,59 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "os" + "io/ioutil" + "gopkg.in/resty.v1" + "github.com/ghodss/yaml" + "github.com/spf13/cobra" +) + + +var idsrulesCmd = &cobra.Command{ + Use: "idsrules", + Short: "Create one or many snort IDS rules from yaml file", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + createIDSRules() + }, +} + +func init() { + createCmd.AddCommand(idsrulesCmd) + idsrulesCmd.Flags().StringVarP(&cloverFile, "file", "f", "", + "Input yaml file to add IDS rules") + idsrulesCmd.MarkFlagRequired("file") + +} + +func createIDSRules() { + checkControllerIP() + url := controllerIP + "/snort/addrule" + in, err := ioutil.ReadFile(cloverFile) + if err != nil { + fmt.Println("Please specify a valid rule definition yaml file") + os.Exit(1) + } + out_json, err := yaml.YAMLToJSON(in) + if err != nil { + fmt.Printf("Invalid yaml: %v\n", err) + os.Exit(1) + } + resp, err := resty.R(). + SetHeader("Content-Type", "application/json"). + SetBody(out_json). + Post(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/create_kubernetes.go b/clover/cloverctl/src/cloverctl/cmd/create_kubernetes.go new file mode 100644 index 0000000..8ff4394 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/create_kubernetes.go @@ -0,0 +1,91 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "time" + "io/ioutil" + "strings" + "os" + "gopkg.in/resty.v1" + "github.com/ghodss/yaml" + "github.com/spf13/cobra" + "cloverkube" +) + +type Kubernetes struct { + Name string + ProviderVersion string + KubeconfigFile string + DockerRegistries []DockerRegistry +} + +type DockerRegistry struct { + AccountName string +} + + +var kubeproviderCmd = &cobra.Command{ + Use: "kubernetes", + Short: "Add one kubernetes provider from yaml file to spinnaker", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + createProvider() + }, +} + +func init() { + providercreateCmd.AddCommand(kubeproviderCmd) + kubeproviderCmd.Flags().StringVarP(&cloverFile, "file", "f", "", + "Input yaml file to add kubernetes provider") + kubeproviderCmd.MarkFlagRequired("file") + +} + +func createProvider() { + checkControllerIP() + url := controllerIP + "/halyard/addkube" + in, err := ioutil.ReadFile(cloverFile) + if err != nil { + fmt.Println("Please specify a valid yaml file") + os.Exit(1) + } + + t := Kubernetes{} + yaml.Unmarshal(in, &t) + if(t.KubeconfigFile==""){ + fmt.Println("error") + return; + } + filename := t.KubeconfigFile + hal_path := "/home/spinnaker/config" + timestamp := time.Now().Unix() + tm := time.Unix(timestamp, 0) + t.KubeconfigFile = hal_path + tm.Format("2006-01-02-15-04-05") + dest_container := "spinnaker/spin-halyard/halyard-daemon" + destPath := t.KubeconfigFile + dest := strings.Join([]string{dest_container, destPath}, ":") + cloverkube.CopyFileToPod(filename, dest) + newconfig, _ := yaml.Marshal(&t) + out_json, err := yaml.YAMLToJSON(newconfig) + if err != nil { + fmt.Printf("Invalid yaml: %v\n", err) + os.Exit(1) + } + resp, err := resty.R(). + SetHeader("Content-Type", "application/json"). + SetBody(out_json). + Post(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) + +} diff --git a/clover/cloverctl/src/cloverctl/cmd/create_system.go b/clover/cloverctl/src/cloverctl/cmd/create_system.go new file mode 100644 index 0000000..402d0c0 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/create_system.go @@ -0,0 +1,197 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" + "cloverkube" +) + +var systemCmd = &cobra.Command{ + Use: "system", + Short: "Deploy clover-system services in Kubernetes", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + cloverkube.ConfigNamespace("clover-system", "create") + }, +} + +var create_visibilityCmd = &cobra.Command{ + Use: "visibility", + Short: "Deploy visibility services in clover-system namespace", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Creating visibility services") + cloverkube.ConfigNamespace("clover-system", "create") + createCloverSystem("cassandra") + createCloverSystem("redis") + createCloverSystem("collector") + createCloverSystem("controller") + createCloverSystem("spark") + }, +} + +var create_collectorCmd = &cobra.Command{ + Use: "collector", + Short: "Deploy collector service in clover-system namespace", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Creating collector service") + cloverkube.ConfigNamespace("clover-system", "create") + createCloverSystem("collector") + }, +} + +var create_controllerCmd = &cobra.Command{ + Use: "controller", + Short: "Deploy controller service in clover-system namespace", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Creating controller service") + cloverkube.ConfigNamespace("clover-system", "create") + createCloverSystem("controller") + }, +} + +var create_controllernodeportCmd = &cobra.Command{ + Use: "nodeport", + Short: "Deploy nodeport service to expose controller externally", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Creating nodeport for controller service") + createCloverSystem("controller_nodeport") + }, +} + +var create_controllerlbCmd = &cobra.Command{ + Use: "lb", + Short: "Deploy lb service to expose controller externally", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Creating lb for controller service") + createCloverSystem("controller_lb") + }, +} + +var create_clovisorCmd = &cobra.Command{ + Use: "clovisor", + Short: "Deploy clovisor service in clovisor namespace", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Creating clovisor service") + cloverkube.ConfigNamespace("clovisor", "create") + createCloverSystem("clovisor") + }, +} + +var create_datastoreCmd = &cobra.Command{ + Use: "datastore", + Short: "Deploy redis/cassandra services in clover-system namespace", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Creating datastore services") + cloverkube.ConfigNamespace("clover-system", "create") + createCloverSystem("cassandra") + createCloverSystem("redis") + }, +} + +var create_validationCmd = &cobra.Command{ + Use: "validation", + Short: "Deploy jmeter master/slave services", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Creating validation services") + createCloverSystem("jmeter_master") + createCloverSystem("jmeter_slave") + }, +} + + +var repo string +var tag string +func init() { + createCmd.AddCommand(systemCmd) + systemCmd.AddCommand(create_visibilityCmd) + systemCmd.AddCommand(create_collectorCmd) + systemCmd.AddCommand(create_controllerCmd) + create_controllerCmd.AddCommand(create_controllernodeportCmd) + create_controllerCmd.AddCommand(create_controllerlbCmd) + systemCmd.AddCommand(create_datastoreCmd) + systemCmd.AddCommand(create_validationCmd) + systemCmd.AddCommand(create_clovisorCmd) + systemCmd.PersistentFlags().StringVarP(&repo, "repo", "r", "opnfv", + "Image repo to use, ex. 'opnfv' or 'localhost:5000'") + systemCmd.PersistentFlags().StringVarP(&tag, "tag", "t", "opnfv-7.0.0", + "Image tag to use, ex. 'opnfv-7.0.0' or 'latest'") +} + +func createCloverSystem(clover_services string) { + image := "" + switch clover_services { + case "controller": + image = repo + "/clover-controller:" + tag + cloverkube.CreateResource("controller/deployment.yaml", + "deployment", image, "") + cloverkube.CreateResource("controller/service_internal.yaml", + "service", "", "") + case "controller_nodeport": + cloverkube.CreateResource("controller/service_nodeport.yaml", + "service", "", "") + case "controller_lb": + cloverkube.CreateResource("controller/service_lb.yaml", + "service", "", "") + case "collector": + image = repo + "/clover-collector:" + tag + cloverkube.CreateResource("collector/deployment.yaml", + "deployment", image, "") + cloverkube.CreateResource("collector/service.yaml", "service", + "", "") + case "spark": + image = repo + "/clover-spark-submit:" + tag + cloverkube.CreateResource("spark/serviceaccount.yaml", + "serviceaccount", "", "") + cloverkube.CreateResource("spark/clusterrolebinding.yaml", + "clusterrolebinding", "", "") + cloverkube.CreateResource("spark/clusterrolebinding_spark.yaml", + "clusterrolebinding", "", "") + cloverkube.CreateResource("spark/deployment.yaml", "deployment", + image, "") + case "clovisor": + image = repo + "/clover-clovisor:" + tag + cloverkube.CreateResource("clovisor/serviceaccount.yaml", + "serviceaccount", "", "clovisor") + cloverkube.CreateResource("clovisor/clusterrolebinding.yaml", + "clusterrolebinding", "", "clovisor") + cloverkube.CreateResource("clovisor/daemonset.yaml", "daemonset", + image, "clovisor") + case "redis": + cloverkube.CreateResource("datastore/redis_pod.yaml", "pod", + "", "") + cloverkube.CreateResource("datastore/redis_service.yaml", + "service", "", "") + case "cassandra": + cloverkube.CreateResource("datastore/cassandra_statefulset.yaml", + "statefulset", "", "") + cloverkube.CreateResource("datastore/cassandra_service.yaml", + "service", "", "") + case "jmeter_master": + image = repo + "/clover-jmeter-master:" + tag + cloverkube.CreateResource("jmeter/master_deployment.yaml", + "deployment", image, "default") + cloverkube.CreateResource("jmeter/master_service.yaml", + "service", "", "default") + case "jmeter_slave": + image = repo + "/clover-jmeter-slave:" + tag + cloverkube.CreateResource("jmeter/slave_deployment.yaml", + "deployment", image, "default") + cloverkube.CreateResource("jmeter/slave_service.yaml", + "service", "", "default") + } +} diff --git a/clover/cloverctl/src/cloverctl/cmd/create_testplan.go b/clover/cloverctl/src/cloverctl/cmd/create_testplan.go new file mode 100644 index 0000000..1d9d8b2 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/create_testplan.go @@ -0,0 +1,59 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "os" + "gopkg.in/resty.v1" + "io/ioutil" + "github.com/ghodss/yaml" + "github.com/spf13/cobra" + +) + + +var testplanCmd = &cobra.Command{ + Use: "testplan", + Short: "Create jmeter L7 client emulation test plan from yaml file", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + createTestPlan() + }, +} + +func init() { + createCmd.AddCommand(testplanCmd) + testplanCmd.Flags().StringVarP(&cloverFile, "file", "f", "", + "Input test plan yaml file") + testplanCmd.MarkFlagRequired("file") +} + +func createTestPlan() { + checkControllerIP() + url := controllerIP + "/jmeter/gen" + in, err := ioutil.ReadFile(cloverFile) + if err != nil { + fmt.Println("Please specify a valid yaml file") + os.Exit(1) + } + out_json, err := yaml.YAMLToJSON(in) + if err != nil { + fmt.Printf("Invalid yaml: %v\n", err) + os.Exit(1) + } + resp, err := resty.R(). + SetHeader("Content-Type", "application/json"). + SetBody(out_json). + Post(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/delete.go b/clover/cloverctl/src/cloverctl/cmd/delete.go new file mode 100644 index 0000000..34070e7 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/delete.go @@ -0,0 +1,26 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" +) + +var deleteCmd = &cobra.Command{ + Use: "delete", + Short: "Delete configurations and clover services", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Incomplete command") + }, +} + +func init() { + rootCmd.AddCommand(deleteCmd) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/delete_docker_registry.go b/clover/cloverctl/src/cloverctl/cmd/delete_docker_registry.go new file mode 100644 index 0000000..3bb411a --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/delete_docker_registry.go @@ -0,0 +1,55 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "encoding/json" + "os" + "gopkg.in/resty.v1" + "github.com/spf13/cobra" +) + +var deldockerproviderCmd = &cobra.Command{ + Use: "docker-registry", + Short: "Delete one docker registry provider by name from spinnaker", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + deldockerProvider() + }, +} + +func init() { + providerdelCmd.AddCommand(deldockerproviderCmd) + deldockerproviderCmd.Flags().StringVarP(&name, "name", "n", "", + "Input docker-registry account name") + deldockerproviderCmd.MarkFlagRequired("name") + +} + +func deldockerProvider() { + checkControllerIP() + url := controllerIP + "/halyard/delprovider" + + var in = map[string]string{"name": name, "provider":"dockerRegistry"} + out_json, err := json.Marshal(in) + if err != nil { + fmt.Println("json.Marshal failed:", err) + return + } + resp, err := resty.R(). + SetHeader("Content-Type", "application/json"). + SetBody(out_json). + Post(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) + +} diff --git a/clover/cloverctl/src/cloverctl/cmd/delete_kubernetes.go b/clover/cloverctl/src/cloverctl/cmd/delete_kubernetes.go new file mode 100644 index 0000000..a6f29f9 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/delete_kubernetes.go @@ -0,0 +1,56 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "encoding/json" + "os" + "gopkg.in/resty.v1" + "github.com/spf13/cobra" +) + +var name string +var delkubeproviderCmd = &cobra.Command{ + Use: "kubernetes", + Short: "Delete one kubernetes provider by name from spinnaker", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + delProvider() + }, +} + +func init() { + providerdelCmd.AddCommand(delkubeproviderCmd) + delkubeproviderCmd.Flags().StringVarP(&name, "name", "n", "", + "Input kubernetes account name") + delkubeproviderCmd.MarkFlagRequired("name") + +} + +func delProvider() { + checkControllerIP() + url := controllerIP + "/halyard/delprovider" + + var in = map[string]string{"name": name, "provider":"kubernetes"} + out_json, err := json.Marshal(in) + if err != nil { + fmt.Println("json.Marshal failed:", err) + return + } + resp, err := resty.R(). + SetHeader("Content-Type", "application/json"). + SetBody(out_json). + Post(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) + +} diff --git a/clover/cloverctl/src/cloverctl/cmd/delete_system.go b/clover/cloverctl/src/cloverctl/cmd/delete_system.go new file mode 100644 index 0000000..ded0a68 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/delete_system.go @@ -0,0 +1,166 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" + "cloverkube" +) + +var delsystemCmd = &cobra.Command{ + Use: "system", + Short: "Delete clover-system in Kubernetes", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + delCloverSystem("controller") + }, +} + +var del_controllerCmd = &cobra.Command{ + Use: "controller", + Short: "Delete controller service from clover-system namespace", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Deleting controller service") + delCloverSystem("controller") + }, +} + +var del_controllernodeportCmd = &cobra.Command{ + Use: "nodeport", + Short: "Delete controller nodeport service from clover-system namespace", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Deleting nodeport for controller service") + delCloverSystem("controller_nodeport") + }, +} + +var del_controllerlbCmd = &cobra.Command{ + Use: "lb", + Short: "Delete controller lb service from clover-system namespace", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Deleting lb for controller service") + delCloverSystem("controller_lb") + }, +} + +var del_collectorCmd = &cobra.Command{ + Use: "collector", + Short: "Delete collector service from clover-system namespace", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Deleting collector service") + delCloverSystem("collector") + }, +} + +var del_clovisorCmd = &cobra.Command{ + Use: "clovisor", + Short: "Delete clovisor service from clovisor namespace", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Deleting clovisor service") + delCloverSystem("clovisor") + cloverkube.ConfigNamespace("clovisor", "delete") + }, +} + +var del_visibilityCmd = &cobra.Command{ + Use: "visibility", + Short: "Delete visibility services from clover-system namespace", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Deleting visibility services") + delCloverSystem("spark") + delCloverSystem("controller") + delCloverSystem("collector") + delCloverSystem("cassandra") + delCloverSystem("redis") + cloverkube.ConfigNamespace("clover-system", "delete") + }, +} + +var del_datastoreCmd = &cobra.Command{ + Use: "datastore", + Short: "Delete datastore services from clover-system namespace", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Deleting datatore services") + delCloverSystem("cassandra") + delCloverSystem("redis") + }, +} + +var del_validationCmd = &cobra.Command{ + Use: "validation", + Short: "Delete jmeter master/slave services", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Deleting validation services") + delCloverSystem("jmeter_master") + delCloverSystem("jmeter_slave") + }, +} + +func init() { + deleteCmd.AddCommand(delsystemCmd) + delsystemCmd.AddCommand(del_controllerCmd) + del_controllerCmd.AddCommand(del_controllernodeportCmd) + del_controllerCmd.AddCommand(del_controllerlbCmd) + delsystemCmd.AddCommand(del_collectorCmd) + delsystemCmd.AddCommand(del_visibilityCmd) + delsystemCmd.AddCommand(del_validationCmd) + delsystemCmd.AddCommand(del_datastoreCmd) + delsystemCmd.AddCommand(del_clovisorCmd) +} + +func delCloverSystem(clover_services string) { + ns := "clover-system" + switch clover_services { + case "controller": + cloverkube.DeleteResource("clover-controller", "deployment", ns) + cloverkube.DeleteResource("clover-controller-internal", + "service", ns) + case "controller_nodeport", "controller_lb": + cloverkube.DeleteResource("clover-controller", + "service", ns) + case "collector": + cloverkube.DeleteResource("clover-collector", "deployment", ns) + cloverkube.DeleteResource("clover-collector", "service", ns) + case "spark": + cloverkube.DeleteResource("clover-spark", "serviceaccount", ns) + cloverkube.DeleteResource("clover-spark-default", + "clusterrolebinding", ns) + cloverkube.DeleteResource("clover-spark", "clusterrolebinding", ns) + cloverkube.DeleteResource("clover-spark-submit", "deployment", ns) + case "clovisor": + cloverkube.DeleteResource("clovisor", "serviceaccount", "clovisor") + cloverkube.DeleteResource("serv-account-rbac-clovisor", + "clusterrolebinding", "clovisor") + cloverkube.DeleteResource("clovisor", "daemonset", "clovisor") + case "redis": + cloverkube.DeleteResource("redis", "pod", ns) + cloverkube.DeleteResource("redis", "service", ns) + case "cassandra": + cloverkube.DeleteResource("cassandra", "statefulset", ns) + cloverkube.DeleteResource("cassandra", "service", ns) + case "jmeter_master": + cloverkube.DeleteResource("clover-jmeter-master", "deployment", + "default") + cloverkube.DeleteResource("clover-jmeter-master", + "service", "default") + case "jmeter_slave": + cloverkube.DeleteResource("clover-jmeter-slave", "deployment", + "default") + cloverkube.DeleteResource("clover-jmeter-slave", + "service", "default") + } +} diff --git a/clover/cloverctl/src/cloverctl/cmd/get.go b/clover/cloverctl/src/cloverctl/cmd/get.go new file mode 100644 index 0000000..c8493be --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/get.go @@ -0,0 +1,26 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" +) + +var getCmd = &cobra.Command{ + Use: "get", + Short: "Get information about a configuration or deployment", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Incomplete command") + }, +} + +func init() { + rootCmd.AddCommand(getCmd) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/get_docker_registry.go b/clover/cloverctl/src/cloverctl/cmd/get_docker_registry.go new file mode 100644 index 0000000..7ae94c9 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/get_docker_registry.go @@ -0,0 +1,61 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "strings" + "encoding/json" + "os" + "gopkg.in/resty.v1" + "github.com/spf13/cobra" +) + + +var getdockerregistry = &cobra.Command{ + Use: "docker-registry", + Short: "Get docker registry from spinnaker", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + getdocker() + }, +} + +func init() { + providergetCmd.AddCommand(getdockerregistry) +} + +func getdocker() { + checkControllerIP() + url := controllerIP + "/halyard/account" + + var provider = map[string]string{"name": "dockerRegistry"} + out_json, err := json.Marshal(provider) + if err != nil { + fmt.Println("json.Marshal failed:", err) + return + } + resp, err := resty.SetAllowGetMethodPayload(true).R(). + SetHeader("Content-Type", "application/json"). + SetBody(out_json). + Get(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + if resp.StatusCode() != 200 { + fmt.Printf("\n%v\n", resp) + return + } + + accounts := strings.Split(resp.String(), ":") + fmt.Printf("\n") + for index, account := range accounts{ + fmt.Printf("%d. %v\n",index + 1, account) + } +} diff --git a/clover/cloverctl/src/cloverctl/cmd/get_kubernetes.go b/clover/cloverctl/src/cloverctl/cmd/get_kubernetes.go new file mode 100644 index 0000000..bd5875c --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/get_kubernetes.go @@ -0,0 +1,61 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "strings" + "encoding/json" + "os" + "gopkg.in/resty.v1" + "github.com/spf13/cobra" +) + + +var getkubeprovider = &cobra.Command{ + Use: "kubernetes", + Short: "Get kubernetes provider from spinnaker", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + getkube() + }, +} + +func init() { + providergetCmd.AddCommand(getkubeprovider) +} + +func getkube() { + checkControllerIP() + url := controllerIP + "/halyard/account" + + var provider = map[string]string{"name": "kubernetes"} + out_json, err := json.Marshal(provider) + if err != nil { + fmt.Println("json.Marshal failed:", err) + return + } + resp, err := resty.SetAllowGetMethodPayload(true).R(). + SetHeader("Content-Type", "application/json"). + SetBody(out_json). + Get(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + if resp.StatusCode() != 200 { + fmt.Printf("\n%v\n", resp) + return + } + + accounts := strings.Split(resp.String(), ":") + fmt.Printf("\n") + for index, account := range accounts{ + fmt.Printf("%d. %v\n",index + 1, account) + } +} diff --git a/clover/cloverctl/src/cloverctl/cmd/get_services.go b/clover/cloverctl/src/cloverctl/cmd/get_services.go new file mode 100644 index 0000000..bab13ce --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/get_services.go @@ -0,0 +1,26 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "github.com/spf13/cobra" + "cloverkube" +) + +var servicesCmd = &cobra.Command{ + Use: "services", + Short: "Get listing of Kubernetes services", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + cloverkube.GetServices() + }, +} + +func init() { + getCmd.AddCommand(servicesCmd) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/get_testresult.go b/clover/cloverctl/src/cloverctl/cmd/get_testresult.go new file mode 100644 index 0000000..f9d8e6d --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/get_testresult.go @@ -0,0 +1,75 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "os" + "gopkg.in/resty.v1" + "github.com/spf13/cobra" +) + +var testresultCmd = &cobra.Command{ + Use: "testresult", + Short: "Get test results from jmeter L7 client emulation", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + getResult("log") + }, +} + +var log_testresultCmd = &cobra.Command{ + Use: "log", + Short: "Get jmeter summary log results", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + getResult("log") + }, +} + +var detail_testresultCmd = &cobra.Command{ + Use: "detail", + Short: "Get jmeter detailed results", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + getResult("detail") + }, +} + +func init() { + getCmd.AddCommand(testresultCmd) + testresultCmd.AddCommand(log_testresultCmd) + testresultCmd.AddCommand(detail_testresultCmd) +} + +func getResult(result_type string) { + checkControllerIP() + switch result_type { + case "detail": + url := controllerIP + "/jmeter/results/results" + resp, err := resty.R(). + Get(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\nResponse Body: %v\n", resp) + case "log": + url := controllerIP + "/jmeter/results/log" + resp, err := resty.R(). + Get(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\nResponse Body: %v\n", resp) + default: + msg := "Unrecoginized jmeter result type" + fmt.Printf("%s - use 'log' or 'detail'", msg) + } +} diff --git a/clover/cloverctl/src/cloverctl/cmd/get_visibility.go b/clover/cloverctl/src/cloverctl/cmd/get_visibility.go new file mode 100644 index 0000000..a701164 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/get_visibility.go @@ -0,0 +1,61 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "os" + "gopkg.in/resty.v1" + "github.com/spf13/cobra" +) + +var VisibilityStat string +var VisibilityConfig string + +var visibilitygetCmd = &cobra.Command{ + Use: "visibility", + Short: "Get visibility config & stats", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + getVisibility() + }, +} + +func init() { + getCmd.AddCommand(visibilitygetCmd) + visibilitygetCmd.PersistentFlags().StringVarP(&VisibilityStat, "stat", "s", + "", "Visibility stats type to get") + visibilitygetCmd.PersistentFlags().StringVarP(&VisibilityConfig, "conf", + "c", "", "Visibility config type to get") +} + +func getVisibility() { + + checkControllerIP() + url_prefix := "/visibility/get/" + get_data := "all" + response_prefix := "Config" + if VisibilityStat != "" { + url_prefix = "/visibility/get/stats/" + get_data = VisibilityStat + response_prefix = "Stat" + } else if VisibilityConfig != "" { + get_data = VisibilityConfig + } + + url := controllerIP + url_prefix + get_data + + resp, err := resty.R(). + SetHeader("Accept", "application/json"). + Get(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%s %s: %v\n", response_prefix, get_data, resp) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/init.go b/clover/cloverctl/src/cloverctl/cmd/init.go new file mode 100644 index 0000000..102c5ba --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/init.go @@ -0,0 +1,26 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" +) + +var initCmd = &cobra.Command{ + Use: "init", + Short: "Initialize visibility schemas", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Incomplete command") + }, +} + +func init() { + rootCmd.AddCommand(initCmd) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/init_visibility.go b/clover/cloverctl/src/cloverctl/cmd/init_visibility.go new file mode 100644 index 0000000..004c300 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/init_visibility.go @@ -0,0 +1,43 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "os" + "gopkg.in/resty.v1" + "github.com/spf13/cobra" +) + + +var visibilityinitCmd = &cobra.Command{ + Use: "visibility", + Short: "Initialize visibility data schemas in cassandra", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + initCollector() + }, +} + +func init() { + initCmd.AddCommand(visibilityinitCmd) +} + +func initCollector() { + + checkControllerIP() + url := controllerIP + "/collector/init" + + resp, err := resty.R(). + Get(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/provider.go b/clover/cloverctl/src/cloverctl/cmd/provider.go new file mode 100644 index 0000000..e6f1cc8 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/provider.go @@ -0,0 +1,45 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" +) + +var providercreateCmd = &cobra.Command{ + Use: "provider", + Short: "Add spinnaker provider", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Incomplete command") + }, +} + +var providerdelCmd = &cobra.Command{ + Use: "provider", + Short: "Delete spinnaker provider", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Incomplete command") + }, +} + +var providergetCmd = &cobra.Command{ + Use: "provider", + Short: "Get spinnaker provider", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Incomplete command") + }, +} +func init() { + createCmd.AddCommand(providercreateCmd) + deleteCmd.AddCommand(providerdelCmd) + getCmd.AddCommand(providergetCmd) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/root.go b/clover/cloverctl/src/cloverctl/cmd/root.go new file mode 100644 index 0000000..d1d9405 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/root.go @@ -0,0 +1,120 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "os" + "strings" + + homedir "github.com/mitchellh/go-homedir" + "github.com/spf13/cobra" + "github.com/spf13/viper" + "cloverkube" +) + +var cfgFile string +var controllerIP string +var cloverFile string + +// rootCmd represents the base command when called without any subcommands +var rootCmd = &cobra.Command{ + Use: "cloverctl", + Short: "Command-Line Interface (CLI) for Clover", + Long: ``, + // Uncomment the following line if your bare application + // has an action associated with it: + //Run: func(cmd *cobra.Command, args []string) { + //}, +} + +// Execute adds all child commands to the root command and sets flags +// appropriately. This is called by main.main(). It only needs to happen +// once to the rootCmd. +func Execute() { + if err := rootCmd.Execute(); err != nil { + fmt.Println(err) + os.Exit(1) + } +} + +func init() { + cobra.OnInitialize(initConfig) + + // Here you will define your flags and configuration settings. + // Cobra supports persistent flags, which, if defined here, + // will be global for your application. + rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", + "config file (default is $HOME/.cloverctl.yaml)") + + // Cobra also supports local flags, which will only run + // when this action is called directly. + rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} + +// initConfig reads in config file and ENV variables if set. +func initConfig() { + if cfgFile != "" { + // Use config file from the flag. + viper.SetConfigFile(cfgFile) + } else { + // Find home directory. + home, err := homedir.Dir() + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + // Search config in home directory with name ".cloverctl" + viper.AddConfigPath(home) + viper.SetConfigName(".cloverctl") + } + + viper.AutomaticEnv() // read in environment variables that match + + cip_file := "" + // If a config file is found in home, read it in. + if err := viper.ReadInConfig(); err == nil { + fmt.Println("Using config file:", viper.ConfigFileUsed()) + cip_file = viper.GetString("ControllerIP") + } else { + // Check for file in path from cloverctl + ep, err := os.Executable() + if err == nil { + exe_path := strings.Replace(ep, "cloverctl", "", -1) + viper.AddConfigPath(exe_path) + if err := viper.ReadInConfig(); err == nil { + fmt.Println("Using config file:", viper.ConfigFileUsed()) + cip_file = viper.GetString("ControllerIP") + } + } + } + + cPort, cip_kube := cloverkube.GetServicesPortIP("clover-controller") + // If IP in file + if cip_file != "" { + // Nodeport + controllerIP = "http://" + cip_file + ":" + fmt.Sprint(cPort) + } + // Override IP, if LB IP found + if cip_kube != "" { + fmt.Printf("IP %v", cip_kube) + controllerIP = "http://" + cip_kube + } +} + +func checkControllerIP() { + // controllerIP exists + service := "clover-controller" + if controllerIP == "" { + fmt.Printf("%s address unspecified or cannot be found\n", service) + os.Exit(1) + } else { + fmt.Printf("%s address: %s\n", service, controllerIP) + } +} diff --git a/clover/cloverctl/src/cloverctl/cmd/set.go b/clover/cloverctl/src/cloverctl/cmd/set.go new file mode 100644 index 0000000..b20bfb5 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/set.go @@ -0,0 +1,26 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" +) + +var setCmd = &cobra.Command{ + Use: "set", + Short: "Set input to visibility or configurations for sample services", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Incomplete command") + }, +} + +func init() { + rootCmd.AddCommand(setCmd) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/set_nginx.go b/clover/cloverctl/src/cloverctl/cmd/set_nginx.go new file mode 100644 index 0000000..6b571bb --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/set_nginx.go @@ -0,0 +1,79 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "os" + "io/ioutil" + "gopkg.in/resty.v1" + "github.com/spf13/cobra" + "github.com/ghodss/yaml" +) + + +var setserverCmd = &cobra.Command{ + Use: "server", + Short: "Modify nginx server configuration", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + setNginx("server") + }, +} + +var setlbCmd = &cobra.Command{ + Use: "lb", + Short: "Modify nginx lb configuration", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + setNginx("lb") + }, +} + +func init() { + setCmd.AddCommand(setserverCmd) + setserverCmd.Flags().StringVarP(&cloverFile, "file", "f", "", + "Input yaml file for server config") + setserverCmd.MarkFlagRequired("file") + + setCmd.AddCommand(setlbCmd) + setlbCmd.Flags().StringVarP(&cloverFile, "file", "f", "", + "Input yaml file for lb config") + setlbCmd.MarkFlagRequired("file") +} + +func setNginx(nginx_service string) { + + checkControllerIP() + url := "" + if nginx_service == "server" { + url = controllerIP + "/nginx/server" + } else { + url = controllerIP + "/nginx/lb" + } + + in, err := ioutil.ReadFile(cloverFile) + if err != nil { + fmt.Println("Please specify a valid yaml file") + os.Exit(1) + } + out_json, err := yaml.YAMLToJSON(in) + if err != nil { + fmt.Printf("Invalid yaml: %v\n", err) + os.Exit(1) + } + resp, err := resty.R(). + SetHeader("Content-Type", "application/json"). + SetBody(out_json). + Post(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/set_visibility.go b/clover/cloverctl/src/cloverctl/cmd/set_visibility.go new file mode 100644 index 0000000..ec28122 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/set_visibility.go @@ -0,0 +1,59 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "os" + "io/ioutil" + "gopkg.in/resty.v1" + "github.com/spf13/cobra" + "github.com/ghodss/yaml" +) + + +var setvisibilitystatsCmd = &cobra.Command{ + Use: "visibility", + Short: "Set visibility config for services and metrics to track", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + setCollector() + }, +} + +func init() { + setCmd.AddCommand(setvisibilitystatsCmd) + setvisibilitystatsCmd.Flags().StringVarP(&cloverFile, "file", "f", "", + "Input yaml file to set visibility config") + setvisibilitystatsCmd.MarkFlagRequired("file") +} + +func setCollector() { + checkControllerIP() + url := controllerIP + "/visibility/set" + + in, err := ioutil.ReadFile(cloverFile) + if err != nil { + fmt.Println("Please specify a valid yaml file") + os.Exit(1) + } + out_json, err := yaml.YAMLToJSON(in) + if err != nil { + fmt.Printf("Invalid yaml: %v\n", err) + os.Exit(1) + } + resp, err := resty.R(). + SetHeader("Content-Type", "application/json"). + SetBody(out_json). + Post(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/start.go b/clover/cloverctl/src/cloverctl/cmd/start.go new file mode 100644 index 0000000..d2eb864 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/start.go @@ -0,0 +1,26 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" +) + +var startCmd = &cobra.Command{ + Use: "start", + Short: "Start processes and tests", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Incomplete command") + }, +} + +func init() { + rootCmd.AddCommand(startCmd) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/start_ids.go b/clover/cloverctl/src/cloverctl/cmd/start_ids.go new file mode 100644 index 0000000..be039fa --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/start_ids.go @@ -0,0 +1,43 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "os" + "gopkg.in/resty.v1" + "github.com/spf13/cobra" +) + + +var startidsCmd = &cobra.Command{ + Use: "ids", + Short: "Start snort IDS process", + Long: `Restart snort IDS process when adding custom rules`, + Run: func(cmd *cobra.Command, args []string) { + startIDS() + }, +} + +func init() { + startCmd.AddCommand(startidsCmd) +} + +func startIDS() { + + checkControllerIP() + url := controllerIP + "/snort/start" + + resp, err := resty.R(). + Get(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/start_testplan.go b/clover/cloverctl/src/cloverctl/cmd/start_testplan.go new file mode 100644 index 0000000..9e664c0 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/start_testplan.go @@ -0,0 +1,64 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "os" + "strings" + "gopkg.in/resty.v1" + "github.com/spf13/cobra" + "cloverkube" +) + + +var testplanstartCmd = &cobra.Command{ + Use: "testplan", + Short: "Start test for configured test plan", + Long: `Specify number of slaves to use with '-s' flag. Default is 0 slaves, +which runs tests from jmeter-master only.`, + Run: func(cmd *cobra.Command, args []string) { + startTest() + }, +} +var num_slaves int + +func init() { + startCmd.AddCommand(testplanstartCmd) + testplanstartCmd.PersistentFlags().StringVarP(&cloverFile, "file", "f", "", + "Currently unused") + testplanstartCmd.PersistentFlags().IntVarP(&num_slaves, "slaves", "s", 0, + "Number of slaves to use") +} + +func startTest() { + + ips := cloverkube.GetPodsIP("clover-jmeter-slave", "default") + fmt.Printf("\njmeter-slaves found: %s\n", ips) + if num_slaves > len(ips) { + fmt.Printf("Number of slaves specified must be less than found: %d\n", + len(ips)) + return + } + ip_list := strings.Join(ips[0:num_slaves], ",") + + checkControllerIP() + url := controllerIP + "/jmeter/start" + resp, err := resty.R(). + SetHeader("Content-Type", "application/json"). + SetBody(fmt.Sprintf(`{"num_slaves":"%d", "slave_list":"%s"}`, num_slaves, + ip_list)). + Post(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) +} + + diff --git a/clover/cloverctl/src/cloverctl/cmd/start_visibility.go b/clover/cloverctl/src/cloverctl/cmd/start_visibility.go new file mode 100644 index 0000000..bbc25d8 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/start_visibility.go @@ -0,0 +1,65 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "os" + "io/ioutil" + "gopkg.in/resty.v1" + "github.com/ghodss/yaml" + "github.com/spf13/cobra" +) + + +var visibilitystartCmd = &cobra.Command{ + Use: "visibility", + Short: "Start visibility collector process", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + startCollector() + }, +} + +func init() { + startCmd.AddCommand(visibilitystartCmd) + visibilitystartCmd.PersistentFlags().StringVarP(&cloverFile, "file", "f", "", "Optional yaml file with collector params") +} + +func startCollector() { + + var message_body string + if cloverFile != "" { + in, err := ioutil.ReadFile(cloverFile) + if err != nil { + fmt.Printf("Cannot read file: %v\n", err) + os.Exit(1) + } + out_json, err := yaml.YAMLToJSON(in) + message_body = string(out_json) + if err != nil { + fmt.Printf("Invalid yaml: %v\n", err) + os.Exit(1) + } + } else { + message_body = `{"sample_interval":"10", "t_port":"80", "t_host":"jaeger-query.istio-system"}` + } + checkControllerIP() + url := controllerIP + "/collector/start" + resp, err := resty.R(). + SetHeader("Content-Type", "application/json"). + SetBody(message_body). + Post(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) +} + + diff --git a/clover/cloverctl/src/cloverctl/cmd/stop.go b/clover/cloverctl/src/cloverctl/cmd/stop.go new file mode 100644 index 0000000..e77a36b --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/stop.go @@ -0,0 +1,26 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" +) + +var stopCmd = &cobra.Command{ + Use: "stop", + Short: "Stop processes including visibility and sample services", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Incomplete command") + }, +} + +func init() { + rootCmd.AddCommand(stopCmd) +} diff --git a/clover/cloverctl/src/cloverctl/cmd/stop_ids.go b/clover/cloverctl/src/cloverctl/cmd/stop_ids.go new file mode 100644 index 0000000..c810d9d --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/stop_ids.go @@ -0,0 +1,45 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "os" + "gopkg.in/resty.v1" + "github.com/spf13/cobra" +) + + +var stopidsCmd = &cobra.Command{ + Use: "ids", + Short: "Stop snort IDS process", + Long: `Restart snort IDS process when adding custom rules`, + Run: func(cmd *cobra.Command, args []string) { + stopIDS() + }, +} + +func init() { + stopCmd.AddCommand(stopidsCmd) +} + +func stopIDS() { + + checkControllerIP() + url := controllerIP + "/snort/stop" + + resp, err := resty.R(). + Get(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) +} + + diff --git a/clover/cloverctl/src/cloverctl/cmd/stop_visibility.go b/clover/cloverctl/src/cloverctl/cmd/stop_visibility.go new file mode 100644 index 0000000..fda226e --- /dev/null +++ b/clover/cloverctl/src/cloverctl/cmd/stop_visibility.go @@ -0,0 +1,45 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package cmd + +import ( + "fmt" + "os" + "gopkg.in/resty.v1" + "github.com/spf13/cobra" +) + + +var visibilitystopCmd = &cobra.Command{ + Use: "visibility", + Short: "Stop visibility collector process", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + stopCollector() + }, +} + +func init() { + stopCmd.AddCommand(visibilitystopCmd) +} + +func stopCollector() { + + checkControllerIP() + url := controllerIP + "/collector/stop" + + resp, err := resty.R(). + Get(url) + if err != nil { + fmt.Printf("Cannot connect to controller: %v\n", err) + os.Exit(1) + } + fmt.Printf("\n%v\n", resp) +} + + diff --git a/clover/cloverctl/src/cloverctl/main.go b/clover/cloverctl/src/cloverctl/main.go new file mode 100644 index 0000000..602dd20 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/main.go @@ -0,0 +1,14 @@ +// Copyright (c) Authors of Clover +// +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Apache License, Version 2.0 +// which accompanies this distribution, and is available at +// http://www.apache.org/licenses/LICENSE-2.0 + +package main + +import "cloverctl/cmd" + +func main() { + cmd.Execute() +} diff --git a/clover/cloverctl/src/cloverctl/yaml/clovisor/clusterrolebinding.yaml b/clover/cloverctl/src/cloverctl/yaml/clovisor/clusterrolebinding.yaml new file mode 100644 index 0000000..b8a364a --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/clovisor/clusterrolebinding.yaml @@ -0,0 +1,15 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: serv-account-rbac-clovisor +subjects: + - kind: ServiceAccount + # Reference to upper's `metadata.name` + name: default + # Reference to upper's `metadata.namespace` + namespace: clovisor +roleRef: + kind: ClusterRole + name: cluster-admin + apiGroup: rbac.authorization.k8s.io diff --git a/clover/cloverctl/src/cloverctl/yaml/clovisor/daemonset.yaml b/clover/cloverctl/src/cloverctl/yaml/clovisor/daemonset.yaml new file mode 100644 index 0000000..4c845f6 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/clovisor/daemonset.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + name: clovisor + namespace: clovisor +spec: + selector: + matchLabels: + app: clovisor + template: + metadata: + name: clovisor + labels: + app: clovisor + spec: + hostNetwork: true + dnsPolicy: ClusterFirstWithHostNet + containers: + - name: clovisor + image: opnfv/clovisor + securityContext: + privileged: true + env: + - name: MY_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName diff --git a/clover/cloverctl/src/cloverctl/yaml/clovisor/serviceaccount.yaml b/clover/cloverctl/src/cloverctl/yaml/clovisor/serviceaccount.yaml new file mode 100644 index 0000000..1fbbebb --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/clovisor/serviceaccount.yaml @@ -0,0 +1,6 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: clovisor + namespace: clovisor diff --git a/clover/cloverctl/src/cloverctl/yaml/collector/deployment.yaml b/clover/cloverctl/src/cloverctl/yaml/collector/deployment.yaml new file mode 100644 index 0000000..490fbbd --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/collector/deployment.yaml @@ -0,0 +1,23 @@ +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: clover-collector + labels: + app: clover-collector + namespace: clover-system +spec: + template: + metadata: + labels: + app: clover-collector + spec: + containers: + - name: clover-collector + image: opnfv/clover-collector:latest + ports: + - containerPort: 50054 + - containerPort: 6379 + - containerPort: 9090 + - containerPort: 16686 + - containerPort: 9042 diff --git a/clover/cloverctl/src/cloverctl/yaml/collector/service.yaml b/clover/cloverctl/src/cloverctl/yaml/collector/service.yaml new file mode 100644 index 0000000..b84601b --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/collector/service.yaml @@ -0,0 +1,22 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: clover-collector + labels: + app: clover-collector + namespace: clover-system +spec: + ports: + - port: 50054 + name: grpc + - port: 6379 + name: redis + - port: 16686 + name: jaeger + - port: 9090 + name: prometheus + - port: 9042 + name: cassandra + selector: + app: clover-collector diff --git a/clover/cloverctl/src/cloverctl/yaml/controller/deployment.yaml b/clover/cloverctl/src/cloverctl/yaml/controller/deployment.yaml new file mode 100644 index 0000000..4f15b51 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/controller/deployment.yaml @@ -0,0 +1,23 @@ +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: clover-controller + namespace: clover-system + labels: + app: "clover-controller" +spec: + template: + metadata: + labels: + app: "clover-controller" + spec: + containers: + - name: clover-controller + image: opnfv/clover-controller:latest + ports: + - containerPort: 50052 + - containerPort: 50054 + - containerPort: 6379 + - containerPort: 9042 + - containerPort: 80 diff --git a/clover/cloverctl/src/cloverctl/yaml/controller/service_internal.yaml b/clover/cloverctl/src/cloverctl/yaml/controller/service_internal.yaml new file mode 100644 index 0000000..8be95ee --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/controller/service_internal.yaml @@ -0,0 +1,22 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: clover-controller-internal + namespace: clover-system + labels: + app: clover-controller +spec: + ports: + - name: http + port: 80 + - name: grpc + port: 50052 + - name: grpc-server + port: 50054 + - name: redis + port: 6379 + - name: cassandra + port: 9042 + selector: + app: clover-controller diff --git a/clover/cloverctl/src/cloverctl/yaml/controller/service_lb.yaml b/clover/cloverctl/src/cloverctl/yaml/controller/service_lb.yaml new file mode 100644 index 0000000..2dcf5d1 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/controller/service_lb.yaml @@ -0,0 +1,14 @@ +kind: Service +apiVersion: v1 +metadata: + name: clover-controller + namespace: clover-system +spec: + selector: + app: clover-controller + ports: + - name: http + protocol: TCP + port: 80 + targetPort: 80 + type: LoadBalancer diff --git a/clover/cloverctl/src/cloverctl/yaml/controller/service_nodeport.yaml b/clover/cloverctl/src/cloverctl/yaml/controller/service_nodeport.yaml new file mode 100644 index 0000000..a719204 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/controller/service_nodeport.yaml @@ -0,0 +1,17 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: clover-controller + labels: + app: clover-controller +spec: + type: NodePort + ports: + - name: http + port: 80 + targetPort: 80 + nodePort: 32044 + protocol: TCP + selector: + app: clover-controller diff --git a/clover/cloverctl/src/cloverctl/yaml/datastore/cassandra_service.yaml b/clover/cloverctl/src/cloverctl/yaml/datastore/cassandra_service.yaml new file mode 100644 index 0000000..12f7d14 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/datastore/cassandra_service.yaml @@ -0,0 +1,14 @@ +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: cassandra + name: cassandra + namespace: clover-system +spec: + clusterIP: None + ports: + - port: 9042 + selector: + app: cassandra diff --git a/clover/cloverctl/src/cloverctl/yaml/datastore/cassandra_statefulset.yaml b/clover/cloverctl/src/cloverctl/yaml/datastore/cassandra_statefulset.yaml new file mode 100644 index 0000000..21ceb5f --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/datastore/cassandra_statefulset.yaml @@ -0,0 +1,54 @@ +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cassandra + labels: + app: cassandra + namespace: clover-system +spec: + serviceName: cassandra + replicas: 1 + selector: + matchLabels: + app: cassandra + template: + metadata: + labels: + app: cassandra + spec: + terminationGracePeriodSeconds: 1800 + containers: + - name: cassandra + image: cassandra:3 + imagePullPolicy: Always + ports: + - containerPort: 7000 + name: intra-node + - containerPort: 7001 + name: tls-intra-node + - containerPort: 7199 + name: jmx + - containerPort: 9042 + name: cql + resources: + limits: + cpu: "4000m" + memory: 5Gi + requests: + cpu: "4000m" + memory: 5Gi + env: + - name: MAX_HEAP_SIZE + value: 512M + - name: HEAP_NEWSIZE + value: 100M + - name: CASSANDRA_SEEDS + value: "cassandra-0.cassandra.clover-system.svc.cluster.local" + - name: CASSANDRA_CLUSTER_NAME + value: "MyCassandraDemo" + - name: CASSANDRA_DC + value: "DC1-K8Demo" + - name: CASSANDRA_RACK + value: "Rack1-K8Demo" + diff --git a/clover/cloverctl/src/cloverctl/yaml/datastore/redis_pod.yaml b/clover/cloverctl/src/cloverctl/yaml/datastore/redis_pod.yaml new file mode 100644 index 0000000..976fd97 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/datastore/redis_pod.yaml @@ -0,0 +1,34 @@ +--- +apiVersion: v1 +kind: Pod +metadata: + labels: + name: redis + redis-sentinel: "true" + role: master + name: redis +spec: + containers: + - name: redis + image: k8s.gcr.io/redis:v1 + env: + - name: MASTER + value: "true" + ports: + - containerPort: 6379 + resources: + limits: + cpu: "0.1" + volumeMounts: + - mountPath: /redis-master-data + name: data + - name: sentinel + image: kubernetes/redis:v1 + env: + - name: SENTINEL + value: "true" + ports: + - containerPort: 26379 + volumes: + - name: data + emptyDir: {} diff --git a/clover/cloverctl/src/cloverctl/yaml/datastore/redis_service.yaml b/clover/cloverctl/src/cloverctl/yaml/datastore/redis_service.yaml new file mode 100644 index 0000000..7ecab14 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/datastore/redis_service.yaml @@ -0,0 +1,10 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: redis +spec: + ports: + - port: 6379 + selector: + name: redis diff --git a/clover/cloverctl/src/cloverctl/yaml/idsrule_icmp.yaml b/clover/cloverctl/src/cloverctl/yaml/idsrule_icmp.yaml new file mode 100644 index 0000000..44ece96 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/idsrule_icmp.yaml @@ -0,0 +1,9 @@ +sid: "10000001" +protocol: icmp +dest_port: any +dest_ip: $HOME_NET +src_port: any +src_ip: any +msg: icmp_test +rev: "001" +content: '' diff --git a/clover/cloverctl/src/cloverctl/yaml/idsrule_scan.yaml b/clover/cloverctl/src/cloverctl/yaml/idsrule_scan.yaml new file mode 100644 index 0000000..1cce7f7 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/idsrule_scan.yaml @@ -0,0 +1,9 @@ +sid: "10000003" +protocol: tcp +dest_port: any +dest_ip: $HOME_NET +src_port: any +src_ip: any +msg: MALWARE-CNC User-Agent ASafaWeb Scan +rev: "001" +content: '"asafaweb.com"' diff --git a/clover/cloverctl/src/cloverctl/yaml/idsrule_tcp.yaml b/clover/cloverctl/src/cloverctl/yaml/idsrule_tcp.yaml new file mode 100644 index 0000000..8711f5d --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/idsrule_tcp.yaml @@ -0,0 +1,10 @@ +sid: "10000002" +protocol: tcp +dest_port: any +dest_ip: $HOME_NET +src_port: any +src_ip: any +msg: test +rev: "001" +content: '' + diff --git a/clover/cloverctl/src/cloverctl/yaml/jmeter/master_deployment.yaml b/clover/cloverctl/src/cloverctl/yaml/jmeter/master_deployment.yaml new file mode 100644 index 0000000..a2d0cbb --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/jmeter/master_deployment.yaml @@ -0,0 +1,21 @@ +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: clover-jmeter-master + labels: + app: clover-jmeter-master +spec: + template: + metadata: + labels: + app: clover-jmeter-master + spec: + containers: + - name: clover-jmeter-master + image: opnfv/clover-jmeter-master:latest + ports: + - containerPort: 50054 + - containerPort: 1099 + - containerPort: 80 + - containerPort: 443 diff --git a/clover/cloverctl/src/cloverctl/yaml/jmeter/master_service.yaml b/clover/cloverctl/src/cloverctl/yaml/jmeter/master_service.yaml new file mode 100644 index 0000000..da1e5ce --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/jmeter/master_service.yaml @@ -0,0 +1,19 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: clover-jmeter-master + labels: + app: clover-jmeter-master +spec: + ports: + - port: 50054 + name: grpc + - port: 1099 + name: rmi + - port: 80 + name: http + - port: 443 + name: https + selector: + app: clover-jmeter-master diff --git a/clover/cloverctl/src/cloverctl/yaml/jmeter/slave_deployment.yaml b/clover/cloverctl/src/cloverctl/yaml/jmeter/slave_deployment.yaml new file mode 100644 index 0000000..424828a --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/jmeter/slave_deployment.yaml @@ -0,0 +1,21 @@ +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: clover-jmeter-slave + labels: + app: clover-jmeter-slave +spec: + replicas: 3 + template: + metadata: + labels: + app: clover-jmeter-slave + spec: + containers: + - name: clover-jmeter-slave + image: opnfv/clover-jmeter-slave:latest + ports: + - containerPort: 1099 + - containerPort: 80 + - containerPort: 443 diff --git a/clover/cloverctl/src/cloverctl/yaml/jmeter/slave_service.yaml b/clover/cloverctl/src/cloverctl/yaml/jmeter/slave_service.yaml new file mode 100644 index 0000000..858191e --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/jmeter/slave_service.yaml @@ -0,0 +1,17 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: clover-jmeter-slave + labels: + app: clover-jmeter-slave +spec: + ports: + - port: 1099 + name: rmi + - port: 80 + name: http + - port: 443 + name: https + selector: + app: clover-jmeter-slave diff --git a/clover/cloverctl/src/cloverctl/yaml/jmeter_testplan.yaml b/clover/cloverctl/src/cloverctl/yaml/jmeter_testplan.yaml new file mode 100644 index 0000000..92d53ea --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/jmeter_testplan.yaml @@ -0,0 +1,14 @@ +load_spec: + num_threads: 5 + loops: 2 + ramp_time: 60 + duration: 80 +url_list: + - name: url1 + url: http://proxy-access-control.default:9180 + method: GET + user-agent: chrome + - name: url2 + url: http://proxy-access-control.default:9180 + method: GET + user-agent: safari diff --git a/clover/cloverctl/src/cloverctl/yaml/lbv1.yaml b/clover/cloverctl/src/cloverctl/yaml/lbv1.yaml new file mode 100644 index 0000000..3bb841d --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/lbv1.yaml @@ -0,0 +1,9 @@ +server_port: "9180" +server_name: "http-lb-v1" +lb_name: "http-lb-v1.default" +lb_group: "cloverlb" +lb_path: "/" +lb_list: + - url: "clover-server1:9180" + - url: "clover-server2:9180" + - url: "clover-server3:9180" diff --git a/clover/cloverctl/src/cloverctl/yaml/lbv2.yaml b/clover/cloverctl/src/cloverctl/yaml/lbv2.yaml new file mode 100644 index 0000000..7df9376 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/lbv2.yaml @@ -0,0 +1,8 @@ +server_port: "9180" +server_name: "http-lb-v2" +lb_name: "http-lb-v2.default" +lb_group: "cloverlb" +lb_path: "/" +lb_list: + - url: "clover-server4:9180" + - url: "clover-server5:9180" diff --git a/clover/cloverctl/src/cloverctl/yaml/server.yaml b/clover/cloverctl/src/cloverctl/yaml/server.yaml new file mode 100644 index 0000000..b44779a --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/server.yaml @@ -0,0 +1,16 @@ +server_port: "9180" +server_name: "clover-server1" +site_root: "/var/www/html" +site_index: index.html +upload_path_config: "/upload" +upload_path_test: "/upload_test" +locations: + - uri_match: "/clover/testurl" + directive: "try_files $uri @default2" + path: "/clover/testurl" + - uri_match: "/test" + directive: "try_files $uri @default1" + path: "/test" +files: + - src_file: "/var/www/html/upload/0000000001" + dest_file: "var/www/html/clover/testurl/file1.png" diff --git a/clover/cloverctl/src/cloverctl/yaml/set_visibility.yaml b/clover/cloverctl/src/cloverctl/yaml/set_visibility.yaml new file mode 100644 index 0000000..f88c673 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/set_visibility.yaml @@ -0,0 +1,13 @@ +services: + - name: proxy_access_control + - name: clover_server1 + - name: clover_server2 + - name: clover_server3 +metric_prefixes: + - prefix: envoy_cluster_outbound_9180__ + - prefix: envoy_cluster_inbound_9180__ +metric_suffixes: + - suffix: _default_svc_cluster_local_upstream_rq_2xx + - suffix: _default_svc_cluster_local_upstream_cx_active +custom_metrics: + - metric: envoy_tracing_zipkin_spans_sent diff --git a/clover/cloverctl/src/cloverctl/yaml/spark/clusterrolebinding.yaml b/clover/cloverctl/src/cloverctl/yaml/spark/clusterrolebinding.yaml new file mode 100644 index 0000000..ec6b367 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/spark/clusterrolebinding.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: clover-spark-default +subjects: + - kind: ServiceAccount + name: default + namespace: clover-system +roleRef: + kind: ClusterRole + name: cluster-admin + apiGroup: rbac.authorization.k8s.io diff --git a/clover/cloverctl/src/cloverctl/yaml/spark/clusterrolebinding_spark.yaml b/clover/cloverctl/src/cloverctl/yaml/spark/clusterrolebinding_spark.yaml new file mode 100644 index 0000000..be02e6f --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/spark/clusterrolebinding_spark.yaml @@ -0,0 +1,14 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: clover-spark +subjects: + - kind: ServiceAccount + name: clover-spark + namespace: clover-system +roleRef: + kind: ClusterRole + name: cluster-admin + apiGroup: rbac.authorization.k8s.io +--- diff --git a/clover/cloverctl/src/cloverctl/yaml/spark/deployment.yaml b/clover/cloverctl/src/cloverctl/yaml/spark/deployment.yaml new file mode 100644 index 0000000..d6c2d59 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/spark/deployment.yaml @@ -0,0 +1,17 @@ +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: clover-spark-submit + namespace: clover-system + labels: + app: clover-spark +spec: + template: + metadata: + labels: + app: clover-spark + spec: + containers: + - name: clover-spark + image: opnfv/clover-spark-submit:latest diff --git a/clover/cloverctl/src/cloverctl/yaml/spark/serviceaccount.yaml b/clover/cloverctl/src/cloverctl/yaml/spark/serviceaccount.yaml new file mode 100644 index 0000000..14bc316 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/spark/serviceaccount.yaml @@ -0,0 +1,6 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: clover-spark + namespace: clover-system diff --git a/clover/cloverctl/src/cloverctl/yaml/start_visibility.yaml b/clover/cloverctl/src/cloverctl/yaml/start_visibility.yaml new file mode 100644 index 0000000..f27f0c6 --- /dev/null +++ b/clover/cloverctl/src/cloverctl/yaml/start_visibility.yaml @@ -0,0 +1,5 @@ +sample_interval: "2" +t_host: tracing.istio-system +t_port: "80" +m_port: "9090" +m_host: prometheus.istio-system |