@ -22,7 +22,9 @@
DOCUMENTATION = '''
- - -
module : composer
author : " Dimitrios Tydeas Mengidis (@dmtrs) "
author :
- " Dimitrios Tydeas Mengidis (@dmtrs) "
- " René Moser (@resmo) "
short_description : Dependency Manager for PHP
version_added : " 1.6 "
description :
@ -94,7 +96,7 @@ requirements:
- php
- composer installed in bin path ( recommended / usr / local / bin )
notes :
- Default options that are always appended in each execution are - - no - ansi , - - no - progress, and - - no - interaction
- Default options that are always appended in each execution are - - no - ansi , - - no - interaction and - - no - progress if available .
'''
EXAMPLES = '''
@ -105,12 +107,27 @@ EXAMPLES = '''
import os
import re
try :
import json
except ImportError :
import simplejson as json
def parse_out ( string ) :
return re . sub ( " \ s+ " , " " , string ) . strip ( )
def has_changed ( string ) :
return " Nothing to install or update " not in string
def get_available_options ( module , command = ' install ' ) :
# get all availabe options from a composer command using composer help to json
rc , out , err = composer_command ( module , " help %s --format=json " % command )
if rc != 0 :
output = parse_out ( err )
module . fail_json ( msg = output )
command_help_json = json . loads ( out )
return command_help_json [ ' definition ' ] [ ' options ' ]
def composer_command ( module , command , options = [ ] ) :
php_path = module . get_bin_path ( " php " , True , [ " /usr/local/bin " ] )
composer_path = module . get_bin_path ( " composer " , True , [ " /usr/local/bin " ] )
@ -133,33 +150,40 @@ def main():
supports_check_mode = True
)
# Get composer command with fallback to default
command = module . params [ ' command ' ]
available_options = get_available_options ( module = module , command = command )
options = [ ]
# Default options
options . append ( ' --no-ansi ' )
options . append ( ' --no-progress ' )
options . append ( ' --no-interaction ' )
default_options = [
' no-ansi ' ,
' no-interaction ' ,
' no-progress ' ,
]
options . extend ( [ ' --working-dir ' , os . path . abspath ( module . params [ ' working_dir ' ] ) ] )
for option in default_options :
if option in available_options :
option = " -- %s " % option
options . append ( option )
# Get composer command with fallback to default
command = module . params [ ' command ' ]
options . extend ( [ ' --working-dir ' , os . path . abspath ( module . params [ ' working_dir ' ] ) ] )
# Prepare options
if module . params [ ' prefer_source ' ] :
options . append ( ' --prefer-source ' )
if module . params [ ' prefer_dist ' ] :
options . append ( ' --prefer-dist ' )
if module . params [ ' no_dev ' ] :
options . append ( ' --no-dev ' )
if module . params [ ' no_scripts ' ] :
options . append ( ' --no-scripts ' )
if module . params [ ' no_plugins ' ] :
options . append ( ' --no-plugins ' )
if module . params [ ' optimize_autoloader ' ] :
options . append ( ' --optimize-autoloader ' )
if module . params [ ' ignore_platform_reqs ' ] :
options . append ( ' --ignore-platform-reqs ' )
option_params = {
' prefer_source ' : ' prefer-source ' ,
' prefer_dist ' : ' prefer-dist ' ,
' no_dev ' : ' no-dev ' ,
' no_scripts ' : ' no-scripts ' ,
' no_plugins ' : ' no_plugins ' ,
' optimize_autoloader ' : ' optimize-autoloader ' ,
' ignore_platform_reqs ' : ' ignore-platform-reqs ' ,
}
for param , option in option_params . iteritems ( ) :
if module . params . get ( param ) and option in available_options :
option = " -- %s " % option
options . append ( option )
if module . check_mode :
options . append ( ' --dry-run ' )
@ -176,5 +200,5 @@ def main():
# import module snippets
from ansible . module_utils . basic import *
main ( )
if __name__ == ' __main__ ' :
main ( )