View Source
const (
	// ProviderName is the name of the openstack provider
	ProviderName = "openstack"

	// TypeHostName is the name type of openstack instance
	TypeHostName = "hostname"
View Source
const (
	ServiceAnnotationLoadBalancerFloatingNetworkID = ""
	ServiceAnnotationLoadBalancerSubnetID          = ""

	// ServiceAnnotationLoadBalancerInternal is the annotation used on the service
	// to indicate that we want an internal loadbalancer service.
	// If the value of ServiceAnnotationLoadBalancerInternal is false, it indicates that we want an external loadbalancer service. Default to false.
	ServiceAnnotationLoadBalancerInternal = ""

    Note: when creating a new Loadbalancer (VM), it can take some time before it is ready for use, this timeout is used for waiting until the Loadbalancer provisioning status goes to ACTIVE state.


    View Source
    var ErrBadMetadata = errors.New("invalid OpenStack metadata, got empty uuid")

      ErrBadMetadata is used to indicate a problem parsing data from metadata server

      View Source
      var ErrMultipleResults = errors.New("multiple results where only one expected")

        ErrMultipleResults is used when we unexpectedly get back multiple results

        View Source
        var ErrNoAddressFound = errors.New("no address found for host")

          ErrNoAddressFound is used when we cannot find an ip address for the host

          View Source
          var ErrNotFound = errors.New("failed to find object")

            ErrNotFound is used to inform that the object is missing


            func NewRoutes

              NewRoutes creates a new instance of Routes


              type BlockStorageOpts

              type BlockStorageOpts struct {
              	BSVersion             string `gcfg:"bs-version"`        // overrides autodetection. v1 or v2. Defaults to auto
              	TrustDevicePath       bool   `gcfg:"trust-device-path"` // See Issue #33128
              	IgnoreVolumeAZ        bool   `gcfg:"ignore-volume-az"`
              	NodeVolumeAttachLimit int    `gcfg:"node-volume-attach-limit"` // override volume attach limit for Cinder. Default is : 256

                BlockStorageOpts is used to talk to Cinder service

                type Config

                type Config struct {
                	Global struct {
                		AuthURL    string `gcfg:"auth-url"`
                		Username   string
                		UserID     string `gcfg:"user-id"`
                		Password   string
                		TenantID   string `gcfg:"tenant-id"`
                		TenantName string `gcfg:"tenant-name"`
                		TrustID    string `gcfg:"trust-id"`
                		DomainID   string `gcfg:"domain-id"`
                		DomainName string `gcfg:"domain-name"`
                		Region     string
                		CAFile     string `gcfg:"ca-file"`
                	LoadBalancer LoadBalancerOpts
                	BlockStorage BlockStorageOpts
                	Route        RouterOpts
                	Metadata     MetadataOpts

                  Config is used to read and store information from the cloud configuration file

                  type DeviceMetadata

                  type DeviceMetadata struct {
                  	Type    string `json:"type"`
                  	Bus     string `json:"bus,omitempty"`
                  	Serial  string `json:"serial,omitempty"`
                  	Address string `json:"address,omitempty"`

                    DeviceMetadata is a single/simplified data structure for all kinds of device metadata types.

                    type Instances

                    type Instances struct {
                    	// contains filtered or unexported fields

                      Instances encapsulates an implementation of Instances for OpenStack.

                      func (*Instances) AddSSHKeyToAllInstances

                      func (i *Instances) AddSSHKeyToAllInstances(ctx context.Context, user string, keyData []byte) error

                        AddSSHKeyToAllInstances is not implemented for OpenStack

                        func (*Instances) CurrentNodeName

                        func (i *Instances) CurrentNodeName(ctx context.Context, hostname string) (types.NodeName, error)

                          CurrentNodeName implements Instances.CurrentNodeName Note this is *not* necessarily the same as hostname.

                          func (*Instances) InstanceExistsByProviderID

                          func (i *Instances) InstanceExistsByProviderID(ctx context.Context, providerID string) (bool, error)

                            InstanceExistsByProviderID returns true if the instance with the given provider id still exist. If false is returned with no error, the instance will be immediately deleted by the cloud controller manager.

                            func (*Instances) InstanceID

                            func (i *Instances) InstanceID(ctx context.Context, name types.NodeName) (string, error)

                              InstanceID returns the cloud provider ID of the specified instance.

                              func (*Instances) InstanceShutdownByProviderID

                              func (i *Instances) InstanceShutdownByProviderID(ctx context.Context, providerID string) (bool, error)

                                InstanceShutdownByProviderID returns true if the instances is in safe state to detach volumes

                                func (*Instances) InstanceType

                                func (i *Instances) InstanceType(ctx context.Context, name types.NodeName) (string, error)

                                  InstanceType returns the type of the specified instance.

                                  func (*Instances) InstanceTypeByProviderID

                                  func (i *Instances) InstanceTypeByProviderID(ctx context.Context, providerID string) (string, error)

                                    InstanceTypeByProviderID returns the cloudprovider instance type of the node with the specified unique providerID This method will not be called from the node that is requesting this ID. i.e. metadata service and other local methods cannot be used here

                                    func (*Instances) NodeAddresses

                                    func (i *Instances) NodeAddresses(ctx context.Context, name types.NodeName) ([]v1.NodeAddress, error)

                                      NodeAddresses implements Instances.NodeAddresses

                                      func (*Instances) NodeAddressesByProviderID

                                      func (i *Instances) NodeAddressesByProviderID(ctx context.Context, providerID string) ([]v1.NodeAddress, error)

                                        NodeAddressesByProviderID returns the node addresses of an instances with the specified unique providerID This method will not be called from the node that is requesting this ID. i.e. metadata service and other local methods cannot be used here

                                        type LbaasV2

                                        type LbaasV2 struct {

                                          LbaasV2 is a LoadBalancer implementation for Neutron LBaaS v2 API

                                          func (*LbaasV2) EnsureLoadBalancer

                                          func (lbaas *LbaasV2) EnsureLoadBalancer(ctx context.Context, clusterName string, apiService *v1.Service, nodes []*v1.Node) (*v1.LoadBalancerStatus, error)

                                            EnsureLoadBalancer creates a new load balancer 'name', or updates the existing one.

                                            func (*LbaasV2) EnsureLoadBalancerDeleted

                                            func (lbaas *LbaasV2) EnsureLoadBalancerDeleted(ctx context.Context, clusterName string, service *v1.Service) error

                                              EnsureLoadBalancerDeleted deletes the specified load balancer

                                              func (*LbaasV2) EnsureSecurityGroupDeleted

                                              func (lbaas *LbaasV2) EnsureSecurityGroupDeleted(clusterName string, service *v1.Service) error

                                                EnsureSecurityGroupDeleted deleting security group for specific loadbalancer service.

                                                func (*LbaasV2) GetLoadBalancer

                                                func (lbaas *LbaasV2) GetLoadBalancer(ctx context.Context, clusterName string, service *v1.Service) (*v1.LoadBalancerStatus, bool, error)

                                                  GetLoadBalancer returns whether the specified load balancer exists and its status

                                                  func (*LbaasV2) GetLoadBalancerName

                                                  func (lbaas *LbaasV2) GetLoadBalancerName(ctx context.Context, clusterName string, service *v1.Service) string

                                                    GetLoadBalancerName is an implementation of LoadBalancer.GetLoadBalancerName.

                                                    func (*LbaasV2) UpdateLoadBalancer

                                                    func (lbaas *LbaasV2) UpdateLoadBalancer(ctx context.Context, clusterName string, service *v1.Service, nodes []*v1.Node) error

                                                      UpdateLoadBalancer updates hosts under the specified load balancer.

                                                      type LoadBalancer

                                                      type LoadBalancer struct {
                                                      	// contains filtered or unexported fields

                                                        LoadBalancer is used for creating and maintaining load balancers

                                                        type LoadBalancerOpts

                                                        type LoadBalancerOpts struct {
                                                        	LBVersion            string     `gcfg:"lb-version"`          // overrides autodetection. Only support v2.
                                                        	UseOctavia           bool       `gcfg:"use-octavia"`         // uses Octavia V2 service catalog endpoint
                                                        	SubnetID             string     `gcfg:"subnet-id"`           // overrides autodetection.
                                                        	FloatingNetworkID    string     `gcfg:"floating-network-id"` // If specified, will create floating ip for loadbalancer, or do not create floating ip.
                                                        	LBMethod             string     `gcfg:"lb-method"`           // default to ROUND_ROBIN.
                                                        	LBProvider           string     `gcfg:"lb-provider"`
                                                        	CreateMonitor        bool       `gcfg:"create-monitor"`
                                                        	MonitorDelay         MyDuration `gcfg:"monitor-delay"`
                                                        	MonitorTimeout       MyDuration `gcfg:"monitor-timeout"`
                                                        	MonitorMaxRetries    uint       `gcfg:"monitor-max-retries"`
                                                        	ManageSecurityGroups bool       `gcfg:"manage-security-groups"`
                                                        	NodeSecurityGroupIDs []string   // Do not specify, get it automatically when enable manage-security-groups. TODO(FengyunPan): move it into cache

                                                          LoadBalancerOpts have the options to talk to Neutron LBaaSV2 or Octavia

                                                          type Metadata

                                                          type Metadata struct {
                                                          	UUID             string           `json:"uuid"`
                                                          	Name             string           `json:"name"`
                                                          	AvailabilityZone string           `json:"availability_zone"`
                                                          	Devices          []DeviceMetadata `json:"devices,omitempty"`

                                                            Metadata has the information fetched from OpenStack metadata service or config drives. Assumes the "2012-08-10" meta_data.json format. See

                                                            type MetadataOpts

                                                            type MetadataOpts struct {
                                                            	SearchOrder    string     `gcfg:"search-order"`
                                                            	RequestTimeout MyDuration `gcfg:"request-timeout"`

                                                              MetadataOpts is used for configuring how to talk to metadata service or config drive

                                                              type MyDuration

                                                              type MyDuration struct {

                                                                MyDuration is the encoding.TextUnmarshaler interface for time.Duration

                                                                func (*MyDuration) UnmarshalText

                                                                func (d *MyDuration) UnmarshalText(text []byte) error

                                                                  UnmarshalText is used to convert from text to Duration

                                                                  type OpenStack

                                                                  type OpenStack struct {
                                                                  	// contains filtered or unexported fields

                                                                    OpenStack is an implementation of cloud provider Interface for OpenStack.

                                                                    func NewFakeOpenStackCloud

                                                                    func NewFakeOpenStackCloud(cfg Config) (*OpenStack, error)

                                                                      NewFakeOpenStackCloud creates and returns an instance of Openstack cloudprovider. Mainly for use in tests that require instantiating Openstack without having to go through cloudprovider interface.

                                                                      func (*OpenStack) AttachDisk

                                                                      func (os *OpenStack) AttachDisk(instanceID, volumeID string) (string, error)

                                                                        AttachDisk attaches given cinder volume to the compute running kubelet

                                                                        func (*OpenStack) Clusters

                                                                        func (os *OpenStack) Clusters() (cloudprovider.Clusters, bool)

                                                                          Clusters is a no-op

                                                                          func (*OpenStack) CreateVolume

                                                                          func (os *OpenStack) CreateVolume(name string, size int, vtype, availability string, tags *map[string]string) (string, string, string, bool, error)

                                                                            CreateVolume creates a volume of given size (in GiB)

                                                                            func (*OpenStack) DeleteVolume

                                                                            func (os *OpenStack) DeleteVolume(volumeID string) error

                                                                              DeleteVolume deletes a volume given volume name.

                                                                              func (*OpenStack) DetachDisk

                                                                              func (os *OpenStack) DetachDisk(instanceID, volumeID string) error

                                                                                DetachDisk detaches given cinder volume from the compute running kubelet

                                                                                func (*OpenStack) DiskIsAttached

                                                                                func (os *OpenStack) DiskIsAttached(instanceID, volumeID string) (bool, error)

                                                                                  DiskIsAttached queries if a volume is attached to a compute instance

                                                                                  func (*OpenStack) DiskIsAttachedByName

                                                                                  func (os *OpenStack) DiskIsAttachedByName(nodeName types.NodeName, volumeID string) (bool, string, error)

                                                                                    DiskIsAttachedByName queries if a volume is attached to a compute instance by name

                                                                                    func (*OpenStack) DisksAreAttached

                                                                                    func (os *OpenStack) DisksAreAttached(instanceID string, volumeIDs []string) (map[string]bool, error)

                                                                                      DisksAreAttached queries if a list of volumes are attached to a compute instance

                                                                                      func (*OpenStack) DisksAreAttachedByName

                                                                                      func (os *OpenStack) DisksAreAttachedByName(nodeName types.NodeName, volumeIDs []string) (map[string]bool, error)

                                                                                        DisksAreAttachedByName queries if a list of volumes are attached to a compute instance by name

                                                                                        func (*OpenStack) ExpandVolume

                                                                                        func (os *OpenStack) ExpandVolume(volumeID string, oldSize resource.Quantity, newSize resource.Quantity) (resource.Quantity, error)

                                                                                          ExpandVolume expands the size of specific cinder volume (in GiB)

                                                                                          func (*OpenStack) GetAttachmentDiskPath

                                                                                          func (os *OpenStack) GetAttachmentDiskPath(instanceID, volumeID string) (string, error)

                                                                                            GetAttachmentDiskPath gets device path of attached volume to the compute running kubelet, as known by cinder

                                                                                            func (*OpenStack) GetDevicePath

                                                                                            func (os *OpenStack) GetDevicePath(volumeID string) string

                                                                                              GetDevicePath returns the path of an attached block storage volume, specified by its id.

                                                                                              func (*OpenStack) GetDevicePathBySerialID

                                                                                              func (os *OpenStack) GetDevicePathBySerialID(volumeID string) string

                                                                                                GetDevicePathBySerialID returns the path of an attached block storage volume, specified by its id.

                                                                                                func (*OpenStack) GetLabelsForVolume

                                                                                                func (os *OpenStack) GetLabelsForVolume(ctx context.Context, pv *v1.PersistentVolume) (map[string]string, error)

                                                                                                  GetLabelsForVolume implements PVLabeler.GetLabelsForVolume

                                                                                                  func (*OpenStack) GetNodeNameByID

                                                                                                  func (os *OpenStack) GetNodeNameByID(instanceID string) (types.NodeName, error)

                                                                                                    GetNodeNameByID maps instanceid to types.NodeName

                                                                                                    func (*OpenStack) GetZone

                                                                                                    func (os *OpenStack) GetZone(ctx context.Context) (cloudprovider.Zone, error)

                                                                                                      GetZone returns the current zone

                                                                                                      func (*OpenStack) GetZoneByNodeName

                                                                                                      func (os *OpenStack) GetZoneByNodeName(ctx context.Context, nodeName types.NodeName) (cloudprovider.Zone, error)

                                                                                                        GetZoneByNodeName implements Zones.GetZoneByNodeName This is particularly useful in external cloud providers where the kubelet does not initialize node data.

                                                                                                        func (*OpenStack) GetZoneByProviderID

                                                                                                        func (os *OpenStack) GetZoneByProviderID(ctx context.Context, providerID string) (cloudprovider.Zone, error)

                                                                                                          GetZoneByProviderID implements Zones.GetZoneByProviderID This is particularly useful in external cloud providers where the kubelet does not initialize node data.

                                                                                                          func (*OpenStack) HasClusterID

                                                                                                          func (os *OpenStack) HasClusterID() bool

                                                                                                            HasClusterID returns true if the cluster has a clusterID

                                                                                                            func (*OpenStack) Initialize

                                                                                                            func (os *OpenStack) Initialize(clientBuilder cloudprovider.ControllerClientBuilder, stop <-chan struct{})

                                                                                                              Initialize passes a Kubernetes clientBuilder interface to the cloud provider

                                                                                                              func (*OpenStack) InstanceID

                                                                                                              func (os *OpenStack) InstanceID() (string, error)

                                                                                                                InstanceID returns the kubelet's cloud provider ID.

                                                                                                                func (*OpenStack) Instances

                                                                                                                func (os *OpenStack) Instances() (cloudprovider.Instances, bool)

                                                                                                                  Instances returns an implementation of Instances for OpenStack.

                                                                                                                  func (*OpenStack) LoadBalancer

                                                                                                                  func (os *OpenStack) LoadBalancer() (cloudprovider.LoadBalancer, bool)

                                                                                                                    LoadBalancer initializes a LbaasV2 object

                                                                                                                    func (*OpenStack) NewBlockStorageV1

                                                                                                                    func (os *OpenStack) NewBlockStorageV1() (*gophercloud.ServiceClient, error)

                                                                                                                      NewBlockStorageV1 creates a ServiceClient that may be used with the Cinder v1 API

                                                                                                                      func (*OpenStack) NewBlockStorageV2

                                                                                                                      func (os *OpenStack) NewBlockStorageV2() (*gophercloud.ServiceClient, error)

                                                                                                                        NewBlockStorageV2 creates a ServiceClient that may be used with the Cinder v2 API

                                                                                                                        func (*OpenStack) NewBlockStorageV3

                                                                                                                        func (os *OpenStack) NewBlockStorageV3() (*gophercloud.ServiceClient, error)

                                                                                                                          NewBlockStorageV3 creates a ServiceClient that may be used with the Cinder v3 API

                                                                                                                          func (*OpenStack) NewComputeV2

                                                                                                                          func (os *OpenStack) NewComputeV2() (*gophercloud.ServiceClient, error)

                                                                                                                            NewComputeV2 creates a ServiceClient that may be used with the nova v2 API

                                                                                                                            func (*OpenStack) NewLoadBalancerV2

                                                                                                                            func (os *OpenStack) NewLoadBalancerV2() (*gophercloud.ServiceClient, error)

                                                                                                                              NewLoadBalancerV2 creates a ServiceClient that may be used with the Neutron LBaaS v2 API

                                                                                                                              func (*OpenStack) NewNetworkV2

                                                                                                                              func (os *OpenStack) NewNetworkV2() (*gophercloud.ServiceClient, error)

                                                                                                                                NewNetworkV2 creates a ServiceClient that may be used with the neutron v2 API

                                                                                                                                func (*OpenStack) NodeVolumeAttachLimit

                                                                                                                                func (os *OpenStack) NodeVolumeAttachLimit() int

                                                                                                                                  NodeVolumeAttachLimit specifies number of cinder volumes that can be attached to this node.

                                                                                                                                  func (*OpenStack) OperationPending

                                                                                                                                  func (os *OpenStack) OperationPending(diskName string) (bool, string, error)

                                                                                                                                    OperationPending checks if there is an operation pending on a volume

                                                                                                                                    func (*OpenStack) ProviderName

                                                                                                                                    func (os *OpenStack) ProviderName() string

                                                                                                                                      ProviderName returns the cloud provider ID.

                                                                                                                                      func (*OpenStack) Routes

                                                                                                                                      func (os *OpenStack) Routes() (cloudprovider.Routes, bool)

                                                                                                                                        Routes initializes routes support

                                                                                                                                        func (*OpenStack) ShouldTrustDevicePath

                                                                                                                                        func (os *OpenStack) ShouldTrustDevicePath() bool

                                                                                                                                          ShouldTrustDevicePath queries if we should trust the cinder provide deviceName, See issue #33128

                                                                                                                                          func (*OpenStack) Zones

                                                                                                                                          func (os *OpenStack) Zones() (cloudprovider.Zones, bool)

                                                                                                                                            Zones indicates that we support zones

                                                                                                                                            type RouterOpts

                                                                                                                                            type RouterOpts struct {
                                                                                                                                            	RouterID string `gcfg:"router-id"` // required

                                                                                                                                              RouterOpts is used for Neutron routes

                                                                                                                                              type Routes

                                                                                                                                              type Routes struct {
                                                                                                                                              	// contains filtered or unexported fields

                                                                                                                                                Routes implements the cloudprovider.Routes for OpenStack clouds

                                                                                                                                                func (*Routes) CreateRoute

                                                                                                                                                func (r *Routes) CreateRoute(ctx context.Context, clusterName string, nameHint string, route *cloudprovider.Route) error

                                                                                                                                                  CreateRoute creates the described managed route

                                                                                                                                                  func (*Routes) DeleteRoute

                                                                                                                                                  func (r *Routes) DeleteRoute(ctx context.Context, clusterName string, route *cloudprovider.Route) error

                                                                                                                                                    DeleteRoute deletes the specified managed route

                                                                                                                                                    func (*Routes) ListRoutes

                                                                                                                                                    func (r *Routes) ListRoutes(ctx context.Context, clusterName string) ([]*cloudprovider.Route, error)

                                                                                                                                                      ListRoutes lists all managed routes that belong to the specified clusterName

                                                                                                                                                      type Volume

                                                                                                                                                      type Volume struct {
                                                                                                                                                      	// ID of the instance, to which this volume is attached. "" if not attached
                                                                                                                                                      	AttachedServerID string
                                                                                                                                                      	// Device file path
                                                                                                                                                      	AttachedDevice string
                                                                                                                                                      	// availabilityZone is which availability zone the volume is in
                                                                                                                                                      	AvailabilityZone string
                                                                                                                                                      	// Unique identifier for the volume.
                                                                                                                                                      	ID string
                                                                                                                                                      	// Human-readable display name for the volume.
                                                                                                                                                      	Name string
                                                                                                                                                      	// Current status of the volume.
                                                                                                                                                      	Status string
                                                                                                                                                      	// Volume size in GB
                                                                                                                                                      	Size int

                                                                                                                                                        Volume stores information about a single volume

                                                                                                                                                        type VolumesV1

                                                                                                                                                        type VolumesV1 struct {
                                                                                                                                                        	// contains filtered or unexported fields

                                                                                                                                                          VolumesV1 is a Volumes implementation for cinder v1

                                                                                                                                                          type VolumesV2

                                                                                                                                                          type VolumesV2 struct {
                                                                                                                                                          	// contains filtered or unexported fields

                                                                                                                                                            VolumesV2 is a Volumes implementation for cinder v2

                                                                                                                                                            type VolumesV3

                                                                                                                                                            type VolumesV3 struct {
                                                                                                                                                            	// contains filtered or unexported fields

                                                                                                                                                              VolumesV3 is a Volumes implementation for cinder v3