コード例 #1
0
def run(root, *args, **kwargs):

    name = args[0].strip() if args else None
    if name:
        if name in root.project['mounting']:
            root.project.config['mounting'] = name
            logger.success(u'Mounting <b>%s</b> selected.' %
                           root.mounting.name)
        else:
            logger.error(u'Mounting <b>%s</b> unknow.' % name)
            exit(1)

    else:

        def select_mounting_name():
            # logger.ask('0) no mounting (localhost)')
            logger.ask(
                u'Please select the <b>{}</b> mounting to work on'.format(
                    root.project.name))
            for i, m in enumerate(root.project['mounting']):
                logger.choice(u'<b>{}</b>] {}'.format(i + 1, m.name))
            mi = six.moves.input(': ')
            try:
                if mi == '0':
                    raise Exception
                return root.project['mounting'][int(mi) - 1].name
            except Exception as e:
                logger.error(u'<b>%s</b> is not a valid choice' % mi)
                return select_mounting_name()

        root.project.config['mounting'] = select_mounting_name()
        logger.success(u'Mounting <b>%s</b> selected.' % root.mounting.name)
コード例 #2
0
def run(root, *args, **kwargs):

    name = args[0].strip() if args else None
    if name:
        args = list(args)
        args.pop(0)
        mounting = root.project['mounting'].get(name)
        if mounting:
            logger.success(u'Prepare mounting <b>%s</b> to be created.' %
                           mounting.name)
        else:
            logger.error(u'Mounting <b>%s</b> unknow.' % name)
            exit(1)
    else:
        mounting = root.mounting

    if not mounting.is_localhost:

        logger.cmd('Create machine <b>%s</b>' %
                   (mounting.docker_machine_name, ))
        logger.cmd('With driver <b>%s</b>' % (mounting.get_machine_driver(), ))
        cmd = root.bash(
            mounting.docker_machine_bin,
            'rm',
            mounting.docker_machine_name,  #root.compose.name,
            *args,
            is_system=True)
    else:
        logger.warning(mounting.LOCAL_MACHINE_WARNING)
コード例 #3
0
def run(root, *args, **kwargs):

    root.run_command('machine:start', internal=True)

    mounting = root.mounting
    hosts = mounting.get_machine_hosts()
    if hosts:
        
        for host in hosts:

            ip_address = '0.0.0.0'
            logger.cmd('Set host <b>%s</b> mapped at %s in /etc/hosts.' % (host, ip_address))
            cmd = root.bash(
                "docker", 
                "run", 
                "-t", 
                "-i" ,
                "-v", "%s/managehosts:/bin/managehosts" % root.bin_root,
                "-v", "/etc/hosts:/etc/host_hosts",
                "-v", "/etc/hosts.bak:/etc/host_hosts.bak",
                "busybox",
                "sh", 
                "/bin/managehosts" ,
                "add %s %s %s" % (host, ip_address, root.project.name),
                mounting=mounting,
                is_system=True
            )

            if cmd.is_success:
                logger.success('Host <b>%s</b> has been set on %s.' % (host, mounting, ))
コード例 #4
0
def run(root, *args, **kwargs):

    cmd = root.bash(root.compose.bin,
                    'restart',
                    *args,
                    compose=root.compose,
                    is_system=True)
    if cmd.is_success:
        logger.success('<b>%s</b> is restarted.' % (root.compose.name, ))
コード例 #5
0
def run(root, *args, **kwargs):

    logger.cmd('Down project <b>%s</b>' % (root.compose.name, ))
    cmd = root.bash(root.compose.bin,
                    'down',
                    '--remove-orphans',
                    compose=root.compose,
                    is_system=True)
    if cmd.is_success:
        logger.success('<b>%s</b> is down.' % (root.compose.name, ))
コード例 #6
0
def run(root, *args, **kwargs):

    root.run_command('machine:start', internal=True)
    cmd = root.bash(root.compose.bin,
                    'start',
                    *args,
                    compose=root.compose,
                    is_system=True)
    if cmd.is_success:
        logger.success('<b>%s</b> is started.' % (root.compose.name, ))
コード例 #7
0
def run(root, *args, **kwargs):

    logger.cmd('Build <b>%s</b>' % (root.project.compose.name, ))
    root.run_command('machine:start', internal=True)

    cmd = root.bash(root.project.compose.bin,
                    'build',
                    *args,
                    compose=root.compose,
                    is_system=True)
    if cmd.is_success:
        logger.success('<b>%s</b> built.' % (root.project.compose.name, ))
コード例 #8
0
def run(root, *args, **kwargs):

    logger.cmd('Rebuild <b>%s</b>' % (root.project.compose.name, ))
    root.project.machine.start()
    cmd = root.bash(root.project.compose.bin,
                    '--no-cache',
                    'build',
                    *args,
                    compose=root.compose,
                    is_system=True)
    if cmd.is_success:
        logger.success('<b>%s</b> rebuilt.' % (root.project.compose.name, ))
コード例 #9
0
def run(root, *args, **kwargs):

    mounting = root.mounting
    if mounting.is_localhost:
        logger.warning(mounting.LOCAL_MACHINE_WARNING)
    else:
        cmd = root.bash(mounting.docker_machine_bin,
                        'ssh',
                        mounting.docker_machine_name,
                        *args,
                        is_system=True)
        if cmd.is_success:
            logger.success('')
コード例 #10
0
def run(root, *args, **kwargs):


    def select_machine_name():
        # logger.ask('0) no machine (localhost)')
        logger.ask(u'Please select the <b>{}</b> machine to work on'.format(root.project.name))
        for i, m in enumerate(root.project['machines']):
            logger.choice(u'<b>{}</b>] {}'.format(i+1, m.name))
        mi = six.moves.input(': ')
        try:
            if mi == '0':
                raise Exception
            return root.project['machines'][int(mi)-1].name
        except Exception as e:
            logger.error(u'<b>%s</b> is not a valid choice' % mi)
            return select_machine_name()

    root.project.config['machine'] = select_machine_name()
    logger.success(u'Machine <b>%s</b> selected.' % root.machine.name)
コード例 #11
0
def run(root, *args, **kwargs):

    root.run_command('machine:start', internal=True)

    if '--set-hosts' in args:
        root.run_command('hosts:set', internal=True)
        args = filter(lambda s: s != '--set-hosts', args)
    else:
        logger.cmd('Hosts mapping ignored.')

    logger.cmd('Up project <b>%s</b>' % (root.compose.name, ))
    cmd = root.bash(root.compose.bin,
                    'up',
                    *args,
                    compose=root.compose,
                    is_system=True)
    if cmd.is_success:
        logger.success('<b>%s</b> is up.' % (root.compose.name, ))

    if root.mounting['hosts']:
        for host in root.mounting['hosts']:
            logger.success('Project is accessible by http://%s.' % (host, ))
コード例 #12
0
def run(root, *args, **kwargs):

    project = None

    project_name = args[0] if len(args) else None
    if project_name:
        project = root.projects.get(project_name)
        if not project:
            logger.warning('Project <b>%s</b> unknow.' % project_name)

    if not project:

        def select_project():
            # logger.ask('0) no machine (localhost)')
            logger.ask('Select the project to work on')
            for i, p in enumerate(root.projects.items()):
                key, value = p
                logger.choice('<b>{}]</b> {}'.format(i + 1, key))
            pi = six.moves.input(': ')
            try:
                if pi == '0':
                    raise Exception
                return root.projects.items()[int(pi) - 1]
            except Exception as e:
                logger.error('{} is not a valid choice'.format(pi))
                return select_project()

        project_name, project = select_project()

    if project:
        workdir = project.get('workdir')
        if workdir and os.path.isdir(workdir):
            logger.success('Workon the project <b>%s</b> in <b>%s</b>' %
                           (project_name, workdir))
            os.chdir(workdir)
            shell = os.environ.get('SHELL', '/bin/sh')
            # root.run_command('info', internal=True)
            os.execl(shell, shell)
            return
コード例 #13
0
def run(root, *args, **kwargs):

    name = args[0].strip() if args else None
    if name:
        if name in root.project['contexts']:
            root.project.config['context'] = name
            logger.success(u'Context <b>%s</b> selected.' % root.context.name)
        else:
            logger.error(u'Context <b>%s</b> unknow.' % name)
            exit(0)

    else:
        contexts = root.project['contexts']
        if not contexts:
            contexts['default'] = Context('default')
            root.project.config['context'] = 'default'
            logger.warning(u'No context defines, use <b>%s</b>.' %
                           root.context.name)
        else:

            def select_context_name(contexts):
                logger.ask(
                    u'Please select the <b>{}</b> context to work on'.format(
                        root.project.name))
                for i, c in enumerate(contexts):
                    logger.choice(u'<b>%s</b>] %s' % (i + 1, c.name))
                ci = six.moves.input(': ')
                try:
                    if ci == '0':
                        raise Exception
                    return contexts[int(ci) - 1].name
                except Exception as e:
                    logger.error(u'<b>%s/b> is not a valid choice' % ci)
                    return select_context_name(contexts)

            root.project.config['context'] = select_context_name(contexts)
            logger.success(u'Context <b>%s</b> selected.' % root.context.name)
コード例 #14
0
 def log(self):
     logger.success(self.out)