Adding ability to retrieve openstack server by ID

This commit is contained in:
Derek Lemon -T (delemon - AEROTEK INC at Cisco) 2019-01-18 13:42:21 -07:00
parent c03f7eeced
commit 025a255dd8
3 changed files with 27 additions and 20 deletions

View File

@ -17,7 +17,6 @@ limitations under the License.
package protokube
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
@ -29,7 +28,6 @@ import (
"github.com/golang/glog"
cinderv2 "github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes"
"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach"
"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
"k8s.io/kops/protokube/pkg/etcd"
"k8s.io/kops/protokube/pkg/gossip"
gossipos "k8s.io/kops/protokube/pkg/gossip/openstack"
@ -174,24 +172,8 @@ func (a *OpenstackVolumes) discoverTags() error {
// Internal IP
{
servers, err := a.cloud.ListInstances(servers.ListOpts{
Host: a.instanceName,
TenantID: a.project,
})
if err != nil || len(servers) < 1 {
return fmt.Errorf("error listing servers for name %s: %v", a.instanceName, err)
}
if len(servers) > 1 {
var buf bytes.Buffer
for i, server := range servers {
if i != 0 {
buf.WriteString(",")
}
buf.WriteString(server.ID)
}
return fmt.Errorf("recieved more than one server for name %s: %s", a.instanceName, buf.String())
}
ip, err := openstack.GetServerFixedIP(&servers[0], a.clusterName)
server, err := a.cloud.GetInstance(strings.TrimSpace(a.meta.ServerID))
ip, err := openstack.GetServerFixedIP(server, a.clusterName)
if err != nil {
return fmt.Errorf("error querying InternalIP from name: %v", err)
}

View File

@ -91,8 +91,13 @@ type OpenstackCloud interface {
// Region returns the region which cloud will run on
Region() string
// GetInstance will return a openstack server provided its ID
GetInstance(id string) (*servers.Server, error)
// ListInstances will return a slice of openstack servers provided list opts
ListInstances(servers.ListOptsBuilder) ([]servers.Server, error)
// CreateInstance will create an openstack server provided create opts
CreateInstance(servers.CreateOptsBuilder) (*servers.Server, error)
// SetVolumeTags will set the tags for the Cinder volume

View File

@ -49,6 +49,26 @@ func (c *openstackCloud) DeleteInstance(i *cloudinstances.CloudInstanceGroupMemb
return fmt.Errorf("openstackCloud::DeleteInstance not implemented")
}
func (c *openstackCloud) GetInstance(id string) (*servers.Server, error) {
var server *servers.Server
done, err := vfs.RetryWithBackoff(readBackoff, func() (bool, error) {
instance, err := servers.Get(c.novaClient, id).Extract()
if err != nil {
return false, err
}
server = instance
return true, nil
})
if err != nil {
return server, err
} else if done {
return server, nil
} else {
return server, wait.ErrWaitTimeout
}
}
func (c *openstackCloud) ListInstances(opt servers.ListOptsBuilder) ([]servers.Server, error) {
var instances []servers.Server