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()
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))))
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()
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)
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))))
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)
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)
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, ))
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')
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')
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')