Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/minikube/cmd/node_add.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ var nodeAddCmd = &cobra.Command{
}

register.Reg.SetStep(register.InitialSetup)
if err := node.Add(cc, n, deleteNodeOnFailure); err != nil {
if err := node.Add(cc, n, deleteNodeOnFailure, commandOptions()); err != nil {
_, err := maybeDeleteAndRetry(cmd, *cc, n, nil, err)
if err != nil {
exit.Error(reason.GuestNodeAdd, "failed to add node", err)
Expand Down
2 changes: 1 addition & 1 deletion cmd/minikube/cmd/node_start.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ var nodeStartCmd = &cobra.Command{
}

register.Reg.SetStep(register.InitialSetup)
r, p, m, h, err := node.Provision(cc, n, viper.GetBool(deleteOnFailure))
r, p, m, h, err := node.Provision(cc, n, viper.GetBool(deleteOnFailure), commandOptions())
if err != nil {
exit.Error(reason.GuestNodeProvision, "provisioning host for node", err)
}
Expand Down
8 changes: 8 additions & 0 deletions cmd/minikube/cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import (
"k8s.io/minikube/pkg/minikube/notify"
"k8s.io/minikube/pkg/minikube/out"
"k8s.io/minikube/pkg/minikube/reason"
"k8s.io/minikube/pkg/minikube/run"
"k8s.io/minikube/pkg/minikube/translate"
"k8s.io/minikube/pkg/version"
)
Expand Down Expand Up @@ -352,3 +353,10 @@ func applyToAllCommands(cmd *cobra.Command, f func(subCmd *cobra.Command)) {
}
}
}

// commandOptions creates minikube runtime options from the command line flags.
// Flags that must be handled outside of the cmd package must be added to
// run.Options.
func commandOptions() *run.Options {
return &run.Options{}
}
10 changes: 7 additions & 3 deletions cmd/minikube/cmd/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,7 @@ func provisionWithDriver(cmd *cobra.Command, ds registry.DriverState, existing *
ssh.SetDefaultClient(ssh.External)
}

mRunner, preExists, mAPI, host, err := node.Provision(&cc, &n, viper.GetBool(deleteOnFailure))
mRunner, preExists, mAPI, host, err := node.Provision(&cc, &n, viper.GetBool(deleteOnFailure), commandOptions())
if err != nil {
return node.Starter{}, err
}
Expand Down Expand Up @@ -495,6 +495,8 @@ func startWithDriver(cmd *cobra.Command, starter node.Starter, existing *config.
numCPNodes = 3
}

options := commandOptions()

// apart from starter, add any additional existing or new nodes
for i := 1; i < numNodes; i++ {
var n config.Node
Expand All @@ -515,7 +517,7 @@ func startWithDriver(cmd *cobra.Command, starter node.Starter, existing *config.
}

out.Ln("") // extra newline for clarity on the command line
if err := node.Add(starter.Cfg, n, viper.GetBool(deleteOnFailure)); err != nil {
if err := node.Add(starter.Cfg, n, viper.GetBool(deleteOnFailure), options); err != nil {
return nil, errors.Wrap(err, "adding node")
}
}
Expand Down Expand Up @@ -648,8 +650,10 @@ func maybeDeleteAndRetry(cmd *cobra.Command, existing config.ClusterConfig, n co
// Re-generate the cluster config, just in case the failure was related to an old config format
cc := updateExistingConfigFromFlags(cmd, &existing)
var configInfo *kubeconfig.Settings
options := commandOptions()

for _, n := range cc.Nodes {
r, p, m, h, err := node.Provision(&cc, &n, false)
r, p, m, h, err := node.Provision(&cc, &n, false, options)
s := node.Starter{
Runner: r,
PreExists: p,
Expand Down
5 changes: 4 additions & 1 deletion pkg/drivers/common/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
"github.com/pkg/errors"

"k8s.io/klog/v2"
"k8s.io/minikube/pkg/minikube/run"
"k8s.io/minikube/pkg/util"
)

Expand Down Expand Up @@ -85,7 +86,9 @@ func CreateRawDisk(diskPath string, sizeMB int) error {
}

// CommonDriver is the common driver base class
type CommonDriver struct{}
type CommonDriver struct {
Options run.Options `json:"-"`
}

// GetCreateFlags is not implemented yet
func (d *CommonDriver) GetCreateFlags() []mcnflag.Flag {
Expand Down
35 changes: 18 additions & 17 deletions pkg/minikube/machine/cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"k8s.io/minikube/pkg/minikube/constants"
"k8s.io/minikube/pkg/minikube/download"
_ "k8s.io/minikube/pkg/minikube/registry/drvs/virtualbox"
"k8s.io/minikube/pkg/minikube/run"

"github.com/docker/machine/libmachine/drivers"
"github.com/docker/machine/libmachine/host"
Expand All @@ -38,7 +39,7 @@ import (
"k8s.io/minikube/pkg/minikube/tests"
)

func createMockDriverHost(_ config.ClusterConfig, _ config.Node) (interface{}, error) {
func createMockDriverHost(_ config.ClusterConfig, _ config.Node, _ *run.Options) (interface{}, error) {
return nil, nil
}

Expand Down Expand Up @@ -84,7 +85,7 @@ func TestCreateHost(t *testing.T) {
t.Fatal("Machine already exists.")
}

_, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"})
_, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"}, &run.Options{})
if err != nil {
t.Fatalf("Error creating host: %v", err)
}
Expand Down Expand Up @@ -127,7 +128,7 @@ func TestStartHostExists(t *testing.T) {
api := tests.NewMockAPI(t)

// Create an initial host.
ih, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"})
ih, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"}, &run.Options{})
if err != nil {
t.Fatalf("Error creating host: %v", err)
}
Expand All @@ -145,7 +146,7 @@ func TestStartHostExists(t *testing.T) {
mc.Name = ih.Name

// This should pass without calling Create because the host exists already.
h, _, err := StartHost(api, &mc, &(mc.Nodes[0]))
h, _, err := StartHost(api, &mc, &(mc.Nodes[0]), &run.Options{})
if err != nil {
t.Fatalf("Error starting host: %v", err)
}
Expand All @@ -166,7 +167,7 @@ func TestStartHostErrMachineNotExist(t *testing.T) {
api := tests.NewMockAPI(t)
// Create an incomplete host with machine does not exist error(i.e. User Interrupt Cancel)
api.NotExistError = true
h, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"})
h, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"}, &run.Options{})
if err != nil {
t.Fatalf("Error creating host: %v", err)
}
Expand All @@ -180,7 +181,7 @@ func TestStartHostErrMachineNotExist(t *testing.T) {
n := config.Node{Name: h.Name}

// This should pass with creating host, while machine does not exist.
h, _, err = StartHost(api, &mc, &n)
h, _, err = StartHost(api, &mc, &n, &run.Options{})
if err != nil {
if err != constants.ErrMachineMissing {
t.Fatalf("Error starting host: %v", err)
Expand All @@ -193,7 +194,7 @@ func TestStartHostErrMachineNotExist(t *testing.T) {
n.Name = h.Name

// Second call. This should pass without calling Create because the host exists already.
h, _, err = StartHost(api, &mc, &n)
h, _, err = StartHost(api, &mc, &n, &run.Options{})
if err != nil {
t.Fatalf("Error starting host: %v", err)
}
Expand All @@ -214,7 +215,7 @@ func TestStartStoppedHost(t *testing.T) {
RegisterMockDriver(t)
api := tests.NewMockAPI(t)
// Create an initial host.
h, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"})
h, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"}, &run.Options{})
if err != nil {
t.Fatalf("Error creating host: %v", err)
}
Expand All @@ -227,7 +228,7 @@ func TestStartStoppedHost(t *testing.T) {
mc := defaultClusterConfig
mc.Name = h.Name
n := config.Node{Name: h.Name}
h, _, err = StartHost(api, &mc, &n)
h, _, err = StartHost(api, &mc, &n, &run.Options{})
if err != nil {
t.Fatal("Error starting host.")
}
Expand Down Expand Up @@ -256,7 +257,7 @@ func TestStartHost(t *testing.T) {
md := &tests.MockDetector{Provisioner: &tests.MockProvisioner{}}
provision.SetDetector(md)

h, _, err := StartHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"})
h, _, err := StartHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"}, &run.Options{})
if err != nil {
t.Fatal("Error starting host.")
}
Expand Down Expand Up @@ -294,7 +295,7 @@ func TestStartHostConfig(t *testing.T) {
DockerOpt: []string{"param=value"},
}

h, _, err := StartHost(api, &cfg, &config.Node{Name: "minikube"})
h, _, err := StartHost(api, &cfg, &config.Node{Name: "minikube"}, &run.Options{})
if err != nil {
t.Fatal("Error starting host.")
}
Expand Down Expand Up @@ -326,7 +327,7 @@ func TestStopHost(t *testing.T) {

RegisterMockDriver(t)
api := tests.NewMockAPI(t)
h, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"})
h, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"}, &run.Options{})
if err != nil {
t.Errorf("createHost failed: %v", err)
}
Expand All @@ -347,7 +348,7 @@ func TestDeleteHost(t *testing.T) {

RegisterMockDriver(t)
api := tests.NewMockAPI(t)
if _, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"}); err != nil {
if _, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"}, &run.Options{}); err != nil {
t.Errorf("createHost failed: %v", err)
}

Expand All @@ -364,7 +365,7 @@ func TestDeleteHostErrorDeletingVM(t *testing.T) {

RegisterMockDriver(t)
api := tests.NewMockAPI(t)
h, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"})
h, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"}, &run.Options{})
if err != nil {
t.Errorf("createHost failed: %v", err)
}
Expand All @@ -383,7 +384,7 @@ func TestDeleteHostErrorDeletingFiles(t *testing.T) {
RegisterMockDriver(t)
api := tests.NewMockAPI(t)
api.RemoveError = true
if _, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"}); err != nil {
if _, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"}, &run.Options{}); err != nil {
t.Errorf("createHost failed: %v", err)
}

Expand All @@ -399,7 +400,7 @@ func TestDeleteHostErrMachineNotExist(t *testing.T) {
api := tests.NewMockAPI(t)
// Create an incomplete host with machine does not exist error(i.e. User Interrupt Cancel)
api.NotExistError = true
_, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"})
_, err := createHost(api, &defaultClusterConfig, &config.Node{Name: "minikube"}, &run.Options{})
if err != nil {
t.Errorf("createHost failed: %v", err)
}
Expand Down Expand Up @@ -432,7 +433,7 @@ func TestStatus(t *testing.T) {

checkState(state.None.String(), m)

if _, err := createHost(api, &cc, &config.Node{Name: "minikube"}); err != nil {
if _, err := createHost(api, &cc, &config.Node{Name: "minikube"}, &run.Options{}); err != nil {
t.Errorf("createHost failed: %v", err)
}

Expand Down
9 changes: 5 additions & 4 deletions pkg/minikube/machine/fix.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import (
"k8s.io/minikube/pkg/minikube/driver"
"k8s.io/minikube/pkg/minikube/out"
"k8s.io/minikube/pkg/minikube/out/register"
"k8s.io/minikube/pkg/minikube/run"
"k8s.io/minikube/pkg/minikube/style"
)

Expand All @@ -49,7 +50,7 @@ const (
)

// fixHost fixes up a previously configured VM so that it is ready to run Kubernetes
func fixHost(api libmachine.API, cc *config.ClusterConfig, n *config.Node) (*host.Host, error) {
func fixHost(api libmachine.API, cc *config.ClusterConfig, n *config.Node, options *run.Options) (*host.Host, error) {
start := time.Now()
klog.Infof("fixHost starting: %s", n.Name)
defer func() {
Expand All @@ -67,7 +68,7 @@ func fixHost(api libmachine.API, cc *config.ClusterConfig, n *config.Node) (*hos
// check if need to re-run docker-env
maybeWarnAboutEvalEnv(driverName, cc.Name)

h, err = recreateIfNeeded(api, cc, n, h)
h, err = recreateIfNeeded(api, cc, n, h, options)
if err != nil {
return h, err
}
Expand Down Expand Up @@ -103,7 +104,7 @@ func fixHost(api libmachine.API, cc *config.ClusterConfig, n *config.Node) (*hos
return h, nil
}

func recreateIfNeeded(api libmachine.API, cc *config.ClusterConfig, n *config.Node, h *host.Host) (*host.Host, error) {
func recreateIfNeeded(api libmachine.API, cc *config.ClusterConfig, n *config.Node, h *host.Host, options *run.Options) (*host.Host, error) {
machineName := config.MachineName(*cc, *n)
machineType := driver.MachineType(cc.Driver)
recreated := false
Expand All @@ -124,7 +125,7 @@ func recreateIfNeeded(api libmachine.API, cc *config.ClusterConfig, n *config.No
klog.Infof("Sleeping 1 second for extra luck!")
time.Sleep(1 * time.Second)

h, err = createHost(api, cc, n)
h, err = createHost(api, cc, n, options)
if err != nil {
return nil, errors.Wrap(err, "recreate")
}
Expand Down
11 changes: 6 additions & 5 deletions pkg/minikube/machine/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import (
"k8s.io/minikube/pkg/minikube/proxy"
"k8s.io/minikube/pkg/minikube/reason"
"k8s.io/minikube/pkg/minikube/registry"
"k8s.io/minikube/pkg/minikube/run"
"k8s.io/minikube/pkg/minikube/style"
"k8s.io/minikube/pkg/minikube/vmpath"
"k8s.io/minikube/pkg/util"
Expand All @@ -70,7 +71,7 @@ var requiredDirectories = []string{
}

// StartHost starts a host VM.
func StartHost(api libmachine.API, cfg *config.ClusterConfig, n *config.Node) (*host.Host, bool, error) {
func StartHost(api libmachine.API, cfg *config.ClusterConfig, n *config.Node, options *run.Options) (*host.Host, bool, error) {
machineName := config.MachineName(*cfg, *n)

// Prevent machine-driver boot races, as well as our own certificate race
Expand All @@ -91,10 +92,10 @@ func StartHost(api libmachine.API, cfg *config.ClusterConfig, n *config.Node) (*
var h *host.Host
if !exists {
klog.Infof("Provisioning new machine with config: %+v %+v", cfg, n)
h, err = createHost(api, cfg, n)
h, err = createHost(api, cfg, n, options)
} else {
klog.Infoln("Skipping create...Using existing machine configuration")
h, err = fixHost(api, cfg, n)
h, err = fixHost(api, cfg, n, options)
}
if err != nil {
return h, exists, err
Expand All @@ -121,7 +122,7 @@ func engineOptions(cfg config.ClusterConfig) *engine.Options {
return &o
}

func createHost(api libmachine.API, cfg *config.ClusterConfig, n *config.Node) (*host.Host, error) {
func createHost(api libmachine.API, cfg *config.ClusterConfig, n *config.Node, options *run.Options) (*host.Host, error) {
klog.Infof("createHost starting for %q (driver=%q)", n.Name, cfg.Driver)
start := time.Now()
defer func() {
Expand All @@ -136,7 +137,7 @@ func createHost(api libmachine.API, cfg *config.ClusterConfig, n *config.Node) (
if def.Empty() {
return nil, fmt.Errorf("unsupported/missing driver: %s", cfg.Driver)
}
dd, err := def.Config(*cfg, *n)
dd, err := def.Config(*cfg, *n, options)
if err != nil {
return nil, errors.Wrap(err, "config")
}
Expand Down
5 changes: 3 additions & 2 deletions pkg/minikube/node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,14 @@ import (
"k8s.io/minikube/pkg/minikube/cruntime"
"k8s.io/minikube/pkg/minikube/machine"
"k8s.io/minikube/pkg/minikube/mustload"
"k8s.io/minikube/pkg/minikube/run"
"k8s.io/minikube/pkg/util"
"k8s.io/minikube/pkg/util/retry"
kconst "k8s.io/minikube/third_party/kubeadm/app/constants"
)

// Add adds a new node config to an existing cluster.
func Add(cc *config.ClusterConfig, n config.Node, delOnFail bool) error {
func Add(cc *config.ClusterConfig, n config.Node, delOnFail bool, options *run.Options) error {
profiles, err := config.ListValidProfiles()
if err != nil {
return err
Expand All @@ -69,7 +70,7 @@ func Add(cc *config.ClusterConfig, n config.Node, delOnFail bool) error {
return errors.Wrap(err, "save node")
}

r, p, m, h, err := Provision(cc, &n, delOnFail)
r, p, m, h, err := Provision(cc, &n, delOnFail, options)
if err != nil {
return err
}
Expand Down
Loading
Loading