1
0
mirror of https://github.com/alexellis/arkade.git synced 2022-05-07 18:22:49 +03:00

Add cassandra app

Signed-off-by: David Isayan <disayan8@gmail.com>
This commit is contained in:
David Isayan
2021-08-04 15:51:05 +04:00
committed by Alex Ellis (OpenFaaS Ltd)
parent fa7dc2ffb9
commit ac5e019bf4
3 changed files with 145 additions and 1 deletions

View File

@@ -283,6 +283,7 @@ Examples:
Available Commands:
argocd Install argocd
cassandra Install cassandra
cert-manager Install cert-manager
chart Install the specified helm chart
consul-connect Install Consul Service Mesh
@@ -306,6 +307,7 @@ Available Commands:
kube-image-prefetch Install kube-image-prefetch
kube-state-metrics Install kube-state-metrics
kubernetes-dashboard Install kubernetes-dashboard
kyverno Install Kyverno
linkerd Install linkerd
loki Install Loki for monitoring and tracing
metrics-server Install metrics-server
@@ -322,10 +324,10 @@ Available Commands:
osm Install osm
portainer Install portainer to visualise and manage containers
postgresql Install postgresql
rabbitmq Install rabbitmq
redis Install redis
registry-creds Install registry-creds
sealed-secrets Install sealed-secrets
rabbitmq Install rabbitmq
tekton Install Tekton pipelines and dashboard
traefik2 Install traefik2
```

141
cmd/apps/cassandra_app.go Normal file
View File

@@ -0,0 +1,141 @@
// Copyright (c) arkade author(s) 2020. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
package apps
import (
"fmt"
"github.com/alexellis/arkade/pkg"
"github.com/alexellis/arkade/pkg/apps"
"github.com/alexellis/arkade/pkg/k8s"
"github.com/alexellis/arkade/pkg/types"
"github.com/spf13/cobra"
)
func MakeInstallCassandra() *cobra.Command {
var cassandra = &cobra.Command{
Use: "cassandra",
Short: "Install cassandra",
Long: "Install cassandra",
Example: "arkade install cassandra",
SilenceUsage: true,
}
cassandra.Flags().StringP("namespace", "n", "cassandra", "The namespace to install cassandra")
cassandra.Flags().Bool("update-repo", true, "Update the helm repo")
cassandra.Flags().Bool("persistence", false, "Make cassandra persistent")
cassandra.Flags().StringArray("set", []string{},
"Use custom flags or override existing flags \n(example --set persistence.enabled=true)")
cassandra.PreRunE = func(command *cobra.Command, args []string) error {
_, err := command.Flags().GetString("kubeconfig")
if err != nil {
return fmt.Errorf("error with --kubeconfig usage: %s", err)
}
_, err = command.Flags().GetBool("wait")
if err != nil {
return fmt.Errorf("error with --wait usage: %s", err)
}
_, err = command.Flags().GetBool("persistence")
if err != nil {
return fmt.Errorf("error with --persistence usage: %s", err)
}
_, err = command.Flags().GetString("namespace")
if err != nil {
return fmt.Errorf("error with --namespace usage: %s", err)
}
_, err = command.Flags().GetBool("update-repo")
if err != nil {
return fmt.Errorf("error with --update-repo usage: %s", err)
}
_, err = command.Flags().GetStringArray("set")
if err != nil {
return fmt.Errorf("error with --set usage: %s", err)
}
arch := k8s.GetNodeArchitecture()
if arch != IntelArch {
return fmt.Errorf(OnlyIntelArch)
}
return nil
}
cassandra.RunE = func(command *cobra.Command, args []string) error {
// Get all flags
kubeConfigPath, _ := command.Flags().GetString("kubeconfig")
wait, _ := command.Flags().GetBool("wait")
persistence, _ := command.Flags().GetBool("persistence")
namespace, _ := command.Flags().GetString("namespace")
updateRepo, _ := command.Flags().GetBool("update-repo")
customFlags, _ := command.Flags().GetStringArray("set")
overrides := map[string]string{}
if persistence {
overrides["persistence.enabled"] = "true"
overrides["persistence.size"] = "2Gi"
}
// set custom flags
if err := mergeFlags(overrides, customFlags); err != nil {
return err
}
cassandraAppOptions := types.DefaultInstallOptions().
WithNamespace(namespace).
WithHelmRepo("bitnami/cassandra").
WithHelmURL("https://charts.bitnami.com/bitnami").
WithOverrides(overrides).
WithHelmUpdateRepo(updateRepo).
WithKubeconfigPath(kubeConfigPath).
WithWait(wait)
_, err := apps.MakeInstallChart(cassandraAppOptions)
if err != nil {
return err
}
fmt.Println(cassandraInstallMsg)
return nil
}
return cassandra
}
const CassandraInfoMsg = `
# By default the "cassandra" username is used
# To get your password run:
export CASSANDRA_PASSWORD=$(kubectl get secret --namespace "cassandra" cassandra -o jsonpath="{.data.cassandra-password}" | base64 --decode)
# Run a Cassandra pod that you can use as a client:
kubectl run --namespace cassandra cassandra-client --rm --tty -i --restart='Never' \
--env CASSANDRA_PASSWORD=$CASSANDRA_PASSWORD \
\
--image docker.io/bitnami/cassandra:3.11.10-debian-10-r149 -- bash
# Connect using the cqlsh client:
cqlsh -u cassandra -p $CASSANDRA_PASSWORD cassandra
# To connect to your database from outside the cluster execute the following commands:
kubectl port-forward --namespace cassandra svc/cassandra 9042:9042 &
cqlsh -u cassandra -p $CASSANDRA_PASSWORD 127.0.0.1 9042
# Enable persistence:
arkade install cassandra --persistence
`
var cassandraInstallMsg = `=======================================================================
= cassandra has been installed =
=======================================================================` +
"\n\n" + CassandraInfoMsg + "\n\n" + pkg.ThanksForUsing

View File

@@ -117,6 +117,7 @@ func GetApps() map[string]ArkadeApp {
arkadeApps["kafka"] = NewArkadeApp(apps.MakeInstallConfluentPlatformKafka, apps.KafkaInfoMsg)
arkadeApps["kyverno"] = NewArkadeApp(apps.MakeInstallKyverno, apps.KyvernoInfoMsg)
arkadeApps["rabbitmq"] = NewArkadeApp(apps.MakeInstallRabbitmq, apps.RabbitmqInfoMsg)
arkadeApps["cassandra"] = NewArkadeApp(apps.MakeInstallCassandra, apps.CassandraInfoMsg)
// Special "chart" app - let a user deploy any helm chart
arkadeApps["chart"] = NewArkadeApp(apps.MakeInstallChart, "")