예제 #1
0
    def hook_config_changed(self):
        local_cfg = self.local_config
        # Apache site files must end with .conf for a2ensite to work
        site_file = self.name_slug + ".conf"

        self.info(u'Configure Apache 2')
        self.template2config(local_cfg.site_template_file, join(local_cfg.sites_available_path, site_file), {
            u'directory': local_cfg.site_directory, u'domain': self.public_address
        })
        self.cmd(u'a2dissite 000-default')
        self.cmd(u'a2ensite {0}'.format(site_file))

        self.info(u'Configure CodeIgniter the PHP framework')
        self.storage_remount()
        self.api_register()
        infos = object2dict(self.config, include_properties=True)
        infos.update(object2dict(local_cfg, include_properties=True))
        infos[u'proxy_ips'] = self.proxy_ips_string
        infos[u'medias_uri'] = local_cfg.storage_uri(path=MEDIAS_PATH) or u''
        infos[u'uploads_uri'] = local_cfg.storage_uri(path=UPLOADS_PATH) or u''
        self.template2config(local_cfg.general_template_file,  local_cfg.general_config_file,  infos)
        self.template2config(local_cfg.database_template_file, local_cfg.database_config_file, infos)
        self.template2config(local_cfg.htaccess_template_file, local_cfg.htaccess_config_file, infos)
        if self.storage_is_mounted:
            self.info(u'Symlink shared storage for the web daemon')
            try_symlink(local_cfg.storage_medias_path(), local_cfg.medias_path)
            try_symlink(local_cfg.storage_uploads_path,  local_cfg.uploads_path)
예제 #2
0
파일: WebuiHooks.py 프로젝트: ebu/OSCIED
    def hook_config_changed(self):
        local_cfg = self.local_config

        self.info("Configure Apache 2")
        self.template2config(
            local_cfg.site_template_file,
            join(local_cfg.sites_available_path, self.name_slug),
            {"directory": local_cfg.site_directory, "domain": self.public_address},
        )
        self.cmd("a2dissite default")
        self.cmd("a2ensite {0}".format(self.name_slug))

        self.info("Configure CodeIgniter the PHP framework")
        self.storage_remount()
        self.api_register()
        infos = object2dict(self.config, include_properties=True)
        infos.update(object2dict(local_cfg, include_properties=True))
        infos["proxy_ips"] = self.proxy_ips_string
        infos["medias_uri"] = local_cfg.storage_uri(path=MEDIAS_PATH) or ""
        infos["uploads_uri"] = local_cfg.storage_uri(path=UPLOADS_PATH) or ""
        self.template2config(local_cfg.general_template_file, local_cfg.general_config_file, infos)
        self.template2config(local_cfg.database_template_file, local_cfg.database_config_file, infos)
        self.template2config(local_cfg.htaccess_template_file, local_cfg.htaccess_config_file, infos)
        if self.storage_is_mounted:
            self.info("Symlink shared storage for the web daemon")
            try_symlink(local_cfg.storage_medias_path(), local_cfg.medias_path)
            try_symlink(local_cfg.storage_uploads_path, local_cfg.uploads_path)
예제 #3
0
    def hook_config_changed(self):
        cfg, local_cfg = self.config, self.local_config
        # Apache site files must end with .conf for a2ensite to work
        site_file = self.name_slug + ".conf"

        self.info(u'Start MongoDB and RabbitMQ daemons')
        self.cmd(u'service mongodb start',         fail=False)
        self.cmd(u'service rabbitmq-server start', fail=False)

        self.info(u'Configure JuJu Service Orchestrator')
        juju_config_path = dirname(local_cfg.juju_config_file)
        rsync(local_cfg.juju_template_path, juju_config_path, **self.rsync_kwargs)
        chown(juju_config_path, DAEMON_USER, DAEMON_GROUP, recursive=True)

        self.info(u'Configure Secure Shell')
        rsync(local_cfg.ssh_template_path, local_cfg.ssh_config_path, **self.rsync_kwargs)
        chown(local_cfg.ssh_config_path, DAEMON_USER, DAEMON_GROUP, recursive=True)

        self.info(u'Configure Apache 2')
        self.template2config(local_cfg.htaccess_template_file, local_cfg.htaccess_config_file, {})
        self.template2config(local_cfg.site_template_file, join(local_cfg.sites_available_path, site_file), {
            u'alias': self.api_alias, u'directory': local_cfg.site_directory, u'domain': self.public_address,
            u'wsgi': local_cfg.api_wsgi
        })
        self.cmd(u'a2dissite 000-default')
        self.cmd(u'a2ensite {0}'.format(site_file))

        self.info(u'Configure MongoDB Scalable NoSQL DB')
        with open(u'f.js', u'w', u'utf-8') as mongo_f:
            mongo_f.write(u"db.addUser('admin', '{0}', false);".format(cfg.mongo_admin_password))
        with open(u'g.js', u'w', u'utf-8') as mongo_g:
            mongo_g.write(u"db.addUser('node', '{0}', false);".format(cfg.mongo_node_password))
        self.cmd(u'mongo f.js')
        self.cmd(u'mongo orchestra f.js')
        self.cmd(u'mongo celery g.js')
        [os.remove(f) for f in (u'f.js', u'g.js')]

        mongo_config = ConfigObj(local_cfg.mongo_config_file)
        mongo_config[u'bind_ip'] = u'0.0.0.0'
        mongo_config[u'noauth'] = u'false'
        mongo_config[u'auth'] = u'true'
        mongo_config.write()

        self.configure_rabbitmq()

        if cfg.plugit_api_url:
            self.info(u'Configure PlugIt server')
            infos = {
                u'api_url': cfg.plugit_api_url, u'debug': cfg.verbose, u'base_url': cfg.plugit_base_url,
                u'allowed_networks': u'", "'.join(cfg.plugit_allowed_networks.split(u','))
            }
            self.template2config(local_cfg.plugit_template_file, local_cfg.plugit_config_file, infos)

        self.info(u'Configure Orchestra the Orchestrator')
        local_cfg.verbose = cfg.verbose
        local_cfg.api_url = self.api_url(local=False)
        local_cfg.charms_release = cfg.charms_release
        local_cfg.node_secret = cfg.node_secret
        local_cfg.root_secret = cfg.root_secret
        local_cfg.mongo_admin_connection = self.mongo_admin_connection
        local_cfg.mongo_node_connection = self.mongo_node_connection
        local_cfg.rabbit_connection = self.rabbit_connection
        infos = {
            u'rabbit': unicode(self.rabbit_connection),
            u'port': unicode(27017),
            u'username': u'node',
            u'password': unicode(cfg.mongo_node_password),
        }
        self.template2config(local_cfg.celery_template_file, local_cfg.celery_config_file, infos)
        local_cfg.email_server = cfg.email_server
        local_cfg.email_tls = cfg.email_tls
        local_cfg.email_address = cfg.email_address
        local_cfg.email_username = cfg.email_username
        local_cfg.email_password = cfg.email_password
        local_cfg.plugit_api_url = cfg.plugit_api_url
        self.remark(u'Orchestrator successfully configured')

        self.info(u'Symlink charms default directory to directory for release {0}'.format(cfg.charms_release))
        try_symlink(abspath(local_cfg.charms_default_path), abspath(local_cfg.charms_release_path))

        self.info(u'Ensure that the Apache sites directory is owned by the right user')
        chown(local_cfg.sites_directory, DAEMON_USER, DAEMON_GROUP, recursive=True)

        self.info(u'Configure Cronjob')
        self.template2config(local_cfg.cronjob_template_file, '/etc/cron.d/cron_enco', {})

        self.storage_remount()