Skip to content

Commit

Permalink
Add detecting higress installed by helm or not before install (#620)
Browse files Browse the repository at this point in the history
  • Loading branch information
2456868764 authored Nov 2, 2023
1 parent 3440356 commit 7b1f538
Show file tree
Hide file tree
Showing 8 changed files with 104 additions and 10 deletions.
8 changes: 3 additions & 5 deletions pkg/cmd/hgctl/helm/profile.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,15 @@ func (p ProfileGlobal) Validate(install InstallMode) []error {
}

type ProfileConsole struct {
Port uint32 `json:"port,omitempty"`
Replicas uint32 `json:"replicas,omitempty"`
AdminPasswordValue string `json:"adminPasswordValue,omitempty"`
O11yEnabled bool `json:"o11YEnabled,omitempty"`
Port uint32 `json:"port,omitempty"`
Replicas uint32 `json:"replicas,omitempty"`
O11yEnabled bool `json:"o11YEnabled,omitempty"`
}

func (p ProfileConsole) SetFlags(install InstallMode) ([]string, error) {
sets := make([]string, 0)
if install == InstallK8s || install == InstallLocalK8s {
sets = append(sets, fmt.Sprintf("higress-console.replicaCount=%d", p.Replicas))
sets = append(sets, fmt.Sprintf("higress-console.admin.password.value=%s", p.AdminPasswordValue))
sets = append(sets, fmt.Sprintf("higress-console.o11y.enabled=%t", p.O11yEnabled))
}
return sets, nil
Expand Down
93 changes: 93 additions & 0 deletions pkg/cmd/hgctl/installer/helm_agent.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
// Copyright (c) 2022 Alibaba Group Holding Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package installer

import (
"bytes"
"fmt"
"io"
"os/exec"
"strings"

"github.com/alibaba/higress/pkg/cmd/hgctl/helm"
"github.com/alibaba/higress/pkg/cmd/options"
)

type HelmRelease struct {
appVersion string `json:"app_version,omitempty"`
chart string `json:"chart,omitempty"`
name string `json:"name,omitempty"`
namespace string `json:"namespace,omitempty"`
revision string `json:"revision,omitempty"`
status string `json:"status,omitempty"`
updated string `json:"updated,omitempty"`
}

type HelmAgent struct {
profile *helm.Profile
writer io.Writer
helmBinaryName string
quiet bool
}

func NewHelmAgent(profile *helm.Profile, writer io.Writer, quiet bool) *HelmAgent {
return &HelmAgent{
profile: profile,
writer: writer,
helmBinaryName: "helm",
quiet: quiet,
}
}

func (h *HelmAgent) IsHigressInstalled() (bool, error) {
args := []string{"list", "-n", h.profile.Global.Namespace, "-f", "higress"}
if len(*options.DefaultConfigFlags.KubeConfig) > 0 {
args = append(args, fmt.Sprintf("--kubeconfig=%s", *options.DefaultConfigFlags.KubeConfig))
}
if len(*options.DefaultConfigFlags.Context) > 0 {
args = append(args, fmt.Sprintf("--kube-context=%s", *options.DefaultConfigFlags.Context))
}
if !h.quiet {
fmt.Fprintf(h.writer, "\n📦 Running command: %s %s\n\n", h.helmBinaryName, strings.Join(args, " "))
}
cmd := exec.Command(h.helmBinaryName, args...)
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr

if err := cmd.Start(); err != nil {
return false, nil
}

done := make(chan error, 1)
go func() {
done <- cmd.Wait()
}()

select {
case err := <-done:
if err == nil {
content := out.String()
if !h.quiet {
fmt.Fprintf(h.writer, "\n%s\n", content)
}
if strings.Contains(content, "deployed") {
return true, nil
}
}
}
return false, nil
}
8 changes: 8 additions & 0 deletions pkg/cmd/hgctl/installer/installer_k8s.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,14 @@ type K8sInstaller struct {
}

func (o *K8sInstaller) Install() error {
// check if higress is installed by helm
fmt.Fprintf(o.writer, "\n⌛️ Detecting higress installed by helm or not... \n\n")
helmAgent := NewHelmAgent(o.profile, o.writer, false)
if helmInstalled, _ := helmAgent.IsHigressInstalled(); helmInstalled {
fmt.Fprintf(o.writer, "\n🧐 You have already installed higress by helm, please use \"helm upgrade\" to upgrade higress!\n")
return nil
}

if _, err := GetProfileInstalledPath(); err != nil {
return err
}
Expand Down
1 change: 0 additions & 1 deletion pkg/cmd/hgctl/installer/standalone_agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ func (a *Agent) profileArgs() []string {
fmt.Sprintf("--nacos-password=%s", a.profile.Storage.Password),
fmt.Sprintf("--nacos-username=%s", a.profile.Storage.Username),
fmt.Sprintf("--data-enc-key=%s", a.profile.Storage.DataEncKey),
fmt.Sprintf("--console-password=%s", a.profile.Console.AdminPasswordValue),
fmt.Sprintf("--console-port=%d", a.profile.Console.Port),
fmt.Sprintf("--gateway-http-port=%d", a.profile.Gateway.HttpPort),
fmt.Sprintf("--gateway-https-port=%d", a.profile.Gateway.HttpsPort),
Expand Down
1 change: 0 additions & 1 deletion pkg/cmd/hgctl/manifests/profiles/_all.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ global:
console:
port: 8080
replicas: 1
adminPasswordValue: admin
o11yEnabled: false

gateway:
Expand Down
1 change: 0 additions & 1 deletion pkg/cmd/hgctl/manifests/profiles/k8s.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ global:

console:
replicas: 1
adminPasswordValue: admin
o11yEnabled: false

gateway:
Expand Down
1 change: 0 additions & 1 deletion pkg/cmd/hgctl/manifests/profiles/local-docker.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ global:

console:
port: 8080
adminPasswordValue: admin

gateway:
httpPort: 80
Expand Down
1 change: 0 additions & 1 deletion pkg/cmd/hgctl/manifests/profiles/local-k8s.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ global:

console:
replicas: 1
adminPasswordValue: admin
o11yEnabled: true

gateway:
Expand Down

0 comments on commit 7b1f538

Please sign in to comment.