@ -1,16 +1,17 @@
#!/usr/bin/python
#!/usr/bin/python
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
# Copyright (c) 2017 Chris Hoffman <christopher.hoffman@gmail.com>
# (c) 2013, Chris Hoffman <christopher.hoffman@gmail.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# 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
from __future__ import absolute_import , division , print_function
__metaclass__ = type
__metaclass__ = type
ANSIBLE_METADATA = { ' metadata_version ' : ' 1.1 ' ,
ANSIBLE_METADATA = {
' status ' : [ ' preview ' ] ,
' metadata_version ' : ' 1.1 ' ,
' supported_by ' : ' community ' }
' status ' : [ ' preview ' ] ,
' supported_by ' : ' community '
}
DOCUMENTATION = '''
DOCUMENTATION = '''
@ -115,12 +116,20 @@ EXAMPLES = '''
state : present
state : present
'''
'''
import json
import os
import os
import re
import re
from ansible . module_utils . basic import AnsibleModule
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 ) :
class Npm ( object ) :
def __init__ ( self , module , * * kwargs ) :
def __init__ ( self , module , * * kwargs ) :
@ -132,13 +141,14 @@ class Npm(object):
self . registry = kwargs [ ' registry ' ]
self . registry = kwargs [ ' registry ' ]
self . production = kwargs [ ' production ' ]
self . production = kwargs [ ' production ' ]
self . ignore_scripts = kwargs [ ' ignore_scripts ' ]
self . ignore_scripts = kwargs [ ' ignore_scripts ' ]
self . state = kwargs [ ' state ' ]
if kwargs [ ' executable ' ] :
if kwargs [ ' executable ' ] :
self . executable = kwargs [ ' executable ' ] . split ( ' ' )
self . executable = kwargs [ ' executable ' ] . split ( ' ' )
else :
else :
self . executable = [ module . get_bin_path ( ' npm ' , True ) ]
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 )
self . name_version = self . name + ' @ ' + str ( self . version )
else :
else :
self . name_version = self . name
self . name_version = self . name
@ -149,7 +159,7 @@ class Npm(object):
if self . glbl :
if self . glbl :
cmd . append ( ' --global ' )
cmd . append ( ' --global ' )
if self . production :
if self . production and ( ' install ' in cmd or ' update ' in cmd ) :
cmd . append ( ' --production ' )
cmd . append ( ' --production ' )
if self . ignore_scripts :
if self . ignore_scripts :
cmd . append ( ' --ignore-scripts ' )
cmd . append ( ' --ignore-scripts ' )
@ -159,7 +169,7 @@ class Npm(object):
cmd . append ( ' --registry ' )
cmd . append ( ' --registry ' )
cmd . append ( self . registry )
cmd . append ( self . registry )
# If path is specified, cd into that path and run the command.
# If path is specified, cd into that path and run the command.
cwd = None
cwd = None
if self . path :
if self . path :
if not os . path . exists ( self . path ) :
if not os . path . exists ( self . path ) :
@ -188,7 +198,7 @@ class Npm(object):
installed . append ( dep )
installed . append ( dep )
if self . name and self . name not in installed :
if self . name and self . name not in installed :
missing . append ( self . name )
missing . append ( self . name )
# Named dependency not installed
# Named dependency not installed
else :
else :
missing . append ( self . name )
missing . append ( self . name )
@ -248,8 +258,8 @@ def main():
if state == ' absent ' and not name :
if state == ' absent ' and not name :
module . fail_json ( msg = ' uninstalling a package is only available for named packages ' )
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 , \
npm = Npm ( module , name = name , path = path , version = version , glbl = glbl , production = production ,
executable = executable , registry = registry , ignore_scripts = ignore_scripts )
executable = executable , registry = registry , ignore_scripts = ignore_scripts , state = state )
changed = False
changed = False
if state == ' present ' :
if state == ' present ' :
@ -266,7 +276,7 @@ def main():
if len ( outdated ) :
if len ( outdated ) :
changed = True
changed = True
npm . update ( )
npm . update ( )
else : # absent
else : # absent
installed , missing = npm . list ( )
installed , missing = npm . list ( )
if name in installed :
if name in installed :
changed = True
changed = True