blob: 3a41d40ed4a85be8ec7d2e08d9b5bcb4ebddbc5d [file]
from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver
cls = get_driver(Provider.KAMATERA)
driver = cls("KAMATERA API CLIENT ID", "KAMATERA API SECRET")
# select a location
locations = {location.id: location for location in driver.list_locations()}
for location in locations.values():
print(location)
# <NodeLocation: id=AS, name=Hong Kong, country=China
# <NodeLocation: id=CA-TR, name=Toronto, country=Canada
# <NodeLocation: id=EU, name=Amsterdam, country=The Netherlands
# <NodeLocation: id=EU-FR, name=Frankfurt, country=Germany
# <NodeLocation: id=EU-LO, name=London, country=United Kingdom
# <NodeLocation: id=IL, name=Rosh Haayin, country=Israel
# <NodeLocation: id=IL-JR, name=Jerusalem, country=Israel
# <NodeLocation: id=IL-PT, name=Petach Tikva, country=Israel
# <NodeLocation: id=IL-RH, name=Rosh Haayin 2, country=Israel
# <NodeLocation: id=IL-TA, name=Tel Aviv, country=Israel
# <NodeLocation: id=US-NY2, name=New York, country=United States
# <NodeLocation: id=US-SC, name=Santa Clara, country=United States
# <NodeLocation: id=US-TX, name=Texas, country=United States
location = locations["US-NY2"]
# get the capabilities for this location
capabilities = driver.ex_list_capabilities(location)
# choose a cpu type
cpuTypes = {cpuType["id"]: cpuType for cpuType in capabilities["cpuTypes"]}
for cpuType in cpuTypes.values():
print("{}: {}".format(cpuType["name"], cpuType["description"]))
# Type B - General Purpose: Server CPUs are assigned to a dedicated physical
# CPU Thread with reserved resources guaranteed.
# Type D - Dedicated: Server CPU are assigned to a dedicated physical CPU Core
# (2 threads) with reserved resources guaranteed.
# Type T - Burstable: Server CPUs are assigned to a dedicated physical CPU
# thread with reserved resources guaranteed.
# Type A - Availability: Server CPUs are assigned to a non-dedicated physical
# CPU thread with no resources guaranteed.
cpuType = cpuTypes["B"]
# choose number of cpu cores
print(cpuType["cpuCores"])
# [1, 2, 4, 6, 8, 12, 16, 20, 24, 28, 32, 36, 40, 48, 56, 64, 72]
cpuCores = 2
# choose amount of RAM
print(cpuType["ramMB"])
# [256, 512, 1024, 2048, 3072, 4096, 6144, 8192, 10240, 12288, 16384, 24576,
# 32768, 49152, 65536, 98304, 131072, 200704, 262144, 327680, 393216]
ramMB = 2048
# choose disk sizes
print(capabilities["diskSizeGB"])
# [5, 10, 15, 20, 30, 40, 50, 60, 80, 100, 150, 200, 250, 300, 350, 400, 450,
# 500, 600, 700, 800, 900, 1000, 1500, 2000, 3000, 4000]
# primary disk size
diskSizeGB = 20
# additional disks (up to 3 additional disks)
extraDiskSizesGB = [100, 200]
# choose a billing cycle
billingCycle = driver.EX_BILLINGCYCLE_MONTHLY
# billingCycle = driver.EX_BILLINGCYCLE_HOURLY
# in case of monthly billing cycle, choose traffic package
print(capabilities["monthlyTrafficPackage"])
# {'b50': '50Mbit/sec unmetered on 10Gbit/sec port',
# 't5000': '5000GB/month on 10Gbit/sec port'}
monthlyTrafficPackage = "t5000"
# create node size object
size = driver.ex_get_size(
ramMB,
diskSizeGB,
cpuType["id"],
cpuCores,
extraDiskSizesGB=extraDiskSizesGB,
monthlyTrafficPackage=monthlyTrafficPackage,
)
# choose an OS image
images = {image.id: image for image in driver.list_images(location)}
for image in images.values():
print("{}: {}".format(image.id, image.name))
# list is shortened, actual list will vary and provide more OS image options
# US-NY2:6000C2987c9641fd2619a149ba2ca01a: CentOS 8.0 64-bit - Minimal
# US-NY2:6000C29b85c6367d215d403f44c28f48: CentOS 8.0 64-bit - Basic Server
# US-NY2:6000C29bb8fde673f515caf9bed695a1: Debian version 8.9 (jessie) 64-bit
# US-NY2:6000C29e4131d66b806c25c48ab0b810: FreeBSD 12.1 64-bit
# US-NY2:6000C2983bdd8b531ecfc6d892a35aa4: FreeBSD 11.1 32-bit
# US-NY2:6000C29a5a7220dcf84716e7bba74215: Ubuntu Server version 18.04 LTS
# US-NY2:6000C298bbb2d3b6e9721f4f4f3c5bf0: Ubuntu Server version 16.04 LTS
image = images["US-NY2:6000C29a5a7220dcf84716e7bba74215"]
# set network configurations (up to 4 interfaces can be added)
networks = []
# add a wan to get a public IP
networks.append({"name": "wan", "ip": "auto"})
# add a vlan interface to get a private IP
# vlan network name and ip should be configured in the Kamatera console
networks.append({"name": "12345-my-vlan", "ip": "auto"})
# create node
node = driver.create_node(
name="test_libcloud_server",
size=size,
image=image,
location=location,
ex_networks=networks,
ex_dailybackup=False, # create daily backups for the node?
ex_managed=False, # provide managed support for the node?
ex_billingcycle=billingCycle,
)
# get the node SSH connection details
print("root@{} / {}".format(node.public_ips[0], node.extra["generated_password"]))