167f0893c86f3898fc9c5828af10edd07d9b73adbmbligh#!/usr/bin/python 267f0893c86f3898fc9c5828af10edd07d9b73adbmbligh# Copyright Google, Martin J. Bligh <mbligh@google.com>, Jan 2009 367f0893c86f3898fc9c5828af10edd07d9b73adbmblighimport os, sys 467f0893c86f3898fc9c5828af10edd07d9b73adbmblighimport common 567f0893c86f3898fc9c5828af10edd07d9b73adbmblighfrom autotest_lib.server import frontend 667f0893c86f3898fc9c5828af10edd07d9b73adbmbligh 767f0893c86f3898fc9c5828af10edd07d9b73adbmblightry: 867f0893c86f3898fc9c5828af10edd07d9b73adbmbligh old = frontend.AFE(web_server='http://' + sys.argv[1]) 967f0893c86f3898fc9c5828af10edd07d9b73adbmbligh new = frontend.AFE(web_server='http://' + sys.argv[2]) 1067f0893c86f3898fc9c5828af10edd07d9b73adbmbligh 1167f0893c86f3898fc9c5828af10edd07d9b73adbmbligh hostname = sys.argv[3] 1267f0893c86f3898fc9c5828af10edd07d9b73adbmbligh print 'Migrating %s ...' % hostname 1367f0893c86f3898fc9c5828af10edd07d9b73adbmbligh 1467f0893c86f3898fc9c5828af10edd07d9b73adbmbligh old_host = old.get_hosts(hostname=hostname)[0] 1567f0893c86f3898fc9c5828af10edd07d9b73adbmbligh print old_host 1667f0893c86f3898fc9c5828af10edd07d9b73adbmblighexcept Exception: 1767f0893c86f3898fc9c5828af10edd07d9b73adbmbligh print "Usage: atest_migrate_host <old_server> <new_server> <hostname>" 1867f0893c86f3898fc9c5828af10edd07d9b73adbmbligh raise 1967f0893c86f3898fc9c5828af10edd07d9b73adbmbligh sys.exit(1) 2067f0893c86f3898fc9c5828af10edd07d9b73adbmbligh 2167f0893c86f3898fc9c5828af10edd07d9b73adbmbligh 2267f0893c86f3898fc9c5828af10edd07d9b73adbmbligh# Create host 2367f0893c86f3898fc9c5828af10edd07d9b73adbmbligh 246463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mblighnew_host = new.create_host(hostname=hostname, locked=True) 2567f0893c86f3898fc9c5828af10edd07d9b73adbmbligh 2667f0893c86f3898fc9c5828af10edd07d9b73adbmbligh# Deal with labels 2767f0893c86f3898fc9c5828af10edd07d9b73adbmblighold_host_labels = old_host.get_labels() 2867f0893c86f3898fc9c5828af10edd07d9b73adbmblighfor label in old_host_labels: 2967f0893c86f3898fc9c5828af10edd07d9b73adbmbligh # Create any non-existant labels 3067f0893c86f3898fc9c5828af10edd07d9b73adbmbligh if not new.get_labels(name=label.name): 3167f0893c86f3898fc9c5828af10edd07d9b73adbmbligh print label 3267f0893c86f3898fc9c5828af10edd07d9b73adbmbligh new_label = new.create_label(name=label.name, 339c5fbbe29ab7ca7f8b69687de08a55c518378ae7MK Ryu platform=label.platform, 349c5fbbe29ab7ca7f8b69687de08a55c518378ae7MK Ryu only_if_needed=label.only_if_needed) 3567f0893c86f3898fc9c5828af10edd07d9b73adbmbligh # Add any missing labels to the machine 3667f0893c86f3898fc9c5828af10edd07d9b73adbmbligh if not [l for l in new_host.get_labels() if l.name == label.name]: 3767f0893c86f3898fc9c5828af10edd07d9b73adbmbligh new_host.add_labels([label.name]) 3867f0893c86f3898fc9c5828af10edd07d9b73adbmbligh 3967f0893c86f3898fc9c5828af10edd07d9b73adbmbligh# Deal with ACLs 4067f0893c86f3898fc9c5828af10edd07d9b73adbmblighold_host_acls = [a for a in old_host.get_acls() if a.name != 'Everyone'] 4167f0893c86f3898fc9c5828af10edd07d9b73adbmblighnew_users = [user.login for user in new.get_users()] 4267f0893c86f3898fc9c5828af10edd07d9b73adbmbligh 4367f0893c86f3898fc9c5828af10edd07d9b73adbmblighfor acl in old_host_acls: 4467f0893c86f3898fc9c5828af10edd07d9b73adbmbligh # Create any non-existant ACLs 456463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mbligh new_acls = new.get_acls(name=acl.name) 466463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mbligh if new_acls: 476463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mbligh new_acl = new_acls[0] 486463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mbligh else: 4967f0893c86f3898fc9c5828af10edd07d9b73adbmbligh new_acl = new.create_acl(name=acl.name, description=acl.description) 506463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mbligh # Add any users to the ACL that we can 516463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mbligh for user in acl.users: 526463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mbligh if user in new_users: 536463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mbligh new_acl.add_users([user]) 546463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mbligh else: 556463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mbligh print 'Skipping absent user %s' % user 5667f0893c86f3898fc9c5828af10edd07d9b73adbmbligh # Add any missing ACLs to the machine 5767f0893c86f3898fc9c5828af10edd07d9b73adbmbligh if not [a for a in new_host.get_acls() if a.name == acl.name]: 5867f0893c86f3898fc9c5828af10edd07d9b73adbmbligh new_host.add_acl(acl.name) 5967f0893c86f3898fc9c5828af10edd07d9b73adbmbligh 606463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mbligh# Enable the new host 616463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mblighif not old_host.locked: 626463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mbligh new_host.modify(locked=False) 636463c4b7454f1fe128e1dcdfe71baf0ed7e5bfc2mbligh 6467f0893c86f3898fc9c5828af10edd07d9b73adbmbligh# Delete host from old server 6567f0893c86f3898fc9c5828af10edd07d9b73adbmblighold_host.delete() 66