SaltStack源码分析之group状态模块

group状态模块用于创建并管理UNIX组账号设置。

/usr/lib/python2.6/site-packages/salt/states/group.py

‘‘‘
Management of user groups
=========================

The group module is used to create and manage unix group settings, groups
can be either present or absent:

.. code-block:: yaml

    cheese:
      group.present:
        - gid: 7648
        - system: True
        - addusers:
          - user1
          - users2
        - delusers:
          - foo

    cheese:
      group.present:
        - gid: 7648
        - system: True
        - members:
          - foo
          - bar
          - user1
          - user2
‘‘‘
def present(name,
            gid=None,
            system=False,
            addusers=None,
            delusers=None,
            members=None):
    ‘‘‘
    Ensure that a group is present

    name
        The name of the group to manage

    gid
        The group id to assign to the named group; if left empty, then the next
        available group id will be assigned

    system
        Whether or not the named group is a system group.  This is essentially
        the ‘-r‘ option of ‘groupadd‘.

    addusers
        List of additional users to be added as a group members.

    delusers
        Ensure these user are removed from the group membership.

    members
        Replace existing group members with a list of new members.

    Note: Options ‘members‘ and ‘addusers/delusers‘ are mutually exclusive and
          can not be used together.
    ‘‘‘
    ret = {‘name‘: name,
           ‘changes‘: {},
           ‘result‘: True,
           ‘comment‘: ‘Group {0} is present and up to date‘.format(name)}

    if members and (addusers or delusers):
        ret[‘result‘] = None
        ret[‘comment‘] = (
            ‘Error: Conflicting options "members" with "addusers" and/or‘
            ‘ "delusers" can not be used together. ‘)
        return ret

    if addusers and delusers:
        #-- if trying to add and delete the same user(s) at the same time.
        if not set(addusers).isdisjoint(set(delusers)):
            ret[‘result‘] = None
            ret[‘comment‘] = (
                ‘Error. Same user(s) can not be added and deleted‘
                ‘ simultaneously‘)
            return ret

    changes = _changes(name,
                       gid,
                       addusers,
                       delusers,
                       members)
    if changes:
        ret[‘comment‘] = (
            ‘The following group attributes are set to be changed:\n‘)
        for key, val in changes.items():
            ret[‘comment‘] += ‘{0}: {1}\n‘.format(key, val)

        if __opts__[‘test‘]:
            ret[‘result‘] = None
            return ret

        for key, val in changes.items():
            if key == ‘gid‘:
                __salt__[‘group.chgid‘](name, gid)
                continue
            if key == ‘addusers‘:
                for user in val:
                    __salt__[‘group.adduser‘](name, user)
                continue
            if key == ‘delusers‘:
                for user in val:
                    __salt__[‘group.deluser‘](name, user)
                continue
            if key == ‘members‘:
                __salt__[‘group.members‘](name, ‘,‘.join(members))
                continue
        # Clear cached group data
        sys.modules[
            __salt__[‘test.ping‘].__module__
            ].__context__.pop(‘group.getent‘, None)
        changes = _changes(name,
                           gid,
                           addusers,
                           delusers,
                           members)
        if changes:
            ret[‘result‘] = False
            ret[‘comment‘] += ‘Some changes could not be applied‘
            ret[‘changes‘] = {‘Failed‘: changes}
        else:
            ret[‘changes‘] = {‘Final‘: ‘All Changed applied successfully‘}

    if changes is False:
        # The group is not present, make it!
        if __opts__[‘test‘]:
            ret[‘result‘] = None
            ret[‘comment‘] = ‘Group {0} set to be added‘.format(name)
            return ret

        grps = __salt__[‘group.getent‘]()
        # Test if gid is free
        if gid is not None:
            gid_group = None
            for lgrp in grps:
                if lgrp[‘gid‘] == gid:
                    gid_group = lgrp[‘name‘]
                    break

            if gid_group is not None:
                ret[‘result‘] = False
                ret[‘comment‘] = (
                    ‘Group {0} is not present but gid {1} is already taken by‘
                    ‘ group {2}‘.format(name, gid, gid_group))
                return ret

        # Group is not present, make it.
        if __salt__[‘group.add‘](name,
                                 gid,
                                 system=system):
            # if members to be added
            grp_members = None
            if members:
                grp_members = ‘,‘.join(members)
            if addusers:
                grp_members = ‘,‘.join(addusers)
            if grp_members:
                __salt__[‘group.members‘](name, grp_members)
            # Clear cached group data
            sys.modules[__salt__[‘test.ping‘].__module__].__context__.pop(
                ‘group.getent‘, None)
            ret[‘comment‘] = ‘New group {0} created‘.format(name)
            ret[‘changes‘] = __salt__[‘group.info‘](name)
            changes = _changes(name,
                               gid,
                               addusers,
                               delusers,
                               members)
            if changes:
                ret[‘result‘] = False
                ret[‘comment‘] = (
                    ‘Group {0} has been created but, some changes could not‘
                    ‘ be applied‘)
                ret[‘changes‘] = {‘Failed‘: changes}
        else:
            ret[‘result‘] = False
            ret[‘comment‘] = ‘Failed to create new group {0}‘.format(name)
    return ret
时间: 2025-01-07 21:05:22

SaltStack源码分析之group状态模块的相关文章

SaltStack源码分析之user状态模块

user状态模块用于在sls文件中指定安装包的uid等属性 /usr/lib/python2.6/site-packages/salt/states/user.py ''' Management of user accounts =========================== The user module is used to create and manage user settings, users can be set as either absent or present ..

SaltStack源码分析之pkg状态模块

pkg状态模块使用各个操作系统自带的包管理工具来安装各种软件包,例如RedHat系列使用YUM安装软件包,Ubuntu使用apt-get安装等 /usr/lib/python2.6/site-packages/salt/states/pkg.py ''' Installation of packages using OS package managers such as yum or apt-get ================================================

SaltStack源码分析之file状态模块

file模块用于对普通文件,目录,特殊文件和链接文件进行各种操作 /usr/lib/python2.6/site-packages/salt/states/file.py def managed(name,             source=None,             source_hash='',             user=None,             group=None,             mode=None,             template=No

SaltStack源码分析之service状态模块

/usr/lib/python2.6/site-packages/salt/states/service.py 这个模块用于启动或重启服务和后台进程 starting or restarting of services and daemons ============================================== Services are defined as system daemons typically started with system init or rc s

SaltStack源码分析之使用Redis模块

Redis模块路径 /usr/lib/python2.6/site-packages/salt/modules/redismod.py Redis模块会首先检查是否安装有Redis的Python驱动 # -*- coding: utf-8 -*- ''' Module to provide redis functionality to Salt .. versionadded:: 2014.7.0 :configuration: This module requires the redis py

SaltStack源码分析之使用MongoDB模块

MongoDB模块

SaltStack源码分析之使用logrotate模块

logrotate模块用于处理日志文件轮转的相关任务 # -*- coding: utf-8 -*- ''' Module for managing logrotate. ''' # Import python libs import os import logging # Import salt libs import salt.utils log = logging.getLogger(__name__) default_conf = '/etc/logrotate.conf' # Defi

Hadoop2源码分析-HDFS核心模块分析

1.概述 这篇博客接着<Hadoop2源码分析-RPC机制初识>来讲述,前面我们对MapReduce.序列化.RPC进行了分析和探索,对Hadoop V2的这些模块都有了大致的了解,通过对这些模块的研究,我们明白了MapReduce的运行流程以及内部的实现机制,Hadoop的序列化以及它的通信机制(RPC).今天我们来研究另一个核心的模块,那就是Hadoop的分布式文件存储系统——HDFS,下面是今天分享的内容目录: HDFS简述 NameNode DataNode 接下来,我们开始今天的分享

jQuery1.9.1源码分析--数据缓存Data模块

阅读目录 jQuery API中Data的基本使用方法介绍 jQuery.acceptData(elem)源码分析 jQuery.data(elem, name, data)源码分析 internalRemoveData方法源码分析 internalData方法的源码分析 jQuery.fn.extend({data: function( key, value ) {}})源码分析 jQuery.extend({removeData: function( elem, name ) {}})源码分