Revision 44fbd23b

b/lib/runtime.py
28 28

  
29 29
from ganeti import constants
30 30
from ganeti import errors
31
from ganeti import utils
31 32

  
32 33

  
33 34
_priv = None
......
91 92
    self.rapi_gid = GetGid(constants.RAPI_GROUP, _getgrnam)
92 93

  
93 94
    self.noded_uid = GetUid(constants.NODED_USER, _getpwnam)
95
    self.noded_gid = GetGid(constants.NODED_GROUP, _getgrnam)
94 96

  
95 97
    # Misc Ganeti groups
96 98
    self.daemons_gid = GetGid(constants.DAEMONS_GROUP, _getgrnam)
97 99
    self.admin_gid = GetGid(constants.ADMIN_GROUP, _getgrnam)
98 100

  
101
    self._uid2user = {
102
      self.masterd_uid: constants.MASTERD_USER,
103
      self.confd_uid: constants.CONFD_USER,
104
      self.rapi_uid: constants.RAPI_USER,
105
      self.noded_uid: constants.NODED_USER,
106
      }
107

  
108
    self._gid2group = {
109
      self.masterd_gid: constants.MASTERD_GROUP,
110
      self.confd_gid: constants.CONFD_GROUP,
111
      self.rapi_gid: constants.RAPI_GROUP,
112
      self.noded_gid: constants.NODED_GROUP,
113
      self.daemons_gid: constants.DAEMONS_GROUP,
114
      self.admin_gid: constants.ADMIN_GROUP,
115
      }
116

  
117
    self._user2uid = utils.InvertDict(self._uid2user)
118
    self._group2gid = utils.InvertDict(self._gid2group)
119

  
120
  def LookupUid(self, uid):
121
    """Looks which Ganeti user belongs to this uid.
122

  
123
    @param uid: The uid to lookup
124
    @returns The user name associated with that uid
125

  
126
    """
127
    try:
128
      return self._uid2user[uid]
129
    except KeyError:
130
      raise errors.ConfigurationError("Unknown Ganeti uid '%d'" % uid)
131

  
132
  def LookupGid(self, gid):
133
    """Looks which Ganeti group belongs to this gid.
134

  
135
    @param gid: The gid to lookup
136
    @returns The group name associated with that gid
137

  
138
    """
139
    try:
140
      return self._gid2group[gid]
141
    except KeyError:
142
      raise errors.ConfigurationError("Unknown Ganeti gid '%d'" % gid)
143

  
144
  def LookupUser(self, name):
145
    """Looks which uid belongs to this name.
146

  
147
    @param name: The name to lookup
148
    @returns The uid associated with that user name
149

  
150
    """
151
    try:
152
      return self._user2uid[name]
153
    except KeyError:
154
      raise errors.ConfigurationError("Unknown Ganeti user '%s'" % name)
155

  
156
  def LookupGroup(self, name):
157
    """Looks which gid belongs to this name.
158

  
159
    @param name: The name to lookup
160
    @returns The gid associated with that group name
161

  
162
    """
163
    try:
164
      return self._group2gid[name]
165
    except KeyError:
166
      raise errors.ConfigurationError("Unknown Ganeti group '%s'" % name)
167

  
99 168

  
100 169
def GetEnts(resolver=GetentResolver):
101 170
  """Singleton wrapper around resolver instance.
b/test/ganeti.runtime_unittest.py
25 25
from ganeti import runtime
26 26

  
27 27
import testutils
28
import unittest
28 29

  
29 30

  
30 31
class _EntStub:
......
50 51
    constants.RAPI_GROUP: _EntStub(gid=2),
51 52
    constants.DAEMONS_GROUP: _EntStub(gid=3),
52 53
    constants.ADMIN_GROUP: _EntStub(gid=4),
54
    constants.NODED_GROUP: _EntStub(gid=5),
53 55
    }
54 56
  return groups[group]
55 57

  
......
67 69
    raise errors.ConfigurationError("No entries")
68 70

  
69 71

  
70
class TestErrors(testutils.GanetiTestCase):
71
  def testEverythingSuccessful(self):
72
    resolver = runtime.GetentResolver(_getpwnam=_StubGetpwnam,
73
                                      _getgrnam=_StubGetgrnam)
72
class TestErrors(unittest.TestCase):
73
  def setUp(self):
74
    self.resolver = runtime.GetentResolver(_getpwnam=_StubGetpwnam,
75
                                           _getgrnam=_StubGetgrnam)
74 76

  
75
    self.assertEqual(resolver.masterd_uid,
77
  def testEverythingSuccessful(self):
78
    self.assertEqual(self.resolver.masterd_uid,
76 79
                     _StubGetpwnam(constants.MASTERD_USER).pw_uid)
77
    self.assertEqual(resolver.masterd_gid,
80
    self.assertEqual(self.resolver.masterd_gid,
78 81
                     _StubGetgrnam(constants.MASTERD_GROUP).gr_gid)
79
    self.assertEqual(resolver.confd_uid,
82
    self.assertEqual(self.resolver.confd_uid,
80 83
                     _StubGetpwnam(constants.CONFD_USER).pw_uid)
81
    self.assertEqual(resolver.confd_gid,
84
    self.assertEqual(self.resolver.confd_gid,
82 85
                     _StubGetgrnam(constants.CONFD_GROUP).gr_gid)
83
    self.assertEqual(resolver.rapi_uid,
86
    self.assertEqual(self.resolver.rapi_uid,
84 87
                     _StubGetpwnam(constants.RAPI_USER).pw_uid)
85
    self.assertEqual(resolver.rapi_gid,
88
    self.assertEqual(self.resolver.rapi_gid,
86 89
                     _StubGetgrnam(constants.RAPI_GROUP).gr_gid)
87
    self.assertEqual(resolver.noded_uid,
90
    self.assertEqual(self.resolver.noded_uid,
88 91
                     _StubGetpwnam(constants.NODED_USER).pw_uid)
89 92

  
90
    self.assertEqual(resolver.daemons_gid,
93
    self.assertEqual(self.resolver.daemons_gid,
91 94
                     _StubGetgrnam(constants.DAEMONS_GROUP).gr_gid)
92
    self.assertEqual(resolver.admin_gid,
95
    self.assertEqual(self.resolver.admin_gid,
93 96
                     _StubGetgrnam(constants.ADMIN_GROUP).gr_gid)
94 97

  
95 98
  def testUserNotFound(self):
......
104 107
    self.assertRaises(errors.ConfigurationError, runtime.GetEnts,
105 108
                      resolver=ResolverStubRaising)
106 109

  
110
  def testLookupForUser(self):
111
    master_stub = _StubGetpwnam(constants.MASTERD_USER)
112
    rapi_stub = _StubGetpwnam(constants.RAPI_USER)
113
    self.assertEqual(self.resolver.LookupUid(master_stub.pw_uid),
114
                     constants.MASTERD_USER)
115
    self.assertEqual(self.resolver.LookupUid(rapi_stub.pw_uid),
116
                     constants.RAPI_USER)
117
    self.assertEqual(self.resolver.LookupUser(constants.MASTERD_USER),
118
                     master_stub.pw_uid)
119
    self.assertEqual(self.resolver.LookupUser(constants.RAPI_USER),
120
                     rapi_stub.pw_uid)
121

  
122
  def testLookupForGroup(self):
123
    master_stub = _StubGetgrnam(constants.MASTERD_GROUP)
124
    rapi_stub = _StubGetgrnam(constants.RAPI_GROUP)
125
    self.assertEqual(self.resolver.LookupGid(master_stub.gr_gid),
126
                     constants.MASTERD_GROUP)
127
    self.assertEqual(self.resolver.LookupGid(rapi_stub.gr_gid),
128
                     constants.RAPI_GROUP)
129

  
130
  def testLookupForUserNotFound(self):
131
    self.assertRaises(errors.ConfigurationError, self.resolver.LookupUid, 9999)
132
    self.assertRaises(errors.ConfigurationError,
133
                      self.resolver.LookupUser, "does-not-exist-foo")
134

  
135
  def testLookupForGroupNotFound(self):
136
    self.assertRaises(errors.ConfigurationError, self.resolver.LookupGid, 9999)
137
    self.assertRaises(errors.ConfigurationError,
138
                      self.resolver.LookupGroup, "does-not-exist-foo")
139

  
107 140

  
108 141
if __name__ == "__main__":
109 142
  testutils.GanetiTestProgram()

Also available in: Unified diff