Skip to content

Commit

Permalink
Merge pull request #5 from ywhpy/main
Browse files Browse the repository at this point in the history
NINE-6 add tools uninstall and install
  • Loading branch information
nineinfra authored Dec 15, 2023
2 parents 86acc99 + c9144fd commit bb82e4e
Show file tree
Hide file tree
Showing 7 changed files with 162 additions and 104 deletions.
3 changes: 1 addition & 2 deletions cmd/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,7 @@ func GetKubeHost(path string) string {
if err != nil {
return ""
}

return config.Host
return GetIpFromKubeHost(config.Host)
}

func GetNineInfraClient(path string) (*nineinfrav1alpha1.Clientset, error) {
Expand Down
98 changes: 76 additions & 22 deletions cmd/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,18 @@ package cmd
import (
"bytes"
"context"
"errors"
"fmt"
cnpgv1 "github.com/cloudnative-pg/cloudnative-pg/api/v1"
"github.com/manifoldco/promptui"
nineinfrav1alpha1 "github.com/nineinfra/nineinfra/api/v1alpha1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/duration"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/tools/remotecommand"
"os"
"os/exec"
"regexp"
"strings"
Expand Down Expand Up @@ -44,6 +48,49 @@ func runCommand(command string, args ...string) (string, string, error) {
return output.String(), errput.String(), err
}

func runExecCommand(pdName string, namespace string, tty bool, cmd []string) error {
if DEBUG {
fmt.Printf("runExecCommand %s through pod %s in %s\n", cmd, pdName, namespace)
}
path, _ := rootCmd.Flags().GetString(kubeconfig)
client, config, err := GetKubeClientWithConfig(path)
if err != nil {
return err
}
execReq := client.CoreV1().RESTClient().Post().
Resource("pods").
Name(pdName).
Namespace(namespace).
SubResource("exec").
VersionedParams(&corev1.PodExecOptions{
Command: cmd,
Stdin: true,
Stdout: true,
Stderr: true,
TTY: tty}, scheme.ParameterCodec)
executor, err := remotecommand.NewSPDYExecutor(config, "POST", execReq.URL())
if err != nil {
return err
}

var stdout bytes.Buffer
var stderr bytes.Buffer

err = executor.StreamWithContext(context.TODO(), remotecommand.StreamOptions{
Stdin: os.Stdin,
Stdout: &stdout,
Stderr: &stderr,
Tty: tty,
})
if DEBUG {
fmt.Printf("runExecCommand command output:%s,command err:%s,exec err:%s\n", stdout.String(), stderr.String(), err.Error())
}
if err != nil {
return errors.New(stderr.String())
}
return nil
}

func CheckNineClusterExist(name string, namespace string) (bool, *nineinfrav1alpha1.NineClusterList) {
path, _ := rootCmd.Flags().GetString(kubeconfig)
nc, err := GetNineInfraClient(path)
Expand Down Expand Up @@ -126,7 +173,7 @@ func PrintStsReadyAndAge(name string, namespace string) (string, string) {
}
sts, err := client.AppsV1().StatefulSets(namespace).Get(context.TODO(), name, metav1.GetOptions{})
if err != nil {
if errors.IsNotFound(err) {
if k8serrors.IsNotFound(err) {
return "0/0", "0s"
} else {
return "", ""
Expand All @@ -136,23 +183,23 @@ func PrintStsReadyAndAge(name string, namespace string) (string, string) {
return fmt.Sprintf("%d/%d", sts.Status.ReadyReplicas, *sts.Spec.Replicas), fmt.Sprintf("%s", HumanDuration(sts.CreationTimestamp.Time))
}

func PrintDeployReadyAndAge(name string, namespace string) (string, string) {
path, _ := rootCmd.Flags().GetString(kubeconfig)
client, err := GetKubeClient(path)
if err != nil {
return "", ""
}
deploy, err := client.AppsV1().Deployments(namespace).Get(context.TODO(), name, metav1.GetOptions{})
if err != nil {
if errors.IsNotFound(err) {
return "0/0", "0s"
} else {
return "", ""
}
}

return fmt.Sprintf("%d/%d", deploy.Status.ReadyReplicas, *deploy.Spec.Replicas), fmt.Sprintf("%s", HumanDuration(deploy.CreationTimestamp.Time))
}
//func PrintDeployReadyAndAge(name string, namespace string) (string, string) {
// path, _ := rootCmd.Flags().GetString(kubeconfig)
// client, err := GetKubeClient(path)
// if err != nil {
// return "", ""
// }
// deploy, err := client.AppsV1().Deployments(namespace).Get(context.TODO(), name, metav1.GetOptions{})
// if err != nil {
// if k8serrors.IsNotFound(err) {
// return "0/0", "0s"
// } else {
// return "", ""
// }
// }
//
// return fmt.Sprintf("%d/%d", deploy.Status.ReadyReplicas, *deploy.Spec.Replicas), fmt.Sprintf("%s", HumanDuration(deploy.CreationTimestamp.Time))
//}

func IfPGReady(pg *cnpgv1.Cluster) bool {
return pg.Status.ReadyInstances == pg.Spec.Instances
Expand All @@ -179,7 +226,7 @@ func PrintPGClusterReadyAndAge(name string, namespace string) (string, string) {
}
pg, err := client.PostgresqlV1().Clusters(namespace).Get(context.TODO(), name, metav1.GetOptions{})
if err != nil {
if errors.IsNotFound(err) {
if k8serrors.IsNotFound(err) {
return "0/0", "0s"
} else {
return "", ""
Expand Down Expand Up @@ -234,6 +281,9 @@ func PrintClusterProjectList(name string, namespace string) {

func PrintClusterToolList(name string, namespace string) {
for k, v := range NineToolList {
if !CheckHelmReleaseExist(NineToolResourceName(k), namespace) {
continue
}
var readys = 0
var notreadys = 0
for s, w := range v.(map[string]string) {
Expand Down Expand Up @@ -292,6 +342,11 @@ func GiveSuggestionsByError(err error) string {
"Could you please submit an issue on GitHub to help me improve my knowledge base? Thank you!")
}

func GetIpFromKubeHost(host string) string {
re := regexp.MustCompile(`\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b`)
return re.FindString(host)
}

func GetSvcAccessInfo(svcName string, portName string, ns string) (string, int32) {
path, _ := rootCmd.Flags().GetString(kubeconfig)
client, config, err := GetKubeClientWithConfig(path)
Expand All @@ -313,8 +368,7 @@ func GetSvcAccessInfo(svcName string, portName string, ns string) (string, int32
}
}
case corev1.ServiceTypeNodePort:
re := regexp.MustCompile(`\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b`)
accessIP = re.FindString(config.Host)
accessIP = GetIpFromKubeHost(config.Host)
for _, v := range svc.Spec.Ports {
if v.Name == portName {
accessPort = v.NodePort
Expand Down
27 changes: 15 additions & 12 deletions cmd/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,14 @@ const (
DefaultPVCLabelKey = "v1.min.io/tenant"
DefaultNineSuffix = "-nine"
DefaultThriftPortName = "thrift-binary"
DefaultStorageClass = "directpv-min-io"
DefaultCMDHelm = "helm"
DefaultCMDDirectPV = "kubectl-directpv"
DefaultKyuubiUserName = "hive"
)
const (
DefaultPGRWSVCNameSuffix = DefaultNineSuffix + "-pg-rw"
DefaultToolsNamePrefix = "nineinfra-"
DefaultRedisSVCName = DefaultToolsNamePrefix + "redis-master"
DefaultRedisSVCName = DefaultToolsNamePrefix + "redis"
DefaultToolAirflowDBUser = "airflow"
DefaultToolAirflowDBPwd = "airflow"
DefaultToolAirflowDBName = "airflow"
Expand All @@ -25,14 +24,8 @@ const (
DefaultToolNifiName = "nifi"
DefaultToolZookeeperName = "zookeeper"
DefaultToolRedisName = "redis"
DefaultToolAirflowRepository = "172.18.123.24:30003/library/airflow"
DefaultToolAirflowTag = "2.7.3"
DefaultToolAirflowWebServerSecretKey = "2ae7138d1fc0859df4a2456dd0146785"
DefaultToolAirflowSvcType = "NodePort"
DefaultToolAirflowDiskSize = "20Gi"
DefaultToolSupersetSvcType = "NodePort"
DefaultToolNifiSvcType = "NodePort"
DefaultToolNifiSvcNodePort = 31333
DefaultToolNifiUserName = "admin"
DefaultToolNifiUserPWD = "nineinfraadmin"
DefaultZookeeperSVCName = DefaultToolsNamePrefix + "zookeeper-headless"
Expand All @@ -43,7 +36,17 @@ var (
DefaultToolSupersetSDataSourcesFile = "import_datasources.yaml"
)

var DEBUG = false
var (
DEBUG = false
DefaultToolNifiSvcNodePort = 31333
DefaultToolSupersetSvcType = "NodePort"
DefaultToolNifiSvcType = "NodePort"
DefaultToolAirflowSvcType = "NodePort"
DefaultToolAirflowRepository = "nineinfra/airflow"
DefaultToolAirflowTag = "2.7.3"
DefaultStorageClass = "directpv-min-io"
DefaultToolNifiSideCarTag = "1.36.1"
)

var DefaultChartList = map[string]string{
"cloudnative-pg": "0.19.1",
Expand Down Expand Up @@ -113,7 +116,7 @@ var NineToolNifiWorkloadList = map[string]string{
}

var NineToolRedisWorkloadList = map[string]string{
"redis-master": "statefulset",
"redis": "deployment",
}

var NineToolZookeeperWorkloadList = map[string]string{
Expand All @@ -124,15 +127,15 @@ var NineToolSvcList = map[string]string{
DefaultToolAirflowName: "airflow-webserver",
DefaultToolSupersetName: "superset",
DefaultToolNifiName: "nifi",
DefaultToolRedisName: "redis-master",
DefaultToolRedisName: "redis",
DefaultToolZookeeperName: "zookeeper",
}

var NineToolPortNameList = map[string]string{
DefaultToolAirflowName: "airflow-ui",
DefaultToolSupersetName: "http",
DefaultToolNifiName: "https",
DefaultToolRedisName: "tcp-redis",
DefaultToolRedisName: "redis",
DefaultToolZookeeperName: "tcp-client",
}

Expand Down
27 changes: 26 additions & 1 deletion cmd/helm.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,14 +89,39 @@ func HelmInstall(name string, repoName string, chart string, version string, nam
return nil
}

func HelmUnInstall(name string, repoName string, namespace string, flags string) error {
func HelmInstallWithParameters(name string, repoName string, chart string, version string, namespace string, parameters ...string) error {
if repoName == "" {
repoName = DefaultHelmRepoName
}
chart = repoName + "/" + chart
args := []string{"install", name, chart, "--version", version, "-n", namespace}
args = append(args, parameters...)
_, errput, err := runCommand("helm", args...)
if err != nil && !strings.Contains(errput, "in use") {
return err
}

fmt.Printf("Install %s successfully!\n", name)
return nil
}

func HelmUnInstall(name string, namespace string, flags string) error {
_, errput, err := runCommand("helm", "uninstall", name, "-n", namespace, flags)
if err != nil && !strings.Contains(errput, "not found") {
return err
}
fmt.Printf("Uninstall %s successfully!\n", name)
return nil
}

func CheckHelmReleaseExist(name string, namespace string) bool {
_, errput, err := runCommand("helm", "status", name, "-n", namespace)
if err != nil {
if !strings.Contains(errput, "not found") {
return false
} else {
return false
}
}
return true
}
Loading

0 comments on commit bb82e4e

Please sign in to comment.