Merge branch 'master' of github.com:kubernetes/minikube into anders-qemu2
commit
5b39a46773
|
@ -12,7 +12,7 @@ on:
|
|||
- "!deploy/iso/**"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18'
|
||||
GO_VERSION: '1.18.1'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ on:
|
|||
- master
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18'
|
||||
GO_VERSION: '1.18.1'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
@ -29,7 +29,7 @@ jobs:
|
|||
echo "::set-output name=changes::$c"
|
||||
- name: Create PR
|
||||
if: ${{ steps.gendocs.outputs.changes != '' }}
|
||||
uses: peter-evans/create-pull-request@d6d5519d05f5814158ef015b8448f2f74648c421
|
||||
uses: peter-evans/create-pull-request@bd72e1b7922d417764d27d30768117ad7da78a0e
|
||||
with:
|
||||
token: ${{ secrets.MINIKUBE_BOT_PAT }}
|
||||
commit-message: Update auto-generated docs and translations
|
||||
|
|
|
@ -21,7 +21,7 @@ on:
|
|||
- deleted
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18'
|
||||
GO_VERSION: '1.18.1'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
|
|
@ -7,7 +7,7 @@ on:
|
|||
release:
|
||||
types: [published]
|
||||
env:
|
||||
GO_VERSION: '1.18'
|
||||
GO_VERSION: '1.18.1'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
@ -32,7 +32,7 @@ jobs:
|
|||
GITHUB_TOKEN: ${{ secrets.MINIKUBE_BOT_PAT }}
|
||||
- name: Create PR
|
||||
if: ${{ steps.leaderboard.outputs.changes != '' }}
|
||||
uses: peter-evans/create-pull-request@d6d5519d05f5814158ef015b8448f2f74648c421
|
||||
uses: peter-evans/create-pull-request@bd72e1b7922d417764d27d30768117ad7da78a0e
|
||||
with:
|
||||
token: ${{ secrets.MINIKUBE_BOT_PAT }}
|
||||
commit-message: Update leaderboard
|
||||
|
|
|
@ -14,7 +14,7 @@ on:
|
|||
- "!deploy/iso/**"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18'
|
||||
GO_VERSION: '1.18.1'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ on:
|
|||
- "!deploy/iso/**"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18'
|
||||
GO_VERSION: '1.18.1'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ on:
|
|||
- cron: "0 2,14 * * *"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18'
|
||||
GO_VERSION: '1.18.1'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ on:
|
|||
types: [released]
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18'
|
||||
GO_VERSION: '1.18.1'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
@ -26,7 +26,7 @@ jobs:
|
|||
./hack/benchmark/time-to-k8s/time-to-k8s.sh
|
||||
echo "::set-output name=version::$(minikube version --short)"
|
||||
- name: Create PR
|
||||
uses: peter-evans/create-pull-request@d6d5519d05f5814158ef015b8448f2f74648c421
|
||||
uses: peter-evans/create-pull-request@bd72e1b7922d417764d27d30768117ad7da78a0e
|
||||
with:
|
||||
token: ${{ secrets.MINIKUBE_BOT_PAT }}
|
||||
commit-message: add time-to-k8s benchmark for ${{ steps.timeToK8sBenchmark.outputs.version }}
|
||||
|
|
|
@ -6,7 +6,7 @@ on:
|
|||
- "translations/**"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18'
|
||||
GO_VERSION: '1.18.1'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ on:
|
|||
- cron: "0 9 * * 1"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18'
|
||||
GO_VERSION: '1.18.1'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
@ -26,7 +26,7 @@ jobs:
|
|||
echo "::set-output name=changes::$(git status --porcelain)"
|
||||
- name: Create PR
|
||||
if: ${{ steps.bumpGolang.outputs.changes != '' }}
|
||||
uses: peter-evans/create-pull-request@d6d5519d05f5814158ef015b8448f2f74648c421
|
||||
uses: peter-evans/create-pull-request@bd72e1b7922d417764d27d30768117ad7da78a0e
|
||||
with:
|
||||
token: ${{ secrets.MINIKUBE_BOT_PAT }}
|
||||
commit-message: bump golang versions
|
||||
|
|
|
@ -6,7 +6,7 @@ on:
|
|||
- cron: "0 10 * * 1"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18'
|
||||
GO_VERSION: '1.18.1'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
@ -26,7 +26,7 @@ jobs:
|
|||
echo "::set-output name=changes::$(git status --porcelain)"
|
||||
- name: Create PR
|
||||
if: ${{ steps.bumpGolint.outputs.changes != '' }}
|
||||
uses: peter-evans/create-pull-request@d6d5519d05f5814158ef015b8448f2f74648c421
|
||||
uses: peter-evans/create-pull-request@bd72e1b7922d417764d27d30768117ad7da78a0e
|
||||
with:
|
||||
token: ${{ secrets.MINIKUBE_BOT_PAT }}
|
||||
commit-message: bump golint versions
|
||||
|
|
|
@ -6,7 +6,7 @@ on:
|
|||
- cron: "0 8 * * 1"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18'
|
||||
GO_VERSION: '1.18.1'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
@ -31,7 +31,7 @@ jobs:
|
|||
echo "::set-output name=changes::$c"
|
||||
- name: Create PR
|
||||
if: ${{ steps.bumpk8s.outputs.changes != '' }}
|
||||
uses: peter-evans/create-pull-request@d6d5519d05f5814158ef015b8448f2f74648c421
|
||||
uses: peter-evans/create-pull-request@bd72e1b7922d417764d27d30768117ad7da78a0e
|
||||
with:
|
||||
token: ${{ secrets.MINIKUBE_BOT_PAT }}
|
||||
commit-message: bump default/newest kubernetes versions
|
||||
|
|
|
@ -6,7 +6,7 @@ on:
|
|||
- cron: "0 6 * * 1"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18'
|
||||
GO_VERSION: '1.18.1'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
@ -29,7 +29,7 @@ jobs:
|
|||
echo "::set-output name=changes::$c"
|
||||
- name: Create PR
|
||||
if: ${{ steps.bumpKubAdmConsts.outputs.changes != '' }}
|
||||
uses: peter-evans/create-pull-request@d6d5519d05f5814158ef015b8448f2f74648c421
|
||||
uses: peter-evans/create-pull-request@bd72e1b7922d417764d27d30768117ad7da78a0e
|
||||
with:
|
||||
token: ${{ secrets.MINIKUBE_BOT_PAT }}
|
||||
commit-message: update image constants for kubeadm images
|
||||
|
|
|
@ -50,3 +50,6 @@ test/integration/testdata/minikube-linux-amd64-latest-stable
|
|||
/site/resources
|
||||
/_gen
|
||||
|
||||
# Qt
|
||||
*.pro.user
|
||||
*build-*
|
||||
|
|
8
Makefile
8
Makefile
|
@ -23,7 +23,7 @@ KUBERNETES_VERSION ?= $(shell egrep "DefaultKubernetesVersion =" pkg/minikube/co
|
|||
KIC_VERSION ?= $(shell egrep "Version =" pkg/drivers/kic/types.go | cut -d \" -f2)
|
||||
|
||||
# Default to .0 for higher cache hit rates, as build increments typically don't require new ISO versions
|
||||
ISO_VERSION ?= v1.25.2-1648512003-13860
|
||||
ISO_VERSION ?= v1.25.2-1650391217-13814
|
||||
# Dashes are valid in semver, but not Linux packaging. Use ~ to delimit alpha/beta
|
||||
DEB_VERSION ?= $(subst -,~,$(RAW_VERSION))
|
||||
DEB_REVISION ?= 0
|
||||
|
@ -33,7 +33,7 @@ RPM_REVISION ?= 0
|
|||
|
||||
# used by hack/jenkins/release_build_and_upload.sh and KVM_BUILD_IMAGE, see also BUILD_IMAGE below
|
||||
# update this only by running `make update-golang-version`
|
||||
GO_VERSION ?= 1.18
|
||||
GO_VERSION ?= 1.18.1
|
||||
# update this only by running `make update-golang-version`
|
||||
GO_K8S_VERSION_PREFIX ?= v1.24.0
|
||||
|
||||
|
@ -42,7 +42,7 @@ KVM_GO_VERSION ?= $(GO_VERSION:.0=)
|
|||
|
||||
|
||||
INSTALL_SIZE ?= $(shell du out/minikube-windows-amd64.exe | cut -f1)
|
||||
BUILDROOT_BRANCH ?= 2021.02.4
|
||||
BUILDROOT_BRANCH ?= 2021.02.12
|
||||
# the go version on the line below is for the ISO and does not need to be updated often
|
||||
GOLANG_OPTIONS = GO_VERSION=1.17 GO_HASH_FILE=$(PWD)/deploy/iso/minikube-iso/go.hash
|
||||
BUILDROOT_OPTIONS = BR2_EXTERNAL=../../deploy/iso/minikube-iso $(GOLANG_OPTIONS)
|
||||
|
@ -73,7 +73,7 @@ MINIKUBE_BUCKET ?= minikube/releases
|
|||
MINIKUBE_UPLOAD_LOCATION := gs://${MINIKUBE_BUCKET}
|
||||
MINIKUBE_RELEASES_URL=https://github.com/kubernetes/minikube/releases/download
|
||||
|
||||
KERNEL_VERSION ?= 4.19.202
|
||||
KERNEL_VERSION ?= 4.19.235
|
||||
# latest from https://github.com/golangci/golangci-lint/releases
|
||||
# update this only by running `make update-golint-version`
|
||||
GOLINT_VERSION ?= v1.45.2
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
[![Actions Status](https://github.com/kubernetes/minikube/workflows/build/badge.svg)](https://github.com/kubernetes/minikube/actions)
|
||||
[![GoReport Widget]][GoReport Status]
|
||||
[![Github All Releases](https://img.shields.io/github/downloads/kubernetes/minikube/total.svg)](https://github.com/kubernetes/minikube/releases/latest)
|
||||
[![GitHub All Releases](https://img.shields.io/github/downloads/kubernetes/minikube/total.svg)](https://github.com/kubernetes/minikube/releases/latest)
|
||||
[![Latest Release](https://img.shields.io/github/v/release/kubernetes/minikube?include_prereleases)](https://github.com/kubernetes/minikube/releases/latest)
|
||||
|
||||
|
||||
|
|
|
@ -38,8 +38,8 @@ const allFlag = "all"
|
|||
// cacheCmd represents the cache command
|
||||
var cacheCmd = &cobra.Command{
|
||||
Use: "cache",
|
||||
Short: "Add, delete, or push a local image into minikube",
|
||||
Long: "Add, delete, or push a local image into minikube",
|
||||
Short: "Manage cache for images",
|
||||
Long: "Add an image into minikube as a local cache, or delete, reload the cached images",
|
||||
}
|
||||
|
||||
// addCacheCmd represents the cache add command
|
||||
|
|
|
@ -163,6 +163,10 @@ var settings = []Setting{
|
|||
name: "native-ssh",
|
||||
set: SetBool,
|
||||
},
|
||||
{
|
||||
name: config.Rootless,
|
||||
set: SetBool,
|
||||
},
|
||||
}
|
||||
|
||||
// ConfigCmd represents the config command
|
||||
|
|
|
@ -66,29 +66,18 @@ func TestSetOK(t *testing.T) {
|
|||
|
||||
func createTestConfig(t *testing.T) {
|
||||
t.Helper()
|
||||
td, err := os.MkdirTemp("", "config")
|
||||
if err != nil {
|
||||
t.Fatalf("tempdir: %v", err)
|
||||
}
|
||||
td := t.TempDir()
|
||||
|
||||
err = os.Setenv(localpath.MinikubeHome, td)
|
||||
if err != nil {
|
||||
if err := os.Setenv(localpath.MinikubeHome, td); err != nil {
|
||||
t.Fatalf("error setting up test environment. could not set %s due to %+v", localpath.MinikubeHome, err)
|
||||
}
|
||||
|
||||
// Not necessary, but it is a handy random alphanumeric
|
||||
if err = os.MkdirAll(localpath.MakeMiniPath("config"), 0777); err != nil {
|
||||
if err := os.MkdirAll(localpath.MakeMiniPath("config"), 0777); err != nil {
|
||||
t.Fatalf("error creating temporary directory: %+v", err)
|
||||
}
|
||||
|
||||
if err = os.MkdirAll(localpath.MakeMiniPath("profiles"), 0777); err != nil {
|
||||
if err := os.MkdirAll(localpath.MakeMiniPath("profiles"), 0777); err != nil {
|
||||
t.Fatalf("error creating temporary profiles directory: %+v", err)
|
||||
}
|
||||
|
||||
t.Cleanup(func() {
|
||||
err := os.RemoveAll(td)
|
||||
if err != nil {
|
||||
t.Errorf("failed to clean up temp folder %q", td)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
@ -110,6 +110,7 @@ var hostAndDirsDeleter = func(api libmachine.API, cc *config.ClusterConfig, prof
|
|||
func init() {
|
||||
deleteCmd.Flags().BoolVar(&deleteAll, "all", false, "Set flag to delete all profiles")
|
||||
deleteCmd.Flags().BoolVar(&purge, "purge", false, "Set this flag to delete the '.minikube' folder from your user directory.")
|
||||
deleteCmd.Flags().StringVarP(&outputFormat, "output", "o", "text", "Format to print stdout in. Options include: [text,json]")
|
||||
|
||||
if err := viper.BindPFlags(deleteCmd.Flags()); err != nil {
|
||||
exit.Error(reason.InternalBindFlags, "unable to bind flags", err)
|
||||
|
@ -206,7 +207,7 @@ func runDelete(cmd *cobra.Command, args []string) {
|
|||
if len(args) > 0 {
|
||||
exit.Message(reason.Usage, "Usage: minikube delete")
|
||||
}
|
||||
// register.SetEventLogPath(localpath.EventLog(ClusterFlagValue()))
|
||||
out.SetJSON(outputFormat == "json")
|
||||
register.Reg.SetStep(register.Deleting)
|
||||
download.CleanUpOlderPreloads()
|
||||
validProfiles, invalidProfiles, err := config.ListProfiles()
|
||||
|
@ -287,6 +288,7 @@ func purgeMinikubeDirectory() {
|
|||
if err := os.RemoveAll(localpath.MiniPath()); err != nil {
|
||||
exit.Error(reason.HostPurge, "unable to delete minikube config folder", err)
|
||||
}
|
||||
register.Reg.SetStep(register.Purging)
|
||||
out.Step(style.Deleted, "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]", out.V{"minikubeDirectory": localpath.MiniPath()})
|
||||
}
|
||||
|
||||
|
@ -332,7 +334,7 @@ func deleteProfile(ctx context.Context, profile *config.Profile) error {
|
|||
if err := unpauseIfNeeded(profile); err != nil {
|
||||
klog.Warningf("failed to unpause %s : %v", profile.Name, err)
|
||||
}
|
||||
out.Step(style.DeletingHost, `Deleting "{{.profile_name}}" in {{.driver_name}} ...`, out.V{"profile_name": profile.Name, "driver_name": profile.Config.Driver})
|
||||
out.Styled(style.DeletingHost, `Deleting "{{.profile_name}}" in {{.driver_name}} ...`, out.V{"profile_name": profile.Name, "driver_name": profile.Config.Driver})
|
||||
for _, n := range profile.Config.Nodes {
|
||||
machineName := config.MachineName(*profile.Config, n)
|
||||
delete.PossibleLeftOvers(ctx, machineName, profile.Config.Driver)
|
||||
|
@ -371,7 +373,7 @@ func deleteProfile(ctx context.Context, profile *config.Profile) error {
|
|||
return err
|
||||
}
|
||||
|
||||
out.Step(style.Deleted, `Removed all traces of the "{{.name}}" cluster.`, out.V{"name": profile.Name})
|
||||
out.Styled(style.Deleted, `Removed all traces of the "{{.name}}" cluster.`, out.V{"name": profile.Name})
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -461,7 +463,7 @@ func deleteContext(machineName string) error {
|
|||
}
|
||||
|
||||
func deleteInvalidProfile(profile *config.Profile) []error {
|
||||
out.Step(style.DeletingHost, "Trying to delete invalid profile {{.profile}}", out.V{"profile": profile.Name})
|
||||
out.Styled(style.DeletingHost, "Trying to delete invalid profile {{.profile}}", out.V{"profile": profile.Name})
|
||||
|
||||
var errs []error
|
||||
pathToProfile := config.ProfileFolderPath(profile.Name, localpath.MiniPath())
|
||||
|
@ -487,7 +489,7 @@ func profileDeletionErr(cname string, additionalInfo string) error {
|
|||
}
|
||||
|
||||
func uninstallKubernetes(api libmachine.API, cc config.ClusterConfig, n config.Node, bsName string) error {
|
||||
out.Step(style.Resetting, "Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...", out.V{"kubernetes_version": cc.KubernetesConfig.KubernetesVersion, "bootstrapper_name": bsName})
|
||||
out.Styled(style.Resetting, "Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...", out.V{"kubernetes_version": cc.KubernetesConfig.KubernetesVersion, "bootstrapper_name": bsName})
|
||||
host, err := machine.LoadHost(api, config.MachineName(cc, n))
|
||||
if err != nil {
|
||||
return DeletionError{Err: fmt.Errorf("unable to load host: %v", err), Errtype: MissingCluster}
|
||||
|
@ -565,7 +567,7 @@ func handleMultipleDeletionErrors(errors []error) {
|
|||
func deleteProfileDirectory(profile string) {
|
||||
machineDir := filepath.Join(localpath.MiniPath(), "machines", profile)
|
||||
if _, err := os.Stat(machineDir); err == nil {
|
||||
out.Step(style.DeletingHost, `Removing {{.directory}} ...`, out.V{"directory": machineDir})
|
||||
out.Styled(style.DeletingHost, `Removing {{.directory}} ...`, out.V{"directory": machineDir})
|
||||
err := os.RemoveAll(machineDir)
|
||||
if err != nil {
|
||||
exit.Error(reason.GuestProfileDeletion, "Unable to remove machine directory", err)
|
||||
|
|
|
@ -63,20 +63,9 @@ func fileNames(path string) ([]string, error) {
|
|||
}
|
||||
|
||||
func TestDeleteProfile(t *testing.T) {
|
||||
td, err := os.MkdirTemp("", "single")
|
||||
if err != nil {
|
||||
t.Fatalf("tempdir: %v", err)
|
||||
}
|
||||
td := t.TempDir()
|
||||
|
||||
t.Cleanup(func() {
|
||||
err := os.RemoveAll(td)
|
||||
if err != nil {
|
||||
t.Errorf("failed to clean up temp folder %q", td)
|
||||
}
|
||||
})
|
||||
|
||||
err = copy.Copy("../../../pkg/minikube/config/testdata/delete-single", td)
|
||||
if err != nil {
|
||||
if err := copy.Copy("../../../pkg/minikube/config/testdata/delete-single", td); err != nil {
|
||||
t.Fatalf("copy: %v", err)
|
||||
}
|
||||
|
||||
|
@ -97,8 +86,7 @@ func TestDeleteProfile(t *testing.T) {
|
|||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
err = os.Setenv(localpath.MinikubeHome, td)
|
||||
if err != nil {
|
||||
if err := os.Setenv(localpath.MinikubeHome, td); err != nil {
|
||||
t.Errorf("setenv: %v", err)
|
||||
}
|
||||
|
||||
|
@ -169,24 +157,13 @@ func deleteContextTest() error {
|
|||
}
|
||||
|
||||
func TestDeleteAllProfiles(t *testing.T) {
|
||||
td, err := os.MkdirTemp("", "all")
|
||||
if err != nil {
|
||||
t.Fatalf("tempdir: %v", err)
|
||||
}
|
||||
defer func() { // clean up tempdir
|
||||
err := os.RemoveAll(td)
|
||||
if err != nil {
|
||||
t.Errorf("failed to clean up temp folder %q", td)
|
||||
}
|
||||
}()
|
||||
td := t.TempDir()
|
||||
|
||||
err = copy.Copy("../../../pkg/minikube/config/testdata/delete-all", td)
|
||||
if err != nil {
|
||||
if err := copy.Copy("../../../pkg/minikube/config/testdata/delete-all", td); err != nil {
|
||||
t.Fatalf("copy: %v", err)
|
||||
}
|
||||
|
||||
err = os.Setenv(localpath.MinikubeHome, td)
|
||||
if err != nil {
|
||||
if err := os.Setenv(localpath.MinikubeHome, td); err != nil {
|
||||
t.Errorf("error setting up test environment. could not set %s", localpath.MinikubeHome)
|
||||
}
|
||||
|
||||
|
|
|
@ -26,15 +26,10 @@ import (
|
|||
)
|
||||
|
||||
func TestGenerateTestDocs(t *testing.T) {
|
||||
tempdir, err := os.MkdirTemp("", "")
|
||||
if err != nil {
|
||||
t.Fatalf("creating temp dir failed: %v", err)
|
||||
}
|
||||
defer os.RemoveAll(tempdir)
|
||||
tempdir := t.TempDir()
|
||||
docPath := filepath.Join(tempdir, "tests.md")
|
||||
|
||||
err = generate.TestDocs(docPath, "../../../test/integration")
|
||||
if err != nil {
|
||||
if err := generate.TestDocs(docPath, "../../../test/integration"); err != nil {
|
||||
t.Fatalf("error generating test docs: %v", err)
|
||||
}
|
||||
actualContents, err := os.ReadFile(docPath)
|
||||
|
|
|
@ -50,6 +50,8 @@ var (
|
|||
showProblems bool
|
||||
// fileOutput is where to write logs to. If omitted, writes to stdout.
|
||||
fileOutput string
|
||||
// auditLogs only shows the audit logs
|
||||
auditLogs bool
|
||||
)
|
||||
|
||||
// logsCmd represents the logs command
|
||||
|
@ -73,7 +75,13 @@ var logsCmd = &cobra.Command{
|
|||
exit.Error(reason.Usage, "Failed to create file", err)
|
||||
}
|
||||
}
|
||||
|
||||
if auditLogs {
|
||||
err := logs.OutputAudit(numberOfLines)
|
||||
if err != nil {
|
||||
klog.Errorf("failed to output audit logs: %v", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
logs.OutputOffline(numberOfLines, logOutput)
|
||||
|
||||
if shouldSilentFail() {
|
||||
|
@ -91,7 +99,6 @@ var logsCmd = &cobra.Command{
|
|||
if err != nil {
|
||||
exit.Error(reason.InternalNewRuntime, "Unable to get runtime", err)
|
||||
}
|
||||
|
||||
if followLogs {
|
||||
err := logs.Follow(cr, bs, *co.Config, co.CP.Runner, logOutput)
|
||||
if err != nil {
|
||||
|
@ -142,4 +149,5 @@ func init() {
|
|||
logsCmd.Flags().IntVarP(&numberOfLines, "length", "n", 60, "Number of lines back to go within the log")
|
||||
logsCmd.Flags().StringVar(&nodeName, "node", "", "The node to get logs from. Defaults to the primary control plane.")
|
||||
logsCmd.Flags().StringVar(&fileOutput, "file", "", "If present, writes to the provided file instead of stdout.")
|
||||
logsCmd.Flags().BoolVar(&auditLogs, "audit", false, "Show only the audit logs")
|
||||
}
|
||||
|
|
|
@ -72,6 +72,12 @@ var RootCmd = &cobra.Command{
|
|||
out.WarningT("User name '{{.username}}' is not valid", out.V{"username": userName})
|
||||
exit.Message(reason.Usage, "User name must be 60 chars or less.")
|
||||
}
|
||||
// viper maps $MINIKUBE_ROOTLESS to "rootless" property automatically, but it does not do vice versa,
|
||||
// so we map "rootless" property to $MINIKUBE_ROOTLESS expliclity here.
|
||||
// $MINIKUBE_ROOTLESS is referred by KIC runner, which is decoupled from viper.
|
||||
if viper.GetBool(config.Rootless) {
|
||||
os.Setenv(constants.MinikubeRootlessEnv, "true")
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -206,6 +212,7 @@ func init() {
|
|||
RootCmd.PersistentFlags().StringP(config.ProfileName, "p", constants.DefaultClusterName, `The name of the minikube VM being used. This can be set to allow having multiple instances of minikube independently.`)
|
||||
RootCmd.PersistentFlags().StringP(configCmd.Bootstrapper, "b", "kubeadm", "The name of the cluster bootstrapper that will set up the Kubernetes cluster.")
|
||||
RootCmd.PersistentFlags().String(config.UserFlag, "", "Specifies the user executing the operation. Useful for auditing operations executed by 3rd party tools. Defaults to the operating system username.")
|
||||
RootCmd.PersistentFlags().Bool(config.Rootless, false, "Force to use rootless driver (docker and podman driver only)")
|
||||
|
||||
groups := templates.CommandGroups{
|
||||
{
|
||||
|
|
|
@ -34,8 +34,7 @@ func runCommand(f func(*cobra.Command, []string)) {
|
|||
|
||||
func TestPreRunDirectories(t *testing.T) {
|
||||
// Make sure we create the required directories.
|
||||
tempDir := tests.MakeTempDir()
|
||||
defer tests.RemoveTempDir(tempDir)
|
||||
tests.MakeTempDir(t)
|
||||
|
||||
runCommand(RootCmd.PersistentPreRun)
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ import (
|
|||
|
||||
"github.com/Delta456/box-cli-maker/v2"
|
||||
"github.com/blang/semver/v4"
|
||||
"github.com/docker/go-connections/nat"
|
||||
"github.com/docker/machine/libmachine/ssh"
|
||||
"github.com/google/go-containerregistry/pkg/authn"
|
||||
"github.com/google/go-containerregistry/pkg/name"
|
||||
|
@ -941,7 +942,7 @@ func validateUser(drvName string) {
|
|||
return
|
||||
}
|
||||
|
||||
out.ErrT(style.Stopped, `The "{{.driver_name}}" driver should not be used with root privileges.`, out.V{"driver_name": drvName})
|
||||
out.ErrT(style.Stopped, `The "{{.driver_name}}" driver should not be used with root privileges. If you wish to continue as root, use --force.`, out.V{"driver_name": drvName})
|
||||
out.ErrT(style.Tip, "If you are running minikube within a VM, consider using --driver=none:")
|
||||
out.ErrT(style.Documentation, " {{.url}}", out.V{"url": "https://minikube.sigs.k8s.io/docs/reference/drivers/none/"})
|
||||
|
||||
|
@ -1246,26 +1247,22 @@ func validateFlags(cmd *cobra.Command, drvName string) {
|
|||
validateInsecureRegistry()
|
||||
}
|
||||
|
||||
// This function validates that the --ports are not below 1024 for the host and not outside range
|
||||
// validatePorts validates that the --ports are not below 1024 for the host and not outside range
|
||||
func validatePorts(ports []string) error {
|
||||
for _, portDuplet := range ports {
|
||||
parts := strings.Split(portDuplet, ":")
|
||||
if len(parts) > 2 {
|
||||
ip := parts[0]
|
||||
if net.ParseIP(ip) == nil {
|
||||
return errors.Errorf("Sorry, the IP address provided with --ports flag is invalid: %s", ip)
|
||||
}
|
||||
parts = parts[1:]
|
||||
}
|
||||
for i, port := range parts {
|
||||
p, err := strconv.Atoi(port)
|
||||
_, portBindingsMap, err := nat.ParsePortSpecs(ports)
|
||||
if err != nil {
|
||||
return errors.Errorf("Sorry, one of the ports provided with --ports flag is not valid %s (%v)", ports, err)
|
||||
}
|
||||
for _, portBindings := range portBindingsMap {
|
||||
for _, portBinding := range portBindings {
|
||||
p, err := strconv.Atoi(portBinding.HostPort)
|
||||
if err != nil {
|
||||
return errors.Errorf("Sorry, one of the ports provided with --ports flag is not valid %s", ports)
|
||||
}
|
||||
if p > 65535 || p < 1 {
|
||||
return errors.Errorf("Sorry, one of the ports provided with --ports flag is outside range %s", ports)
|
||||
}
|
||||
if detect.IsMicrosoftWSL() && p < 1024 && i == 0 {
|
||||
if detect.IsMicrosoftWSL() && p < 1024 {
|
||||
return errors.Errorf("Sorry, you cannot use privileged ports on the host (below 1024) %s", ports)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -555,12 +555,22 @@ func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, rtime str
|
|||
exit.Message(reason.Usage, "Ensure your {{.driver_name}} is running and is healthy.", out.V{"driver_name": driver.FullName(drvName)})
|
||||
}
|
||||
if si.Rootless {
|
||||
out.Styled(style.Notice, "Using rootless {{.driver_name}} driver", out.V{"driver_name": driver.FullName(drvName)})
|
||||
if cc.KubernetesConfig.ContainerRuntime == constants.Docker {
|
||||
exit.Message(reason.Usage, "--container-runtime must be set to \"containerd\" or \"cri-o\" for rootless")
|
||||
}
|
||||
// KubeletInUserNamespace feature gate is essential for rootless driver.
|
||||
// See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-in-userns/
|
||||
cc.KubernetesConfig.FeatureGates = addFeatureGate(cc.KubernetesConfig.FeatureGates, "KubeletInUserNamespace=true")
|
||||
} else {
|
||||
if oci.IsRootlessForced() {
|
||||
if driver.IsDocker(drvName) {
|
||||
exit.Message(reason.Usage, "Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .")
|
||||
} else {
|
||||
exit.Message(reason.Usage, "Using rootless driver was required, but the current driver does not seem rootless")
|
||||
}
|
||||
}
|
||||
out.Styled(style.Notice, "Using {{.driver_name}} driver with the root privilege", out.V{"driver_name": driver.FullName(drvName)})
|
||||
}
|
||||
if si.StorageDriver == "btrfs" {
|
||||
klog.Info("auto-setting LocalStorageCapacityIsolation to false because using btrfs storage driver")
|
||||
|
|
|
@ -462,40 +462,126 @@ func TestValidateRuntime(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestValidatePorts(t *testing.T) {
|
||||
isMicrosoftWSL := detect.IsMicrosoftWSL()
|
||||
type portTest struct {
|
||||
// isTarget indicates whether or not the test case is covered
|
||||
// because validatePorts behaves differently depending on whether process is running in WSL in windows or not.
|
||||
isTarget bool
|
||||
ports []string
|
||||
errorMsg string
|
||||
}
|
||||
var tests = []portTest{
|
||||
{
|
||||
ports: []string{"test:80"},
|
||||
errorMsg: "Sorry, one of the ports provided with --ports flag is not valid [test:80]",
|
||||
isTarget: true,
|
||||
ports: []string{"8080:80"},
|
||||
errorMsg: "",
|
||||
},
|
||||
{
|
||||
isTarget: true,
|
||||
ports: []string{"8080:80/tcp", "8080:80/udp"},
|
||||
errorMsg: "",
|
||||
},
|
||||
{
|
||||
isTarget: true,
|
||||
ports: []string{"test:8080"},
|
||||
errorMsg: "Sorry, one of the ports provided with --ports flag is not valid [test:8080] (Invalid hostPort: test)",
|
||||
},
|
||||
{
|
||||
isTarget: true,
|
||||
ports: []string{"0:80"},
|
||||
errorMsg: "Sorry, one of the ports provided with --ports flag is outside range [0:80]",
|
||||
},
|
||||
{
|
||||
ports: []string{"8080:80", "6443:443"},
|
||||
isTarget: true,
|
||||
ports: []string{"0:80/tcp"},
|
||||
errorMsg: "Sorry, one of the ports provided with --ports flag is outside range [0:80/tcp]",
|
||||
},
|
||||
{
|
||||
isTarget: true,
|
||||
ports: []string{"65536:80/udp"},
|
||||
errorMsg: "Sorry, one of the ports provided with --ports flag is not valid [65536:80/udp] (Invalid hostPort: 65536)",
|
||||
},
|
||||
{
|
||||
isTarget: true,
|
||||
ports: []string{"0-1:80-81/tcp"},
|
||||
errorMsg: "Sorry, one of the ports provided with --ports flag is outside range [0-1:80-81/tcp]",
|
||||
},
|
||||
{
|
||||
isTarget: true,
|
||||
ports: []string{"0-1:80-81/udp"},
|
||||
errorMsg: "Sorry, one of the ports provided with --ports flag is outside range [0-1:80-81/udp]",
|
||||
},
|
||||
{
|
||||
isTarget: !isMicrosoftWSL,
|
||||
ports: []string{"80:80", "1023-1025:8023-8025", "1023-1025:8023-8025/tcp", "1023-1025:8023-8025/udp"},
|
||||
errorMsg: "",
|
||||
},
|
||||
{
|
||||
ports: []string{"127.0.0.1:80:80"},
|
||||
errorMsg: "",
|
||||
},
|
||||
{
|
||||
ports: []string{"1000.0.0.1:80:80"},
|
||||
errorMsg: "Sorry, the IP address provided with --ports flag is invalid: 1000.0.0.1",
|
||||
},
|
||||
}
|
||||
if detect.IsMicrosoftWSL() {
|
||||
tests = append(tests, portTest{
|
||||
isTarget: isMicrosoftWSL,
|
||||
ports: []string{"80:80"},
|
||||
errorMsg: "Sorry, you cannot use privileged ports on the host (below 1024) [80:80]",
|
||||
})
|
||||
},
|
||||
{
|
||||
isTarget: isMicrosoftWSL,
|
||||
ports: []string{"1023-1025:8023-8025"},
|
||||
errorMsg: "Sorry, you cannot use privileged ports on the host (below 1024) [1023-1025:8023-8025]",
|
||||
},
|
||||
{
|
||||
isTarget: isMicrosoftWSL,
|
||||
ports: []string{"1023-1025:8023-8025/tcp"},
|
||||
errorMsg: "Sorry, you cannot use privileged ports on the host (below 1024) [1023-1025:8023-8025/tcp]",
|
||||
},
|
||||
{
|
||||
isTarget: isMicrosoftWSL,
|
||||
ports: []string{"1023-1025:8023-8025/udp"},
|
||||
errorMsg: "Sorry, you cannot use privileged ports on the host (below 1024) [1023-1025:8023-8025/udp]",
|
||||
},
|
||||
{
|
||||
isTarget: true,
|
||||
ports: []string{"127.0.0.1:8080:80", "127.0.0.1:8081:80/tcp", "127.0.0.1:8081:80/udp", "127.0.0.1:8082-8083:8082-8083/tcp"},
|
||||
errorMsg: "",
|
||||
},
|
||||
{
|
||||
isTarget: true,
|
||||
ports: []string{"1000.0.0.1:80:80"},
|
||||
errorMsg: "Sorry, one of the ports provided with --ports flag is not valid [1000.0.0.1:80:80] (Invalid ip address: 1000.0.0.1)",
|
||||
},
|
||||
{
|
||||
isTarget: !isMicrosoftWSL,
|
||||
ports: []string{"127.0.0.1:80:80", "127.0.0.1:81:81/tcp", "127.0.0.1:81:81/udp", "127.0.0.1:82-83:82-83/tcp", "127.0.0.1:82-83:82-83/udp"},
|
||||
errorMsg: "",
|
||||
},
|
||||
{
|
||||
isTarget: isMicrosoftWSL,
|
||||
ports: []string{"127.0.0.1:80:80"},
|
||||
errorMsg: "Sorry, you cannot use privileged ports on the host (below 1024) [127.0.0.1:80:80]",
|
||||
},
|
||||
{
|
||||
isTarget: isMicrosoftWSL,
|
||||
ports: []string{"127.0.0.1:81:81/tcp"},
|
||||
errorMsg: "Sorry, you cannot use privileged ports on the host (below 1024) [127.0.0.1:81:81/tcp]",
|
||||
},
|
||||
{
|
||||
isTarget: isMicrosoftWSL,
|
||||
ports: []string{"127.0.0.1:81:81/udp"},
|
||||
errorMsg: "Sorry, you cannot use privileged ports on the host (below 1024) [127.0.0.1:81:81/udp]",
|
||||
},
|
||||
{
|
||||
isTarget: isMicrosoftWSL,
|
||||
ports: []string{"127.0.0.1:80-83:80-83/tcp"},
|
||||
errorMsg: "Sorry, you cannot use privileged ports on the host (below 1024) [127.0.0.1:80-83:80-83/tcp]",
|
||||
},
|
||||
{
|
||||
isTarget: isMicrosoftWSL,
|
||||
ports: []string{"127.0.0.1:80-83:80-83/udp"},
|
||||
errorMsg: "Sorry, you cannot use privileged ports on the host (below 1024) [127.0.0.1:80-83:80-83/udp]",
|
||||
},
|
||||
}
|
||||
for _, test := range tests {
|
||||
t.Run(strings.Join(test.ports, ","), func(t *testing.T) {
|
||||
if !test.isTarget {
|
||||
return
|
||||
}
|
||||
gotError := ""
|
||||
got := validatePorts(test.ports)
|
||||
if got != nil {
|
||||
|
|
|
@ -229,7 +229,7 @@ func setFlags(parse bool) {
|
|||
|
||||
// setLastStartFlags sets the log_file flag to lastStart.txt if start command and user doesn't specify log_file or log_dir flags.
|
||||
func setLastStartFlags() {
|
||||
if len(os.Args) < 2 || os.Args[1] != "start" {
|
||||
if pflag.Arg(0) != "start" {
|
||||
return
|
||||
}
|
||||
if pflag.CommandLine.Changed("log_file") || pflag.CommandLine.Changed("log_dir") {
|
||||
|
|
|
@ -64,6 +64,11 @@ spec:
|
|||
value: /usr/local/nvidia
|
||||
- name: ROOT_MOUNT_DIR
|
||||
value: /root
|
||||
- name: NVIDIA_DRIVER_VERSION
|
||||
value: "510.60.02"
|
||||
# hack to not have to change https://github.com/GoogleCloudPlatform/container-engine-accelerators/blob/master/nvidia-driver-installer/minikube/entrypoint.sh
|
||||
command: ["/bin/sh"]
|
||||
args: ["-c", "sed -i 's|make modules_prepare|&;ln -s /root/lib/modules/${KERNEL_VERSION}/Module.symvers|' /entrypoint.sh;exec /entrypoint.sh"]
|
||||
volumeMounts:
|
||||
- name: nvidia-install-dir-host
|
||||
mountPath: /usr/local/nvidia
|
||||
|
|
|
@ -29,8 +29,6 @@ spec:
|
|||
metadata:
|
||||
labels:
|
||||
k8s-app: nvidia-gpu-device-plugin
|
||||
annotations:
|
||||
scheduler.alpha.kubernetes.io/critical-pod: ''
|
||||
spec:
|
||||
priorityClassName: system-node-critical
|
||||
tolerations:
|
||||
|
@ -42,9 +40,12 @@ spec:
|
|||
- name: device-plugin
|
||||
hostPath:
|
||||
path: /var/lib/kubelet/device-plugins
|
||||
- name: dev
|
||||
hostPath:
|
||||
path: /dev
|
||||
containers:
|
||||
- image: {{.CustomRegistries.NvidiaDevicePlugin | default .ImageRepository | default .Registries.NvidiaDevicePlugin }}{{.Images.NvidiaDevicePlugin}}
|
||||
command: ["/usr/bin/nvidia-device-plugin", "-logtostderr"]
|
||||
command: ["/usr/bin/nvidia-gpu-device-plugin", "-logtostderr"]
|
||||
name: nvidia-gpu-device-plugin
|
||||
resources:
|
||||
requests:
|
||||
|
@ -56,6 +57,8 @@ spec:
|
|||
drop: ["ALL"]
|
||||
volumeMounts:
|
||||
- name: device-plugin
|
||||
mountPath: /var/lib/kubelet/device-plugins
|
||||
mountPath: /device-plugin
|
||||
- name: dev
|
||||
mountPath: /dev
|
||||
updateStrategy:
|
||||
type: RollingUpdate
|
||||
|
|
|
@ -72,6 +72,7 @@ CONFIG_JUMP_LABEL=y
|
|||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_OSF_PARTITION=y
|
||||
CONFIG_AMIGA_PARTITION=y
|
||||
|
|
|
@ -117,3 +117,8 @@ Subsystem sftp /usr/libexec/sftp-server
|
|||
# AllowTcpForwarding no
|
||||
# PermitTTY no
|
||||
# ForceCommand cvs server
|
||||
|
||||
# Temporarily accept ssh-rsa algorithm for openssh >= 8.8,
|
||||
# until most ssh clients could deprecate ssh-rsa.
|
||||
HostkeyAlgorithms +ssh-rsa
|
||||
PubkeyAcceptedAlgorithms +ssh-rsa
|
||||
|
|
|
@ -31,7 +31,7 @@ BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y
|
|||
# Kernel
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.202"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.235"
|
||||
BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
|
||||
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
|
||||
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
include $(sort $(wildcard $(BR2_EXTERNAL_MINIKUBE_PATH)/linux/*.mk))
|
||||
include $(sort $(wildcard $(BR2_EXTERNAL_MINIKUBE_PATH)/package/*/*.mk))
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
LINUX_EXTENSIONS += install-module-symvers
|
||||
|
||||
define LINUX_MODULE_SYMVERS_INSTALL_FILE
|
||||
mkdir -p $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED)
|
||||
cp $(LINUX_DIR)/Module.symvers $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED)/
|
||||
endef
|
||||
LINUX_TARGET_FINALIZE_HOOKS += LINUX_MODULE_SYMVERS_INSTALL_FILE
|
|
@ -13,4 +13,4 @@ sha256 285a3f4c00a87538bd7d0a82a0a8a758458c02b925349f44f3189f480c326038 v1.4.6.t
|
|||
sha256 3bb9f54be022067847f5930d21ebbfe4e7a67f589d78930aa0ac713492c28bcc v1.4.9.tar.gz
|
||||
sha256 85a531725f15e2d136131119d42af4507a5389e0947015152075c4c93816fb5c v1.4.12.tar.gz
|
||||
sha256 7507913ba169c103ab67bc51bec31cd977d4348d7bc842da32b7eab5f930a14b v1.5.10.tar.gz
|
||||
sha256 6a289406c1c0583763e5a9754e31a1eced55cd5f162a7bc2a3a315d5eb05c7a1 v1.5.11.tar.gz
|
||||
sha256 02b79d5e2b07b5e64cd28f1fe84395ee11eef95fc49fd923a9ab93022b148be6 v1.5.11.tar.gz
|
||||
|
|
|
@ -5,8 +5,17 @@ sha256 b1c9884855d58be94a97b2e348bcdc7db995800f0405b0f4e9a7176ee2f094a7 0.21.0.t
|
|||
sha256 11890b1401c197c28ee0a70a364004f58f5ec5526365e9a283699a75e5662773 0.22.0.tar.gz
|
||||
sha256 ed991ffbece8f543f5dc6aa5a660ab1ed4bae771b6aa4930663a3902cc160ea3 0.23.0.tar.gz
|
||||
sha256 5703d724e0b2ce3b98208549ca9d1abdc9a0298a9abfd748b34863c0c4015dcf 0.24.0.tar.gz
|
||||
sha256 1fa9c05e461817aa2542efa3b5e28e51a6caf02935dfc9d47271af79d5414947 0.28.0.tar.gz
|
||||
sha256 9d90a86752a700dad2d1ea888b2cd33cdc808621faa2b6300bb0463d404744fb 0.30.0.tar.gz
|
||||
sha256 0c7d88bfa2ec8e17e6e27158fabfb1d05982ede3138138b44a0f3ac6ffba5545 0.31.0.tar.gz
|
||||
sha256 207b875c5b24717ecc9a5c288ff8df703d5d2a9ad00533f798d530e758f8ae42 0.31.1.tar.gz
|
||||
|
||||
# sysdig
|
||||
sha256 6e477ac5fe9d3110b870bd4495f01541373a008c375a1934a2d1c46798b6bad6 146a431edf95829ac11bfd9c85ba3ef08789bffe.tar.gz
|
||||
sha256 1c69363e4c36cdaeed413c2ef557af53bfc4bf1109fbcb6d6e18dc40fe6ddec8 be1ea2d9482d0e6e2cb14a0fd7e08cbecf517f94.tar.gz
|
||||
sha256 766e8952a36a4198fd976b9d848523e6abe4336612188e4fc911e217d8e8a00d 96bd9bc560f67742738eb7255aeb4d03046b8045.tar.gz
|
||||
sha256 6c3f5f2d699c9540e281f50cbc5cb6b580f0fc689798bc65d4a77f57f932a71c 85c88952b018fdbce2464222c3303229f5bfcfad.tar.gz
|
||||
sha256 9de717b3a4b611ea6df56afee05171860167112f74bb7717b394bcc88ac843cd 5c0b863ddade7a45568c0ac97d037422c9efb750.tar.gz
|
||||
# falcosecurity/libs
|
||||
sha256 2cf44f06a282e8cee7aa1f775a08ea94c06e275faaf0636b21eb06af28cf4b3f 319368f1ad778691164d33d59945e00c5752cd27.tar.gz
|
||||
sha256 0f6dcdc3b94243c91294698ee343806539af81c5b33c60c6acf83fc1aa455e85 b7eb0dd65226a8dc254d228c8d950d07bf3521d2.tar.gz
|
||||
|
|
|
@ -4,22 +4,22 @@
|
|||
#
|
||||
########################################################################
|
||||
|
||||
FALCO_MODULE_VERSION = 0.24.0
|
||||
FALCO_MODULE_VERSION = 0.31.1
|
||||
FALCO_MODULE_SITE = https://github.com/falcosecurity/falco/archive
|
||||
FALCO_MODULE_SOURCE = $(FALCO_MODULE_VERSION).tar.gz
|
||||
FALCO_MODULE_DEPENDENCIES += ncurses libyaml
|
||||
FALCO_MODULE_LICENSE = Apache-2.0
|
||||
FALCO_MODULE_LICENSE_FILES = COPYING
|
||||
|
||||
# see cmake/modules/sysdig-repo/CMakeLists.txt
|
||||
FALCO_MODULE_SYSDIG_VERSION = 85c88952b018fdbce2464222c3303229f5bfcfad
|
||||
FALCO_MODULE_EXTRA_DOWNLOADS = https://github.com/draios/sysdig/archive/${FALCO_MODULE_SYSDIG_VERSION}.tar.gz
|
||||
# see cmake/modules/falcosecurity-libs.cmake
|
||||
FALCO_MODULE_FALCOSECURITY_LIBS_VERSION = b7eb0dd65226a8dc254d228c8d950d07bf3521d2
|
||||
FALCO_MODULE_EXTRA_DOWNLOADS = https://github.com/falcosecurity/libs/archive/$(FALCO_MODULE_FALCOSECURITY_LIBS_VERSION).tar.gz
|
||||
|
||||
define FALCO_MODULE_SYSDIG_SRC
|
||||
sed -e 's|URL ".*"|URL "'$(FALCO_MODULE_DL_DIR)/$(FALCO_MODULE_SYSDIG_VERSION).tar.gz'"|' -i $(@D)/cmake/modules/sysdig-repo/CMakeLists.txt
|
||||
define FALCO_MODULE_FALCOSECURITY_LIBS_SRC
|
||||
sed -e 's|URL ".*"|URL "'$(FALCO_MODULE_DL_DIR)/$(FALCO_MODULE_FALCOSECURITY_LIBS_VERSION).tar.gz'"|' -i $(@D)/cmake/modules/falcosecurity-libs-repo/CMakeLists.txt
|
||||
endef
|
||||
|
||||
FALCO_MODULE_POST_EXTRACT_HOOKS += FALCO_MODULE_SYSDIG_SRC
|
||||
FALCO_MODULE_POST_EXTRACT_HOOKS += FALCO_MODULE_FALCOSECURITY_LIBS_SRC
|
||||
|
||||
FALCO_MODULE_CONF_OPTS = -DFALCO_VERSION=$(FALCO_MODULE_VERSION)
|
||||
FALCO_MODULE_CONF_OPTS += -DUSE_BUNDLED_DEPS=ON
|
||||
|
|
|
@ -19,7 +19,6 @@ package main
|
|||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
|
@ -40,7 +39,7 @@ func validateSchema(schemaPathString, docPathString string) {
|
|||
log.Fatal(err)
|
||||
}
|
||||
|
||||
data, err := ioutil.ReadFile(docPathString)
|
||||
data, err := os.ReadFile(docPathString)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
|
82
go.mod
82
go.mod
|
@ -3,34 +3,32 @@ module k8s.io/minikube
|
|||
go 1.18
|
||||
|
||||
require (
|
||||
cloud.google.com/go/storage v1.21.0
|
||||
contrib.go.opencensus.io/exporter/stackdriver v0.13.10
|
||||
cloud.google.com/go/storage v1.22.0
|
||||
contrib.go.opencensus.io/exporter/stackdriver v0.13.12
|
||||
github.com/Delta456/box-cli-maker/v2 v2.2.2
|
||||
github.com/GoogleCloudPlatform/docker-credential-gcr v0.0.0-20210713212222-faed5e8b8ca2
|
||||
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.3.0
|
||||
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.4.0
|
||||
github.com/Microsoft/hcsshim v0.8.17 // indirect
|
||||
github.com/Parallels/docker-machine-parallels/v2 v2.0.1
|
||||
github.com/VividCortex/godaemon v1.0.0
|
||||
github.com/blang/semver/v4 v4.0.0
|
||||
github.com/briandowns/spinner v1.11.1
|
||||
github.com/c4milo/gotoolkit v0.0.0-20190525173301-67483a18c17a // indirect
|
||||
github.com/cenkalti/backoff/v4 v4.1.2
|
||||
github.com/cenkalti/backoff/v4 v4.1.3
|
||||
github.com/cheggaaa/pb/v3 v3.0.8
|
||||
github.com/cloudevents/sdk-go/v2 v2.8.0
|
||||
github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21
|
||||
github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 // indirect
|
||||
github.com/cloudevents/sdk-go/v2 v2.9.0
|
||||
github.com/docker/docker v20.10.14+incompatible
|
||||
github.com/docker/go-units v0.4.0
|
||||
github.com/docker/machine v0.16.2
|
||||
github.com/elazarl/goproxy v0.0.0-20210110162100-a92cc753f88e
|
||||
github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3
|
||||
github.com/google/go-cmp v0.5.7
|
||||
github.com/google/go-cmp v0.5.8
|
||||
github.com/google/go-containerregistry v0.6.0
|
||||
github.com/google/go-github/v36 v36.0.0
|
||||
github.com/google/slowjam v1.0.0
|
||||
github.com/google/uuid v1.3.0
|
||||
github.com/hashicorp/go-getter v1.5.11
|
||||
github.com/hashicorp/go-retryablehttp v0.7.0
|
||||
github.com/hashicorp/go-retryablehttp v0.7.1
|
||||
github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect
|
||||
github.com/hooklift/assert v0.0.0-20170704181755-9d1defd6d214 // indirect
|
||||
github.com/hooklift/iso9660 v0.0.0-20170318115843-1cf07e5970d8
|
||||
|
@ -65,48 +63,52 @@ require (
|
|||
github.com/pmezard/go-difflib v1.0.0
|
||||
github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6 // indirect
|
||||
github.com/samalba/dockerclient v0.0.0-20160414174713-91d7393ff859 // indirect
|
||||
github.com/shirou/gopsutil/v3 v3.22.2
|
||||
github.com/shirou/gopsutil/v3 v3.22.4
|
||||
github.com/spf13/cobra v1.4.0
|
||||
github.com/spf13/pflag v1.0.5
|
||||
github.com/spf13/viper v1.10.1
|
||||
github.com/spf13/viper v1.11.0
|
||||
github.com/zchee/go-vmnet v0.0.0-20161021174912-97ebf9174097
|
||||
go.opencensus.io v0.23.0
|
||||
go.opentelemetry.io/otel v1.6.1
|
||||
go.opentelemetry.io/otel/sdk v1.6.1
|
||||
go.opentelemetry.io/otel/trace v1.6.1
|
||||
go.opentelemetry.io/otel v1.7.0
|
||||
go.opentelemetry.io/otel/sdk v1.7.0
|
||||
go.opentelemetry.io/otel/trace v1.7.0
|
||||
golang.org/x/build v0.0.0-20190927031335-2835ba2e683f
|
||||
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5
|
||||
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4
|
||||
golang.org/x/exp v0.0.0-20210220032938-85be41e4509f
|
||||
golang.org/x/mod v0.5.1
|
||||
golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a
|
||||
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
||||
golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5
|
||||
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
|
||||
golang.org/x/text v0.3.7
|
||||
gonum.org/v1/plot v0.11.0
|
||||
google.golang.org/api v0.73.0
|
||||
google.golang.org/api v0.77.0
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0
|
||||
k8s.io/api v0.23.5
|
||||
k8s.io/apimachinery v0.23.5
|
||||
k8s.io/client-go v0.23.5
|
||||
k8s.io/api v0.23.6
|
||||
k8s.io/apimachinery v0.23.6
|
||||
k8s.io/client-go v0.23.6
|
||||
k8s.io/cluster-bootstrap v0.0.0
|
||||
k8s.io/component-base v0.23.5
|
||||
k8s.io/component-base v0.23.6
|
||||
k8s.io/klog/v2 v2.60.1
|
||||
k8s.io/kubectl v0.23.5
|
||||
k8s.io/kubectl v0.23.6
|
||||
k8s.io/utils v0.0.0-20211116205334-6203023598ed
|
||||
libvirt.org/go/libvirt v1.8001.0
|
||||
libvirt.org/go/libvirt v1.8002.0
|
||||
sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0
|
||||
)
|
||||
|
||||
require github.com/santhosh-tekuri/jsonschema/v5 v5.0.0
|
||||
require (
|
||||
github.com/Xuanwo/go-locale v1.1.0
|
||||
github.com/docker/go-connections v0.4.0
|
||||
github.com/santhosh-tekuri/jsonschema/v5 v5.0.0
|
||||
)
|
||||
|
||||
require (
|
||||
cloud.google.com/go v0.100.2 // indirect
|
||||
cloud.google.com/go/compute v1.5.0 // indirect
|
||||
cloud.google.com/go/iam v0.1.1 // indirect
|
||||
cloud.google.com/go/compute v1.6.0 // indirect
|
||||
cloud.google.com/go/iam v0.3.0 // indirect
|
||||
cloud.google.com/go/monitoring v1.1.0 // indirect
|
||||
cloud.google.com/go/trace v1.0.0 // indirect
|
||||
cloud.google.com/go/trace v1.2.0 // indirect
|
||||
git.sr.ht/~sbinet/gg v0.3.1 // indirect
|
||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
||||
github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd // indirect
|
||||
|
@ -126,7 +128,6 @@ require (
|
|||
github.com/docker/cli v20.10.7+incompatible // indirect
|
||||
github.com/docker/distribution v2.7.1+incompatible // indirect
|
||||
github.com/docker/docker-credential-helpers v0.6.3 // indirect
|
||||
github.com/docker/go-connections v0.4.0 // indirect
|
||||
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
|
||||
github.com/fatih/color v1.13.0 // indirect
|
||||
github.com/fsnotify/fsnotify v1.5.1 // indirect
|
||||
|
@ -143,8 +144,9 @@ require (
|
|||
github.com/golang/snappy v0.0.3 // indirect
|
||||
github.com/google/go-querystring v1.0.0 // indirect
|
||||
github.com/google/gofuzz v1.1.0 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.1.1 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.3.0 // indirect
|
||||
github.com/googleapis/gnostic v0.5.5 // indirect
|
||||
github.com/googleapis/go-type-adapters v1.0.0 // indirect
|
||||
github.com/gookit/color v1.4.2 // indirect
|
||||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||
github.com/hashicorp/go-safetemp v1.0.0 // indirect
|
||||
|
@ -156,7 +158,7 @@ require (
|
|||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/klauspost/compress v1.13.0 // indirect
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
|
||||
github.com/magiconair/properties v1.8.5 // indirect
|
||||
github.com/magiconair/properties v1.8.6 // indirect
|
||||
github.com/mattn/go-colorable v0.1.12 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.13 // indirect
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
|
||||
|
@ -173,20 +175,22 @@ require (
|
|||
github.com/opencontainers/image-spec v1.0.1 // indirect
|
||||
github.com/opencontainers/runc v1.0.2 // indirect
|
||||
github.com/pelletier/go-toml v1.9.4 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.0.0-beta.8 // indirect
|
||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
|
||||
github.com/prometheus/client_golang v1.11.0 // indirect
|
||||
github.com/prometheus/client_model v0.2.0 // indirect
|
||||
github.com/prometheus/common v0.28.0 // indirect
|
||||
github.com/prometheus/procfs v0.6.0 // indirect
|
||||
github.com/prometheus/prometheus v2.5.0+incompatible // indirect
|
||||
github.com/rivo/uniseg v0.2.0 // indirect
|
||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||
github.com/sirupsen/logrus v1.8.1 // indirect
|
||||
github.com/spf13/afero v1.6.0 // indirect
|
||||
github.com/spf13/afero v1.8.2 // indirect
|
||||
github.com/spf13/cast v1.4.1 // indirect
|
||||
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||
github.com/subosito/gotenv v1.2.0 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.9 // indirect
|
||||
github.com/tklauser/numcpus v0.3.0 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.10 // indirect
|
||||
github.com/tklauser/numcpus v0.4.0 // indirect
|
||||
github.com/ulikunitz/xz v0.5.8 // indirect
|
||||
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
||||
|
@ -194,15 +198,15 @@ require (
|
|||
go.uber.org/multierr v1.6.0 // indirect
|
||||
go.uber.org/zap v1.19.0 // indirect
|
||||
golang.org/x/image v0.0.0-20220302094943-723b81ca9867 // indirect
|
||||
golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect
|
||||
golang.org/x/net v0.0.0-20220412020605-290c469a71a5 // indirect
|
||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 // indirect
|
||||
google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4 // indirect
|
||||
google.golang.org/grpc v1.45.0 // indirect
|
||||
google.golang.org/protobuf v1.27.1 // indirect
|
||||
google.golang.org/protobuf v1.28.0 // indirect
|
||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||
gopkg.in/ini.v1 v1.66.2 // indirect
|
||||
gopkg.in/ini.v1 v1.66.4 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
|
||||
k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect
|
||||
sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 // indirect
|
||||
|
|
222
go.sum
222
go.sum
|
@ -4,6 +4,7 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
|
|||
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
|
||||
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
|
||||
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
|
||||
cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
|
||||
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
|
||||
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
|
||||
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
|
||||
|
@ -17,6 +18,7 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY
|
|||
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
|
||||
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
|
||||
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
|
||||
cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
|
||||
cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
|
||||
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
|
||||
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
|
||||
|
@ -28,7 +30,6 @@ cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+Y
|
|||
cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4=
|
||||
cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc=
|
||||
cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA=
|
||||
cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U=
|
||||
cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y=
|
||||
cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A=
|
||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||
|
@ -38,15 +39,15 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM
|
|||
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
|
||||
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
||||
cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
|
||||
cloud.google.com/go/compute v1.2.0/go.mod h1:xlogom/6gr8RJGBe7nT2eGsQYAFUbbv8dbC29qE3Xmw=
|
||||
cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=
|
||||
cloud.google.com/go/compute v1.5.0 h1:b1zWmYuuHz7gO9kDcM/EpHGr06UgsYNRpNJzI2kFiLM=
|
||||
cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M=
|
||||
cloud.google.com/go/compute v1.6.0 h1:XdQIN5mdPTSBVwSIVDuY5e8ZzVAccsHvD3qTEz4zIps=
|
||||
cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s=
|
||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
||||
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
|
||||
cloud.google.com/go/iam v0.1.1 h1:4CapQyNFjiksks1/x7jsvsygFPhihslYk5GptIrlX68=
|
||||
cloud.google.com/go/iam v0.1.1/go.mod h1:CKqrcnI/suGpybEHxZ7BMehL0oA4LpdyJdUlTl9jVMw=
|
||||
cloud.google.com/go/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc=
|
||||
cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY=
|
||||
cloud.google.com/go/monitoring v1.1.0 h1:ZnyNdf/XRcynMmKzRSNTOdOyYPs6G7do1l2D2hIvIKo=
|
||||
cloud.google.com/go/monitoring v1.1.0/go.mod h1:L81pzz7HKn14QCMaCs6NTQkdBnE87TElyanS95vIcl4=
|
||||
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
||||
|
@ -58,12 +59,14 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
|
|||
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
|
||||
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
|
||||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
||||
cloud.google.com/go/storage v1.21.0 h1:HwnT2u2D309SFDHQII6m18HlrCi3jAXhUMTLOWXYH14=
|
||||
cloud.google.com/go/storage v1.21.0/go.mod h1:XmRlxkgPjlBONznT2dDUU/5XlpU2OjMnKuqnZI01LAA=
|
||||
cloud.google.com/go/trace v1.0.0 h1:laKx2y7IWMjguCe5zZx6n7qLtREk4kyE69SXVC0VSN8=
|
||||
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
|
||||
cloud.google.com/go/storage v1.22.0 h1:NUV0NNp9nkBuW66BFRLuMgldN60C57ET3dhbwLIYio8=
|
||||
cloud.google.com/go/storage v1.22.0/go.mod h1:GbaLEoMqbVm6sx3Z0R++gSiBlgMv6yUi2q1DeGFKQgE=
|
||||
cloud.google.com/go/trace v1.0.0/go.mod h1:4iErSByzxkyHWzzlAj63/Gmjz0NH1ASqhJguHpGcr6A=
|
||||
contrib.go.opencensus.io/exporter/stackdriver v0.13.10 h1:a9+GZPUe+ONKUwULjlEOucMMG0qfSCCenlji0Nhqbys=
|
||||
contrib.go.opencensus.io/exporter/stackdriver v0.13.10/go.mod h1:I5htMbyta491eUxufwwZPQdcKvvgzMB4O9ni41YnIM8=
|
||||
cloud.google.com/go/trace v1.2.0 h1:oIaB4KahkIUOpLSAAjEJ8y2desbjY/x/RfP4O3KAtTI=
|
||||
cloud.google.com/go/trace v1.2.0/go.mod h1:Wc8y/uYyOhPy12KEnXG9XGrvfMz5F5SrYecQlbW1rwM=
|
||||
contrib.go.opencensus.io/exporter/stackdriver v0.13.12 h1:bjBKzIf7/TAkxd7L2utGaLM78bmUWlCval5K9UeElbY=
|
||||
contrib.go.opencensus.io/exporter/stackdriver v0.13.12/go.mod h1:mmxnWlrvrFdpiOHOhxBaVi1rkc0WOqhgfknj4Yg0SeQ=
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
git.sr.ht/~sbinet/gg v0.3.1 h1:LNhjNn8DerC8f9DHLz6lS0YYul/b602DUxDgGkd/Aik=
|
||||
|
@ -103,8 +106,8 @@ github.com/Delta456/box-cli-maker/v2 v2.2.2 h1:CpSLcPgi5pY4+arzpyuWN2+nU8gHqto2Y
|
|||
github.com/Delta456/box-cli-maker/v2 v2.2.2/go.mod h1:idItIMZeyx3bg73XwSgsLeZd+gdpD2IvGbR3FC8a9TU=
|
||||
github.com/GoogleCloudPlatform/docker-credential-gcr v0.0.0-20210713212222-faed5e8b8ca2 h1:rMamBsR6iCT9Y5m2Il6vFGJvY7FAgck4AoA/LobheKU=
|
||||
github.com/GoogleCloudPlatform/docker-credential-gcr v0.0.0-20210713212222-faed5e8b8ca2/go.mod h1:BB1eHdMLYEFuFdBlRMb0N7YGVdM5s6Pt0njxgvfbGGs=
|
||||
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.3.0 h1:JLLDOHEcoREA54hzOnjr8KQcZCvX0E8KhosjE0F1jaQ=
|
||||
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.3.0/go.mod h1:Pe8G2QFgCaohbU/zHRBjn0YaFh9z8/HtuEDh/Lyo04E=
|
||||
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.4.0 h1:0jFkxz0dzGjRZItXVhv9U4yJW7Xkr82b1vSUcnD2Zh0=
|
||||
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.4.0/go.mod h1:1KabLpTVwm4YmU74LP4uCrOSP176G5WTMgdvfrJKgLU=
|
||||
github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU=
|
||||
github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E=
|
||||
github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
|
||||
|
@ -141,6 +144,8 @@ github.com/VividCortex/ewma v1.1.1 h1:MnEK4VOv6n0RSY4vtRe3h11qjxL3+t0B8yOL8iMXdc
|
|||
github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA=
|
||||
github.com/VividCortex/godaemon v1.0.0 h1:aHYrScWvgaSOdAoYCdObWXLm+e1rldP9Pwb1ZvuZkQw=
|
||||
github.com/VividCortex/godaemon v1.0.0/go.mod h1:hBWe/72KbGt/lb95E+Sh9ersdYbB57Dt6CG66S1YPno=
|
||||
github.com/Xuanwo/go-locale v1.1.0 h1:51gUxhxl66oXAjI9uPGb2O0qwPECpriKQb2hl35mQkg=
|
||||
github.com/Xuanwo/go-locale v1.1.0/go.mod h1:UKrHoZB3FPIk9wIG2/tVSobnHgNnceGSH3Y8DY5cASs=
|
||||
github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY=
|
||||
github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk=
|
||||
github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw=
|
||||
|
@ -194,8 +199,8 @@ github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0Bsq
|
|||
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
|
||||
github.com/c4milo/gotoolkit v0.0.0-20190525173301-67483a18c17a h1:+uvtaGSLJh0YpLLHCQ9F+UVGy4UOS542hsjj8wBjvH0=
|
||||
github.com/c4milo/gotoolkit v0.0.0-20190525173301-67483a18c17a/go.mod h1:txokOny9wavBtq2PWuHmj1P+eFwpCsj+gQeNNANChfU=
|
||||
github.com/cenkalti/backoff/v4 v4.1.2 h1:6Yo7N8UP2K6LWZnW94DLVSSrbobcWdVzAYOisuDPIFo=
|
||||
github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
|
||||
github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4=
|
||||
github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/census-instrumentation/opencensus-proto v0.3.0 h1:t/LhUZLVitR1Ow2YOnduCsavhwFUklBMoGVYUCqmCqk=
|
||||
github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
|
@ -218,12 +223,8 @@ github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX
|
|||
github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
|
||||
github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/cloudevents/sdk-go/v2 v2.8.0 h1:kmRaLbsafZmidZ0rZ6h7WOMqCkRMcVTLV5lxV/HKQ9Y=
|
||||
github.com/cloudevents/sdk-go/v2 v2.8.0/go.mod h1:GpCBmUj7DIRiDhVvsK5d6WCbgTWs8DxAWTRtAwQmIXs=
|
||||
github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:Yg2hDs4b13Evkpj42FU2idX2cVXVFqQSheXYKM86Qsk=
|
||||
github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:MgJyK38wkzZbiZSKeIeFankxxSA8gayko/nr5x5bgBA=
|
||||
github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:tuijfIjZyjZaHq9xDUh0tNitwXshJpbLkqMOJv4H3do=
|
||||
github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:po7NpZ/QiTKzBKyrsEAxwnTamCoh8uDk/egRpQ7siIc=
|
||||
github.com/cloudevents/sdk-go/v2 v2.9.0 h1:StQ9q2JuGvclGFoT7kpTdQm+qjW0LQzg51CgUF4ncpY=
|
||||
github.com/cloudevents/sdk-go/v2 v2.9.0/go.mod h1:GpCBmUj7DIRiDhVvsK5d6WCbgTWs8DxAWTRtAwQmIXs=
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||
|
@ -413,7 +414,6 @@ github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
|
|||
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
||||
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||
github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o=
|
||||
github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
|
||||
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
||||
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
|
||||
|
@ -454,11 +454,9 @@ github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7
|
|||
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
|
||||
github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
|
||||
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
|
||||
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro=
|
||||
|
@ -554,8 +552,9 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
|||
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
|
||||
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
|
||||
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
|
||||
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/go-containerregistry v0.6.0 h1:niQ+8XD//kKgArIFwDVBXsWVWbde16LPdHMyNwSC8h4=
|
||||
github.com/google/go-containerregistry v0.6.0/go.mod h1:euCCtNbZ6tKqi1E72vwDj2xZcN5ttKpZLfa/wSo5iLw=
|
||||
github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
|
||||
|
@ -581,6 +580,7 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf
|
|||
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
|
@ -599,16 +599,21 @@ github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
|
|||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
|
||||
github.com/googleapis/gax-go/v2 v2.1.1 h1:dp3bWCh+PPO1zjRRiCSczJav13sBvG4UhNyVTa1KqdU=
|
||||
github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM=
|
||||
github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM=
|
||||
github.com/googleapis/gax-go/v2 v2.3.0 h1:nRJtk3y8Fm770D42QV6T90ZnvFZyk7agSo3Q+Z9p3WI=
|
||||
github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM=
|
||||
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
|
||||
github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
|
||||
github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw=
|
||||
github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA=
|
||||
github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA=
|
||||
github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
|
||||
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
|
||||
github.com/googleinterns/cloud-operations-api-mock v0.0.0-20200709193332-a1e58c29bdd3 h1:eHv/jVY/JNop1xg2J9cBb4EzyMpWZoNCP1BslSAIkOI=
|
||||
github.com/googleinterns/cloud-operations-api-mock v0.0.0-20200709193332-a1e58c29bdd3/go.mod h1:h/KNeRx7oYU4SpA4SoY7W2/NxDKEEVuwA6j9A27L4OI=
|
||||
github.com/gookit/color v1.4.2 h1:tXy44JFSFkKnELV6WaMo/lLfu/meqITX3iAV52do7lk=
|
||||
github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
|
||||
github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||
|
@ -635,13 +640,13 @@ github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/S
|
|||
github.com/hashicorp/go-getter v1.5.11 h1:wioTuNmaBU3IE9vdFtFMcmZWj0QzLc6DYaP6sNe5onY=
|
||||
github.com/hashicorp/go-getter v1.5.11/go.mod h1:9i48BP6wpWweI/0/+FBjqLrp9S8XtwUGjiu0QkWHEaY=
|
||||
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
|
||||
github.com/hashicorp/go-hclog v1.0.0 h1:bkKf0BeBXcSYa7f5Fyi9gMuQ8gNsxeiNpZjR6VxNZeo=
|
||||
github.com/hashicorp/go-hclog v1.2.0 h1:La19f8d7WIlm4ogzNHB0JGqs5AUDAZ2UfCY4sJXcJdM=
|
||||
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
|
||||
github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I=
|
||||
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
|
||||
github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4=
|
||||
github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
|
||||
github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ=
|
||||
github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
|
||||
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
|
||||
github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo=
|
||||
github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I=
|
||||
|
@ -702,6 +707,7 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
|
|||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
||||
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
|
||||
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
|
||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||
github.com/juju/clock v0.0.0-20190205081909-9c5c9712527c h1:3UvYABOQRhJAApj9MdCN+Ydv841ETSoy6xLzdmmr/9A=
|
||||
github.com/juju/clock v0.0.0-20190205081909-9c5c9712527c/go.mod h1:nD0vlnrUjcjJhqN5WuCWZyzfd5AHZAC9/ajvbSx69xA=
|
||||
|
@ -768,8 +774,9 @@ github.com/machine-drivers/docker-machine-driver-vmware v0.1.5/go.mod h1:dTnTzUH
|
|||
github.com/machine-drivers/machine v0.7.1-0.20211105063445-78a84df85426 h1:gVDPCmqwvHQ4ox/9svvnkomYJAAiV59smbPdTK4DIm4=
|
||||
github.com/machine-drivers/machine v0.7.1-0.20211105063445-78a84df85426/go.mod h1:79Uwa2hGd5S39LDJt58s8JZcIhGEK6pkq9bsuTbFWbk=
|
||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||
github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
|
||||
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
|
||||
github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
|
||||
github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
|
||||
github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
|
@ -926,6 +933,8 @@ github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrap
|
|||
github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
|
||||
github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM=
|
||||
github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
|
||||
github.com/pelletier/go-toml/v2 v2.0.0-beta.8 h1:dy81yyLYJDwMTifq24Oi/IslOslRrDSb3jwDggjz3Z0=
|
||||
github.com/pelletier/go-toml/v2 v2.0.0-beta.8/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
||||
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc=
|
||||
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
|
||||
|
@ -942,6 +951,7 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
|
|||
github.com/pkg/profile v0.0.0-20161223203901-3a8809bd8a80 h1:DQFOykp5w+HOykOMzd2yOX5P6ty58Ggiu2rthHgcNQg=
|
||||
github.com/pkg/profile v0.0.0-20161223203901-3a8809bd8a80/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
|
||||
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
|
||||
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||
|
@ -985,6 +995,8 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O
|
|||
github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
||||
github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4=
|
||||
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||
github.com/prometheus/prometheus v2.5.0+incompatible h1:7QPitgO2kOFG8ecuRn9O/4L9+10He72rVRJvMXrE9Hg=
|
||||
github.com/prometheus/prometheus v2.5.0+incompatible/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s=
|
||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||
|
@ -1011,8 +1023,8 @@ github.com/sayboras/dockerclient v1.0.0/go.mod h1:mUmEoqt0b+uQg57s006FsvL4mybi+N
|
|||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
|
||||
github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
|
||||
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
|
||||
github.com/shirou/gopsutil/v3 v3.22.2 h1:wCrArWFkHYIdDxx/FSfF5RB4dpJYW6t7rcp3+zL8uks=
|
||||
github.com/shirou/gopsutil/v3 v3.22.2/go.mod h1:WapW1AOOPlHyXr+yOyw3uYx36enocrtSoSBy0L5vUHY=
|
||||
github.com/shirou/gopsutil/v3 v3.22.4 h1:srAQaiX6jX/cYL6q29aE0m8lOskT9CurZ9N61YR3yoI=
|
||||
github.com/shirou/gopsutil/v3 v3.22.4/go.mod h1:D01hZJ4pVHPpCTZ3m3T2+wDF2YAGfd+H4ifUguaQzHM=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
||||
github.com/sirupsen/logrus v1.0.4/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
||||
|
@ -1025,15 +1037,19 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf
|
|||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
|
||||
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
|
||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||
github.com/smartystreets/goconvey v1.6.7 h1:I6tZjLXD2Q1kjvNbIzB1wvQBsXmKXiVrhpRE8ZjP5jY=
|
||||
github.com/smartystreets/goconvey v1.6.7/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
||||
github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY=
|
||||
github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
|
||||
github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo=
|
||||
github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo=
|
||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||
github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA=
|
||||
|
@ -1055,8 +1071,8 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
|||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
|
||||
github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns=
|
||||
github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk=
|
||||
github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU=
|
||||
github.com/spf13/viper v1.11.0 h1:7OX/1FS6n7jHD1zGrZTM7WtY13ZELRyosK4k93oPr44=
|
||||
github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk=
|
||||
github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8=
|
||||
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
|
||||
github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
|
@ -1079,10 +1095,10 @@ github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG
|
|||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
||||
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
|
||||
github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I=
|
||||
github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo=
|
||||
github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs=
|
||||
github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ=
|
||||
github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8=
|
||||
github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw=
|
||||
github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk=
|
||||
github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o=
|
||||
github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ=
|
||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||
|
@ -1143,33 +1159,22 @@ go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
|
|||
go.opentelemetry.io/contrib v0.20.0 h1:ubFQUn0VCZ0gPwIoJfBJVpeBlyRMxu8Mm/huKWYd9p0=
|
||||
go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.26.0 h1:sdwza9BScvbOFaZLhvKDQc54vQ8CWM8jD9BO2t+rP4E=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.26.0/go.mod h1:4vatbW3QwS11DK0H0SB7FR31/VbthXcYorswdkVXdyg=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.31.0 h1:woM+Mb4d0A+Dxa3rYPenSN5ZeS9qHUvE8rlObiLRXTY=
|
||||
go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo=
|
||||
go.opentelemetry.io/otel v1.0.1/go.mod h1:OPEOD4jIT2SlZPMmwT6FqZz2C0ZNdQqiWcoK6M0SNFU=
|
||||
go.opentelemetry.io/otel v1.1.0/go.mod h1:7cww0OW51jQ8IaZChIEdqLwgh+44+7uiTdWsAL0wQpA=
|
||||
go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs=
|
||||
go.opentelemetry.io/otel v1.6.1 h1:6r1YrcTenBvYa1x491d0GGpTVBsNECmrc/K6b+zDeis=
|
||||
go.opentelemetry.io/otel v1.6.1/go.mod h1:blzUabWHkX6LJewxvadmzafgh/wnvBSDBdOuwkAtrWQ=
|
||||
go.opentelemetry.io/otel v1.7.0 h1:Z2lA3Tdch0iDcrhJXDIlC94XE+bxok1F9B+4Lz/lGsM=
|
||||
go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk=
|
||||
go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM=
|
||||
go.opentelemetry.io/otel/internal/metric v0.24.0 h1:O5lFy6kAl0LMWBjzy3k//M8VjEaTDWL9DPJuqZmWIAA=
|
||||
go.opentelemetry.io/otel/internal/metric v0.24.0/go.mod h1:PSkQG+KuApZjBpC6ea6082ZrWUUy/w132tJ/LOU3TXk=
|
||||
go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU=
|
||||
go.opentelemetry.io/otel/metric v0.24.0 h1:Rg4UYHS6JKR1Sw1TxnI13z7q/0p/XAbgIqUTagvLJuU=
|
||||
go.opentelemetry.io/otel/metric v0.24.0/go.mod h1:tpMFnCD9t+BEGiWY2bWF5+AwjuAdM0lSowQ4SBA3/K4=
|
||||
go.opentelemetry.io/otel/metric v0.28.0 h1:o5YNh+jxACMODoAo1bI7OES0RUW4jAMae0Vgs2etWAQ=
|
||||
go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw=
|
||||
go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc=
|
||||
go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs=
|
||||
go.opentelemetry.io/otel/sdk v1.6.1 h1:ZmcNyMhcuAYIb/Nr6QhBPTMopMTbov/47wHt1gibkoY=
|
||||
go.opentelemetry.io/otel/sdk v1.6.1/go.mod h1:IVYrddmFZ+eJqu2k38qD3WezFR2pymCzm8tdxyh3R4E=
|
||||
go.opentelemetry.io/otel/sdk v1.7.0 h1:4OmStpcKVOfvDOgCt7UriAPtKolwIhxpnSNI/yK+1B0=
|
||||
go.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU=
|
||||
go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE=
|
||||
go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE=
|
||||
go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw=
|
||||
go.opentelemetry.io/otel/trace v1.0.1/go.mod h1:5g4i4fKLaX2BQpSBsxw8YYcgKpMMSW3x7ZTuYBr3sUk=
|
||||
go.opentelemetry.io/otel/trace v1.1.0/go.mod h1:i47XtdcBQiktu5IsrPqOHe8w+sBmnLwwHt8wiUsWGTI=
|
||||
go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk=
|
||||
go.opentelemetry.io/otel/trace v1.6.1 h1:f8c93l5tboBYZna1nWk0W9DYyMzJXDWdZcJZ0Kb400U=
|
||||
go.opentelemetry.io/otel/trace v1.6.1/go.mod h1:RkFRM1m0puWIq10oxImnGEduNBzxiN7TXluRBtE+5j0=
|
||||
go.opentelemetry.io/otel/trace v1.7.0 h1:O37Iogk1lEkMRXewVtZ1BBTVn5JEp8GrJvP92bJqC6o=
|
||||
go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU=
|
||||
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
|
||||
go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o=
|
||||
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||
|
@ -1209,8 +1214,11 @@ golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPh
|
|||
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
|
||||
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA=
|
||||
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||
|
@ -1302,7 +1310,6 @@ golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/
|
|||
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
|
@ -1322,8 +1329,10 @@ golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qx
|
|||
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc=
|
||||
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220412020605-290c469a71a5 h1:bRb386wvrE+oBNdF1d/Xh9mQrfQ4ecYhW5qJ5GvTGT4=
|
||||
golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
|
@ -1343,8 +1352,10 @@ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ
|
|||
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM=
|
||||
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
|
||||
golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
|
||||
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE=
|
||||
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
|
||||
golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
|
@ -1440,6 +1451,7 @@ golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
@ -1459,24 +1471,22 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211023085530-d6a326fbbf70/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220207234003-57398862261d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5 h1:y/woIyUBFbpQGKS0u1aHF/40WUDnek3fPOyD08H5Vng=
|
||||
golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0=
|
||||
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
|
@ -1548,7 +1558,6 @@ golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roY
|
|||
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200701151220-7cb253f4c4f8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
|
@ -1558,6 +1567,7 @@ golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4f
|
|||
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
||||
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
|
@ -1569,8 +1579,9 @@ golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpd
|
|||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U=
|
||||
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gonum.org/v1/gonum v0.11.0 h1:f1IJhK4Km5tBJmaiJXtk/PkL4cdVX6J+tGiM187uT5E=
|
||||
gonum.org/v1/plot v0.11.0 h1:z2ZkgNqW34d0oYUzd80RRlc0L9kWtenqK4kflZG1lGc=
|
||||
gonum.org/v1/plot v0.11.0/go.mod h1:fH9YnKnDKax0u5EzHVXvhN5HJwtMFWIOLNuhgUahbCQ=
|
||||
|
@ -1609,14 +1620,12 @@ google.golang.org/api v0.58.0/go.mod h1:cAbP2FsxoGVNwtgNAmmn3y5G1TWAiVYRmg4yku3l
|
|||
google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU=
|
||||
google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I=
|
||||
google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo=
|
||||
google.golang.org/api v0.64.0/go.mod h1:931CdxA8Rm4t6zqTFGSsgwbAEZ2+GMYurbndwSimebM=
|
||||
google.golang.org/api v0.66.0/go.mod h1:I1dmXYpX7HGwz/ejRxwQp2qj5bFAz93HiCU1C1oYd9M=
|
||||
google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g=
|
||||
google.golang.org/api v0.68.0/go.mod h1:sOM8pTpwgflXRhz+oC8H2Dr+UcbMqkPPWNJo88Q7TH8=
|
||||
google.golang.org/api v0.69.0/go.mod h1:boanBiw+h5c3s+tBPgEzLDRHfFLWV0qXxRHz3ws7C80=
|
||||
google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA=
|
||||
google.golang.org/api v0.73.0 h1:O9bThUh35K1rvUrQwTUQ1eqLC/IYyzUpWavYIO2EXvo=
|
||||
google.golang.org/api v0.73.0/go.mod h1:lbd/q6BRFJbdpV6OUCXstVeiI5mL/d3/WifG7iNKnjI=
|
||||
google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8=
|
||||
google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs=
|
||||
google.golang.org/api v0.77.0 h1:msijLTxwkJ7Jub5tv9KBVCKtHOQwnvnvkX7ErFFCVxY=
|
||||
google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
|
@ -1654,7 +1663,6 @@ google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfG
|
|||
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||
google.golang.org/genproto v0.0.0-20200605102947-12044bf5ea91/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
|
||||
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
|
||||
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
|
@ -1666,10 +1674,13 @@ google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6D
|
|||
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
|
||||
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
|
||||
google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=
|
||||
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
|
||||
|
@ -1695,20 +1706,18 @@ google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ6
|
|||
google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220111164026-67b88f271998/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220207185906-7721543eae58/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220211171837-173942840c17/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 h1:FglFEfyj61zP3c6LgjmVHxYxZWXYul9oiS1EZqD5gLc=
|
||||
google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E=
|
||||
google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||
google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||
google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||
google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4 h1:myaecH64R0bIEDjNORIel4iXubqzaHU1K2z8ajBwWcM=
|
||||
google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||
|
@ -1755,8 +1764,9 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
|
|||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
|
||||
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
|
||||
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
@ -1774,8 +1784,8 @@ gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKW
|
|||
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
|
||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI=
|
||||
gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4=
|
||||
gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
|
||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
|
||||
|
@ -1818,34 +1828,34 @@ k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
|
|||
k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ=
|
||||
k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8=
|
||||
k8s.io/api v0.22.4/go.mod h1:Rgs+9gIGYC5laXQSZZ9JqT5NevNgoGiOdVWi1BAB3qk=
|
||||
k8s.io/api v0.23.5 h1:zno3LUiMubxD/V1Zw3ijyKO3wxrhbUF1Ck+VjBvfaoA=
|
||||
k8s.io/api v0.23.5/go.mod h1:Na4XuKng8PXJ2JsploYYrivXrINeTaycCGcYgF91Xm8=
|
||||
k8s.io/api v0.23.6 h1:yOK34wbYECH4RsJbQ9sfkFK3O7f/DUHRlzFehkqZyVw=
|
||||
k8s.io/api v0.23.6/go.mod h1:1kFaYxGCFHYp3qd6a85DAj/yW8aVD6XLZMqJclkoi9g=
|
||||
k8s.io/apimachinery v0.19.1/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
|
||||
k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
|
||||
k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
|
||||
k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc=
|
||||
k8s.io/apimachinery v0.22.4/go.mod h1:yU6oA6Gnax9RrxGzVvPFFJ+mpnW6PBSqp0sx0I0HHW0=
|
||||
k8s.io/apimachinery v0.23.5 h1:Va7dwhp8wgkUPWsEXk6XglXWU4IKYLKNlv8VkX7SDM0=
|
||||
k8s.io/apimachinery v0.23.5/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM=
|
||||
k8s.io/apimachinery v0.23.6 h1:RH1UweWJkWNTlFx0D8uxOpaU1tjIOvVVWV/bu5b3/NQ=
|
||||
k8s.io/apimachinery v0.23.6/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM=
|
||||
k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU=
|
||||
k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM=
|
||||
k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q=
|
||||
k8s.io/cli-runtime v0.23.5/go.mod h1:oY6QDF2qo9xndSq32tqcmRp2UyXssdGrLfjAVymgbx4=
|
||||
k8s.io/cli-runtime v0.23.6/go.mod h1:0Z3VR/HRIFKiLzKIAkm1mPtcH98GT/fXu2IU0E4vFmw=
|
||||
k8s.io/client-go v0.19.1/go.mod h1:AZOIVSI9UUtQPeJD3zJFp15CEhSjRgAuQP5PWRJrCIQ=
|
||||
k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
|
||||
k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k=
|
||||
k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0=
|
||||
k8s.io/client-go v0.23.5 h1:zUXHmEuqx0RY4+CsnkOn5l0GU+skkRXKGJrhmE2SLd8=
|
||||
k8s.io/client-go v0.23.5/go.mod h1:flkeinTO1CirYgzMPRWxUCnV0G4Fbu2vLhYCObnt/r4=
|
||||
k8s.io/client-go v0.23.6 h1:7h4SctDVQAQbkHQnR4Kzi7EyUyvla5G1pFWf4+Od7hQ=
|
||||
k8s.io/client-go v0.23.6/go.mod h1:Umt5icFOMLV/+qbtZ3PR0D+JA6lvvb3syzodv4irpK4=
|
||||
k8s.io/cluster-bootstrap v0.22.4 h1:2ZhV/1K4GiCrnmDHHbBnN3bERWn+Nxrtxmxp6uYYThI=
|
||||
k8s.io/cluster-bootstrap v0.22.4/go.mod h1:fTQZ6u9G6fg2LHhB8nEgZLnXIhCDSRYuLUUS5pgW8RY=
|
||||
k8s.io/code-generator v0.23.5/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk=
|
||||
k8s.io/code-generator v0.23.6/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk=
|
||||
k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk=
|
||||
k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI=
|
||||
k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM=
|
||||
k8s.io/component-base v0.23.5 h1:8qgP5R6jG1BBSXmRYW+dsmitIrpk8F/fPEvgDenMCCE=
|
||||
k8s.io/component-base v0.23.5/go.mod h1:c5Nq44KZyt1aLl0IpHX82fhsn84Sb0jjzwjpcA42bY0=
|
||||
k8s.io/component-helpers v0.23.5/go.mod h1:5riXJgjTIs+ZB8xnf5M2anZ8iQuq37a0B/0BgoPQuSM=
|
||||
k8s.io/component-base v0.23.6 h1:8dhVZ4VrRcNdV2EGjl8tj8YOHwX6ysgCGMJ2Oyy0NW8=
|
||||
k8s.io/component-base v0.23.6/go.mod h1:FGMPeMrjYu0UZBSAFcfloVDplj9IvU+uRMTOdE23Fj0=
|
||||
k8s.io/component-helpers v0.23.6/go.mod h1:kgvl6wvnYg9oebklLPpbW8UhvAZ9Qds26/RANEbny/8=
|
||||
k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM=
|
||||
k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
|
||||
k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
|
||||
|
@ -1866,17 +1876,17 @@ k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2R
|
|||
k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
|
||||
k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4=
|
||||
k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk=
|
||||
k8s.io/kubectl v0.23.5 h1:DmDULqCaF4qstj0Im143XmncvqWtJxHzK8IrW2BzlU0=
|
||||
k8s.io/kubectl v0.23.5/go.mod h1:lLgw7cVY8xbd7o637vOXPca/w6HC205KsPCRDYRCxwE=
|
||||
k8s.io/kubectl v0.23.6 h1:ajzrqj88GqlH/gpscMCts+mKNeSJprpkWJEHO8CR2Ss=
|
||||
k8s.io/kubectl v0.23.6/go.mod h1:mMtJhc2QtQiSfvIQoMEUIjGHtZuP4uxMy/ees6j6zx8=
|
||||
k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
|
||||
k8s.io/metrics v0.23.5/go.mod h1:WNAtV2a5BYbmDS8+7jSqYYV6E3efuGTpIwJ8PTD1wgs=
|
||||
k8s.io/metrics v0.23.6/go.mod h1:Fm9VzVMZ7KVEEeLStF2y3XogfcDwpGyI15o1xB6PbYk=
|
||||
k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20211116205334-6203023598ed h1:ck1fRPWPJWsMd8ZRFsWc6mh/zHp5fZ/shhbrgPUxDAE=
|
||||
k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
libvirt.org/go/libvirt v1.8001.0 h1:JpmhiPLs+DA5shqjsqjGr4YIkVaLiDghI8qk9e34JXg=
|
||||
libvirt.org/go/libvirt v1.8001.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ=
|
||||
libvirt.org/go/libvirt v1.8002.0 h1:X8gz2Sa1ek4S5FznpDpeRz6JpNb7NdkfzTii5GMIwDY=
|
||||
libvirt.org/go/libvirt v1.8002.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4=
|
||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
|
|
|
@ -69,7 +69,7 @@ int ClusterModel::rowCount(const QModelIndex &) const
|
|||
|
||||
int ClusterModel::columnCount(const QModelIndex &) const
|
||||
{
|
||||
return 6;
|
||||
return 7;
|
||||
}
|
||||
|
||||
static QStringList binaryAbbrs = { "B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB" };
|
||||
|
@ -81,7 +81,7 @@ QVariant ClusterModel::data(const QModelIndex &index, int role) const
|
|||
|
||||
if (index.row() >= clusterList.size())
|
||||
return QVariant();
|
||||
if (index.column() >= 6)
|
||||
if (index.column() >= 7)
|
||||
return QVariant();
|
||||
|
||||
if (role == Qt::TextAlignmentRole) {
|
||||
|
@ -97,6 +97,8 @@ QVariant ClusterModel::data(const QModelIndex &index, int role) const
|
|||
case 4:
|
||||
// fall-through
|
||||
case 5:
|
||||
// fall-through
|
||||
case 6:
|
||||
return QVariant(Qt::AlignHCenter | Qt::AlignVCenter);
|
||||
}
|
||||
}
|
||||
|
@ -112,8 +114,10 @@ QVariant ClusterModel::data(const QModelIndex &index, int role) const
|
|||
case 3:
|
||||
return cluster.containerRuntime();
|
||||
case 4:
|
||||
return QString::number(cluster.cpus());
|
||||
return cluster.k8sVersion();
|
||||
case 5:
|
||||
return QString::number(cluster.cpus());
|
||||
case 6:
|
||||
return QString::number(cluster.memory());
|
||||
}
|
||||
}
|
||||
|
@ -136,8 +140,10 @@ QVariant ClusterModel::headerData(int section, Qt::Orientation orientation, int
|
|||
case 3:
|
||||
return tr("Container Runtime");
|
||||
case 4:
|
||||
return tr("CPUs");
|
||||
return tr("Kubernetes Version");
|
||||
case 5:
|
||||
return tr("CPUs");
|
||||
case 6:
|
||||
return tr("Memory (MB)");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,13 +59,18 @@
|
|||
#include <QList>
|
||||
#include <QMap>
|
||||
|
||||
//! [0]
|
||||
class Cluster
|
||||
{
|
||||
public:
|
||||
Cluster() : Cluster("") { }
|
||||
Cluster(const QString &name)
|
||||
: m_name(name), m_status(""), m_driver(""), m_container_runtime(""), m_cpus(0), m_memory(0)
|
||||
: m_name(name),
|
||||
m_status(""),
|
||||
m_driver(""),
|
||||
m_container_runtime(""),
|
||||
m_k8s_version(""),
|
||||
m_cpus(0),
|
||||
m_memory(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -76,25 +81,27 @@ public:
|
|||
void setDriver(QString driver) { m_driver = driver; }
|
||||
QString containerRuntime() const { return m_container_runtime; }
|
||||
void setContainerRuntime(QString containerRuntime) { m_container_runtime = containerRuntime; }
|
||||
QString k8sVersion() const { return m_k8s_version; }
|
||||
void setK8sVersion(QString k8sVersion) { m_k8s_version = k8sVersion; }
|
||||
int cpus() const { return m_cpus; }
|
||||
void setCpus(int cpus) { m_cpus = cpus; }
|
||||
int memory() const { return m_memory; }
|
||||
void setMemory(int memory) { m_memory = memory; }
|
||||
bool isEmpty() { return m_name.isEmpty(); }
|
||||
|
||||
private:
|
||||
QString m_name;
|
||||
QString m_status;
|
||||
QString m_driver;
|
||||
QString m_container_runtime;
|
||||
QString m_k8s_version;
|
||||
int m_cpus;
|
||||
int m_memory;
|
||||
};
|
||||
//! [0]
|
||||
|
||||
typedef QList<Cluster> ClusterList;
|
||||
typedef QHash<QString, Cluster> ClusterHash;
|
||||
|
||||
//! [1]
|
||||
class ClusterModel : public QAbstractListModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -115,6 +122,5 @@ public:
|
|||
private:
|
||||
ClusterList clusterList;
|
||||
};
|
||||
//! [1]
|
||||
|
||||
#endif // CLUSTER_H
|
||||
|
|
643
gui/window.cpp
643
gui/window.cpp
|
@ -79,6 +79,10 @@
|
|||
#include <QFormLayout>
|
||||
#include <QDialogButtonBox>
|
||||
#include <QStandardPaths>
|
||||
#include <QDir>
|
||||
#include <QFontDialog>
|
||||
#include <QStackedWidget>
|
||||
#include <QProcessEnvironment>
|
||||
|
||||
#ifndef QT_NO_TERMWIDGET
|
||||
#include <QApplication>
|
||||
|
@ -86,52 +90,117 @@
|
|||
#include "qtermwidget.h"
|
||||
#endif
|
||||
|
||||
//! [0]
|
||||
Window::Window()
|
||||
{
|
||||
trayIconIcon = new QIcon(":/images/minikube.png");
|
||||
checkForMinikube();
|
||||
isBasicView = true;
|
||||
|
||||
stackedWidget = new QStackedWidget;
|
||||
QVBoxLayout *layout = new QVBoxLayout;
|
||||
dashboardProcess = 0;
|
||||
|
||||
createClusterGroupBox();
|
||||
|
||||
createActions();
|
||||
createTrayIcon();
|
||||
|
||||
connect(sshButton, &QAbstractButton::clicked, this, &Window::sshConsole);
|
||||
connect(dashboardButton, &QAbstractButton::clicked, this, &Window::dashboardBrowser);
|
||||
connect(startButton, &QAbstractButton::clicked, this, &Window::startMinikube);
|
||||
connect(stopButton, &QAbstractButton::clicked, this, &Window::stopMinikube);
|
||||
connect(deleteButton, &QAbstractButton::clicked, this, &Window::deleteMinikube);
|
||||
connect(refreshButton, &QAbstractButton::clicked, this, &Window::updateClusters);
|
||||
connect(createButton, &QAbstractButton::clicked, this, &Window::initMachine);
|
||||
connect(trayIcon, &QSystemTrayIcon::messageClicked, this, &Window::messageClicked);
|
||||
|
||||
dashboardProcess = 0;
|
||||
|
||||
QVBoxLayout *mainLayout = new QVBoxLayout;
|
||||
mainLayout->addWidget(clusterGroupBox);
|
||||
setLayout(mainLayout);
|
||||
|
||||
createBasicView();
|
||||
createAdvancedView();
|
||||
trayIcon->show();
|
||||
updateButtons();
|
||||
layout->addWidget(stackedWidget);
|
||||
setLayout(layout);
|
||||
resize(200, 250);
|
||||
|
||||
setWindowTitle(tr("minikube"));
|
||||
setWindowIcon(*trayIconIcon);
|
||||
resize(600, 400);
|
||||
}
|
||||
//! [0]
|
||||
|
||||
//! [1]
|
||||
QProcessEnvironment Window::setMacEnv()
|
||||
{
|
||||
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
||||
QString path = env.value("PATH");
|
||||
env.insert("PATH", path + ":/usr/local/bin");
|
||||
return env;
|
||||
}
|
||||
|
||||
void Window::createBasicView()
|
||||
{
|
||||
basicStartButton = new QPushButton(tr("Start"));
|
||||
basicStopButton = new QPushButton(tr("Stop"));
|
||||
basicPauseButton = new QPushButton(tr("Pause"));
|
||||
basicDeleteButton = new QPushButton(tr("Delete"));
|
||||
basicRefreshButton = new QPushButton(tr("Refresh"));
|
||||
basicSSHButton = new QPushButton(tr("SSH"));
|
||||
basicDashboardButton = new QPushButton(tr("Dashboard"));
|
||||
QPushButton *advancedViewButton = new QPushButton(tr("Advanced View"));
|
||||
|
||||
QVBoxLayout *buttonLayout = new QVBoxLayout;
|
||||
QGroupBox *catBox = new QGroupBox();
|
||||
catBox->setLayout(buttonLayout);
|
||||
buttonLayout->addWidget(basicStartButton);
|
||||
buttonLayout->addWidget(basicStopButton);
|
||||
buttonLayout->addWidget(basicPauseButton);
|
||||
buttonLayout->addWidget(basicDeleteButton);
|
||||
buttonLayout->addWidget(basicRefreshButton);
|
||||
buttonLayout->addWidget(basicSSHButton);
|
||||
buttonLayout->addWidget(basicDashboardButton);
|
||||
buttonLayout->addWidget(advancedViewButton);
|
||||
catBox->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
|
||||
stackedWidget->addWidget(catBox);
|
||||
|
||||
connect(basicSSHButton, &QAbstractButton::clicked, this, &Window::sshConsole);
|
||||
connect(basicDashboardButton, &QAbstractButton::clicked, this, &Window::dashboardBrowser);
|
||||
connect(basicStartButton, &QAbstractButton::clicked, this, &Window::startSelectedMinikube);
|
||||
connect(basicStopButton, &QAbstractButton::clicked, this, &Window::stopMinikube);
|
||||
connect(basicPauseButton, &QAbstractButton::clicked, this, &Window::pauseOrUnpauseMinikube);
|
||||
connect(basicDeleteButton, &QAbstractButton::clicked, this, &Window::deleteMinikube);
|
||||
connect(basicRefreshButton, &QAbstractButton::clicked, this, &Window::updateClustersTable);
|
||||
connect(advancedViewButton, &QAbstractButton::clicked, this, &Window::toAdvancedView);
|
||||
}
|
||||
|
||||
void Window::toAdvancedView()
|
||||
{
|
||||
isBasicView = false;
|
||||
stackedWidget->setCurrentIndex(1);
|
||||
resize(600, 400);
|
||||
updateButtons();
|
||||
}
|
||||
|
||||
void Window::toBasicView()
|
||||
{
|
||||
isBasicView = true;
|
||||
stackedWidget->setCurrentIndex(0);
|
||||
resize(200, 250);
|
||||
updateButtons();
|
||||
}
|
||||
|
||||
void Window::createAdvancedView()
|
||||
{
|
||||
connect(sshButton, &QAbstractButton::clicked, this, &Window::sshConsole);
|
||||
connect(dashboardButton, &QAbstractButton::clicked, this, &Window::dashboardBrowser);
|
||||
connect(startButton, &QAbstractButton::clicked, this, &Window::startSelectedMinikube);
|
||||
connect(stopButton, &QAbstractButton::clicked, this, &Window::stopMinikube);
|
||||
connect(pauseButton, &QAbstractButton::clicked, this, &Window::pauseOrUnpauseMinikube);
|
||||
connect(deleteButton, &QAbstractButton::clicked, this, &Window::deleteMinikube);
|
||||
connect(refreshButton, &QAbstractButton::clicked, this, &Window::updateClustersTable);
|
||||
connect(createButton, &QAbstractButton::clicked, this, &Window::initMachine);
|
||||
|
||||
clusterGroupBox->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
|
||||
stackedWidget->addWidget(clusterGroupBox);
|
||||
}
|
||||
|
||||
void Window::setVisible(bool visible)
|
||||
{
|
||||
minimizeAction->setEnabled(visible);
|
||||
restoreAction->setEnabled(!visible);
|
||||
QDialog::setVisible(visible);
|
||||
}
|
||||
//! [1]
|
||||
|
||||
//! [2]
|
||||
void Window::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
#ifdef Q_OS_OSX
|
||||
#if __APPLE__
|
||||
if (!event->spontaneous() || !isVisible()) {
|
||||
return;
|
||||
}
|
||||
|
@ -146,16 +215,13 @@ void Window::closeEvent(QCloseEvent *event)
|
|||
event->ignore();
|
||||
}
|
||||
}
|
||||
//! [2]
|
||||
|
||||
//! [6]
|
||||
void Window::messageClicked()
|
||||
{
|
||||
QMessageBox::information(0, tr("Systray"),
|
||||
tr("Sorry, I already gave what help I could.\n"
|
||||
"Maybe you should try asking a human?"));
|
||||
}
|
||||
//! [6]
|
||||
|
||||
void Window::createActions()
|
||||
{
|
||||
|
@ -163,10 +229,60 @@ void Window::createActions()
|
|||
connect(minimizeAction, &QAction::triggered, this, &QWidget::hide);
|
||||
|
||||
restoreAction = new QAction(tr("&Restore"), this);
|
||||
connect(restoreAction, &QAction::triggered, this, &QWidget::showNormal);
|
||||
connect(restoreAction, &QAction::triggered, this, &Window::restoreWindow);
|
||||
|
||||
quitAction = new QAction(tr("&Quit"), this);
|
||||
connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit);
|
||||
|
||||
startAction = new QAction(tr("Start"), this);
|
||||
connect(startAction, &QAction::triggered, this, &Window::startSelectedMinikube);
|
||||
|
||||
pauseAction = new QAction(tr("Pause"), this);
|
||||
connect(pauseAction, &QAction::triggered, this, &Window::pauseOrUnpauseMinikube);
|
||||
|
||||
stopAction = new QAction(tr("Stop"), this);
|
||||
connect(stopAction, &QAction::triggered, this, &Window::stopMinikube);
|
||||
|
||||
statusAction = new QAction(tr("Status:"), this);
|
||||
statusAction->setEnabled(false);
|
||||
}
|
||||
|
||||
void Window::updateStatus(Cluster cluster)
|
||||
{
|
||||
QString status = cluster.status();
|
||||
if (status.isEmpty()) {
|
||||
status = "Stopped";
|
||||
}
|
||||
statusAction->setText("Status: " + status);
|
||||
}
|
||||
|
||||
void Window::iconActivated(QSystemTrayIcon::ActivationReason reason)
|
||||
{
|
||||
switch (reason) {
|
||||
case QSystemTrayIcon::Trigger:
|
||||
case QSystemTrayIcon::DoubleClick:
|
||||
Window::restoreWindow();
|
||||
break;
|
||||
default:;
|
||||
}
|
||||
}
|
||||
|
||||
void Window::restoreWindow()
|
||||
{
|
||||
bool wasVisible = isVisible();
|
||||
QWidget::showNormal();
|
||||
activateWindow();
|
||||
if (wasVisible) {
|
||||
return;
|
||||
}
|
||||
// without this delay window doesn't render until updateClusters() completes
|
||||
delay();
|
||||
updateClustersTable();
|
||||
}
|
||||
|
||||
void Window::delay()
|
||||
{
|
||||
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
|
||||
}
|
||||
|
||||
static QString minikubePath()
|
||||
|
@ -182,6 +298,12 @@ static QString minikubePath()
|
|||
void Window::createTrayIcon()
|
||||
{
|
||||
trayIconMenu = new QMenu(this);
|
||||
trayIconMenu->addAction(statusAction);
|
||||
trayIconMenu->addSeparator();
|
||||
trayIconMenu->addAction(startAction);
|
||||
trayIconMenu->addAction(pauseAction);
|
||||
trayIconMenu->addAction(stopAction);
|
||||
trayIconMenu->addSeparator();
|
||||
trayIconMenu->addAction(minimizeAction);
|
||||
trayIconMenu->addAction(restoreAction);
|
||||
trayIconMenu->addSeparator();
|
||||
|
@ -190,51 +312,104 @@ void Window::createTrayIcon()
|
|||
trayIcon = new QSystemTrayIcon(this);
|
||||
trayIcon->setContextMenu(trayIconMenu);
|
||||
trayIcon->setIcon(*trayIconIcon);
|
||||
|
||||
connect(trayIcon, &QSystemTrayIcon::activated, this, &Window::iconActivated);
|
||||
}
|
||||
|
||||
void Window::startMinikube()
|
||||
void Window::startMinikube(QStringList moreArgs)
|
||||
{
|
||||
QStringList args = { "start", "-p", selectedCluster() };
|
||||
sendMinikubeCommand(args);
|
||||
updateClusters();
|
||||
QString text;
|
||||
QStringList args = { "start", "-o", "json" };
|
||||
args << moreArgs;
|
||||
bool success = sendMinikubeCommand(args, text);
|
||||
updateClustersTable();
|
||||
if (success) {
|
||||
return;
|
||||
}
|
||||
outputFailedStart(text);
|
||||
}
|
||||
|
||||
void Window::startSelectedMinikube()
|
||||
{
|
||||
QStringList args = { "-p", selectedClusterName() };
|
||||
return startMinikube(args);
|
||||
}
|
||||
|
||||
void Window::stopMinikube()
|
||||
{
|
||||
QStringList args = { "stop", "-p", selectedCluster() };
|
||||
QStringList args = { "stop", "-p", selectedClusterName() };
|
||||
sendMinikubeCommand(args);
|
||||
updateClusters();
|
||||
updateClustersTable();
|
||||
}
|
||||
|
||||
void Window::pauseMinikube()
|
||||
{
|
||||
QStringList args = { "pause", "-p", selectedClusterName() };
|
||||
sendMinikubeCommand(args);
|
||||
updateClustersTable();
|
||||
}
|
||||
|
||||
void Window::unpauseMinikube()
|
||||
{
|
||||
QStringList args = { "unpause", "-p", selectedClusterName() };
|
||||
sendMinikubeCommand(args);
|
||||
updateClustersTable();
|
||||
}
|
||||
|
||||
void Window::deleteMinikube()
|
||||
{
|
||||
QStringList args = { "delete", "-p", selectedCluster() };
|
||||
QStringList args = { "delete", "-p", selectedClusterName() };
|
||||
sendMinikubeCommand(args);
|
||||
updateClusters();
|
||||
updateClustersTable();
|
||||
}
|
||||
|
||||
void Window::updateClusters()
|
||||
void Window::updateClustersTable()
|
||||
{
|
||||
QString cluster = selectedCluster();
|
||||
clusterModel->setClusters(getClusters());
|
||||
setSelectedCluster(cluster);
|
||||
showLoading();
|
||||
QString cluster = selectedClusterName();
|
||||
updateClusterList();
|
||||
clusterModel->setClusters(clusterList);
|
||||
setSelectedClusterName(cluster);
|
||||
updateButtons();
|
||||
loading->setHidden(true);
|
||||
clusterListView->setEnabled(true);
|
||||
hideLoading();
|
||||
}
|
||||
|
||||
ClusterList Window::getClusters()
|
||||
void Window::showLoading()
|
||||
{
|
||||
clusterListView->setEnabled(false);
|
||||
loading->setHidden(false);
|
||||
loading->raise();
|
||||
int width = getCenter(loading->width(), clusterListView->width());
|
||||
int height = getCenter(loading->height(), clusterListView->height());
|
||||
loading->move(width, height);
|
||||
delay();
|
||||
}
|
||||
|
||||
void Window::hideLoading()
|
||||
{
|
||||
loading->setHidden(true);
|
||||
clusterListView->setEnabled(true);
|
||||
}
|
||||
|
||||
int Window::getCenter(int widgetSize, int parentSize)
|
||||
{
|
||||
return parentSize / 2 - widgetSize / 2;
|
||||
}
|
||||
|
||||
void Window::updateClusterList()
|
||||
{
|
||||
ClusterList clusters;
|
||||
QStringList args = { "profile", "list", "-o", "json" };
|
||||
QString text;
|
||||
bool success = sendMinikubeCommand(args, text);
|
||||
sendMinikubeCommand(args, text);
|
||||
QStringList lines;
|
||||
if (success) {
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
|
||||
lines = text.split("\n", Qt::SkipEmptyParts);
|
||||
lines = text.split("\n", Qt::SkipEmptyParts);
|
||||
#else
|
||||
lines = text.split("\n", QString::SkipEmptyParts);
|
||||
lines = text.split("\n", QString::SkipEmptyParts);
|
||||
#endif
|
||||
}
|
||||
for (int i = 0; i < lines.size(); i++) {
|
||||
QString line = lines.at(i);
|
||||
QJsonParseError error;
|
||||
|
@ -243,67 +418,83 @@ ClusterList Window::getClusters()
|
|||
qDebug() << error.errorString();
|
||||
continue;
|
||||
}
|
||||
if (json.isObject()) {
|
||||
QJsonObject par = json.object();
|
||||
QJsonArray a = par["valid"].toArray();
|
||||
for (int j = 0; j < a.size(); j++) {
|
||||
QJsonObject obj = a[j].toObject();
|
||||
QString name;
|
||||
if (obj.contains("Name")) {
|
||||
name = obj["Name"].toString();
|
||||
}
|
||||
if (name.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
Cluster cluster(name);
|
||||
if (obj.contains("Status")) {
|
||||
QString status = obj["Status"].toString();
|
||||
cluster.setStatus(status);
|
||||
}
|
||||
if (!obj.contains("Config")) {
|
||||
clusters << cluster;
|
||||
continue;
|
||||
}
|
||||
QJsonObject config = obj["Config"].toObject();
|
||||
if (config.contains("CPUs")) {
|
||||
int cpus = config["CPUs"].toInt();
|
||||
cluster.setCpus(cpus);
|
||||
}
|
||||
if (config.contains("Memory")) {
|
||||
int memory = config["Memory"].toInt();
|
||||
cluster.setMemory(memory);
|
||||
}
|
||||
if (config.contains("Driver")) {
|
||||
QString driver = config["Driver"].toString();
|
||||
cluster.setDriver(driver);
|
||||
}
|
||||
if (!config.contains("KubernetesConfig")) {
|
||||
clusters << cluster;
|
||||
continue;
|
||||
}
|
||||
QJsonObject k8sConfig = config["KubernetesConfig"].toObject();
|
||||
if (k8sConfig.contains("ContainerRuntime")) {
|
||||
QString containerRuntime = k8sConfig["ContainerRuntime"].toString();
|
||||
cluster.setContainerRuntime(containerRuntime);
|
||||
}
|
||||
clusters << cluster;
|
||||
}
|
||||
if (!json.isObject()) {
|
||||
continue;
|
||||
}
|
||||
QJsonObject par = json.object();
|
||||
QJsonArray valid = par["valid"].toArray();
|
||||
QJsonArray invalid = par["invalid"].toArray();
|
||||
for (int i = 0; i < valid.size(); i++) {
|
||||
QJsonObject obj = valid[i].toObject();
|
||||
Cluster cluster = createClusterObject(obj);
|
||||
clusters << cluster;
|
||||
}
|
||||
for (int i = 0; i < invalid.size(); i++) {
|
||||
QJsonObject obj = invalid[i].toObject();
|
||||
Cluster cluster = createClusterObject(obj);
|
||||
cluster.setStatus("Invalid");
|
||||
clusters << cluster;
|
||||
}
|
||||
}
|
||||
return clusters;
|
||||
clusterList = clusters;
|
||||
}
|
||||
|
||||
QString Window::selectedCluster()
|
||||
Cluster Window::createClusterObject(QJsonObject obj)
|
||||
{
|
||||
QString name;
|
||||
if (obj.contains("Name")) {
|
||||
name = obj["Name"].toString();
|
||||
}
|
||||
Cluster cluster(name);
|
||||
if (obj.contains("Status")) {
|
||||
QString status = obj["Status"].toString();
|
||||
cluster.setStatus(status);
|
||||
}
|
||||
if (!obj.contains("Config")) {
|
||||
return cluster;
|
||||
}
|
||||
QJsonObject config = obj["Config"].toObject();
|
||||
if (config.contains("CPUs")) {
|
||||
int cpus = config["CPUs"].toInt();
|
||||
cluster.setCpus(cpus);
|
||||
}
|
||||
if (config.contains("Memory")) {
|
||||
int memory = config["Memory"].toInt();
|
||||
cluster.setMemory(memory);
|
||||
}
|
||||
if (config.contains("Driver")) {
|
||||
QString driver = config["Driver"].toString();
|
||||
cluster.setDriver(driver);
|
||||
}
|
||||
if (!config.contains("KubernetesConfig")) {
|
||||
return cluster;
|
||||
}
|
||||
QJsonObject k8sConfig = config["KubernetesConfig"].toObject();
|
||||
if (k8sConfig.contains("ContainerRuntime")) {
|
||||
QString containerRuntime = k8sConfig["ContainerRuntime"].toString();
|
||||
cluster.setContainerRuntime(containerRuntime);
|
||||
}
|
||||
if (k8sConfig.contains("KubernetesVersion")) {
|
||||
QString k8sVersion = k8sConfig["KubernetesVersion"].toString();
|
||||
cluster.setK8sVersion(k8sVersion);
|
||||
}
|
||||
return cluster;
|
||||
}
|
||||
|
||||
QString Window::selectedClusterName()
|
||||
{
|
||||
if (isBasicView) {
|
||||
return "minikube";
|
||||
}
|
||||
QModelIndex index = clusterListView->currentIndex();
|
||||
QVariant variant = index.data(Qt::DisplayRole);
|
||||
QVariant variant = index.siblingAtColumn(0).data(Qt::DisplayRole);
|
||||
if (variant.isNull()) {
|
||||
return QString();
|
||||
}
|
||||
return variant.toString();
|
||||
}
|
||||
|
||||
void Window::setSelectedCluster(QString cluster)
|
||||
void Window::setSelectedClusterName(QString cluster)
|
||||
{
|
||||
QAbstractItemModel *model = clusterListView->model();
|
||||
QModelIndex start = model->index(0, 0);
|
||||
|
@ -318,7 +509,8 @@ void Window::createClusterGroupBox()
|
|||
{
|
||||
clusterGroupBox = new QGroupBox(tr("Clusters"));
|
||||
|
||||
ClusterList clusters = getClusters();
|
||||
updateClusterList();
|
||||
ClusterList clusters = clusterList;
|
||||
clusterModel = new ClusterModel(clusters);
|
||||
|
||||
clusterListView = new QTableView();
|
||||
|
@ -331,28 +523,32 @@ void Window::createClusterGroupBox()
|
|||
clusterListView->horizontalHeader()->setSectionResizeMode(3, QHeaderView::ResizeToContents);
|
||||
clusterListView->horizontalHeader()->setSectionResizeMode(4, QHeaderView::ResizeToContents);
|
||||
clusterListView->horizontalHeader()->setSectionResizeMode(5, QHeaderView::ResizeToContents);
|
||||
setSelectedCluster("default");
|
||||
clusterListView->horizontalHeader()->setSectionResizeMode(6, QHeaderView::ResizeToContents);
|
||||
setSelectedClusterName("default");
|
||||
|
||||
connect(clusterListView, SIGNAL(clicked(QModelIndex)), this, SLOT(updateButtons()));
|
||||
|
||||
startButton = new QPushButton(tr("Start"));
|
||||
stopButton = new QPushButton(tr("Stop"));
|
||||
pauseButton = new QPushButton(tr("Pause"));
|
||||
deleteButton = new QPushButton(tr("Delete"));
|
||||
refreshButton = new QPushButton(tr("Refresh"));
|
||||
createButton = new QPushButton(tr("Create"));
|
||||
sshButton = new QPushButton(tr("SSH"));
|
||||
dashboardButton = new QPushButton(tr("Dashboard"));
|
||||
|
||||
updateButtons();
|
||||
QPushButton *basicViewButton = new QPushButton(tr("Basic View"));
|
||||
connect(basicViewButton, &QAbstractButton::clicked, this, &Window::toBasicView);
|
||||
|
||||
QHBoxLayout *topButtonLayout = new QHBoxLayout;
|
||||
topButtonLayout->addWidget(createButton);
|
||||
topButtonLayout->addWidget(refreshButton);
|
||||
topButtonLayout->addWidget(basicViewButton);
|
||||
topButtonLayout->addSpacing(340);
|
||||
|
||||
QHBoxLayout *bottomButtonLayout = new QHBoxLayout;
|
||||
bottomButtonLayout->addWidget(startButton);
|
||||
bottomButtonLayout->addWidget(stopButton);
|
||||
bottomButtonLayout->addWidget(pauseButton);
|
||||
bottomButtonLayout->addWidget(deleteButton);
|
||||
bottomButtonLayout->addWidget(sshButton);
|
||||
bottomButtonLayout->addWidget(dashboardButton);
|
||||
|
@ -362,43 +558,113 @@ void Window::createClusterGroupBox()
|
|||
clusterLayout->addWidget(clusterListView);
|
||||
clusterLayout->addLayout(bottomButtonLayout);
|
||||
clusterGroupBox->setLayout(clusterLayout);
|
||||
|
||||
QFont *loadingFont = new QFont();
|
||||
loadingFont->setPointSize(30);
|
||||
loading = new QLabel("Loading...");
|
||||
loading->setFont(*loadingFont);
|
||||
loading->setParent(clusterListView);
|
||||
loading->setHidden(true);
|
||||
}
|
||||
|
||||
void Window::updateButtons()
|
||||
{
|
||||
QString cluster = selectedCluster();
|
||||
if (cluster.isEmpty()) {
|
||||
startButton->setEnabled(false);
|
||||
stopButton->setEnabled(false);
|
||||
deleteButton->setEnabled(false);
|
||||
sshButton->setEnabled(false);
|
||||
dashboardButton->setEnabled(false);
|
||||
return;
|
||||
}
|
||||
deleteButton->setEnabled(true);
|
||||
Cluster clusterHash = getClusterHash()[cluster];
|
||||
if (clusterHash.status() == "Running") {
|
||||
startButton->setEnabled(false);
|
||||
stopButton->setEnabled(true);
|
||||
#if __linux__
|
||||
sshButton->setEnabled(true);
|
||||
#endif
|
||||
dashboardButton->setEnabled(true);
|
||||
Cluster cluster = selectedCluster();
|
||||
if (isBasicView) {
|
||||
updateBasicButtons(cluster);
|
||||
} else {
|
||||
startButton->setEnabled(true);
|
||||
stopButton->setEnabled(false);
|
||||
updateAdvancedButtons(cluster);
|
||||
}
|
||||
updateTrayActions(cluster);
|
||||
updateStatus(cluster);
|
||||
}
|
||||
|
||||
ClusterHash Window::getClusterHash()
|
||||
void Window::updateTrayActions(Cluster cluster)
|
||||
{
|
||||
ClusterList clusters = getClusters();
|
||||
bool isRunning = cluster.status() == "Running";
|
||||
bool isPaused = cluster.status() == "Paused";
|
||||
pauseAction->setEnabled(isRunning || isPaused);
|
||||
stopAction->setEnabled(isRunning || isPaused);
|
||||
pauseAction->setText(getPauseLabel(isRunning));
|
||||
startAction->setText(getStartLabel(isRunning));
|
||||
}
|
||||
|
||||
Cluster Window::selectedCluster()
|
||||
{
|
||||
QString clusterName = selectedClusterName();
|
||||
if (clusterName.isEmpty()) {
|
||||
return Cluster();
|
||||
}
|
||||
ClusterList clusters = clusterList;
|
||||
ClusterHash clusterHash;
|
||||
for (int i = 0; i < clusters.size(); i++) {
|
||||
Cluster cluster = clusters.at(i);
|
||||
clusterHash[cluster.name()] = cluster;
|
||||
}
|
||||
return clusterHash;
|
||||
return clusterHash[clusterName];
|
||||
}
|
||||
|
||||
void Window::updateBasicButtons(Cluster cluster)
|
||||
{
|
||||
bool exists = !cluster.isEmpty();
|
||||
bool isRunning = cluster.status() == "Running";
|
||||
bool isPaused = cluster.status() == "Paused";
|
||||
basicStopButton->setEnabled(isRunning || isPaused);
|
||||
basicPauseButton->setEnabled(isRunning || isPaused);
|
||||
basicDeleteButton->setEnabled(exists);
|
||||
basicDashboardButton->setEnabled(isRunning);
|
||||
#if __linux__ || __APPLE__
|
||||
basicSSHButton->setEnabled(exists);
|
||||
#else
|
||||
basicSSHButton->setEnabled(false);
|
||||
#endif
|
||||
basicPauseButton->setText(getPauseLabel(isPaused));
|
||||
basicStartButton->setText(getStartLabel(isRunning));
|
||||
}
|
||||
|
||||
QString Window::getPauseLabel(bool isPaused)
|
||||
{
|
||||
if (isPaused) {
|
||||
return tr("Unpause");
|
||||
}
|
||||
return tr("Pause");
|
||||
}
|
||||
|
||||
QString Window::getStartLabel(bool isRunning)
|
||||
{
|
||||
if (isRunning) {
|
||||
return tr("Reload");
|
||||
}
|
||||
return tr("Start");
|
||||
}
|
||||
|
||||
void Window::pauseOrUnpauseMinikube()
|
||||
{
|
||||
Cluster cluster = selectedCluster();
|
||||
if (cluster.status() == "Paused") {
|
||||
unpauseMinikube();
|
||||
return;
|
||||
}
|
||||
pauseMinikube();
|
||||
}
|
||||
|
||||
void Window::updateAdvancedButtons(Cluster cluster)
|
||||
{
|
||||
bool exists = !cluster.isEmpty();
|
||||
bool isRunning = cluster.status() == "Running";
|
||||
bool isPaused = cluster.status() == "Paused";
|
||||
startButton->setEnabled(exists);
|
||||
stopButton->setEnabled(isRunning || isPaused);
|
||||
pauseButton->setEnabled(isRunning || isPaused);
|
||||
deleteButton->setEnabled(exists);
|
||||
dashboardButton->setEnabled(isRunning);
|
||||
#if __linux__ || __APPLE__
|
||||
sshButton->setEnabled(exists);
|
||||
#else
|
||||
sshButton->setEnabled(false);
|
||||
#endif
|
||||
pauseButton->setText(getPauseLabel(isPaused));
|
||||
startButton->setText(getStartLabel(isRunning));
|
||||
}
|
||||
|
||||
bool Window::sendMinikubeCommand(QStringList cmds)
|
||||
|
@ -413,20 +679,27 @@ bool Window::sendMinikubeCommand(QStringList cmds, QString &text)
|
|||
if (program.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
QStringList arguments;
|
||||
QStringList arguments = { "--user", "minikube-gui" };
|
||||
arguments << cmds;
|
||||
bool success;
|
||||
|
||||
QProcess *process = new QProcess(this);
|
||||
#if __APPLE__
|
||||
if (env.isEmpty()) {
|
||||
env = setMacEnv();
|
||||
}
|
||||
process->setProcessEnvironment(env);
|
||||
#endif
|
||||
process->start(program, arguments);
|
||||
this->setCursor(Qt::WaitCursor);
|
||||
success = process->waitForFinished(300 * 1000);
|
||||
bool timedOut = process->waitForFinished(300 * 1000);
|
||||
int exitCode = process->exitCode();
|
||||
bool success = !timedOut && exitCode == 0;
|
||||
this->unsetCursor();
|
||||
|
||||
text = process->readAllStandardOutput();
|
||||
if (success) {
|
||||
text = process->readAllStandardOutput();
|
||||
} else {
|
||||
qDebug() << process->readAllStandardOutput();
|
||||
qDebug() << text;
|
||||
qDebug() << process->readAllStandardError();
|
||||
}
|
||||
delete process;
|
||||
|
@ -438,6 +711,7 @@ static int cpus = 2;
|
|||
static int memory = 2400;
|
||||
static QString driver = "";
|
||||
static QString containerRuntime = "";
|
||||
static QString k8sVersion = "";
|
||||
|
||||
void Window::askName()
|
||||
{
|
||||
|
@ -459,8 +733,8 @@ void Window::askName()
|
|||
int code = dialog.exec();
|
||||
profile = profileField.text();
|
||||
if (code == QDialog::Accepted) {
|
||||
QStringList arg = { "start", "-p", profile };
|
||||
sendMinikubeCommand(arg);
|
||||
QStringList args = { "-p", profile };
|
||||
startMinikube(args);
|
||||
} else if (code == QDialog::Rejected) {
|
||||
askCustom();
|
||||
}
|
||||
|
@ -475,24 +749,21 @@ void Window::askCustom()
|
|||
|
||||
QFormLayout form(&dialog);
|
||||
driverComboBox = new QComboBox;
|
||||
driverComboBox->addItem("docker");
|
||||
driverComboBox->addItems({ "docker", "virtualbox", "vmware", "podman" });
|
||||
#if __linux__
|
||||
driverComboBox->addItem("kvm2");
|
||||
#elif __APPLE__
|
||||
driverComboBox->addItem("hyperkit");
|
||||
driverComboBox->addItem("parallels");
|
||||
driverComboBox->addItems({ "hyperkit", "parallels" });
|
||||
#else
|
||||
driverComboBox->addItem("hyperv");
|
||||
#endif
|
||||
driverComboBox->addItem("virtualbox");
|
||||
driverComboBox->addItem("vmware");
|
||||
driverComboBox->addItem("podman");
|
||||
form.addRow(new QLabel(tr("Driver")), driverComboBox);
|
||||
containerRuntimeComboBox = new QComboBox;
|
||||
containerRuntimeComboBox->addItem("docker");
|
||||
containerRuntimeComboBox->addItem("containerd");
|
||||
containerRuntimeComboBox->addItem("crio");
|
||||
containerRuntimeComboBox->addItems({ "docker", "containerd", "crio" });
|
||||
form.addRow(new QLabel(tr("Container Runtime")), containerRuntimeComboBox);
|
||||
k8sVersionComboBox = new QComboBox;
|
||||
k8sVersionComboBox->addItems({ "stable", "latest", "none" });
|
||||
form.addRow(new QLabel(tr("Kubernetes Version")), k8sVersionComboBox);
|
||||
QLineEdit cpuField(QString::number(cpus), &dialog);
|
||||
form.addRow(new QLabel(tr("CPUs")), &cpuField);
|
||||
QLineEdit memoryField(QString::number(memory), &dialog);
|
||||
|
@ -510,27 +781,105 @@ void Window::askCustom()
|
|||
driver = driverComboBox->itemText(driverComboBox->currentIndex());
|
||||
containerRuntime =
|
||||
containerRuntimeComboBox->itemText(containerRuntimeComboBox->currentIndex());
|
||||
k8sVersion = k8sVersionComboBox->itemText(k8sVersionComboBox->currentIndex());
|
||||
if (k8sVersion == "none") {
|
||||
k8sVersion = "v0.0.0";
|
||||
}
|
||||
cpus = cpuField.text().toInt();
|
||||
memory = memoryField.text().toInt();
|
||||
QStringList args = { "start",
|
||||
"-p",
|
||||
QStringList args = { "-p",
|
||||
profile,
|
||||
"--driver",
|
||||
driver,
|
||||
"--container-runtime",
|
||||
containerRuntime,
|
||||
"--kubernetes-version",
|
||||
k8sVersion,
|
||||
"--cpus",
|
||||
QString::number(cpus),
|
||||
"--memory",
|
||||
QString::number(memory) };
|
||||
sendMinikubeCommand(args);
|
||||
startMinikube(args);
|
||||
}
|
||||
}
|
||||
|
||||
void Window::outputFailedStart(QString text)
|
||||
{
|
||||
QStringList lines;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
|
||||
lines = text.split("\n", Qt::SkipEmptyParts);
|
||||
#else
|
||||
lines = text.split("\n", QString::SkipEmptyParts);
|
||||
#endif
|
||||
for (int i = 0; i < lines.size(); i++) {
|
||||
QString line = lines.at(i);
|
||||
QJsonParseError error;
|
||||
QJsonDocument json = QJsonDocument::fromJson(line.toUtf8(), &error);
|
||||
if (json.isNull() || !json.isObject()) {
|
||||
continue;
|
||||
}
|
||||
QJsonObject par = json.object();
|
||||
QJsonObject data = par["data"].toObject();
|
||||
if (!data.contains("exitcode")) {
|
||||
continue;
|
||||
}
|
||||
QString advice = data["advice"].toString();
|
||||
QString message = data["message"].toString();
|
||||
QString name = data["name"].toString();
|
||||
QString url = data["url"].toString();
|
||||
QString issues = data["issues"].toString();
|
||||
|
||||
QDialog dialog;
|
||||
dialog.setWindowTitle(tr("minikube start failed"));
|
||||
dialog.setWindowIcon(*trayIconIcon);
|
||||
dialog.setFixedWidth(600);
|
||||
dialog.setModal(true);
|
||||
QFormLayout form(&dialog);
|
||||
createLabel("Error Code", name, &form, false);
|
||||
createLabel("Advice", advice, &form, false);
|
||||
QLabel *errorMessage = createLabel("Error Message", message, &form, false);
|
||||
int pointSize = errorMessage->font().pointSize();
|
||||
errorMessage->setFont(QFont("Courier", pointSize));
|
||||
errorMessage->setAutoFillBackground(true);
|
||||
QPalette pal = errorMessage->palette();
|
||||
QColor color = pal.window().color().lighter();
|
||||
pal.setColor(errorMessage->backgroundRole(), color);
|
||||
errorMessage->setPalette(pal);
|
||||
createLabel("Link to documentation", url, &form, true);
|
||||
createLabel("Link to related issue", issues, &form, true);
|
||||
QLabel *fileLabel = new QLabel(this);
|
||||
fileLabel->setOpenExternalLinks(true);
|
||||
fileLabel->setWordWrap(true);
|
||||
QString logFile = QDir::homePath() + "/.minikube/logs/lastStart.txt";
|
||||
fileLabel->setText("<a href='file:///" + logFile + "'>View log file</a>");
|
||||
form.addRow(fileLabel);
|
||||
QDialogButtonBox buttonBox(Qt::Horizontal, &dialog);
|
||||
buttonBox.addButton(QString(tr("OK")), QDialogButtonBox::AcceptRole);
|
||||
connect(&buttonBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
|
||||
form.addRow(&buttonBox);
|
||||
dialog.exec();
|
||||
}
|
||||
}
|
||||
|
||||
QLabel *Window::createLabel(QString title, QString text, QFormLayout *form, bool isLink)
|
||||
{
|
||||
QLabel *label = new QLabel(this);
|
||||
if (!text.isEmpty()) {
|
||||
form->addRow(label);
|
||||
}
|
||||
if (isLink) {
|
||||
label->setOpenExternalLinks(true);
|
||||
text = "<a href='" + text + "'>" + text + "</a>";
|
||||
}
|
||||
label->setWordWrap(true);
|
||||
label->setText(title + ": " + text);
|
||||
return label;
|
||||
}
|
||||
|
||||
void Window::initMachine()
|
||||
{
|
||||
askName();
|
||||
updateClusters();
|
||||
updateClustersTable();
|
||||
}
|
||||
|
||||
void Window::sshConsole()
|
||||
|
@ -549,7 +898,7 @@ void Window::sshConsole()
|
|||
console->setTerminalFont(font);
|
||||
console->setColorScheme("Tango");
|
||||
console->setShellProgram(program);
|
||||
QStringList args = { "ssh" };
|
||||
QStringList args = { "ssh", "-p", selectedClusterName() };
|
||||
console->setArgs(args);
|
||||
console->startShellProgram();
|
||||
|
||||
|
@ -559,6 +908,14 @@ void Window::sshConsole()
|
|||
mainWindow->resize(800, 400);
|
||||
mainWindow->setCentralWidget(console);
|
||||
mainWindow->show();
|
||||
#elif __APPLE__
|
||||
QString command = program + " ssh -p " + selectedClusterName();
|
||||
QStringList arguments = { "-e", "tell app \"Terminal\"",
|
||||
"-e", "activate",
|
||||
"-e", "do script \"" + command + "\"",
|
||||
"-e", "end tell" };
|
||||
QProcess *process = new QProcess(this);
|
||||
process->start("/usr/bin/osascript", arguments);
|
||||
#else
|
||||
QString terminal = qEnvironmentVariable("TERMINAL");
|
||||
if (terminal.isEmpty()) {
|
||||
|
@ -568,7 +925,7 @@ void Window::sshConsole()
|
|||
}
|
||||
}
|
||||
|
||||
QStringList arguments = { "-e", QString("%1 ssh -p %2").arg(program, selectedCluster()) };
|
||||
QStringList arguments = { "-e", QString("%1 ssh -p %2").arg(program, selectedClusterName()) };
|
||||
QProcess *process = new QProcess(this);
|
||||
process->start(QStandardPaths::findExecutable(terminal), arguments);
|
||||
#endif
|
||||
|
@ -580,7 +937,7 @@ void Window::dashboardBrowser()
|
|||
|
||||
QString program = minikubePath();
|
||||
QProcess *process = new QProcess(this);
|
||||
QStringList arguments = { "dashboard", "-p", selectedCluster() };
|
||||
QStringList arguments = { "dashboard", "-p", selectedClusterName() };
|
||||
process->start(program, arguments);
|
||||
|
||||
dashboardProcess = process;
|
||||
|
|
113
gui/window.h
113
gui/window.h
|
@ -55,6 +55,9 @@
|
|||
#define WINDOW_H
|
||||
|
||||
#include <QSystemTrayIcon>
|
||||
#include <QFormLayout>
|
||||
#include <QStackedWidget>
|
||||
#include <QProcessEnvironment>
|
||||
|
||||
#ifndef QT_NO_SYSTEMTRAYICON
|
||||
|
||||
|
@ -78,7 +81,6 @@ QT_END_NAMESPACE
|
|||
|
||||
#include "cluster.h"
|
||||
|
||||
//! [0]
|
||||
class Window : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -97,50 +99,101 @@ private slots:
|
|||
void dashboardClose();
|
||||
|
||||
private:
|
||||
void createActionGroupBox();
|
||||
void createActions();
|
||||
// Tray icon
|
||||
void createTrayIcon();
|
||||
void startMinikube();
|
||||
void stopMinikube();
|
||||
void deleteMinikube();
|
||||
ClusterList getClusters();
|
||||
QString selectedCluster();
|
||||
void setSelectedCluster(QString cluster);
|
||||
QTableView *clusterListView;
|
||||
void createActions();
|
||||
void updateStatus(Cluster cluster);
|
||||
void updateTrayActions(Cluster cluster);
|
||||
void iconActivated(QSystemTrayIcon::ActivationReason reason);
|
||||
QAction *minimizeAction;
|
||||
QAction *restoreAction;
|
||||
QAction *quitAction;
|
||||
QAction *startAction;
|
||||
QAction *pauseAction;
|
||||
QAction *stopAction;
|
||||
QAction *statusAction;
|
||||
QSystemTrayIcon *trayIcon;
|
||||
QMenu *trayIconMenu;
|
||||
QIcon *trayIconIcon;
|
||||
|
||||
// Basic view
|
||||
void createBasicView();
|
||||
void toBasicView();
|
||||
void updateBasicButtons(Cluster cluster);
|
||||
QPushButton *basicStartButton;
|
||||
QPushButton *basicStopButton;
|
||||
QPushButton *basicPauseButton;
|
||||
QPushButton *basicDeleteButton;
|
||||
QPushButton *basicRefreshButton;
|
||||
QPushButton *basicSSHButton;
|
||||
QPushButton *basicDashboardButton;
|
||||
|
||||
// Advanced view
|
||||
void createAdvancedView();
|
||||
void toAdvancedView();
|
||||
void createClusterGroupBox();
|
||||
void updateAdvancedButtons(Cluster cluster);
|
||||
QPushButton *startButton;
|
||||
QPushButton *stopButton;
|
||||
QPushButton *pauseButton;
|
||||
QPushButton *deleteButton;
|
||||
QPushButton *refreshButton;
|
||||
QPushButton *createButton;
|
||||
QPushButton *sshButton;
|
||||
QPushButton *dashboardButton;
|
||||
QGroupBox *clusterGroupBox;
|
||||
|
||||
// Cluster table
|
||||
QString selectedClusterName();
|
||||
void setSelectedClusterName(QString cluster);
|
||||
Cluster selectedCluster();
|
||||
void updateClusterList();
|
||||
void updateClustersTable();
|
||||
void showLoading();
|
||||
void hideLoading();
|
||||
ClusterModel *clusterModel;
|
||||
ClusterHash getClusterHash();
|
||||
bool sendMinikubeCommand(QStringList cmds);
|
||||
bool sendMinikubeCommand(QStringList cmds, QString &text);
|
||||
void updateClusters();
|
||||
QTableView *clusterListView;
|
||||
ClusterList clusterList;
|
||||
QLabel *loading;
|
||||
|
||||
// Create cluster
|
||||
void askCustom();
|
||||
void askName();
|
||||
QComboBox *driverComboBox;
|
||||
QComboBox *containerRuntimeComboBox;
|
||||
QComboBox *k8sVersionComboBox;
|
||||
|
||||
// Commands
|
||||
void startMinikube(QStringList args);
|
||||
void startSelectedMinikube();
|
||||
void stopMinikube();
|
||||
void pauseMinikube();
|
||||
void unpauseMinikube();
|
||||
void pauseOrUnpauseMinikube();
|
||||
void deleteMinikube();
|
||||
bool sendMinikubeCommand(QStringList cmds);
|
||||
bool sendMinikubeCommand(QStringList cmds, QString &text);
|
||||
void initMachine();
|
||||
void sshConsole();
|
||||
void dashboardBrowser();
|
||||
void checkForMinikube();
|
||||
QPushButton *sshButton;
|
||||
QPushButton *dashboardButton;
|
||||
Cluster createClusterObject(QJsonObject obj);
|
||||
QProcess *dashboardProcess;
|
||||
QProcessEnvironment env;
|
||||
|
||||
QPushButton *startButton;
|
||||
QPushButton *stopButton;
|
||||
QPushButton *deleteButton;
|
||||
QPushButton *refreshButton;
|
||||
QPushButton *createButton;
|
||||
// Error messaging
|
||||
void outputFailedStart(QString text);
|
||||
QLabel *createLabel(QString title, QString text, QFormLayout *form, bool isLink);
|
||||
|
||||
QAction *minimizeAction;
|
||||
QAction *restoreAction;
|
||||
QAction *quitAction;
|
||||
|
||||
QSystemTrayIcon *trayIcon;
|
||||
QMenu *trayIconMenu;
|
||||
QIcon *trayIconIcon;
|
||||
void checkForMinikube();
|
||||
void restoreWindow();
|
||||
QString getPauseLabel(bool isPaused);
|
||||
QString getStartLabel(bool isRunning);
|
||||
QProcessEnvironment setMacEnv();
|
||||
QStackedWidget *stackedWidget;
|
||||
bool isBasicView;
|
||||
void delay();
|
||||
int getCenter(int widgetSize, int parentSize);
|
||||
};
|
||||
//! [0]
|
||||
|
||||
#endif // QT_NO_SYSTEMTRAYICON
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -x
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ if (($# < 1)); then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
VERSION_TO_INSTALL=1.18
|
||||
VERSION_TO_INSTALL=1.18.1
|
||||
INSTALL_PATH=${1}
|
||||
|
||||
function current_arch() {
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -e
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
set -e
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -e
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
set -e
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -e
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
set -e
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -e
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -e
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -e
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
|
||||
set -e
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -e
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -e
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
# limitations under the License.
|
||||
|
||||
# This script builds the minikube binary for all 3 platforms and uploads them.
|
||||
# This is to done as part of the CI tests for Github PRs
|
||||
# This is to done as part of the CI tests for GitHub PRs
|
||||
|
||||
# The script expects the following env variables:
|
||||
# ghprbPullId: The pull request ID, injected from the ghpbr plugin.
|
||||
|
|
|
@ -15,14 +15,14 @@
|
|||
# limitations under the License.
|
||||
|
||||
|
||||
# This script creates several Github statuses using the Github API: https://developer.github.com/v3/repos/statuses/
|
||||
# This is intended to run before the tests start, so the icons show up on the Github PR and block submit until
|
||||
# This script creates several GitHub statuses using the GitHub API: https://developer.github.com/v3/repos/statuses/
|
||||
# This is intended to run before the tests start, so the icons show up on the GitHub PR and block submit until
|
||||
# the tests finish.
|
||||
|
||||
# The script expects the following env variables:
|
||||
# ghprbPullId: The pull request ID, injected from the ghpbr plugin.
|
||||
# ghprbActualCommit: The commit hash, injected from the ghpbr plugin.
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -eux -o pipefail
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
|
||||
set -e
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
|
||||
set -ex
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# MINIKUBE_LOCATION: GIT_COMMIT from upstream build.
|
||||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
|
||||
OS="darwin"
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
# VERSION_MINOR: The minor version of the tag to be released.
|
||||
# VERSION_BUILD: The build version of the tag to be released.
|
||||
# BUCKET: The GCP bucket the build files should be uploaded to.
|
||||
# GITHUB_TOKEN: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# GITHUB_TOKEN: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -eux -o pipefail
|
||||
readonly VERSION="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}"
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# This script generates the Github Release page and uploads all the binaries/etc to that page
|
||||
# This script generates the GitHub Release page and uploads all the binaries/etc to that page
|
||||
# This is intended to be run on a new release tag in order to generate the github release page for that release
|
||||
|
||||
# The script expects the following env variables:
|
||||
|
@ -22,7 +22,7 @@
|
|||
# VERSION_MINOR: The minor version of the tag to be released.
|
||||
# VERSION_BUILD: The build version of the tag to be released.
|
||||
# ISO_SHA256: The sha 256 of the minikube-iso for the current release.
|
||||
# GITHUB_TOKEN: The Github API access token. Injected by the Jenkins credential provider.
|
||||
# GITHUB_TOKEN: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -eux -o pipefail
|
||||
readonly VERSION="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}"
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# This script generates the Github Release page and uploads all the binaries/etc to that page
|
||||
# This script generates the GitHub Release page and uploads all the binaries/etc to that page
|
||||
# This is intended to be run on a new release tag in order to generate the github release page for that release
|
||||
|
||||
# The script expects the following env variables:
|
||||
|
|
|
@ -39,7 +39,7 @@ CLOSE_ISSUE_THRESHOLD=20
|
|||
|
||||
"${DIR}/../installers/check_install_gh.sh" || true
|
||||
|
||||
# Get a list of issues from Github and extract only those that look like flake issues.
|
||||
# Get a list of issues from GitHub and extract only those that look like flake issues.
|
||||
# Sort by test name for later usage.
|
||||
EXISTING_ISSUES_LIST=$(mktemp)
|
||||
gh issue list -L 10000 -s all -A "minikube-bot" -l kind/failing-test \
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
# flakes or uploads flakes to flake data.
|
||||
#
|
||||
# This script expects the following env variables:
|
||||
# MINIKUBE_LOCATION: The Github location being run on (e.g. master, 11000).
|
||||
# MINIKUBE_LOCATION: The GitHub location being run on (e.g. master, 11000).
|
||||
# COMMIT: Commit hash the tests ran on.
|
||||
# ROOT_JOB_ID: Job ID to use for synchronization.
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ func main() {
|
|||
}
|
||||
data := Data{StableVersion: stable, LatestVersion: latest, LatestVersionMM: latestMM, LatestVersionP0: latestP0}
|
||||
|
||||
// Print PR title for Github action.
|
||||
// Print PR title for GitHub action.
|
||||
fmt.Printf("Bump Kubernetes version default: %s and latest: %s\n", data.StableVersion, data.LatestVersion)
|
||||
|
||||
update.Apply(ctx, schema, data, prBranchPrefix, prTitle, prIssue)
|
||||
|
|
|
@ -28,10 +28,11 @@ import (
|
|||
"time"
|
||||
|
||||
gcr_config "github.com/GoogleCloudPlatform/docker-credential-gcr/config"
|
||||
"github.com/pkg/errors"
|
||||
"golang.org/x/oauth2/google"
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"golang.org/x/oauth2/google"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/minikube/pkg/minikube/assets"
|
||||
"k8s.io/minikube/pkg/minikube/config"
|
||||
|
@ -49,10 +50,13 @@ const (
|
|||
projectPath = "/var/lib/minikube/google_cloud_project"
|
||||
secretName = "gcp-auth"
|
||||
namespaceName = "gcp-auth"
|
||||
|
||||
// readPermission correlates to read-only file system permissions
|
||||
readPermission = "0444"
|
||||
)
|
||||
|
||||
// enableOrDisableGCPAuth enables or disables the gcp-auth addon depending on the val parameter
|
||||
func enableOrDisableGCPAuth(cfg *config.ClusterConfig, name string, val string) error {
|
||||
func enableOrDisableGCPAuth(cfg *config.ClusterConfig, name, val string) error {
|
||||
enable, err := strconv.ParseBool(val)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "parsing bool: %s", name)
|
||||
|
@ -86,8 +90,7 @@ func enableAddonGCPAuth(cfg *config.ClusterConfig) error {
|
|||
|
||||
// Create a registry secret in every namespace we can find
|
||||
// Always create the pull secret, no matter where we are
|
||||
err = createPullSecret(cfg, creds)
|
||||
if err != nil {
|
||||
if err := createPullSecret(cfg, creds); err != nil {
|
||||
return errors.Wrap(err, "pull secret")
|
||||
}
|
||||
|
||||
|
@ -98,29 +101,28 @@ func enableAddonGCPAuth(cfg *config.ClusterConfig) error {
|
|||
}
|
||||
|
||||
if creds.JSON == nil {
|
||||
out.WarningT("You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file to in order to continue. The image pull secret has been imported.")
|
||||
out.WarningT("You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file in order to continue. The image pull secret has been imported.")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Actually copy the creds over
|
||||
f := assets.NewMemoryAssetTarget(creds.JSON, credentialsPath, "0444")
|
||||
f := assets.NewMemoryAssetTarget(creds.JSON, credentialsPath, readPermission)
|
||||
|
||||
err = r.Copy(f)
|
||||
if err != nil {
|
||||
if err := r.Copy(f); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// First check if the project env var is explicitly set
|
||||
projectEnv := os.Getenv("GOOGLE_CLOUD_PROJECT")
|
||||
if projectEnv != "" {
|
||||
f := assets.NewMemoryAssetTarget([]byte(projectEnv), projectPath, "0444")
|
||||
f := assets.NewMemoryAssetTarget([]byte(projectEnv), projectPath, readPermission)
|
||||
return r.Copy(f)
|
||||
}
|
||||
|
||||
// We're currently assuming gcloud is installed and in the user's path
|
||||
proj, err := exec.Command("gcloud", "config", "get-value", "project").Output()
|
||||
if err == nil && len(proj) > 0 {
|
||||
f := assets.NewMemoryAssetTarget(bytes.TrimSpace(proj), projectPath, "0444")
|
||||
f := assets.NewMemoryAssetTarget(bytes.TrimSpace(proj), projectPath, readPermission)
|
||||
return r.Copy(f)
|
||||
}
|
||||
|
||||
|
@ -132,7 +134,7 @@ func enableAddonGCPAuth(cfg *config.ClusterConfig) error {
|
|||
or set the GOOGLE_CLOUD_PROJECT environment variable.`)
|
||||
|
||||
// Copy an empty file in to avoid errors about missing files
|
||||
emptyFile := assets.NewMemoryAssetTarget([]byte{}, projectPath, "0444")
|
||||
emptyFile := assets.NewMemoryAssetTarget([]byte{}, projectPath, readPermission)
|
||||
return r.Copy(emptyFile)
|
||||
|
||||
}
|
||||
|
@ -155,7 +157,7 @@ func createPullSecret(cc *config.ClusterConfig, creds *google.Credentials) error
|
|||
return err
|
||||
}
|
||||
|
||||
dockercfg := ""
|
||||
var dockercfg string
|
||||
registries := append(gcr_config.DefaultGCRRegistries[:], gcr_config.DefaultARRegistries[:]...)
|
||||
for _, reg := range registries {
|
||||
dockercfg += fmt.Sprintf(`"https://%s":{"username":"oauth2accesstoken","password":"%s","email":"none"},`, reg, token.AccessToken)
|
||||
|
@ -289,8 +291,7 @@ func refreshExistingPods(cc *config.ClusterConfig) error {
|
|||
_, err = pods.Get(context.TODO(), p.Name, metav1.GetOptions{})
|
||||
}
|
||||
|
||||
_, err = pods.Create(context.TODO(), &p, metav1.CreateOptions{})
|
||||
if err != nil {
|
||||
if _, err := pods.Create(context.TODO(), &p, metav1.CreateOptions{}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -304,15 +305,14 @@ func disableAddonGCPAuth(cfg *config.ClusterConfig) error {
|
|||
r := cc.CP.Runner
|
||||
|
||||
// Clean up the files generated when enabling the addon
|
||||
creds := assets.NewMemoryAssetTarget([]byte{}, credentialsPath, "0444")
|
||||
creds := assets.NewMemoryAssetTarget([]byte{}, credentialsPath, readPermission)
|
||||
err := r.Remove(creds)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
project := assets.NewMemoryAssetTarget([]byte{}, projectPath, "0444")
|
||||
err = r.Remove(project)
|
||||
if err != nil {
|
||||
project := assets.NewMemoryAssetTarget([]byte{}, projectPath, readPermission)
|
||||
if err := r.Remove(project); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
@ -332,8 +332,7 @@ func disableAddonGCPAuth(cfg *config.ClusterConfig) error {
|
|||
continue
|
||||
}
|
||||
secrets := client.Secrets(n.Name)
|
||||
err := secrets.Delete(context.TODO(), secretName, metav1.DeleteOptions{})
|
||||
if err != nil {
|
||||
if err := secrets.Delete(context.TODO(), secretName, metav1.DeleteOptions{}); err != nil {
|
||||
klog.Infof("error deleting secret: %v", err)
|
||||
}
|
||||
|
||||
|
@ -347,8 +346,7 @@ func disableAddonGCPAuth(cfg *config.ClusterConfig) error {
|
|||
for i, ps := range sa.ImagePullSecrets {
|
||||
if ps.Name == secretName {
|
||||
sa.ImagePullSecrets = append(sa.ImagePullSecrets[:i], sa.ImagePullSecrets[i+1:]...)
|
||||
_, err := serviceaccounts.Update(context.TODO(), &sa, metav1.UpdateOptions{})
|
||||
if err != nil {
|
||||
if _, err := serviceaccounts.Update(context.TODO(), &sa, metav1.UpdateOptions{}); err != nil {
|
||||
return err
|
||||
}
|
||||
break
|
||||
|
@ -360,7 +358,7 @@ func disableAddonGCPAuth(cfg *config.ClusterConfig) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func verifyGCPAuthAddon(cc *config.ClusterConfig, name string, val string) error {
|
||||
func verifyGCPAuthAddon(cc *config.ClusterConfig, name, val string) error {
|
||||
enable, err := strconv.ParseBool(val)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "parsing bool: %s", name)
|
||||
|
@ -372,14 +370,12 @@ func verifyGCPAuthAddon(cc *config.ClusterConfig, name string, val string) error
|
|||
return ErrSkipThisAddon
|
||||
}
|
||||
|
||||
err = verifyAddonStatusInternal(cc, name, val, "gcp-auth")
|
||||
if err != nil {
|
||||
if err := verifyAddonStatusInternal(cc, name, val, "gcp-auth"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if Refresh {
|
||||
err = refreshExistingPods(cc)
|
||||
if err != nil {
|
||||
if err := refreshExistingPods(cc); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,20 +30,9 @@ import (
|
|||
|
||||
func createTestProfile(t *testing.T) string {
|
||||
t.Helper()
|
||||
td, err := os.MkdirTemp("", "profile")
|
||||
if err != nil {
|
||||
t.Fatalf("tempdir: %v", err)
|
||||
}
|
||||
td := t.TempDir()
|
||||
|
||||
t.Cleanup(func() {
|
||||
err := os.RemoveAll(td)
|
||||
t.Logf("remove path %q", td)
|
||||
if err != nil {
|
||||
t.Errorf("failed to clean up temp folder %q", td)
|
||||
}
|
||||
})
|
||||
err = os.Setenv(localpath.MinikubeHome, td)
|
||||
if err != nil {
|
||||
if err := os.Setenv(localpath.MinikubeHome, td); err != nil {
|
||||
t.Errorf("error setting up test environment. could not set %s", localpath.MinikubeHome)
|
||||
}
|
||||
|
||||
|
@ -130,8 +119,7 @@ func TestSetAndSave(t *testing.T) {
|
|||
|
||||
func TestStart(t *testing.T) {
|
||||
// this test will write a config.json into MinikubeHome, create a temp dir for it
|
||||
tempDir := tests.MakeTempDir()
|
||||
defer tests.RemoveTempDir(tempDir)
|
||||
tests.MakeTempDir(t)
|
||||
|
||||
cc := &config.ClusterConfig{
|
||||
Name: "start",
|
||||
|
|
|
@ -25,8 +25,7 @@ import (
|
|||
)
|
||||
|
||||
func Test_createDiskImage(t *testing.T) {
|
||||
tmpdir := tests.MakeTempDir()
|
||||
defer tests.RemoveTempDir(tmpdir)
|
||||
tmpdir := tests.MakeTempDir(t)
|
||||
|
||||
sshPath := filepath.Join(tmpdir, "ssh")
|
||||
if err := os.WriteFile(sshPath, []byte("mysshkey"), 0644); err != nil {
|
||||
|
|
|
@ -17,21 +17,11 @@ limitations under the License.
|
|||
package hyperkit
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestExtractFile(t *testing.T) {
|
||||
testDir, err := os.MkdirTemp(os.TempDir(), "")
|
||||
if nil != err {
|
||||
return
|
||||
}
|
||||
defer func() { // clean up tempdir
|
||||
err := os.RemoveAll(testDir)
|
||||
if err != nil {
|
||||
t.Errorf("failed to clean up temp folder %q", testDir)
|
||||
}
|
||||
}()
|
||||
testDir := t.TempDir()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
|
|
|
@ -49,8 +49,7 @@ var validLeases = []byte(`{
|
|||
}`)
|
||||
|
||||
func Test_getIpAddressFromFile(t *testing.T) {
|
||||
tmpdir := tests.MakeTempDir()
|
||||
defer tests.RemoveTempDir(tmpdir)
|
||||
tmpdir := tests.MakeTempDir(t)
|
||||
|
||||
dhcpFile := filepath.Join(tmpdir, "dhcp")
|
||||
if err := os.WriteFile(dhcpFile, validLeases, 0644); err != nil {
|
||||
|
|
|
@ -31,6 +31,7 @@ import (
|
|||
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"k8s.io/minikube/pkg/minikube/constants"
|
||||
"k8s.io/minikube/pkg/minikube/out"
|
||||
"k8s.io/minikube/pkg/minikube/style"
|
||||
)
|
||||
|
@ -72,10 +73,40 @@ func (rr RunResult) Output() string {
|
|||
return sb.String()
|
||||
}
|
||||
|
||||
// IsRootlessForced returns whether rootless mode is explicitly required.
|
||||
func IsRootlessForced() bool {
|
||||
s := os.Getenv(constants.MinikubeRootlessEnv)
|
||||
if s == "" {
|
||||
return false
|
||||
}
|
||||
v, err := strconv.ParseBool(s)
|
||||
if err != nil {
|
||||
klog.ErrorS(err, "failed to parse", "env", constants.MinikubeRootlessEnv, "value", s)
|
||||
return false
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
type prefixCmdOptions struct {
|
||||
sudoFlags []string
|
||||
}
|
||||
|
||||
type PrefixCmdOption func(*prefixCmdOptions)
|
||||
|
||||
func WithSudoFlags(ss ...string) PrefixCmdOption {
|
||||
return func(o *prefixCmdOptions) {
|
||||
o.sudoFlags = ss
|
||||
}
|
||||
}
|
||||
|
||||
// PrefixCmd adds any needed prefix (such as sudo) to the command
|
||||
func PrefixCmd(cmd *exec.Cmd) *exec.Cmd {
|
||||
if cmd.Args[0] == Podman && runtime.GOOS == "linux" { // want sudo when not running podman-remote
|
||||
cmdWithSudo := exec.Command("sudo", append([]string{"-n"}, cmd.Args...)...)
|
||||
func PrefixCmd(cmd *exec.Cmd, opt ...PrefixCmdOption) *exec.Cmd {
|
||||
var o prefixCmdOptions
|
||||
for _, f := range opt {
|
||||
f(&o)
|
||||
}
|
||||
if cmd.Args[0] == Podman && runtime.GOOS == "linux" && !IsRootlessForced() { // want sudo when not running podman-remote
|
||||
cmdWithSudo := exec.Command("sudo", append(append([]string{"-n"}, o.sudoFlags...), cmd.Args...)...)
|
||||
cmdWithSudo.Env = cmd.Env
|
||||
cmdWithSudo.Dir = cmd.Dir
|
||||
cmdWithSudo.Stdin = cmd.Stdin
|
||||
|
|
|
@ -59,7 +59,7 @@ func CachedDaemonInfo(ociBin string) (SysInfo, error) {
|
|||
func DaemonInfo(ociBin string) (SysInfo, error) {
|
||||
if ociBin == Podman {
|
||||
p, err := podmanSystemInfo()
|
||||
cachedSysInfo = &SysInfo{CPUs: p.Host.Cpus, TotalMemory: p.Host.MemTotal, OSType: p.Host.Os, Swarm: false, StorageDriver: p.Store.GraphDriverName}
|
||||
cachedSysInfo = &SysInfo{CPUs: p.Host.Cpus, TotalMemory: p.Host.MemTotal, OSType: p.Host.Os, Swarm: false, Rootless: p.Host.Security.Rootless, StorageDriver: p.Store.GraphDriverName}
|
||||
return *cachedSysInfo, err
|
||||
}
|
||||
d, err := dockerSystemInfo()
|
||||
|
@ -213,8 +213,10 @@ type podmanSysInfo struct {
|
|||
Hostname string `json:"hostname"`
|
||||
Kernel string `json:"kernel"`
|
||||
Os string `json:"os"`
|
||||
Rootless bool `json:"rootless"`
|
||||
Uptime string `json:"uptime"`
|
||||
Security struct {
|
||||
Rootless bool `json:"rootless"`
|
||||
} `json:"security"`
|
||||
Uptime string `json:"uptime"`
|
||||
} `json:"host"`
|
||||
Registries struct {
|
||||
Search []string `json:"search"`
|
||||
|
|
|
@ -312,7 +312,7 @@ func createContainer(ociBin string, image string, opts ...createOpt) error {
|
|||
|
||||
// to run nested container from privileged container in podman https://bugzilla.redhat.com/show_bug.cgi?id=1687713
|
||||
// only add when running locally (linux), when running remotely it needs to be configured on server in libpod.conf
|
||||
if ociBin == Podman && runtime.GOOS == "linux" {
|
||||
if ociBin == Podman && runtime.GOOS == "linux" && !IsRootlessForced() {
|
||||
args = append(args, "--cgroup-manager", "cgroupfs")
|
||||
}
|
||||
|
||||
|
@ -342,7 +342,7 @@ func StartContainer(ociBin string, container string) error {
|
|||
|
||||
// to run nested container from privileged container in podman https://bugzilla.redhat.com/show_bug.cgi?id=1687713
|
||||
// only add when running locally (linux), when running remotely it needs to be configured on server in libpod.conf
|
||||
if ociBin == Podman && runtime.GOOS == "linux" {
|
||||
if ociBin == Podman && runtime.GOOS == "linux" && !IsRootlessForced() {
|
||||
args = append(args, "--cgroup-manager", "cgroupfs")
|
||||
}
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ func Docs(root *cobra.Command, path string, testPath string, codePath string) er
|
|||
return errors.Wrap(err, "failed to generate test docs")
|
||||
}
|
||||
|
||||
return ErrorCodes(codePath, []string{"pkg/minikube/reason/exitcodes.go", "pkg/minikube/reason/reason.go"})
|
||||
return ErrorCodes(codePath, []string{"pkg/minikube/reason/reason.go", "pkg/minikube/reason/exitcodes.go"})
|
||||
}
|
||||
|
||||
// DocForCommand returns the specific doc for that command
|
||||
|
|
|
@ -238,8 +238,8 @@ var Addons = map[string]*Addon{
|
|||
"ingress-deploy.yaml",
|
||||
"0640"),
|
||||
}, false, "ingress", "", map[string]string{
|
||||
// https://github.com/kubernetes/ingress-nginx/blob/fc38b9f2aa2d68ee00c417cf97e727b77a00c175/deploy/static/provider/kind/deploy.yaml#L331
|
||||
"IngressController": "ingress-nginx/controller:v1.1.1@sha256:0bc88eb15f9e7f84e8e56c14fa5735aaa488b840983f87bd79b1054190e660de",
|
||||
// https://github.com/kubernetes/ingress-nginx/blob/6d9a39eda7b180f27b34726d7a7a96d73808ce75/deploy/static/provider/kind/deploy.yaml#L417
|
||||
"IngressController": "ingress-nginx/controller:v1.2.0@sha256:d8196e3bc1e72547c5dec66d6556c0ff92a23f6d0919b206be170bc90d5f9185",
|
||||
// https://github.com/kubernetes/ingress-nginx/blob/fc38b9f2aa2d68ee00c417cf97e727b77a00c175/deploy/static/provider/kind/deploy.yaml#L621
|
||||
"KubeWebhookCertgenCreate": "k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660",
|
||||
// https://github.com/kubernetes/ingress-nginx/blob/fc38b9f2aa2d68ee00c417cf97e727b77a00c175/deploy/static/provider/kind/deploy.yaml#L673
|
||||
|
@ -423,8 +423,10 @@ var Addons = map[string]*Addon{
|
|||
"nvidia-gpu-device-plugin.yaml",
|
||||
"0640"),
|
||||
}, false, "nvidia-gpu-device-plugin", "third-party (nvidia)", map[string]string{
|
||||
"NvidiaDevicePlugin": "nvidia/k8s-device-plugin:1.0.0-beta4@sha256:94d46bf513cbc43c4d77a364e4bbd409d32d89c8e686e12551cc3eb27c259b90",
|
||||
}, nil),
|
||||
"NvidiaDevicePlugin": "nvidia-gpu-device-plugin@sha256:4b036e8844920336fa48f36edeb7d4398f426d6a934ba022848deed2edbf09aa",
|
||||
}, map[string]string{
|
||||
"NvidiaDevicePlugin": "k8s.gcr.io",
|
||||
}),
|
||||
"logviewer": NewAddon([]*BinAsset{
|
||||
MustBinAsset(addons.LogviewerAssets,
|
||||
"logviewer/logviewer-dp-and-svc.yaml.tmpl",
|
||||
|
|
|
@ -22,6 +22,7 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/spf13/pflag"
|
||||
"github.com/spf13/viper"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/minikube/pkg/minikube/config"
|
||||
|
@ -52,10 +53,10 @@ func args() string {
|
|||
|
||||
// Log details about the executed command.
|
||||
func Log(startTime time.Time) {
|
||||
if len(os.Args) < 2 || !shouldLog() {
|
||||
if !shouldLog() {
|
||||
return
|
||||
}
|
||||
r := newRow(os.Args[1], args(), userName(), version.GetVersion(), startTime, time.Now())
|
||||
r := newRow(pflag.Arg(0), args(), userName(), version.GetVersion(), startTime, time.Now())
|
||||
if err := appendToLog(r); err != nil {
|
||||
klog.Warning(err)
|
||||
}
|
||||
|
@ -64,7 +65,7 @@ func Log(startTime time.Time) {
|
|||
// shouldLog returns if the command should be logged.
|
||||
func shouldLog() bool {
|
||||
// in rare chance we get here without a command, don't log
|
||||
if len(os.Args) < 2 {
|
||||
if pflag.NArg() == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
|
@ -74,7 +75,7 @@ func shouldLog() bool {
|
|||
|
||||
// commands that should not be logged.
|
||||
no := []string{"status", "version"}
|
||||
a := os.Args[1]
|
||||
a := pflag.Arg(0)
|
||||
for _, c := range no {
|
||||
if a == c {
|
||||
return false
|
||||
|
@ -85,17 +86,5 @@ func shouldLog() bool {
|
|||
|
||||
// isDeletePurge return true if command is delete with purge flag.
|
||||
func isDeletePurge() bool {
|
||||
args := os.Args
|
||||
if len(args) < 2 {
|
||||
return false
|
||||
}
|
||||
if args[1] != "delete" {
|
||||
return false
|
||||
}
|
||||
for _, a := range args {
|
||||
if a == "--purge" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
return pflag.Arg(0) == "delete" && viper.GetBool("purge")
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ import (
|
|||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/spf13/pflag"
|
||||
"github.com/spf13/viper"
|
||||
"k8s.io/minikube/pkg/minikube/config"
|
||||
)
|
||||
|
@ -88,8 +89,11 @@ func TestAudit(t *testing.T) {
|
|||
})
|
||||
|
||||
t.Run("shouldLog", func(t *testing.T) {
|
||||
oldArgs := os.Args
|
||||
defer func() { os.Args = oldArgs }()
|
||||
oldCommandLine := pflag.CommandLine
|
||||
defer func() {
|
||||
pflag.CommandLine = oldCommandLine
|
||||
pflag.Parse()
|
||||
}()
|
||||
|
||||
tests := []struct {
|
||||
args []string
|
||||
|
@ -122,19 +126,22 @@ func TestAudit(t *testing.T) {
|
|||
}
|
||||
|
||||
for _, test := range tests {
|
||||
os.Args = test.args
|
||||
mockArgs(t, test.args)
|
||||
|
||||
got := shouldLog()
|
||||
|
||||
if got != test.want {
|
||||
t.Errorf("os.Args = %q; shouldLog() = %t; want %t", os.Args, got, test.want)
|
||||
t.Errorf("test.args = %q; shouldLog() = %t; want %t", test.args, got, test.want)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("isDeletePurge", func(t *testing.T) {
|
||||
oldArgs := os.Args
|
||||
defer func() { os.Args = oldArgs }()
|
||||
oldCommandLine := pflag.CommandLine
|
||||
defer func() {
|
||||
pflag.CommandLine = oldCommandLine
|
||||
pflag.Parse()
|
||||
}()
|
||||
|
||||
tests := []struct {
|
||||
args []string
|
||||
|
@ -159,12 +166,12 @@ func TestAudit(t *testing.T) {
|
|||
}
|
||||
|
||||
for _, test := range tests {
|
||||
os.Args = test.args
|
||||
mockArgs(t, test.args)
|
||||
|
||||
got := isDeletePurge()
|
||||
|
||||
if got != test.want {
|
||||
t.Errorf("os.Args = %q; isDeletePurge() = %t; want %t", os.Args, got, test.want)
|
||||
t.Errorf("test.args = %q; isDeletePurge() = %t; want %t", test.args, got, test.want)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -175,6 +182,28 @@ func TestAudit(t *testing.T) {
|
|||
defer func() { os.Args = oldArgs }()
|
||||
os.Args = []string{"minikube"}
|
||||
|
||||
oldCommandLine := pflag.CommandLine
|
||||
defer func() {
|
||||
pflag.CommandLine = oldCommandLine
|
||||
pflag.Parse()
|
||||
}()
|
||||
mockArgs(t, os.Args)
|
||||
|
||||
Log(time.Now())
|
||||
})
|
||||
}
|
||||
|
||||
func mockArgs(t *testing.T, args []string) {
|
||||
if len(args) == 0 {
|
||||
t.Fatalf("cannot pass an empty slice to mockArgs")
|
||||
}
|
||||
fs := pflag.NewFlagSet(args[0], pflag.ExitOnError)
|
||||
fs.Bool("purge", false, "")
|
||||
if err := fs.Parse(args[1:]); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
pflag.CommandLine = fs
|
||||
if err := viper.BindPFlags(pflag.CommandLine); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,9 +19,11 @@ package bsutil
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
"github.com/blang/semver/v4"
|
||||
"github.com/pkg/errors"
|
||||
"k8s.io/minikube/pkg/drivers/kic/oci"
|
||||
"k8s.io/minikube/pkg/minikube/bootstrapper/bsutil/ktmpl"
|
||||
|
@ -58,7 +60,12 @@ func extraKubeletOpts(mc config.ClusterConfig, nc config.Node, r cruntime.Manage
|
|||
}
|
||||
|
||||
if k8s.NetworkPlugin != "" {
|
||||
extraOpts["network-plugin"] = k8s.NetworkPlugin
|
||||
// Only CNI is supported in 1.24+, and it is the default
|
||||
if version.LT(semver.MustParse("1.24.0-alpha.2")) {
|
||||
extraOpts["network-plugin"] = k8s.NetworkPlugin
|
||||
} else if k8s.NetworkPlugin != "cni" && mc.KubernetesConfig.ContainerRuntime != constants.Docker {
|
||||
return nil, fmt.Errorf("invalid network plugin: %s", k8s.NetworkPlugin)
|
||||
}
|
||||
|
||||
if k8s.NetworkPlugin == "kubenet" {
|
||||
extraOpts["pod-cidr"] = cni.DefaultPodCIDR
|
||||
|
|
|
@ -29,8 +29,7 @@ import (
|
|||
)
|
||||
|
||||
func TestSetupCerts(t *testing.T) {
|
||||
tempDir := tests.MakeTempDir()
|
||||
defer tests.RemoveTempDir(tempDir)
|
||||
tempDir := tests.MakeTempDir(t)
|
||||
|
||||
k8s := config.ClusterConfig{
|
||||
CertExpiration: constants.DefaultCertExpiration,
|
||||
|
|
|
@ -104,8 +104,6 @@ func auxiliary(mirror string) []string {
|
|||
// Note: changing this list requires bumping the preload version
|
||||
return []string{
|
||||
storageProvisioner(mirror),
|
||||
dashboardFrontend(mirror),
|
||||
dashboardMetrics(mirror),
|
||||
// NOTE: kindnet is also used when the Docker driver is used with a non-Docker runtime
|
||||
}
|
||||
}
|
||||
|
@ -115,24 +113,6 @@ func storageProvisioner(mirror string) string {
|
|||
return path.Join(minikubeRepo(mirror), "storage-provisioner:"+version.GetStorageProvisionerVersion())
|
||||
}
|
||||
|
||||
// dashboardFrontend returns the image used for the dashboard frontend
|
||||
func dashboardFrontend(repo string) string {
|
||||
if repo == "" {
|
||||
repo = "docker.io"
|
||||
}
|
||||
// See 'kubernetes-dashboard' in deploy/addons/dashboard/dashboard-dp.yaml
|
||||
return path.Join(repo, "kubernetesui", "dashboard:v2.5.1")
|
||||
}
|
||||
|
||||
// dashboardMetrics returns the image used for the dashboard metrics scraper
|
||||
func dashboardMetrics(repo string) string {
|
||||
if repo == "" {
|
||||
repo = "docker.io"
|
||||
}
|
||||
// See 'dashboard-metrics-scraper' in deploy/addons/dashboard/dashboard-dp.yaml
|
||||
return path.Join(repo, "kubernetesui", "metrics-scraper:v1.0.7")
|
||||
}
|
||||
|
||||
// KindNet returns the image used for kindnet
|
||||
// ref: https://hub.docker.com/r/kindest/kindnetd/tags
|
||||
// src: https://github.com/kubernetes-sigs/kind/tree/master/images/kindnetd
|
||||
|
|
|
@ -94,8 +94,6 @@ k8s.gcr.io/coredns/coredns:v1.8.4
|
|||
func TestAuxiliary(t *testing.T) {
|
||||
want := []string{
|
||||
"gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(),
|
||||
"docker.io/kubernetesui/dashboard:v2.5.1",
|
||||
"docker.io/kubernetesui/metrics-scraper:v1.0.7",
|
||||
}
|
||||
got := auxiliary("")
|
||||
if diff := cmp.Diff(want, got); diff != "" {
|
||||
|
@ -106,8 +104,6 @@ func TestAuxiliary(t *testing.T) {
|
|||
func TestAuxiliaryMirror(t *testing.T) {
|
||||
want := []string{
|
||||
"test.mirror/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(),
|
||||
"test.mirror/kubernetesui/dashboard:v2.5.1",
|
||||
"test.mirror/kubernetesui/metrics-scraper:v1.0.7",
|
||||
}
|
||||
got := auxiliary("test.mirror")
|
||||
if diff := cmp.Diff(want, got); diff != "" {
|
||||
|
|
|
@ -43,8 +43,6 @@ func TestKubeadmImages(t *testing.T) {
|
|||
"k8s.gcr.io/etcd:3.4.3-0",
|
||||
"k8s.gcr.io/pause:3.1",
|
||||
"gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(),
|
||||
"docker.io/kubernetesui/dashboard:v2.5.1",
|
||||
"docker.io/kubernetesui/metrics-scraper:v1.0.7",
|
||||
}},
|
||||
{"v1.16.1", "mirror.k8s.io", false, []string{
|
||||
"mirror.k8s.io/kube-proxy:v1.16.1",
|
||||
|
@ -55,8 +53,6 @@ func TestKubeadmImages(t *testing.T) {
|
|||
"mirror.k8s.io/etcd:3.3.15-0",
|
||||
"mirror.k8s.io/pause:3.1",
|
||||
"mirror.k8s.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(),
|
||||
"mirror.k8s.io/kubernetesui/dashboard:v2.5.1",
|
||||
"mirror.k8s.io/kubernetesui/metrics-scraper:v1.0.7",
|
||||
}},
|
||||
{"v1.15.0", "", false, []string{
|
||||
"k8s.gcr.io/kube-proxy:v1.15.0",
|
||||
|
@ -67,8 +63,6 @@ func TestKubeadmImages(t *testing.T) {
|
|||
"k8s.gcr.io/etcd:3.3.10",
|
||||
"k8s.gcr.io/pause:3.1",
|
||||
"gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(),
|
||||
"docker.io/kubernetesui/dashboard:v2.5.1",
|
||||
"docker.io/kubernetesui/metrics-scraper:v1.0.7",
|
||||
}},
|
||||
{"v1.14.0", "", false, []string{
|
||||
"k8s.gcr.io/kube-proxy:v1.14.0",
|
||||
|
@ -79,8 +73,6 @@ func TestKubeadmImages(t *testing.T) {
|
|||
"k8s.gcr.io/etcd:3.3.10",
|
||||
"k8s.gcr.io/pause:3.1",
|
||||
"gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(),
|
||||
"docker.io/kubernetesui/dashboard:v2.5.1",
|
||||
"docker.io/kubernetesui/metrics-scraper:v1.0.7",
|
||||
}},
|
||||
{"v1.13.0", "", false, []string{
|
||||
"k8s.gcr.io/kube-proxy:v1.13.0",
|
||||
|
@ -91,8 +83,6 @@ func TestKubeadmImages(t *testing.T) {
|
|||
"k8s.gcr.io/etcd:3.2.24",
|
||||
"k8s.gcr.io/pause:3.1",
|
||||
"gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(),
|
||||
"docker.io/kubernetesui/dashboard:v2.5.1",
|
||||
"docker.io/kubernetesui/metrics-scraper:v1.0.7",
|
||||
}},
|
||||
{"v1.12.0", "", false, []string{
|
||||
"k8s.gcr.io/kube-proxy:v1.12.0",
|
||||
|
@ -103,8 +93,6 @@ func TestKubeadmImages(t *testing.T) {
|
|||
"k8s.gcr.io/etcd:3.2.24",
|
||||
"k8s.gcr.io/pause:3.1",
|
||||
"gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(),
|
||||
"docker.io/kubernetesui/dashboard:v2.5.1",
|
||||
"docker.io/kubernetesui/metrics-scraper:v1.0.7",
|
||||
}},
|
||||
{"v1.11.0", "", true, nil},
|
||||
{"v1.10.0", "", true, nil},
|
||||
|
|
|
@ -24,6 +24,7 @@ import (
|
|||
"path"
|
||||
"time"
|
||||
|
||||
"github.com/blang/semver/v4"
|
||||
"github.com/pkg/errors"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/minikube/pkg/kapi"
|
||||
|
@ -33,6 +34,7 @@ import (
|
|||
"k8s.io/minikube/pkg/minikube/constants"
|
||||
"k8s.io/minikube/pkg/minikube/driver"
|
||||
"k8s.io/minikube/pkg/minikube/vmpath"
|
||||
"k8s.io/minikube/pkg/util"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -211,18 +213,27 @@ func configureCNI(cc *config.ClusterConfig, cnm Manager) error {
|
|||
Network = "kindnet"
|
||||
return nil
|
||||
}
|
||||
// for containerd and docker: auto-set custom CNI via kubelet's 'cni-conf-dir' param, if not user-specified
|
||||
eo := fmt.Sprintf("kubelet.cni-conf-dir=%s", CustomConfDir)
|
||||
if !cc.KubernetesConfig.ExtraOptions.Exists(eo) {
|
||||
klog.Infof("auto-setting extra-config to %q", eo)
|
||||
if err := cc.KubernetesConfig.ExtraOptions.Set(eo); err != nil {
|
||||
return fmt.Errorf("failed auto-setting extra-config %q: %v", eo, err)
|
||||
version, err := util.ParseKubernetesVersion(cc.KubernetesConfig.KubernetesVersion)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// The CNI configuration is handled by CRI in 1.24+
|
||||
if version.LT(semver.MustParse("1.24.0-alpha.2")) {
|
||||
// for containerd and docker: auto-set custom CNI via kubelet's 'cni-conf-dir' param, if not user-specified
|
||||
eo := fmt.Sprintf("kubelet.cni-conf-dir=%s", CustomConfDir)
|
||||
if !cc.KubernetesConfig.ExtraOptions.Exists(eo) {
|
||||
klog.Infof("auto-setting extra-config to %q", eo)
|
||||
if err := cc.KubernetesConfig.ExtraOptions.Set(eo); err != nil {
|
||||
return fmt.Errorf("failed auto-setting extra-config %q: %v", eo, err)
|
||||
}
|
||||
ConfDir = CustomConfDir
|
||||
klog.Infof("extra-config set to %q", eo)
|
||||
} else {
|
||||
// respect user-specified custom CNI Config Directory
|
||||
ConfDir = cc.KubernetesConfig.ExtraOptions.Get("cni-conf-dir", "kubelet")
|
||||
}
|
||||
ConfDir = CustomConfDir
|
||||
klog.Infof("extra-config set to %q", eo)
|
||||
} else {
|
||||
// respect user-specified custom CNI Config Directory
|
||||
ConfDir = cc.KubernetesConfig.ExtraOptions.Get("cni-conf-dir", "kubelet")
|
||||
ConfDir = CustomConfDir
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
|
@ -44,6 +44,8 @@ const (
|
|||
ProfileName = "profile"
|
||||
// UserFlag is the key for the global user flag (ex. --user=user1)
|
||||
UserFlag = "user"
|
||||
// Rootless is the key for the global rootless parameter (boolean)
|
||||
Rootless = "rootless"
|
||||
// AddonImages stores custom addon images config
|
||||
AddonImages = "addon-images"
|
||||
// AddonRegistries stores custom addon images config
|
||||
|
|
|
@ -99,6 +99,8 @@ const (
|
|||
TestDiskUsedEnv = "MINIKUBE_TEST_STORAGE_CAPACITY"
|
||||
// TestDiskAvailableEnv is used in integration tests for insufficient storage with 'minikube status' (in GiB)
|
||||
TestDiskAvailableEnv = "MINIKUBE_TEST_AVAILABLE_STORAGE"
|
||||
// MinikubeRootlessEnv is used to force Rootless Docker/Podman driver
|
||||
MinikubeRootlessEnv = "MINIKUBE_ROOTLESS"
|
||||
|
||||
// scheduled stop constants
|
||||
|
||||
|
@ -121,7 +123,7 @@ const (
|
|||
ExistingContainerHostEnv = MinikubeExistingPrefix + "CONTAINER_HOST"
|
||||
|
||||
// TimeFormat is the format that should be used when outputting time
|
||||
TimeFormat = time.RFC1123
|
||||
TimeFormat = time.RFC822
|
||||
// MaxResources is the value that can be passed into the memory and cpus flags to specify to use maximum resources
|
||||
MaxResources = "max"
|
||||
|
||||
|
|
|
@ -18,10 +18,15 @@ package constants
|
|||
|
||||
var (
|
||||
KubeadmImages = map[string]map[string]string{
|
||||
"v1.25": {
|
||||
"coredns/coredns": "v1.8.6",
|
||||
"etcd": "3.5.3-0",
|
||||
"pause": "3.7",
|
||||
},
|
||||
"v1.24": {
|
||||
"coredns/coredns": "v1.8.6",
|
||||
"etcd": "3.5.1-0",
|
||||
"pause": "3.6",
|
||||
"etcd": "3.5.3-0",
|
||||
"pause": "3.7",
|
||||
},
|
||||
"v1.23": {
|
||||
"coredns/coredns": "v1.8.6",
|
||||
|
|
|
@ -27,8 +27,6 @@ func TestAddRepoTagToImageName(t *testing.T) {
|
|||
imgName string
|
||||
want string
|
||||
}{
|
||||
{"kubernetesui/dashboard:v2.5.1", "docker.io/kubernetesui/dashboard:v2.5.1"},
|
||||
{"kubernetesui/metrics-scraper:v1.0.7", "docker.io/kubernetesui/metrics-scraper:v1.0.7"},
|
||||
{"gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(), "gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion()},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
|
|
|
@ -336,3 +336,14 @@ func CheckKernelCompatibility(cr CommandRunner, major, minor int) error {
|
|||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ConfigureNetworkPlugin(r Manager, cr CommandRunner, networkPlugin string) error {
|
||||
// Only supported for Docker with cri-dockerd
|
||||
if r.Name() != "Docker" {
|
||||
if networkPlugin != "cni" {
|
||||
return fmt.Errorf("unknown network plugin: %s", networkPlugin)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return dockerConfigureNetworkPlugin(r, cr, networkPlugin)
|
||||
}
|
||||
|
|
|
@ -17,12 +17,15 @@ limitations under the License.
|
|||
package cruntime
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"text/template"
|
||||
"time"
|
||||
|
||||
"github.com/blang/semver/v4"
|
||||
|
@ -31,6 +34,7 @@ import (
|
|||
"k8s.io/klog/v2"
|
||||
"k8s.io/minikube/pkg/minikube/assets"
|
||||
"k8s.io/minikube/pkg/minikube/bootstrapper/images"
|
||||
"k8s.io/minikube/pkg/minikube/cni"
|
||||
"k8s.io/minikube/pkg/minikube/command"
|
||||
"k8s.io/minikube/pkg/minikube/config"
|
||||
"k8s.io/minikube/pkg/minikube/docker"
|
||||
|
@ -665,3 +669,51 @@ func dockerBoundToContainerd(runner command.Runner) bool {
|
|||
func (r *Docker) ImagesPreloaded(images []string) bool {
|
||||
return dockerImagesPreloaded(r.Runner, images)
|
||||
}
|
||||
|
||||
const (
|
||||
CNIBinDir = "/opt/cni/bin"
|
||||
CNIConfDir = "/etc/cni/net.d"
|
||||
CNICacheDir = "/var/lib/cni/cache"
|
||||
)
|
||||
|
||||
func dockerConfigureNetworkPlugin(r Manager, cr CommandRunner, networkPlugin string) error {
|
||||
if networkPlugin == "" {
|
||||
// no-op plugin
|
||||
return nil
|
||||
}
|
||||
|
||||
args := ""
|
||||
if networkPlugin == "cni" {
|
||||
args += " --cni-bin-dir=" + CNIBinDir
|
||||
args += " --cni-cache-dir=" + CNICacheDir
|
||||
args += " --cni-conf-dir=" + cni.ConfDir
|
||||
}
|
||||
|
||||
opts := struct {
|
||||
NetworkPlugin string
|
||||
ExtraArguments string
|
||||
}{
|
||||
NetworkPlugin: networkPlugin,
|
||||
ExtraArguments: args,
|
||||
}
|
||||
|
||||
const CRIDockerServiceConfFile = "/etc/systemd/system/cri-docker.service.d/10-cni.conf"
|
||||
var CRIDockerServiceConfTemplate = template.Must(template.New("criDockerServiceConfTemplate").Parse(`[Service]
|
||||
ExecStart=
|
||||
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin={{.NetworkPlugin}}{{.ExtraArguments}}`))
|
||||
|
||||
b := bytes.Buffer{}
|
||||
if err := CRIDockerServiceConfTemplate.Execute(&b, opts); err != nil {
|
||||
return errors.Wrap(err, "failed to execute template")
|
||||
}
|
||||
criDockerService := b.Bytes()
|
||||
c := exec.Command("sudo", "mkdir", "-p", filepath.Dir(CRIDockerServiceConfFile))
|
||||
if _, err := cr.RunCmd(c); err != nil {
|
||||
return errors.Wrapf(err, "failed to create directory")
|
||||
}
|
||||
svc := assets.NewMemoryAssetTarget(criDockerService, CRIDockerServiceConfFile, "0644")
|
||||
if err := cr.Copy(svc); err != nil {
|
||||
return errors.Wrap(err, "failed to copy template")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ const fileScheme = "file"
|
|||
// DefaultISOURLs returns a list of ISO URL's to consult by default, in priority order
|
||||
func DefaultISOURLs() []string {
|
||||
v := version.GetISOVersion()
|
||||
isoBucket := "minikube-builds/iso/13860"
|
||||
isoBucket := "minikube-builds/iso/13814"
|
||||
return []string{
|
||||
fmt.Sprintf("https://storage.googleapis.com/%s/minikube-%s.iso", isoBucket, v),
|
||||
fmt.Sprintf("https://github.com/kubernetes/minikube/releases/download/%s/minikube-%s.iso", v, v),
|
||||
|
|
|
@ -44,7 +44,7 @@ const (
|
|||
// PreloadVersion is the current version of the preloaded tarball
|
||||
//
|
||||
// NOTE: You may need to bump this version up when upgrading auxiliary docker images
|
||||
PreloadVersion = "v17"
|
||||
PreloadVersion = "v18"
|
||||
// PreloadBucket is the name of the GCS bucket where preloaded volume tarballs exist
|
||||
PreloadBucket = "minikube-preloaded-volume-tarballs"
|
||||
)
|
||||
|
|
|
@ -32,16 +32,7 @@ func TestExtract(t *testing.T) {
|
|||
// The function we care about
|
||||
functions := []string{"extract.PrintToScreen"}
|
||||
|
||||
tempdir, err := os.MkdirTemp("", "temptestdata")
|
||||
if err != nil {
|
||||
t.Fatalf("Creating temp dir: %v", err)
|
||||
}
|
||||
defer func() { // clean up tempdir
|
||||
err := os.RemoveAll(tempdir)
|
||||
if err != nil {
|
||||
t.Errorf("failed to clean up temp folder %q", tempdir)
|
||||
}
|
||||
}()
|
||||
tempdir := t.TempDir()
|
||||
|
||||
src, err := os.ReadFile("testdata/test.json")
|
||||
if err != nil {
|
||||
|
|
|
@ -228,16 +228,7 @@ func TestUpdate(t *testing.T) {
|
|||
|
||||
for _, test := range tests {
|
||||
t.Run(test.description, func(t *testing.T) {
|
||||
tmpDir, err := os.MkdirTemp("", "")
|
||||
if err != nil {
|
||||
t.Fatalf("Error making temp directory %v", err)
|
||||
}
|
||||
defer func() { // clean up tempdir
|
||||
err := os.RemoveAll(tmpDir)
|
||||
if err != nil {
|
||||
t.Errorf("failed to clean up temp folder %q", tmpDir)
|
||||
}
|
||||
}()
|
||||
tmpDir := t.TempDir()
|
||||
|
||||
test.cfg.SetPath(filepath.Join(tmpDir, "kubeconfig"))
|
||||
if len(test.existingCfg) != 0 {
|
||||
|
@ -245,7 +236,7 @@ func TestUpdate(t *testing.T) {
|
|||
t.Fatalf("WriteFile: %v", err)
|
||||
}
|
||||
}
|
||||
err = Update(test.cfg)
|
||||
err := Update(test.cfg)
|
||||
if err != nil && !test.err {
|
||||
t.Errorf("Got unexpected error: %v", err)
|
||||
}
|
||||
|
@ -459,16 +450,7 @@ func TestEmptyConfig(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestNewConfig(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", ".kube")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer func() {
|
||||
err := os.RemoveAll(dir)
|
||||
if err != nil {
|
||||
t.Errorf("Failed to remove dir %q: %v", dir, err)
|
||||
}
|
||||
}()
|
||||
dir := t.TempDir()
|
||||
|
||||
// setup minikube config
|
||||
expected := api.NewConfig()
|
||||
|
@ -476,8 +458,7 @@ func TestNewConfig(t *testing.T) {
|
|||
|
||||
// write actual
|
||||
filename := filepath.Join(dir, "config")
|
||||
err = writeToFile(expected, filename)
|
||||
if err != nil {
|
||||
if err := writeToFile(expected, filename); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
|
|
|
@ -28,16 +28,7 @@ import (
|
|||
)
|
||||
|
||||
func TestReplaceWinDriveLetterToVolumeName(t *testing.T) {
|
||||
path, err := os.MkdirTemp("", "repwindl2vn")
|
||||
if err != nil {
|
||||
t.Fatalf("Error make tmp directory: %v", err)
|
||||
}
|
||||
defer func(path string) { // clean up tempdir
|
||||
err := os.RemoveAll(path)
|
||||
if err != nil {
|
||||
t.Errorf("failed to clean up temp folder %q", path)
|
||||
}
|
||||
}(path)
|
||||
path := t.TempDir()
|
||||
|
||||
if runtime.GOOS != "windows" {
|
||||
// Replace to fake func.
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue