Merge branch 'master' of github.com:kubernetes/minikube into iso-arm64
commit
2b9296f720
|
|
@ -52,3 +52,6 @@ test/integration/testdata/minikube-linux-amd64-latest-stable
|
|||
/site/resources
|
||||
/_gen
|
||||
|
||||
# Qt
|
||||
*.pro.user
|
||||
*build-*
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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") {
|
||||
|
|
|
|||
11
go.mod
11
go.mod
|
|
@ -4,7 +4,7 @@ go 1.18
|
|||
|
||||
require (
|
||||
cloud.google.com/go/storage v1.22.0
|
||||
contrib.go.opencensus.io/exporter/stackdriver v0.13.11
|
||||
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.4.0
|
||||
|
|
@ -81,11 +81,11 @@ require (
|
|||
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.74.0
|
||||
google.golang.org/api v0.75.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/apimachinery v0.23.6
|
||||
k8s.io/client-go v0.23.5
|
||||
k8s.io/cluster-bootstrap v0.0.0
|
||||
k8s.io/component-base v0.23.5
|
||||
|
|
@ -104,7 +104,7 @@ require (
|
|||
|
||||
require (
|
||||
cloud.google.com/go v0.100.2 // indirect
|
||||
cloud.google.com/go/compute v1.5.0 // 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.2.0 // indirect
|
||||
|
|
@ -180,6 +180,7 @@ require (
|
|||
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
|
||||
|
|
@ -200,7 +201,7 @@ require (
|
|||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // 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-20220407144326-9054f6ed7bac // indirect
|
||||
google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4 // indirect
|
||||
google.golang.org/grpc v1.45.0 // indirect
|
||||
google.golang.org/protobuf v1.28.0 // indirect
|
||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||
|
|
|
|||
19
go.sum
19
go.sum
|
|
@ -40,8 +40,9 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g
|
|||
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.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=
|
||||
|
|
@ -64,8 +65,8 @@ cloud.google.com/go/storage v1.22.0/go.mod h1:GbaLEoMqbVm6sx3Z0R++gSiBlgMv6yUi2q
|
|||
cloud.google.com/go/trace v1.0.0/go.mod h1:4iErSByzxkyHWzzlAj63/Gmjz0NH1ASqhJguHpGcr6A=
|
||||
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.11 h1:YzmWJ2OT2K3ouXyMm5FmFQPoDs5TfLjx6Xn5x5CLN0I=
|
||||
contrib.go.opencensus.io/exporter/stackdriver v0.13.11/go.mod h1:I5htMbyta491eUxufwwZPQdcKvvgzMB4O9ni41YnIM8=
|
||||
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=
|
||||
|
|
@ -1003,6 +1004,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/rackspace/gophercloud v0.0.0-20150408191457-ce0f487f6747/go.mod h1:4bJ1FwuaBZ6dt1VcDX5/O662mwR8GWqS4l68H6hkoYQ=
|
||||
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
|
|
@ -1640,9 +1643,10 @@ google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tD
|
|||
google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g=
|
||||
google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA=
|
||||
google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8=
|
||||
google.golang.org/api v0.74.0 h1:ExR2D+5TYIrMphWgs5JCgwRhEDlPDXXrLwHHMgPHTXE=
|
||||
google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs=
|
||||
google.golang.org/appengine v0.0.0-20160205025855-6a436539be38/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/api v0.75.0 h1:0AYh/ae6l9TDUvIQrDw5QRpM100P6oHgD+o3dYHMzJg=
|
||||
google.golang.org/api v0.75.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=
|
||||
|
|
@ -1731,8 +1735,10 @@ google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2
|
|||
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 h1:qSNTkEN+L2mvWcLgJOR+8bdHX9rN/IdU3A1Ghpfb1Rg=
|
||||
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=
|
||||
|
|
@ -1850,8 +1856,9 @@ k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRp
|
|||
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=
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@
|
|||
#include <QDir>
|
||||
#include <QFontDialog>
|
||||
#include <QStackedWidget>
|
||||
#include <QProcessEnvironment>
|
||||
|
||||
#ifndef QT_NO_TERMWIDGET
|
||||
#include <QApplication>
|
||||
|
|
@ -116,6 +117,14 @@ Window::Window()
|
|||
setWindowIcon(*trayIconIcon);
|
||||
}
|
||||
|
||||
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"));
|
||||
|
|
@ -215,12 +224,18 @@ 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);
|
||||
}
|
||||
|
||||
void Window::restoreWindow()
|
||||
{
|
||||
QWidget::showNormal();
|
||||
updateClusters();
|
||||
}
|
||||
|
||||
static QString minikubePath()
|
||||
{
|
||||
QString program = QStandardPaths::findExecutable("minikube");
|
||||
|
|
@ -523,6 +538,12 @@ bool Window::sendMinikubeCommand(QStringList cmds, QString &text)
|
|||
arguments << cmds;
|
||||
|
||||
QProcess *process = new QProcess(this);
|
||||
#if __APPLE__
|
||||
if (env.isEmpty()) {
|
||||
env = setMacEnv();
|
||||
}
|
||||
process->setProcessEnvironment(env);
|
||||
#endif
|
||||
process->start(program, arguments);
|
||||
this->setCursor(Qt::WaitCursor);
|
||||
bool timedOut = process->waitForFinished(300 * 1000);
|
||||
|
|
@ -545,6 +566,7 @@ static int cpus = 2;
|
|||
static int memory = 2400;
|
||||
static QString driver = "";
|
||||
static QString containerRuntime = "";
|
||||
static QString k8sVersion = "";
|
||||
|
||||
void Window::askName()
|
||||
{
|
||||
|
|
@ -582,24 +604,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);
|
||||
|
|
@ -617,6 +636,10 @@ 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 = { "-p",
|
||||
|
|
@ -625,6 +648,8 @@ void Window::askCustom()
|
|||
driver,
|
||||
"--container-runtime",
|
||||
containerRuntime,
|
||||
"--kubernetes-version",
|
||||
k8sVersion,
|
||||
"--cpus",
|
||||
QString::number(cpus),
|
||||
"--memory",
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@
|
|||
#include <QSystemTrayIcon>
|
||||
#include <QFormLayout>
|
||||
#include <QStackedWidget>
|
||||
#include <QProcessEnvironment>
|
||||
|
||||
#ifndef QT_NO_SYSTEMTRAYICON
|
||||
|
||||
|
|
@ -153,6 +154,7 @@ private:
|
|||
void askName();
|
||||
QComboBox *driverComboBox;
|
||||
QComboBox *containerRuntimeComboBox;
|
||||
QComboBox *k8sVersionComboBox;
|
||||
|
||||
// Commands
|
||||
void startMinikube(QStringList args);
|
||||
|
|
@ -166,12 +168,15 @@ private:
|
|||
void dashboardBrowser();
|
||||
Cluster createClusterObject(QJsonObject obj);
|
||||
QProcess *dashboardProcess;
|
||||
QProcessEnvironment env;
|
||||
|
||||
// Error messaging
|
||||
void outputFailedStart(QString text);
|
||||
QLabel *createLabel(QString title, QString text, QFormLayout *form, bool isLink);
|
||||
|
||||
void checkForMinikube();
|
||||
void restoreWindow();
|
||||
QProcessEnvironment setMacEnv();
|
||||
QStackedWidget *stackedWidget;
|
||||
bool isBasicView;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -208,7 +208,7 @@ func Output(r cruntime.Manager, bs bootstrapper.Bootstrapper, cfg config.Cluster
|
|||
}
|
||||
|
||||
// outputAudit displays the audit logs.
|
||||
func outputAudit(lines int) error {
|
||||
func OutputAudit(lines int) error {
|
||||
out.Styled(style.Empty, "")
|
||||
out.Styled(style.Empty, "==> Audit <==")
|
||||
r, err := audit.Report(lines)
|
||||
|
|
@ -252,7 +252,7 @@ func OutputOffline(lines int, logOutput *os.File) {
|
|||
defer out.SetOutFile(os.Stdout)
|
||||
out.SetErrFile(logOutput)
|
||||
defer out.SetErrFile(os.Stderr)
|
||||
if err := outputAudit(lines); err != nil {
|
||||
if err := OutputAudit(lines); err != nil {
|
||||
klog.Errorf("failed to output audit logs: %v", err)
|
||||
}
|
||||
if err := outputLastStart(); err != nil {
|
||||
|
|
|
|||
|
|
@ -397,6 +397,12 @@ func configureRuntimes(runner cruntime.CommandRunner, cc config.ClusterConfig, k
|
|||
}
|
||||
}
|
||||
|
||||
if kv.GTE(semver.MustParse("1.24.0-alpha.2")) {
|
||||
if err := cruntime.ConfigureNetworkPlugin(cr, runner, cc.KubernetesConfig.NetworkPlugin); err != nil {
|
||||
exit.Error(reason.RuntimeEnable, "Failed to configure network plugin", err)
|
||||
}
|
||||
}
|
||||
|
||||
inUserNamespace := strings.Contains(cc.KubernetesConfig.FeatureGates, "KubeletInUserNamespace=true")
|
||||
err = cr.Enable(disableOthers, forceSystemd(), inUserNamespace)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import (
|
|||
|
||||
// If you add a new step here, please also add it to register.Reg registry inside the init() function
|
||||
const (
|
||||
// InitialSetup
|
||||
InitialSetup RegStep = "Initial Minikube Setup"
|
||||
SelectingDriver RegStep = "Selecting Driver"
|
||||
DownloadingArtifacts RegStep = "Downloading Artifacts"
|
||||
|
|
@ -47,9 +48,12 @@ const (
|
|||
EnablingAddons RegStep = "Enabling Addons"
|
||||
Done RegStep = "Done"
|
||||
|
||||
// Deleting
|
||||
Deleting RegStep = "Deleting"
|
||||
Purging RegStep = "Puring home dir"
|
||||
|
||||
Stopping RegStep = "Stopping"
|
||||
PowerOff RegStep = "PowerOff"
|
||||
Deleting RegStep = "Deleting"
|
||||
Pausing RegStep = "Pausing"
|
||||
Unpausing RegStep = "Unpausing"
|
||||
)
|
||||
|
|
@ -98,7 +102,7 @@ func init() {
|
|||
Stopping: {Stopping, PowerOff, Done},
|
||||
Pausing: {Pausing, Done},
|
||||
Unpausing: {Unpausing, Done},
|
||||
Deleting: {Deleting, Stopping, Deleting, Done},
|
||||
Deleting: {Deleting, Stopping, Done, Purging},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,8 +21,9 @@ minikube delete [flags]
|
|||
### Options
|
||||
|
||||
```
|
||||
--all Set flag to delete all profiles
|
||||
--purge Set this flag to delete the '.minikube' folder from your user directory.
|
||||
--all Set flag to delete all profiles
|
||||
-o, --output string Format to print stdout in. Options include: [text,json] (default "text")
|
||||
--purge Set this flag to delete the '.minikube' folder from your user directory.
|
||||
```
|
||||
|
||||
### Options inherited from parent commands
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ minikube logs [flags]
|
|||
### Options
|
||||
|
||||
```
|
||||
--audit Show only the audit logs
|
||||
--file string If present, writes to the provided file instead of stdout.
|
||||
-f, --follow Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.
|
||||
-n, --length int Number of lines back to go within the log (default 60)
|
||||
|
|
|
|||
|
|
@ -28,8 +28,11 @@ import (
|
|||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/blang/semver/v4"
|
||||
"k8s.io/minikube/pkg/kapi"
|
||||
"k8s.io/minikube/pkg/minikube/config"
|
||||
"k8s.io/minikube/pkg/minikube/reason"
|
||||
"k8s.io/minikube/pkg/util"
|
||||
"k8s.io/minikube/pkg/util/retry"
|
||||
)
|
||||
|
||||
|
|
@ -122,7 +125,11 @@ func TestNetworkPlugins(t *testing.T) {
|
|||
t.Fatalf("ssh failed: %v", err)
|
||||
}
|
||||
out := rr.Stdout.String()
|
||||
verifyKubeletFlagsOutput(t, tc.kubeletPlugin, out)
|
||||
c, err := config.Load(profile)
|
||||
if err != nil {
|
||||
t.Errorf("failed to load cluster config: %v", err)
|
||||
}
|
||||
verifyKubeletFlagsOutput(t, c.KubernetesConfig.KubernetesVersion, tc.kubeletPlugin, out)
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -242,7 +249,14 @@ func validateHairpinMode(ctx context.Context, t *testing.T, profile string, hair
|
|||
}
|
||||
}
|
||||
|
||||
func verifyKubeletFlagsOutput(t *testing.T, kubeletPlugin, out string) {
|
||||
func verifyKubeletFlagsOutput(t *testing.T, k8sVersion, kubeletPlugin, out string) {
|
||||
version, err := util.ParseKubernetesVersion(k8sVersion)
|
||||
if err != nil {
|
||||
t.Errorf("failed to parse kubernetes version %s: %v", k8sVersion, err)
|
||||
}
|
||||
if version.GTE(semver.MustParse("1.24.0-alpha.2")) {
|
||||
return
|
||||
}
|
||||
if kubeletPlugin == "" {
|
||||
if strings.Contains(out, "--network-plugin") && ContainerRuntime() == "docker" {
|
||||
t.Errorf("expected no network plug-in, got %s", out)
|
||||
|
|
|
|||
|
|
@ -29,11 +29,13 @@ import (
|
|||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/blang/semver/v4"
|
||||
"github.com/docker/machine/libmachine/state"
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"k8s.io/minikube/pkg/minikube/bootstrapper/images"
|
||||
"k8s.io/minikube/pkg/minikube/constants"
|
||||
"k8s.io/minikube/pkg/minikube/detect"
|
||||
"k8s.io/minikube/pkg/util"
|
||||
)
|
||||
|
||||
// TestStartStop tests starting, stopping and restarting a minikube clusters with various Kubernetes versions and configurations
|
||||
|
|
@ -59,6 +61,7 @@ func TestStartStop(t *testing.T) {
|
|||
"--feature-gates",
|
||||
"ServerSideApply=true",
|
||||
"--network-plugin=cni",
|
||||
// TODO: Remove network-plugin config when newest is 1.24
|
||||
"--extra-config=kubelet.network-plugin=cni",
|
||||
"--extra-config=kubeadm.pod-network-cidr=192.168.111.111/16",
|
||||
}},
|
||||
|
|
@ -111,6 +114,21 @@ func TestStartStop(t *testing.T) {
|
|||
startArgs = append(startArgs, StartArgs()...)
|
||||
startArgs = append(startArgs, fmt.Sprintf("--kubernetes-version=%s", tc.version))
|
||||
|
||||
version, err := util.ParseKubernetesVersion(tc.version)
|
||||
if err != nil {
|
||||
t.Errorf("failed to parse %s: %v", tc.version, err)
|
||||
}
|
||||
if version.GTE(semver.MustParse("1.24.0-alpha.2")) {
|
||||
args := []string{}
|
||||
for _, arg := range args {
|
||||
if arg == "--extra-config=kubelet.network-plugin=cni" {
|
||||
continue
|
||||
}
|
||||
args = append(args, arg)
|
||||
}
|
||||
startArgs = args
|
||||
}
|
||||
|
||||
t.Run("serial", func(t *testing.T) {
|
||||
serialTests := []struct {
|
||||
name string
|
||||
|
|
|
|||
|
|
@ -244,6 +244,7 @@
|
|||
"Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "Fehler beim Ändern der Berechtigungen für {{.minikube_dir_path}}: {{.error}}",
|
||||
"Failed to check main repository and mirrors for images": "Prüfen des Haupt-Repositories und der Mirrors für Images fehlgeschlagen",
|
||||
"Failed to configure metallb IP {{.profile}}": "Konfiguration der metallb IP {{.profile}} fehlgeschlagen",
|
||||
"Failed to configure network plugin": "",
|
||||
"Failed to create file": "Erstellen der Datei fehlgeschlagen",
|
||||
"Failed to create runtime": "Erstellen der Runtime fehlgeschlagen",
|
||||
"Failed to delete cluster {{.name}}, proceeding with retry anyway.": "Löschen des Clusters {{.name}} fehlgeschlagen, versuche es dennoch erneut.",
|
||||
|
|
@ -574,6 +575,7 @@
|
|||
"Setting profile failed": "Setzten des Profiles fehlgeschlagen",
|
||||
"Show a list of global command-line options (applies to all commands).": "Zeige eine Liste von globalen Kommandozeilen Parametern (die auf alle Befehle angewendet werden können)",
|
||||
"Show only log entries which point to known problems": "Zeige nur Log Einträge, die auf bekannte Probleme hinweisen",
|
||||
"Show only the audit logs": "",
|
||||
"Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "Zeige die aktuellsten Journal Einträge und gebe neue Einträge aus, sobald diese im Journal eingetragen werden.",
|
||||
"Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "Simuliere den Numa Node Count in Minikube, der unterstützte Numa Node Count Bereich ist 1-8 (nur kvm2 Treiber)",
|
||||
"Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "Wechsel des kubectl Kontexts für {{.profile_name}} übersprungen, weil --keep-context gesetzt wurde.",
|
||||
|
|
|
|||
|
|
@ -253,6 +253,7 @@
|
|||
"Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "No se han podido cambiar los permisos de {{.minikube_dir_path}}: {{.error}}",
|
||||
"Failed to check main repository and mirrors for images": "",
|
||||
"Failed to configure metallb IP {{.profile}}": "",
|
||||
"Failed to configure network plugin": "",
|
||||
"Failed to create file": "No se pudo crear el fichero",
|
||||
"Failed to create runtime": "",
|
||||
"Failed to delete cluster {{.name}}, proceeding with retry anyway.": "",
|
||||
|
|
@ -581,6 +582,7 @@
|
|||
"Setting profile failed": "",
|
||||
"Show a list of global command-line options (applies to all commands).": "",
|
||||
"Show only log entries which point to known problems": "",
|
||||
"Show only the audit logs": "",
|
||||
"Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "",
|
||||
"Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "",
|
||||
"Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "",
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
"Access the Kubernetes dashboard running within the minikube cluster": "Accéder au tableau de bord Kubernetes exécuté dans le cluster de minikube",
|
||||
"Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "Accéder aux ports inférieurs à 1024 peut échouer sur Windows avec les clients OpenSSH antérieurs à v8.1. Pour plus d'information, voir: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission",
|
||||
"Add SSH identity key to SSH authentication agent": "Ajouter la clé d'identité SSH à l'agent d'authentication SSH",
|
||||
"Add an image into minikube as a local cache, or delete, reload the cached images": "",
|
||||
"Add an image into minikube as a local cache, or delete, reload the cached images": "Ajouter une image dans minikube en tant que cache local, ou supprimer, recharger les images en cache",
|
||||
"Add an image to local cache.": "Ajouter une image au cache local.",
|
||||
"Add host key to SSH known_hosts file": "Ajouter la clé hôte au fichier SSH known_hosts",
|
||||
"Add image to cache for all running minikube clusters": "Ajouter l'image au cache pour tous les cluster minikube en fonctionnement",
|
||||
|
|
@ -239,6 +239,7 @@
|
|||
"Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "Échec de la modification des autorisations pour {{.minikube_dir_path}} : {{.error}}",
|
||||
"Failed to check main repository and mirrors for images": "Échec de la vérification du référentiel principal et des miroirs pour les images",
|
||||
"Failed to configure metallb IP {{.profile}}": "Échec de la configuration de metallb IP {{.profile}}",
|
||||
"Failed to configure network plugin": "Échec de la configuration du plug-in réseau",
|
||||
"Failed to create file": "La création du fichier a échoué",
|
||||
"Failed to create runtime": "Échec de la création de l'environnement d'exécution",
|
||||
"Failed to delete cluster {{.name}}, proceeding with retry anyway.": "Échec de la suppression du cluster {{.name}}, réessayez quand même.",
|
||||
|
|
@ -387,7 +388,7 @@
|
|||
"Locations to fetch the minikube ISO from.": "Emplacements à partir desquels récupérer l'ISO minikube.",
|
||||
"Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "Connectez-vous ou exécutez une commande sur une machine avec SSH ; similaire à 'docker-machine ssh'.",
|
||||
"Log into the minikube environment (for debugging)": "Connectez-vous à l'environnement minikube (pour le débogage)",
|
||||
"Manage cache for images": "",
|
||||
"Manage cache for images": "Gérer le cache des images",
|
||||
"Manage images": "Gérer les images",
|
||||
"Message Size: {{.size}}": "Taille du message : {{.size}}",
|
||||
"Minimum VirtualBox Version supported: {{.vers}}, current VirtualBox version: {{.cvers}}": "Version minimale de VirtualBox prise en charge : {{.vers}}, version actuelle de VirtualBox : {{.cvers}}",
|
||||
|
|
@ -556,6 +557,7 @@
|
|||
"Setting profile failed": "Échec de la définition du profil",
|
||||
"Show a list of global command-line options (applies to all commands).": "Affiche une liste des options de ligne de commande globales (s'applique à toutes les commandes).",
|
||||
"Show only log entries which point to known problems": "Afficher uniquement les entrées de journal qui pointent vers des problèmes connus",
|
||||
"Show only the audit logs": "Afficher uniquement les journaux d'audit",
|
||||
"Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "Affichez uniquement les entrées de journal les plus récentes et imprimez en continu de nouvelles entrées au fur et à mesure qu'elles sont ajoutées au journal.",
|
||||
"Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "Simulez le nombre de nœuds numa dans minikube, la plage de nombre de nœuds numa pris en charge est de 1 à 8 (pilote kvm2 uniquement)",
|
||||
"Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "Changement de contexte kubectl ignoré pour {{.profile_name}} car --keep-context a été défini.",
|
||||
|
|
@ -613,7 +615,7 @@
|
|||
"Target {{.path}} can not be empty": "La cible {{.path}} ne peut pas être vide",
|
||||
"Test docs have been saved at - {{.path}}": "Les documents de test ont été enregistrés à - {{.path}}",
|
||||
"The \"{{.driver_name}}\" driver should not be used with root privileges.": "Le pilote \"{{.driver_name}}\" ne doit pas être utilisé avec les privilèges root.",
|
||||
"The \"{{.driver_name}}\" driver should not be used with root privileges. If you wish to continue as root, use --force.": "",
|
||||
"The \"{{.driver_name}}\" driver should not be used with root privileges. If you wish to continue as root, use --force.": "Le pilote \"{{.driver_name}}\" ne doit pas être utilisé avec les privilèges root. Si vous souhaitez continuer en tant que root, utilisez --force.",
|
||||
"The 'none' driver is designed for experts who need to integrate with an existing VM": "Le pilote 'none' est conçu pour les experts qui doivent s'intégrer à une machine virtuelle existante",
|
||||
"The '{{.addonName}}' addon is enabled": "Le module '{{.addonName}}' est activé",
|
||||
"The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\\n\\n{{ .example }}\\n": "Le pilote '{{.driver}}' nécessite des autorisations élevées. Les commandes suivantes seront exécutées :\\n\\n{{ .example }}\\n",
|
||||
|
|
@ -793,13 +795,13 @@
|
|||
"Using image repository {{.name}}": "Utilisation du dépôt d'images {{.name}}…",
|
||||
"Using image {{.registry}}{{.image}}": "Utilisation de l'image {{.registry}}{{.image}}",
|
||||
"Using image {{.registry}}{{.image}} (global image repository)": "Utilisation de l'image {{.registry}}{{.image}} (référentiel d'images global)",
|
||||
"Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "",
|
||||
"Using rootless driver was required, but the current driver does not seem rootless": "",
|
||||
"Using rootless {{.driver_name}} driver": "",
|
||||
"Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "L'utilisation du pilote Docker sans root était nécessaire, mais le Docker actuel ne semble pas sans root. Essayez 'docker context use rootless' .",
|
||||
"Using rootless driver was required, but the current driver does not seem rootless": "L'utilisation d'un pilote sans root était nécessaire, mais le pilote actuel ne semble pas sans root",
|
||||
"Using rootless {{.driver_name}} driver": "Utilisation du pilote {{.driver_name}} sans root",
|
||||
"Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "L'utilisation du runtime '{{.runtime}}' avec le pilote 'none' est une configuration non testée !",
|
||||
"Using the {{.driver}} driver based on existing profile": "Utilisation du pilote {{.driver}} basé sur le profil existant",
|
||||
"Using the {{.driver}} driver based on user configuration": "Utilisation du pilote {{.driver}} basé sur la configuration de l'utilisateur",
|
||||
"Using {{.driver_name}} driver with the root privilege": "",
|
||||
"Using {{.driver_name}} driver with the root privilege": "Utilisation du pilote {{.driver_name}} avec le privilège root",
|
||||
"Valid components are: {{.valid_extra_opts}}": "Les composants valides sont : {{.valid_extra_opts}}",
|
||||
"Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "Validez vos réseaux KVM. Exécutez : virt-host-validate puis virsh net-list --all",
|
||||
"Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "Vérifiez que vos variables d'environnement HTTP_PROXY et HTTPS_PROXY sont correctement définies.",
|
||||
|
|
@ -830,7 +832,7 @@
|
|||
"You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas modifier les processeurs d'un cluster minikube existant. Veuillez d'abord supprimer le cluster.",
|
||||
"You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas modifier la taille du disque pour un cluster minikube existant. Veuillez d'abord supprimer le cluster.",
|
||||
"You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas modifier la taille de la mémoire d'un cluster minikube existant. Veuillez d'abord supprimer le cluster.",
|
||||
"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.": "",
|
||||
"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.": "Vous vous êtes authentifié avec un compte de service qui n'a pas de JSON associé. L'authentification GCP nécessite des informations d'identification avec un fichier JSON pour continuer. Le secret d'extraction d'image a été importé.",
|
||||
"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.": "Vous vous êtes authentifié avec un compte de service qui n'a pas de JSON associé. L'authentification GCP nécessite des informations d'identification avec un fichier JSON pour continuer. Le secret d'extraction d'image a été importé.",
|
||||
"You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "Vous avez choisi de désactiver le CNI mais le runtime du conteneur \\\"{{.name}}\\\" nécessite CNI",
|
||||
"You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "Vous avez sélectionné le pilote \"virtualbox\", mais il existe de meilleures options !\nPour de meilleures performances et une meilleure assistance, envisagez d'utiliser un autre pilote: {{.drivers}}\n\nPour désactiver cet avertissement, exécutez :\n\n\t $ minikube config set WantVirtualBoxDriverWarning false\n\n\nPour en savoir plus sur les pilotes minikube, consultez https://minikube.sigs.k8s.io/docs/drivers/\nPour voir les benchmarks, consultez https://minikube.sigs.k8s. io/docs/benchmarks/cpuusage/\n\n",
|
||||
|
|
|
|||
|
|
@ -245,6 +245,7 @@
|
|||
"Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "{{.minikube_dir_path}} に対する権限の変更に失敗しました: {{.error}}",
|
||||
"Failed to check main repository and mirrors for images": "メインリポジトリーとミラーのイメージのチェックに失敗しました",
|
||||
"Failed to configure metallb IP {{.profile}}": "metallb IP {{.profile}} の設定に失敗しました",
|
||||
"Failed to configure network plugin": "",
|
||||
"Failed to create file": "ファイルの作成に失敗しました",
|
||||
"Failed to create runtime": "ランタイムの作成に失敗しました",
|
||||
"Failed to delete cluster {{.name}}, proceeding with retry anyway.": "{{.name}} クラスターを削除できませんでしたが、処理を続行します。",
|
||||
|
|
@ -572,6 +573,7 @@
|
|||
"Setting profile failed": "プロファイルの設定に失敗しました",
|
||||
"Show a list of global command-line options (applies to all commands).": "(全コマンドに適用される) グローバルコマンドラインオプションの一覧を表示します。",
|
||||
"Show only log entries which point to known problems": "既知の問題を示すログエントリーのみ表示します",
|
||||
"Show only the audit logs": "",
|
||||
"Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "直近のジャーナルエントリーのみ表示し、ジャーナルに追加された新しいエントリーを連続して表示します。",
|
||||
"Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "minikube 中の NUMA ノードカウントをシミュレートします (対応 NUMA ノードカウント範囲は 1~8 (kvm2 ドライバーのみ))",
|
||||
"Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "--keep-context が設定されたので、{{.profile_name}} 用 kubectl コンテキストの切替をスキップしました。",
|
||||
|
|
|
|||
|
|
@ -266,6 +266,7 @@
|
|||
"Failed to check if machine exists": "머신이 존재하는지 확인하는 데 실패하였습니다",
|
||||
"Failed to check main repository and mirrors for images": "",
|
||||
"Failed to configure metallb IP {{.profile}}": "",
|
||||
"Failed to configure network plugin": "",
|
||||
"Failed to create file": "",
|
||||
"Failed to create runtime": "",
|
||||
"Failed to delete cluster {{.name}}, proceeding with retry anyway.": "",
|
||||
|
|
@ -593,6 +594,7 @@
|
|||
"Setting profile failed": "프로필 설정이 실패하였습니다",
|
||||
"Show a list of global command-line options (applies to all commands).": "",
|
||||
"Show only log entries which point to known problems": "",
|
||||
"Show only the audit logs": "",
|
||||
"Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "",
|
||||
"Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "",
|
||||
"Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "",
|
||||
|
|
|
|||
|
|
@ -255,6 +255,7 @@
|
|||
"Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "Nie udało się zmienić uprawnień pliku {{.minikube_dir_path}}: {{.error}}",
|
||||
"Failed to check main repository and mirrors for images": "",
|
||||
"Failed to configure metallb IP {{.profile}}": "",
|
||||
"Failed to configure network plugin": "",
|
||||
"Failed to create file": "",
|
||||
"Failed to create runtime": "",
|
||||
"Failed to delete cluster {{.name}}, proceeding with retry anyway.": "",
|
||||
|
|
@ -594,6 +595,7 @@
|
|||
"Setting profile failed": "Ustawianie profilu nie powiodło się",
|
||||
"Show a list of global command-line options (applies to all commands).": "",
|
||||
"Show only log entries which point to known problems": "Pokaż logi które wskazują na znane problemy",
|
||||
"Show only the audit logs": "",
|
||||
"Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "",
|
||||
"Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "",
|
||||
"Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "Zignorowano zmianę kontekstu kubectl dla {{.profile_name}} ponieważ --keep-context zostało przekazane",
|
||||
|
|
|
|||
|
|
@ -229,6 +229,7 @@
|
|||
"Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "",
|
||||
"Failed to check main repository and mirrors for images": "",
|
||||
"Failed to configure metallb IP {{.profile}}": "",
|
||||
"Failed to configure network plugin": "",
|
||||
"Failed to create file": "",
|
||||
"Failed to create runtime": "",
|
||||
"Failed to delete cluster {{.name}}, proceeding with retry anyway.": "",
|
||||
|
|
@ -541,6 +542,7 @@
|
|||
"Setting profile failed": "",
|
||||
"Show a list of global command-line options (applies to all commands).": "",
|
||||
"Show only log entries which point to known problems": "",
|
||||
"Show only the audit logs": "",
|
||||
"Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "",
|
||||
"Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "",
|
||||
"Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "",
|
||||
|
|
|
|||
|
|
@ -229,6 +229,7 @@
|
|||
"Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "",
|
||||
"Failed to check main repository and mirrors for images": "",
|
||||
"Failed to configure metallb IP {{.profile}}": "",
|
||||
"Failed to configure network plugin": "",
|
||||
"Failed to create file": "",
|
||||
"Failed to create runtime": "",
|
||||
"Failed to delete cluster {{.name}}, proceeding with retry anyway.": "",
|
||||
|
|
@ -541,6 +542,7 @@
|
|||
"Setting profile failed": "",
|
||||
"Show a list of global command-line options (applies to all commands).": "",
|
||||
"Show only log entries which point to known problems": "",
|
||||
"Show only the audit logs": "",
|
||||
"Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "",
|
||||
"Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "",
|
||||
"Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "",
|
||||
|
|
|
|||
|
|
@ -314,6 +314,7 @@
|
|||
"Failed to check main repository and mirrors for images": "",
|
||||
"Failed to check main repository and mirrors for images for images": "无法检测主仓库和镜像仓库中的镜像",
|
||||
"Failed to configure metallb IP {{.profile}}": "",
|
||||
"Failed to configure network plugin": "",
|
||||
"Failed to create file": "",
|
||||
"Failed to create runtime": "",
|
||||
"Failed to delete cluster {{.name}}, proceeding with retry anyway.": "",
|
||||
|
|
@ -677,6 +678,7 @@
|
|||
"Setting profile failed": "设置配置文件失败",
|
||||
"Show a list of global command-line options (applies to all commands).": "显示全局命令行选项列表 (应用于所有命令)。",
|
||||
"Show only log entries which point to known problems": "",
|
||||
"Show only the audit logs": "",
|
||||
"Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "",
|
||||
"Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "",
|
||||
"Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "",
|
||||
|
|
|
|||
Loading…
Reference in New Issue