%PDF- %PDF-
Direktori : /usr/lib/python2.7/site-packages/salt/states/ |
Current File : //usr/lib/python2.7/site-packages/salt/states/marathon_app.py |
# -*- coding: utf-8 -*- ''' Configure Marathon apps via a salt proxy. .. code-block:: yaml my_app: marathon_app.config: - config: cmd: "while [ true ] ; do echo 'Hello Marathon' ; sleep 5 ; done" cpus: 0.1 mem: 10 instances: 3 .. versionadded:: 2015.8.2 ''' from __future__ import absolute_import, print_function, unicode_literals import copy import logging import salt.utils.configcomparer __proxyenabled__ = ['marathon'] log = logging.getLogger(__file__) def config(name, config): ''' Ensure that the marathon app with the given id is present and is configured to match the given config values. :param name: The app name/id :param config: The configuration to apply (dict) :return: A standard Salt changes dictionary ''' # setup return structure ret = { 'name': name, 'changes': {}, 'result': False, 'comment': '', } # get existing config if app is present existing_config = None if __salt__['marathon.has_app'](name): existing_config = __salt__['marathon.app'](name)['app'] # compare existing config with defined config if existing_config: update_config = copy.deepcopy(existing_config) salt.utils.configcomparer.compare_and_update_config( config, update_config, ret['changes'], ) else: # the app is not configured--we need to create it from scratch ret['changes']['app'] = { 'new': config, 'old': None, } update_config = config # update the config if we registered any changes if ret['changes']: # if test, report there will be an update if __opts__['test']: ret['result'] = None ret['comment'] = 'Marathon app {0} is set to be updated'.format( name ) return ret update_result = __salt__['marathon.update_app'](name, update_config) if 'exception' in update_result: ret['result'] = False ret['comment'] = 'Failed to update app config for {0}: {1}'.format( name, update_result['exception'], ) return ret else: ret['result'] = True ret['comment'] = 'Updated app config for {0}'.format(name) return ret ret['result'] = True ret['comment'] = 'Marathon app {0} configured correctly'.format(name) return ret def absent(name): ''' Ensure that the marathon app with the given id is not present. :param name: The app name/id :return: A standard Salt changes dictionary ''' ret = {'name': name, 'changes': {}, 'result': False, 'comment': ''} if not __salt__['marathon.has_app'](name): ret['result'] = True ret['comment'] = 'App {0} already absent'.format(name) return ret if __opts__['test']: ret['result'] = None ret['comment'] = 'App {0} is set to be removed'.format(name) return ret if __salt__['marathon.rm_app'](name): ret['changes'] = {'app': name} ret['result'] = True ret['comment'] = 'Removed app {0}'.format(name) return ret else: ret['result'] = False ret['comment'] = 'Failed to remove app {0}'.format(name) return ret def running(name, restart=False, force=True): ''' Ensure that the marathon app with the given id is present and restart if set. :param name: The app name/id :param restart: Restart the app :param force: Override the current deployment :return: A standard Salt changes dictionary ''' ret = {'name': name, 'changes': {}, 'result': False, 'comment': ''} if not __salt__['marathon.has_app'](name): ret['result'] = False ret['comment'] = 'App {0} cannot be restarted because it is absent'.format(name) return ret if __opts__['test']: ret['result'] = None qualifier = 'is' if restart else 'is not' ret['comment'] = 'App {0} {1} set to be restarted'.format(name, qualifier) return ret restart_result = __salt__['marathon.restart_app'](name, restart, force) if 'exception' in restart_result: ret['result'] = False ret['comment'] = 'Failed to restart app {0}: {1}'.format( name, restart_result['exception'] ) return ret else: ret['changes'] = restart_result ret['result'] = True qualifier = 'Restarted' if restart else 'Did not restart' ret['comment'] = '{0} app {1}'.format(qualifier, name) return ret