github.com/apache/incubator-kie-tools/packages/kn-plugin-workflow@v0.28.1-0.20240311201729-34c6856b157f/pkg/common/kubectl.go (about)

     1  /*
     2   * Licensed to the Apache Software Foundation (ASF) under one
     3   * or more contributor license agreements.  See the NOTICE file
     4   * distributed with this work for additional information
     5   * regarding copyright ownership.  The ASF licenses this file
     6   * to you under the Apache License, Version 2.0 (the
     7   * "License"); you may not use this file except in compliance
     8   * with the License.  You may obtain a copy of the License at
     9   * 
    10   *  http://www.apache.org/licenses/LICENSE-2.0
    11   * 
    12   * Unless required by applicable law or agreed to in writing,
    13   * software distributed under the License is distributed on an
    14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    15   * KIND, either express or implied.  See the License for the
    16   * specific language governing permissions and limitations
    17   * under the License. 
    18   */
    19  
    20  package common
    21  
    22  import (
    23  	"fmt"
    24  	"os/exec"
    25  	"strings"
    26  )
    27  
    28  func GetKubectlNamespace() (string, error) {
    29  	fmt.Println("🔎 Checking current namespace in kubectl...")
    30  	cmd := ExecCommand("kubectl", "config", "view", "--minify", "--output", "jsonpath={..namespace}")
    31  	output, err := cmd.Output()
    32  	if err != nil {
    33  		return "", fmt.Errorf("❌ ERROR: Failed to get current kubectl namespace: %w", err)
    34  	}
    35  	namespace := strings.TrimSpace(string(output))
    36  	if namespace == "" {
    37  		return "", fmt.Errorf("❌ ERROR: No current kubectl namespace found")
    38  	}
    39  	fmt.Printf(" - ✅  kubectl current namespace: %s\n", namespace)
    40  	return namespace, nil
    41  }
    42  
    43  func CheckKubectlContext() (string, error) {
    44  	fmt.Println("🔎 Checking if kubectl has a context configured...")
    45  	cmd := ExecCommand("kubectl", "config", "current-context")
    46  	output, err := cmd.Output()
    47  	if err != nil {
    48  		return "", fmt.Errorf("❌ ERROR: No current kubectl context found %w", err)
    49  	}
    50  	context := strings.TrimSpace(string(output))
    51  	if context == "" {
    52  		return "", fmt.Errorf("❌ ERROR: No current kubectl context found")
    53  	}
    54  	fmt.Printf(" - ✅ kubectl current context: %s \n", context)
    55  	return context, nil
    56  }
    57  
    58  func CheckKubectl() error {
    59  	fmt.Println("🔎 Checking if kubectl is available...")
    60  	_, kubectlCheck := exec.LookPath("kubectl")
    61  	if err := kubectlCheck; err != nil {
    62  		fmt.Println("ERROR: kubectl not found")
    63  		fmt.Println("kubectl is required for deploy")
    64  		fmt.Println("Download it from https://kubectl.docs.kubernetes.io/installation/kubectl/")
    65  		return fmt.Errorf("❌ ERROR: kubectl not found %w", err)
    66  	}
    67  
    68  	fmt.Println(" - ✅ kubectl is available")
    69  	return nil
    70  }