%PDF- %PDF-
Direktori : /proc/self/root/usr/lib/python2.7/site-packages/salt/states/ |
Current File : //proc/self/root/usr/lib/python2.7/site-packages/salt/states/nfs_export.py |
# -*- coding: utf-8 -*- ''' Management of NFS exports =============================================== .. versionadded:: 2018.3.0 To ensure an NFS export exists: .. code-block:: yaml add_simple_export: nfs_export.present: - name: '/srv/nfs' - hosts: '10.0.2.0/24' - options: - 'rw' This creates the following in /etc/exports: .. code-block:: bash /srv/nfs 10.0.2.0/24(rw) For more complex exports with multiple groups of hosts, use 'clients': .. code-block:: yaml add_complex_export: nfs_export.present: - name: '/srv/nfs' - clients: # First export, same as simple one above - hosts: '10.0.2.0/24' options: - 'rw' # Second export - hosts: '*.example.com' options: - 'ro' - 'subtree_check' This creates the following in /etc/exports: .. code-block:: bash /srv/nfs 10.0.2.0/24(rw) 192.168.0.0/24,172.19.0.0/16(ro,subtree_check) Any export of the given path will be modified to match the one specified. To ensure an NFS export is absent: .. code-block:: yaml delete_export: nfs_export.absent: - name: '/srv/nfs' ''' from __future__ import absolute_import, print_function, unicode_literals import salt.utils.path def __virtual__(): ''' Only work with nfs tools installed ''' cmd = 'exportfs' if salt.utils.path.which(cmd): return bool(cmd) return( False, 'The nfs_exports state module failed to load: ' 'the exportfs binary is not in the path' ) def present(name, clients=None, hosts=None, options=None, exports='/etc/exports'): ''' Ensure that the named export is present with the given options name The export path to configure clients A list of hosts and the options applied to them. This option may not be used in combination with the 'hosts' or 'options' shortcuts. .. code-block:: yaml - clients: # First export - hosts: '10.0.2.0/24' options: - 'rw' # Second export - hosts: '*.example.com' options: - 'ro' - 'subtree_check' hosts A string matching a number of hosts, for example: .. code-block:: yaml hosts: '10.0.2.123' hosts: '10.0.2.0/24' hosts: 'minion1.example.com' hosts: '*.example.com' hosts: '*' options A list of NFS options, for example: .. code-block:: yaml options: - 'rw' - 'subtree_check' ''' path = name ret = {'name': name, 'changes': {}, 'result': None, 'comment': ''} if not clients: if not hosts: ret['result'] = False ret['comment'] = 'Either \'clients\' or \'hosts\' must be defined' return ret # options being None is handled by add_export() clients = [{'hosts': hosts, 'options': options}] old = __salt__['nfs3.list_exports'](exports) if path in old: if old[path] == clients: ret['result'] = True ret['comment'] = 'Export {0} already configured'.format(path) return ret ret['changes']['new'] = clients ret['changes']['old'] = old[path] if __opts__['test']: ret['result'] = None ret['comment'] = 'Export {0} would be changed'.format(path) return ret __salt__['nfs3.del_export'](exports, path) else: ret['changes']['old'] = None ret['changes']['new'] = clients if __opts__['test']: ret['result'] = None ret['comment'] = 'Export {0} would be added'.format(path) return ret add_export = __salt__['nfs3.add_export'] for exp in clients: add_export(exports, path, exp['hosts'], exp['options']) ret['changes']['new'] = clients try_reload = __salt__['nfs3.reload_exports']() ret['comment'] = try_reload['stderr'] ret['result'] = try_reload['result'] return ret def absent(name, exports='/etc/exports'): ''' Ensure that the named path is not exported name The export path to remove ''' path = name ret = {'name': name, 'changes': {}, 'result': None, 'comment': ''} old = __salt__['nfs3.list_exports'](exports) if path in old: if __opts__['test']: ret['comment'] = 'Export {0} would be removed'.format(path) ret['changes'][path] = old[path] ret['result'] = None return ret __salt__['nfs3.del_export'](exports, path) try_reload = __salt__['nfs3.reload_exports']() if not try_reload['result']: ret['comment'] = try_reload['stderr'] else: ret['comment'] = 'Export {0} removed'.format(path) ret['result'] = try_reload['result'] ret['changes'][path] = old[path] else: ret['comment'] = 'Export {0} already absent'.format(path) ret['result'] = True return ret