EC2 script updates

metadata
Wenzel Jakob 2011-04-26 06:25:57 +02:00
parent e7148064d2
commit e8716abab5
1 changed files with 31 additions and 2 deletions

View File

@ -167,7 +167,7 @@ def terminate(name):
for i in instances: for i in instances:
if i.state == u'running' and i.public_dns_name == name: if i.state == u'running' and i.public_dns_name == name:
print("Stopping node %s .." % i.public_dns_name) print("Stopping node %s .." % i.public_dns_name)
i.stop() i.terminate()
return return
print('Node could not be found or is not running') print('Node could not be found or is not running')
@ -179,7 +179,7 @@ def terminateAll(groupName):
for i in instances: for i in instances:
if i.state == u'running' and getGroup(i) == groupName: if i.state == u'running' and getGroup(i) == groupName:
print("Stopping node %s .." % i.public_dns_name) print("Stopping node %s .." % i.public_dns_name)
i.stop() i.terminate()
def cancelSpot(id): def cancelSpot(id):
print('Terminating spot request \"%s\" ..' % id) print('Terminating spot request \"%s\" ..' % id)
@ -235,6 +235,25 @@ def systemLoad(groupName):
print("Done.") print("Done.")
break; break;
def runCommand(cmd, groupName):
print('Executing command "%s" on all nodes of group "%s" ..' % (cmd, groupName))
reservations = conn.get_all_instances()
instances = [i for r in reservations for i in r.instances]
processes = []
for i in instances:
if i.state == u'running' and getGroup(i) == groupName:
print("Sending command to node %s" % i.public_dns_name)
processes += [remoteCommand(i.public_dns_name, cmd, False)]
while True:
doneCount = 0
time.sleep(1)
for p in processes:
if p.poll() != None:
doneCount += 1
if doneCount == len(processes):
print("Done.")
break;
def syncData(prefix, groupName): def syncData(prefix, groupName):
print('Fetching S3 prefix "%s/%s" on all nodes of the group "%s" ..' % (S3_PATH, prefix, groupName)) print('Fetching S3 prefix "%s/%s" on all nodes of the group "%s" ..' % (S3_PATH, prefix, groupName))
reservations = conn.get_all_instances() reservations = conn.get_all_instances()
@ -372,6 +391,9 @@ if len(sys.argv) == 1:
print(' systemLoad <group> -- Prints the system load (1, 5 and 15-minute averages)') print(' systemLoad <group> -- Prints the system load (1, 5 and 15-minute averages)')
print(' for each machine in the specified group') print(' for each machine in the specified group')
print('') print('')
print(' runCommand "cmd args" <group> -- Runs the specified command on each machine')
print(' in the specified group. Note that it has to be in quotes')
print('')
print(' syncData [prefix] <group> -- Downloads a file from the registered S3 bucket') print(' syncData [prefix] <group> -- Downloads a file from the registered S3 bucket')
print(' so that it is available to any rendering jobs. The download is') print(' so that it is available to any rendering jobs. The download is')
print(' simultaneously performed on all nodes of the specified group. ') print(' simultaneously performed on all nodes of the specified group. ')
@ -474,6 +496,13 @@ elif sys.argv[1] == 'systemLoad':
systemLoad(sys.argv[2]) systemLoad(sys.argv[2])
else: else:
systemLoad('systemLoad: Invalid number of arguments!') systemLoad('systemLoad: Invalid number of arguments!')
elif sys.argv[1] == 'runCommand':
if len(sys.argv) == 3:
runCommand(sys.argv[2], 'default')
elif len(sys.argv) == 4:
runCommand(sys.argv[2], sys.argv[3])
else:
print('runCommand: Invalid number of arguments!')
elif sys.argv[1] == 'regions': elif sys.argv[1] == 'regions':
for r in conn.get_all_regions(): for r in conn.get_all_regions():
print(r.name) print(r.name)