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()
35 def update_rsyncd_secrets():
36 temp_rsyncd_secrets = os.path.join(os.path.dirname(__file__), "../rsyncd.secrets.new")
37 f = open(temp_rsyncd_secrets, "w")
38 f.writelines(db.create_rsync_secrets())
41 os.rename(temp_rsyncd_secrets, "../rsyncd.secrets")
43 def update_hosts_list():
44 temp_hosts_list_file = os.path.join(os.path.dirname(__file__), "web", "hosts.list.new")
45 f = open(temp_hosts_list_file, "w")
46 f.writelines(db.create_hosts_list())
49 os.rename(temp_hosts_list_file, os.path.join(os.path.dirname(__file__), "web/hosts.list"))
53 print "Samba Build farm management tool"
54 print "================================"
59 print "Add Machine to build farm: add"
60 print "Remove Machine from build farm: remove"
61 print "Modify build farm account: modify"
62 print "Print build farm host info: info"
63 print "Print build farm host list: list"
65 op = raw_input("Select Operation: [add] ").lower()
71 hostname = raw_input("Please enter hostname to delete: ")
73 db.deletehost(hostname.decode("utf-8"))
74 except hostdb.NoSuchHost, e:
75 print "No such host '%s'" % e.name
79 update_rsyncd_secrets()
82 hostname = raw_input("Please enter hostname to modify: ")
84 host = db.host(hostname.decode("utf-8"))
85 except hostdb.NoSuchHost, e:
86 print "No such host '%s'" % e.name
88 print "Owner: %s <%s>" % host.owner
89 print "Platform: %s" % host.platform
91 mod_op = raw_input("Modify owner or platform: [platform] ")
94 if mod_op == "platform":
95 platform = raw_input("Enter new platform: ")
96 host.update_platform(platform.decode("utf-8"))
98 elif mod_op == "owner":
99 owner = raw_input("Enter new owner's name: ")
100 owner_email = raw_input("Enter new owner's e-mail address: ")
101 host.update_owner(owner.decode("utf-8"), owner_email.decode("utf-8"))
104 print "Unknown subcommand %s" % mod_op
106 update_rsyncd_secrets()
109 hostname = raw_input("Machine hostname: ")
111 db.host(hostname.decode("utf-8"))
112 except hostdb.NoSuchHost, e:
115 print "A host with the name %s already exists." % e.name
117 platform = raw_input("Machine platform (eg Fedora 9 x86_64): ")
118 owner = raw_input("Machine Owner Name: ")
119 owner_email = raw_input("Machine Owner E-mail: ")
120 password = raw_input("Enter password: [generate random] ")
122 password = commands.getoutput("pwgen 16 1").strip()
123 print "Password will be: %s" % password
125 print "Enter permission e-mail, finish with a ."
132 db.createhost(hostname.decode("utf-8"), platform.decode("utf-8"),
133 owner.decode("utf-8"), owner_email.decode("utf-8"),
134 password.decode("utf-8"),
135 "".join(permission).decode("utf-8", "replace"))
136 except hostdb.HostAlreadyExists, e:
137 print "A host with the name %s already exists." % e.name
143 Welcome to the Samba.org build farm.
145 Your host %(hostname)s has been added to the Samba Build farm.
147 We have recorded that it is running %(platform)s.
149 If you have not already done so, please read:
150 http://build.samba.org/instructions.html
152 The password for your rsync .password file is %(password)s
154 An e-mail asking you to subscribe to the build-farmers mailing
155 list will arrive shortly. Please ensure you maintain your
156 subscription to this list while you have hosts in the build farm.
158 Thank you for your contribution to ensuring portability and quality
159 of Samba.org projects.
162 """ % { "hostname": hostname, "platform": platform, "password": password }
164 msg_notification = MIMEText(body)
166 # send the password in an e-mail to that address
167 msg_notification["Subject"] = "Your new build farm host %s" % hostname
168 msg_notification["To"] = "\"%s\" <%s>" % (owner, owner_email)
169 msg_notification["Bcc"] = "build@samba.org"
170 msg_notification["From"] = "\"Samba Build Farm\" <build@samba.org>"
172 msg_subscribe = MIMEText("""Please subscribe %s to the build-farmers mailing list
174 Thanks, your friendly Samba build farm administrator <build@samba.org>""" % owner)
175 msg_subscribe["From"] = "\"%s\" <%s>" % (owner, owner_email)
176 msg_subscribe["Subject"] = 'Subscribe to build-farmers mailing list'
177 msg_subscribe["To"] = 'build-farmers-join@lists.samba.org'
180 print msg_notification
184 for msg in (msg_notification, msg_subscribe):
185 recipients = [msg["To"]]
187 recipients.append(msg["Bcc"])
188 s.sendmail(msg["From"], recipients, msg.as_string())
190 update_rsyncd_secrets()
193 hostname = raw_input("Hostname: ")
195 host = db.host(hostname.decode("utf-8"))
196 except hostdb.NoSuchHost, e:
197 print "No such host '%s'" % e.name
200 opt_fqdn = " (%s)" % host.fqdn
203 print "Host: %s%s" % (host.name, opt_fqdn)
204 print "Platform: %s" % host.platform
205 print "Owner: %s <%s>" % host.owner
207 for host in db.host_ages():
209 age = time.time() - host.last_update
212 print "%-12s %s" % (age, host.name)
214 print "Unknown command %s" % op