mirror of https://github.com/docker/docs.git
Make service init calls into the driver methods.
Otherwise, because of the way Go does method dispatch, derived versions of those methods will never be called. Signed-off-by: Ash Wilson <ash.wilson@rackspace.com>
This commit is contained in:
parent
b046940433
commit
8466d95fa0
|
@ -16,6 +16,10 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Client interface {
|
type Client interface {
|
||||||
|
Authenticate(d *Driver) error
|
||||||
|
InitComputeClient(d *Driver) error
|
||||||
|
InitNetworkClient(d *Driver) error
|
||||||
|
|
||||||
CreateInstance(d *Driver) (string, error)
|
CreateInstance(d *Driver) (string, error)
|
||||||
GetInstanceState(d *Driver) (string, error)
|
GetInstanceState(d *Driver) (string, error)
|
||||||
StartInstance(d *Driver) error
|
StartInstance(d *Driver) error
|
||||||
|
@ -26,7 +30,6 @@ type Client interface {
|
||||||
GetInstanceIpAddresses(d *Driver) ([]IpAddress, error)
|
GetInstanceIpAddresses(d *Driver) ([]IpAddress, error)
|
||||||
CreateKeyPair(d *Driver, name string, publicKey string) error
|
CreateKeyPair(d *Driver, name string, publicKey string) error
|
||||||
DeleteKeyPair(d *Driver, name string) error
|
DeleteKeyPair(d *Driver, name string) error
|
||||||
Authenticate(d *Driver) error
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type GenericClient struct {
|
type GenericClient struct {
|
||||||
|
@ -36,9 +39,6 @@ type GenericClient struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *GenericClient) CreateInstance(d *Driver) (string, error) {
|
func (c *GenericClient) CreateInstance(d *Driver) (string, error) {
|
||||||
if err := c.initComputeClient(d); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
serverOpts := servers.CreateOpts{
|
serverOpts := servers.CreateOpts{
|
||||||
Name: d.MachineName,
|
Name: d.MachineName,
|
||||||
FlavorRef: d.FlavorId,
|
FlavorRef: d.FlavorId,
|
||||||
|
@ -88,9 +88,6 @@ func (c *GenericClient) GetInstanceState(d *Driver) (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *GenericClient) StartInstance(d *Driver) error {
|
func (c *GenericClient) StartInstance(d *Driver) error {
|
||||||
if err := c.initComputeClient(d); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if result := startstop.Start(c.Compute, d.MachineId); result.Err != nil {
|
if result := startstop.Start(c.Compute, d.MachineId); result.Err != nil {
|
||||||
return result.Err
|
return result.Err
|
||||||
}
|
}
|
||||||
|
@ -98,9 +95,6 @@ func (c *GenericClient) StartInstance(d *Driver) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *GenericClient) StopInstance(d *Driver) error {
|
func (c *GenericClient) StopInstance(d *Driver) error {
|
||||||
if err := c.initComputeClient(d); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if result := startstop.Stop(c.Compute, d.MachineId); result.Err != nil {
|
if result := startstop.Stop(c.Compute, d.MachineId); result.Err != nil {
|
||||||
return result.Err
|
return result.Err
|
||||||
}
|
}
|
||||||
|
@ -108,9 +102,6 @@ func (c *GenericClient) StopInstance(d *Driver) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *GenericClient) RestartInstance(d *Driver) error {
|
func (c *GenericClient) RestartInstance(d *Driver) error {
|
||||||
if err := c.initComputeClient(d); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if result := servers.Reboot(c.Compute, d.MachineId, servers.SoftReboot); result.Err != nil {
|
if result := servers.Reboot(c.Compute, d.MachineId, servers.SoftReboot); result.Err != nil {
|
||||||
return result.Err
|
return result.Err
|
||||||
}
|
}
|
||||||
|
@ -118,9 +109,6 @@ func (c *GenericClient) RestartInstance(d *Driver) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *GenericClient) DeleteInstance(d *Driver) error {
|
func (c *GenericClient) DeleteInstance(d *Driver) error {
|
||||||
if err := c.initComputeClient(d); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if result := servers.Delete(c.Compute, d.MachineId); result.Err != nil {
|
if result := servers.Delete(c.Compute, d.MachineId); result.Err != nil {
|
||||||
return result.Err
|
return result.Err
|
||||||
}
|
}
|
||||||
|
@ -238,9 +226,6 @@ func (c *GenericClient) GetImageId(d *Driver, imageName string) (string, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *GenericClient) CreateKeyPair(d *Driver, name string, publicKey string) error {
|
func (c *GenericClient) CreateKeyPair(d *Driver, name string, publicKey string) error {
|
||||||
if err := c.initComputeClient(d); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
opts := keypairs.CreateOpts{
|
opts := keypairs.CreateOpts{
|
||||||
Name: name,
|
Name: name,
|
||||||
PublicKey: publicKey,
|
PublicKey: publicKey,
|
||||||
|
@ -252,9 +237,6 @@ func (c *GenericClient) CreateKeyPair(d *Driver, name string, publicKey string)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *GenericClient) DeleteKeyPair(d *Driver, name string) error {
|
func (c *GenericClient) DeleteKeyPair(d *Driver, name string) error {
|
||||||
if err := c.initComputeClient(d); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if result := keypairs.Delete(c.Compute, name); result.Err != nil {
|
if result := keypairs.Delete(c.Compute, name); result.Err != nil {
|
||||||
return result.Err
|
return result.Err
|
||||||
}
|
}
|
||||||
|
@ -262,9 +244,6 @@ func (c *GenericClient) DeleteKeyPair(d *Driver, name string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *GenericClient) getServerDetail(d *Driver) (*servers.Server, error) {
|
func (c *GenericClient) getServerDetail(d *Driver) (*servers.Server, error) {
|
||||||
if err := c.initComputeClient(d); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
server, err := servers.Get(c.Compute, d.MachineId).Extract()
|
server, err := servers.Get(c.Compute, d.MachineId).Extract()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -273,11 +252,6 @@ func (c *GenericClient) getServerDetail(d *Driver) (*servers.Server, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *GenericClient) getFloatingIPs(d *Driver) ([]string, error) {
|
func (c *GenericClient) getFloatingIPs(d *Driver) ([]string, error) {
|
||||||
|
|
||||||
if err := c.initNetworkClient(d); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
pager := floatingips.List(c.Network, floatingips.ListOpts{})
|
pager := floatingips.List(c.Network, floatingips.ListOpts{})
|
||||||
|
|
||||||
err := pager.EachPage(func(page pagination.Page) (bool, error) {
|
err := pager.EachPage(func(page pagination.Page) (bool, error) {
|
||||||
|
@ -298,11 +272,6 @@ func (c *GenericClient) getFloatingIPs(d *Driver) ([]string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *GenericClient) getPorts(d *Driver) ([]string, error) {
|
func (c *GenericClient) getPorts(d *Driver) ([]string, error) {
|
||||||
|
|
||||||
if err := c.initNetworkClient(d); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
pager := ports.List(c.Network, ports.ListOpts{
|
pager := ports.List(c.Network, ports.ListOpts{
|
||||||
DeviceID: d.MachineId,
|
DeviceID: d.MachineId,
|
||||||
})
|
})
|
||||||
|
@ -324,7 +293,7 @@ func (c *GenericClient) getPorts(d *Driver) ([]string, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *GenericClient) initComputeClient(d *Driver) error {
|
func (c *GenericClient) InitComputeClient(d *Driver) error {
|
||||||
if c.Provider == nil {
|
if c.Provider == nil {
|
||||||
err := c.Authenticate(d)
|
err := c.Authenticate(d)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -342,13 +311,7 @@ func (c *GenericClient) initComputeClient(d *Driver) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *GenericClient) initNetworkClient(d *Driver) error {
|
func (c *GenericClient) InitNetworkClient(d *Driver) error {
|
||||||
if c.Provider == nil {
|
|
||||||
err := c.Authenticate(d)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
network, err := openstack.NewNetworkV2(c.Provider, gophercloud.EndpointOpts{
|
network, err := openstack.NewNetworkV2(c.Provider, gophercloud.EndpointOpts{
|
||||||
Region: d.Region,
|
Region: d.Region,
|
||||||
Availability: c.getEndpointType(d),
|
Availability: c.getEndpointType(d),
|
||||||
|
@ -371,6 +334,10 @@ func (c *GenericClient) getEndpointType(d *Driver) gophercloud.Availability {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *GenericClient) Authenticate(d *Driver) error {
|
func (c *GenericClient) Authenticate(d *Driver) error {
|
||||||
|
if c.Provider != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
log.WithFields(log.Fields{
|
log.WithFields(log.Fields{
|
||||||
"AuthUrl": d.AuthUrl,
|
"AuthUrl": d.AuthUrl,
|
||||||
"Username": d.Username,
|
"Username": d.Username,
|
||||||
|
|
|
@ -213,6 +213,10 @@ func (d *Driver) GetURL() (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Driver) GetIP() (string, error) {
|
func (d *Driver) GetIP() (string, error) {
|
||||||
|
if err := d.initCompute(); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
addresses, err := d.client.GetInstanceIpAddresses(d)
|
addresses, err := d.client.GetInstanceIpAddresses(d)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
|
@ -251,8 +255,13 @@ func (d *Driver) GetIP() (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Driver) GetState() (state.State, error) {
|
func (d *Driver) GetState() (state.State, error) {
|
||||||
|
|
||||||
log.WithField("MachineId", d.MachineId).Debug("Get status for OpenStack instance...")
|
log.WithField("MachineId", d.MachineId).Debug("Get status for OpenStack instance...")
|
||||||
|
if err := d.initCompute(); err != nil {
|
||||||
|
return state.None, err
|
||||||
|
}
|
||||||
|
if err := d.initNetwork(); err != nil {
|
||||||
|
return state.None, err
|
||||||
|
}
|
||||||
|
|
||||||
s, err := d.client.GetInstanceState(d)
|
s, err := d.client.GetInstanceState(d)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -282,7 +291,6 @@ func (d *Driver) GetState() (state.State, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Driver) Create() error {
|
func (d *Driver) Create() error {
|
||||||
|
|
||||||
d.setMachineNameIfNotSet()
|
d.setMachineNameIfNotSet()
|
||||||
d.KeyPairName = d.MachineName
|
d.KeyPairName = d.MachineName
|
||||||
|
|
||||||
|
@ -306,6 +314,9 @@ func (d *Driver) Create() error {
|
||||||
|
|
||||||
func (d *Driver) Start() error {
|
func (d *Driver) Start() error {
|
||||||
log.WithField("MachineId", d.MachineId).Info("Starting OpenStack instance...")
|
log.WithField("MachineId", d.MachineId).Info("Starting OpenStack instance...")
|
||||||
|
if err := d.initCompute(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := d.client.StartInstance(d); err != nil {
|
if err := d.client.StartInstance(d); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -313,8 +324,10 @@ func (d *Driver) Start() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Driver) Stop() error {
|
func (d *Driver) Stop() error {
|
||||||
|
|
||||||
log.WithField("MachineId", d.MachineId).Info("Stopping OpenStack instance...")
|
log.WithField("MachineId", d.MachineId).Info("Stopping OpenStack instance...")
|
||||||
|
if err := d.initCompute(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := d.client.StopInstance(d); err != nil {
|
if err := d.client.StopInstance(d); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -328,6 +341,9 @@ func (d *Driver) Stop() error {
|
||||||
|
|
||||||
func (d *Driver) Remove() error {
|
func (d *Driver) Remove() error {
|
||||||
log.WithField("MachineId", d.MachineId).Info("Deleting OpenStack instance...")
|
log.WithField("MachineId", d.MachineId).Info("Deleting OpenStack instance...")
|
||||||
|
if err := d.initCompute(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := d.client.DeleteInstance(d); err != nil {
|
if err := d.client.DeleteInstance(d); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -340,6 +356,9 @@ func (d *Driver) Remove() error {
|
||||||
|
|
||||||
func (d *Driver) Restart() error {
|
func (d *Driver) Restart() error {
|
||||||
log.WithField("MachineId", d.MachineId).Info("Restarting OpenStack instance...")
|
log.WithField("MachineId", d.MachineId).Info("Restarting OpenStack instance...")
|
||||||
|
if err := d.initCompute(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := d.client.RestartInstance(d); err != nil {
|
if err := d.client.RestartInstance(d); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -482,6 +501,23 @@ func (d *Driver) resolveIds() error {
|
||||||
}).Debug("Found image id using its name")
|
}).Debug("Found image id using its name")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *Driver) initCompute() error {
|
||||||
|
if err := d.client.Authenticate(d); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := d.client.InitComputeClient(d); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Driver) initNetwork() error {
|
||||||
|
if err := d.client.Authenticate(d); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := d.client.InitNetworkClient(d); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -494,6 +530,10 @@ func (d *Driver) createSSHKey() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := d.initCompute(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := d.client.CreateKeyPair(d, d.KeyPairName, string(publicKey)); err != nil {
|
if err := d.client.CreateKeyPair(d, d.KeyPairName, string(publicKey)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -505,6 +545,10 @@ func (d *Driver) createMachine() error {
|
||||||
"FlavorId": d.FlavorId,
|
"FlavorId": d.FlavorId,
|
||||||
"ImageId": d.ImageId,
|
"ImageId": d.ImageId,
|
||||||
}).Debug("Creating OpenStack instance...")
|
}).Debug("Creating OpenStack instance...")
|
||||||
|
|
||||||
|
if err := d.initCompute(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
instanceId, err := d.client.CreateInstance(d)
|
instanceId, err := d.client.CreateInstance(d)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Reference in New Issue