Source code for libcloud.compute.drivers.ktucloud

# 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.

from libcloud.compute.base import Node, NodeSize, NodeImage
from libcloud.compute.providers import Provider
from libcloud.compute.drivers.cloudstack import CloudStackNodeDriver


[docs]class KTUCloudNodeDriver(CloudStackNodeDriver): """Driver for KTUCloud Compute platform.""" EMPTY_DISKOFFERINGID = "0" type = Provider.KTUCLOUD name = "KTUCloud" website = "https://ucloudbiz.olleh.com/"
[docs] def list_images(self, location=None): args = {"templatefilter": "executable"} if location is not None: args["zoneid"] = location.id imgs = self._sync_request(command="listAvailableProductTypes", method="GET") images = [] for img in imgs["producttypes"]: images.append( NodeImage( img["serviceofferingid"], img["serviceofferingdesc"], self, { "hypervisor": "", "format": "", "os": img["templatedesc"], "templateid": img["templateid"], "zoneid": img["zoneid"], }, ) ) return images
[docs] def list_sizes(self, location=None): szs = self._sync_request("listAvailableProductTypes") sizes = [] for sz in szs["producttypes"]: diskofferingid = sz.get("diskofferingid", self.EMPTY_DISKOFFERINGID) sizes.append(NodeSize(diskofferingid, sz["diskofferingdesc"], 0, 0, 0, 0, self)) return sizes
[docs] def create_node(self, name, size, image, location=None, ex_usageplantype="hourly"): params = { "displayname": name, "serviceofferingid": image.id, "templateid": str(image.extra["templateid"]), "zoneid": str(image.extra["zoneid"]), } if ex_usageplantype is None: params["usageplantype"] = "hourly" else: params["usageplantype"] = ex_usageplantype if size.id != self.EMPTY_DISKOFFERINGID: params["diskofferingid"] = size.id result = self._async_request(command="deployVirtualMachine", params=params, method="GET") node = result["virtualmachine"] return Node( id=node["id"], name=node["displayname"], state=self.NODE_STATE_MAP[node["state"]], public_ips=[], private_ips=[], driver=self, extra={ "zoneid": image.extra["zoneid"], "ip_addresses": [], "forwarding_rules": [], }, )