D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
saltstack
/
salt
/
lib
/
python3.10
/
site-packages
/
libcloud
/
compute
/
drivers
/
Filename :
ktucloud.py
back
Copy
# 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 class KTUCloudNodeDriver(CloudStackNodeDriver): """Driver for KTUCloud Compute platform.""" EMPTY_DISKOFFERINGID = "0" type = Provider.KTUCLOUD name = "KTUCloud" website = "https://ucloudbiz.olleh.com/" 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 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 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": [], }, )