operator/cmd/mesh/operator-common.go (89 lines of code) (raw):

// Copyright Istio Authors // // 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 mesh import ( "context" ) import ( v12 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" _ "k8s.io/client-go/plugin/pkg/client/auth" ) import ( "github.com/apache/dubbo-go-pixiu/operator/pkg/helm" "github.com/apache/dubbo-go-pixiu/operator/pkg/manifest" "github.com/apache/dubbo-go-pixiu/operator/pkg/name" "github.com/apache/dubbo-go-pixiu/operator/pkg/util" ) type operatorCommonArgs struct { // hub is the hub for the operator image. hub string // tag is the tag for the operator image. tag string // imagePullSecrets is an array of imagePullSecret to pull operator image from the private registry imagePullSecrets []string // operatorNamespace is the namespace the operator controller is installed into. operatorNamespace string // watchedNamespaces is the namespaces the operator controller watches, could be namespace list separated by comma. watchedNamespaces string // istioNamespace is deprecated, use watchedNamespaces instead. istioNamespace string // manifestsPath is a path to a charts and profiles directory in the local filesystem, or URL with a release tgz. manifestsPath string // revision is the Istio control plane revision the command targets. revision string // outputFormat controls the format of operator dumps outputFormat string } const ( operatorResourceName = "istio-operator" operatorDefaultNamespace = "istio-operator" istioDefaultNamespace = "dubbo-system" ) // isControllerInstalled reports whether an operator deployment exists in the given namespace. func isControllerInstalled(cs kubernetes.Interface, operatorNamespace string, revision string) (bool, error) { orn := operatorResourceName if revision != "" { orn += "-" + revision } return deploymentExists(cs, operatorNamespace, orn) } // renderOperatorManifest renders a manifest to install the operator with the given input arguments. func renderOperatorManifest(_ *RootArgs, ocArgs *operatorCommonArgs) (string, string, error) { // If manifestsPath is a URL, fetch and extract it and continue with the local filesystem path instead. installPackagePath, _, err := manifest.RewriteURLToLocalInstallPath(ocArgs.manifestsPath, "" /*profileOrPath*/, false /*skipValidation */) if err != nil { return "", "", err } r := helm.NewHelmRenderer(installPackagePath, "istio-operator", string(name.IstioOperatorComponentName), ocArgs.operatorNamespace, nil) if err := r.Run(); err != nil { return "", "", err } tmpl := ` istioNamespace: {{.IstioNamespace}} watchedNamespaces: {{.WatchedNamespaces}} hub: {{.Hub}} tag: {{.Tag}} {{- if .ImagePullSecrets }} imagePullSecrets: {{- range .ImagePullSecrets }} - {{ . }} {{- end }} {{- end }} revision: {{if .Revision }} {{.Revision}} {{else}} "" {{end}} ` tv := struct { IstioNamespace string WatchedNamespaces string Hub string Tag string ImagePullSecrets []string Revision string }{ IstioNamespace: ocArgs.istioNamespace, WatchedNamespaces: ocArgs.watchedNamespaces, Hub: ocArgs.hub, Tag: ocArgs.tag, ImagePullSecrets: ocArgs.imagePullSecrets, Revision: ocArgs.revision, } vals, err := util.RenderTemplate(tmpl, tv) if err != nil { return "", "", err } manifest, err := r.RenderManifest(vals) return vals, manifest, err } // deploymentExists returns true if the given deployment in the namespace exists. func deploymentExists(cs kubernetes.Interface, namespace, name string) (bool, error) { d, err := cs.AppsV1().Deployments(namespace).Get(context.TODO(), name, v12.GetOptions{}) if err != nil { return false, err } return d != nil, nil }