Revision 821afb13 lib/cmdlib.py
b/lib/cmdlib.py | ||
---|---|---|
1181 | 1181 |
return output |
1182 | 1182 |
|
1183 | 1183 |
|
1184 |
def _CheckNodesDirs(node_list, paths): |
|
1185 |
"""Verify if the given nodes have the same files. |
|
1186 |
|
|
1187 |
Args: |
|
1188 |
node_list: the list of node names to check |
|
1189 |
paths: the list of directories to checksum and compare |
|
1190 |
|
|
1191 |
Returns: |
|
1192 |
list of (node, different_file, message); if empty, the files are in sync |
|
1193 |
|
|
1194 |
""" |
|
1195 |
file_names = [] |
|
1196 |
for dir_name in paths: |
|
1197 |
flist = [os.path.join(dir_name, name) for name in os.listdir(dir_name)] |
|
1198 |
flist = [name for name in flist if os.path.isfile(name)] |
|
1199 |
file_names.extend(flist) |
|
1200 |
|
|
1201 |
local_checksums = utils.FingerprintFiles(file_names) |
|
1202 |
|
|
1203 |
results = [] |
|
1204 |
verify_params = {'filelist': file_names} |
|
1205 |
all_node_results = rpc.call_node_verify(node_list, verify_params) |
|
1206 |
for node_name in node_list: |
|
1207 |
node_result = all_node_results.get(node_name, False) |
|
1208 |
if not node_result or 'filelist' not in node_result: |
|
1209 |
results.append((node_name, "'all files'", "node communication error")) |
|
1210 |
continue |
|
1211 |
remote_checksums = node_result['filelist'] |
|
1212 |
for fname in local_checksums: |
|
1213 |
if fname not in remote_checksums: |
|
1214 |
results.append((node_name, fname, "missing file")) |
|
1215 |
elif remote_checksums[fname] != local_checksums[fname]: |
|
1216 |
results.append((node_name, fname, "wrong checksum")) |
|
1217 |
return results |
|
1218 |
|
|
1219 |
|
|
1220 | 1184 |
class LUAddNode(LogicalUnit): |
1221 | 1185 |
"""Logical unit for adding node to the cluster. |
1222 | 1186 |
|
Also available in: Unified diff