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