'''
Set grains describing the minion process.
'''

from __future__ import absolute_import, print_function, unicode_literals

import os

# Import salt libs
import salt.utils.platform

try:
    import pwd
except ImportError:
    import getpass
    pwd = None

try:
    import grp
except ImportError:
    grp = None


def _uid():
    '''
    Grain for the minion User ID
    '''
    if salt.utils.platform.is_windows():
        return None
    return os.getuid()


def _username():
    '''
    Grain for the minion username
    '''
    if pwd:
        username = pwd.getpwuid(os.getuid()).pw_name
    else:
        username = getpass.getuser()

    return username


def _gid():
    '''
    Grain for the minion Group ID
    '''
    if salt.utils.platform.is_windows():
        return None
    return os.getgid()


def _groupname():
    '''
    Grain for the minion groupname
    '''
    if grp:
        groupname = grp.getgrgid(os.getgid()).gr_name
    else:
        groupname = ''

    return groupname


def _pid():
    return os.getpid()


def grains():
    ret = {
        'username': _username(),
        'groupname': _groupname(),
        'pid': _pid(),
    }

    if not salt.utils.platform.is_windows():
        ret['gid'] = _gid()
        ret['uid'] = _uid()

    return ret

'''
Set grains describing the minion process.
'''

from __future__ import absolute_import, print_function, unicode_literals

import os

# Import salt libs
import salt.utils.platform

try:
    import pwd
except ImportError:
    import getpass
    pwd = None

try:
    import grp
except ImportError:
    grp = None


def _uid():
    '''
    Grain for the minion User ID
    '''
    if salt.utils.platform.is_windows():
        return None
    return os.getuid()


def _username():
    '''
    Grain for the minion username
    '''
    if pwd:
        username = pwd.getpwuid(os.getuid()).pw_name
    else:
        username = getpass.getuser()

    return username


def _gid():
    '''
    Grain for the minion Group ID
    '''
    if salt.utils.platform.is_windows():
        return None
    return os.getgid()


def _groupname():
    '''
    Grain for the minion groupname
    '''
    if grp:
        try:
            groupname = grp.getgrgid(os.getgid()).gr_name
        except KeyError:
            groupname = ''
    else:
        groupname = ''

    return groupname


def _pid():
    return os.getpid()


def grains():
    ret = {
        'username': _username(),
        'groupname': _groupname(),
        'pid': _pid(),
    }

    if not salt.utils.platform.is_windows():
        ret['gid'] = _gid()
        ret['uid'] = _uid()

    return ret

Fix gid not found bug
Fix gid not found bug

  '''
  Set grains describing the minion process.
  '''
  
  from __future__ import absolute_import, print_function, unicode_literals
  
  import os
  
  # Import salt libs
  import salt.utils.platform
  
  try:
      import pwd
  except ImportError:
      import getpass
      pwd = None
  
  try:
      import grp
  except ImportError:
      grp = None
  
  
  def _uid():
      '''
      Grain for the minion User ID
      '''
      if salt.utils.platform.is_windows():
          return None
      return os.getuid()
  
  
  def _username():
      '''
      Grain for the minion username
      '''
      if pwd:
          username = pwd.getpwuid(os.getuid()).pw_name
      else:
          username = getpass.getuser()
  
      return username
  
  
  def _gid():
      '''
      Grain for the minion Group ID
      '''
      if salt.utils.platform.is_windows():
          return None
      return os.getgid()
  
  
  def _groupname():
      '''
      Grain for the minion groupname
      '''
      if grp:
+         try:
-         groupname = grp.getgrgid(os.getgid()).gr_name
+             groupname = grp.getgrgid(os.getgid()).gr_name
+         except KeyError:
+             groupname = ''
      else:
          groupname = ''
  
      return groupname
  
  
  def _pid():
      return os.getpid()
  
  
  def grains():
      ret = {
          'username': _username(),
          'groupname': _groupname(),
          'pid': _pid(),
      }
  
      if not salt.utils.platform.is_windows():
          ret['gid'] = _gid()
          ret['uid'] = _uid()
  
      return ret
  
Fix gid not found bug
## Code Before:
'''
Set grains describing the minion process.
'''

from __future__ import absolute_import, print_function, unicode_literals

import os

# Import salt libs
import salt.utils.platform

try:
    import pwd
except ImportError:
    import getpass
    pwd = None

try:
    import grp
except ImportError:
    grp = None


def _uid():
    '''
    Grain for the minion User ID
    '''
    if salt.utils.platform.is_windows():
        return None
    return os.getuid()


def _username():
    '''
    Grain for the minion username
    '''
    if pwd:
        username = pwd.getpwuid(os.getuid()).pw_name
    else:
        username = getpass.getuser()

    return username


def _gid():
    '''
    Grain for the minion Group ID
    '''
    if salt.utils.platform.is_windows():
        return None
    return os.getgid()


def _groupname():
    '''
    Grain for the minion groupname
    '''
    if grp:
        groupname = grp.getgrgid(os.getgid()).gr_name
    else:
        groupname = ''

    return groupname


def _pid():
    return os.getpid()


def grains():
    ret = {
        'username': _username(),
        'groupname': _groupname(),
        'pid': _pid(),
    }

    if not salt.utils.platform.is_windows():
        ret['gid'] = _gid()
        ret['uid'] = _uid()

    return ret

## Instruction:
Fix gid not found bug
## Code After:
'''
Set grains describing the minion process.
'''

from __future__ import absolute_import, print_function, unicode_literals

import os

# Import salt libs
import salt.utils.platform

try:
    import pwd
except ImportError:
    import getpass
    pwd = None

try:
    import grp
except ImportError:
    grp = None


def _uid():
    '''
    Grain for the minion User ID
    '''
    if salt.utils.platform.is_windows():
        return None
    return os.getuid()


def _username():
    '''
    Grain for the minion username
    '''
    if pwd:
        username = pwd.getpwuid(os.getuid()).pw_name
    else:
        username = getpass.getuser()

    return username


def _gid():
    '''
    Grain for the minion Group ID
    '''
    if salt.utils.platform.is_windows():
        return None
    return os.getgid()


def _groupname():
    '''
    Grain for the minion groupname
    '''
    if grp:
        try:
            groupname = grp.getgrgid(os.getgid()).gr_name
        except KeyError:
            groupname = ''
    else:
        groupname = ''

    return groupname


def _pid():
    return os.getpid()


def grains():
    ret = {
        'username': _username(),
        'groupname': _groupname(),
        'pid': _pid(),
    }

    if not salt.utils.platform.is_windows():
        ret['gid'] = _gid()
        ret['uid'] = _uid()

    return ret
