| #!/usr/bin/python |
| # Copyright Google, Martin J. Bligh <mbligh@google.com>, Jan 2009 |
| import os, sys |
| import common |
| from autotest_lib.server import frontend |
| |
| try: |
| old = frontend.AFE(web_server='http://' + sys.argv[1]) |
| new = frontend.AFE(web_server='http://' + sys.argv[2]) |
| |
| hostname = sys.argv[3] |
| print 'Migrating %s ...' % hostname |
| |
| old_host = old.get_hosts(hostname=hostname)[0] |
| print old_host |
| except Exception: |
| print "Usage: atest_migrate_host <old_server> <new_server> <hostname>" |
| raise |
| sys.exit(1) |
| |
| |
| # Create host |
| |
| new_host = new.create_host(hostname=hostname, locked=True) |
| |
| # Deal with labels |
| old_host_labels = old_host.get_labels() |
| for label in old_host_labels: |
| # Create any non-existant labels |
| if not new.get_labels(name=label.name): |
| print label |
| new_label = new.create_label(name=label.name, |
| platform=label.platform, |
| only_if_needed=label.only_if_needed) |
| # Add any missing labels to the machine |
| if not [l for l in new_host.get_labels() if l.name == label.name]: |
| new_host.add_labels([label.name]) |
| |
| # Deal with ACLs |
| old_host_acls = [a for a in old_host.get_acls() if a.name != 'Everyone'] |
| new_users = [user.login for user in new.get_users()] |
| |
| for acl in old_host_acls: |
| # Create any non-existant ACLs |
| new_acls = new.get_acls(name=acl.name) |
| if new_acls: |
| new_acl = new_acls[0] |
| else: |
| new_acl = new.create_acl(name=acl.name, description=acl.description) |
| # Add any users to the ACL that we can |
| for user in acl.users: |
| if user in new_users: |
| new_acl.add_users([user]) |
| else: |
| print 'Skipping absent user %s' % user |
| # Add any missing ACLs to the machine |
| if not [a for a in new_host.get_acls() if a.name == acl.name]: |
| new_host.add_acl(acl.name) |
| |
| # Enable the new host |
| if not old_host.locked: |
| new_host.modify(locked=False) |
| |
| # Delete host from old server |
| old_host.delete() |