npm: fix idempotence (#22238)

* npm: fix idempotence

* Better idempotency fix

More intelligently add --production rather than depending on hard coded order in args list
Cleanup boilderplate imports and license
PEP8 fixes
pull/25398/merge
pari- 7 years ago committed by Sam Doran
parent f9b3f4f934
commit 468e71bf71

@ -1,16 +1,17 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
# (c) 2013, Chris Hoffman <christopher.hoffman@gmail.com>
# Copyright (c) 2017 Chris Hoffman <christopher.hoffman@gmail.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import absolute_import, division, print_function
__metaclass__ = type
ANSIBLE_METADATA = {'metadata_version': '1.1',
ANSIBLE_METADATA = {
'metadata_version': '1.1',
'status': ['preview'],
'supported_by': 'community'}
'supported_by': 'community'
}
DOCUMENTATION = '''
@ -115,12 +116,20 @@ EXAMPLES = '''
state: present
'''
import json
import os
import re
from ansible.module_utils.basic import AnsibleModule
try:
import json
except ImportError:
try:
import simplejson as json
except ImportError:
# Let snippet from module_utils/basic.py return a proper error in this case
pass
class Npm(object):
def __init__(self, module, **kwargs):
@ -132,13 +141,14 @@ class Npm(object):
self.registry = kwargs['registry']
self.production = kwargs['production']
self.ignore_scripts = kwargs['ignore_scripts']
self.state = kwargs['state']
if kwargs['executable']:
self.executable = kwargs['executable'].split(' ')
else:
self.executable = [module.get_bin_path('npm', True)]
if kwargs['version']:
if kwargs['version'] and self.state != 'absent':
self.name_version = self.name + '@' + str(self.version)
else:
self.name_version = self.name
@ -149,7 +159,7 @@ class Npm(object):
if self.glbl:
cmd.append('--global')
if self.production:
if self.production and ('install' in cmd or 'update' in cmd):
cmd.append('--production')
if self.ignore_scripts:
cmd.append('--ignore-scripts')
@ -248,8 +258,8 @@ def main():
if state == 'absent' and not name:
module.fail_json(msg='uninstalling a package is only available for named packages')
npm = Npm(module, name=name, path=path, version=version, glbl=glbl, production=production, \
executable=executable, registry=registry, ignore_scripts=ignore_scripts)
npm = Npm(module, name=name, path=path, version=version, glbl=glbl, production=production,
executable=executable, registry=registry, ignore_scripts=ignore_scripts, state=state)
changed = False
if state == 'present':

@ -368,7 +368,6 @@ lib/ansible/modules/packaging/language/cpanm.py
lib/ansible/modules/packaging/language/easy_install.py
lib/ansible/modules/packaging/language/gem.py
lib/ansible/modules/packaging/language/maven_artifact.py
lib/ansible/modules/packaging/language/npm.py
lib/ansible/modules/packaging/language/pear.py
lib/ansible/modules/packaging/language/pip.py
lib/ansible/modules/packaging/os/apk.py

Loading…
Cancel
Save