def doit(self, dest, server, app): if self.options.dir_name == "source": self.deploy(dest, server, app, "source") elif self.options.dir_name == "conf": self.get_conf(dest, server, app) if not self.options.debug: self.deploy(dest, server, app, "conf") else: safe_exit("Not support dir_name.\n")
def __init__(self, command, options): self.command = command self.options = options self.settings = get_settings() if not self.settings.has_key("PROJECT_NAME") or not self.settings.get("PROJECT_NAME"): safe_exit("You must specify PROJECT_NAME in your settings file.\n", 1) self.PROJECT_NAME = self.settings.get("PROJECT_NAME") self.AVAILABLE_DIR = self.settings.get("AVAILABLE_DIR", "/var/%s/available"%(self.PROJECT_NAME)) self.ENABLED_DIR = self.settings.get("ENABLED_DIR", "/var/%s/enabled"%(self.PROJECT_NAME)) self.LOG_DIR = self.settings.get("LOG_DIR", "/var/%s/log"%(self.PROJECT_NAME)) self.DATA_DIR = self.settings.get("DATA_DIR", "/var/%s/data"%(self.PROJECT_NAME))
def connect_host(dest, server): config = get_config(dest) dns = config.get(server, 'dns') user = config.get(server, 'user') key_filename = config.get(server, 'key_filename') if config.has_option(server, 'key_filename') else None password = config.get(server, 'password') if config.has_option(server, 'password') else None if not key_filename and not password: safe_exit("Cann't find key_filename or password in %s %s config file.\n"%(dest, server), 1, sys.stderr) env.host_string = join_host_strings(user, dns) env.password = password env.key_filename = key_filename
def doit(self, dest, server, app): dir_name = self.options.dir_name # dir_name = "source" or "conf" if dir_name not in ["source", "conf"]: safe_exit("Not support dir_name.\n") ensure_remote_dir(os.path.join(self.AVAILABLE_DIR, app, dir_name)) current_version = self._get_current_version_number(app, dir_name) version = self._get_previous_version_number(app, dir_name) if not version: safe_exit("%s %s %s %s version number error.\n"%(dest, server, app, dir_name), 1) available = os.path.join(self.AVAILABLE_DIR, app, dir_name, version) enabled = os.path.join(self.ENABLED_DIR, app) run("rm -f %s"%(os.path.join(enabled, dir_name))) run("ln -s %s %s"%(os.path.join(available, dir_name), os.path.join(enabled, dir_name))) run("rm -r %s"%(os.path.join(self.AVAILABLE_DIR, app, dir_name, current_version)))
def deploy(self, dest, server, app, dir_name): # dir_name is a sub directory of app. eg. source, conf . ensure_remote_dir(os.path.join(self.AVAILABLE_DIR, app, dir_name)) version = self._get_next_version_number(app, dir_name) available = os.path.join(self.AVAILABLE_DIR, app, dir_name, version) enabled = os.path.join(self.ENABLED_DIR, app) ensure_remote_dir(available) ensure_remote_dir(enabled) if dir_name == "source": local("cd %s; tar cvzf /tmp/%s.tar.gz --exclude='.svn' ./%s;"%(os.path.join(PROJECT_DIR, app), dir_name, dir_name)) elif dir_name == "conf": local("cd %s; tar cvzf /tmp/%s.tar.gz --exclude='.svn' ./%s;"% (os.path.join("/tmp/", self.PROJECT_NAME, dest, server, app), dir_name, dir_name)) else: safe_exit("Not support dir_name.\n") put("/tmp/%s.tar.gz"%(dir_name), available) with cd(available): run("tar zvxf %s.tar.gz"%(dir_name)) run("rm -f %s"%(os.path.join(enabled, dir_name))) run("ln -s %s %s"%(os.path.join(available, dir_name), os.path.join(enabled, dir_name)))