Revision 8d653c98

b/lib/cmdlib.py
15510 15510

  
15511 15511

  
15512 15512
class LUNetworkSetParams(LogicalUnit):
15513
  def BuildHooksNodes(self):
15514
    pass
15513
  """Modifies the parameters of a network.
15514

  
15515
  """
15516
  HPATH = "network-modify"
15517
  HTYPE = constants.HTYPE_NETWORK
15518
  REQ_BGL = False
15519

  
15520
  def CheckArguments(self):
15521
    if (self.op.gateway and
15522
        (self.op.add_reserved_ips or self.op.remove_reserved_ips)):
15523
      raise errors.OpPrereqError("Cannot modify gateway and reserved ips"
15524
                                 " at once", errors.ECODE_INVAL)
15525

  
15526

  
15527
  def ExpandNames(self):
15528
    self.network_uuid = self.cfg.LookupNetwork(self.op.network_name)
15529
    self.network = self.cfg.GetNetwork(self.network_uuid)
15530
    self.needed_locks = {
15531
      locking.LEVEL_NETWORK: [self.network_uuid],
15532
      }
15533

  
15534

  
15535
    if self.network is None:
15536
      raise errors.OpPrereqError("Could not retrieve network '%s' (UUID: %s)" %
15537
                                 (self.op.network_name, self.network_uuid),
15538
                                 errors.ECODE_INVAL)
15539

  
15540
  def CheckPrereq(self):
15541
    """Check prerequisites.
15542

  
15543
    """
15544
    self.gateway = self.network.gateway
15545
    self.network_type = self.network.network_type
15546
    self.mac_prefix = self.network.mac_prefix
15547
    self.network6 = self.network.network6
15548
    self.gateway6 = self.network.gateway6
15549

  
15550
    self.pool = network.AddressPool(self.network)
15551

  
15552
    if self.op.gateway:
15553
      if self.op.gateway == constants.VALUE_NONE:
15554
        self.gateway = None
15555
      else:
15556
        self.gateway = self.op.gateway
15557
        if self.pool.IsReserved(self.gateway):
15558
          raise errors.OpPrereqError("%s is already reserved" %
15559
                                     self.gateway, errors.ECODE_INVAL)
15560

  
15561
    if self.op.network_type:
15562
      if self.op.network_type == constants.VALUE_NONE:
15563
        self.network_type = None
15564
      else:
15565
        self.network_type = self.op.network_type
15566

  
15567
    if self.op.mac_prefix:
15568
      if self.op.mac_prefix == constants.VALUE_NONE:
15569
        self.mac_prefix = None
15570
      else:
15571
        self.mac_prefix = self.op.mac_prefix
15572

  
15573
    if self.op.gateway6:
15574
      if self.op.gateway6 == constants.VALUE_NONE:
15575
        self.gateway6 = None
15576
      else:
15577
        self.gateway6 = self.op.gateway6
15578

  
15579
    if self.op.network6:
15580
      if self.op.network6 == constants.VALUE_NONE:
15581
        self.network6 = None
15582
      else:
15583
        self.network6 = self.op.network6
15584

  
15585

  
15515 15586

  
15516 15587
  def BuildHooksEnv(self):
15517
    pass
15588
    """Build hooks env.
15589

  
15590
    """
15591
    env = {
15592
      "NETWORK_NAME": self.op.network_name,
15593
      "NETWORK_SUBNET": self.network.network,
15594
      "NETWORK_GATEWAY": self.gateway,
15595
      "NETWORK_SUBNET6": self.network6,
15596
      "NETWORK_GATEWAY6": self.gateway6,
15597
      "NETWORK_MAC_PREFIX": self.mac_prefix,
15598
      "NETWORK_TYPE": self.network_type,
15599
      }
15600
    return env
15601

  
15602
  def BuildHooksNodes(self):
15603
    """Build hooks nodes.
15604

  
15605
    """
15606
    mn = self.cfg.GetMasterNode()
15607
    return ([mn], [mn])
15608

  
15609
  def Exec(self, feedback_fn):
15610
    """Modifies the network.
15611

  
15612
    """
15613
    #TODO: reserve/release via temporary reservation manager
15614
    #      extend cfg.ReserveIp/ReleaseIp with the external flag
15615
    if self.op.gateway:
15616
      if self.gateway == self.network.gateway:
15617
        self.LogWarning("Gateway is already %s" % self.gateway)
15618
      else:
15619
        if self.gateway:
15620
          self.pool.Reserve(self.gateway, external=True)
15621
        if self.network.gateway:
15622
          self.pool.Release(self.network.gateway, external=True)
15623
        self.network.gateway = self.gateway
15624

  
15625
    if self.op.add_reserved_ips:
15626
      for ip in self.op.add_reserved_ips:
15627
        try:
15628
          if self.pool.IsReserved(ip):
15629
            self.LogWarning("IP %s is already reserved" % ip)
15630
          else:
15631
            self.pool.Reserve(ip, external=True)
15632
        except errors.AddressPoolError, e:
15633
          self.LogWarning("Cannot reserve ip %s. %s" % (ip, e))
15634

  
15635
    if self.op.remove_reserved_ips:
15636
      for ip in self.op.remove_reserved_ips:
15637
        if ip == self.network.gateway:
15638
          self.LogWarning("Cannot unreserve Gateway's IP")
15639
          continue
15640
        try:
15641
          if not self.pool.IsReserved(ip):
15642
            self.LogWarning("IP %s is already unreserved" % ip)
15643
          else:
15644
            self.pool.Release(ip, external=True)
15645
        except errors.AddressPoolError, e:
15646
          self.LogWarning("Cannot release ip %s. %s" % (ip, e))
15647

  
15648
    if self.op.mac_prefix:
15649
      self.network.mac_prefix = self.mac_prefix
15650

  
15651
    if self.op.network6:
15652
      self.network.network6 = self.network6
15653

  
15654
    if self.op.gateway6:
15655
      self.network.gateway6 = self.gateway6
15656

  
15657
    if self.op.network_type:
15658
      self.network.network_type = self.network_type
15659

  
15660
    self.pool.Validate()
15661

  
15662
    self.cfg.Update(self.network, feedback_fn)
15518 15663

  
15519 15664

  
15520 15665
class _NetworkQuery(_QueryBase):
b/lib/config.py
2224 2224
      test = target in self._config_data.instances.values()
2225 2225
    elif isinstance(target, objects.NodeGroup):
2226 2226
      test = target in self._config_data.nodegroups.values()
2227
    elif isinstance(target, objects.Network):
2228
      test = target in self._config_data.networks.values()
2227 2229
    else:
2228 2230
      raise errors.ProgrammerError("Invalid object type (%s) passed to"
2229 2231
                                   " ConfigWriter.Update" % type(target))

Also available in: Unified diff