def symlink(): """ Updates symlink stuff to the current deployed version """ # TODO : really usefull ? (eg : for php apps ...) fabric.api.sudo( "ln -nfs %(shared_path)s/log %(current_release)s/log" % { 'shared_path': env.remote_shared_path, 'current_release': env.remote_current_release }) if env.has_key('cfg_shared_files'): for cfg_shared_file in env.cfg_shared_files: fabric.api.sudo( "ln -nfs %(shared_path)s/config/%(file_name)s %(current_release)s/%(file)s" % { 'shared_path': env.remote_shared_path, 'current_release': env.remote_current_release, 'file': cfg_shared_file, 'file_name': os.path.basename(cfg_shared_file) }) if env.has_key('extra_symlink_dirs'): for extra_symlink_dir in env.extra_symlink_dirs: fabric.api.sudo( "ln -nfs %(shared_path)s/%(dir_name)s %(current_release)s/%(dir_name)s" % { 'shared_path': env.remote_shared_path, 'current_release': env.remote_current_release, 'dir_name': extra_symlink_dir })
def symlink(): """ Updates symlink stuff to the current deployed version """ # TODO : really usefull ? (eg : for php apps ...) fabric.api.sudo( "ln -nfs %(shared_path)s/log %(current_release)s/log" % {"shared_path": env.remote_shared_path, "current_release": env.remote_current_release} ) if env.has_key("cfg_shared_files"): for cfg_shared_file in env.cfg_shared_files: fabric.api.sudo( "ln -nfs %(shared_path)s/config/%(file_name)s %(current_release)s/%(file)s" % { "shared_path": env.remote_shared_path, "current_release": env.remote_current_release, "file": cfg_shared_file, "file_name": os.path.basename(cfg_shared_file), } ) if env.has_key("extra_symlink_dirs"): for extra_symlink_dir in env.extra_symlink_dirs: fabric.api.sudo( "ln -nfs %(shared_path)s/%(dir_name)s %(current_release)s/%(dir_name)s" % { "shared_path": env.remote_shared_path, "current_release": env.remote_current_release, "dir_name": extra_symlink_dir, } )
def set_environment(e): # Copy the environment name into each environments, even though only one is being used for name in environments: environments[name]['name'] = name # Apply the environment env.update(e) # Ensure that the sites dict exists if not env.get('sites'): env['sites'] = {} # Apply any default settings if environments.has_key('defaults'): for setting in environments['defaults']: if not env.has_key(setting): env[setting] = environments['defaults'][setting] # Apply default site settings to each site if env.has_key('sites') and env['sites'].has_key('defaults'): for site in env['sites'].values(): for setting in env['sites']['defaults']: if not site.has_key(setting): site[setting] = env['sites']['defaults'][setting] del env['sites']['defaults'] # Copy the site name into each of the sites and set the default type for name in env['sites']: env['sites'][name]['name'] = name if not env['sites'][name].has_key('type'): env['sites'][name]['type'] = SiteType.DJANGO
def _get_svn_user_and_pass(): if not env.has_key('svnuser') or len(env.svnuser) == 0: # prompt user for username prompt('Enter SVN username:'******'svnuser') if not env.has_key('svnpass') or len(env.svnpass) == 0: # prompt user for password env.svnpass = getpass.getpass('Enter SVN password:')
def _setup_local_environment(): """Setup a localhost environment based on system variables. """ env.logger.info("Get local environment") if not env.has_key("user"): env.user = os.environ["USER"] if not env.has_key("java_home"): env.java_home = os.environ.get("JAVA_HOME", "/usr/lib/jvm/java-6-openjdk")
def rollback_code(): """Rolls back to the previously deployed version""" if not env.has_key('releases'): releases() if env.has_key('previous_release'): sudo("ln -nfs %(previous_release)s %(current_path)s && rm -rf %(current_release)s" % { 'current_release':env.current_release, 'previous_release':env.previous_release, 'current_path':env.current_path }) else: print "no releases older then current" sys.exit(1)
def common_deploy(): if not env.has_key('releases_path') or not env.has_key('packages'): abort("Call *_env before this task.") from time import time env.current_release = "%(releases_path)s/%(time).0f" % { 'releases_path': env.releases_path, 'time': time() } run("mkdir -p %(target_dir)s" % {'target_dir': env.current_release}) for p in env.packages: put(p, env.current_release)
def remote(command, shell=True, pty=True, combine_stderr=True): '''Runs a remote command using either `run()` or `sudo()`. If `env.use_sudo` is exists and is true, `sudo()` is used. Otherwise, `run()` is used. Using sudo, if `env.sudo_user` is set, the value of that expression will be passed to `sudo()` as the `user` parameter. Otherwise, the command will be executed without a `user` parameter.''' if not (env.has_key("use_sudo") and env.use_sudo): return fab.run(command, shell, pty, combine_stderr) else: if env.has_key("sudo_user"): return fab.sudo(command, shell, pty, combine_stderr, user=env.sudo_user) else: return fab.sudo(command, shell, pty, combine_stderr)
def rollback_code(): """Rolls back to the previously deployed version""" if not env.has_key('releases'): releases() if env.has_key('previous_release'): sudo( "ln -nfs %(previous_release)s %(current_path)s && rm -rf %(current_release)s" % { 'current_release': env.current_release, 'previous_release': env.previous_release, 'current_path': env.current_path }) else: print "no releases older then current" sys.exit(1)
def update_env(): """Update servers environment on the remote servers""" if not env.has_key('current_release'): releases() activate_virtualenv() run("%(pip_path)s install -r %(current_release)s/%(env_file)s" % { 'pip_path': fabconf['PIP_PATH'], 'current_release':env.current_release, 'env_file':env.env_file }) permissions()
def symboliclink(): if not env.has_key('current_release'): releases() local("ln -nfs %(current_release)s %(catalina_base)s/ROOT" % { 'current_release': env.current_release, 'catalina_base': env.catalina_base })
def install_requirements(revision=None, path_to_requirements=None, upgrade=True, use_sudo=True, user=None, path_to_log=None): """ Install requirements with PIP. To install into a virtualenv use the :ref:`vitualenv.activate` context manager. :path_to_requirements: path to requirements file; default is: `*deploy_path*/app/*revision*/requirements.txt` :upgrade: when installing requirements fetch updates. :revision: A specific revision name. """ if not path_to_requirements: path_to_requirements = paths.package_path(revision, 'requirements.txt') parameters = ['install'] if env.has_key('proxy'): parameters.append('--proxy=%s' % env.proxy) if upgrade: parameters.append('--upgrade') if not path_to_log: path_to_log = paths.deploy_path('var/pip.log') parameters.append('-r %s' % path_to_requirements) utils.run_as('pip ' + ' '.join(parameters), use_sudo, user)
def setup_ubuntu(): default_dist = "maverick" default_version = "10.10" env.sources_file = "/etc/apt/sources.list" version = (env.get("dist_name", default_dist), env.get("dist_version", default_version)) sources = [ "deb http://us.archive.ubuntu.com/ubuntu/ %s universe", "deb-src http://us.archive.ubuntu.com/ubuntu/ %s universe", "deb http://us.archive.ubuntu.com/ubuntu/ %s-updates universe", "deb-src http://us.archive.ubuntu.com/ubuntu/ %s-updates universe", "deb http://us.archive.ubuntu.com/ubuntu/ %s multiverse", "deb-src http://us.archive.ubuntu.com/ubuntu/ %s multiverse", "deb http://us.archive.ubuntu.com/ubuntu/ %s-updates multiverse", "deb-src http://us.archive.ubuntu.com/ubuntu/ %s-updates multiverse", "ppa:sun-java-community-team/sun-java6", # sun-java "deb http://downloads.mongodb.org/distros/ubuntu % s 10gen", # mongodb "deb http://cran.stat.ucla.edu/bin/linux/ubuntu %s/", # lastest R versions "deb http://nebc.nox.ac.uk/bio-linux/ unstable bio-linux", # Bio-Linux "deb http://archive.cloudera.com/debian %s-cdh3 contrib", # Hadoop "deb http://ppa.launchpad.net/freenx-team/ppa/ubuntu lucid main", # FreeNX PPA "deb http://download.virtualbox.org/virtualbox/debian %s contrib", # virtualbox ] env.std_sources = _add_source_versions(version, sources) env.python_version_ext = "" if not env.has_key("java_home"): # XXX look for a way to find JAVA_HOME automatically env.java_home = "/usr/lib/jvm/java-6-openjdk"
def update_environment(): """ update server environment """ if not env.has_key('current_release'): releases() run('{0} {1}'.format(env.virtualenv, env.current_release)) run('{0}/bin/pip install -r {0}/requirements.txt'.format( env.current_release))
def decorated(*args, **kwargs): env.setdefault('git_branch', 'master') env.setdefault('python_bin', 'python') env.setdefault('remote_owner', 'www-data') env.setdefault('remote_group', 'www-data') env.setdefault('domain_path', "%(base_dir)s/%(app_name)s" % \ { 'base_dir':env.base_dir, 'app_name':env.app_name }) env.setdefault('current_path', "%(domain_path)s/current" % \ { 'domain_path':env.domain_path }) env.setdefault('releases_path', "%(domain_path)s/releases" % \ { 'domain_path':env.domain_path }) env.setdefault('shared_path', "%(domain_path)s/shared" % \ { 'domain_path':env.domain_path }) if not env.has_key('releases'): if dir_exists(env.releases_path): env.releases = sorted( run('ls -x %(releases_path)s' % { 'releases_path': env.releases_path }).split()) if len(env.releases) >= 1: env.current_revision = env.releases[-1] env.current_release = "%(releases_path)s/%(current_revision)s" % \ { 'releases_path':env.releases_path, 'current_revision':env.current_revision } if len(env.releases) > 1: env.previous_revision = env.releases[-2] env.previous_release = "%(releases_path)s/%(previous_revision)s" % \ { 'releases_path':env.releases_path, 'previous_revision':env.previous_revision } return func(*args, **kwargs)
def symboliclink(): if not env.has_key("current_release"): releases() local( "ln -nfs %(current_release)s %(catalina_base)s/ROOT" % {"current_release": env.current_release, "catalina_base": env.catalina_base} )
def _setup_scientificlinux(): env.logger.info("ScientificLinux setup") if not hasattr(env, "python_version_ext"): env.python_version_ext = "" env.pip_cmd = "pip-python" if not env.has_key("java_home"): env.java_home = "/etc/alternatives/java_sdk"
def restart(): """ restart the server using configured restart command """ if (env.has_key('restart_command_is_sudo') and env.restart_command_is_sudo == 'True'): sudo(env.restart_command) else: run(env.restart_command)
def update_environment(): """ update server environment """ if not env.has_key('current_release'): releases() run('{0} {1}'.format(env.virtualenv, env.current_release)) run('{0}/bin/pip install -r {0}/requirements.txt'. format(env.current_release))
def _setup_deb_general(): """Shared settings for different debian based/derived distributions. """ env.logger.debug("Debian-shared setup") env.sources_file = "/etc/apt/sources.list.d/cloudbiolinux.list" env.global_sources_file = "/etc/apt/sources.list" env.apt_preferences_file = "/etc/apt/preferences" if not hasattr(env, "python_version_ext"): env.python_version_ext = "" if not hasattr(env, "ruby_version_ext"): env.ruby_version_ext = "1.9.1" if not env.has_key("java_home"): # Try to determine java location from update-alternatives java_home = "/usr/lib/jvm/java-7-openjdk-amd64" with quiet(): java_info = env.safe_run_output("update-alternatives --display java") for line in java_info.split("\n"): if line.strip().startswith("link currently points to"): java_home = line.split()[-1].strip() java_home = java_home.replace("/jre/bin/java", "") env.java_home = java_home shared_sources = [ "deb http://download.virtualbox.org/virtualbox/debian %s contrib", # virtualbox ] return shared_sources
def changeUnixPassword(self,user,password=None,sudo=False): """ Change Unix password for <user> with [password] (default: None) , prompted for the user ( Warning: this method is unsecure with shell history) in [sudo] mode (default False) """ from crypt import crypt from getpass import getpass self.needSudo = eval(str(sudo).capitalize()) if not env.has_key('changeUnixPassword'): env.changeUnixPassword = {} if not env.changeUnixPassword.has_key(user): if not password is None: env.changeUnixPassword[user] = crypt(password, 'salt') else: password = getpass('Enter a new password for user %s:' % user) password2 = getpass('Please re-enter the password for user %s:' % user) if password != password2: print(red("ERROR:")+" the two passwords you've entered does not matched") return False env.changeUnixPassword[user] = crypt(password, 'salt') result = self._fabrun('usermod --password %s %s' % (env.changeUnixPassword[user], user), False) if result.succeeded: print(env.host+"|password "+green("SUCCESSFULLY")+" updated for <"+blue(user)+"> user") return True else: print(env.host+"|"+red("FAILED")+" to update password for <"+blue(user)+"> user. Reason: <"+yellow(result)+">") return False
def migrate(): """Run the migrate task""" if not env.has_key('current_release'): releases() with cd(env.current_release): run("source env/bin/activate; python %(app_name)s/manage.py syncdb --migrate --noinput" % {'app_name': env.app_name})
def decorated(*args, **kwargs): env.setdefault('use_sudo', True) env.setdefault('git_branch', 'master') env.setdefault('python_bin', 'python') env.setdefault('remote_owner', 'www-data') env.setdefault('remote_group', 'www-data') env.setdefault('pip_install_command', 'pip install -r requirements.txt') env.setdefault('domain_path', "%(base_dir)s/%(app_name)s" % \ { 'base_dir':env.base_dir, 'app_name':env.app_name }) env.setdefault('current_path', "%(domain_path)s/current" % \ { 'domain_path':env.domain_path }) env.setdefault('releases_path', "%(domain_path)s/releases" % \ { 'domain_path':env.domain_path }) env.setdefault('shared_path', "%(domain_path)s/shared" % \ { 'domain_path':env.domain_path }) if not env.has_key('releases'): if dir_exists(env.releases_path): env.releases = sorted(run('ls -x %(releases_path)s' % { 'releases_path':env.releases_path }).split()) if len(env.releases) >= 1: env.current_revision = env.releases[-1] env.current_release = "%(releases_path)s/%(current_revision)s" % \ { 'releases_path':env.releases_path, 'current_revision':env.current_revision } if len(env.releases) > 1: env.previous_revision = env.releases[-2] env.previous_release = "%(releases_path)s/%(previous_revision)s" % \ { 'releases_path':env.releases_path, 'previous_revision':env.previous_revision } return func(*args, **kwargs)
def common_symlink(): if not env.has_key('current_release'): execute(common_releases) run("ln -nfs %(current_release)s %(current_path)s" % { 'current_release': env.current_release, 'current_path': env.current_path })
def _setup_deb_general(): """Shared settings for different debian based/derived distributions. """ env.logger.debug("Debian-shared setup") env.sources_file = "/etc/apt/sources.list.d/cloudbiolinux.list" env.global_sources_file = "/etc/apt/sources.list" env.apt_preferences_file = "/etc/apt/preferences" if not hasattr(env, "python_version_ext"): env.python_version_ext = "" if not hasattr(env, "ruby_version_ext"): env.ruby_version_ext = "1.9.1" if not env.has_key("java_home"): # Try to determine java location from update-alternatives java_home = "/usr/lib/jvm/java-7-openjdk-amd64" with quiet(): java_info = env.safe_run_output( "update-alternatives --display java") for line in java_info.split("\n"): if line.strip().startswith("link currently points to"): java_home = line.split()[-1].strip() java_home = java_home.replace("/jre/bin/java", "") env.java_home = java_home shared_sources = [ "deb http://nebc.nerc.ac.uk/bio-linux/ unstable bio-linux", # Bio-Linux "deb http://download.virtualbox.org/virtualbox/debian %s contrib", # virtualbox ] return shared_sources
def _setup_centos(): env.logger.info("CentOS setup") env.python_version_ext = "2.6" env.ruby_version_ext = "" env.pip_cmd = "pip-python" if not env.has_key("java_home"): env.java_home = "/etc/alternatives/java_sdk"
def copy_config(): """Copy custom config to the remote servers""" if not env.has_key('releases'): #определяем последний релиз, в который нам надо положить конфиг releases() put("%s" % env.config_file, "/tmp/config.php") sudo("cp /tmp/config.php %(current_release)s/config/" % { 'current_release':env.current_release }) run("rm /tmp/config.php")
def symlink(): """Updates the symlink to the most recently deployed version""" if not env.has_key('current_release'): releases() run("ln -nfs %(current_release)s %(current_path)s" % { 'current_release': env.current_release, 'current_path': env.current_path }) run("ln -nfs %(shared_path)s/log %(current_release)s/log" % { 'shared_path': env.shared_path, 'current_release': env.current_release }) run("ln -nfs %(shared_path)s/index %(current_release)s/index" % { 'shared_path': env.shared_path, 'current_release': env.current_release }) run("ln -nfs %(shared_path)s/cdlm.db %(current_release)s/cdlm.db" % { 'shared_path': env.shared_path, 'current_release': env.current_release }) run( "ln -nfs %(shared_path)s/system/local.py %(current_release)s/%(app_name)s/local.py" % { 'shared_path': env.shared_path, 'current_release': env.current_release, 'app_name': env.app_name }) run("ln -nfs %(current_release)s/env/src/django/django/contrib/admin/media %(current_release)s/%(app_name)s/media/admin" % { 'current_release': env.current_release, 'app_name': env.app_name })
def symlink(): """Updates the symlink to the most recently deployed version""" if not env.has_key('current_release'): releases() run("ln -nfs %(current_release)s %(current_path)s" % { 'current_release': env.current_release, 'current_path': env.current_path }) run("ln -nfs %(shared_path)s/log %(current_release)s/log" % { 'shared_path': env.shared_path, 'current_release': env.current_release }) run("ln -nfs %(shared_path)s/pictures %(current_release)s/eloue/media/pictures" % { 'shared_path': env.shared_path, 'current_release': env.current_release }) run( "ln -nfs %(shared_path)s/system/local.py %(current_release)s/%(app_name)s/local.py" % { 'shared_path': env.shared_path, 'current_release': env.current_release, 'app_name': env.app_name }) run("ln -nfs %(current_release)s/env/lib/python2.6/site-packages/django/contrib/admin/media %(current_release)s/%(app_name)s/media/admin" % { 'current_release': env.current_release, 'app_name': env.app_name })
def _install_php(self): """ Install Php and adapters for nginx and postgres """ vars = {'DBNAME': self.env.scf_dbname, 'USERNAME': self.env.scf_username, 'PASSWORD': self.env.scf_password, 'DEST_DIR': self.env.scf_dest_dir, 'SITE_NAME': self.env.scf_site_name} run("sudo sed -i 's/max_execution_time = 30$/max_execution_time = 600/g' /etc/php5/fpm/php.ini") run("sudo sed -i 's/;request_terminate_timeout = 0$/request_terminate_timeout = 600/g' /etc/php5/fpm/pool.d/www.conf") run("sudo sed -i 's/www-data/galaxy/g' /etc/php5/fpm/pool.d/www.conf") run("sudo sed -i 's/local all postgres peer/local all postgres trust/g' /etc/postgresql/9.1/main/pg_hba.conf") if env.has_key("scf_standalone"): env.nginx_upload_store_path = env.nginx_upload_store_path_SCF_standalone run("mkdir -p %(DEST_DIR)s " % vars) with cd(vars['DEST_DIR']): run("sudo rm -rf gvl-scf") run("git clone git://github.com/Traksewt/gvl-scf.git") with cd('gvl-scf/sites/all/modules/custom'): run("git clone git://github.com/Traksewt/journalstream.git") run("wget https://s3-ap-southeast-2.amazonaws.com/gvl-scf/fix-permissions.sh") run("chmod +x fix-permissions.sh") run("sudo ./fix-permissions.sh --drupal_path=gvl-scf --drupal_user=ubuntu") run("cp gvl-scf/sites/default/default.settings.php gvl-scf/sites/default/settings.php") run("sed -i 's/\[DATABASE\]/%(DBNAME)s/g' gvl-scf/sites/default/settings.php" % vars) run("sed -i 's/\[USERNAME\]/%(USERNAME)s/g' gvl-scf/sites/default/settings.php" % vars) run("sed -i 's/\[PASSWORD\]/%(PASSWORD)s/g' gvl-scf/sites/default/settings.php" % vars) # run("sudo sed -i 's/\#write_enable=YES/write_enable=YES/g' /etc/vsftpd.conf" ) run("sudo sed -i 's/cgi\.fix_pathinfo=0/cgi\.fix_pathinfo=1/g' /etc/php5/fpm/php.ini") run("chmod 770 gvl-scf/sites/default/settings.php") run("sudo chown ubuntu:galaxy gvl-scf/sites/default/settings.php") run("echo \"localhost:5432:*:%(USERNAME)s:%(PASSWORD)s\" > ~/.pgpass" % vars) run("chmod 600 ~/.pgpass") run("sudo /etc/init.d/postgresql reload") with settings(warn_only=True): run("dropdb -U postgres %(DBNAME)s" % vars) run("psql -U postgres -c \" DROP ROLE %(USERNAME)s;\"" % vars) #echo "Dropped old database" run("psql -U postgres -c \" CREATE ROLE %(USERNAME)s LOGIN CREATEDB PASSWORD '%(PASSWORD)s';\"" % vars) run("createdb -U postgres --encoding=UTF8 --owner=%(USERNAME)s %(DBNAME)s" % vars) #echo "Created new database: $DBNAME" run("sudo /etc/init.d/php5-fpm restart") with settings(warn_only=True): run("sudo killall nginx") run("sudo mkdir -p %(nginx_upload_store_path)s" % env) run("sudo /opt/galaxy/sbin/nginx") with cd("%(DEST_DIR)s/gvl-scf" % vars): run("drush site-install scf_vm --yes --account-name=admin --account-pass=%(PASSWORD)s --db-url=pgsql://%(USERNAME)s:%(PASSWORD)s@localhost/%(DBNAME)s --site-name=%(SITE_NAME)s" % vars) run("drush cc all") run("rm ~/.pgpass") with cd(vars['DEST_DIR']): run("sudo /etc/init.d/php5-fpm restart") run("rm fix-permissions.sh") run("sudo chown -R ubuntu:galaxy %(DEST_DIR)s " % vars)
def _update_env(): """Update servers environment on the remote servers""" if not env.has_key('current_release'): _releases() run("cd %(current_release)s; virtualenv --no-site-packages ." % { 'current_release':env.current_release }) run("cd %(current_release)s; ./bin/pip -q install -r %(domain_path)s/%(env_file)s" % { 'current_release':env.current_release, 'domain_path':env.domain_path, 'env_file':env.env_file }) _install_custom_remotely_pysqlite() _remote_configure_ini()
def create_release_archive(): """Checkouts and tars the project""" if not env.has_key('new_release_name'): env.new_release_name = "%.0f" % time() env.new_release_gz = "%s%s" % (env.new_release_name, ".tar.gz") with lcd(env.tmp_dir): local("git clone %s %s" % (env.repo, env.new_release_name)) local("gnutar -cvzf %s %s" % (env.new_release_gz, env.new_release_name))
def application_packages(update=False): """ Installs all packages for django webapp """ fabtools.require.deb.packages(['gettext'], update=update) if env.remote_python_version >= 3: fabric.api.execute(pydiploy.require.system.check_python3_install, version='python%s' % env.remote_python_version) fabric.api.execute(pydiploy.require.python.utils.python_pkg) if env.has_key('extra_ppa_to_install'): fabric.api.execute( pydiploy.require.system.install_extra_ppa, env.extra_ppa_to_install) if env.has_key('extra_source_to_install'): fabric.api.execute( pydiploy.require.system.install_extra_source, env.extra_source_to_install) if env.has_key('extra_pkg_to_install'): fabric.api.execute( pydiploy.require.system.install_extra_packages, env.extra_pkg_to_install)
def symlink(): """Updates the symlink to the most recently deployed version""" if not env.has_key('current_release'): releases() sudo("ln -nfs %(current_release)s %(current_path)s" % { 'current_release': env.current_release, 'current_path': env.current_path })
def _collectstatic(): print 'collectstatic', sys.stdout.flush() if not env.has_key('current_release'): _releases() with cd('%(current_release)s/django' % env): r = run('%(activate)s; python manage.py collectstatic --noinput' % env, quiet=True) _print_result(r)
def _compilemessages(): print 'compilemessages', sys.stdout.flush() if not env.has_key('current_release'): _releases() with cd('%(current_release)s/%(app_name)s' % env): r = run('%(activate)s; python manage.py compilemessages' % env, quiet=True) _print_result(r)
def _migrate(): """south migrate""" print 'migrate', sys.stdout.flush() if not env.has_key('current_release'): _releases() with cd('%(current_release)s/django' % env): r = run('%(activate)s; python manage.py migrate' % env, quiet=True) _print_result(r)
def _update_env(): """Update servers environment on the remote servers""" print 'pip install' sys.stdout.flush() if not env.has_key('current_release'): _releases() with cd(env.current_release): run('%(activate)s; pip install -r %(pip_file)s' % env, quiet=True)
def symlink(): if not env.has_key('current_release'): releases() links = ('log', '.env') for link in links: run('ln -nfs {1}/shared/{0} {2}/{0}'.format(link, env.base_dir, env.current_release)) run('ln -nfs {0} {1}/current'.format(env.current_release, env.base_dir))
def update_env(): """Update servers environment on the remote servers""" if not env.has_key('current_release'): releases() with cd(env.current_release): run("virtualenv -q --no-site-packages --unzip-setuptools env") run("env/bin/pip -q install -r %(env_file)s" % {'env_file': env.env_file}) permissions()
def migrate(): """Run the migrate task""" if not env.has_key('current_release'): releases() run("source %(current_release)s/env/bin/activate; cd %(current_release)s; python %(app_name)s/manage.py migrate" % { 'current_release': env.current_release, 'app_name': env.app_name })
def update_env(): """Update servers environment on the remote servers""" if not env.has_key('current_release'): releases() run("cd %(current_release)s; virtualenv --no-site-packages --unzip-setuptools env" % {'current_release': env.current_release}) run("pip -q install -E %(current_release)s/env -r %(current_release)s/%(env_file)s" % {'current_release': env.current_release, 'env_file': env.env_file}) permissions()
def cleanup(): """Clean up old releases""" if not env.has_key('releases'): releases() if len(env.releases) > 3: directories = env.releases directories.reverse() del directories[:3] env.directories = ' '.join([ "%(releases_path)s/%(release)s" % { 'releases_path':env.releases_path, 'release':release } for release in directories ]) run("rm -rf %(directories)s" % { 'directories':env.directories })
def cleanup(): """Clean up old releases""" if not env.has_key('releases'): _releases() if len(env.releases) > 3: directories = env.releases directories.reverse() del directories[:3] env.directories = ' '.join([ '%(releases_path)s/%(release)s' % { 'releases_path':env.releases_path, 'release':release } for release in directories ]) run('rm -rf %(directories)s' % env, quiet=True)
def symlink(): """Updates the symlink to the most recently deployed version""" if not env.has_key('current_release'): releases() run("ln -nfs %(current_release)s %(current_path)s" % { 'current_release':env.current_release, 'current_path':env.current_path }) run("ln -nfs %(shared_path)s/log %(current_release)s/log" % { 'shared_path':env.shared_path, 'current_release':env.current_release }) run("ln -nfs %(shared_path)s/index %(current_release)s/index" % { 'shared_path':env.shared_path, 'current_release':env.current_release }) run("ln -nfs %(shared_path)s/cdlm.db %(current_release)s/cdlm.db" % { 'shared_path':env.shared_path, 'current_release':env.current_release }) run("ln -nfs %(shared_path)s/system/local.py %(current_release)s/%(app_name)s/local.py" % { 'shared_path':env.shared_path, 'current_release':env.current_release, 'app_name':env.app_name }) run("ln -nfs %(current_release)s/env/src/django/django/contrib/admin/media %(current_release)s/%(app_name)s/media/admin" % { 'current_release':env.current_release, 'app_name':env.app_name })
def copy_config(): """Copy custom config to the remote servers""" if not env.has_key( 'releases' ): #определяем последний релиз, в который нам надо положить конфиг releases() put("%s" % env.config_file, "/tmp/config.php") sudo("cp /tmp/config.php %(current_release)s/config/" % {'current_release': env.current_release}) run("rm /tmp/config.php")
def cleanup(): """Clean up old releases""" if not env.has_key('releases'): releases() if len(env.releases) > 10: directories = env.releases directories.reverse() del directories[:10] env.directories = ' '.join([ "%(releases_path)s/%(release)s" % { 'releases_path':env.releases_path, 'release':release } for release in directories ]) sudo("rm -rf %(directories)s" % { 'directories':env.directories })
def rollback_code(): """Rolls back to the previously deployed version""" if not env.has_key('releases'): releases() if len(env.releases) >= 2: env.current_release = env.releases[-1] env.previous_revision = env.releases[-2] env.current_release = "%(releases_path)s/%(current_revision)s" % { 'releases_path':env.releases_path, 'current_revision':env.current_revision } env.previous_release = "%(releases_path)s/%(previous_revision)s" % { 'releases_path':env.releases_path, 'previous_revision':env.previous_revision } run("rm %(current_path)s; ln -s %(previous_release)s %(current_path)s && rm -rf %(current_release)s" % { 'current_release':env.current_release, 'previous_release':env.previous_release, 'current_path':env.current_path })
def cleanup(): green_alert('Cleanning up old release(s)') if not env.has_key('releases'): _releases() if len(env.releases) > env.keep_releases: directories = env.releases directories.reverse() del directories[:env.keep_releases] with cd(env.releases_path): run('rm -rf %s' % ' '.join(directories))
def _setup_centos(): env.logger.info("CentOS setup") if not hasattr(env, "python_version_ext"): # use installed anaconda version instead of package 2.6 #env.python_version_ext = "2.6" env.python_version_ext = "" #env.pip_cmd = "pip-python" if not hasattr(env, "ruby_version_ext"): env.ruby_version_ext = "" if not env.has_key("java_home"): env.java_home = "/etc/alternatives/java_sdk"
def update_env(): """Update servers environment on the remote servers""" if not env.has_key('current_release'): releases() run("cd %(current_release)s; virtualenv --no-site-packages --unzip-setuptools env" % {'current_release': env.current_release}) run("pip -q install -E %(current_release)s/env -r %(current_release)s/%(env_file)s" % { 'current_release': env.current_release, 'env_file': env.env_file }) permissions()
def get_jinja(): global jinja if jinja == None: template_dirs = [ env['otto.blog.template_dir'] ] if env.has_key('otto.template_dir'): template_dirs.insert(0, env['otto.template_dir']) jinja = Environment( loader=FileSystemLoader(template_dirs), extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.autoescape'], autoescape=True, ) return jinja