def setupnode(rollback=False, overwrite=False): """ Install a baseline host. Can be run multiple times rollback=True to teardown the installation This is just used to prevent having to rollback a virtual machine """ #either fabric or manage.py will setup the roles & hosts env #setup_environ handles passing all the project settings into env #and any woven.global_settings not already defined. if not rollback: port_changed = change_ssh_port() #We need to assume that if the port does not get changed that #it has already been done and thus we do not need to disable root if port_changed: disable_root() upload_ssh_key() restrict_ssh() uncomment_sources() upgrade_ubuntu() setup_ufw() install_packages(overwrite=overwrite) upload_etc() set_timezone() stop_webservers() start_webservers() else: #rollback in reverse order of installation #The only things we don't rollback are the updates set_timezone(rollback) install_packages(rollback) setup_ufw(rollback) uncomment_sources(rollback) restrict_ssh(rollback) upload_ssh_key(rollback) disable_root(rollback) change_ssh_port(rollback)
def activate(): """ Activates the version specified in ``env.project_version`` if it is different from the current active version. An active version is just the version that is symlinked. """ env_path = '/'.join([deployment_root(),'env',env.project_fullname]) if not exists(env_path): print env.host,"ERROR: The version",env.project_version,"does not exist at" print env_path sys.exit(1) active = active_version() if env.patch or active <> env.project_fullname: stop_webservers() if not env.patch and active <> env.project_fullname: if env.verbosity: print env.host, "ACTIVATING version", env_path if not env.nomigration: sync_db() #south migration if 'south' in env.INSTALLED_APPS and not env.nomigration and not env.manualmigration: migration() if env.manualmigration or env.MANUAL_MIGRATION: manual_migration() #activate sites activate_sites = [''.join([d.replace('.','_'),'-',env.project_version,'.conf']) for d in domain_sites()] site_paths = ['/etc/apache2','/etc/nginx'] #disable existing sites for path in site_paths: for site in _ls_sites('/'.join([path,'sites-enabled'])): if site not in activate_sites: sudo("rm %s/sites-enabled/%s"% (path,site)) #activate new sites for path in site_paths: for site in activate_sites: if not exists('/'.join([path,'sites-enabled',site])): sudo("chmod 644 %s" % '/'.join([path,'sites-available',site])) sudo("ln -s %s/sites-available/%s %s/sites-enabled/%s"% (path,site,path,site)) if env.verbosity: print " * enabled", "%s/sites-enabled/%s"% (path,site) #delete existing symlink ln_path = '/'.join([deployment_root(),'env',env.project_name]) run('rm -f '+ln_path) run('ln -s %s %s'% (env_path,ln_path)) if env.verbosity: print env.host,env.project_fullname, "ACTIVATED" else: if env.verbosity and not env.patch: print env.project_fullname,"is the active version" if env.patch or active <> env.project_fullname: start_webservers() print return