def locales(names): """ Require the list of locales to be available. """ if distrib_id() == "Ubuntu": config_file = '/var/lib/locales/supported.d/local' if not is_file(config_file): run_as_root('touch %s' % config_file) else: config_file = '/etc/locale.gen' # Regenerate locales if config file changes with watch(config_file, use_sudo=True) as config: # Add valid locale names to the config file supported = dict(supported_locales()) for name in names: if name in supported: charset = supported[name] locale = "%s %s" % (name, charset) uncomment(config_file, escape(locale), use_sudo=True, shell=True) append(config_file, locale, use_sudo=True, partial=True, shell=True) else: warn('Unsupported locale name "%s"' % name) if config.changed: if distrib_id() == "Archlinux": run_as_root('locale-gen') else: run_as_root('dpkg-reconfigure --frontend=noninteractive locales')
def locales(names): """ Require the list of locales to be available. Raises UnsupportedLocales if some of the required locales are not supported. """ family = distrib_family() if family == 'debian': command = 'dpkg-reconfigure --frontend=noninteractive locales' if distrib_id() == 'Ubuntu': config_file = '/var/lib/locales/supported.d/local' if not is_file(config_file): run_as_root('touch %s' % config_file) else: config_file = '/etc/locale.gen' _locales_generic(names, config_file=config_file, command=command) elif family in ['arch', 'gentoo']: _locales_generic(names, config_file='/etc/locale.gen', command='locale-gen') elif distrib_family() == 'redhat': _locales_redhat(names) else: raise UnsupportedFamily( supported=['debian', 'arch', 'gentoo', 'redhat'])
def install_tools(): ''' Install build tools ''' packages = ['python', 'python-dev', 'python-setuptools', 'python-pip', 'openssl', 'libssl-dev', 'libxml2-dev', 'libxslt1-dev', 'build-essential', 'git', 'sudo', 'lsb-release', 'imagemagick', 'curl', 'sqlite3', 'wget'] if system.distrib_id() == 'Ubuntu': packages.append('software-properties-common') deb.update_index() deb.upgrade() require.deb.packages(packages) # Dirty hack because of fabtools that don't install pip properly sudo('curl -o - https://bootstrap.pypa.io/ez_setup.py -O - | python') sudo('curl -o - https://bootstrap.pypa.io/get-pip.py | python -') print(green('Tools successfully installed'))
def locales(names): """ Require the list of locales to be available. """ if distrib_id() == "Ubuntu": config_file = '/var/lib/locales/supported.d/local' if not is_file(config_file): run_as_root('touch %s' % config_file) else: config_file = '/etc/locale.gen' # Regenerate locales if config file changes with watch(config_file, use_sudo=True) as config: # Add valid locale names to the config file supported = dict(supported_locales()) for name in names: if name in supported: charset = supported[name] locale = "%s %s" % (name, charset) uncomment(config_file, escape(locale), use_sudo=True, shell=True) append(config_file, locale, use_sudo=True, partial=True, shell=True) else: warn('Unsupported locale name "%s"' % name) if config.changed: family = distrib_family() if family == 'debian': run_as_root('dpkg-reconfigure --frontend=noninteractive locales') elif family in ['arch', 'gentoo']: run_as_root('locale-gen') else: raise UnsupportedFamily(supported=['debian', 'arch', 'gentoo'])
def install_nginx(): """ Install NGINX and make it use certs. """ if system.distrib_id() == 'Debian': require_file(url='http://nginx.org/packages/keys/nginx_signing.key') deb.add_apt_key('nginx_signing.key') su_delete('nginx_signing.key') url = 'http://nginx.org/packages/debian/' distrib = 'squeeze' if system.distrib_release().startswith('7'): distrib = 'wheezy' require.deb.source('nginx', url, distrib, 'nginx') require.deb.package('nginx') contents = PROXIED_SITE_TEMPLATE % { 'server_name': 'cozy', 'port': 443, 'proxy_url': 'http://127.0.0.1:9104' } require.files.file('/etc/nginx/conf.d/cozy.conf', contents=contents, use_sudo=True) service.restart('nginx') else: require.deb.ppa("ppa:nginx/stable") require.nginx.site("cozy", template_contents=PROXIED_SITE_TEMPLATE, enabled=True, port=443, proxy_url='http://127.0.0.1:9104' ) print(green("Nginx successfully installed."))
def install_tools(): ''' Install build tools ''' packages = ['python', 'python-dev', 'python-setuptools', 'python-pip', 'openssl', 'libssl-dev', 'libxml2-dev', 'libxslt1-dev', 'build-essential', 'git', 'sudo', 'lsb-release', 'imagemagick', 'curl', 'sqlite3'] if system.distrib_id() == 'Ubuntu': packages.append('software-properties-common') deb.update_index() deb.upgrade() require.deb.packages(packages) # Dirty hack because of fabtools that don't install pip properly sudo('curl -o - https://bootstrap.pypa.io/ez_setup.py -O - | python') sudo('curl -o - https://bootstrap.pypa.io/get-pip.py | python -') print(green('Tools successfully installed'))
def get_couchdb_version(): if system.distrib_id() == 'Ubuntu' \ and system.distrib_release() == '13.10': version = '1.5.0' else: version = '1.3.0' return version
def install_couchdb(): ''' Install CouchDB 1.3.0 or 1.5.0 depending on the target distribution. ''' # Check if controller is already installed, . with settings(warn_only=True): result = run('curl -X GET http://127.0.0.1:5984/') is_installed = result.find('Welcome') if is_installed != -1: print(green("CouchDB is already installed")) return True packages = [ 'erlang', 'libicu-dev', 'libcurl4-openssl-dev', 'curl' ] if system.distrib_id() == 'Debian' \ and system.distrib_release().startswith('6'): packages.append('libmozjs-dev') else: packages.append('libmozjs185-dev') require.deb.packages(packages) version = get_couchdb_version() require.file( url='http://apache.crihan.fr/dist/couchdb/source/' + '%s/apache-couchdb-%s.tar.gz' % (version, version)) run('tar -xzvf apache-couchdb-%s.tar.gz' % version) with cd('apache-couchdb-%s' % version): run('./configure; make') result = sudo('make install') installed = result.find('You have installed Apache CouchDB,' + ' time to relax.') if installed == -1: print_failed('couchdb') su_delete('apache-couchdb-%s' % version) su_delete('apache-couchdb-%s.tar.gz' % version) require.users.user('couchdb', home='/usr/local/var/lib/couchdb') sudo('chown -R couchdb:couchdb /usr/local/etc/couchdb') sudo('chown -R couchdb:couchdb /usr/local/var/lib/couchdb') sudo('chown -R couchdb:couchdb /usr/local/var/log/couchdb') sudo('chown -R couchdb:couchdb /usr/local/var/run/couchdb') sudo('chmod 0770 /usr/local/etc/couchdb') sudo('chmod 0770 /usr/local/var/lib/couchdb') sudo('chmod 0770 /usr/local/var/log/couchdb') sudo('chmod 0770 /usr/local/var/run/couchdb') require.supervisor.process( 'couchdb', user='******', command='couchdb', autostart='true', environment='HOME=/usr/local/var/lib/couchdb') print(green('CouchDB %s successfully installed' % version))
def update_webvirt(): """ Update Webvirt on a Remote server Webvirt should be already installed """ distro = distrib_id() get_webvirt() configure_nginx(distro) configure_supervisor(distro)
def deploy_webvirt(): """ Install Webvirt on a Remote server """ distro = distrib_id() install_system_packages(distro) get_webvirt() configure_nginx(distro) configure_novnc(distro) configure_supervisor(distro)
def get_couchdb_version(): ''' Return proper CouchDB version depending on distribution. ''' version = '1.6.1' if system.distrib_id() == 'Debian' \ and (system.distrib_release().startswith('6') or system.distrib_release().startswith('7')): version = '1.5.1' return version
def get_couchdb_version(): ''' Return proper CouchDB version depending on distribution. ''' version = '1.6.0' if system.distrib_id() == 'Debian' \ and (system.distrib_release().startswith('6') or system.distrib_release().startswith('7')): version = '1.5.0' return version
def _choose(old_style, new_style): family = distrib_family() if family == 'debian': distrib = distrib_id() at_least_trusty = (distrib == 'Ubuntu' and V(distrib_release()) >= V('14.04')) at_least_jessie = (distrib == 'Debian' and V(distrib_release()) >= V('8.0')) if at_least_trusty or at_least_jessie: return new_style else: return old_style else: raise UnsupportedFamily(supported=['debian'])
def install_couchdb(): ''' Install CouchDB 1.3.0 or 1.5.0 ''' packages = [ 'erlang', 'libicu-dev', 'libcurl4-openssl-dev', 'curl' ] if system.distrib_id() == 'Debian' \ and system.distrib_release().startswith('6'): packages.append('libmozjs-dev') else: packages.append('libmozjs185-dev') require.deb.packages(packages) version = get_couchdb_version() require_file( url='http://apache.crihan.fr/dist/couchdb/source/' + '%s/apache-couchdb-%s.tar.gz' % (version, version)) run('tar -xzvf apache-couchdb-%s.tar.gz' % version) with cd('apache-couchdb-%s' % version): run('./configure; make') result = sudo('make install') installed = result.find('You have installed Apache CouchDB,' + ' time to relax.') if installed == -1: print_failed('couchdb') su_delete('apache-couchdb-%s' % version) su_delete('rm -rf apache-couchdb-%s.tar.gz' % version) require.users.user('couchdb', home='/usr/local/var/lib/couchdb') sudo('chown -R couchdb:couchdb /usr/local/etc/couchdb') sudo('chown -R couchdb:couchdb /usr/local/var/lib/couchdb') sudo('chown -R couchdb:couchdb /usr/local/var/log/couchdb') sudo('chown -R couchdb:couchdb /usr/local/var/run/couchdb') sudo('chmod 0770 /usr/local/etc/couchdb') sudo('chmod 0770 /usr/local/var/lib/couchdb') sudo('chmod 0770 /usr/local/var/log/couchdb') sudo('chmod 0770 /usr/local/var/run/couchdb') require.supervisor.process( 'couchdb', user='******', command='couchdb', autostart='true', environment='HOME=/usr/local/var/lib/couchdb') print(green('CouchDB %s successfully installed' % version))
def capabilities(): """Test capabilities functions in new distrition For openwrt: mv /etc/banner /etc/banner.disable fab -s "/bin/ash -l -c" capabilities """ print("SYSTEM") print("======") print("Distribution: %s" % system.distrib_id()) print("Release: %s" % system.distrib_release()) print("Codename: %s" % system.distrib_codename()) print("Desc: %s" % system.distrib_desc()) print("Arch: %s" % system.get_arch()) print("Hostname: %s" % system.get_hostname())
def capabilities(): """Test capabilities functions in new distrition For openwrt: mv /etc/banner /etc/banner.disable fab -s "/bin/ash -l -c" capabilities """ print ("SYSTEM") print ("======") print("Distribution: %s" % system.distrib_id()) print("Release: %s" % system.distrib_release()) print("Codename: %s" % system.distrib_codename()) print("Desc: %s" % system.distrib_desc()) print("Arch: %s" % system.get_arch()) print("Hostname: %s" % system.get_hostname())
def default_locale(name): """ Require the locale to be the default. """ from fabtools.require import file as require_file # Ensure the locale is available locale(name) # Make it the default contents = 'LANG="%s"\n' % name if distrib_id() == "Archlinux": config_file = '/etc/locale.conf' else: config_file = '/etc/default/locale' require_file(config_file, contents, use_sudo=True)
def install_couchdb(): """ Install CouchDB 1.3.0 """ packages = [ 'erlang', 'libicu-dev', 'libcurl4-openssl-dev', 'curl' ] if system.distrib_id() == "Debian" \ and system.distrib_release().startswith('6'): packages.append('libmozjs-dev') else: packages.append('libmozjs185-dev') require.deb.packages(packages) require_file(url='http://apache.crihan.fr/dist/couchdb/source/' + '1.3.0/apache-couchdb-1.3.0.tar.gz') run('tar -xzvf apache-couchdb-1.3.0.tar.gz') with cd('apache-couchdb-1.3.0'): run('./configure; make') result = sudo('make install') installed = result.find("You have installed Apache CouchDB," + \ " time to relax.") if installed == -1: print_failed("couchdb") su_delete('apache-couchdb-1.3.0') su_delete('rm -rf apache-couchdb-1.3.0.tar.gz') require.users.user("couchdb", home='/usr/local/var/lib/couchdb') sudo('chown -R couchdb:couchdb /usr/local/etc/couchdb') sudo('chown -R couchdb:couchdb /usr/local/var/lib/couchdb') sudo('chown -R couchdb:couchdb /usr/local/var/log/couchdb') sudo('chown -R couchdb:couchdb /usr/local/var/run/couchdb') sudo('chmod 0770 /usr/local/etc/couchdb') sudo('chmod 0770 /usr/local/var/lib/couchdb') sudo('chmod 0770 /usr/local/var/log/couchdb') sudo('chmod 0770 /usr/local/var/run/couchdb') require.supervisor.process('couchdb', user='******', command='couchdb', autostart='true', environment='HOME=/usr/local/var/lib/couchdb') print(green("CouchDB 1.3.0 successfully installed"))
def install_nginx(): ''' Install NGINX and make it use certs. ''' if system.distrib_id() == 'Debian': if not is_arm(): key_url = 'http://nginx.org/packages/keys/nginx_signing.key' require.file(url=key_url) deb.add_apt_key('nginx_signing.key') su_delete('nginx_signing.key') url = 'http://nginx.org/packages/debian/' distrib = 'squeeze' if system.distrib_release().startswith('7'): distrib = 'wheezy' elif system.distrib_release().startswith('8'): distrib = 'jessie' require.deb.source('nginx', url, distrib, 'nginx') require.deb.package('nginx') contents = PROXIED_SITE_TEMPLATE % { 'server_name': 'cozy', 'port': 443, 'proxy_url': 'http://127.0.0.1:9104' } require.files.file( '/etc/nginx/conf.d/cozy.conf', contents=contents, use_sudo=True) else: require.deb.ppa('ppa:nginx/stable') require.nginx.site( 'cozy', template_contents=PROXIED_SITE_TEMPLATE, enabled=True, port=443, proxy_url='http://127.0.0.1:9104' ) delete_if_exists('/etc/nginx/conf.d/default.conf') delete_if_exists('/etc/nginx/conf.d/example_ssl.conf') delete_if_exists('/etc/nginx/sites-enabled/default') service.restart('nginx') print(green('Nginx successfully installed.'))
def install_nginx(): ''' Install NGINX and make it use certs. ''' if system.distrib_id() == 'Debian': if not is_arm(): key_url = 'http://nginx.org/packages/keys/nginx_signing.key' require.file(url=key_url) deb.add_apt_key('nginx_signing.key') su_delete('nginx_signing.key') url = 'http://nginx.org/packages/debian/' distrib = 'squeeze' if system.distrib_release().startswith('7'): distrib = 'wheezy' require.deb.source('nginx', url, distrib, 'nginx') require.deb.package('nginx') contents = PROXIED_SITE_TEMPLATE % { 'server_name': 'cozy', 'port': 443, 'proxy_url': 'http://127.0.0.1:9104' } require.files.file( '/etc/nginx/conf.d/cozy.conf', contents=contents, use_sudo=True) else: require.deb.ppa('ppa:nginx/stable') require.nginx.site( 'cozy', template_contents=PROXIED_SITE_TEMPLATE, enabled=True, port=443, proxy_url='http://127.0.0.1:9104' ) delete_if_exists('/etc/nginx/conf.d/default.conf') delete_if_exists('/etc/nginx/conf.d/example_ssl.conf') delete_if_exists('/etc/nginx/sites-enabled/default') service.restart('nginx') print(green('Nginx successfully installed.'))
def install_couchdb(): ''' Install CouchDB 1.3.0 or 1.5.0 depending on the target distribution. ''' # Check if controller is already installed, . with settings(warn_only=True): result = run('curl -X GET http://127.0.0.1:5984/') is_installed = result.find('Welcome') if is_installed != -1: print(green("CouchDB is already installed")) return True packages = [ 'erlang', 'libicu-dev', 'libcurl4-openssl-dev', 'curl' ] if system.distrib_id() == 'Debian' \ and system.distrib_release().startswith('6'): packages.append('libmozjs-dev') else: packages.append('libmozjs185-dev') require.deb.packages(packages) version = get_couchdb_version() require.file( url='http://apache.crihan.fr/dist/couchdb/source/' + '%s/apache-couchdb-%s.tar.gz' % (version, version)) run('tar -xzvf apache-couchdb-%s.tar.gz' % version) with cd('apache-couchdb-%s' % version): run('./configure; make') result = sudo('make install') installed = result.find('You have installed Apache CouchDB,' + ' time to relax.') if installed == -1: print_failed('couchdb') su_delete('apache-couchdb-%s' % version) su_delete('apache-couchdb-%s.tar.gz' % version)
def locales(names): """ Require the list of locales to be available. """ config_file = '/var/lib/locales/supported.d/local' if not is_file(config_file): config_file = '/etc/locale.gen' # Regenerate locales if config file changes with watch(config_file, use_sudo=True) as config: # Add valid locale names to the config file supported = dict(supported_locales()) for name in names: if name in supported: charset = supported[name] locale = "%s %s" % (name, charset) uncomment(config_file, escape(locale), use_sudo=True, shell=True) append(config_file, locale, use_sudo=True, partial=True, shell=True) else: warn('Unsupported locale name "%s"' % name) if config.changed: if distrib_id() == "Archlinux": run_as_root('locale-gen') else: run_as_root('dpkg-reconfigure --frontend=noninteractive locales')
def server(package_name='nginx'): """ Require the nginx web server to be installed and running. You can override the system package name, if you need to install a specific variant such as `nginx-extras` or `nginx-light`. :: from fabtools import require require.nginx.server() """ family = distrib_family() if family == 'debian': require_deb_package(package_name) elif family == 'redhat': require_rpm_package(package_name) elif distrib_id() is 'Archlinux': require_arch_package(package_name) require_started('nginx')
def deploy(app, with_blog=None, with_alembic=False): """deploy the app""" assert system.distrib_id() == 'Ubuntu' lsb_codename = system.distrib_codename() if lsb_codename != 'xenial': raise ValueError('unsupported platform: %s' % lsb_codename) # See whether the local appconfig clone is up-to-date with the remot master: remote_repo = local('git ls-remote [email protected]:shh-dlce/appconfig.git HEAD | awk \'{ print $1}\'') local_clone = local('git rev-parse HEAD') if remote_repo != local_clone: if confirm('Local appconfig clone is not up-to-date ' 'with remote master, continue?', default=False): print("Continuing deployment.") else: print("Deployment aborted.") return require.deb.packages(getattr(app, 'require_deb_%s' % lsb_codename) + app.require_deb) require.users.user(app.name, create_home=True, shell='/bin/bash') require.directory(str(app.www_dir), use_sudo=True) require.directory(str(app.www_dir / 'files'), use_sudo=True) require_logging(app.log_dir, logrotate=app.logrotate, access_log=app.access_log, error_log=app.error_log) workers = 3 if app.workers > 3 and env.environment == 'test' else app.workers with_blog = with_blog if with_blog is not None else app.with_blog if env.environment != 'staging': # Test and production instances are publicly accessible over HTTPS. letsencrypt.require_certbot() letsencrypt.require_cert(env.host) if env.environment == 'production': letsencrypt.require_cert(app) ctx = template_context(app, workers=workers, with_blog=with_blog) if app.stack == 'soundcomparisons': # pragma: no cover require.git.working_copy( 'https://github.com/{0}/{1}.git'.format(app.github_org, app.github_repos), path=str(app.home_dir / app.name), use_sudo=True, user=app.name) require_bower(app, d=app.home_dir / app.name / 'site' / 'js') require_grunt(app, d=app.home_dir / app.name / 'site' / 'js') require_php(app) require_mysql(app) with shell_env(SYSTEMD_PAGER=''): require.nginx.server() sudo_upload_template('nginx-php-fpm-app.conf', str(app.nginx_site), app=app, env=env) nginx.enable(app.name) if env.environment == 'production': # We only enable systemd services when deploying to production, because we don't want # to start and run things like backup to CDSTAR from non-production systems. systemd.enable(app, pathlib.Path(os.getcwd()) / 'systemd') service.reload('nginx') return # # Create a virtualenv for the app and install the app package in development mode, i.e. with # repository working copy in /usr/venvs/<APP>/src # require_venv( app.venv_dir, require_packages=[app.app_pkg] + app.require_pip, assets_name=app.name if app.stack == 'clld' else None) # # If some of the static assets are managed via bower, update them. # require_bower(app) require_grunt(app) require_nginx(ctx) if app.stack == 'clld': require_bibutils() require_postgres(app) require_config(app.config, app, ctx) # if gunicorn runs, make it gracefully reload the app by sending HUP # TODO: consider 'supervisorctl signal HUP $name' instead (xenial+) sudo('( [ -f {0} ] && kill -0 $(cat {0}) 2> /dev/null ' '&& kill -HUP $(cat {0}) ) || echo no reload '.format(app.gunicorn_pid)) if not with_alembic and confirm('Recreate database?', default=False): stop.execute_inner(app) upload_sqldump(app) elif exists(str(app.src_dir / 'alembic.ini')) and confirm('Upgrade database?', default=False): # Note: stopping the app is not strictly necessary, because # the alembic revisions run in separate transactions! stop.execute_inner(app, maintenance_hours=app.deploy_duration) alembic_upgrade_head(app, ctx) pip_freeze(app) start.execute_inner(app) check(app) if env.environment == 'production': systemd.enable(app, pathlib.Path(os.getcwd()) / 'systemd')
def process(name, **kwargs): """ Require a supervisor process to be running. Keyword arguments will be used to build the program configuration file. Some useful arguments are: - ``command``: complete command including arguments (**required**) - ``directory``: absolute path to the working directory - ``user``: run the process as this user - ``stdout_logfile``: absolute path to the log file You should refer to the `supervisor documentation`_ for the complete list of allowed arguments. .. note:: the default values for the following arguments differs from the ``supervisor`` defaults: - ``autorestart``: defaults to ``true`` - ``redirect_stderr``: defaults to ``true`` Example:: from fabtools import require require.supervisor.process('myapp', command='/path/to/venv/bin/myapp --config production.ini --someflag', directory='/path/to/working/dir', user='******', stdout_logfile='/path/to/logs/myapp.log', ) .. _supervisor documentation: http://supervisord.org/configuration.html#program-x-section-values """ from fabtools.require import file as require_file from fabtools.require.deb import package as require_deb_package from fabtools.require.rpm import package as require_rpm_package from fabtools.require.arch import package as require_arch_package from fabtools.require.service import started as require_started family = distrib_family() if family == 'debian': require_deb_package('supervisor') require_started('supervisor') elif family == 'redhat': require_rpm_package('supervisor') require_started('supervisord') elif distrib_id() is 'Archlinux': require_arch_package('supervisor') require_started('supervisord') # Set default parameters params = {} params.update(kwargs) params.setdefault('autorestart', 'true') params.setdefault('redirect_stderr', 'true') # Build config file from parameters lines = [] lines.append('[program:%(name)s]' % locals()) for key, value in sorted(params.items()): lines.append("%s=%s" % (key, value)) # Upload config file if family == 'debian': filename = '/etc/supervisor/conf.d/%(name)s.conf' % locals() elif family in ['redhat', 'arch']: filename = '/etc/supervisord.d/%(name)s.ini' % locals() else: raise UnsupportedFamily(supported=['debian', 'redhat', 'arch']) with watch(filename, callback=update_config, use_sudo=True): require_file(filename, contents='\n'.join(lines), use_sudo=True) # Start the process if needed if process_status(name) == 'STOPPED': start_process(name)
def site(server_name, template_contents=None, template_source=None, enabled=True, check_config=True, **kwargs): """ Require an nginx site. You must provide a template for the site configuration, either as a string (*template_contents*) or as the path to a local template file (*template_source*). :: from fabtools import require CONFIG_TPL = ''' server { listen %(port)d; server_name %(server_name)s %(server_alias)s; root %(docroot)s; access_log /var/log/nginx/%(server_name)s.log; }''' require.nginx.site('example.com', template_contents=CONFIG_TPL, port=80, server_alias='www.example.com', docroot='/var/www/mysite', ) .. seealso:: :py:func:`fabtools.require.files.template_file` """ family = distrib_family() # nginx-common is always installed if nginx exists if family == 'debian' and not is_deb_installed('nginx-common'): server() elif family == 'redhat' and not is_rpm_installed('nginx-common'): server() elif distrib_id() is 'Archlinux' and not is_arch_installed('nginx-common'): server() config_filename = '/etc/nginx/sites-available/%s.conf' % server_name context = { 'port': 80, } context.update(kwargs) context['server_name'] = server_name template_file(config_filename, template_contents, template_source, context, use_sudo=True) link_filename = '/etc/nginx/sites-enabled/%s.conf' % server_name if enabled: if not is_link(link_filename): run_as_root("ln -s %(config_filename)s %(link_filename)s" % locals()) # Make sure we don't break the config if check_config: with settings(hide('running', 'warnings'), warn_only=True): if run_as_root('nginx -t').failed: run_as_root("rm %(link_filename)s" % locals()) message = red("Error in %(server_name)s nginx site config (disabling for safety)" % locals()) abort(message) else: if is_link(link_filename): run_as_root("rm %(link_filename)s" % locals()) reload_service('nginx')