diff --git a/salt/modules/tomcat.py b/salt/modules/tomcat.py index 1480691fda..51ab80a81b 100644 --- a/salt/modules/tomcat.py +++ b/salt/modules/tomcat.py @@ -2,15 +2,32 @@ ''' Support for Tomcat -This module uses the manager webapp to manage Apache tomcat webapps -If the manager webapp is not configured some of the functions won't work +This module uses the manager webapp to manage Apache tomcat webapps. +If the manager webapp is not configured some of the functions won't work. -The following grains/pillar should be set:: +.. note:: - tomcat-manager:user: admin user name - tomcat-manager:passwd: password + The config format was changed in 2014.7.0, but backwards compatibility for + the old-style config will be in the 2014.7.1 release. -and also configure a user in the conf/tomcat-users.xml file:: +The following grains/pillar should be set: + +.. code-block:: yaml + + tomcat-manager: + user: + password: + +or the old format: + +.. code-block:: yaml + + tomcat-manager.user: + tomcat-manager.password: + +Also configure a user in the conf/tomcat-users.xml file: + +.. code-block:: xml @@ -18,27 +35,27 @@ and also configure a user in the conf/tomcat-users.xml file:: -Notes: +.. note:: -- More information about tomcat manager: - http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html -- if you use only this module for deployments you've might want to strict - access to the manager only from localhost for more info: - http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html#Configuring_Manager_Application_Access -- Tested on: + - More information about tomcat manager: + http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html + - if you use only this module for deployments you've might want to strict + access to the manager only from localhost for more info: + http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html#Configuring_Manager_Application_Access + - Tested on: - JVM Vendor: - Sun Microsystems Inc. - JVM Version: - 1.6.0_43-b01 - OS Architecture: - amd64 - OS Name: - Linux - OS Version: - 2.6.32-358.el6.x86_64 - Tomcat Version: - Apache Tomcat/7.0.37 + JVM Vendor: + Sun Microsystems Inc. + JVM Version: + 1.6.0_43-b01 + OS Architecture: + amd64 + OS Name: + Linux + OS Version: + 2.6.32-358.el6.x86_64 + Tomcat Version: + Apache Tomcat/7.0.37 ''' # Import python libs @@ -56,6 +73,19 @@ __func_alias__ = { 'reload_': 'reload' } +# Support old-style grains/pillar +# config as well as new. +__valid_configs = { + 'user': [ + 'tomcat-manager.user', + 'tomcat-manager:user' + ], + 'passwd': [ + 'tomcat-manager.passwd', + 'tomcat-manager:passwd' + ] +} + def __virtual__(): ''' @@ -82,22 +112,26 @@ def __catalina_home(): def _get_credentials(): ''' - Get the username and password from opts, grains & pillar + Get the username and password from opts, grains, or pillar ''' - ret = { 'user': False, 'passwd': False } + # Loop through opts, grains, and pillar + # Return the first acceptable configuration found for item in ret: - entry = 'tomcat-manager:{0}'.format(item) for struct in [__opts__, __grains__, __pillar__]: - ret[item] = salt.utils.traverse_dict_and_list(struct, entry, '_|-') - if ret[item] == '_|-': - ret[item] = False - else: - break + # Look for the config key + # Support old-style config format and new + for config_key in __valid_configs[item]: + value = salt.utils.traverse_dict_and_list(struct, + config_key, + None) + if value: + ret[item] = value + break return ret['user'], ret['passwd'] @@ -645,3 +679,31 @@ def signal(signal=None): __catalina_home(), valid_signals[signal] ) __salt__['cmd.run'](cmd) + + +if __name__ == '__main__': + ''' + Allow testing from the CLI + ''' # pylint: disable=W0105 + __opts__ = {} + __grains__ = {} + __pillar__ = { + 'tomcat-manager.user': 'foobar', + 'tomcat-manager.passwd': 'barfoo1!', + } + + old_format_creds = _get_credentials() + + __pillar__ = { + 'tomcat-manager': { + 'user': 'foobar', + 'passwd': 'barfoo1!' + } + } + + new_format_creds = _get_credentials() + + if old_format_creds == new_format_creds: + print 'Config backwards compatible' + else: + print 'Config not backwards compatible'