def clone(self, url, branch, envars, username, password, private_key): """ runs git clone URL """ command = self._get_command(url,branch) # Create git command with user and password if username and password: parsed = urlparse(url) if parsed.scheme in ('http', 'https'): command = command.replace('://', '://' + username + ':' + password + '@') elif parsed.scheme == 'ssh': command = command.replace('://', '://' + username + '@') elif private_key: helper, indetity = self._certificate_helper(private_key) envars['GIT_SSH'] = helper out, stdout, stderr = ecm.run_command(command=command, workdir=self.working_dir, envars=envars) result_exec = ecm.format_output(out, stdout, stderr) if not result_exec['out']: extra_msg = ecm.output("Source deployed successfully to '%s'" % self.working_dir) if self.old_dir: extra_msg += ecm.output("Old source files moved to '%s'" % self.old_dir) result_exec['stdout'] += extra_msg if private_key: try: os.unlink(helper) os.unlink(indetity) except: pass return result_exec
def clone(self, branch, envars, url, username, password, private_key): """ Downloads a file from a remote url and decompress it """ file_name = 'downloaded.file' tmp_dir = mkdtemp() file_downloaded = ecm.download_file( url=url, filename=tmp_dir + '/' + file_name, user=username, passwd=password ) if file_downloaded: extract = self._extract(file_downloaded) if extract: extract['head'] = '' if extract.get('stdout', None): extract['head'] = ecm.output("Source deployed successfully to '%s'" % self.working_dir) if extract.get('stdout', None) and self.old_dir: extract['head'] += ecm.output("Old source files moved to '%s'" % self.old_dir) else: rmtree(tmp_dir, ignore_errors=True) raise Exception("Unable to download file") # Clean and output rmtree(tmp_dir, ignore_errors=True) ret = { 'stdout': extract.get('head', '') + extract.get('stdout', ''), 'stderr': extract.get('stderr', 'Unable to download file'), 'out': extract.get('out', 1) } return ret
def cmd_configfile_run(self, *argv, **kwargs): """ Deploy a file Syntax: configfile.run[configfile,file,chown_user,chown_group,chmod,rotate,command,runas] """ code_base64 = kwargs.get('configfile', None) filename = kwargs.get('path', None) chown_user = kwargs.get('chown_user', None) chown_group = kwargs.get('chown_group', None) chmod = kwargs.get('chmod', None) rotate = kwargs.get('rotate', False) command = kwargs.get('command', None) runas = kwargs.get('command_runas', None) if not code_base64 or not filename: raise ecm.InvalidParameters(self.cmd_configfile_run.__doc__) ret = {'out': 0,'stdout': '','stderr': ''} try: if rotate and os.path.isfile(filename): new_file = filename + '_rotated_' + ecm.utime() move(filename, new_file) ret['stdout'] = ecm.output("Old configfile moved to '%s'" % new_file) # Write down file ecm.file_write(filename, b64decode(code_base64)) ret['stdout'] += ecm.output("Configfile created successfully at '%s'" % filename) except Exception as e: raise Exception("Unable to write configfile: %s" % e) try: # Chown to specified user/group if chown_user and chown_group and os.path.isfile(filename): ecm.chown(filename, chown_user, chown_group) ret['stdout'] += ecm.output("Owner changed to '%s':'%s'" % (chown_user, chown_group)) # Chown to specified user/group if chmod and os.path.isfile(filename): ecm.chmod(filename, chmod) ret['stdout'] += ecm.output("Owner changed to '%s':'%s'" % (chown_user, chown_group)) except Exception as e: raise Exception("Unable to change permissions for configfile: %s" % e) if command: working_dir = os.path.dirname(filename) out, stdout, stderr = ecm.run_command(command, runas=runas, workdir=working_dir) ret = ecm.format_output(out, stdout, stderr) return ret
def cmd_source_run(self, *argv, **kwargs): """ Syntax: source.run[path,source,branch,envars,facts,username,password,private_key,chown_user,chown_group,rotate,type] """ path = kwargs.get('path', None) url = kwargs.get('source', None) branch = kwargs.get('branch', None) user = kwargs.get('username', None) passwd = kwargs.get('password', None) private_key = kwargs.get('private_key', None) chown_user = kwargs.get('chown_user', None) chown_group = kwargs.get('chown_group', None) rotate = kwargs.get('rotate', True) extract = kwargs.get('extract', True) stype = kwargs.get('type', None) metadata = kwargs.get('metadata', None) if not path or not url or not stype: raise ecm.InvalidParameters(self.cmd_source_run.__doc__) if private_key: try: private_key = b64decode(private_key) except: raise ecm.InvalidParameters("Invalid private key format") if stype.upper() in ('URL', 'FILE'): source = FILE(path, rotate, extract) elif stype.upper() == 'GIT': source = GIT(path, rotate) elif stype.upper() == 'SVN': source = SVN(path, rotate) else: raise ecm.InvalidParameters("Unknown source") # Set environment variables before execution envars = ecm.metadata_to_env(metadata_b64=metadata) # Update metadata ecm.write_metadata(metadata_b64=metadata) retval = source.clone(url=url, branch=branch, envars=envars, username=user, password=passwd, private_key=private_key) # Chown to specified user/group if chown_user and chown_group and os.path.isdir(path): ecm.chown(path, chown_user, chown_group, recursive=True) retval['stdout'] += ecm.output("Owner changed to '%s':'%s'" % (chown_user, chown_group)) return self._return(retval)
def clone(self, url, branch, envars, username, password, private_key): """ svn co URL """ # Add username and password to url if username and password: url = url.replace('://', '://' + username + ':' + password + '@') command = self.svn_cmd + " co '" + url + "' ." out, stdout, stderr = ecm.run_command(command=command, workdir=self.working_dir, envars=envars) result_exec = ecm.format_output(out, stdout, stderr) if not result_exec['out']: extra_msg = ecm.output("Source deployed successfully to '%s'" % self.working_dir) if self.old_dir: extra_msg += ecm.output("Old source files moved to '%s'" % self.old_dir) if result_exec['stdout']: result_exec['stdout'] = extra_msg + result_exec['stdout'] else: result_exec['stdout'] = extra_msg return result_exec