Source code for cloudmesh_client.cloud.iaas.provider.libcloud.CloudProviderLibcloudEC2

from __future__ import print_function
from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver
import libcloud.security
import os
from pprint import pprint
from uuid import UUID
import re
from cloudmesh_client.common.todo import TODO
from cloudmesh_client.common.ConfigDict import Config, ConfigDict
from cloudmesh_client.common.FlatDict import FlatDict
from cloudmesh_client.cloud.iaas.CloudProviderBase import CloudProviderBase

from cloudmesh_client.cloud.iaas.provider.libcloud.CloudProviderLibcloud import CloudProviderLibcloud

from cloudmesh_client.shell.console import Console


[docs]class CloudProviderLibcloudEC2(CloudProviderLibcloud): def __init__(self, cloud_name, cloud_details, user=None, flat=True): super(CloudProviderLibcloudEC2, self).__init__(cloud_name, cloud_details, user=user) self.flat = flat self.cloud_type = "libcloud" self.kind = ["image", "vm", "flavor", "key"] self.cloudname = cloud_name self.initialize(cloud_name)
[docs] def initialize(self, cloudname, user=None): Console.info("Initializing libcloud-ec2 for " + cloudname) cls = get_driver(Provider.EC2) d = ConfigDict("cloudmesh.yaml") self.config = d["cloudmesh"]["clouds"][cloudname] credentials = self.config["credentials"] cm_type = self.config["cm_type"] ec2_access_key = credentials['EC2_ACCESS_KEY'] ec2_secret_key = credentials['EC2_SECRET_KEY'] if not cloudname == "aws": auth_url = credentials["EC2_URL"] searchobj = re.match(r'^http[s]?://(.+):([0-9]+)/([a-zA-Z/]*)', auth_url, re.M | re.I) path = None host = None port = None if searchobj: host = searchobj.group(1) port = searchobj.group(2) path = searchobj.group(3) Console.info("url : " + searchobj.group()) Console.info("host: " + host) Console.info("port: " + port) Console.info("path: " + path) extra_args = {'path': path} else: Console.error("Authentication url incorrect: {}".format(auth_url)) self.provider = cls(ec2_access_key, ec2_secret_key, host=host, port=port, **extra_args) else: Console.info("AWS INIT") self.provider = cls(ec2_access_key, ec2_secret_key)
[docs] def create_node(self, **kwargs): """ Create a VM instance. Reference: https://libcloud.readthedocs.io/en/latest/_modules/libcloud/compute/drivers/ec2.html#BaseEC2NodeDriver.create_node :keyword name: the name of VM :type name: ``str`` :keyword image: the name of vm image :type name: :class:`NodeImage` :keyword size: the size of vm instance :type size: :class:`NodeSize` :keyword ex_keyname: the keyname :type name: ``str`` """ pprint("create_node call in aws") self.provider.create_node(name=kwargs['name'], image=kwargs['image'], size=kwargs['size'])
[docs] def get_ips(self, name): vlist = self.provider.list_nodes() for vm in vlist: # [<Node: uuid=3793375fbc6577391486b0ae43b1d1fb303aa0c1, name=TBD-001, state=RUNNING, public_ips=['54.205.149.43'], private_ips=['10.164.162.29'], provider=Amazon EC2 ...>] if name == vm.uuid: return vm.public_ips[0] for vm in vlist: if name == vm.name: return vm.public_ips[0] return NULL