Revision 7b2cd2b4

b/lib/cmdlib.py
2561 2561
    ("remove_uids", None, _NoType),
2562 2562
    ("maintain_node_health", None, _TMaybeBool),
2563 2563
    ("nicparams", None, _TOr(_TDict, _TNone)),
2564
    ("drbd_helper", None, _TOr(_TString, _TNone)),
2564 2565
    ]
2565 2566
  REQ_BGL = False
2566 2567

  
......
2608 2609
        raise errors.OpPrereqError("Cannot disable lvm storage while lvm-based"
2609 2610
                                   " instances exist", errors.ECODE_INVAL)
2610 2611

  
2612
    if self.op.drbd_helper is not None and not self.op.drbd_helper:
2613
      if self.cfg.HasAnyDiskOfType(constants.LD_DRBD8):
2614
        raise errors.OpPrereqError("Cannot disable drbd helper while"
2615
                                   " drbd-based instances exist",
2616
                                   errors.ECODE_INVAL)
2617

  
2611 2618
    node_list = self.acquired_locks[locking.LEVEL_NODE]
2612 2619

  
2613 2620
    # if vg_name not None, checks given volume group on all nodes
......
2627 2634
          raise errors.OpPrereqError("Error on node '%s': %s" %
2628 2635
                                     (node, vgstatus), errors.ECODE_ENVIRON)
2629 2636

  
2637
    if self.op.drbd_helper:
2638
      # checks given drbd helper on all nodes
2639
      helpers = self.rpc.call_drbd_helper(node_list)
2640
      for node in node_list:
2641
        ninfo = self.cfg.GetNodeInfo(node)
2642
        if ninfo.offline:
2643
          self.LogInfo("Not checking drbd helper on offline node %s", node)
2644
          continue
2645
        msg = helpers[node].fail_msg
2646
        if msg:
2647
          raise errors.OpPrereqError("Error checking drbd helper on node"
2648
                                     " '%s': %s" % (node, msg),
2649
                                     errors.ECODE_ENVIRON)
2650
        node_helper = helpers[node].payload
2651
        if node_helper != self.op.drbd_helper:
2652
          raise errors.OpPrereqError("Error on node '%s': drbd helper is %s" %
2653
                                     (node, node_helper), errors.ECODE_ENVIRON)
2654

  
2630 2655
    self.cluster = cluster = self.cfg.GetClusterInfo()
2631 2656
    # validate params changes
2632 2657
    if self.op.beparams:
......
2756 2781
      else:
2757 2782
        feedback_fn("Cluster LVM configuration already in desired"
2758 2783
                    " state, not changing")
2784
    if self.op.drbd_helper is not None:
2785
      new_helper = self.op.drbd_helper
2786
      if not new_helper:
2787
        new_helper = None
2788
      if new_helper != self.cfg.GetDRBDHelper():
2789
        self.cfg.SetDRBDHelper(new_helper)
2790
      else:
2791
        feedback_fn("Cluster DRBD helper already in desired state,"
2792
                    " not changing")
2759 2793
    if self.op.hvparams:
2760 2794
      self.cluster.hvparams = self.new_hvparams
2761 2795
    if self.op.os_hvp:
b/lib/opcodes.py
299 299
  OP_ID = "OP_CLUSTER_SET_PARAMS"
300 300
  __slots__ = [
301 301
    "vg_name",
302
    "drbd_helper",
302 303
    "enabled_hypervisors",
303 304
    "hvparams",
304 305
    "os_hvp",

Also available in: Unified diff