Revision c79198a0

b/lib/backend.py
301 301

  
302 302
@RunLocalHooks(constants.FAKE_OP_MASTER_TURNUP, "master-ip-turnup",
303 303
               _BuildMasterIpEnv)
304
def ActivateMasterIp(master_ip, master_netmask, master_netdev, family):
304
def ActivateMasterIp(master_params):
305 305
  """Activate the IP address of the master daemon.
306 306

  
307
  @param master_ip: the master IP
308
  @param master_netmask: the master IP netmask
309
  @param master_netdev: the master network device
310
  @param family: the IP family
307
  @type master_params: L{objects.MasterNetworkParameters}
308
  @param master_params: network parameters of the master
311 309

  
312 310
  """
313 311
  err_msg = None
314
  if netutils.TcpPing(master_ip, constants.DEFAULT_NODED_PORT):
315
    if netutils.IPAddress.Own(master_ip):
312
  if netutils.TcpPing(master_params.ip, constants.DEFAULT_NODED_PORT):
313
    if netutils.IPAddress.Own(master_params.ip):
316 314
      # we already have the ip:
317 315
      logging.debug("Master IP already configured, doing nothing")
318 316
    else:
319 317
      err_msg = "Someone else has the master ip, not activating"
320 318
      logging.error(err_msg)
321 319
  else:
322
    ipcls = netutils.IPAddress.GetClassFromIpFamily(family)
320
    ipcls = netutils.IPAddress.GetClassFromIpFamily(master_params.ip_family)
323 321

  
324 322
    result = utils.RunCmd([constants.IP_COMMAND_PATH, "address", "add",
325
                           "%s/%s" % (master_ip, master_netmask),
326
                           "dev", master_netdev, "label",
327
                           "%s:0" % master_netdev])
323
                           "%s/%s" % (master_params.ip, master_params.netmask),
324
                           "dev", master_params.netdev, "label",
325
                           "%s:0" % master_params.netdev])
328 326
    if result.failed:
329 327
      err_msg = "Can't activate master IP: %s" % result.output
330 328
      logging.error(err_msg)
......
332 330
    else:
333 331
      # we ignore the exit code of the following cmds
334 332
      if ipcls == netutils.IP4Address:
335
        utils.RunCmd(["arping", "-q", "-U", "-c 3", "-I", master_netdev, "-s",
336
                      master_ip, master_ip])
333
        utils.RunCmd(["arping", "-q", "-U", "-c 3", "-I", master_params.netdev,
334
                      "-s", master_params.ip, master_params.ip])
337 335
      elif ipcls == netutils.IP6Address:
338 336
        try:
339
          utils.RunCmd(["ndisc6", "-q", "-r 3", master_ip, master_netdev])
337
          utils.RunCmd(["ndisc6", "-q", "-r 3", master_params.ip,
338
                        master_params.netdev])
340 339
        except errors.OpExecError:
341 340
          # TODO: Better error reporting
342 341
          logging.warning("Can't execute ndisc6, please install if missing")
......
375 374

  
376 375
@RunLocalHooks(constants.FAKE_OP_MASTER_TURNDOWN, "master-ip-turndown",
377 376
               _BuildMasterIpEnv)
378
def DeactivateMasterIp(master_ip, master_netmask, master_netdev, family):
377
def DeactivateMasterIp(master_params):
379 378
  """Deactivate the master IP on this node.
380 379

  
381
  @param master_ip: the master IP
382
  @param master_netmask: the master IP netmask
383
  @param master_netdev: the master network device
384
  @param family: the IP family
380
  @type master_params: L{objects.MasterNetworkParameters}
381
  @param master_params: network parameters of the master
385 382

  
386 383
  """
387
  # pylint: disable=W0613
388 384
  # TODO: log and report back to the caller the error failures; we
389 385
  # need to decide in which case we fail the RPC for this
390 386

  
391 387
  result = utils.RunCmd([constants.IP_COMMAND_PATH, "address", "del",
392
                         "%s/%s" % (master_ip, master_netmask),
393
                         "dev", master_netdev])
388
                         "%s/%s" % (master_params.ip, master_params.netmask),
389
                         "dev", master_params.netdev])
394 390
  if result.failed:
395 391
    logging.error("Can't remove the master IP, error: %s", result.output)
396 392
    # but otherwise ignore the failure
b/lib/bootstrap.py
568 568
  runner = rpc.BootstrapRunner()
569 569

  
570 570
  master_params = cfg.GetMasterNetworkParameters()
571
  result = runner.call_node_deactivate_master_ip(master,
572
                                                 master_params.ip,
573
                                                 master_params.netmask,
574
                                                 master_params.netdev,
575
                                                 master_params.ip_family)
571
  master_params.name = master
572
  result = runner.call_node_deactivate_master_ip(master_params.name,
573
                                                 master_params)
574

  
576 575
  msg = result.fail_msg
577 576
  if msg:
578 577
    logging.warning("Could not disable the master IP: %s", msg)
......
712 711

  
713 712
  runner = rpc.BootstrapRunner()
714 713
  master_params = cfg.GetMasterNetworkParameters()
715
  result = runner.call_node_deactivate_master_ip(old_master,
716
                                                 master_params.ip,
717
                                                 master_params.netmask,
718
                                                 master_params.netdev,
719
                                                 master_params.ip_family)
714
  master_params.name = old_master
715
  result = runner.call_node_deactivate_master_ip(master_params.name,
716
                                                 master_params)
717

  
720 718
  msg = result.fail_msg
721 719
  if msg:
722 720
    logging.warning("Could not disable the master IP: %s", msg)
b/lib/cmdlib.py
1361 1361
    _RunPostHook(self, master_params.name)
1362 1362

  
1363 1363
    result = self.rpc.call_node_deactivate_master_ip(master_params.name,
1364
                                                     master_params.ip,
1365
                                                     master_params.netmask,
1366
                                                     master_params.netdev,
1367
                                                     master_params.ip_family)
1364
                                                     master_params)
1368 1365
    result.Raise("Could not disable the master role")
1369 1366

  
1370 1367
    return master_params.name
......
3332 3329
    # shutdown the master IP
3333 3330
    master_params = self.cfg.GetMasterNetworkParameters()
3334 3331
    result = self.rpc.call_node_deactivate_master_ip(master_params.name,
3335
                                                     master_params.ip,
3336
                                                     master_params.netmask,
3337
                                                     master_params.netdev,
3338
                                                     master_params.ip_family)
3332
                                                     master_params)
3339 3333
    result.Raise("Could not disable the master role")
3340 3334

  
3341 3335
    try:
......
3353 3347
        pass
3354 3348
      _UploadHelper(self, node_list, constants.SSH_KNOWN_HOSTS_FILE)
3355 3349
    finally:
3350
      master_params.ip = new_ip
3356 3351
      result = self.rpc.call_node_activate_master_ip(master_params.name,
3357
                                                     new_ip,
3358
                                                     master_params.netmask,
3359
                                                     master_params.netdev,
3360
                                                     master_params.ip_family)
3352
                                                     master_params)
3361 3353
      msg = result.fail_msg
3362 3354
      if msg:
3363 3355
        self.LogWarning("Could not re-enable the master role on"
......
3715 3707
      feedback_fn("Shutting down master ip on the current netdev (%s)" %
3716 3708
                  self.cluster.master_netdev)
3717 3709
      result = self.rpc.call_node_deactivate_master_ip(master_params.name,
3718
                                                       master_params.ip,
3719
                                                       master_params.netmask,
3720
                                                       master_params.netdev,
3721
                                                       master_params.ip_family)
3710
                                                       master_params)
3722 3711
      result.Raise("Could not disable the master ip")
3723 3712
      feedback_fn("Changing master_netdev from %s to %s" %
3724 3713
                  (master_params.netdev, self.op.master_netdev))
......
3746 3735
      feedback_fn("Starting the master ip on the new master netdev (%s)" %
3747 3736
                  self.op.master_netdev)
3748 3737
      result = self.rpc.call_node_activate_master_ip(master_params.name,
3749
                                                     master_params.ip,
3750
                                                     master_params.netmask,
3751
                                                     master_params.netdev,
3752
                                                     master_params.ip_family)
3738
                                                     master_params)
3753 3739
      if result.fail_msg:
3754 3740
        self.LogWarning("Could not re-enable the master ip on"
3755 3741
                        " the master, please restart manually: %s",
......
3913 3899
    """
3914 3900
    master_params = self.cfg.GetMasterNetworkParameters()
3915 3901
    self.rpc.call_node_activate_master_ip(master_params.name,
3916
                                          master_params.ip,
3917
                                          master_params.netmask,
3918
                                          master_params.netdev,
3919
                                          master_params.ip_family)
3902
                                          master_params)
3920 3903

  
3921 3904

  
3922 3905
class LUClusterDeactivateMasterIp(NoHooksLU):
......
3928 3911

  
3929 3912
    """
3930 3913
    master_params = self.cfg.GetMasterNetworkParameters()
3931
    self.rpc.call_node_deactivate_master_ip(master_params.name,
3932
                                            master_params.ip,
3933
                                            master_params.netmask,
3934
                                            master_params.netdev,
3935
                                            master_params.ip_family)
3914
    self.rpc.call_node_deactivate_master_ip(master_params.name, master_params)
3936 3915

  
3937 3916

  
3938 3917
def _WaitForSync(lu, instance, disks=None, oneshot=False):
b/lib/config.py
939 939

  
940 940
    """
941 941
    cluster = self._config_data.cluster
942
    result = objects.MasterNetworkParameters(cluster.master_node,
943
      cluster.master_ip,
944
      cluster.master_netdev,
945
      cluster.master_netmask,
946
      cluster.primary_ip_family)
942
    result = objects.MasterNetworkParameters(name=cluster.master_node,
943
      ip=cluster.master_ip,
944
      netmask=cluster.master_netmask,
945
      netdev=cluster.master_netdev,
946
      ip_family=cluster.primary_ip_family)
947 947

  
948 948
    return result
949 949

  
b/lib/rpc_defs.py
399 399
      ("no_voting", None, None),
400 400
      ], None, "Starts master daemons on a node"),
401 401
    ("node_activate_master_ip", SINGLE, TMO_FAST, [
402
      ("master_ip", None, "The master IP"),
403
      ("master_netmask", None, "The master IP netmask"),
404
      ("master_netdev", None, "The master network device"),
405
      ("ip_family", None, "The cluster IP family"),
402
      ("master_params", ED_OBJECT_DICT, "Network parameters of the master"),
406 403
      ], None,
407 404
      "Activates master IP on a node"),
408 405
    ("node_stop_master", SINGLE, TMO_FAST, [], None,
409 406
     "Deactivates master IP and stops master daemons on a node"),
410 407
    ("node_deactivate_master_ip", SINGLE, TMO_FAST, [
411
      ("master_ip", None, "The master IP"),
412
      ("master_netmask", None, "The master IP netmask"),
413
      ("master_netdev", None, "The master network device"),
414
      ("ip_family", None, "The cluster IP family"),
408
      ("master_params", ED_OBJECT_DICT, "Network parameters of the master"),
415 409
      ], None,
416 410
     "Deactivates master IP on a node"),
417 411
    ("node_change_master_netmask", SINGLE, TMO_FAST, [
b/lib/server/masterd.py
537 537
  master_params = cfg.GetMasterNetworkParameters()
538 538
  runner = rpc.BootstrapRunner()
539 539
  result = runner.call_node_activate_master_ip(master_params.name,
540
                                               master_params.ip,
541
                                               master_params.netmask,
542
                                               master_params.netdev,
543
                                               master_params.ip_family)
540
                                               master_params)
544 541

  
545 542
  msg = result.fail_msg
546 543
  if msg:
b/lib/server/noded.py
697 697
    """Activate the master IP on this node.
698 698

  
699 699
    """
700
    return backend.ActivateMasterIp(params[0], params[1], params[2], params[3])
700
    master_params = objects.MasterNetworkParameters.FromDict(params[0])
701
    return backend.ActivateMasterIp(master_params)
701 702

  
702 703
  @staticmethod
703 704
  def perspective_node_deactivate_master_ip(params):
704 705
    """Deactivate the master IP on this node.
705 706

  
706 707
    """
707
    return backend.DeactivateMasterIp(params[0], params[1], params[2],
708
                                      params[3])
708
    master_params = objects.MasterNetworkParameters.FromDict(params[0])
709
    return backend.DeactivateMasterIp(master_params)
709 710

  
710 711
  @staticmethod
711 712
  def perspective_node_stop_master(params):

Also available in: Unified diff