예제 #1
0
 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)
예제 #2
0
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
예제 #3
0
파일: lc.py 프로젝트: CityHawk/lc-tools
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
예제 #4
0
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
예제 #5
0
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]))
예제 #6
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
예제 #7
0
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
예제 #8
0
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
예제 #9
0
    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
예제 #11
0
파일: makedist.py 프로젝트: anagri/mongo
 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
예제 #12
0
파일: models.py 프로젝트: bmbouter/Opus
    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
예제 #13
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
예제 #14
0
 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']
예제 #15
0
 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']
예제 #16
0
 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)
예제 #17
0
 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
예제 #18
0
파일: views.py 프로젝트: mschenck/cloudy
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,
    } )
예제 #19
0
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()
예제 #20
0
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
예제 #21
0
파일: makedist.py 프로젝트: anagri/mongo
 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
예제 #22
0
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)
예제 #23
0
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')
예제 #25
0
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')
예제 #26
0
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)
예제 #27
0
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'])
예제 #28
0
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",
]
예제 #29
0
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
예제 #31
0
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=", "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
예제 #33
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]
예제 #34
0
파일: run.py 프로젝트: pquerna/ccb
def get_libcloud_driver():
  return get_driver(Provider.RACKSPACE)(cassconf.USERNAME, cassconf.SECRET)
예제 #35
0
    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)
예제 #36
0
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
예제 #37
0
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
예제 #38
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="")
예제 #39
0
# 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])