Exemple #1
0
    def __init__(self, args):
        " Load configuration. "

        super(Installer, self).__init__()

        assert args.PROJECT and args.branch and args.home

        self.args = args

        self['project'] = args.PROJECT
        self['branch'] = args.branch
        self['safe_branch'] = self['branch'].replace('/',
                                                     '-').replace(' ', '-')
        self['makesite_home'] = args.home
        self['deploy_dir'] = mkdtemp()
        call("chmod a+rwx %s" % self.deploy_dir, shell=True)

        self.read([
            settings.BASECONFIG, settings.HOMECONFIG,
            op.join(args.home, settings.CFGNAME),
            args.config
        ])

        src = args.src or self['src']
        assert src, "Not found the source. Use options '-s' or set 'src' in your ini files."
        self['src'] = src

        self.target_dir = getattr(args, 'deploy_dir', None) or op.join(
            args.home, self['project'], self['safe_branch'])
        self.templates = ['base']
        self['src_user'] = self['src_user'] or environ.get('USER')
Exemple #2
0
def uninstall(args):
    " Uninstall site. "

    site = find_site(args.PATH)
    site.run_remove()
    site.clean()
    if not listdir(op.dirname(site.deploy_dir)):
        call('sudo rm -rf %s' % op.dirname(site.deploy_dir))
Exemple #3
0
 def remove_template(self, template_name):
     assert template_name in self.templates, "Template not installed."
     print_header("Remove template: %s" % template_name)
     template = self._get_template_path(template_name)
     if not template.startswith(self.source_dir):
         for f in gen_template_files(template):
             call('sudo rm -f %s' % op.join(self.deploy_dir, f))
     self.templates = filter(lambda x: x != template_name, self.templates)
     self['template'] = ','.join(self.templates)
     self.write()
Exemple #4
0
 def remove_template(self, template_name):
     assert template_name in self.templates, "Template not installed."
     print_header("Remove template: %s" % template_name)
     template = self._get_template_path(template_name)
     if not template.startswith(self.source_dir):
         for f in gen_template_files(template):
             call('sudo rm -f %s' % op.join(self.deploy_dir, f))
     self.templates = filter(lambda x: x != template_name, self.templates)
     self['template'] = ','.join(self.templates)
     self.write()
Exemple #5
0
 def add_template(self, template_name):
     assert not template_name in self.templates, "Template already installed."
     print_header("Append template: %s" % template_name)
     deploy_tmpdir = mkdtemp()
     self.paste_template(template_name, deploy_dir=deploy_tmpdir)
     call('sudo cp -r %s/* %s' % (deploy_tmpdir, self.deploy_dir))
     call('sudo chown %s:%s %s' % (self.site_user,
          self.site_group, self.deploy_dir))
     self.templates.append(template_name)
     self['template'] = ','.join(self.templates)
     self.write()
Exemple #6
0
 def add_template(self, template_name):
     assert not template_name in self.templates, "Template already installed."
     print_header("Append template: %s" % template_name)
     deploy_tmpdir = mkdtemp()
     self.paste_template(template_name, deploy_dir=deploy_tmpdir)
     call('sudo cp -r %s/* %s' % (deploy_tmpdir, self.deploy_dir))
     call('sudo chown %s:%s %s' %
          (self.site_user, self.site_group, self.deploy_dir))
     self.templates.append(template_name)
     self['template'] = ','.join(self.templates)
     self.write()
Exemple #7
0
    def run_check(self, template_name=None, service_dir=None):
        " Run checking scripts. "

        print_header('Check requirements', sep='-')
        map(lambda cmd: call("bash %s" % cmd), self._gen_scripts(
            'check', template_name=template_name, service_dir=service_dir))
        return True
Exemple #8
0
    def clone_source(self):
        " Clone source and prepare templates "

        print_header('Clone src: %s' % self.src, '-')

        # Get source
        source_dir = self._get_source()

        # Append settings from source
        self.read(op.join(source_dir, settings.CFGNAME))

        self.templates += (self.args.template or self.template).split(',')
        self.templates = OrderedSet(self._gen_templates(self.templates))
        self['template'] = ','.join(str(x[0]) for x in self.templates)

        print_header('Deploy templates: %s' % self.template, sep='-')
        with open(op.join(self.deploy_dir, settings.TPLNAME), 'w') as f:
            f.write(self.template)

        with open(op.join(self.deploy_dir, settings.CFGNAME), 'w') as f:
            self['deploy_dir'], tmp_dir = self.target_dir, self.deploy_dir
            self.write(f)
            self['deploy_dir'] = tmp_dir

        # Create site
        site = Site(self.deploy_dir)

        # Prepare templates
        for template_name, template in self.templates:
            site.paste_template(template_name, template, tmp_dir)

        # Create site
        if self.args.info:
            print_header('Project context', sep='-')
            LOGGER.info(site.get_info(full=True))
            return None

        # Check requirements
        call('sudo chmod +x %s/*.sh' % self.service_dir)
        site.run_check(service_dir=self.service_dir)

        # Save options
        site.write()

        return site
Exemple #9
0
    def _get_source(self):
        " Get source from CVS or filepath. "
        source_dir = op.join(self.deploy_dir, 'source')
        for tp, cmd in settings.SRC_CLONE:
            if self.src.startswith(tp + '+'):
                program = which(tp)
                assert program, '%s not found.' % tp
                cmd = cmd % dict(src=self.src[len(tp) + 1:],
                                 source_dir=source_dir,
                                 branch=self.branch)
                cmd = "sudo -u %s %s" % (self['src_user'], cmd)
                call(cmd, shell=True)
                self.templates.append('src-%s' % tp)
                break
        else:
            self.templates.append('src-dir')
            copytree(self.src, source_dir)

        return source_dir
Exemple #10
0
    def run_check(self, template_name=None, service_dir=None):
        " Run checking scripts. "

        print_header('Check requirements', sep='-')
        map(
            lambda cmd: call("bash %s" % cmd),
            self._gen_scripts('check',
                              template_name=template_name,
                              service_dir=service_dir))
        return True
Exemple #11
0
 def build(self):
     print_header('Build site', sep='-')
     call('sudo mkdir -p %s' % op.dirname(self.target_dir))
     call('sudo mv %s %s' % (self.deploy_dir, self.target_dir))
     call('sudo chmod 0755 %s' % self.target_dir)
Exemple #12
0
 def clean(self):
     print_header('Delete %s' % self.get_name(), sep="-")
     call('sudo rm -rf %s' % self.deploy_dir)
Exemple #13
0
 def clean(self):
     print_header('Delete %s' % self.get_name(), sep="-")
     call('sudo rm -rf %s' % self.deploy_dir)