mirror of https://github.com/kubernetes/kops.git
Adding ability to retrieve openstack server by ID
This commit is contained in:
parent
c03f7eeced
commit
025a255dd8
|
|
@ -17,7 +17,6 @@ limitations under the License.
|
||||||
package protokube
|
package protokube
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
|
@ -29,7 +28,6 @@ import (
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
cinderv2 "github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes"
|
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/extensions/volumeattach"
|
||||||
"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
|
|
||||||
"k8s.io/kops/protokube/pkg/etcd"
|
"k8s.io/kops/protokube/pkg/etcd"
|
||||||
"k8s.io/kops/protokube/pkg/gossip"
|
"k8s.io/kops/protokube/pkg/gossip"
|
||||||
gossipos "k8s.io/kops/protokube/pkg/gossip/openstack"
|
gossipos "k8s.io/kops/protokube/pkg/gossip/openstack"
|
||||||
|
|
@ -174,24 +172,8 @@ func (a *OpenstackVolumes) discoverTags() error {
|
||||||
|
|
||||||
// Internal IP
|
// Internal IP
|
||||||
{
|
{
|
||||||
servers, err := a.cloud.ListInstances(servers.ListOpts{
|
server, err := a.cloud.GetInstance(strings.TrimSpace(a.meta.ServerID))
|
||||||
Host: a.instanceName,
|
ip, err := openstack.GetServerFixedIP(server, a.clusterName)
|
||||||
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)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error querying InternalIP from name: %v", err)
|
return fmt.Errorf("error querying InternalIP from name: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -91,8 +91,13 @@ type OpenstackCloud interface {
|
||||||
// Region returns the region which cloud will run on
|
// Region returns the region which cloud will run on
|
||||||
Region() string
|
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)
|
ListInstances(servers.ListOptsBuilder) ([]servers.Server, error)
|
||||||
|
|
||||||
|
// CreateInstance will create an openstack server provided create opts
|
||||||
CreateInstance(servers.CreateOptsBuilder) (*servers.Server, error)
|
CreateInstance(servers.CreateOptsBuilder) (*servers.Server, error)
|
||||||
|
|
||||||
// SetVolumeTags will set the tags for the Cinder volume
|
// SetVolumeTags will set the tags for the Cinder volume
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,26 @@ func (c *openstackCloud) DeleteInstance(i *cloudinstances.CloudInstanceGroupMemb
|
||||||
return fmt.Errorf("openstackCloud::DeleteInstance not implemented")
|
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) {
|
func (c *openstackCloud) ListInstances(opt servers.ListOptsBuilder) ([]servers.Server, error) {
|
||||||
var instances []servers.Server
|
var instances []servers.Server
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue