From 3603669e0359f612b8e68a24b035849e9694aaaf Mon Sep 17 00:00:00 2001 From: Erik Johnson Date: Wed, 9 Oct 2013 19:04:05 -0500 Subject: [PATCH] Add win_system state module --- salt/states/win_system.py | 125 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 salt/states/win_system.py diff --git a/salt/states/win_system.py b/salt/states/win_system.py new file mode 100644 index 0000000000..33cab2155b --- /dev/null +++ b/salt/states/win_system.py @@ -0,0 +1,125 @@ +# -*- coding: utf-8 -*- +''' +Management of Windows system information +======================================== + +This state is used to manage system information such as the computer name and +description. + +.. code-block:: yaml + + ERIK-WORKSTATION: + system: + - computer_name + + This is Erik's computer, don't touch!: + system: + - computer_desc +''' + +# Import python libs +import logging +import sys + +# Import salt libs +from salt._compat import string_types +import salt.utils + + +log = logging.getLogger(__name__) + + +def __virtual__(): + ''' + This only supports Windows + ''' + if salt.utils.is_windows() and 'system.get_computer_desc' in __salt__: + return 'system' + return False + + +def computer_desc(name): + ''' + Manage the computer's description field + + name + The desired computer description + ''' + # Just in case someone decides to enter a numeric description + name = str(name) + + ret = {'name': name, + 'changes': {}, + 'result': True, + 'comment': 'Computer description already set to {0!r}'.format(name)} + + before_desc = __salt__['system.get_computer_desc']() + + if before_desc == name: + return ret + + if __opts__['test']: + ret['result'] = None + ret['comment'] = ('Computer description will be changed to {0!r}' + .format(name)) + return ret + + if not __salt__['system.set_computer_desc'](name): + ret['result'] = False + ret['comment'] = ('Unable to set computer description to ' + '{0!r}'.format(name)) + else: + ret['comment'] = ('Computer description successfully changed to {0!r}' + .format(name)) + ret['changes'] = {'old': before_desc, 'new': name} + + return ret + +computer_description = computer_desc + + +def computer_name(name): + ''' + Manage the computer's name + + name + The desired computer name + ''' + # Just in case someone decides to enter a numeric description + name = str(name).upper() + + ret = {'name': name, + 'changes': {}, + 'result': True, + 'comment': 'Computer name already set to {0!r}'.format(name)} + + before_name = __salt__['system.get_computer_name']() + pending_name = __salt__['system.get_pending_computer_name']() + + if before_name == name and pending_name is None: + return ret + elif pending_name == name: + ret['comment'] = ('The current computer name is {0!r}, but will be ' + 'changed to {1!r} on the next reboot' + .format(before_name, name)) + return ret + + if __opts__['test']: + ret['result'] = None + ret['comment'] = 'Computer name will be changed to {0!r}'.format(name) + return ret + + result = __salt__['system.set_computer_name'](name) + if result is not False: + after_name = result['Computer Name']['Current'] + after_pending = result['Computer Name'].get('Pending') + if ((after_pending is not None and after_pending == name) or + (after_pending is None and after_name == name)): + ret['comment'] = 'Computer name successfully set to {0!r}'.format(name) + if after_pending is not None: + ret['comment'] += ' (reboot required for change to take effect)' + ret['changes'] = {'old': before_name, 'new': name} + else: + ret['result'] = False + ret['comment'] = 'Unable to set computer name to {0!r}'.format(name) + return ret