package integration import ( "fmt" "net/url" ) // ControlPlane is a struct that knows how to start your test control plane. // // Right now, that means Etcd and your APIServer. This is likely to increase in // future. type ControlPlane struct { APIServer *APIServer Etcd *Etcd } // Start will start your control plane processes. To stop them, call Stop(). func (f *ControlPlane) Start() error { if f.Etcd == nil { f.Etcd = &Etcd{} } if err := f.Etcd.Start(); err != nil { return err } if f.APIServer == nil { f.APIServer = &APIServer{} } f.APIServer.EtcdURL = f.Etcd.URL return f.APIServer.Start() } // Stop will stop your control plane processes, and clean up their data. func (f *ControlPlane) Stop() error { if f.APIServer != nil { if err := f.APIServer.Stop(); err != nil { return err } } if f.Etcd != nil { if err := f.Etcd.Stop(); err != nil { return err } } return nil } // APIURL returns the URL you should connect to to talk to your API. func (f *ControlPlane) APIURL() *url.URL { return f.APIServer.URL } // KubeCtl returns a pre-configured KubeCtl, ready to connect to this // ControlPlane. func (f *ControlPlane) KubeCtl() *KubeCtl { k := &KubeCtl{} k.Opts = append(k.Opts, fmt.Sprintf("--server=%s", f.APIURL())) return k }