60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
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
|
|
}
|