Revision 0ad1ea40 lib/cmdlib.py

b/lib/cmdlib.py
2099 2099

  
2100 2100
  @classmethod
2101 2101
  def _VerifyFiles(cls, errorif, nodeinfo, master_node, all_nvinfo,
2102
                   (files_all, files_all_opt, files_mc, files_vm)):
2102
                   (files_all, files_opt, files_mc, files_vm)):
2103 2103
    """Verifies file checksums collected from all nodes.
2104 2104

  
2105 2105
    @param errorif: Callback for reporting errors
......
2108 2108
    @param all_nvinfo: RPC results
2109 2109

  
2110 2110
    """
2111
    assert (len(files_all | files_all_opt | files_mc | files_vm) ==
2112
            sum(map(len, [files_all, files_all_opt, files_mc, files_vm]))), \
2113
           "Found file listed in more than one file list"
2114

  
2115 2111
    # Define functions determining which nodes to consider for a file
2116 2112
    files2nodefn = [
2117 2113
      (files_all, None),
2118
      (files_all_opt, None),
2119 2114
      (files_mc, lambda node: (node.master_candidate or
2120 2115
                               node.name == master_node)),
2121 2116
      (files_vm, lambda node: node.vm_capable),
......
2132 2127
                        frozenset(map(operator.attrgetter("name"), filenodes)))
2133 2128
                       for filename in files)
2134 2129

  
2135
    assert set(nodefiles) == (files_all | files_all_opt | files_mc | files_vm)
2130
    assert set(nodefiles) == (files_all | files_mc | files_vm)
2136 2131

  
2137 2132
    fileinfo = dict((filename, {}) for filename in nodefiles)
2138 2133
    ignore_nodes = set()
......
2174 2169
      # Nodes missing file
2175 2170
      missing_file = expected_nodes - with_file
2176 2171

  
2177
      if filename in files_all_opt:
2172
      if filename in files_opt:
2178 2173
        # All or no nodes
2179 2174
        errorif(missing_file and missing_file != expected_nodes,
2180 2175
                cls.ECLUSTERFILECHECK, None,
......
3735 3730
    constants.SSH_KNOWN_HOSTS_FILE,
3736 3731
    constants.CONFD_HMAC_KEY,
3737 3732
    constants.CLUSTER_DOMAIN_SECRET_FILE,
3733
    constants.RAPI_USERS_FILE,
3738 3734
    ])
3739 3735

  
3740 3736
  if not redist:
......
3747 3743
  if cluster.modify_etc_hosts:
3748 3744
    files_all.add(constants.ETC_HOSTS)
3749 3745

  
3750
  # Files which must either exist on all nodes or on none
3751
  files_all_opt = set([
3746
  # Files which are optional, these must:
3747
  # - be present in one other category as well
3748
  # - either exist or not exist on all nodes of that category (mc, vm all)
3749
  files_opt = set([
3752 3750
    constants.RAPI_USERS_FILE,
3753 3751
    ])
3754 3752

  
......
3762 3760
    for hv_name in cluster.enabled_hypervisors
3763 3761
    for filename in hypervisor.GetHypervisor(hv_name).GetAncillaryFiles()[0])
3764 3762

  
3765
  # Filenames must be unique
3766
  assert (len(files_all | files_all_opt | files_mc | files_vm) ==
3767
          sum(map(len, [files_all, files_all_opt, files_mc, files_vm]))), \
3763
  files_opt |= set(filename
3764
    for hv_name in cluster.enabled_hypervisors
3765
    for filename in hypervisor.GetHypervisor(hv_name).GetAncillaryFiles()[1])
3766

  
3767
  # Filenames in each category must be unique
3768
  all_files_set = files_all | files_mc | files_vm
3769
  assert (len(all_files_set) ==
3770
          sum(map(len, [files_all, files_mc, files_vm]))), \
3768 3771
         "Found file listed in more than one file list"
3769 3772

  
3770
  return (files_all, files_all_opt, files_mc, files_vm)
3773
  # Optional files must be present in one other category
3774
  assert all_files_set.issuperset(files_opt), \
3775
         "Optional file not in a different required list"
3776

  
3777
  return (files_all, files_opt, files_mc, files_vm)
3771 3778

  
3772 3779

  
3773 3780
def _RedistributeAncillaryFiles(lu, additional_nodes=None, additional_vm=True):
......
3801 3808
      nodelist.remove(master_info.name)
3802 3809

  
3803 3810
  # Gather file lists
3804
  (files_all, files_all_opt, files_mc, files_vm) = \
3811
  (files_all, _, files_mc, files_vm) = \
3805 3812
    _ComputeAncillaryFiles(cluster, True)
3806 3813

  
3807 3814
  # Never re-distribute configuration file from here
......
3811 3818

  
3812 3819
  filemap = [
3813 3820
    (online_nodes, files_all),
3814
    (online_nodes, files_all_opt),
3815 3821
    (vm_nodes, files_vm),
3816 3822
    ]
3817 3823

  

Also available in: Unified diff