Revision d0af39c0

b/lib/cmdlib.py
15494 15494

  
15495 15495

  
15496 15496
class LUNetworkSetParams(LogicalUnit):
15497
  def BuildHooksNodes(self):
15498
    pass
15497
  """Modifies the parameters of a network.
15498

  
15499
  """
15500
  HPATH = "network-modify"
15501
  HTYPE = constants.HTYPE_NETWORK
15502
  REQ_BGL = False
15503

  
15504
  def CheckArguments(self):
15505
    if (self.op.gateway and
15506
        (self.op.add_reserved_ips or self.op.remove_reserved_ips)):
15507
      raise errors.OpPrereqError("Cannot modify gateway and reserved ips"
15508
                                 " at once", errors.ECODE_INVAL)
15509

  
15510

  
15511
  def ExpandNames(self):
15512
    self.network_uuid = self.cfg.LookupNetwork(self.op.network_name)
15513
    self.network = self.cfg.GetNetwork(self.network_uuid)
15514
    self.needed_locks = {
15515
      locking.LEVEL_NETWORK: [self.network_uuid],
15516
      }
15517

  
15518

  
15519
    if self.network is None:
15520
      raise errors.OpPrereqError("Could not retrieve network '%s' (UUID: %s)" %
15521
                                 (self.op.network_name, self.network_uuid),
15522
                                 errors.ECODE_INVAL)
15523

  
15524
  def CheckPrereq(self):
15525
    """Check prerequisites.
15526

  
15527
    """
15528
    self.gateway = self.network.gateway
15529
    self.network_type = self.network.network_type
15530
    self.mac_prefix = self.network.mac_prefix
15531
    self.network6 = self.network.network6
15532
    self.gateway6 = self.network.gateway6
15533

  
15534
    self.pool = network.AddressPool(self.network)
15535

  
15536
    if self.op.gateway:
15537
      if self.op.gateway == constants.VALUE_NONE:
15538
        self.gateway = None
15539
      else:
15540
        self.gateway = self.op.gateway
15541
        if self.pool.IsReserved(self.gateway):
15542
          raise errors.OpPrereqError("%s is already reserved" %
15543
                                     self.gateway, errors.ECODE_INVAL)
15544

  
15545
    if self.op.network_type:
15546
      if self.op.network_type == constants.VALUE_NONE:
15547
        self.network_type = None
15548
      else:
15549
        self.network_type = self.op.network_type
15550

  
15551
    if self.op.mac_prefix:
15552
      if self.op.mac_prefix == constants.VALUE_NONE:
15553
        self.mac_prefix = None
15554
      else:
15555
        self.mac_prefix = self.op.mac_prefix
15556

  
15557
    if self.op.gateway6:
15558
      if self.op.gateway6 == constants.VALUE_NONE:
15559
        self.gateway6 = None
15560
      else:
15561
        self.gateway6 = self.op.gateway6
15562

  
15563
    if self.op.network6:
15564
      if self.op.network6 == constants.VALUE_NONE:
15565
        self.network6 = None
15566
      else:
15567
        self.network6 = self.op.network6
15568

  
15569

  
15499 15570

  
15500 15571
  def BuildHooksEnv(self):
15501
    pass
15572
    """Build hooks env.
15573

  
15574
    """
15575
    env = {
15576
      "NETWORK_NAME": self.op.network_name,
15577
      "NETWORK_SUBNET": self.network.network,
15578
      "NETWORK_GATEWAY": self.gateway,
15579
      "NETWORK_SUBNET6": self.network6,
15580
      "NETWORK_GATEWAY6": self.gateway6,
15581
      "NETWORK_MAC_PREFIX": self.mac_prefix,
15582
      "NETWORK_TYPE": self.network_type,
15583
      }
15584
    return env
15585

  
15586
  def BuildHooksNodes(self):
15587
    """Build hooks nodes.
15588

  
15589
    """
15590
    mn = self.cfg.GetMasterNode()
15591
    return ([mn], [mn])
15592

  
15593
  def Exec(self, feedback_fn):
15594
    """Modifies the network.
15595

  
15596
    """
15597
    #TODO: reserve/release via temporary reservation manager
15598
    #      extend cfg.ReserveIp/ReleaseIp with the external flag
15599
    if self.op.gateway:
15600
      if self.gateway == self.network.gateway:
15601
        self.LogWarning("Gateway is already %s" % self.gateway)
15602
      else:
15603
        if self.gateway:
15604
          self.pool.Reserve(self.gateway, external=True)
15605
        if self.network.gateway:
15606
          self.pool.Release(self.network.gateway, external=True)
15607
        self.network.gateway = self.gateway
15608

  
15609
    if self.op.add_reserved_ips:
15610
      for ip in self.op.add_reserved_ips:
15611
        try:
15612
          if self.pool.IsReserved(ip):
15613
            self.LogWarning("IP %s is already reserved" % ip)
15614
          else:
15615
            self.pool.Reserve(ip, external=True)
15616
        except errors.AddressPoolError, e:
15617
          self.LogWarning("Cannot reserve ip %s. %s" % (ip, e))
15618

  
15619
    if self.op.remove_reserved_ips:
15620
      for ip in self.op.remove_reserved_ips:
15621
        if ip == self.network.gateway:
15622
          self.LogWarning("Cannot unreserve Gateway's IP")
15623
          continue
15624
        try:
15625
          if not self.pool.IsReserved(ip):
15626
            self.LogWarning("IP %s is already unreserved" % ip)
15627
          else:
15628
            self.pool.Release(ip, external=True)
15629
        except errors.AddressPoolError, e:
15630
          self.LogWarning("Cannot release ip %s. %s" % (ip, e))
15631

  
15632
    if self.op.mac_prefix:
15633
      self.network.mac_prefix = self.mac_prefix
15634

  
15635
    if self.op.network6:
15636
      self.network.network6 = self.network6
15637

  
15638
    if self.op.gateway6:
15639
      self.network.gateway6 = self.gateway6
15640

  
15641
    if self.op.network_type:
15642
      self.network.network_type = self.network_type
15643

  
15644
    self.pool.Validate()
15645

  
15646
    self.cfg.Update(self.network, feedback_fn)
15502 15647

  
15503 15648

  
15504 15649
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