You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by an...@apache.org on 2016/10/08 02:30:38 UTC
[07/27] libcloud git commit: docstrings, flake8, error handling
docstrings, flake8, error handling
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/d96fc83d
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/d96fc83d
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/d96fc83d
Branch: refs/heads/trunk
Commit: d96fc83dbfa3b39916b1575a953a31f6f9bf8bea
Parents: 8495ea7
Author: Mario Loria <ma...@arroyonetworks.com>
Authored: Wed Sep 28 21:57:39 2016 -0400
Committer: Anthony Shaw <an...@apache.org>
Committed: Sat Oct 8 13:29:22 2016 +1100
----------------------------------------------------------------------
libcloud/container/drivers/rancher.py | 871 +++++++++++++++++++++++------
1 file changed, 707 insertions(+), 164 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/d96fc83d/libcloud/container/drivers/rancher.py
----------------------------------------------------------------------
diff --git a/libcloud/container/drivers/rancher.py b/libcloud/container/drivers/rancher.py
index 5229442..62a88b5 100644
--- a/libcloud/container/drivers/rancher.py
+++ b/libcloud/container/drivers/rancher.py
@@ -1,7 +1,5 @@
import base64
-import datetime
import shlex
-import re
try:
import simplejson as json
@@ -83,13 +81,13 @@ class RancherContainerDriver(ContainerDriver):
name = 'Rancher'
website = 'http://rancher.com'
connectionCls = RancherConnection
- # Holding off on this for now. Only Environment API interaction enabled.
+ # Holding off on cluster support for now.
+ # Only Environment API interaction enabled.
supports_clusters = False
# As in the /v1/
version = '1'
- def __init__(self, key, secret, secure=False, host='localhost',
- port=80, key_file=None, cert_file=None):
+ def __init__(self, key, secret, secure=False, host='localhost', port=80):
"""
:param key: API key or username to used (required)
:type key: ``str``
@@ -107,19 +105,12 @@ class RancherContainerDriver(ContainerDriver):
:param port: Override port used for connections.
:type port: ``int``
- :param key_file: Path to private key for TLS connection (optional)
- :type key_file: ``str``
-
- :param cert_file: Path to public key for TLS connection (optional)
- :type cert_file: ``str``
:return: ``None``
"""
super(RancherContainerDriver, self).__init__(key=key, secret=secret,
secure=secure, host=host,
- port=port,
- key_file=key_file,
- cert_file=cert_file)
+ port=port)
if host.startswith('https://'):
secure = True
@@ -128,26 +119,10 @@ class RancherContainerDriver(ContainerDriver):
for prefix in prefixes:
if host.startswith(prefix):
host = host.strip(prefix)
- """
- if key_file or cert_file:
- # docker tls authentication-
- # https://docs.docker.com/articles/https/
- # We pass two files, a key_file with the
- # private key and cert_file with the certificate
- # libcloud will handle them through LibcloudHTTPSConnection
- if not (key_file and cert_file):
- raise Exception(
- 'Needs both private key file and '
- 'certificate file for tls authentication')
- self.connection.key_file = key_file
- self.connection.cert_file = cert_file
- self.connection.secure = True
- else:
- self.connection.secure = secure
- """
self.connection.host = host
self.connection.port = port
+ self.connection.secure = secure
# We only support environment api keys, meaning none of this:
# self.baseuri = "/v%s/projects/%s" % (self.version, project_id)
@@ -155,21 +130,60 @@ class RancherContainerDriver(ContainerDriver):
def ex_list_environments(self):
"""
- List the deployed container images
- :param image: Filter to containers with a certain image
- :type image: :class:`libcloud.container.base.ContainerImage`
- :param all: Show all container (including stopped ones)
- :type all: ``bool``
- :rtype: ``list`` of :class:`libcloud.container.base.Container`
+ List all Rancher Environments (called "Stacks" in the UI)
+
+ http://docs.rancher.com/rancher/v1.2/en/api/api-resources/environment/
+
+ :rtype: ``list`` of ``dict``
"""
- result = self.connection.request("%s/environments" % self.baseuri).object
+ result = self.connection.request(
+ "%s/environments" % self.baseuri).object
return result['data']
def ex_deploy_environment(self, name, description=None, dockercompose=None,
environment=None, externalid=None, outputs=None,
- previousenvironment=None, previousexternalid=None,
- ranchercompose=None, start=True):
+ previousenvironment=None,
+ previousexternalid=None, ranchercompose=None,
+ start=True):
+ """
+ Deploy a new environment ("Stack" in the UI)
+
+ http://docs.rancher.com/rancher/v1.2/en/api/api-resources/environment/#create
+
+ :param name: The desired name of the environment.
+ :type name: ``str``
+
+ :param description: A desired description for the environment.
+ :type description: ``str``
+
+ :param dockercompose: The Docker Compose configuration to use.
+ :type dockercompose: ``str``
+
+ :param environment: Environment K/V specific to this environment.
+ :type environment: ``dict``
+
+ :param externalid: The externalId of the environment.
+ :type externalid: ``str``
+
+ :param outputs: Any outputs the environment should contain.
+ :type outputs: ``dict``
+
+ :param previousenvironment: The previousEnvironment for this env.
+ :type previousenvironment: ``dict``
+
+ :param previousexternalid: The previousExternalId for this env.
+ :type previousexternalid: ``str``
+
+ :param ranchercompose: The Rancher Compose configuration for this env.
+ :type ranchercompose: ``str``
+
+ :param start: Whether to start this environment on creation.
+ :type start: ``bool``
+
+ :return: The newly created environment.
+ :rtype: ``dict``
+ """
payload = {
"description": description,
@@ -192,9 +206,12 @@ class RancherContainerDriver(ContainerDriver):
def ex_get_environment(self, env_id):
"""
- Get a service by ID
+ Get an environment by ID
+
:param env_id: The environment to be obtained.
- :return: The API dict object returned for the new service.
+ :type env_id: ``str``
+
+ :rtype: ``dict``
"""
result = self.connection.request("%s/environments/%s" %
(self.baseuri, env_id)).object
@@ -202,57 +219,230 @@ class RancherContainerDriver(ContainerDriver):
return result
def ex_destroy_environment(self, env_id):
+ """
+ Destroy an environment by ID
+ http://docs.rancher.com/rancher/v1.2/en/api/api-resources/environment/#delete
+
+ :param env_id: The environment to be destroyed.
+ :type env_id: ``str``
+
+ :return: True if destroy was successful, False otherwise.
+ :rtype: ``bool``
+ """
result = self.connection.request('%s/environments/%s' % (
- self.baseuri, env_id), method='DELETE')
- if result.status in VALID_RESPONSE_CODES:
- return result.status in VALID_RESPONSE_CODES
- else:
- raise RancherException(result.status,
- 'failed to destroy environment')
+ self.baseuri, env_id),
+ method='DELETE')
+ return result.status in VALID_RESPONSE_CODES
def ex_activate_environment(self, env_id):
+ """
+ Activate Services for a environment.
- result = self.connection.request('%s/environments/%s?action=activateservices' %
- (self.baseuri, env_id),
- method='POST')
- if result.status in VALID_RESPONSE_CODES:
- return result.status in VALID_RESPONSE_CODES
- else:
- raise RancherException(result.status,
- 'failed to activate environment')
+ http://docs.rancher.com/rancher/v1.2/en/api/api-resources/environment/#activateservices
+
+ :param env_id: The environment to activate services for.
+ :type env_id: ``str``
+
+ :return: True if activate was successful, False otherwise.
+ :rtype: ``bool``
+ """
+ result = self.connection.request(
+ '%s/environments/%s?action=activateservices' % (
+ self.baseuri, env_id), method='POST'
+ )
+ return result.status in VALID_RESPONSE_CODES
def ex_deactivate_environment(self, env_id):
+ """
+ Deactivate Services for a environment.
- result = self.connection.request('%s/environments/%s?action=deactivateservices' %
- (self.baseuri, env_id),
- method='POST')
- if result.status in VALID_RESPONSE_CODES:
- return result.status in VALID_RESPONSE_CODES
- else:
- raise RancherException(result.status,
- 'failed to deactivate environment')
-
- def build_payload(self, image, start=True, name=None, image_type="docker",
- blkiodeviceoptions=None, build=None,
- capadd=None,
- capdrop=None, command=None,
- count=None, cpuset=None, cpushares=None,
- datavolumemounts=None, datavolumes=None,
- datavolumesfrom=None, description=None, devices=None,
- dns=None, dnssearch=None, domainname=None,
- entrypoint=None, environment=None, expose=None,
- extrahosts=None, healthcheck=None, hostname=None,
- instancelinks=None, labels=None, logconfig=None,
- lxcconf=None, memory=None, memoryswap=None,
- networkcontainerrid=None, networkids=None,
- networkmode=None, pidmode=None, ports=None,
- privileged=None, publishallports=None,
- readonly=None, registrycredentialid=None,
- requestedhostid=None, restartpolicy=None,
- securityopt=None,
- stdinopen=None, tty=None, user=None,
- volumedriver=None, workingdir=None):
+ http://docs.rancher.com/rancher/v1.2/en/api/api-resources/environment/#deactivateservices
+
+ :param env_id: The environment to deactivate services for.
+ :type env_id: ``str``
+
+ :return: True if deactivate was successful, False otherwise.
+ :rtype: ``bool``
+ """
+
+ result = self.connection.request(
+ '%s/environments/%s?action=deactivateservices' % (
+ self.baseuri, env_id), method='POST'
+ )
+ return result.status in VALID_RESPONSE_CODES
+
+ def _build_payload(self, image, start=True, name=None, image_type="docker",
+ blkiodeviceoptions=None, build=None,
+ capadd=None,
+ capdrop=None, command=None,
+ count=None, cpuset=None, cpushares=None,
+ datavolumemounts=None, datavolumes=None,
+ datavolumesfrom=None, description=None, devices=None,
+ dns=None, dnssearch=None, domainname=None,
+ entrypoint=None, environment=None, expose=None,
+ extrahosts=None, healthcheck=None, hostname=None,
+ instancelinks=None, labels=None, logconfig=None,
+ lxcconf=None, memory=None, memoryswap=None,
+ networkcontainerrid=None, networkids=None,
+ networkmode=None, pidmode=None, ports=None,
+ privileged=None, publishallports=None,
+ readonly=None, registrycredentialid=None,
+ requestedhostid=None, restartpolicy=None,
+ securityopt=None,
+ stdinopen=None, tty=None, user=None,
+ volumedriver=None, workingdir=None):
+ """
+
+ :param image: The Image object to deploy.
+ :type image: :class:`libcloud.container.base.ContainerImage`
+
+ :param start: Whether to start the container on creation.
+ :type start: ``bool``
+
+ :param name: The desired name of the container.
+ :type name: ``str``
+
+ :param image_type: The image format of the desired image to deploy.
+ :type image_type: ``str``
+
+ :param blkiodeviceoptions: The blkioDeviceOptions for the container.
+ :type blkiodeviceoptions: ``dict``
+
+ :param build: Build details for the container.
+ :type build: ``dict``
+
+ :param capadd: Linux Capabilities to enable for this container.
+ :type capadd: ``list``
+
+ :param capdrop: Linux capabilities to disable for this container.
+ :type capdrop: ``list``
+
+ :param command: The command to execute when this container is run.
+ :type command: ``list``
+
+ :param count: The number of containers of this nature to launch.
+ :type count: ``int``
+
+ :param cpuset: Memory nodes in which to allow execution.
+ :type cpuset: ``str``
+
+ :param cpushares: Relative weight cpu shares to allow.
+ :type cpushares: ``int``
+
+ :param datavolumemounts: Data volume mountes this container should have
+ :type datavolumemounts: ``dict``
+
+ :param datavolumes: Data volumes to associate with this container.
+ :type datavolumes: ``list``
+
+ :param datavolumesfrom: Data volumes to inherit.
+ :type datavolumesfrom: ``list``
+
+ :param description: Description for this container.
+ :type description: ``str``
+
+ :param devices: Devices inside the container without privliged mode.
+ :type devices: ``list``
+
+ :param dns: DNS servers the container should utilize.
+ :type dns: ``list``
+
+ :param dnssearch: DNS search domains the container should utilize.
+ :type dnssearch: ``list``
+
+ :param domainname: The domain name the container should have.
+ :type domainname: ``str``
+
+ :param entrypoint: The entrypoint the container should have.
+ :type entrypoint: ``list``
+
+ :param environment: Environment variables the container should have.
+ :type environment: ``dict``
+
+ :param expose: Ports which should be exposed in the container.
+ :type expose: ``list``
+
+ :param extrahosts: Extra hosts file entries this container should have.
+ :type extrahosts: ``list``
+
+ :param healthcheck: Health check parameters for this container.
+ :type healthcheck: ``dict``
+
+ :param hostname: The hostname this container should have.
+ :type hostname: ``str``
+
+ :param instancelinks: Instance links the container should have.
+ :type instancelinks: ``dict``
+
+ :param labels: Labels to associate with this container.
+ :type labels: ``dict``
+
+ :param logconfig: Log configuration for this container.
+ :type logconfig: ``dict``
+
+ :param lxcconf: lxcConf specific to this container.
+ :type lxcconf: ``dict``
+
+ :param memory: The memory limit for this container.
+ :type memory: ``int``
+
+ :param memoryswap: Total memory limit for this container.
+ :type memoryswap: ``int``
+
+ :param networkcontainerrid: A Network container Id for this container.
+ :type networkcontainerrid: ``dict``
+
+ :param networkids: NetworkIds this container should contain.
+ :type networkids: ``list``
+
+ :param networkmode: The networkMode to enable for this container.
+ :type networkmode: ``str``
+
+ :param pidmode: The pidMode for this container.
+ :type pidmode: ``str``
+
+ :param ports: The ports to publicize for this container.
+ :type ports: ``list``
+
+ :param privileged: Whether to enable privileged mode for this container
+ :type privileged: ``bool``
+
+ :param publishallports: Publish all ports in container.
+ :type publishallports: ``bool``
+
+ :param readonly: Whether this container should be readOnly.
+ :type readonly: ``bool``
+
+ :param registrycredentialid: Registry credentials to use.
+ :type registrycredentialid: ``dict``
+
+ :param requestedhostid: Id of the requested host to run this container.
+ :type requestedhostid: ``dict``
+
+ :param restartpolicy: The container restart policy.
+ :type restartpolicy: ``dict``
+
+ :param securityopt: Security options to provide for this container.
+ :type securityopt: ``list``
+
+ :param stdinopen: Whether to keep stdin open.
+ :type stdinopen: ``bool``
+
+ :param tty: Enable a tty for this container.
+ :type tty: ``bool``
+
+ :param user: User this container should be tied to.
+ :type user: ``str``
+
+ :param volumedriver: The volume driver to use for this container.
+ :type volumedriver: ``str``
+
+ :param workingdir: The workingDir this container should start in.
+ :type workingdir: ``str``
+
+ :return:
+ """
if command is not None:
command = shlex.split(str(command))
@@ -317,35 +507,237 @@ class RancherContainerDriver(ContainerDriver):
def ex_list_services(self):
"""
- List the deployed container images
- :param image: Filter to containers with a certain image
- :type image: :class:`libcloud.container.base.ContainerImage`
- :param all: Show all container (including stopped ones)
- :type all: ``bool``
- :rtype: ``list`` of :class:`libcloud.container.base.Container`
+ List all Rancher Services
+
+ http://docs.rancher.com/rancher/v1.2/en/api/api-resources/service/
+
+ :rtype: ``list`` of ``dict``
"""
result = self.connection.request("%s/services" % self.baseuri).object
return result['data']
- def ex_deploy_service(self, name, image, environmentid, start=True,
- assignserviceipaddress=None, service_description=None,
- externalid=None, metadata=None, retainip=None,
- scale=None, scalepolicy=None,
- secondarylaunchconfigs=None, selectorcontainer=None,
- selectorlink=None,
+ def ex_deploy_service(self, name, image, environmentid,
+ start=True, assignserviceipaddress=None,
+ service_description=None, externalid=None,
+ metadata=None, retainip=None, scale=None,
+ scalepolicy=None, secondarylaunchconfigs=None,
+ selectorcontainer=None, selectorlink=None,
vip=None, datavolumesfromlaunchconfigs=None,
disks=None, kind=None, memorymb=None,
networklaunchconfig=None, requsetedipaddress=None,
userdata=None, vcpu=None, **kwargs):
"""
Deploy a Rancher Service under a stack.
- :param name: Name of the service.
- :param image: ContainerImage object of image to utilize.
+
+ http://docs.rancher.com/rancher/v1.2/en/api/api-resources/service/#create
+
+ :param name: The desired name of the service.
+ :type name: ``str``
+
+ :param image: The Image object to deploy.
+ :type image: :class:`libcloud.container.base.ContainerImage`
+
:param environmentid: The environment/stack ID this service is tied to.
- :param kwargs: The Launchconfig provided as top-level options,
- similar to deploy_container.
- :return: The API object returned on proper service creation.
+ :type environmentid: ``str``
+
+ :param start: Whether to start the service/container on creation.
+ :type start: ``bool``
+
+ :param assignserviceipaddress: The IP address to assign the service.
+ :type assignserviceipaddress: ``bool``
+
+ :param service_description: The service description.
+ :type service_description: ``str``
+
+ :param externalid: The externalId for this service.
+ :type externalid: ``str``
+
+ :param metadata: K/V Metadata for this service.
+ :type metadata: ``dict``
+
+ :param retainip: Whether this service should retain its IP.
+ :type retainip: ``bool``
+
+ :param scale: The scale of containers in this service.
+ :type scale: ``int``
+
+ :param scalepolicy: The scaling policy for this service.
+ :type scalepolicy: ``dict``
+
+ :param secondarylaunchconfigs: Secondary container launch configs.
+ :type secondarylaunchconfigs: ``list``
+
+ :param selectorcontainer: The selectorContainer for this service.
+ :type selectorcontainer: ``str``
+
+ :param selectorlink: The selectorLink for this service.
+ :type selectorlink: ``type``
+
+ :param vip: The VIP to assign to this service.
+ :type vip: ``str``
+
+ :param datavolumesfromlaunchconfigs: The dataVolumesFromLaunchConfigs.
+ :type datavolumesfromlaunchconfigs: ``list``
+
+ :param disks: The disks to associate with this container/service.
+ :type disks: ``list``
+
+ :param kind: The kind of object to deploy.
+ :type kind: ``str``
+
+ :param memorymb: The memoryMb to allow this container/service.
+ :type memorymb: ``int``
+
+ :param networklaunchconfig: The networkLaunchConfig for this container.
+ :type networklaunchconfig: ``str``
+
+ :param requsetedipaddress: The requested IP address for this container.
+ :type requsetedipaddress: ``str``
+
+ :param userdata: User data to associate with this container.
+ :type userdata: ``str``
+
+ :param vcpu: Virtual host cpu's to assign to allow this container.
+ :type vcpu: ``int``
+
+ :param blkiodeviceoptions: The blkioDeviceOptions for the container.
+ :type blkiodeviceoptions: ``dict``
+
+ :param build: Build details for the container.
+ :type build: ``dict``
+
+ :param capadd: Linux Capabilities to enable for this container.
+ :type capadd: ``list``
+
+ :param capdrop: Linux capabilities to disable for this container.
+ :type capdrop: ``list``
+
+ :param command: The command to execute when this container is run.
+ :type command: ``list``
+
+ :param count: The number of containers of this nature to launch.
+ :type count: ``int``
+
+ :param cpuset: Memory nodes in which to allow execution.
+ :type cpuset: ``str``
+
+ :param cpushares: Relative weight cpu shares to allow.
+ :type cpushares: ``int``
+
+ :param datavolumemounts: Data volume mountes this container should have
+ :type datavolumemounts: ``dict``
+
+ :param datavolumes: Data volumes to associate with this container.
+ :type datavolumes: ``list``
+
+ :param datavolumesfrom: Data volumes to inherit.
+ :type datavolumesfrom: ``list``
+
+ :param description: Description for this container.
+ :type description: ``str``
+
+ :param devices: Devices inside the container without privliged mode.
+ :type devices: ``list``
+
+ :param dns: DNS servers the container should utilize.
+ :type dns: ``list``
+
+ :param dnssearch: DNS search domains the container should utilize.
+ :type dnssearch: ``list``
+
+ :param domainname: The domain name the container should have.
+ :type domainname: ``str``
+
+ :param entrypoint: The entrypoint the container should have.
+ :type entrypoint: ``list``
+
+ :param environment: Environment variables the container should have.
+ :type environment: ``dict``
+
+ :param expose: Ports which should be exposed in the container.
+ :type expose: ``list``
+
+ :param extrahosts: Extra hosts file entries this container should have.
+ :type extrahosts: ``list``
+
+ :param healthcheck: Health check parameters for this container.
+ :type healthcheck: ``dict``
+
+ :param hostname: The hostname this container should have.
+ :type hostname: ``str``
+
+ :param instancelinks: Instance links the container should have.
+ :type instancelinks: ``dict``
+
+ :param labels: Labels to associate with this container.
+ :type labels: ``dict``
+
+ :param logconfig: Log configuration for this container.
+ :type logconfig: ``dict``
+
+ :param lxcconf: lxcConf specific to this container.
+ :type lxcconf: ``dict``
+
+ :param memory: The memory limit for this container.
+ :type memory: ``int``
+
+ :param memoryswap: Total memory limit for this container.
+ :type memoryswap: ``int``
+
+ :param networkcontainerrid: A Network container Id for this container.
+ :type networkcontainerrid: ``dict``
+
+ :param networkids: NetworkIds this container should contain.
+ :type networkids: ``list``
+
+ :param networkmode: The networkMode to enable for this container.
+ :type networkmode: ``str``
+
+ :param pidmode: The pidMode for this container.
+ :type pidmode: ``str``
+
+ :param ports: The ports to publicize for this container.
+ :type ports: ``list``
+
+ :param privileged: Whether to enable privileged mode for this container
+ :type privileged: ``bool``
+
+ :param publishallports: Publish all ports in container.
+ :type publishallports: ``bool``
+
+ :param readonly: Whether this container should be readOnly.
+ :type readonly: ``bool``
+
+ :param registrycredentialid: Registry credentials to use.
+ :type registrycredentialid: ``dict``
+
+ :param requestedhostid: Id of the requested host to run this container.
+ :type requestedhostid: ``dict``
+
+ :param restartpolicy: The container restart policy.
+ :type restartpolicy: ``dict``
+
+ :param securityopt: Security options to provide for this container.
+ :type securityopt: ``list``
+
+ :param stdinopen: Whether to keep stdin open.
+ :type stdinopen: ``bool``
+
+ :param tty: Enable a tty for this container.
+ :type tty: ``bool``
+
+ :param user: User this container should be tied to.
+ :type user: ``str``
+
+ :param volumedriver: The volume driver to use for this container.
+ :type volumedriver: ``str``
+
+ :param workingdir: The workingDir this container should start in.
+ :type workingdir: ``str``
+
+ :return: The newly created service.
+ :rtype: ``dict``
"""
service_specific_container_config = {
@@ -361,7 +753,7 @@ class RancherContainerDriver(ContainerDriver):
# Build the de-facto container payload
# Note that we don't need to remove "name" since its None by default.
- launchconfig = self.build_payload(image, start, **kwargs)
+ launchconfig = self._build_payload(image, start, **kwargs)
# Add in extra service configuration
launchconfig.update(service_specific_container_config)
launchconfig = json.dumps({k: v for k, v in launchconfig.items()
@@ -394,8 +786,11 @@ class RancherContainerDriver(ContainerDriver):
def ex_get_service(self, service_id):
"""
Get a service by ID
- :param service_id: The service to be obtained.
- :return: The API dict object returned for the new service.
+
+ :param service_id: The service_id to be obtained.
+ :type service_id: ``str``
+
+ :rtype: ``dict``
"""
result = self.connection.request("%s/services/%s" %
(self.baseuri, service_id)).object
@@ -404,48 +799,60 @@ class RancherContainerDriver(ContainerDriver):
def ex_destroy_service(self, service_id):
"""
- Delete a service.
- :param service_id: The service to be destroyed
- :return: True if the destroy was successful, False otherwise.
+ Destroy a service by ID
+
+ http://docs.rancher.com/rancher/v1.2/en/api/api-resources/service/#delete
+
+ :param service_id: The service to be destroyed.
+ :type service_id: ``str``
+
+ :return: True if destroy was successful, False otherwise.
:rtype: ``bool``
"""
result = self.connection.request('%s/services/%s' % (self.baseuri,
service_id), method='DELETE')
- if result.status in VALID_RESPONSE_CODES:
- return result.status in VALID_RESPONSE_CODES
- else:
- raise RancherException(result.status,
- 'failed to destroy service')
+ return result.status in VALID_RESPONSE_CODES
def ex_activate_service(self, service_id):
+ """
+ Activate a service.
+
+ http://docs.rancher.com/rancher/v1.2/en/api/api-resources/service/#activate
+ :param service_id: The service to activate services for.
+ :type service_id: ``str``
+
+ :return: True if activate was successful, False otherwise.
+ :rtype: ``bool``
+ """
result = self.connection.request('%s/services/%s?action=activate' %
(self.baseuri, service_id),
method='POST')
- if result.status in VALID_RESPONSE_CODES:
- return result.status in VALID_RESPONSE_CODES
- else:
- raise RancherException(result.status,
- 'failed to activate service')
+ return result.status in VALID_RESPONSE_CODES
def ex_deactivate_service(self, service_id):
+ """
+ Deactivate a service.
+
+ http://docs.rancher.com/rancher/v1.2/en/api/api-resources/service/#deactivate
+
+ :param service_id: The service to deactivate services for.
+ :type service_id: ``str``
+ :return: True if deactivate was successful, False otherwise.
+ :rtype: ``bool``
+ """
result = self.connection.request('%s/services/%s?action=deactivate' %
(self.baseuri, service_id),
method='POST')
- if result.status in VALID_RESPONSE_CODES:
- return result.status in VALID_RESPONSE_CODES
- else:
- raise RancherException(result.status,
- 'failed to deactivate service')
+ return result.status in VALID_RESPONSE_CODES
- def list_containers(self, image=None, all=True):
+ def list_containers(self):
"""
- List the deployed container images
- :param image: Filter to containers with a certain image
- :type image: :class:`libcloud.container.base.ContainerImage`
- :param all: Show all container (including stopped ones)
- :type all: ``bool``
+ List the deployed containers.
+
+ http://docs.rancher.com/rancher/v1.2/en/api/api-resources/container/
+
:rtype: ``list`` of :class:`libcloud.container.base.Container`
"""
@@ -456,19 +863,160 @@ class RancherContainerDriver(ContainerDriver):
def deploy_container(self, name, image, parameters=None, start=True,
**kwargs):
"""
- Deploy an installed container image
- For details on the additional parameters see : http://bit.ly/1PjMVKV
- :param name: The name of the new container
- :type name: ``str``
- :param image: The container image to deploy
- :type image: :class:`libcloud.container.base.ContainerImage`
- :param parameters: Container Image parameters
+ Deploy a new container.
+
+ http://docs.rancher.com/rancher/v1.2/en/api/api-resources/container/#create
+
+ :param name: The desired name of the container.
+ :type name: ``str``
+
+ :param image: The Image object to deploy.
+ :type image: :class:`libcloud.container.base.ContainerImage`
+
+ :param parameters: Container Image parameters (unused)
:type parameters: ``str``
- :param start: Start the container on deployment
- :type start: ``bool``
+
+ :param start: Whether to start the container on creation.
+ :type start: ``bool``
+
+ :param blkiodeviceoptions: The blkioDeviceOptions for the container.
+ :type blkiodeviceoptions: ``dict``
+
+ :param build: Build details for the container.
+ :type build: ``dict``
+
+ :param capadd: Linux Capabilities to enable for this container.
+ :type capadd: ``list``
+
+ :param capdrop: Linux capabilities to disable for this container.
+ :type capdrop: ``list``
+
+ :param command: The command to execute when this container is run.
+ :type command: ``list``
+
+ :param count: The number of containers of this nature to launch.
+ :type count: ``int``
+
+ :param cpuset: Memory nodes in which to allow execution.
+ :type cpuset: ``str``
+
+ :param cpushares: Relative weight cpu shares to allow.
+ :type cpushares: ``int``
+
+ :param datavolumemounts: Data volume mountes this container should have
+ :type datavolumemounts: ``dict``
+
+ :param datavolumes: Data volumes to associate with this container.
+ :type datavolumes: ``list``
+
+ :param datavolumesfrom: Data volumes to inherit.
+ :type datavolumesfrom: ``list``
+
+ :param description: Description for this container.
+ :type description: ``str``
+
+ :param devices: Devices inside the container without privliged mode.
+ :type devices: ``list``
+
+ :param dns: DNS servers the container should utilize.
+ :type dns: ``list``
+
+ :param dnssearch: DNS search domains the container should utilize.
+ :type dnssearch: ``list``
+
+ :param domainname: The domain name the container should have.
+ :type domainname: ``str``
+
+ :param entrypoint: The entrypoint the container should have.
+ :type entrypoint: ``list``
+
+ :param environment: Environment variables the container should have.
+ :type environment: ``dict``
+
+ :param expose: Ports which should be exposed in the container.
+ :type expose: ``list``
+
+ :param extrahosts: Extra hosts file entries this container should have.
+ :type extrahosts: ``list``
+
+ :param healthcheck: Health check parameters for this container.
+ :type healthcheck: ``dict``
+
+ :param hostname: The hostname this container should have.
+ :type hostname: ``str``
+
+ :param instancelinks: Instance links the container should have.
+ :type instancelinks: ``dict``
+
+ :param labels: Labels to associate with this container.
+ :type labels: ``dict``
+
+ :param logconfig: Log configuration for this container.
+ :type logconfig: ``dict``
+
+ :param lxcconf: lxcConf specific to this container.
+ :type lxcconf: ``dict``
+
+ :param memory: The memory limit for this container.
+ :type memory: ``int``
+
+ :param memoryswap: Total memory limit for this container.
+ :type memoryswap: ``int``
+
+ :param networkcontainerrid: A Network container Id for this container.
+ :type networkcontainerrid: ``dict``
+
+ :param networkids: NetworkIds this container should contain.
+ :type networkids: ``list``
+
+ :param networkmode: The networkMode to enable for this container.
+ :type networkmode: ``str``
+
+ :param pidmode: The pidMode for this container.
+ :type pidmode: ``str``
+
+ :param ports: The ports to publicize for this container.
+ :type ports: ``list``
+
+ :param privileged: Whether to enable privileged mode for this container
+ :type privileged: ``bool``
+
+ :param publishallports: Publish all ports in container.
+ :type publishallports: ``bool``
+
+ :param readonly: Whether this container should be readOnly.
+ :type readonly: ``bool``
+
+ :param registrycredentialid: Registry credentials to use.
+ :type registrycredentialid: ``dict``
+
+ :param requestedhostid: Id of the requested host to run this container.
+ :type requestedhostid: ``dict``
+
+ :param restartpolicy: The container restart policy.
+ :type restartpolicy: ``dict``
+
+ :param securityopt: Security options to provide for this container.
+ :type securityopt: ``list``
+
+ :param stdinopen: Whether to keep stdin open.
+ :type stdinopen: ``bool``
+
+ :param tty: Enable a tty for this container.
+ :type tty: ``bool``
+
+ :param user: User this container should be tied to.
+ :type user: ``str``
+
+ :param volumedriver: The volume driver to use for this container.
+ :type volumedriver: ``str``
+
+ :param workingdir: The workingDir this container should start in.
+ :type workingdir: ``str``
+
:rtype: :class:`Container`
"""
- payload = self.build_payload(name, image, start, **kwargs)
+ payload = self._build_payload(name, image, start, **kwargs)
data = json.dumps({k: v for k, v in payload.items() if v is not None})
result = self.connection.request('%s/containers' % self.baseuri,
@@ -479,8 +1027,10 @@ class RancherContainerDriver(ContainerDriver):
def get_container(self, id):
"""
Get a container by ID
+
:param id: The ID of the container to get
:type id: ``str``
+
:rtype: :class:`libcloud.container.base.Container`
"""
result = self.connection.request("%s/containers/%s" %
@@ -491,8 +1041,10 @@ class RancherContainerDriver(ContainerDriver):
def stop_container(self, container):
"""
Stop a container
+
:param container: The container to be stopped
:type container: :class:`libcloud.container.base.Container`
+
:return: The container refreshed with current data
:rtype: :class:`libcloud.container.base.Container`
"""
@@ -502,43 +1054,43 @@ class RancherContainerDriver(ContainerDriver):
if result.status in VALID_RESPONSE_CODES:
return self.get_container(container.id)
else:
- raise RancherException(result.status,
- 'failed to stop container')
+ raise RancherException(result.status, 'failed to stop container')
def destroy_container(self, container):
"""
Remove a container
+
:param container: The container to be destroyed
:type container: :class:`libcloud.container.base.Container`
+
:return: True if the destroy was successful, False otherwise.
:rtype: ``bool``
"""
result = self.connection.request('%s/containers/%s' % (self.baseuri,
container.id), method='DELETE')
- if result.status in VALID_RESPONSE_CODES:
- return self.get_container(container.id)
- else:
- raise RancherException(result.status,
- 'failed to destroy container')
+ return result.status in VALID_RESPONSE_CODES
def _gen_image(self, imageuuid):
"""
- This function converts a valid Rancher `imageUuid` string to a valid
+ This function converts a valid Rancher ``imageUuid`` string to a valid
image object. Only supports docker based images hence `docker:` must
prefix!!
- For a imageuuid:
- docker:<hostname>:<port>/<namespace>/<imagename>:<version>
+ For a ``imageuuid``:
+ ``docker:<hostname>:<port>/<namespace>/<imagename>:<version>``
The following applies:
- id = <imagename>
- name = <imagename>
- path = <hostname>:<port>/<namespace>/<imagename>
- version = <version>
+ ``id`` = ``<imagename>``
+ ``name`` = ``<imagename>``
+ ``path`` = ``<hostname>:<port>/<namespace>/<imagename>``
+ ``version`` = ``<version>``
+
+ :param imageuuid: A valid Rancher image string
+ i.e. ``docker:rlister/hastebin:8.0``
+ :type imageuuid: ``str``
- :param imageUuid: A valid Rancher image string
- i.e. `docker:rlister/hastebin:8.0`
- :return: Proper ContainerImage object.
+ :return: Converted ContainerImage object.
+ :rtype: :class:`libcloud.container.base.ContainerImage`
"""
# Obtain just the name(:version) for parsing
if '/' not in imageuuid:
@@ -637,12 +1189,3 @@ class RancherContainerDriver(ContainerDriver):
state=state,
driver=self.connection.driver,
extra=extra)
-
-
-def ts_to_str(timestamp):
- """
- Return a timestamp as a nicely formated datetime string.
- """
- date = datetime.datetime.fromtimestamp(timestamp)
- date_string = date.strftime("%d/%m/%Y %H:%M %Z")
- return date_string