コード例 #1
0
ファイル: main.py プロジェクト: anotherjesse/cloudenvy
def envy_dotfiles(args):
    """Upload user dotfiles from local machine."""
    config = _get_config(args)

    # if user defines -n in cli, append name to project name.

    if args.name:
        config['project_config']['name'] = '%s-%s' % (
            config['project_config']['name'], args.name)

    envy = Envy(config)

    if envy.ip():
        host_string = '%s@%s' % (envy.remote_user, envy.ip())

        temp_tar = tempfile.NamedTemporaryFile(delete=True)

        with fabric.api.settings(host_string=host_string):
            dotfiles = ['.vimrc', '.gitconfig', '.gitignore', '.screenrc']

            with tarfile.open(temp_tar.name, 'w') as archive:
                for dotfile in dotfiles:
                    path = os.path.expanduser('~/%s' % dotfile)
                    if os.path.exists(path):
                        tarinfo = tarfile.TarInfo(name=dotfile)
                        tarinfo.mtime = time.time()
                        tarinfo.mode = 0755
                        archive.addfile(tarinfo, fileobj=open(path))

            fabric.operations.put(temp_tar, '~/dotfiles.tar')
            fabric.operations.run('tar -xvf ~/dotfiles.tar')
    else:
        logging.error('Could not find IP to upload file to.')
コード例 #2
0
ファイル: main.py プロジェクト: anotherjesse/cloudenvy
def envy_up(args):
    """Create a server and show its IP."""
    config = _get_config(args)

    # if user defines -n in cli, append name to project name.
    if args.name:
        config['project_config']['name'] = '%s-%s' % (
            config['project_config']['name'], args.name)

    envy = Envy(config)
    if not envy.server():
        logging.info('Building environment.')
        try:
            envy.build_server()
        except exceptions.ImageNotFound:
            logging.error('Could not find image.')
            return
        except exceptions.NoIPsAvailable:
            logging.error('Could not find free IP.')
            return
    if envy.auto_provision:
        envy_provision(args)
    if envy.ip():
        print envy.ip()
    else:
        print 'Environment has no IP.'
コード例 #3
0
ファイル: main.py プロジェクト: anotherjesse/cloudenvy
def envy_list(args):
    """List all ENVys in context of your current project"""
    config = _get_config(args)
    envy = Envy(config)
    foo = envy.list_servers()

    envys = []
    for server in foo:
        if len(server.name.split(envy.name)) > 1:
            envys.append(str(server.name))
    print "ENVys for your project: %s" % str(envys)
コード例 #4
0
ファイル: main.py プロジェクト: anotherjesse/cloudenvy
def envy_snapshot(args, name=None):
    """Create a snapshot of a running server."""
    config = _get_config(args)

    # if user defines -n in cli, append name to project name.
    if args.name:
        config['project_config']['name'] = '%s-%s' % (
            config['project_config']['name'], args.name)

    envy = Envy(config)
    envy.snapshot(name or ('%s-snapshot' % envy.name))
コード例 #5
0
ファイル: main.py プロジェクト: anotherjesse/cloudenvy
def envy_provision(args):
    """Manually provision a remote environment using a userdata script."""
    config = _get_config(args)

    # if user defines -n in cli, append name to project name.
    if args.name:
        config['project_config']['name'] = '%s-%s' % (
            config['project_config']['name'], args.name)

    envy = Envy(config)
    logging.info('Provisioning %s environment...' %
                 config['project_config']['name'])

    if args.remote_user:
        config['project_config']['remote_user'] = args.remote_user
    if args.userdata:
        config['project_config']['provision_script_path'] = args.userdata

    remote_user = config['project_config']['remote_user']
    try:
        provision_script_path = config['project_config'][
            'provision_script_path']
    except KeyError:
        raise SystemExit('Please specify which provision script should be used'
                         ' by passing in `-u` to the provision command, or by '
                         'defining `provision_script_path` in ./Envyfile')
    remote_provision_script_path = '~/provision_script'

    logging.info('Using userdata from: %s', provision_script_path)

    with fabric.api.settings(host_string=envy.ip(),
                             user=remote_user,
                             forward_agent=True,
                             disable_known_hosts=True):
        for i in range(12):
            try:
                fabric.operations.put(provision_script_path,
                                      remote_provision_script_path,
                                      mode=0755)
                break
            except fabric.exceptions.NetworkError:
                logging.error("Unable to upload file. Your cloud instance is "
                              "probably not yet built. Trying again in 10 "
                              "seconds.")
                time.sleep(10)

        fabric.operations.run(remote_provision_script_path)
    logging.info('...done.')
コード例 #6
0
ファイル: main.py プロジェクト: anotherjesse/cloudenvy
def envy_ssh(args):
    """SSH into the current server."""
    config = _get_config(args)

    # if user defines -n in cli, append name to project name.
    if args.name:
        config['project_config']['name'] = '%s-%s' % (
            config['project_config']['name'], args.name)

    envy = Envy(config)
    remote_user = config['project_config']['remote_user']
    if envy.ip():
        disable_known_hosts = ('-o UserKnownHostsFile=/dev/null'
                               ' -o StrictHostKeyChecking=no')
        fabric.operations.local('ssh %s %s@%s' %
                                (disable_known_hosts, remote_user, envy.ip()))
    else:
        logging.error('Could not find IP.')
コード例 #7
0
ファイル: main.py プロジェクト: anotherjesse/cloudenvy
def envy_ip(args):
    """Show the IP of the current server."""
    config = _get_config(args)

    # if user defines -n in cli, append name to project name.
    if args.name:
        config['project_config']['name'] = '%s-%s' % (
            config['project_config']['name'], args.name)

    envy = Envy(config)

    if not envy.server():
        logging.error('Environment has not been created.\n'
                      'Try running `envy up` first?')
    elif envy.ip():
        print envy.ip()
    else:
        logging.error('Could not find IP.')
コード例 #8
0
ファイル: main.py プロジェクト: anotherjesse/cloudenvy
def envy_destroy(args):
    """Power-off and destroy the current server."""
    config = _get_config(args)

    # if user defines -n in cli, append name to project name.
    if args.name:
        config['project_config']['name'] = '%s-%s' % (
            config['project_config']['name'], args.name)

    envy = Envy(config)
    logging.info('Triggering environment deletion.')
    if envy.find_server():
        envy.delete_server()
        while envy.find_server():
            logging.info('...waiting for server to be destroyed')
            time.sleep(1)
        logging.info('...done.')
    else:
        logging.error('No environment exists.')
コード例 #9
0
ファイル: main.py プロジェクト: anotherjesse/cloudenvy
def envy_scp(args):
    """SCP Files to your ENVy"""
    config = _get_config(args)

    # if user defines -n in cli, append name to project name.
    if args.name:
        config['project_config']['name'] = '%s-%s' % (
            config['project_config']['name'], args.name)

    envy = Envy(config)

    if envy.ip():
        remote_user = '******'
        host_string = '%s@%s' % (remote_user, envy.ip())

        with fabric.api.settings(host_string=host_string):
            fabric.operations.put(args.source, args.target)
    else:
        logging.error('Could not find IP to upload file to.')