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:44 UTC
[13/27] libcloud git commit: kwargs, no more build_payload
kwargs, no more build_payload
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/0e5bb664
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/0e5bb664
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/0e5bb664
Branch: refs/heads/trunk
Commit: 0e5bb664b7222328c42fee748dc165ab3648ceca
Parents: 6a1d03d
Author: Mario Loria <ma...@arroyonetworks.com>
Authored: Thu Sep 29 16:18:19 2016 -0400
Committer: Anthony Shaw <an...@apache.org>
Committed: Sat Oct 8 13:29:22 2016 +1100
----------------------------------------------------------------------
libcloud/container/drivers/rancher.py | 617 +++--------------------------
1 file changed, 50 insertions(+), 567 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/0e5bb664/libcloud/container/drivers/rancher.py
----------------------------------------------------------------------
diff --git a/libcloud/container/drivers/rancher.py b/libcloud/container/drivers/rancher.py
index 1e8e18b..e20b333 100644
--- a/libcloud/container/drivers/rancher.py
+++ b/libcloud/container/drivers/rancher.py
@@ -1,5 +1,4 @@
import base64
-import shlex
try:
import simplejson as json
@@ -157,10 +156,10 @@ class RancherContainerDriver(ContainerDriver):
return result['data']
def ex_deploy_stack(self, name, description=None, dockercompose=None,
- environment=None, externalid=None, outputs=None,
- previousenvironment=None,
- previousexternalid=None, ranchercompose=None,
- start=True):
+ environment=None, externalid=None, outputs=None,
+ previousenvironment=None,
+ previousexternalid=None, ranchercompose=None,
+ start=True):
"""
Deploy a new stack.
@@ -305,25 +304,24 @@ class RancherContainerDriver(ContainerDriver):
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):
+ vip=None, **kwargs):
"""
Deploy a Rancher Service under a stack.
http://docs.rancher.com/rancher/v1.2/en/api/api-resources/service/#create
- :param name: The desired name of the service.
+ *Any further configuration passed applies to the ``launchConfig``*
+
+ :param name: The desired name of the service. (required)
:type name: ``str``
- :param image: The Image object to deploy.
+ :param image: The Image object to deploy. (required)
:type image: :class:`libcloud.container.base.ContainerImage`
- :param environmentid: The environment/stack ID this service is tied to.
+ :param environmentid: The stack ID this service is tied to. (required)
:type environmentid: ``str``
- :param start: Whether to start the service/container on creation.
+ :param start: Whether to start the service on creation.
:type start: ``bool``
:param assignserviceipaddress: The IP address to assign the service.
@@ -359,193 +357,21 @@ class RancherContainerDriver(ContainerDriver):
: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 = {
- "dataVolumesFromLaunchConfigs": datavolumesfromlaunchconfigs,
- "disks": disks,
- "kind": kind,
- "memoryMb": memorymb,
- "networkLaunchConfig": networklaunchconfig,
- "requestedIpAddress": requsetedipaddress,
- "userdata": userdata,
- "vcpu": vcpu
+ launchconfig = {
+ "imageUuid": self._degen_image(image),
+ **kwargs
}
- # 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)
- # Add in extra service configuration
- launchconfig.update(service_specific_container_config)
- launchconfig = json.dumps({k: v for k, v in launchconfig.items()
- if v is not None})
service_payload = {
"assignServiceIpAddress": assignserviceipaddress,
"description": service_description,
"environmentId": environmentid,
"externalId": externalid,
- "launchConfig": json.loads(launchconfig),
+ "launchConfig": launchconfig,
"metadata": metadata,
"name": name,
"retainIp": retainip,
@@ -662,174 +488,48 @@ class RancherContainerDriver(ContainerDriver):
- ``path`` = ``<hostname>:<port>/<namespace>/<imagename>``
- ``version`` = ``<version>``
- :param name: The desired name of the container.
+ *Any extra configuration can also be passed i.e. "environment"*
+
+ :param name: The desired name of the container. (required)
:type name: ``str``
- :param image: The Image object to deploy.
+ :param image: The Image object to deploy. (required)
:type image: :class:`libcloud.container.base.ContainerImage`
:param parameters: Container Image parameters (unused)
:type parameters: ``str``
- :param start: Whether to start the container on creation.
+ :param start: Whether to start the container on creation(startOnCreate)
: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)
- data = json.dumps({k: v for k, v in payload.items() if v is not None})
+
+ payload = {
+ "name": name,
+ "imageUuid": self._degen_image(image),
+ "startOnCreate": start,
+ **kwargs
+ }
+
+ data = json.dumps(payload)
result = self.connection.request('%s/containers' % self.baseuri,
data=data, method='POST').object
return self._to_container(result)
- def get_container(self, id):
+ def get_container(self, con_id):
"""
Get a container by ID
- :param id: The ID of the container to get
- :type id: ``str``
+ :param con_id: The ID of the container to get
+ :type con_id: ``str``
:rtype: :class:`libcloud.container.base.Container`
"""
result = self.connection.request("%s/containers/%s" %
- (self.baseuri, id)).object
+ (self.baseuri, con_id)).object
return self._to_container(result)
@@ -913,6 +613,22 @@ class RancherContainerDriver(ContainerDriver):
}
)
+ def _degen_image(self, image):
+ """
+ Take in an image object to break down into an ``imageUuid``
+
+ :param image:
+ :return:
+ """
+
+ # Only supporting docker atm
+ image_type = "docker"
+
+ if image.version is not None:
+ return image_type + ':' + image.path + ':' + image.version
+ else:
+ return image_type + ':' + image.path
+
def _to_container(self, data):
"""
Convert container in proper Container instance object
@@ -936,7 +652,7 @@ class RancherContainerDriver(ContainerDriver):
# A Removed container is purged after x amt of time.
# Both of these render the container dead (can't be started later)
state = ContainerState.TERMINATED
- elif rancher_state.endswith('ing'):
+ elif data['transitioning'] == 'yes':
# Best we can do for current actions
state = ContainerState.PENDING
else:
@@ -953,236 +669,3 @@ class RancherContainerDriver(ContainerDriver):
state=state,
driver=self.connection.driver,
extra=extra)
-
- 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))
-
- if image.version is not None:
- imageuuid = image_type + ':' + image.path + ':' + image.version
- else:
- imageuuid = image_type + ':' + image.path
-
- payload = {
- "blkioDeviceOptions": blkiodeviceoptions,
- "build": build,
- "capAdd": capadd,
- "capDrop": capdrop,
- "command": command,
- "count": count,
- "cpuSet": cpuset,
- "cpuShares": cpushares,
- "dataVolumeMounts": datavolumemounts,
- "dataVolumes": datavolumes,
- "dataVolumesFrom": datavolumesfrom,
- "description": description,
- "devices": devices,
- "dns": dns,
- "dnsSearch": dnssearch,
- "domainName": domainname,
- "entryPoint": entrypoint,
- "environment": environment,
- "expose": expose,
- "extraHosts": extrahosts,
- "healthCheck": healthcheck,
- "hostname": hostname,
- "imageUuid": imageuuid,
- "instanceLinks": instancelinks,
- "labels": labels,
- "logConfig": logconfig,
- "lxcConf": lxcconf,
- "memory": memory,
- "memorySwap": memoryswap,
- "name": name,
- "networkContainerId": networkcontainerrid,
- "networkIds": networkids,
- "networkMode": networkmode,
- "pidMode": pidmode,
- "ports": ports,
- "privileged": privileged,
- "publishAllPorts": publishallports,
- "readOnly": readonly,
- "registryCredentialId": registrycredentialid,
- "requestedHostId": requestedhostid,
- "restartPolicy": restartpolicy,
- "securityOpt": securityopt,
- "startOnCreate": start,
- "stdinOpen": stdinopen,
- "tty": tty,
- "user": user,
- "volumeDriver": volumedriver,
- "workingdir": workingdir
- }
-
- return payload