Example #1
0
def setup():
    print(green('Setting up nginx config'))
    conf_dir = '{}/deploy/nginx'.format(env.app_dir)
    with cd(conf_dir):
        output = run('ls')
        list_files = output.split()
        for file in list_files:
            files.symlink('{}/{}'.format(conf_dir, file), '/etc/nginx/conf.d/', use_sudo=True)

    restart()
Example #2
0
def create_eng_instance(instance):
    """Create a new kraken instance
        * Install requirements (idem potem)
        * Deploy the binary, the templatized ini configuration in a dedicated
          directory with rights to www-data and the logdir
        * Deploy initscript and add it to startup
        * Start the service
    """
    instance = get_real_instance(instance)
    for host in instance.kraken_engines:
        with settings(host_string=host):
            # base_conf
            require.files.directory(instance.kraken_basedir,
                                    owner=env.KRAKEN_USER,
                                    group=env.KRAKEN_USER,
                                    use_sudo=True)
            # logs
            require.files.directory(env.kraken_log_basedir,
                                    owner=env.KRAKEN_USER,
                                    group=env.KRAKEN_USER,
                                    use_sudo=True)

            update_eng_instance_conf(instance)

            # kraken.ini, pid and binary symlink
            kraken_bin = "{}/{}/kraken".format(env.kraken_basedir,
                                               instance.name)
            if not is_link(kraken_bin):
                files.symlink("/usr/bin/kraken", kraken_bin, use_sudo=True)
                sudo('chown -h {user} {bin}'.format(user=env.KRAKEN_USER,
                                                    bin=kraken_bin))

            #run("chmod 755 /etc/init.d/kraken_{}".format(instance))
            # TODO refactor this and test it on systemd and non-systemd machines
            if not env.use_systemd:
                sudo("update-rc.d kraken_{} defaults".format(instance.name))
            print(
                blue(
                    "INFO: Kraken {instance} instance is starting on {server}, "
                    "waiting 5 seconds, we will check if processus is running".
                    format(instance=instance.name,
                           server=get_host_addr(env.host_string))))

            service.start("kraken_{}".format(instance.name))
            run("sleep 5")  # we wait a bit for the kraken to pop

            # test it !
            # execute(test_kraken, get_host_addr(env.host_string), instance, fail_if_error=False)
            with settings(warn_only=True):
                run("pgrep --list-name --full {}".format(instance.name))
            print(
                blue("INFO: kraken {instance} instance is running on {server}".
                     format(instance=instance.name,
                            server=get_host_addr(env.host_string))))
Example #3
0
def setup():
    print(green('Setting up supervisor workers'))
    conf_dir = '{}/deploy/supervisor'.format(env.app_dir)
    with cd(conf_dir):
        output = run('ls')
        list_files = output.split()
        for file in list_files:
            files.symlink('{}/{}'.format(conf_dir, file),
                          '/etc/supervisor/conf.d/',
                          use_sudo=True)

    update_config()
Example #4
0
def setup_tyr():
    require.users.user('www-data')

    utils.require_directories([env.tyr_base_instances_dir,
                               env.tyr_basedir,
                               ],
                              owner=env.TYR_USER,
                              group=env.TYR_USER,
                              mode='755',
                              use_sudo=True)

    utils.require_directory(env.tyr_base_logdir,
                              owner=env.TYR_USER,
                              group=env.TYR_USER,
                              mode='777',
                              use_sudo=True)

    utils.require_directory(env.tyr_base_destination_dir,
                              is_on_nfs4=False,
                              owner=env.TYR_USER,
                              group=env.TYR_USER,
                              mode='755',
                              use_sudo=True)

    require.files.file(env.tyr_base_logfile,
                              owner=env.TYR_USER,
                              group=env.TYR_USER,
                              mode='766',
                              use_sudo=True)

    require.files.file(env.tyr_logfile_pattern,
                              owner=env.TYR_USER,
                              group=env.TYR_USER,
                              mode='766',
                              use_sudo=True)

    update_tyr_conf()

    _upload_template('tyr/tyr_worker.jinja', env.tyr_worker_service_file,
                     user='******', mode='755', context={'env': env})

    if not files.is_dir(env.tyr_migration_dir):
        files.symlink('/usr/share/tyr/migrations/', env.tyr_migration_dir, use_sudo=True)
        sudo("chown www-data:www-data {}".format(env.tyr_migration_dir))

    # we create a symlink for tyr manage_py
    tyr_symlink = os.path.join(env.tyr_basedir, 'manage.py')
    if not files.is_file(tyr_symlink):
        files.symlink('/usr/bin/manage_tyr.py', tyr_symlink, use_sudo=True)
Example #5
0
def create_eng_instance(instance):
    """Create a new kraken instance
        * Install requirements (idem potem)
        * Deploy the binary, the templatized ini configuration in a dedicated
          directory with rights to www-data and the logdir
        * Deploy initscript and add it to startup
        * Start the service
    """
    instance = get_real_instance(instance)

    # base_conf
    require.files.directory(instance.kraken_basedir,
                            owner=env.KRAKEN_USER, group=env.KRAKEN_USER, use_sudo=True)

    # logs
    require.files.directory(env.kraken_log_basedir,
                            owner=env.KRAKEN_USER, group=env.KRAKEN_USER, use_sudo=True)

    require.files.directory(instance.base_destination_dir,
                            owner=env.KRAKEN_USER, group=env.KRAKEN_USER, use_sudo=True)

    update_eng_instance_conf(instance)

    # kraken.ini, pid and binary symlink
    if not exists("{}/{}/kraken".format(env.kraken_basedir, instance.name)):
        kraken_bin = "{}/{}/kraken".format(env.kraken_basedir, instance.name)
        files.symlink("/usr/bin/kraken", kraken_bin, use_sudo=True)
        sudo('chown {user} {bin}'.format(user=env.KRAKEN_USER, bin=kraken_bin))

    #run("chmod 755 /etc/init.d/kraken_{}".format(instance))
    sudo("update-rc.d kraken_{} defaults".format(instance.name))
    print(blue("INFO: Kraken {instance} instance is starting on {server}, "
               "waiting 5 seconds, we will check if processus is running".format(
        instance=instance.name, server=get_host_addr(env.host_string))))

    service.start("kraken_{} start".format(instance.name))
    run("sleep 5")  # we wait a bit for the kraken to pop

    # test it !
    # execute(test_kraken, get_host_addr(env.host_string), instance, fail_if_error=False)
    print("server: {}".format(env.host_string))
    run("pgrep --list-name --full {}".format(instance.name))
    print(blue("INFO: kraken {instance} instance is running on {server}".
               format(instance=instance.name, server=get_host_addr(env.host_string))))
Example #6
0
def create_link():
    with cd(app_dir):
        if is_link(os.path.join(app_dir, "current")):
            sudo("rm -f {0}".format(os.path.join(app_dir, "current")))
        symlink(os.path.join(app_dir, now), "current", use_sudo=True)
Example #7
0
def setup_tyr():
    require.users.user('www-data')

    require_directories([
        env.tyr_base_instances_dir,
        env.tyr_basedir,
    ],
                        owner=env.TYR_USER,
                        group=env.TYR_USER,
                        mode='755',
                        use_sudo=True)

    require_directory(env.tyr_base_logdir,
                      owner=env.TYR_USER,
                      group=env.TYR_USER,
                      mode='777',
                      use_sudo=True)

    require_directory(env.tyr_base_destination_dir,
                      is_on_nfs4=False,
                      owner=env.TYR_USER,
                      group=env.TYR_USER,
                      mode='755',
                      use_sudo=True)

    require.files.file(env.tyr_base_logfile,
                       owner=env.TYR_USER,
                       group=env.TYR_USER,
                       mode='766',
                       use_sudo=True)

    require.files.file(env.tyr_logfile_pattern,
                       owner=env.TYR_USER,
                       group=env.TYR_USER,
                       mode='766',
                       use_sudo=True)

    update_tyr_confs()

    if env.use_systemd:
        _upload_template('tyr/systemd_tyr_worker.jinja',
                         env.service_name('tyr_worker'),
                         user='******',
                         mode='644',
                         context={'env': env})
    else:
        _upload_template('tyr/tyr_worker.jinja',
                         env.service_name('tyr_worker'),
                         user='******',
                         mode='755',
                         context={'env': env})
    update_init(host='tyr')

    if not files.is_dir(env.tyr_migration_dir):
        files.symlink('/usr/share/tyr/migrations/',
                      env.tyr_migration_dir,
                      use_sudo=True)
        sudo("chown www-data:www-data {}".format(env.tyr_migration_dir))

    # we create a symlink for tyr manage_py
    tyr_symlink = os.path.join(env.tyr_basedir, 'manage.py')
    if not files.is_file(tyr_symlink):
        files.symlink('/usr/bin/manage_tyr.py', tyr_symlink, use_sudo=True)
Example #8
0
def create_domain(domain, password=None, version="3"):
    unix_u, unix_p = create_user(domain, password)
    with settings(user=unix_u, password=unix_p):
        # Push ssh key
        push_key()

        # Create virtual env
        create_venv("venv", version)

        run("chmod 775 ~/")
        files.append(filename=".bashrc", text="umask 002")

        # Create site folder
        run("mkdir site-dir")
        run("mkdir site-dir/staticfiles")

        # Create nginx log files
        run("touch ~/nginx_access.log")
        sudo("chgrp root nginx_access.log")
        run("touch ~/nginx_error.log")
        sudo("chgrp root nginx_error.log")

        # Create uwsgi ini file and move to vassal directory
        uwsgi_plugins = []
        if version == "3":
            uwsgi_plugins.append("python3")
        if version == "2":
            uwsgi_plugins.append("python2")

        files.append(
            "uwsgi.ini",
            UWSGI_INI.format(domain=env.user,
                             plugins=", ".join(uwsgi_plugins)))
        files2.symlink(
            "/home/{user}/uwsgi.ini".format(user=env.user),
            "/etc/uwsgi/apps-available/{user}.ini".format(user=env.user),
            use_sudo=True)
        files2.symlink(
            "/etc/uwsgi/apps-available/{user}.ini".format(user=env.user),
            "/etc/uwsgi/apps-enabled/{user}.ini".format(user=env.user),
            use_sudo=True)

        # Create nginx config file and enable
        files.append("/etc/nginx/sites-available/{user}".format(user=env.user),
                     NGINX_CONF.format(domain=env.user),
                     use_sudo=True)
        nginx.enable(env.user)

        if unix_p == password:
            psql_u, psql_p, psql_n = create_pgsql_user(username=env.user,
                                                       password=password)
        else:
            psql_u, psql_p, psql_n = create_pgsql_user(username=env.user)

        files.append(
            "README.txt",
            README_FILE.format(
                user_unix=unix_u,
                pass_unix=unix_p,
                user_pql=psql_u,
                pass_pql=psql_p,
                name_pql=psql_n,
            ))
Example #9
0
def test_symlink(mock_run):
    from fabtools.files import symlink
    symlink('/tmp/src', '/tmp/dst')
    mock_run.assert_called_with('/bin/ln -s /tmp/src /tmp/dst')
Example #10
0
def test_symlink_force(mock_run):
    from fabtools.files import symlink
    symlink('/tmp/src', '/tmp/dst', force=True)
    mock_run.assert_called_with('/bin/ln -s -f /tmp/src /tmp/dst')
Example #11
0
def setup_tyr():
    require.deb.packages(["alembic", "rabbitmq-server", 'redis-server'])
    require.users.user('www-data')

    utils.require_directories([
        env.tyr_base_instances_dir,
        env.tyr_basedir,
    ],
                              owner=env.TYR_USER,
                              group=env.TYR_USER,
                              mode='755',
                              use_sudo=True)

    utils.require_directory(env.tyr_base_logdir,
                            owner=env.TYR_USER,
                            group=env.TYR_USER,
                            mode='777',
                            use_sudo=True)

    utils.require_directory(env.tyr_base_destination_dir,
                            is_on_nfs4=False,
                            owner=env.TYR_USER,
                            group=env.TYR_USER,
                            mode='755',
                            use_sudo=True)

    require.files.file(env.tyr_base_logfile,
                       owner=env.TYR_USER,
                       group=env.TYR_USER,
                       mode='766',
                       use_sudo=True)

    require.files.file(env.tyr_logfile_pattern,
                       owner=env.TYR_USER,
                       group=env.TYR_USER,
                       mode='766',
                       use_sudo=True)

    update_tyr_conf()

    # we need to deploy the services conf file
    _upload_template('tyr/tyr_beat.jinja',
                     env.tyr_beat_service_file,
                     user='******',
                     mode='755',
                     context={'env': env})
    _upload_template('tyr/tyr_worker.jinja',
                     env.tyr_worker_service_file,
                     user='******',
                     mode='755',
                     context={'env': env})

    if not files.is_dir(env.tyr_migration_dir):
        files.symlink('/usr/share/tyr/migrations/',
                      env.tyr_migration_dir,
                      use_sudo=True)
        sudo("chown www-data:www-data {}".format(env.tyr_migration_dir))

    # we create a symlink for tyr manage_py
    tyr_symlink = os.path.join(env.tyr_basedir, 'manage.py')
    if not files.is_file(tyr_symlink):
        files.symlink('/usr/bin/manage_tyr.py', tyr_symlink, use_sudo=True)

    service.start('rabbitmq-server')
    service.start('redis-server')
Example #12
0
def test_symlink(mock_run):
    from fabtools.files import symlink
    symlink('/tmp/src', '/tmp/dst')
    mock_run.assert_called_with('/bin/ln -s /tmp/src /tmp/dst')