blob: 04194bb84e8a11d83889253c87b8ac386ca8eef4 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Base types used by other parts of libcloud
"""
from libcloud.common.types import (
Type,
LibcloudError,
InvalidCredsError,
InvalidCredsException,
MalformedResponseError,
)
__all__ = [
"Provider",
"NodeState",
"DeploymentError",
"DeploymentException",
# @@TR: should the unused imports below be exported?
"LibcloudError",
"MalformedResponseError",
"InvalidCredsError",
"InvalidCredsException",
"OLD_CONSTANT_TO_NEW_MAPPING",
]
class Provider(Type):
"""
Defines for each of the supported providers
Non-Dummy drivers are sorted in alphabetical order. Please preserve this
ordering when adding new drivers.
:cvar DUMMY: Example provider
:cvar ABIQUO: Abiquo driver
:cvar ALIYUN_ECS: Aliyun ECS driver.
:cvar AURORACOMPUTE: Aurora Compute driver.
:cvar AZURE: Azure (classic) driver.
:cvar AZURE_ARM: Azure Resource Manager (modern) driver.
:cvar BLUEBOX: Bluebox
:cvar CLOUDSIGMA: CloudSigma
:cvar CLOUDSCALE: cloudscale.ch
:cvar CLOUDSTACK: CloudStack
:cvar DIMENSIONDATA: Dimension Data Cloud
:cvar EC2: Amazon AWS.
:cvar ECP: Enomaly
:cvar ELASTICHOSTS: ElasticHosts.com
:cvar EXOSCALE: Exoscale driver.
:cvar GCE: Google Compute Engine
:cvar GOGRID: GoGrid
:cvar GRIDSCALE: gridscale
:cvar GRIDSPOT: Gridspot driver
:cvar IBM: IBM Developer Cloud
:cvar IKOULA: Ikoula driver.
:cvar JOYENT: Joyent driver
:cvar KAMATERA: Kamatera driver
:cvar KTUCLOUD: kt ucloud driver
:cvar KUBEVIRT: kubevirt driver
:cvar LIBVIRT: Libvirt driver
:cvar LINODE: Linode.com
:cvar NEPHOSCALE: NephoScale driver
:cvar NIMBUS: Nimbus
:cvar NINEFOLD: Ninefold
:cvar NTTC-CIS: NTT Communications CIS
:cvar OPENNEBULA: OpenNebula.org
:cvar OPSOURCE: Opsource Cloud
:cvar OUTSCALE_INC: Outscale INC driver.
:cvar OUTSCALE_SAS: Outscale SAS driver.
:cvar OUTSCALE_SDK: Outscale SDK driver.
:cvar PROFIT_BRICKS: ProfitBricks driver.
:cvar RACKSPACE: Rackspace next-gen OpenStack based Cloud Servers
:cvar RACKSPACE_FIRST_GEN: Rackspace First Gen Cloud Servers
:cvar RIMUHOSTING: RimuHosting.com
:cvar TERREMARK: Terremark
:cvar UPCLOUD: UpCloud
:cvar VCL: VCL driver
:cvar VCLOUD: vmware vCloud
:cvar VPSNET: VPS.net
:cvar VSphere: VSphere driver.
:cvar VULTR: vultr driver.
"""
AZURE = "azure"
AZURE_ARM = "azure_arm"
DUMMY = "dummy"
ABIQUO = "abiquo"
ALIYUN_ECS = "aliyun_ecs"
AURORACOMPUTE = "aurora_compute"
BLUEBOX = "bluebox"
BRIGHTBOX = "brightbox"
BSNL = "bsnl"
CISCOCCS = "ciscoccs"
CLOUDFRAMES = "cloudframes"
CLOUDSIGMA = "cloudsigma"
CLOUDSCALE = "cloudscale"
CLOUDSTACK = "cloudstack"
DIGITAL_OCEAN = "digitalocean"
DIMENSIONDATA = "dimensiondata"
EC2 = "ec2"
ECP = "ecp"
ELASTICHOSTS = "elastichosts"
EQUINIXMETAL = "equinixmetal"
EUCALYPTUS = "eucalyptus"
EXOSCALE = "exoscale"
GANDI = "gandi"
GCE = "gce"
GIG_G8 = "gig_g8"
GOGRID = "gogrid"
GRIDSCALE = "gridscale"
GRIDSPOT = "gridspot"
HOSTVIRTUAL = "hostvirtual"
IBM = "ibm"
IKOULA = "ikoula"
INDOSAT = "indosat"
INTERNETSOLUTIONS = "internetsolutions"
JOYENT = "joyent"
KAMATERA = "kamatera"
KTUCLOUD = "ktucloud"
KUBEVIRT = "kubevirt"
LIBVIRT = "libvirt"
LINODE = "linode"
MAXIHOST = "maxihost"
MEDONE = "medone"
NEPHOSCALE = "nephoscale"
NIMBUS = "nimbus"
NINEFOLD = "ninefold"
NTTA = "ntta"
NTTCIS = "nttcis"
ONEANDONE = "oneandone"
OPENNEBULA = "opennebula"
OPENSTACK = "openstack"
OPSOURCE = "opsource"
OUTSCALE_INC = "outscale_inc"
OUTSCALE_SAS = "outscale_sas"
OUTSCALE = "outscale"
OVH = "ovh"
PROFIT_BRICKS = "profitbricks"
RACKSPACE = "rackspace"
RACKSPACE_FIRST_GEN = "rackspace_first_gen"
RIMUHOSTING = "rimuhosting"
RUNABOVE = "runabove"
SCALEWAY = "scaleway"
SERVERLOVE = "serverlove"
SKALICLOUD = "skalicloud"
SOFTLAYER = "softlayer"
TERREMARK = "terremark"
UPCLOUD = "upcloud"
VCL = "vcl"
VCLOUD = "vcloud"
VOXEL = "voxel"
VPSNET = "vpsnet"
VSPHERE = "vsphere"
VULTR = "vultr"
# OpenStack based providers
CLOUDWATT = "cloudwatt"
HPCLOUD = "hpcloud"
KILI = "kili"
ONAPP = "onapp"
# Deprecated constants which aren't supported anymore
RACKSPACE_UK = "rackspace_uk"
RACKSPACE_NOVA_BETA = "rackspace_nova_beta"
RACKSPACE_NOVA_DFW = "rackspace_nova_dfw"
RACKSPACE_NOVA_LON = "rackspace_nova_lon"
RACKSPACE_NOVA_ORD = "rackspace_nova_ord"
EC2_US_EAST = "ec2_us_east"
EC2_US_EAST_OHIO = "ec2_us_east_ohio"
EC2_EU = "ec2_eu_west" # deprecated name
EC2_EU_WEST = "ec2_eu_west"
EC2_EU_WEST2 = "ec2_eu_west_london"
EC2_US_WEST = "ec2_us_west"
EC2_AP_SOUTHEAST = "ec2_ap_southeast"
EC2_AP_NORTHEAST = "ec2_ap_northeast"
EC2_AP_NORTHEAST1 = "ec2_ap_northeast_1"
EC2_AP_NORTHEAST2 = "ec2_ap_northeast_2"
EC2_US_WEST_OREGON = "ec2_us_west_oregon"
EC2_SA_EAST = "ec2_sa_east"
EC2_AP_SOUTHEAST2 = "ec2_ap_southeast_2"
EC2_CA_CENTRAL1 = "ec2_ca_central_1"
ELASTICHOSTS_UK1 = "elastichosts_uk1"
ELASTICHOSTS_UK2 = "elastichosts_uk2"
ELASTICHOSTS_US1 = "elastichosts_us1"
ELASTICHOSTS_US2 = "elastichosts_us2"
ELASTICHOSTS_US3 = "elastichosts_us3"
ELASTICHOSTS_CA1 = "elastichosts_ca1"
ELASTICHOSTS_AU1 = "elastichosts_au1"
ELASTICHOSTS_CN1 = "elastichosts_cn1"
CLOUDSIGMA_US = "cloudsigma_us"
# Removed
# SLICEHOST = 'slicehost'
DEPRECATED_RACKSPACE_PROVIDERS = [
Provider.RACKSPACE_UK,
Provider.RACKSPACE_NOVA_BETA,
Provider.RACKSPACE_NOVA_DFW,
Provider.RACKSPACE_NOVA_LON,
Provider.RACKSPACE_NOVA_ORD,
]
OLD_CONSTANT_TO_NEW_MAPPING = {
# Rackspace
Provider.RACKSPACE_UK: Provider.RACKSPACE_FIRST_GEN,
Provider.RACKSPACE_NOVA_BETA: Provider.RACKSPACE,
Provider.RACKSPACE_NOVA_DFW: Provider.RACKSPACE,
Provider.RACKSPACE_NOVA_LON: Provider.RACKSPACE,
Provider.RACKSPACE_NOVA_ORD: Provider.RACKSPACE,
# AWS
Provider.EC2_US_EAST: Provider.EC2,
Provider.EC2_US_EAST_OHIO: Provider.EC2,
Provider.EC2_EU: Provider.EC2,
Provider.EC2_EU_WEST: Provider.EC2,
Provider.EC2_EU_WEST2: Provider.EC2,
Provider.EC2_US_WEST: Provider.EC2,
Provider.EC2_AP_SOUTHEAST: Provider.EC2,
Provider.EC2_AP_SOUTHEAST2: Provider.EC2,
Provider.EC2_AP_NORTHEAST: Provider.EC2,
Provider.EC2_AP_NORTHEAST1: Provider.EC2,
Provider.EC2_AP_NORTHEAST2: Provider.EC2,
Provider.EC2_US_WEST_OREGON: Provider.EC2,
Provider.EC2_SA_EAST: Provider.EC2,
Provider.EC2_CA_CENTRAL1: Provider.EC2,
# ElasticHosts
Provider.ELASTICHOSTS_UK1: Provider.ELASTICHOSTS,
Provider.ELASTICHOSTS_UK2: Provider.ELASTICHOSTS,
Provider.ELASTICHOSTS_US1: Provider.ELASTICHOSTS,
Provider.ELASTICHOSTS_US2: Provider.ELASTICHOSTS,
Provider.ELASTICHOSTS_US3: Provider.ELASTICHOSTS,
Provider.ELASTICHOSTS_CA1: Provider.ELASTICHOSTS,
Provider.ELASTICHOSTS_AU1: Provider.ELASTICHOSTS,
Provider.ELASTICHOSTS_CN1: Provider.ELASTICHOSTS,
}
class NodeState(Type):
"""
Standard states for a node
:cvar RUNNING: Node is running.
:cvar STARTING: Node is starting up.
:cvar REBOOTING: Node is rebooting.
:cvar TERMINATED: Node is terminated. This node can't be started later on.
:cvar STOPPING: Node is currently trying to stop.
:cvar STOPPED: Node is stopped. This node can be started later on.
:cvar PENDING: Node is pending.
:cvar SUSPENDED: Node is suspended.
:cvar ERROR: Node is an error state. Usually no operations can be performed
on the node once it ends up in the error state.
:cvar PAUSED: Node is paused.
:cvar RECONFIGURING: Node is being reconfigured.
:cvar UNKNOWN: Node state is unknown.
"""
RUNNING = "running"
STARTING = "starting"
REBOOTING = "rebooting"
TERMINATED = "terminated"
PENDING = "pending"
UNKNOWN = "unknown"
STOPPING = "stopping"
STOPPED = "stopped"
SUSPENDED = "suspended"
ERROR = "error"
PAUSED = "paused"
RECONFIGURING = "reconfiguring"
MIGRATING = "migrating"
NORMAL = "normal"
UPDATING = "updating"
class StorageVolumeState(Type):
"""
Standard states of a StorageVolume
"""
AVAILABLE = "available"
ERROR = "error"
INUSE = "inuse"
CREATING = "creating"
DELETING = "deleting"
DELETED = "deleted"
BACKUP = "backup"
ATTACHING = "attaching"
UNKNOWN = "unknown"
MIGRATING = "migrating"
UPDATING = "updating"
class VolumeSnapshotState(Type):
"""
Standard states of VolumeSnapshots
"""
AVAILABLE = "available"
ERROR = "error"
CREATING = "creating"
DELETING = "deleting"
RESTORING = "restoring"
UNKNOWN = "unknown"
UPDATING = "updating"
class NodeImageMemberState(Type):
"""
Standard states of VolumeSnapshots
"""
ACCEPTED = "accepted"
PENDING = "pending"
REJECTED = "rejected"
class Architecture:
"""
Image and size architectures.
:cvar I386: i386 (32 bt)
:cvar X86_64: x86_64 (64 bit)
"""
I386 = 0
X86_X64 = 1
class DeploymentError(LibcloudError):
"""
Exception used when a Deployment Task failed.
:ivar node: :class:`Node` on which this exception happened, you might want
to call :func:`Node.destroy`
"""
def __init__(self, node, original_exception=None, driver=None):
self.node = node
self.value = original_exception
self.original_error = original_exception
self.driver = driver
def __str__(self):
return self.__repr__()
def __repr__(self):
return "<DeploymentError: node={}, error={}, driver={}>".format(
self.node.id,
str(self.value),
str(self.driver),
)
class KeyPairError(LibcloudError):
error_type = "KeyPairError"
def __init__(self, name, driver):
self.name = name
self.value = "Key pair with name %s does not exist" % (name)
super().__init__(value=self.value, driver=driver)
def __str__(self):
return self.__repr__()
def __repr__(self):
return "<{} name={}, value={}, driver={}>".format(
self.error_type,
self.name,
self.value,
self.driver.name,
)
class KeyPairDoesNotExistError(KeyPairError):
error_type = "KeyPairDoesNotExistError"
"""Deprecated alias of :class:`DeploymentException`"""
DeploymentException = DeploymentError