diff --git a/changelogs/fragments/6127-yarn-ignore-warnings.yml b/changelogs/fragments/6127-yarn-ignore-warnings.yml new file mode 100644 index 0000000000..f094838edb --- /dev/null +++ b/changelogs/fragments/6127-yarn-ignore-warnings.yml @@ -0,0 +1,2 @@ +bugfixes: + - yarn - fixes bug where yarn module tasks would fail when warnings were emitted from Yarn. The ``yarn.list`` method was not filtering out warnings (https://github.com/ansible-collections/community.general/issues/6127). diff --git a/plugins/modules/yarn.py b/plugins/modules/yarn.py index 02cfc4f8be..c278951d5e 100644 --- a/plugins/modules/yarn.py +++ b/plugins/modules/yarn.py @@ -226,6 +226,15 @@ class Yarn(object): return None, None + def _process_yarn_error(self, err): + try: + # We need to filter for errors, since Yarn warnings are included in stderr + for line in err.splitlines(): + if json.loads(line)['type'] == 'error': + self.module.fail_json(msg=err) + except Exception: + self.module.fail_json(msg="Unexpected stderr output from Yarn: %s" % err, stderr=err) + def list(self): cmd = ['list', '--depth=0', '--json'] @@ -240,8 +249,7 @@ class Yarn(object): # because it only only lists binaries, but `yarn global add` can install libraries too. result, error = self._exec(cmd, run_in_check_mode=True, check_rc=False, unsupported_with_global=True) - if error: - self.module.fail_json(msg=error) + self._process_yarn_error(error) for json_line in result.strip().split('\n'): data = json.loads(json_line) @@ -279,9 +287,7 @@ class Yarn(object): cmd_result, err = self._exec(['outdated', '--json'], True, False, unsupported_with_global=True) # the package.json in the global dir is missing a license field, so warnings are expected on stderr - for line in err.splitlines(): - if json.loads(line)['type'] == 'error': - self.module.fail_json(msg=err) + self._process_yarn_error(err) if not cmd_result: return outdated