[2251] | 1 | #!/usr/bin/python |
---|
[2252] | 2 | """ |
---|
| 3 | |
---|
| 4 | VM names on stdin. |
---|
| 5 | """ |
---|
| 6 | |
---|
[2250] | 7 | import smtplib |
---|
[2252] | 8 | import optparse |
---|
| 9 | import sys |
---|
[2250] | 10 | from email.mime.text import MIMEText |
---|
| 11 | |
---|
[2252] | 12 | from invirt import database |
---|
[2250] | 13 | |
---|
[2252] | 14 | def send_mail(smtp, opts, message, vm): |
---|
| 15 | contact = database.Machine.query.filter_by(name=vm).first().contact |
---|
[2250] | 16 | if '@' not in contact: |
---|
| 17 | contact += '@mit.edu' |
---|
| 18 | msg = MIMEText(message % vm) |
---|
| 19 | msg['To'] = contact |
---|
| 20 | msg['CC'] = 'XVM <xvm@mit.edu>' |
---|
| 21 | msg['Reply-To'] = 'XVM <xvm@mit.edu>' |
---|
[2252] | 22 | msg['From'] = opts.from_addr |
---|
[2275] | 23 | msg['Subject'] = opts.subject % vm |
---|
[2252] | 24 | smtp.sendmail(opts.from_addr, |
---|
[2250] | 25 | [contact, 'xvm@mit.edu'], |
---|
| 26 | msg.as_string()) |
---|
| 27 | |
---|
[2252] | 28 | def main(argv): |
---|
| 29 | parser = optparse.OptionParser( |
---|
| 30 | usage = '%prog {-m message, -f from} [options] <vm-list', |
---|
| 31 | description = __doc__.strip()) |
---|
| 32 | parser.add_option('-m', '--message', |
---|
| 33 | type = 'string', |
---|
| 34 | dest = 'message', |
---|
| 35 | help = 'filename with body of message') |
---|
[2275] | 36 | parser.add_option('-s', '--subject', |
---|
| 37 | type = 'string', |
---|
| 38 | dest = 'subject', |
---|
| 39 | default = '[xvm] Unexpected reboot of your VM %s', |
---|
| 40 | help = 'subject line of message; %s for VM name') |
---|
[2252] | 41 | parser.add_option('-f', '--from', |
---|
| 42 | type = 'string', |
---|
| 43 | dest = 'from_addr', |
---|
| 44 | help = 'for From: and envelope-from; first word is %(sig)s') |
---|
| 45 | parser.add_option('--host', |
---|
| 46 | type = 'string', |
---|
| 47 | dest = 'host', |
---|
| 48 | help = 'host that failed; %(host)s in message') |
---|
| 49 | parser.add_option('--time', |
---|
| 50 | type = 'string', |
---|
| 51 | dest = 'time', |
---|
| 52 | help = 'time of failure; %(time)s in message') |
---|
| 53 | opts, args = parser.parse_args() |
---|
[2250] | 54 | |
---|
[2252] | 55 | if len(args) or not opts.message or not opts.from_addr: |
---|
| 56 | parser.print_help(sys.stderr) |
---|
| 57 | return 2 |
---|
[2250] | 58 | |
---|
[2252] | 59 | opts.sig = opts.from_addr.split()[0] |
---|
| 60 | message = file(opts.message).read() % opts.__dict__ |
---|
| 61 | |
---|
| 62 | vms = sys.stdin.read().split() |
---|
| 63 | |
---|
| 64 | database.connect() |
---|
| 65 | s = smtplib.SMTP() |
---|
| 66 | s.connect() |
---|
| 67 | |
---|
| 68 | for vm in vms: |
---|
| 69 | send_mail(s, opts, message, vm) |
---|
| 70 | |
---|
| 71 | s.close() |
---|
| 72 | |
---|
| 73 | if __name__ == '__main__': |
---|
| 74 | sys.exit(main(sys.argv)) |
---|