ConfigData: run UpgradeConfig on network objects
[ganeti-local] / lib / config.py
index 9c9a48f..9d87c2b 100644 (file)
@@ -109,6 +109,11 @@ class TemporaryReservationManager:
     return all_reserved
 
   def GetECReserved(self, ec_id):
+    """ Used when you want to retrieve all reservations for a specific
+        execution context. E.g when commiting reserved IPs for a specific
+        network.
+
+    """
     ec_reserved = set()
     if ec_id in self._ec_reserved:
       ec_reserved.update(self._ec_reserved[ec_id])
@@ -337,9 +342,9 @@ class ConfigWriter:
     """
     nobj = self._UnlockedGetNetwork(net_uuid)
     pool = network.AddressPool(nobj)
-    if action == 'reserve':
+    if action == constants.RESERVE_ACTION:
       pool.Reserve(address)
-    elif action == 'release':
+    elif action == constants.RELEASE_ACTION:
       pool.Release(address)
 
   def _UnlockedReleaseIp(self, net_uuid, address, ec_id):
@@ -349,7 +354,8 @@ class ConfigWriter:
     as reserved.
 
     """
-    self._temporary_ips.Reserve(ec_id, ('release', address, net_uuid))
+    self._temporary_ips.Reserve(ec_id,
+                                (constants.RELEASE_ACTION, address, net_uuid))
 
   @locking.ssynchronized(_config_lock, shared=1)
   def ReleaseIp(self, net, address, ec_id):
@@ -370,14 +376,13 @@ class ConfigWriter:
     net_uuid = self._UnlockedLookupNetwork(net)
     nobj = self._UnlockedGetNetwork(net_uuid)
     pool = network.AddressPool(nobj)
-    gen_free = pool.GenerateFree()
 
     def gen_one():
       try:
-        ip = gen_free()
-      except StopIteration:
+        ip = pool.GenerateFree()
+      except errors.AddressPoolError:
         raise errors.ReservationError("Cannot generate IP. Network is full")
-      return ("reserve", ip, net_uuid)
+      return (constants.RESERVE_ACTION, ip, net_uuid)
 
     _, address, _ = self._temporary_ips.Generate([], gen_one, ec_id)
     return address
@@ -395,7 +400,9 @@ class ConfigWriter:
     if isreserved:
       raise errors.ReservationError("IP address already in use")
 
-    return self._temporary_ips.Reserve(ec_id, ('reserve', address, net_uuid))
+    return self._temporary_ips.Reserve(ec_id,
+                                       (constants.RESERVE_ACTION,
+                                        address, net_uuid))
 
   @locking.ssynchronized(_config_lock, shared=1)
   def ReserveIp(self, net, address, ec_id):
@@ -1447,7 +1454,7 @@ class ConfigWriter:
         net_uuid = self._UnlockedLookupNetwork(nic.network)
         if net_uuid:
           # Return all IP addresses to the respective address pools
-          self._UnlockedCommitIp('release', net_uuid, nic.ip)
+          self._UnlockedCommitIp(constants.RELEASE_ACTION, net_uuid, nic.ip)
 
     del self._config_data.instances[instance_name]
     self._config_data.cluster.serial_no += 1
@@ -2384,7 +2391,7 @@ class ConfigWriter:
 
   @locking.ssynchronized(_config_lock, shared=1)
   def GetAllNetworksInfo(self):
-    """Get the configuration of all networks
+    """Get configuration info of all the networks.
 
     """
     return dict(self._config_data.networks)
@@ -2552,7 +2559,11 @@ class ConfigWriter:
 
   @locking.ssynchronized(_config_lock, shared=1)
   def CheckIPInNodeGroup(self, ip, node):
-    """Check for conflictig IP.
+    """Check IP uniqueness in nodegroup.
+
+    Check networks that are connected in the node's node group
+    if ip is contained in any of them. Used when creating/adding
+    a NIC to ensure uniqueness among nodegroups.
 
     @type ip: string
     @param ip: ip address