1*760c253cSXin Li# -*- coding: utf-8 -*- 2*760c253cSXin Li# Copyright 2014 The ChromiumOS Authors 3*760c253cSXin Li# Use of this source code is governed by a BSD-style license that can be 4*760c253cSXin Li# found in the LICENSE file. 5*760c253cSXin Li 6*760c253cSXin Li"""Module to compare two machines.""" 7*760c253cSXin Li 8*760c253cSXin Li 9*760c253cSXin Liimport argparse 10*760c253cSXin Liimport os.path 11*760c253cSXin Liimport sys 12*760c253cSXin Li 13*760c253cSXin Lifrom machine_manager import CrosMachine 14*760c253cSXin Li 15*760c253cSXin Li 16*760c253cSXin Lidef PrintUsage(msg): 17*760c253cSXin Li print(msg) 18*760c253cSXin Li print("Usage: ") 19*760c253cSXin Li print( 20*760c253cSXin Li "\n compare_machines.py --chromeos_root=/path/to/chroot/ " 21*760c253cSXin Li "machine1 machine2 ..." 22*760c253cSXin Li ) 23*760c253cSXin Li 24*760c253cSXin Li 25*760c253cSXin Lidef Main(argv): 26*760c253cSXin Li 27*760c253cSXin Li parser = argparse.ArgumentParser() 28*760c253cSXin Li parser.add_argument( 29*760c253cSXin Li "--chromeos_root", 30*760c253cSXin Li default="/path/to/chromeos", 31*760c253cSXin Li dest="chromeos_root", 32*760c253cSXin Li help="ChromeOS root checkout directory", 33*760c253cSXin Li ) 34*760c253cSXin Li parser.add_argument("remotes", nargs=argparse.REMAINDER) 35*760c253cSXin Li 36*760c253cSXin Li options = parser.parse_args(argv) 37*760c253cSXin Li 38*760c253cSXin Li machine_list = options.remotes 39*760c253cSXin Li if len(machine_list) < 2: 40*760c253cSXin Li PrintUsage("ERROR: Must specify at least two machines.") 41*760c253cSXin Li return 1 42*760c253cSXin Li elif not os.path.exists(options.chromeos_root): 43*760c253cSXin Li PrintUsage( 44*760c253cSXin Li "Error: chromeos_root does not exist %s" % options.chromeos_root 45*760c253cSXin Li ) 46*760c253cSXin Li return 1 47*760c253cSXin Li 48*760c253cSXin Li chroot = options.chromeos_root 49*760c253cSXin Li cros_machines = [] 50*760c253cSXin Li test_machine_checksum = None 51*760c253cSXin Li for m in machine_list: 52*760c253cSXin Li cm = CrosMachine(m, chroot, "average") 53*760c253cSXin Li cros_machines = cros_machines + [cm] 54*760c253cSXin Li test_machine_checksum = cm.machine_checksum 55*760c253cSXin Li 56*760c253cSXin Li ret = 0 57*760c253cSXin Li for cm in cros_machines: 58*760c253cSXin Li print("checksum for %s : %s" % (cm.name, cm.machine_checksum)) 59*760c253cSXin Li if cm.machine_checksum != test_machine_checksum: 60*760c253cSXin Li ret = 1 61*760c253cSXin Li print("Machine checksums do not all match") 62*760c253cSXin Li 63*760c253cSXin Li if ret == 0: 64*760c253cSXin Li print("Machines all match.") 65*760c253cSXin Li 66*760c253cSXin Li return ret 67*760c253cSXin Li 68*760c253cSXin Li 69*760c253cSXin Liif __name__ == "__main__": 70*760c253cSXin Li retval = Main(sys.argv[1:]) 71*760c253cSXin Li sys.exit(retval) 72