def set_cloud_conn(self, cloud, location): self.cloud_conn = None if cloud == 'amazon': if location == 'EC2_US_WEST': driver = get_driver(Provider.EC2_US_WEST) elif location == 'EC2_US_EAST': driver = get_driver(Provider.EC2_US_EAST) else: logger.error('failed to set a cloud driver') sys.exit(1) self.cloud_conn = driver(self.accessid, self.secretkey) else: logger.error('failed to set a cloud driver') sys.exit(1)
def main(argv): """Main OpenStack Demo When invoked from the command line, it will connect using NOVA_API_KEY NOVA_USERNAME NOVA_URL environment variables, and perform the following tasks: - List current nodes - List available images (up to 10) - List available sizes (up to 10) - Create a single instance - Destroy it """ OpenStackDriver = get_driver(Provider.OPENSTACK) import os try: open_stack = OpenStackDriver(os.environ['NOVA_API_KEY'], os.environ['NOVA_USERNAME'], os.environ['NOVA_URL']) print ">> Loading nodes..." nodes = open_stack.list_nodes() pprint(nodes) except NameError, e: print ">> Fatal Error: %s" % e print " (Hint: modify secrets.py.dist)" return 1
def get_lc(profile): conf = get_config(profile) driver = get_driver(getattr(Provider, conf.get('driver').upper())) conn = driver(conf.get('access_id'), conf.get('secret_key')) return conn
def main(argv): """Main EC2 Demo When invoked from the command line, it will connect using secrets.py (see secrets.py.dist for setup instructions), and perform the following tasks: - List current nodes - List available images (up to 10) - List available sizes (up to 10) """ # Load EC2 driver EC2Driver = get_driver(Provider.EC2_US_EAST) # Instantiate with Access ID and Secret Key # (see secrets.py.dist) try: ec2 = EC2Driver(secrets.EC2_ACCESS_ID, secrets.EC2_SECRET_KEY) print ">> Loading nodes..." nodes = ec2.list_nodes() pprint(nodes) except NameError, e: print ">> Fatal Error: %s" % e print " (Hint: modify secrets.py.dist)" return 1
def api_create(): if '' == request.form['name']: return _api_error(400, 'Invalid name.') if 'rax' != request.form['provider']: return _api_error(400, 'Provider must be "rax".') Driver = get_driver(Provider.RACKSPACE) try: conn = Driver(request.form['username'], request.form['apikey']) except InvalidCredsError: return _api_error(401, 'Invalid credentials.') # TODO What exceptions can this throw? try: node = conn.create_node(name=request.form['name'], image=Dummy(request.form['image']), size=Dummy(request.form['size'])) except Exception as e: if '400' == str(e)[0:3]: return _api_error(422, str(e)) raise e logger.info('200') return jsonify(ip=node.public_ip[0], password=node.extra['password'], provider=request.form['provider'], id=node.id, url=_url(request.form['provider'], node.id, node.public_ip[0]))
def start(self): driver = get_driver(Provider.RACKSPACE) self.conn = driver(settings.rackspace_account, settings.rackspace_api_key) name = self.imgname + '-' + str(os.getpid()) images = filter(lambda x: (x.name.find(self.imgname) > -1), self.conn.list_images()) sizes = self.conn.list_sizes() sizes.sort(cmp=lambda x, y: int(x.ram) < int(y.ram)) node = None if len(images) > 1: raise Exception("too many images with \"%s\" in the name" % self.imgname) if len(images) < 1: raise Exception("too few images with \"%s\" in the name" % self.imgname) image = images[0] self.node = self.conn.create_node(image=image, name=name, size=sizes[0]) # Note: the password is available only in the response to the # create_node request, not in subsequent list_nodes() # requests; so although the node objects we get back from # list_nodes() are usuable for most things, we must hold onto # the initial password. self.password = self.node.extra['password'] print self.node
def _driver(): hostout = api.env.get("hostout") hosttype = api.env.get("hosttype") # EC2_US_EAST Amazon AWS US N. Virgina # EC2_US_WEST Amazon AWS US N. California # EC2_EU_WEST Amazon AWS EU Ireland # RACKSPACE Rackspace Cloud Servers # SLICEHOST Slicehost.com # GOGRID GoGrid # VPSNET VPS.net # LINODE Linode.com # VCLOUD vmware vCloud # RIMUHOSTING RimuHosting.com # _VIRTUAL_BOX virtual box if hosttype == "_VIRTUAL_BOX": driver = VirtualBoxDriver else: if not hasattr(Provider, hosttype.upper()): return None driver = providers.get_driver(getattr(Provider, hosttype.upper())) spec = inspect.getargspec(driver.__init__) for a in spec.args[1:]: api.require(a) # "Th(is|ese) variable(s) (are|is) used for logging into your %(hosttype)s account" %locals()) passarg = lambda a: hostout.options.get(a, None) is not None and a not in ["host"] vargs = dict([(a, hostout.options.get(a)) for a in spec.args[1:] if passarg(a)]) args = [hostout.options.get(a) for a in spec.args[1:] if hostout.options.get(a, None) is not None] # print (args,vargs) driver = driver(**vargs) return driver
def __init__(self, provider): self.provider = provider self.flavors = None self.images = None # Extremely dumb code to map provider_types to libcloud providers # TODO replace with a proper function/statement or extending PROVIDER_META provider_type = None # overmind's dummy driver' if provider.provider_type == "Dummy": provider_type = "Dummy" # libclouds dummy driver elif provider.provider_type == "Dummy_libcloud": provider_type = types.Provider.DUMMY ## REAL DRIVERS ## elif provider.provider_type == "EC2_US_EAST": provider_type = types.Provider.EC2_US_EAST elif provider.provider_type == "EC2_EU_WEST": provider_type = types.Provider.EC2_EU_WEST elif provider.provider_type == "Rackspace": provider_type = types.Provider.RACKSPACE else: raise Exception("Unknown Provider type") # Get driver from libcloud if provider_type == "Dummy": self.conn = DummyDriver() else: Driver = get_driver(provider_type) if self.provider.secret_key == "": self.conn = Driver(self.provider.access_key) else: self.conn = Driver(self.provider.access_key, self.provider.secret_key)
def main(): # Run some tests dependency_check() # Make a new connection Driver = get_driver( getattr(Provider, provider_driver) ) conn = Driver(user, key) # Get a list of the available images and sizes images = conn.list_images() sizes = conn.list_sizes() # We'll use the distro and size from the config ini preferred_image = [image for image in images if config_distro in image.name] assert len(preferred_image) == 1, "We found more than one image for %s, will be assuming the first one" % config_distro preferred_size = [size for size in sizes if config_size in size.name] # The MySQL root password is hardcoded here for now, as it's in our Squeeze LAMP image. mysqlpass = "******" # Commands to run immediately after installation dispatch = [ SSHKeyDeployment(open(os.path.expanduser("~/.ssh/id_rsa.pub")).read()), ] msd = MultiStepDeployment(dispatch) # Create and deploy a new server now, and run the deployment steps defined above print "Provisioning server and running deployment processes" try: node = conn.deploy_node(name='aegir' + os.environ['BUILD_ID'], image=preferred_image[0], size=preferred_size[0], deploy=msd) except: e = sys.exc_info()[1] raise SystemError(e) print "Provisioning complete, you can ssh as root to %s" % node.public_ip[0] if node.extra.get('password'): print "The root user's password is %s" % node.extra.get('password') # Setting some parameters for fabric domain = socket.getfqdn(node.public_ip[0]) fabric.env.host_string = domain fabric.env.user = '******' try: fab_prepare_firewall() fab_prepare_user() fab_add_apt_sources() fab_install_aegir(domain, email, mysqlpass) run_provision_tests() fab_uninstall_aegir() except: print "===> Test failure" raise finally: print "===> Destroying this node" conn.destroy_node(node) return 0
def start(self): "Fire up a fresh EC2 instance." EC2 = get_driver(Provider.EC2) self.driver = EC2NodeDriver(settings.id, settings.key) image = NodeImage(self.ec2_ami, self.ec2_ami, EC2) size = NodeSize(self.ec2_mtype, self.ec2_mtype, None, None, None, None, EC2) self.node = self.driver.create_node(image=image, name=self.ec2_ami, size=size, keyname=self.ec2_sshkey, securitygroup=self.ec2_groups) print "Created node %s" % self.node.id
def get_client(self): """Returns a driver client object configured for this provider.""" Driver = get_driver(self.driver) d = Driver( # When these strings are unicode, they break. Convert exilicitly str(self.username), str(self.password), ) return d
def __init__(self): driver = get_driver(Provider.RACKSPACE) self.conn = driver(settings.rackspace_account, settings.rackspace_api_key) string='Fedora 11' images=filter(lambda x: (x.name.find(string) > -1), self.conn.list_images()) sizes=self.conn.list_sizes() sizes.sort(cmp=lambda x,y: int(x.ram)<int(y.ram)) node = None if len(images) != 1: raise "too many images with \"%s\" in the name" % string image = images[0] self.node = self.conn.create_node(image=image, name=string, size=sizes[0]) print self.node self.password = self.node.extra['password']
def connect(self, service): """ Connect to service and gather available instance images and sizes (if credentials are defined). """ #attempt connection try: Driver = get_driver(eval('Provider.' + service)) self.conn[service] = Driver(self.creds[service][0], **self.creds[service][1]) except: logger.error("Unable to connect to %s. (Perhaps wrong credentials?)" % service) return #gather info self.get_images(service) self.get_sizes(service) self.add_booted_nodes(service)
def __init__(self, provider): self.extra_param_name = provider.extra_param_name self.extra_param_value = provider.extra_param_value self.provider_type = provider.provider_type # Get libcloud provider type try: driver_type = types.Provider.__dict__[self.provider_type] # Get driver from libcloud Driver = get_driver(driver_type) logging.debug('selected "%s" libcloud driver' % self.provider_type) except KeyError: # Try to load provider from plugins Driver = plugins.get_driver(self.provider_type) logging.debug('selected "%s" plugin driver' % self.provider_type) except Exception, e: logging.critical( 'ProviderController can\'t find a driver for %s' % self.provider_type) raise Exception, "Unknown provider %s" % self.provider_type
def node_list(request): nodes = [] providers = [] accounts = Credential.objects.all() for account in accounts: provider = account.service_provider Driver = get_driver(provider) id = account.api_id secret = account.api_secret conn = Driver(account.api_id, account.api_secret) nodes[provider] = conn.list_nodes() providers.append(provider) return render_to_response( 'consoleHome/node_list.html', { 'nodes': nodes, 'providers': providers, } )
def tryRackSpace(): driver=get_driver(Provider.RACKSPACE) conn = driver('tengen', '7d67202d37af58a7adb32cb1626452c4') string='Fedora 11' images=filter(lambda x: (x.name.find(string) > -1), conn.list_images()) sizes=conn.list_sizes() sizes.sort(cmp=lambda x,y: int(x.ram)<int(y.ram)) node = None if len(images) != 1: raise "too many images with \"%s\" in the name" % string try: image = images[0] node = conn.create_node(image=image, name=string, size=sizes[0]) print node print node.extras['password'] while node.state == NodeState.PENDING: time.sleep(10) finally: if node: node.destroy()
def _driver(): hostout = api.env.get('hostout') hosttype = api.env.get('hosttype') #EC2_US_EAST Amazon AWS US N. Virgina #EC2_US_WEST Amazon AWS US N. California #EC2_EU_WEST Amazon AWS EU Ireland #RACKSPACE Rackspace Cloud Servers #SLICEHOST Slicehost.com #GOGRID GoGrid #VPSNET VPS.net #LINODE Linode.com #VCLOUD vmware vCloud #RIMUHOSTING RimuHosting.com # _VIRTUAL_BOX virtual box if hosttype == "_VIRTUAL_BOX": driver = VirtualBoxDriver; else: if not hasattr(Provider, hosttype.upper()): print "No hosttype called %s " % hosttype hosts = [k.lower() for k,v in vars(Provider).items() if type(v) == type(1)] print "Valid hostypes are %s" % ', '.join(hosts) return None driver = providers.get_driver( getattr(Provider, hosttype.upper()) ) spec = inspect.getargspec(driver.__init__) for a in spec.args[1:]: api.require(a) #"Th(is|ese) variable(s) (are|is) used for logging into your %(hosttype)s account" %locals()) passarg = lambda a: hostout.options.get(a,None) is not None and a not in ['host'] vargs = dict([(a,hostout.options.get(a)) for a in spec.args[1:] if passarg(a)]) args = [hostout.options.get(a) for a in spec.args[1:] if hostout.options.get(a,None) is not None ] #print (args,vargs) driver = driver(**vargs) if driver is None: print "Invalid args to driver" return driver
def start(self): driver = get_driver(Provider.RACKSPACE) self.conn = driver(settings.rackspace_account, settings.rackspace_api_key) name=self.imgname+'-'+str(os.getpid()) images=filter(lambda x: (x.name.find(self.imgname) > -1), self.conn.list_images()) sizes=self.conn.list_sizes() sizes.sort(cmp=lambda x,y: int(x.ram)<int(y.ram)) node = None if len(images) > 1: raise Exception("too many images with \"%s\" in the name" % self.imgname) if len(images) < 1: raise Exception("too few images with \"%s\" in the name" % self.imgname) image = images[0] self.node = self.conn.create_node(image=image, name=name, size=sizes[0]) # Note: the password is available only in the response to the # create_node request, not in subsequent list_nodes() # requests; so although the node objects we get back from # list_nodes() are usuable for most things, we must hold onto # the initial password. self.password = self.node.extra['password'] print self.node
def get_ec2(**kwargs): """An easy way to play with the EC2 Driver in Interactive Mode # Load credentials from secrets.py >>> from ec2demo import get_ec2 >>> ec2 = get_ec2() # Or, provide credentials >>> from ec2demo import get_ec2 >>> ec2 = get_ec2(access_id='xxx', secret_key='yyy') # Do things >>> ec2.load_nodes() >>> images = ec2.load_images() >>> sizes = ec2.load_sizes() """ access_id = kwargs.get('access_id', secrets.EC2_ACCESS_ID) secret_key = kwargs.get('secret_key', secrets.EC2_SECRET_KEY) EC2Driver = get_driver(Provider.EC2_US_EAST) return EC2Driver(access_id, secret_key)
def get_demo_driver(provider_name='RACKSPACE', *args, **kwargs): """An easy way to play with a driver interactively. # Load credentials from secrets.py: >>> from compute_demo import get_demo_driver >>> driver = get_demo_driver('RACKSPACE') # Or, provide credentials: >>> from compute_demo import get_demo_driver >>> driver = get_demo_driver('RACKSPACE', 'username', 'api_key') # Note that these parameters vary by driver ^^^ # Do things like the demo: >>> driver.load_nodes() >>> images = driver.load_images() >>> sizes = driver.load_sizes() # And maybe do more than that: >>> node = driver.create_node( name='my_first_node', image=images[0], size=sizes[0], ) >>> node.destroy() """ provider_name = provider_name.upper() DriverClass = get_driver(getattr(Provider, provider_name)) if not args: args = getattr(secrets, provider_name + '_PARAMS', ()) if not kwargs: kwargs = getattr(secrets, provider_name + '_KEYWORD_PARAMS', {}) try: return DriverClass(*args, **kwargs) except InvalidCredsError: raise InvalidCredsError( 'valid values should be put in secrets.py')
def get_demo_driver(provider_name='RACKSPACE', *args, **kwargs): """An easy way to play with a driver interactively. # Load credentials from secrets.py: >>> from compute_demo import get_demo_driver >>> driver = get_demo_driver('RACKSPACE') # Or, provide credentials: >>> from compute_demo import get_demo_driver >>> driver = get_demo_driver('RACKSPACE', 'username', 'api_key') # Note that these parameters vary by driver ^^^ # Do things like the demo: >>> driver.load_nodes() >>> images = driver.load_images() >>> sizes = driver.load_sizes() # And maybe do more than that: >>> node = driver.create_node( ... name='my_first_node', ... image=images[0], ... size=sizes[0], ... ) >>> node.destroy() """ provider_name = provider_name.upper() DriverClass = get_driver(getattr(Provider, provider_name)) if not args: args = getattr(secrets, provider_name + '_PARAMS', ()) if not kwargs: kwargs = getattr(secrets, provider_name + '_KEYWORD_PARAMS', {}) try: return DriverClass(*args, **kwargs) except InvalidCredsError: raise InvalidCredsError('valid values should be put in secrets.py')
def api_destroy(): if 'rax' != request.form['provider']: return _api_error(400, 'Provider must be "rax".') if _mac(request.form['provider'], request.form['id'], request.form['ip']) != request.form['mac']: return _api_error(403, 'Signature mismatch.') Driver = get_driver(Provider.RACKSPACE) try: conn = Driver(request.form['username'], request.form['apikey']) except InvalidCredsError: return _api_error(401, 'Invalid credentials.') try: conn.destroy_node(Dummy(request.form['id'])) except Exception as e: if '404' == str(e)[0:3]: return _api_error(404, 'Invalid id.') raise e logger.info('204') return Response(status=204)
from libcloud.base import NodeImage, NodeSize, NodeLocation from libcloud.types import Provider from libcloud.providers import get_driver from libcloud.deployment import MultiStepDeployment, ScriptDeployment, SSHKeyDeployment import libcloud import os, sys import getopt import time import vmdatabase CLOUD_SERVERS_DRIVER = os.environ.get('CLOUD_SERVERS_DRIVER','rackspace') CLOUD_SERVERS_USERNAME = os.environ['CLOUD_SERVERS_USERNAME'] CLOUD_SERVERS_API_KEY = os.environ['CLOUD_SERVERS_API_KEY'] CHANGE = os.environ['GERRIT_CHANGE_NUMBER'] PATCH = os.environ['GERRIT_PATCHSET_NUMBER'] BUILD = os.environ['BUILD_NUMBER'] db = vmdatabase.VMDatabase() machine = db.getMachine(CHANGE, PATCH, BUILD) node_name = machine['name'] if CLOUD_SERVERS_DRIVER == 'rackspace': Driver = get_driver(Provider.RACKSPACE) conn = Driver(CLOUD_SERVERS_USERNAME, CLOUD_SERVERS_API_KEY) node = [n for n in conn.list_nodes() if n.id==str(machine['id'])][0] node.destroy() db.delMachine(machine['id'])
import sys, os, subprocess, shlex, eventlet from eventlet.green import socket from libcloud.types import Provider from libcloud.providers import get_driver from libcloud.deployment import MultiStepDeployment, ScriptDeployment, SSHKeyDeployment from settings import USER, KEY, DRIVER, IMAGE, SIZE, SSH_PUB ### Setup LibCloud ### Driver = get_driver(getattr(Provider, DRIVER)) conn = Driver(USER, KEY) image = conn.list_images()[IMAGE] size = conn.list_sizes()[SIZE] ### Ready Deployment Scripts ### ssh_pub = open(os.path.expanduser(SSH_PUB)).read() sd = SSHKeyDeployment(ssh_pub) server_script = [ "groupadd minister 2>null", "useradd -g minister minister 2>null", "mkdir /www 2>null", "cd /www", "pip install -E env -e git+git://github.com/DeadWisdom/Minister.git#egg=minister", "chown -R minister:minister /www", "env/bin/minister . --start", ]
from libcloud.base import Node, NodeImage, NodeSize, NodeState # libcloud's SSH client seems to be one of those pointless wrappers # that (at the moment) both doesn't add anything to the thing it wraps # (Paramiko) and also fails to expose the underlying thing's features. # What's wrong with people? #from libcloud.ssh import SSHClient import time import sys import settings import subprocess import os import socket EC2 = get_driver(Provider.EC2) EC2Driver=EC2NodeDriver(settings.id, settings.key) def tryEC2(): image=NodeImage('ami-bf07ead6', 'ubuntu 10.4', EC2) size=NodeSize('m1.large', 'large', None, None, None, None, EC2) node = None try: node = EC2Driver.create_node(image=image, name="ubuntu-test", size=size, keyname="kp1", securitygroup=['default', 'dist-slave', 'buildbot-slave']) print node print node.id while node.state == NodeState.PENDING: time.sleep(3) finally:
def main(argv=None): if argv is None: argv = sys.argv try: try: opts, args = getopt.getopt( argv[1:], "h", ["help", "aegir_version=", "drush_version="]) except getopt.error, msg: raise Usage(msg) # process options aegir_version = None drush_version = None for o, a in opts: if o in ("-h", "--help"): print __doc__ return 0 if o in ("--aegir_version"): aegir_version = a if o in ("--drush_version"): drush_version = a # Check the command line options if aegir_version is None: raise Usage, "the --aegir_version option must be specified" if drush_version is None: raise Usage, "the --drush_version option must be specified" # Now we can get on with the testing # Run some tests dependency_check() # Make a new connection Driver = get_driver(getattr(Provider, provider_driver)) conn = Driver(user, key) # Get a list of the available images and sizes images = conn.list_images() sizes = conn.list_sizes() # We'll use the distro and size from the config ini preferred_image = [ image for image in images if config_distro in image.name ] assert len( preferred_image ) == 1, "We found more than one image for %s, will be assuming the first one" % config_distro preferred_size = [size for size in sizes if config_size in size.name] # The MySQL root password is hardcoded here for now, as it's in our Squeeze LAMP image. mysqlpass = "******" # Commands to run immediately after installation dispatch = [ SSHKeyDeployment( open(os.path.expanduser("~/.ssh/id_rsa.pub")).read()), ] msd = MultiStepDeployment(dispatch) # Create and deploy a new server now, and run the deployment steps defined above print "Provisioning server and running deployment processes" try: node = conn.deploy_node(name='aegir' + os.environ['BUILD_ID'], image=preferred_image[0], size=preferred_size[0], deploy=msd) except: e = sys.exc_info()[1] raise SystemError(e) print "Provisioning complete, you can ssh as root to %s" % node.public_ip[ 0] if node.extra.get('password'): print "The root user's password is %s" % node.extra.get('password') # Setting some parameters for fabric domain = socket.getfqdn(node.public_ip[0]) fabric.env.host_string = domain fabric.env.user = '******' try: fab_prepare_firewall() fab_prepare_apache() fab_prepare_user() fab_fetch_drush(drush_version) fab_fetch_provision('git', aegir_version) fab_hostmaster_install(domain, email, mysqlpass) run_provision_tests() except: print "===> Test failure" raise finally: print "===> Destroying this node" conn.destroy_node(node) return 0
def main(argv=None): if argv is None: argv = sys.argv try: try: opts, args = getopt.getopt(argv[1:], "h", ["help", "aegir_version=", "drush_version=", "upgrade_version=", "test_type="]) except getopt.error, msg: raise Usage(msg) # process options aegir_version = None drush_version = None upgrade_version = None test_type = 'jenkins' for o, a in opts: if o in ("-h", "--help"): print __doc__ return 0 if o in ("--aegir_version"): aegir_version = a if o in ("--drush_version"): drush_version = a if o in ("--upgrade_version"): upgrade_version = a if o in ("--test_type"): test_type = a # Check the command line options if aegir_version is None: raise Usage, "the --aegir_version option must be specified" if drush_version is None: raise Usage, "the --drush_version option must be specified" if upgrade_version is None: raise Usage, "the --upgrade_version option must be specified" # Run some tests dependency_check() # Make a new connection Driver = get_driver( getattr(Provider, provider_driver) ) conn = Driver(user, key) # Get a list of the available images and sizes images = conn.list_images() sizes = conn.list_sizes() # We'll use the distro and size from the config ini preferred_image = [image for image in images if config_distro in image.name] assert len(preferred_image) == 1, "We found more than one image for %s, will be assuming the first one" % config_distro preferred_size = [size for size in sizes if config_size in size.name] # The MySQL root password is hardcoded here for now, as it's in our Squeeze LAMP image. mysqlpass = "******" # Commands to run immediately after installation dispatch = [ SSHKeyDeployment(open(os.path.expanduser("~/.ssh/id_rsa.pub")).read()), ] msd = MultiStepDeployment(dispatch) # Create and deploy a new server now, and run the deployment steps defined above print "Provisioning server and running deployment processes" try: node = conn.deploy_node(name='aegir' + os.environ['BUILD_ID'], image=preferred_image[0], size=preferred_size[0], deploy=msd) except: e = sys.exc_info()[1] raise SystemError(e) print "Provisioning complete, you can ssh as root to %s" % node.public_ip[0] if node.extra.get('password'): print "The root user's password is %s" % node.extra.get('password') # Setting some parameters for fabric domain = socket.getfqdn(node.public_ip[0]) fabric.env.host_string = domain fabric.env.user = '******' try: fab_prepare_firewall() fab_prepare_apache() fab_prepare_user() fab_fetch_drush(drush_version) fab_fetch_provision('package', aegir_version) fab_hostmaster_install(domain, email, mysqlpass) fab_fetch_upgrade_script(upgrade_version) fab_run_upgrade_script(domain) if test_type == 'jenkins': run_platform_tests() run_site_tests() else: run_provision_tests() except: print "===> Test failure" raise finally: print "===> Destroying this node" conn.destroy_node(node) return 0
# 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.types import Provider from libcloud.providers import get_driver EC2 = get_driver(Provider.EC2_US_EAST) Slicehost = get_driver(Provider.SLICEHOST) Rackspace = get_driver(Provider.RACKSPACE) drivers = [ EC2('access key id', 'secret key'), Slicehost('api key'), Rackspace('username', 'api key') ] nodes = [ driver.list_nodes() for driver in drivers ] print nodes # [ <Node: provider=Amazon, status=RUNNING, name=bob, ip=1.2.3.4.5>, # <Node: provider=Slicehost, status=REBOOT, name=korine, ip=6.7.8.9.10>, ... ] # grab the node named "test" node = filter(lambda x: x.name == 'test', nodes)[0]
def get_libcloud_driver(): return get_driver(Provider.RACKSPACE)(cassconf.USERNAME, cassconf.SECRET)
def __init__(self, svc, key, secret, iaasurl, iaas): #cloudinitd.log(log, logging.INFO, "loading up a lobcloud driver %s" % (iaas)) self._svc = svc self._provider_lookup = { "dummy" : Provider.DUMMY, "ec2" : Provider.EC2, "ec2_us_east": Provider.EC2_US_EAST, "ec2_eu": Provider.EC2_EU, "ec2_eu_west": Provider.EC2_EU_WEST, "rackspace": Provider.RACKSPACE, "slicehost": Provider.SLICEHOST, "gogrid": Provider.GOGRID, "vpsnet": Provider.VPSNET, "linode": Provider.LINODE, "vcloud": Provider.VCLOUD, "rmuhosting": Provider.RIMUHOSTING, "ec2_us_west": Provider.EC2_US_WEST, "voxel": Provider.VOXEL, "softlayer": Provider.SOFTLAYER, "eucalyptus": Provider.EUCALYPTUS, "ecp": Provider.ECP, "ibm": Provider.IBM, "opennebula": Provider.OPENNEBULA, "dreamhost": Provider.DREAMHOST, "elastichosts": Provider.ELASTICHOSTS, "elastichosts_uk1": Provider.ELASTICHOSTS_UK1, "elastichosts_uk2": Provider.ELASTICHOSTS_UK2, "elastichosts_us1": Provider.ELASTICHOSTS_US1, "ec2_ap_southeast": Provider.EC2_AP_SOUTHEAST, "rackspace_uk": Provider.RACKSPACE_UK, "brightbox": Provider.BRIGHTBOX, "cloudsigma": Provider.CLOUDSIGMA, "nimbus": Provider.NIMBUS, } if not iaas: raise ConfigException("the iaas type must be set") self._iaas = iaas.lower().strip() self._iaas = iaas.replace("libcloud-", "") if self._iaas.isdigit(): provider = int(self._iaas) else: if self._iaas in self._provider_lookup: provider = self._provider_lookup[self._iaas] else: raise ConfigException("%s is not a known libcloud driver" % (self._iaas)) if provider == Provider.NIMBUS and not iaasurl: raise ConfigException("You must provide an IAAS URL to the Nimbus libcloud driver") self._Driver = get_driver(provider) if iaasurl is not None: url = urlparse(iaasurl) host = url.hostname port = url.port self._con = self._Driver(key, secret, host=host, port=port) else: self._con = self._Driver(key, secret)
from libcloud.types import Provider from libcloud.providers import get_driver import paramiko import StringIO driver_list = { 'DUMMY': get_driver(Provider.DUMMY), 'EC2_US_EAST': get_driver(Provider.EC2_US_EAST), 'EC2_US_WEST': get_driver(Provider.EC2_US_WEST), 'EC2_EU_WEST': get_driver(Provider.EC2_EU_WEST), 'RACKSPACE': get_driver(Provider.RACKSPACE), 'SLICEHOST': get_driver(Provider.SLICEHOST), 'GOGRID': get_driver(Provider.GOGRID), 'VPSNET': get_driver(Provider.VPSNET), 'LINODE': get_driver(Provider.LINODE), 'VCLOUD': get_driver(Provider.VCLOUD), 'RIMUHOSTING': get_driver(Provider.RIMUHOSTING), 'ECP': get_driver(Provider.ECP), 'IBM': get_driver(Provider.IBM), 'OPENNEBULA': get_driver(Provider.OPENNEBULA), 'DREAMHOST': get_driver(Provider.DREAMHOST), } def getDriverInstance(driverName, key, secret=None, secure=True, host=None, port=None): return driver_list.get(driverName)(key, secret, secure, host, port) def getSSHConnection(driver, hostname, private_key): client = paramiko.SSHClient() client.load_system_host_keys() client.set_missing_host_key_policy(paramiko.WarningPolicy()) #TODO if exception : try DSSKey
def main(): # Run some tests dependency_check() # Make a new connection Driver = get_driver( getattr(Provider, provider_driver) ) conn = Driver(user, key) # Get a list of the available images and sizes images = conn.list_images() sizes = conn.list_sizes() # We'll use the distro and size from the config ini preferred_image = [image for image in images if config_distro in image.name] assert len(preferred_image) == 1, "We found more than one image for %s, will be assuming the first one" % config_distro preferred_size = [size for size in sizes if config_size in size.name] # The MySQL root password is hardcoded here for now, as it's in our Squeeze LAMP image. mysqlpass = "******" # Commands to run immediately after installation dispatch = [ SSHKeyDeployment(open(os.path.expanduser("~/.ssh/id_rsa.pub")).read()), ] msd = MultiStepDeployment(dispatch) # Create and deploy a new server now, and run the deployment steps defined above print "Provisioning server and running deployment processes" try: node = conn.deploy_node(name='aegir' + os.environ['BUILD_ID'], image=preferred_image[0], size=preferred_size[0], deploy=msd) except: e = sys.exc_info()[1] raise SystemError(e) print "Provisioning complete, you can ssh as root to %s" % node.public_ip[0] if node.extra.get('password'): print "The root user's password is %s" % node.extra.get('password') # Setting some parameters for fabric domain = socket.getfqdn(node.public_ip[0]) fabric.env.host_string = domain fabric.env.user = '******' try: fab_prepare_firewall() fab_prepare_user() fab_add_apt_sources('stable') fab_install_aegir(domain, email, mysqlpass) run_provision_tests() fab_deb_upgrade_aegir('stable', 'testing') run_provision_tests() fab_uninstall_aegir() except: print "===> Test failure" raise finally: print "===> Destroying this node" conn.destroy_node(node) return 0
node_name = "%s.slave.openstack.org" % host_name files={} for key in ("slave_private_key", "slave_gpg_key", "slave_tarmac_key"): if os.path.exists(key): with open(key, "r") as private_key: files["/root/%s" % key] = private_key.read() node_size = '3' image_name = 'Ubuntu 11.04' if CLOUD_SERVERS_DRIVER == 'rackspace': for (name, value) in option_pairs: if name == "--image": image_name = value Driver = get_driver(Provider.RACKSPACE) conn = Driver(CLOUD_SERVERS_USERNAME, CLOUD_SERVERS_API_KEY) images = conn.list_images() size = [sz for sz in conn.list_sizes() if sz.id == node_size][0] image = [img for img in conn.list_images() if img.name == image_name][0] elif CLOUD_SERVERS_DRIVER == 'eucalyptus': node_type = 'ami-0000037e' node_size = 'standard.small' Driver = get_driver(Provider.EUCALYPTUS) conn = Driver(CLOUD_SERVERS_USERNAME, CLOUD_SERVERS_API_KEY, host=CLOUD_SERVERS_HOST, path=CLOUD_SERVERS_PATH) image = NodeImage(id=node_type, name="", driver="") size = NodeSize(id=node_size, name="", ram=None, disk=None, bandwidth=None, price=None, driver="")
# this work for additional information regarding copyright ownership. # libcloud.org 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.types import Provider from libcloud.providers import get_driver GoGrid = get_driver(Provider.GOGRID) driver = GoGrid('key','secret') nodes = driver.list_nodes() images = driver.list_images() sizes = driver.list_sizes() ip = driver.get_first_ip() print images print nodes print sizes print ip new_node = driver.create_node('newTestNode',images[0],sizes[0])