Fixes some issues where Tower would not emit the password on prompts

Carat seems to only want to match newlines or the beginning of the
string, since we seem to get CR+LF this seems to keep the carat from
matching so here we're expanding the regex matches.

This also extends support for DZDO where it was only originally added
on ad-hoc commands inadvertantly.

Remove PMRUN support since that was never merged into core
This commit is contained in:
Matthew Jones
2017-01-26 11:19:23 -05:00
parent 4771b2efc0
commit e15273c993

View File

@@ -1043,21 +1043,23 @@ class RunJob(BaseTask):
def get_password_prompts(self): def get_password_prompts(self):
d = super(RunJob, self).get_password_prompts() d = super(RunJob, self).get_password_prompts()
d[re.compile(r'^Enter passphrase for .*:\s*?$', re.M)] = 'ssh_key_unlock' d[re.compile(r'Enter passphrase for .*:\s*?$', re.M)] = 'ssh_key_unlock'
d[re.compile(r'^Bad passphrase, try again for .*:\s*?$', re.M)] = '' d[re.compile(r'Bad passphrase, try again for .*:\s*?$', re.M)] = ''
d[re.compile(r'^sudo password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'sudo password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^SUDO password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'SUDO password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^su password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'su password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^SU password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'SU password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^PBRUN password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'PBRUN password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^pbrun password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'pbrun password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^PFEXEC password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'PFEXEC password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^pfexec password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'pfexec password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^RUNAS password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'RUNAS password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^runas password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'runas password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^SSH password:\s*?$', re.M)] = 'ssh_password' d[re.compile(r'DZDO password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^Password:\s*?$', re.M)] = 'ssh_password' d[re.compile(r'dzdo password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^Vault password:\s*?$', re.M)] = 'vault_password' d[re.compile(r'SSH password:\s*?$', re.M)] = 'ssh_password'
d[re.compile(r'Password:\s*?$', re.M)] = 'ssh_password'
d[re.compile(r'Vault password:\s*?$', re.M)] = 'vault_password'
return d return d
def get_stdout_handle(self, instance): def get_stdout_handle(self, instance):
@@ -1293,12 +1295,12 @@ class RunProjectUpdate(BaseTask):
def get_password_prompts(self): def get_password_prompts(self):
d = super(RunProjectUpdate, self).get_password_prompts() d = super(RunProjectUpdate, self).get_password_prompts()
d[re.compile(r'^Username for.*:\s*?$', re.M)] = 'scm_username' d[re.compile(r'Username for.*:\s*?$', re.M)] = 'scm_username'
d[re.compile(r'^Password for.*:\s*?$', re.M)] = 'scm_password' d[re.compile(r'Password for.*:\s*?$', re.M)] = 'scm_password'
d[re.compile(r'^Password:\s*?$', re.M)] = 'scm_password' d[re.compile(r'Password:\s*?$', re.M)] = 'scm_password'
d[re.compile(r'^\S+?@\S+?\'s\s+?password:\s*?$', re.M)] = 'scm_password' d[re.compile(r'\S+?@\S+?\'s\s+?password:\s*?$', re.M)] = 'scm_password'
d[re.compile(r'^Enter passphrase for .*:\s*?$', re.M)] = 'scm_key_unlock' d[re.compile(r'Enter passphrase for .*:\s*?$', re.M)] = 'scm_key_unlock'
d[re.compile(r'^Bad passphrase, try again for .*:\s*?$', re.M)] = '' d[re.compile(r'Bad passphrase, try again for .*:\s*?$', re.M)] = ''
# FIXME: Configure whether we should auto accept host keys? # FIXME: Configure whether we should auto accept host keys?
d[re.compile(r'^Are you sure you want to continue connecting \(yes/no\)\?\s*?$', re.M)] = 'yes' d[re.compile(r'^Are you sure you want to continue connecting \(yes/no\)\?\s*?$', re.M)] = 'yes'
return d return d
@@ -1805,24 +1807,22 @@ class RunAdHocCommand(BaseTask):
def get_password_prompts(self): def get_password_prompts(self):
d = super(RunAdHocCommand, self).get_password_prompts() d = super(RunAdHocCommand, self).get_password_prompts()
d[re.compile(r'^Enter passphrase for .*:\s*?$', re.M)] = 'ssh_key_unlock' d[re.compile(r'Enter passphrase for .*:\s*?$', re.M)] = 'ssh_key_unlock'
d[re.compile(r'^Bad passphrase, try again for .*:\s*?$', re.M)] = '' d[re.compile(r'Bad passphrase, try again for .*:\s*?$', re.M)] = ''
d[re.compile(r'^sudo password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'sudo password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^SUDO password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'SUDO password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^su password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'su password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^SU password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'SU password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^PBRUN password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'PBRUN password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^pbrun password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'pbrun password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^PFEXEC password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'PFEXEC password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^pfexec password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'pfexec password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^RUNAS password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'RUNAS password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^runas password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'runas password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^DZDO password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'DZDO password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^dzdo password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'dzdo password.*:\s*?$', re.M)] = 'become_password'
d[re.compile(r'^PMRUN password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'SSH password:\s*?$', re.M)] = 'ssh_password'
d[re.compile(r'^pmrun password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'Password:\s*?$', re.M)] = 'ssh_password'
d[re.compile(r'^SSH password:\s*?$', re.M)] = 'ssh_password'
d[re.compile(r'^Password:\s*?$', re.M)] = 'ssh_password'
return d return d
def get_stdout_handle(self, instance): def get_stdout_handle(self, instance):