Skip to content

Commit

Permalink
Updating yarn.list to not fail when when warnings are emitted (#6129)
Browse files Browse the repository at this point in the history
* Updating yarn.list to not fail when when warnings are emitted

* Adding changelog fragment

* Adding _process_yarn_error function

* - Adding back changes to the changelog fragment
- Fixing formatting

* Fix trailing whitespace

* Update plugins/modules/yarn.py

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
  • Loading branch information
JohnDaly and felixfontein authored Mar 14, 2023
1 parent e939cd0 commit df34569
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 5 deletions.
2 changes: 2 additions & 0 deletions changelogs/fragments/6127-yarn-ignore-warnings.yml
Original file line number Diff line number Diff line change
@@ -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).
16 changes: 11 additions & 5 deletions plugins/modules/yarn.py
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,15 @@ def _exec(self, args, run_in_check_mode=False, check_rc=True, unsupported_with_g

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']

Expand All @@ -240,8 +249,7 @@ def list(self):
# 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)
Expand Down Expand Up @@ -279,9 +287,7 @@ def list_outdated(self):
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
Expand Down

0 comments on commit df34569

Please sign in to comment.