@ -59,8 +59,10 @@ options:
- C ( present ) will make sure the package is installed .
C ( latest ) will make sure the latest version of the package is installed .
C ( absent ) will make sure the specified package is not installed .
C ( dist - upgrade ) will make sure the latest version of all installed packages from all enabled repositories is installed .
- When using C ( dist - upgrade ) , I ( name ) should be C ( ' * ' ) .
required : false
choices : [ present , latest , absent ]
choices : [ present , latest , absent , dist - upgrade ]
default : " present "
type :
description :
@ -108,6 +110,12 @@ options:
required : false
default : " no "
choices : [ " yes " , " no " ]
extra_args :
version_added : " 2.4 "
required : false
description :
- Add additional options to C ( zypper ) command .
- Options should be supplied in a single line as if given in the command line .
# informational: requirements for nodes
requirements :
@ -160,6 +168,12 @@ EXAMPLES = '''
state : latest
type : patch
# Perform a dist-upgrade with additional arguments
- zypper :
name : ' * '
state : dist - upgrade
extra_args : ' --no-allow-vendor-change --allow-arch-change '
# Refresh repositories and update package "openssl"
- zypper :
name : openssl
@ -299,7 +313,7 @@ def parse_zypper_xml(m, cmd, fail_not_found=True, packages=None):
def get_cmd ( m , subcommand ) :
" puts together the basic zypper command arguments with those passed to the module "
is_install = subcommand in [ ' install ' , ' update ' , ' patch ' ]
is_install = subcommand in [ ' install ' , ' update ' , ' patch ' , ' dist-upgrade ' ]
is_refresh = subcommand == ' refresh '
cmd = [ ' /usr/bin/zypper ' , ' --quiet ' , ' --non-interactive ' , ' --xmlout ' ]
@ -308,7 +322,7 @@ def get_cmd(m, subcommand):
cmd . append ( ' --no-gpg-checks ' )
cmd . append ( subcommand )
if subcommand != ' patch ' and not is_refresh :
if subcommand not in [ ' patch ' , ' dist-upgrade ' ] and not is_refresh :
cmd . extend ( [ ' --type ' , m . params [ ' type ' ] ] )
if m . check_mode and subcommand != ' search ' :
cmd . append ( ' --dry-run ' )
@ -320,6 +334,10 @@ def get_cmd(m, subcommand):
cmd . append ( ' --force ' )
if m . params [ ' oldpackage ' ] :
cmd . append ( ' --oldpackage ' )
if m . params [ ' extra_args ' ] :
args_list = m . params [ ' extra_args ' ] . split ( ' ' )
cmd . extend ( args_list )
return cmd
@ -394,6 +412,8 @@ def package_update_all(m):
retvals = { ' rc ' : 0 , ' stdout ' : ' ' , ' stderr ' : ' ' }
if m . params [ ' type ' ] == ' patch ' :
cmdname = ' patch '
elif m . params [ ' state ' ] == ' dist-upgrade ' :
cmdname = ' dist-upgrade '
else :
cmdname = ' update '
@ -446,13 +466,14 @@ def main():
module = AnsibleModule (
argument_spec = dict (
name = dict ( required = True , aliases = [ ' pkg ' ] , type = ' list ' ) ,
state = dict ( required = False , default = ' present ' , choices = [ ' absent ' , ' installed ' , ' latest ' , ' present ' , ' removed ' ]) ,
state = dict ( required = False , default = ' present ' , choices = [ ' absent ' , ' installed ' , ' latest ' , ' present ' , ' removed ' , ' dist-upgrade ' ]) ,
type = dict ( required = False , default = ' package ' , choices = [ ' package ' , ' patch ' , ' pattern ' , ' product ' , ' srcpackage ' , ' application ' ] ) ,
disable_gpg_check = dict ( required = False , default = ' no ' , type = ' bool ' ) ,
disable_recommends = dict ( required = False , default = ' yes ' , type = ' bool ' ) ,
force = dict ( required = False , default = ' no ' , type = ' bool ' ) ,
update_cache = dict ( required = False , aliases = [ ' refresh ' ] , default = ' no ' , type = ' bool ' ) ,
oldpackage = dict ( required = False , default = ' no ' , type = ' bool ' ) ,
extra_args = dict ( required = False , default = None ) ,
) ,
supports_check_mode = True
)
@ -472,8 +493,10 @@ def main():
module . fail_json ( msg = " Zypper refresh run failed. " , * * retvals )
# Perform requested action
if name == [ ' * ' ] and state == ' latest ' :
if name == [ ' * ' ] and state in [ ' latest ' , ' dist-upgrade ' ] :
packages_changed , retvals = package_update_all ( module )
elif name != [ ' * ' ] and state == ' dist-upgrade ' :
module . fail_json ( msg = " Can not dist-upgrade specific packages. " )
else :
if state in [ ' absent ' , ' removed ' ] :
packages_changed , retvals = package_absent ( module , name )