def on_vars_prompt(self, varname, private=True, prompt=None, encrypt=None, confirm=False, salt_size=None, salt=None, default=None): if prompt and default is not None: msg = "%s [%s]: " % (prompt, default) elif prompt: msg = "%s: " % prompt else: msg = 'input for %s: ' % varname def do_prompt(prompt, private): if sys.stdout.encoding: msg = prompt.encode(sys.stdout.encoding) else: # when piping the output, or at other times when stdout # may not be the standard file descriptor, the stdout # encoding may not be set, so default to something sane msg = prompt.encode(locale.getpreferredencoding()) if private: return getpass.getpass(msg) return raw_input(msg) if confirm: while True: result = do_prompt(msg, private) second = do_prompt("confirm " + msg, private) if result == second: break display("***** VALUES ENTERED DO NOT MATCH ****", task_id=self.task_id) else: result = do_prompt(msg, private) # if result is false and default is not None if not result and default is not None: result = default if encrypt: result = utils.do_encrypt(result, encrypt, salt_size, salt) # handle utf-8 chars result = to_unicode(result, errors='strict') call_callback_module('playbook_on_vars_prompt', varname, private=private, prompt=prompt, encrypt=encrypt, confirm=confirm, salt_size=salt_size, salt=None, default=default) return result
def on_vars_prompt(self, varname, private=True, prompt=None, encrypt=None, confirm=False, salt_size=None, salt=None, default=None): if prompt and default is not None: msg = "%s [%s]: " % (prompt, default) elif prompt: msg = "%s: " % prompt else: msg = 'input for %s: ' % varname def do_prompt(prompt, private): if sys.stdout.encoding: msg = prompt.encode(sys.stdout.encoding) else: # when piping the output, or at other times when stdout # may not be the standard file descriptor, the stdout # encoding may not be set, so default to something sane msg = prompt.encode(locale.getpreferredencoding()) if private: return getpass.getpass(msg) return raw_input(msg) if confirm: while True: result = do_prompt(msg, private) second = do_prompt("confirm " + msg, private) if result == second: break display("***** VALUES ENTERED DO NOT MATCH ****") else: result = do_prompt(msg, private) # if result is false and default is not None if not result and default is not None: result = default if encrypt: result = utils.do_encrypt(result, encrypt, salt_size, salt) # handle utf-8 chars result = to_unicode(result, errors='strict') call_callback_module( 'playbook_on_vars_prompt', varname, private=private, prompt=prompt, encrypt=encrypt, confirm=confirm, salt_size=salt_size, salt=None, default=default ) return result
def on_vars_prompt(self, varname, private=True, prompt=None, encrypt=None, confirm=False, salt_size=None, salt=None, default=None): if prompt and default is not None: msg = "%s [%s]: " % (prompt, default) elif prompt: msg = "%s: " % prompt else: msg = 'input for %s: ' % varname def prompt(prompt, private): msg = prompt.encode(sys.stdout.encoding) if private: return getpass.getpass(msg) return raw_input(msg) if confirm: while True: result = prompt(msg, private) second = prompt("confirm " + msg, private) if result == second: break display("***** VALUES ENTERED DO NOT MATCH ****", self.sqs_response_queue, self.sqs_request_message) else: result = prompt(msg, private) # if result is false and default is not None if not result and default: result = default if encrypt: result = utils.do_encrypt(result, encrypt, salt_size, salt) #call_callback_module( 'playbook_on_vars_prompt', varname, private=private, prompt=prompt, # encrypt=encrypt, confirm=confirm, salt_size=salt_size, salt=None, default=default # ) return result
def run(self, terms, inject=None, **kwargs): terms = utils.listify_lookup_plugin_terms(terms, self.basedir, inject) ret = [] for term in terms: # you can't have escaped spaces in yor pathname params = term.split() relpath = params[0] paramvals = { 'length': LookupModule.LENGTH, 'encrypt': None, } # get non-default parameters if specified try: for param in params[1:]: name, value = param.split('=') assert (name in paramvals) if name == 'length': paramvals[name] = int(value) else: paramvals[name] = value except (ValueError, AssertionError) as e: raise errors.AnsibleError(e) length = paramvals['length'] encrypt = paramvals['encrypt'] # get password or create it if file doesn't exist path = utils.path_dwim(self.basedir, relpath) if not os.path.exists(path): pathdir = os.path.dirname(path) if not os.path.isdir(pathdir): os.makedirs(pathdir) chars = ascii_letters + digits + ".,:-_" password = ''.join(random.choice(chars) for _ in range(length)) if encrypt is not None: salt = self.random_salt() content = '%s salt=%s' % (password, salt) else: content = password with open(path, 'w') as f: f.write(content + '\n') else: content = open(path).read().rstrip() sep = content.find(' ') if sep >= 0: password = content[:sep] salt = content[sep + 1:].split('=')[1] else: password = content salt = None # crypt requested, add salt if missing if (encrypt is not None and not salt): salt = self.random_salt() content = '%s salt=%s' % (password, salt) with open(path, 'w') as f: f.write(content + '\n') # crypt not requested, remove salt if present elif (encrypt is None and salt): with open(path, 'w') as f: f.write(password + '\n') if encrypt: password = utils.do_encrypt(password, encrypt, salt=salt) ret.append(password) return ret
def run(self, terms, variables=None, **kwargs): ret = [] for term in terms: relpath, params = _parse_parameters(term) # get password or create it if file doesn't exist paths = self.get_paths(variables) foundPath = None for path in paths: path = os.path.join(path, relpath) if os.path.exists(path): foundPath = path break path = foundPath if not os.path.exists(path): pathdir = os.path.dirname(path) if not os.path.isdir(pathdir): try: os.makedirs(pathdir, mode=0o700) except OSError, e: raise AnsibleError( "cannot create the path for the password lookup: %s (error was %s)" % (pathdir, str(e))) chars = "".join([ getattr(string, c, c) for c in params['use_chars'] ]).replace('"', '').replace("'", '') password = ''.join( random.choice(chars) for _ in range(params['length'])) if params['encrypt'] is not None: salt = self.random_salt() content = '%s salt=%s' % (password, salt) else: content = password with open(path, 'w') as f: os.chmod(path, 0o600) f.write(content + '\n') else: content = open(path).read().rstrip() password = content salt = None try: sep = content.rindex(' salt=') except ValueError: # No salt pass else: salt = password[sep + len(' salt='):] password = content[:sep] # crypt requested, add salt if missing if params['encrypt'] is not None and salt is None: # crypt requested, add salt if missing salt = self.random_salt() content = '%s salt=%s' % (password, salt) with open(path, 'w') as f: os.chmod(path, 0o600) f.write(content + '\n') elif params['encrypt'] is None and salt: with open(path, 'w') as f: os.chmod(path, 0o600) f.write(password + '\n') if params['encrypt']: password = utils.do_encrypt(password, params['encrypt'], salt=salt) ret.append(password)
f.write(content + '\n') else: content = open(path).read().rstrip() sep = content.find(' ') if sep >= 0: password = content[:sep] salt = content[sep+1:].split('=')[1] else: password = content salt = None # crypt requested, add salt if missing if (encrypt is not None and not salt): salt = self.random_salt() content = '%s salt=%s' % (password, salt) with open(path, 'w') as f: f.write(content + '\n') # crypt not requested, remove salt if present elif (encrypt is None and salt): with open(path, 'w') as f: f.write(password + '\n') if encrypt: password = utils.do_encrypt(password, encrypt, salt=salt) ret.append(password) return ret
def run(self, terms, inject=None, **kwargs): terms = utils.listify_lookup_plugin_terms(terms, self.basedir, inject) ret = [] for term in terms: # you can't have escaped spaces in yor pathname params = term.split() relpath = params[0] paramvals = { 'length': LookupModule.LENGTH, 'encrypt': None, 'chars': ['ascii_letters','digits',".,:-_"], } # get non-default parameters if specified try: for param in params[1:]: name, value = param.split('=') assert(name in paramvals) if name == 'length': paramvals[name] = int(value) elif name == 'chars': use_chars=[] if ",," in value: use_chars.append(',') use_chars.extend(value.replace(',,',',').split(',')) paramvals['chars'] = use_chars else: paramvals[name] = value except (ValueError, AssertionError), e: raise errors.AnsibleError(e) length = paramvals['length'] encrypt = paramvals['encrypt'] use_chars = paramvals['chars'] # get password or create it if file doesn't exist path = utils.path_dwim(self.basedir, relpath) if not os.path.exists(path): pathdir = os.path.dirname(path) if not os.path.isdir(pathdir): os.makedirs(pathdir) chars = "".join([getattr(string,c,c) for c in use_chars]).replace('"','').replace("'",'') password = ''.join(random.choice(chars) for _ in range(length)) if encrypt is not None: salt = self.random_salt() content = '%s salt=%s' % (password, salt) else: content = password with open(path, 'w') as f: f.write(content + '\n') else: content = open(path).read().rstrip() sep = content.find(' ') if sep >= 0: password = content[:sep] salt = content[sep+1:].split('=')[1] else: password = content salt = None # crypt requested, add salt if missing if (encrypt is not None and not salt): salt = self.random_salt() content = '%s salt=%s' % (password, salt) with open(path, 'w') as f: f.write(content + '\n') # crypt not requested, remove salt if present elif (encrypt is None and salt): with open(path, 'w') as f: f.write(password + '\n') if encrypt: password = utils.do_encrypt(password, encrypt, salt=salt) ret.append(password)
def run(self, terms, variables=None, **kwargs): ret = [] for term in terms: relpath, params = _parse_parameters(term) # get password or create it if file doesn't exist paths = self.get_paths(variables) foundPath = None for path in paths: path = os.path.join(path, relpath) if os.path.exists(path): foundPath = path break path = foundPath if not os.path.exists(path): pathdir = os.path.dirname(path) if not os.path.isdir(pathdir): try: os.makedirs(pathdir, mode=0o700) except OSError, e: raise AnsibleError("cannot create the path for the password lookup: %s (error was %s)" % (pathdir, str(e))) chars = "".join([getattr(string,c,c) for c in params['use_chars']]).replace('"','').replace("'",'') password = ''.join(random.choice(chars) for _ in range(params['length'])) if params['encrypt'] is not None: salt = self.random_salt() content = '%s salt=%s' % (password, salt) else: content = password with open(path, 'w') as f: os.chmod(path, 0o600) f.write(content + '\n') else: content = open(path).read().rstrip() password = content salt = None try: sep = content.rindex(' salt=') except ValueError: # No salt pass else: salt = password[sep + len(' salt='):] password = content[:sep] # crypt requested, add salt if missing if params['encrypt'] is not None and salt is None: # crypt requested, add salt if missing salt = self.random_salt() content = '%s salt=%s' % (password, salt) with open(path, 'w') as f: os.chmod(path, 0o600) f.write(content + '\n') elif params['encrypt'] is None and salt: with open(path, 'w') as f: os.chmod(path, 0o600) f.write(password + '\n') if params['encrypt']: password = utils.do_encrypt(password, params['encrypt'], salt=salt) ret.append(password)
content = open(path).read().rstrip() sep = content.find(' ') if sep >= 0: password = content[:sep] salt = content[sep+1:].split('=')[1] else: password = content salt = None # crypt requested, add salt if missing if (encrypt is not None and not salt): salt = self.random_salt() content = '%s salt=%s' % (password, salt) with open(path, 'w') as f: os.chmod(path, 0600) f.write(content + '\n') # crypt not requested, remove salt if present elif (encrypt is None and salt): with open(path, 'w') as f: os.chmod(path, 0600) f.write(password + '\n') if encrypt: password = utils.do_encrypt(password, encrypt, salt=salt) ret.append(password) return ret
def run(self, terms, inject=None, **kwargs): terms = utils.listify_lookup_plugin_terms(terms, self.basedir, inject) ret = [] for term in terms: # you can't have escaped spaces in yor pathname params = term.split() relpath = params[0] paramvals = {"length": LookupModule.LENGTH, "encrypt": None} # get non-default parameters if specified try: for param in params[1:]: name, value = param.split("=") assert name in paramvals if name == "length": paramvals[name] = int(value) else: paramvals[name] = value except (ValueError, AssertionError) as e: raise errors.AnsibleError(e) length = paramvals["length"] encrypt = paramvals["encrypt"] # get password or create it if file doesn't exist path = utils.path_dwim(self.basedir, relpath) if not os.path.exists(path): pathdir = os.path.dirname(path) if not os.path.isdir(pathdir): os.makedirs(pathdir) chars = ascii_letters + digits + ".,:-_" password = "".join(random.choice(chars) for _ in range(length)) if encrypt is not None: salt = self.random_salt() content = "%s salt=%s" % (password, salt) else: content = password with open(path, "w") as f: f.write(content + "\n") else: content = open(path).read().rstrip() sep = content.find(" ") if sep >= 0: password = content[:sep] salt = content[sep + 1 :].split("=")[1] else: password = content salt = None # crypt requested, add salt if missing if encrypt is not None and not salt: salt = self.random_salt() content = "%s salt=%s" % (password, salt) with open(path, "w") as f: f.write(content + "\n") # crypt not requested, remove salt if present elif encrypt is None and salt: with open(path, "w") as f: f.write(password + "\n") if encrypt: password = utils.do_encrypt(password, encrypt, salt=salt) ret.append(password) return ret