Documentation ¶
Index ¶
- Constants
- Variables
- func NewRoutes(compute *gophercloud.ServiceClient, network *gophercloud.ServiceClient, ...) (cloudprovider.Routes, error)
- type BlockStorageOpts
- type Config
- type DeviceMetadata
- type Instances
- func (i *Instances) AddSSHKeyToAllInstances(ctx context.Context, user string, keyData []byte) error
- func (i *Instances) CurrentNodeName(ctx context.Context, hostname string) (types.NodeName, error)
- func (i *Instances) InstanceExistsByProviderID(ctx context.Context, providerID string) (bool, error)
- func (i *Instances) InstanceID(ctx context.Context, name types.NodeName) (string, error)
- func (i *Instances) InstanceShutdownByProviderID(ctx context.Context, providerID string) (bool, error)
- func (i *Instances) InstanceType(ctx context.Context, name types.NodeName) (string, error)
- func (i *Instances) InstanceTypeByProviderID(ctx context.Context, providerID string) (string, error)
- func (i *Instances) NodeAddresses(ctx context.Context, name types.NodeName) ([]v1.NodeAddress, error)
- func (i *Instances) NodeAddressesByProviderID(ctx context.Context, providerID string) ([]v1.NodeAddress, error)
- type LbaasV2
- func (lbaas *LbaasV2) EnsureLoadBalancer(ctx context.Context, clusterName string, apiService *v1.Service, ...) (*v1.LoadBalancerStatus, error)
- func (lbaas *LbaasV2) EnsureLoadBalancerDeleted(ctx context.Context, clusterName string, service *v1.Service) error
- func (lbaas *LbaasV2) EnsureSecurityGroupDeleted(clusterName string, service *v1.Service) error
- func (lbaas *LbaasV2) GetLoadBalancer(ctx context.Context, clusterName string, service *v1.Service) (*v1.LoadBalancerStatus, bool, error)
- func (lbaas *LbaasV2) GetLoadBalancerName(ctx context.Context, clusterName string, service *v1.Service) string
- func (lbaas *LbaasV2) UpdateLoadBalancer(ctx context.Context, clusterName string, service *v1.Service, nodes []*v1.Node) error
- type LoadBalancer
- type LoadBalancerOpts
- type Metadata
- type MetadataOpts
- type MyDuration
- type OpenStack
- func (os *OpenStack) AttachDisk(instanceID, volumeID string) (string, error)
- func (os *OpenStack) Clusters() (cloudprovider.Clusters, bool)
- func (os *OpenStack) CreateVolume(name string, size int, vtype, availability string, tags *map[string]string) (string, string, string, bool, error)
- func (os *OpenStack) DeleteVolume(volumeID string) error
- func (os *OpenStack) DetachDisk(instanceID, volumeID string) error
- func (os *OpenStack) DiskIsAttached(instanceID, volumeID string) (bool, error)
- func (os *OpenStack) DiskIsAttachedByName(nodeName types.NodeName, volumeID string) (bool, string, error)
- func (os *OpenStack) DisksAreAttached(instanceID string, volumeIDs []string) (map[string]bool, error)
- func (os *OpenStack) DisksAreAttachedByName(nodeName types.NodeName, volumeIDs []string) (map[string]bool, error)
- func (os *OpenStack) ExpandVolume(volumeID string, oldSize resource.Quantity, newSize resource.Quantity) (resource.Quantity, error)
- func (os *OpenStack) GetAttachmentDiskPath(instanceID, volumeID string) (string, error)
- func (os *OpenStack) GetDevicePath(volumeID string) string
- func (os *OpenStack) GetDevicePathBySerialID(volumeID string) string
- func (os *OpenStack) GetLabelsForVolume(ctx context.Context, pv *v1.PersistentVolume) (map[string]string, error)
- func (os *OpenStack) GetNodeNameByID(instanceID string) (types.NodeName, error)
- func (os *OpenStack) GetZone(ctx context.Context) (cloudprovider.Zone, error)
- func (os *OpenStack) GetZoneByNodeName(ctx context.Context, nodeName types.NodeName) (cloudprovider.Zone, error)
- func (os *OpenStack) GetZoneByProviderID(ctx context.Context, providerID string) (cloudprovider.Zone, error)
- func (os *OpenStack) HasClusterID() bool
- func (os *OpenStack) Initialize(clientBuilder cloudprovider.ControllerClientBuilder, stop <-chan struct{})
- func (os *OpenStack) InstanceID() (string, error)
- func (os *OpenStack) Instances() (cloudprovider.Instances, bool)
- func (os *OpenStack) InstancesV2() (cloudprovider.InstancesV2, bool)
- func (os *OpenStack) LoadBalancer() (cloudprovider.LoadBalancer, bool)
- func (os *OpenStack) NewBlockStorageV1() (*gophercloud.ServiceClient, error)
- func (os *OpenStack) NewBlockStorageV2() (*gophercloud.ServiceClient, error)
- func (os *OpenStack) NewBlockStorageV3() (*gophercloud.ServiceClient, error)
- func (os *OpenStack) NewComputeV2() (*gophercloud.ServiceClient, error)
- func (os *OpenStack) NewLoadBalancerV2() (*gophercloud.ServiceClient, error)
- func (os *OpenStack) NewNetworkV2() (*gophercloud.ServiceClient, error)
- func (os *OpenStack) NodeVolumeAttachLimit() int
- func (os *OpenStack) OperationPending(diskName string) (bool, string, error)
- func (os *OpenStack) ProviderName() string
- func (os *OpenStack) Routes() (cloudprovider.Routes, bool)
- func (os *OpenStack) ShouldTrustDevicePath() bool
- func (os *OpenStack) Zones() (cloudprovider.Zones, bool)
- type RouterOpts
- type Routes
- func (r *Routes) CreateRoute(ctx context.Context, clusterName string, nameHint string, ...) error
- func (r *Routes) DeleteRoute(ctx context.Context, clusterName string, route *cloudprovider.Route) error
- func (r *Routes) ListRoutes(ctx context.Context, clusterName string) ([]*cloudprovider.Route, error)
- type Volume
- type VolumesV1
- type VolumesV2
- type VolumesV3
Constants ¶
const ( // ProviderName is the name of the openstack provider ProviderName = "openstack" // TypeHostName is the name type of openstack instance TypeHostName = "hostname" )
const ( ServiceAnnotationLoadBalancerFloatingNetworkID = "loadbalancer.openstack.org/floating-network-id" ServiceAnnotationLoadBalancerSubnetID = "loadbalancer.openstack.org/subnet-id" // 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 = "service.beta.kubernetes.io/openstack-internal-load-balancer" )
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.
Variables ¶
ErrBadMetadata is used to indicate a problem parsing data from metadata server
ErrMultipleResults is used when we unexpectedly get back multiple results
ErrNoAddressFound is used when we cannot find an ip address for the host
ErrNotFound is used to inform that the object is missing
Functions ¶
func NewRoutes ¶
func NewRoutes(compute *gophercloud.ServiceClient, network *gophercloud.ServiceClient, opts RouterOpts) (cloudprovider.Routes, error)
NewRoutes creates a new instance of Routes
Types ¶
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"` SecretName string `gcfg:"secret-name"` SecretNamespace string `gcfg:"secret-namespace"` KubeconfigPath string `gcfg:"kubeconfig-path"` } LoadBalancer LoadBalancerOpts BlockStorage BlockStorageOpts Route RouterOpts Metadata MetadataOpts }
Config is used to read and store information from the cloud configuration file NOTE: Cloud config files should follow the same Kubernetes deprecation policy as flags or CLIs. Config fields should not change behavior in incompatible ways and should be deprecated for at least 2 release prior to removing. See https://kubernetes.io/docs/reference/using-api/deprecation-policy/#deprecating-a-flag-or-cli for more details.
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 ¶
AddSSHKeyToAllInstances is not implemented for OpenStack
func (*Instances) CurrentNodeName ¶
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 ¶
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 ¶
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 {
LoadBalancer
}
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 ¶
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
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 http://docs.openstack.org/user-guide/cli_config_drive.html
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 ¶
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 ¶
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 ¶
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 ¶
DeleteVolume deletes a volume given volume name.
func (*OpenStack) DetachDisk ¶
DetachDisk detaches given cinder volume from the compute running kubelet
func (*OpenStack) DiskIsAttached ¶
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 ¶
GetAttachmentDiskPath gets device path of attached volume to the compute running kubelet, as known by cinder
func (*OpenStack) GetDevicePath ¶
GetDevicePath returns the path of an attached block storage volume, specified by its id.
func (*OpenStack) GetDevicePathBySerialID ¶
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 ¶
GetNodeNameByID maps instanceid to types.NodeName
func (*OpenStack) GetZone ¶
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 ¶
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 ¶
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) InstancesV2 ¶
func (os *OpenStack) InstancesV2() (cloudprovider.InstancesV2, bool)
InstancesV2 returns an implementation of InstancesV2 for OpenStack. TODO: implement ONLY for external cloud provider
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 ¶
NodeVolumeAttachLimit specifies number of cinder volumes that can be attached to this node.
func (*OpenStack) OperationPending ¶
OperationPending checks if there is an operation pending on a volume
func (*OpenStack) ProviderName ¶
ProviderName returns the cloud provider ID.
func (*OpenStack) Routes ¶
func (os *OpenStack) Routes() (cloudprovider.Routes, bool)
Routes initializes routes support
func (*OpenStack) ShouldTrustDevicePath ¶
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
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