def execute(self): if self.want.normalized_commands: result = self.want.normalized_commands else: result = self.normalize_commands(self.want.raw_commands) self.want.update({'normalized_commands': result}) if not result: return False self.notify_non_idempotent_commands(self.want.normalized_commands) commands = self.parse_commands() retries = self.want.retries conditionals = [Conditional(c) for c in self.want.wait_for] if self.module.check_mode: return while retries > 0: responses = self._execute(commands) self._check_known_errors(responses) for item in list(conditionals): if item(responses): if self.want.match == 'any': conditionals = list() break conditionals.remove(item) if not conditionals: break time.sleep(self.want.interval) retries -= 1 else: failed_conditions = [item.raw for item in conditionals] errmsg = 'One or more conditional statements have not been satisfied.' raise FailedConditionsError(errmsg, failed_conditions) stdout_lines = self._to_lines(responses) changes = { 'stdout': responses, 'stdout_lines': stdout_lines, 'executed_commands': self.commands } if self.want.warn: changes['warnings'] = self.warnings self.changes = Parameters(params=changes, module=self.module) if any(x for x in self.want.normalized_commands if x.startswith(self.changed_command_prefixes)): return True return False
def execute(self): warnings = list() changed = ('tmsh modify', 'tmsh create', 'tmsh delete') commands = self.parse_commands(warnings) wait_for = self.want.wait_for or list() retries = self.want.retries conditionals = [Conditional(c) for c in wait_for] if self.module.check_mode: return while retries > 0: if is_cli(self.module) and HAS_CLI_TRANSPORT: if self.is_tmsh(): for command in commands: command['command'] = command['command'][4:].strip() responses = self._run_commands(self.module, commands) else: responses = self.execute_on_device(commands) for item in list(conditionals): if item(responses): if self.want.match == 'any': conditionals = list() break conditionals.remove(item) if not conditionals: break time.sleep(self.want.interval) retries -= 1 else: failed_conditions = [item.raw for item in conditionals] errmsg = 'One or more conditional statements have not been satisfied' raise FailedConditionsError(errmsg, failed_conditions) changes = { 'stdout': responses, 'stdout_lines': self._to_lines(responses) } if self.want.warn: changes['warnings'] = warnings self.changes = Parameters(params=changes, module=self.module) if any(x for x in self.want.user_commands if x.startswith(changed)): return True return False
def execute(self): warnings = list() commands = self.parse_commands(warnings) wait_for = self.want.wait_for or list() retries = self.want.retries conditionals = [Conditional(c) for c in wait_for] if self.module.check_mode: return while retries > 0: responses = self.execute_on_device(commands) for item in list(conditionals): if item(responses): if self.want.match == 'any': return item conditionals.remove(item) if not conditionals: break time.sleep(self.want.interval) retries -= 1 else: failed_conditions = [item.raw for item in conditionals] errmsg = 'One or more conditional statements have not been satisfied' raise FailedConditionsError(errmsg, failed_conditions) self.changes = Parameters({ 'stdout': responses, 'stdout_lines': self._to_lines(responses), 'warnings': warnings })