blob: bee59ba93bcd26b691e2976bbda888e7e25568f5 [file] [log] [blame]
// 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 env
import (
"encoding/json"
"fmt"
"os"
"path"
"path/filepath"
"runtime"
)
import (
"istio.io/pkg/log"
)
var (
// TARGET_OUT environment variable
// nolint: revive, stylecheck
TARGET_OUT Variable = "TARGET_OUT"
// LOCAL_OUT environment variable
// nolint: revive, stylecheck
LOCAL_OUT Variable = "LOCAL_OUT"
// REPO_ROOT environment variable
// nolint: revive, stylecheck
REPO_ROOT Variable = "REPO_ROOT"
// HUB is the Docker hub to be used for images.
// nolint: revive, stylecheck
HUB Variable = "HUB"
// TAG is the Docker tag to be used for images.
// nolint: revive, stylecheck
TAG Variable = "TAG"
// PULL_POLICY is the image pull policy to use when rendering templates.
// nolint: revive, stylecheck
PULL_POLICY Variable = "PULL_POLICY"
// KUBECONFIG is the list of Kubernetes configuration files. If configuration files are specified on
// the command-line, that takes precedence.
// nolint: revive, stylecheck
KUBECONFIG Variable = "KUBECONFIG"
// IstioSrc is the location of istio source ($TOP/src/istio.io/istio
IstioSrc = REPO_ROOT.ValueOrDefaultFunc(getDefaultIstioSrc)
// IstioOut is the location of the output directory ($TOP/out)
IstioOut = verifyFile(TARGET_OUT, TARGET_OUT.ValueOrDefaultFunc(getDefaultIstioOut))
// LocalOut is the location of the output directory for the OS we are running in,
// not necessarily the OS we are building for
LocalOut = verifyFile(LOCAL_OUT, LOCAL_OUT.ValueOrDefaultFunc(getDefaultIstioOut))
// OtelCollectorInstallFilePath is the OpenTelemetry installation file.
OtelCollectorInstallFilePath = path.Join(IstioSrc, getInstallationFile("opentelemetry/opentelemetry-collector.yaml"))
// StackdriverInstallFilePath is the stackdriver installation file.
StackdriverInstallFilePath = path.Join(IstioSrc, getInstallationFile("stackdriver/stackdriver.yaml"))
// GCEMetadataServerInstallFilePath is the GCE Metadata Server installation file.
GCEMetadataServerInstallFilePath = path.Join(IstioSrc, getInstallationFile("gcemetadata/gce_metadata_server.yaml"))
// ContainerRegistryServerInstallFilePath is the fake container registry installation file.
ContainerRegistryServerInstallFilePath = path.Join(IstioSrc, getInstallationFile("containerregistry/container_registry_server.yaml"))
)
var (
_, b, _, _ = runtime.Caller(0)
// Root folder of this project
// This relies on the fact this file is 3 levels up from the root; if this changes, adjust the path below
Root = filepath.Join(filepath.Dir(b), "../../..")
)
func getDefaultIstioSrc() string {
return Root
}
func getInstallationFile(p string) string {
return fmt.Sprintf("pkg/test/framework/components/%s", p)
}
func getDefaultIstioOut() string {
return fmt.Sprintf("%s/out/%s_%s", IstioSrc, runtime.GOOS, runtime.GOARCH)
}
func verifyFile(v Variable, f string) string {
if !fileExists(f) {
log.Warnf("unable to resolve %s. Dir %s does not exist", v, f)
return ""
}
return f
}
func fileExists(f string) bool {
return CheckFileExists(f) == nil
}
func CheckFileExists(path string) error {
if _, err := os.Stat(path); os.IsNotExist(err) {
return err
}
return nil
}
func ReadProxySHA() (string, error) {
type DepsFile struct {
Name string `json:"name"`
LastStableSHA string `json:"lastStableSHA"`
}
f := filepath.Join(IstioSrc, "istio.deps")
depJSON, err := os.ReadFile(f)
if err != nil {
return "", err
}
var deps []DepsFile
if err := json.Unmarshal(depJSON, &deps); err != nil {
return "", err
}
for _, d := range deps {
if d.Name == "PROXY_REPO_SHA" {
return d.LastStableSHA, nil
}
}
return "", fmt.Errorf("PROXY_REPO_SHA not found")
}