3 # Copyright (C) 2008 Andrew Bartlett <abartlet@samba.org>
4 # Copyright (C) 2008 Jelmer Vernooij <jelmer@samba.org>
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 from buildfarm import (
29 from email.MIMEText import MIMEText
31 buildfarm = BuildFarm()
37 print "Samba Build farm management tool"
38 print "================================"
43 print "Add Machine to build farm: add"
44 print "Remove Machine from build farm: remove"
45 print "Modify build farm account: modify"
46 print "Print build farm host info: info"
47 print "Print build farm host list: list"
49 op = raw_input("Select Operation: [add] ").lower()
55 hostname = raw_input("Please enter hostname to delete: ")
57 db.deletehost(hostname)
58 except hostdb.NoSuchHost, e:
59 print "No such host '%s'" % e.name
62 hostname = raw_input("Please enter hostname to modify: ")
63 host = db.host(hostname)
64 print "Owner: %s <%s>" % host.owner
65 print "Platform: %s" % host.platform
67 mod_op = raw_input("Modify owner or platform: [platform] ")
70 if mod_op == "platform":
71 platform = raw_input("Enter new platform: ")
73 db.update_platform(hostname, platform)
74 except hostdb.NoSuchHost, e:
75 print "No such host: %s" % e.name
77 elif mod_op == "owner":
78 owner = raw_input("Enter new owner's name: ")
79 owner_email = raw_input("Enter new owner's e-mail address: ")
81 db.update_owner(hostname, owner, owner_email)
82 except hostdb.NoSuchHost, e:
83 print "No such host: %s" % e.name
86 print "Unknown subcommand %s" % mod_op
89 hostname = raw_input("Machine hostname: ")
90 platform = raw_input("Machine platform (eg Fedora 9 x86_64): ")
91 owner = raw_input("Machine Owner Name: ")
92 owner_email = raw_input("Machine Owner E-mail: ")
93 password = raw_input("Enter password: [generate random] ")
95 password = commands.getoutput("pwgen 16 1").strip()
96 print "Password will be: %s" % password
98 print "Enter permission e-mail, finish with a ."
105 db.createhost(hostname, platform, owner, owner_email, password, "".join(permission))
106 except hostdb.HostAlreadyExists, e:
107 print "A host with the name %s already exists." % e.name
111 Welcome to the Samba.org build farm.
113 Your host %(hostname)s has been added to the Samba Build farm.
115 We have recorded that it is running %(platform)s.
117 If you have not already done so, please read:
118 http://build.samba.org/instructions.html
120 The password for your rsync .password file is %(password)s
122 An e-mail asking you to subscribe to the build-farmers mailing
123 list will arrive shortly. Please ensure you maintain your
124 subscription to this list while you have hosts in the build farm.
126 Thank you for your contribution to ensuring portability and quality
127 of Samba.org projects.
130 """ % { "hostname": hostname, "platform": platform, "password": password }
132 msg_notification = MIMEText(body)
134 # send the password in an e-mail to that address
135 msg_notification["Subject"] = "Your new build farm host %s" % hostname
136 msg_notification["To"] = "\"%s\" <%s>" % (owner, owner_email)
137 msg_notification["Bcc"] = "build@samba.org"
138 msg_notification["From"] = "\"Samba Build Farm\" <build@samba.org>"
140 msg_subscribe = MIMEText("""Please subscribe %s to the build-farmers mailing list
142 Thanks, your friendly Samba build farm administrator <build@samba.org>""" % owner)
143 msg_subscribe["From"] = "\"%s\" <%s>" % (owner, owner_email)
144 msg_subscribe["Subject"] = 'Subscribe to build-farmers mailing list'
145 msg_subscribe["To"] = 'build-farmers-join@lists.samba.org'
148 print msg_notification
152 for msg in (msg_notification, msg_subscribe):
153 recipients = [msg["To"]]
155 recipients.append(msg["Bcc"])
156 s.sendmail(msg["From"], recipients, msg.as_string())
160 hostname = raw_input("Hostname: ")
161 host = db.host(hostname)
163 opt_fqdn = " (%s)" % host.fqdn
166 print "Host: %s%s" % (host.name, opt_fqdn)
167 print "Platform: %s" % host.platform
168 print "Owner: %s <%s>" % host.owner
170 # Don't run the update of the text files
173 for host in db.host_ages():
175 age = time.time() - host.last_update
178 print "%-12s %s" % (age, host.name)
180 print "Unknown command %s" % op
183 temp_rsyncd_secrets = os.path.join(os.path.dirname(__file__), "../rsyncd.secrets.new")
184 f = open(temp_rsyncd_secrets, "w")
185 f.writelines(db.create_rsync_secrets())
188 os.rename(temp_rsyncd_secrets, "../rsyncd.secrets")
190 temp_hosts_list_file = os.path.join(os.path.dirname(__file__), "web", "hosts.list.new")
191 f = open(temp_hosts_list_file, "w")
192 f.writelines(db.create_hosts_list())
195 os.rename(temp_hosts_list_file, os.path.join(os.path.dirname(__file__), "web/hosts.list"))