65 lines
2 KiB
Python
Executable file
65 lines
2 KiB
Python
Executable file
#!/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()
|