Statistics
| Branch: | Tag: | Revision:

root / snf-deploy / fabfile.py @ 1f471540

History | View | Annotate | Download (38.4 kB)

1 ad76b118 Dimitris Aragiorgis
from __future__ import with_statement
2 ad76b118 Dimitris Aragiorgis
from fabric.api import *
3 ad76b118 Dimitris Aragiorgis
from fabric.contrib.console import confirm
4 ad76b118 Dimitris Aragiorgis
from random import choice
5 ad76b118 Dimitris Aragiorgis
from fabric.operations import run, put
6 ad76b118 Dimitris Aragiorgis
import re
7 ad76b118 Dimitris Aragiorgis
import shutil, os
8 ad76b118 Dimitris Aragiorgis
from functools import wraps
9 ad76b118 Dimitris Aragiorgis
import imp
10 ad76b118 Dimitris Aragiorgis
import ConfigParser
11 ad76b118 Dimitris Aragiorgis
import sys
12 ad76b118 Dimitris Aragiorgis
import tempfile
13 ad76b118 Dimitris Aragiorgis
import ast
14 ad76b118 Dimitris Aragiorgis
from snfdeploy.lib import *
15 ad76b118 Dimitris Aragiorgis
from snfdeploy import massedit
16 ad76b118 Dimitris Aragiorgis
17 ad76b118 Dimitris Aragiorgis
18 ad76b118 Dimitris Aragiorgis
def setup_env(confdir="conf", packages="packages",
19 e5b4db06 Dimitris Aragiorgis
              templates="files", cluster_name="ganeti1", autoconf=False, disable_colors=False, key_inject=False):
20 ad76b118 Dimitris Aragiorgis
    print("Loading configuration for synnefo...")
21 ad76b118 Dimitris Aragiorgis
    print(" * Using config files under %s..." % confdir)
22 ad76b118 Dimitris Aragiorgis
    print(" * Using %s and %s for packages and templates accordingly..." % (packages, templates))
23 ad76b118 Dimitris Aragiorgis
24 ad76b118 Dimitris Aragiorgis
    autoconf = ast.literal_eval(autoconf)
25 b7c00e75 Dionysis Grigoropoulos
    disable_colors = ast.literal_eval(disable_colors)
26 e5b4db06 Dimitris Aragiorgis
    env.key_inject = ast.literal_eval(key_inject)
27 ad76b118 Dimitris Aragiorgis
    conf = Conf.configure(confdir=confdir, cluster_name=cluster_name, autoconf=autoconf)
28 ad76b118 Dimitris Aragiorgis
    env.env = Env(conf)
29 ad76b118 Dimitris Aragiorgis
30 ad76b118 Dimitris Aragiorgis
    env.local = autoconf
31 ad76b118 Dimitris Aragiorgis
    env.password = env.env.password
32 ad76b118 Dimitris Aragiorgis
    env.user = env.env.user
33 ad76b118 Dimitris Aragiorgis
    env.shell = "/bin/bash -c"
34 ad76b118 Dimitris Aragiorgis
35 b7c00e75 Dionysis Grigoropoulos
    if disable_colors:
36 b7c00e75 Dionysis Grigoropoulos
        disable_color()
37 b7c00e75 Dionysis Grigoropoulos
38 ad76b118 Dimitris Aragiorgis
    if env.env.cms.hostname in [env.env.accounts.hostname, env.env.cyclades.hostname, env.env.pithos.hostname]:
39 ad76b118 Dimitris Aragiorgis
      env.cms_pass = True
40 ad76b118 Dimitris Aragiorgis
    else:
41 ad76b118 Dimitris Aragiorgis
      env.cms_pass = False
42 ad76b118 Dimitris Aragiorgis
43 ad76b118 Dimitris Aragiorgis
    if env.env.accounts.hostname in [env.env.cyclades.hostname, env.env.pithos.hostname]:
44 ad76b118 Dimitris Aragiorgis
      env.csrf_disable = True
45 ad76b118 Dimitris Aragiorgis
    else:
46 ad76b118 Dimitris Aragiorgis
      env.csrf_disable = False
47 ad76b118 Dimitris Aragiorgis
48 ad76b118 Dimitris Aragiorgis
49 ad76b118 Dimitris Aragiorgis
    env.roledefs = {
50 ad76b118 Dimitris Aragiorgis
        "nodes": env.env.ips,
51 ad76b118 Dimitris Aragiorgis
        "ips": env.env.ips,
52 ad76b118 Dimitris Aragiorgis
        "accounts": [env.env.accounts.ip],
53 ad76b118 Dimitris Aragiorgis
        "cyclades": [env.env.cyclades.ip],
54 ad76b118 Dimitris Aragiorgis
        "pithos": [env.env.pithos.ip],
55 ad76b118 Dimitris Aragiorgis
        "cms": [env.env.cms.ip],
56 ad76b118 Dimitris Aragiorgis
        "mq": [env.env.mq.ip],
57 ad76b118 Dimitris Aragiorgis
        "db": [env.env.db.ip],
58 ad76b118 Dimitris Aragiorgis
        "ns": [env.env.ns.ip],
59 ad76b118 Dimitris Aragiorgis
        "client": [env.env.client.ip],
60 ad76b118 Dimitris Aragiorgis
        "router": [env.env.router.ip],
61 ad76b118 Dimitris Aragiorgis
    }
62 ad76b118 Dimitris Aragiorgis
63 ad76b118 Dimitris Aragiorgis
    env.enable_lvm = False
64 ad76b118 Dimitris Aragiorgis
    env.enable_drbd = False
65 ad76b118 Dimitris Aragiorgis
    if ast.literal_eval(env.env.create_extra_disk) and env.env.extra_disk:
66 ad76b118 Dimitris Aragiorgis
        env.enable_lvm = True
67 ad76b118 Dimitris Aragiorgis
        env.enable_drbd = True
68 ad76b118 Dimitris Aragiorgis
69 ad76b118 Dimitris Aragiorgis
    env.roledefs.update({
70 ad76b118 Dimitris Aragiorgis
        "ganeti": env.env.cluster_ips,
71 ad76b118 Dimitris Aragiorgis
        "master": [env.env.master.ip],
72 ad76b118 Dimitris Aragiorgis
    })
73 ad76b118 Dimitris Aragiorgis
74 ad76b118 Dimitris Aragiorgis
75 ad76b118 Dimitris Aragiorgis
def install_package(package):
76 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Installing package %s..." % package)
77 ad76b118 Dimitris Aragiorgis
    APT_GET = "export DEBIAN_FRONTEND=noninteractive ;apt-get install -y --force-yes "
78 ad76b118 Dimitris Aragiorgis
79 ad76b118 Dimitris Aragiorgis
    if ast.literal_eval(env.env.use_local_packages):
80 ad76b118 Dimitris Aragiorgis
        with settings(warn_only=True):
81 ad76b118 Dimitris Aragiorgis
            deb = local("ls %s/%s*deb" % (env.env.packages, package))
82 ad76b118 Dimitris Aragiorgis
            if deb:
83 ad76b118 Dimitris Aragiorgis
                debug(env.host, " * Package %s found in %s..." % (package, env.env.packages))
84 ad76b118 Dimitris Aragiorgis
                put(deb, "/tmp/")
85 ad76b118 Dimitris Aragiorgis
                try_run("dpkg -i /tmp/%s*deb || " % package + APT_GET + "-f")
86 ad76b118 Dimitris Aragiorgis
                try_run("rm /tmp/%s*deb" % package)
87 ad76b118 Dimitris Aragiorgis
                return
88 ad76b118 Dimitris Aragiorgis
89 ad76b118 Dimitris Aragiorgis
    info = getattr(env.env, package)
90 ad76b118 Dimitris Aragiorgis
    if info in ["stable", "squeeze-backports", "testing", "unstable"]:
91 ad76b118 Dimitris Aragiorgis
        APT_GET += " -t %s %s " % (info, package)
92 ad76b118 Dimitris Aragiorgis
    elif info:
93 ad76b118 Dimitris Aragiorgis
        APT_GET += " %s=%s " % (package, info)
94 ad76b118 Dimitris Aragiorgis
    else:
95 ad76b118 Dimitris Aragiorgis
        APT_GET += package
96 ad76b118 Dimitris Aragiorgis
97 ad76b118 Dimitris Aragiorgis
    try_run(APT_GET)
98 ad76b118 Dimitris Aragiorgis
99 ad76b118 Dimitris Aragiorgis
    return
100 ad76b118 Dimitris Aragiorgis
101 ad76b118 Dimitris Aragiorgis
102 ad76b118 Dimitris Aragiorgis
@roles("ns")
103 ad76b118 Dimitris Aragiorgis
def update_ns_for_ganeti():
104 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Updating name server entries for backend %s..." % env.env.cluster.fqdn)
105 ad76b118 Dimitris Aragiorgis
    update_arecord(env.env.cluster)
106 ad76b118 Dimitris Aragiorgis
    update_ptrrecord(env.env.cluster)
107 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/bind9 restart")
108 ad76b118 Dimitris Aragiorgis
109 ad76b118 Dimitris Aragiorgis
110 ad76b118 Dimitris Aragiorgis
@roles("ns")
111 ad76b118 Dimitris Aragiorgis
def update_ns_for_node(node):
112 ad76b118 Dimitris Aragiorgis
    info = env.env.nodes_info.get(node)
113 ad76b118 Dimitris Aragiorgis
    update_arecord(info)
114 ad76b118 Dimitris Aragiorgis
    update_ptrrecord(info)
115 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/bind9 restart")
116 ad76b118 Dimitris Aragiorgis
117 ad76b118 Dimitris Aragiorgis
118 ad76b118 Dimitris Aragiorgis
@roles("ns")
119 ad76b118 Dimitris Aragiorgis
def update_arecord(host):
120 ad76b118 Dimitris Aragiorgis
    filename = "/etc/bind/zones/" + env.env.domain
121 ad76b118 Dimitris Aragiorgis
    cmd = """
122 ad76b118 Dimitris Aragiorgis
    echo '{0}' >> {1}
123 ad76b118 Dimitris Aragiorgis
    """.format(host.arecord, filename)
124 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
125 ad76b118 Dimitris Aragiorgis
126 ad76b118 Dimitris Aragiorgis
127 ad76b118 Dimitris Aragiorgis
@roles("ns")
128 ad76b118 Dimitris Aragiorgis
def update_cnamerecord(host):
129 ad76b118 Dimitris Aragiorgis
    filename = "/etc/bind/zones/" + env.env.domain
130 ad76b118 Dimitris Aragiorgis
    cmd = """
131 ad76b118 Dimitris Aragiorgis
    echo '{0}' >> {1}
132 ad76b118 Dimitris Aragiorgis
    """.format(host.cnamerecord, filename)
133 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
134 ad76b118 Dimitris Aragiorgis
135 ad76b118 Dimitris Aragiorgis
136 ad76b118 Dimitris Aragiorgis
@roles("ns")
137 ad76b118 Dimitris Aragiorgis
def update_ptrrecord(host):
138 ad76b118 Dimitris Aragiorgis
    filename = "/etc/bind/rev/synnefo.in-addr.arpa.zone"
139 ad76b118 Dimitris Aragiorgis
    cmd = """
140 ad76b118 Dimitris Aragiorgis
    echo '{0}' >> {1}
141 ad76b118 Dimitris Aragiorgis
    """.format(host.ptrrecord, filename)
142 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
143 ad76b118 Dimitris Aragiorgis
144 ad76b118 Dimitris Aragiorgis
@roles("nodes")
145 ad76b118 Dimitris Aragiorgis
def apt_get_update():
146 ad76b118 Dimitris Aragiorgis
    debug(env.host, "apt-get update....")
147 ad76b118 Dimitris Aragiorgis
    try_run("apt-get update")
148 ad76b118 Dimitris Aragiorgis
149 ad76b118 Dimitris Aragiorgis
@roles("ns")
150 ad76b118 Dimitris Aragiorgis
def setup_ns():
151 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Setting up name server..")
152 ad76b118 Dimitris Aragiorgis
    #WARNING: this should be remove after we are done
153 ad76b118 Dimitris Aragiorgis
    # because gevent does pick randomly nameservers and google does
154 ad76b118 Dimitris Aragiorgis
    # not know our setup!!!!!
155 ad76b118 Dimitris Aragiorgis
    apt_get_update()
156 ad76b118 Dimitris Aragiorgis
    install_package("bind9")
157 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/bind/named.conf.local"
158 ad76b118 Dimitris Aragiorgis
    replace = {
159 ad76b118 Dimitris Aragiorgis
      "domain": env.env.domain,
160 ad76b118 Dimitris Aragiorgis
      }
161 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
162 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
163 ad76b118 Dimitris Aragiorgis
164 ad76b118 Dimitris Aragiorgis
    try_run("mkdir -p /etc/bind/zones")
165 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/bind/zones/example.com"
166 ad76b118 Dimitris Aragiorgis
    replace = {
167 ad76b118 Dimitris Aragiorgis
      "domain": env.env.domain,
168 ad76b118 Dimitris Aragiorgis
      "ns_node_ip": env.env.ns.ip,
169 ad76b118 Dimitris Aragiorgis
      }
170 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
171 ad76b118 Dimitris Aragiorgis
    remote = "/etc/bind/zones/" + env.env.domain
172 ad76b118 Dimitris Aragiorgis
    put(custom, remote)
173 ad76b118 Dimitris Aragiorgis
174 ad76b118 Dimitris Aragiorgis
    try_run("mkdir -p /etc/bind/rev")
175 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/bind/rev/synnefo.in-addr.arpa.zone"
176 ad76b118 Dimitris Aragiorgis
    replace = {
177 ad76b118 Dimitris Aragiorgis
      "domain": env.env.domain,
178 ad76b118 Dimitris Aragiorgis
      }
179 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
180 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
181 ad76b118 Dimitris Aragiorgis
182 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/bind/named.conf.options"
183 ad76b118 Dimitris Aragiorgis
    replace = {
184 ad76b118 Dimitris Aragiorgis
      "NODE_IPS": ";".join(env.env.ips),
185 ad76b118 Dimitris Aragiorgis
      }
186 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
187 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl, mode=0644)
188 ad76b118 Dimitris Aragiorgis
189 ad76b118 Dimitris Aragiorgis
    for role, info in env.env.roles.iteritems():
190 ad76b118 Dimitris Aragiorgis
        if role == "ns":
191 ad76b118 Dimitris Aragiorgis
            continue
192 ad76b118 Dimitris Aragiorgis
        update_cnamerecord(info)
193 ad76b118 Dimitris Aragiorgis
    for node, info in env.env.nodes_info.iteritems():
194 ad76b118 Dimitris Aragiorgis
        update_arecord(info)
195 ad76b118 Dimitris Aragiorgis
        update_ptrrecord(info)
196 ad76b118 Dimitris Aragiorgis
197 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/bind9 restart")
198 ad76b118 Dimitris Aragiorgis
199 ad76b118 Dimitris Aragiorgis
200 ad76b118 Dimitris Aragiorgis
@roles("nodes")
201 ad76b118 Dimitris Aragiorgis
def check_dhcp():
202 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Checking IPs for synnefo..")
203 ad76b118 Dimitris Aragiorgis
    for n, info in env.env.nodes_info.iteritems():
204 de6f7d9b Dimitris Aragiorgis
        try_run("ping -c 1 " + info.ip, True)
205 ad76b118 Dimitris Aragiorgis
206 ad76b118 Dimitris Aragiorgis
@roles("nodes")
207 ad76b118 Dimitris Aragiorgis
def check_dns():
208 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Checking fqdns for synnefo..")
209 ad76b118 Dimitris Aragiorgis
    for n, info in env.env.nodes_info.iteritems():
210 de6f7d9b Dimitris Aragiorgis
        try_run("ping -c 1 " + info.fqdn, True)
211 ad76b118 Dimitris Aragiorgis
212 ad76b118 Dimitris Aragiorgis
    for n, info in env.env.roles.iteritems():
213 de6f7d9b Dimitris Aragiorgis
        try_run("ping -c 1 " + info.fqdn, True)
214 ad76b118 Dimitris Aragiorgis
215 ad76b118 Dimitris Aragiorgis
@roles("nodes")
216 ad76b118 Dimitris Aragiorgis
def check_connectivity():
217 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Checking internet connectivity..")
218 de6f7d9b Dimitris Aragiorgis
    try_run("ping -c 1 www.google.com", True)
219 ad76b118 Dimitris Aragiorgis
220 ad76b118 Dimitris Aragiorgis
221 ad76b118 Dimitris Aragiorgis
@roles("nodes")
222 ad76b118 Dimitris Aragiorgis
def check_ssh():
223 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Checking password-less ssh..")
224 ad76b118 Dimitris Aragiorgis
    for n, info in env.env.nodes_info.iteritems():
225 de6f7d9b Dimitris Aragiorgis
        try_run("ssh " + info.fqdn + "  date", True)
226 ad76b118 Dimitris Aragiorgis
227 ad76b118 Dimitris Aragiorgis
228 ad76b118 Dimitris Aragiorgis
@roles("ips")
229 ad76b118 Dimitris Aragiorgis
def add_keys():
230 e5b4db06 Dimitris Aragiorgis
    if not env.key_inject:
231 40d11d5f Dimitris Aragiorgis
      debug(env.host, "Skipping ssh keys injection..")
232 e5b4db06 Dimitris Aragiorgis
      return
233 e5b4db06 Dimitris Aragiorgis
    else:
234 e5b4db06 Dimitris Aragiorgis
      debug(env.host, "Adding rsa/dsa keys..")
235 ad76b118 Dimitris Aragiorgis
    try_run("mkdir -p /root/.ssh")
236 ad76b118 Dimitris Aragiorgis
    cmd = """
237 ad76b118 Dimitris Aragiorgis
for f in $(ls /root/.ssh/*); do
238 ad76b118 Dimitris Aragiorgis
  cp $f $f.bak
239 ad76b118 Dimitris Aragiorgis
done
240 ad76b118 Dimitris Aragiorgis
    """
241 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
242 ad76b118 Dimitris Aragiorgis
    files = ["authorized_keys", "id_dsa", "id_dsa.pub",
243 ad76b118 Dimitris Aragiorgis
             "id_rsa", "id_rsa.pub"]
244 ad76b118 Dimitris Aragiorgis
    for f in files:
245 ad76b118 Dimitris Aragiorgis
      tmpl = "/root/.ssh/" + f
246 ad76b118 Dimitris Aragiorgis
      replace = {}
247 ad76b118 Dimitris Aragiorgis
      custom = customize_settings_from_tmpl(tmpl, replace)
248 e9d8016c Dimitris Aragiorgis
      put(custom, tmpl, mode=0600)
249 ad76b118 Dimitris Aragiorgis
250 ad76b118 Dimitris Aragiorgis
    cmd = """
251 ad76b118 Dimitris Aragiorgis
if [ -e /root/.ssh/authorized_keys.bak ]; then
252 ad76b118 Dimitris Aragiorgis
  cat /root/.ssh/authorized_keys.bak >> /root/.ssh/authorized_keys
253 ad76b118 Dimitris Aragiorgis
fi
254 ad76b118 Dimitris Aragiorgis
    """
255 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Updating exising authorized keys..")
256 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
257 ad76b118 Dimitris Aragiorgis
258 ad76b118 Dimitris Aragiorgis
@roles("ips")
259 ad76b118 Dimitris Aragiorgis
def setup_resolv_conf():
260 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Tweak /etc/resolv.conf...")
261 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/network-manager stop")
262 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/dhcp/dhclient-enter-hooks.d/nodnsupdate"
263 ad76b118 Dimitris Aragiorgis
    replace = {}
264 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
265 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl, mode=0644)
266 ad76b118 Dimitris Aragiorgis
    try_run("cp /etc/resolv.conf /etc/resolv.conf.bak")
267 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/resolv.conf"
268 ad76b118 Dimitris Aragiorgis
    replace = {
269 ad76b118 Dimitris Aragiorgis
      "domain": env.env.domain,
270 ad76b118 Dimitris Aragiorgis
      "ns_node_ip": env.env.ns.ip,
271 ad76b118 Dimitris Aragiorgis
      }
272 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
273 176829d7 Dimitris Aragiorgis
    try:
274 176829d7 Dimitris Aragiorgis
      put(custom, tmpl)
275 176829d7 Dimitris Aragiorgis
    except:
276 176829d7 Dimitris Aragiorgis
      pass
277 ad76b118 Dimitris Aragiorgis
    try_run("chattr +i /etc/resolv.conf")
278 ad76b118 Dimitris Aragiorgis
279 ad76b118 Dimitris Aragiorgis
280 ad76b118 Dimitris Aragiorgis
@roles("ips")
281 ad76b118 Dimitris Aragiorgis
def setup_hosts():
282 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Tweaking /etc/hosts and ssh_config files...")
283 ad76b118 Dimitris Aragiorgis
    try_run("echo StrictHostKeyChecking no >> /etc/ssh/ssh_config")
284 5ef0bc03 Dimitris Aragiorgis
    cmd = " sed -i 's/^127.*/127.0.0.1 localhost/' /etc/hosts "
285 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
286 383f2efd Dimitris Aragiorgis
    host_info = env.env.ips_info[env.host]
287 383f2efd Dimitris Aragiorgis
    cmd = "hostname %s" % host_info.hostname
288 383f2efd Dimitris Aragiorgis
    try_run(cmd)
289 383f2efd Dimitris Aragiorgis
    cmd = "echo %s > /etc/hostname" % host_info.hostname
290 383f2efd Dimitris Aragiorgis
    try_run(cmd)
291 ad76b118 Dimitris Aragiorgis
292 ad76b118 Dimitris Aragiorgis
293 de6f7d9b Dimitris Aragiorgis
def try_run(cmd, abort=False):
294 ad76b118 Dimitris Aragiorgis
    try:
295 ad76b118 Dimitris Aragiorgis
      if env.local:
296 ad76b118 Dimitris Aragiorgis
        return local(cmd, capture=True)
297 ad76b118 Dimitris Aragiorgis
      else:
298 ad76b118 Dimitris Aragiorgis
        return run(cmd)
299 ad76b118 Dimitris Aragiorgis
    except:
300 ad76b118 Dimitris Aragiorgis
      debug(env.host, "WARNING: command failed. Continuing anyway...")
301 de6f7d9b Dimitris Aragiorgis
      if abort:
302 de6f7d9b Dimitris Aragiorgis
        raise
303 ad76b118 Dimitris Aragiorgis
304 ad76b118 Dimitris Aragiorgis
def create_bridges():
305 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Creating bridges...")
306 ad76b118 Dimitris Aragiorgis
    install_package("bridge-utils")
307 ad76b118 Dimitris Aragiorgis
    cmd = """
308 ad76b118 Dimitris Aragiorgis
    brctl addbr {0} ; ip link set {0} up
309 ad76b118 Dimitris Aragiorgis
    """.format(env.env.common_bridge)
310 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
311 ad76b118 Dimitris Aragiorgis
312 ad76b118 Dimitris Aragiorgis
313 ad76b118 Dimitris Aragiorgis
def connect_bridges():
314 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Connecting bridges...")
315 ad76b118 Dimitris Aragiorgis
    cmd = """
316 ad76b118 Dimitris Aragiorgis
    brctl addif {0} {1}
317 ad76b118 Dimitris Aragiorgis
    """.format(env.env.common_bridge, env.env.public_iface)
318 ad76b118 Dimitris Aragiorgis
    #try_run(cmd)
319 ad76b118 Dimitris Aragiorgis
320 ad76b118 Dimitris Aragiorgis
321 ad76b118 Dimitris Aragiorgis
@roles("ganeti")
322 ad76b118 Dimitris Aragiorgis
def setup_net_infra():
323 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Setup networking infrastracture..")
324 ad76b118 Dimitris Aragiorgis
    create_bridges()
325 ad76b118 Dimitris Aragiorgis
    connect_bridges()
326 ad76b118 Dimitris Aragiorgis
327 ad76b118 Dimitris Aragiorgis
328 ad76b118 Dimitris Aragiorgis
@roles("ganeti")
329 ad76b118 Dimitris Aragiorgis
def setup_lvm():
330 ad76b118 Dimitris Aragiorgis
    debug(env.host, "create volume group %s for ganeti.." % env.env.vg)
331 ad76b118 Dimitris Aragiorgis
    if env.enable_lvm:
332 ad76b118 Dimitris Aragiorgis
        install_package("lvm2")
333 ad76b118 Dimitris Aragiorgis
        cmd = """
334 ad76b118 Dimitris Aragiorgis
        pvcreate {0}
335 ad76b118 Dimitris Aragiorgis
        vgcreate {1} {0}
336 ad76b118 Dimitris Aragiorgis
        """.format(env.env.extra_disk, env.env.vg)
337 ad76b118 Dimitris Aragiorgis
        try_run(cmd)
338 ad76b118 Dimitris Aragiorgis
339 ad76b118 Dimitris Aragiorgis
340 ad76b118 Dimitris Aragiorgis
def customize_settings_from_tmpl(tmpl, replace):
341 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Customizing template %s..." % tmpl)
342 ad76b118 Dimitris Aragiorgis
    local = env.env.templates + tmpl
343 ad76b118 Dimitris Aragiorgis
    _, custom = tempfile.mkstemp()
344 ad76b118 Dimitris Aragiorgis
    shutil.copyfile(local, custom)
345 ad76b118 Dimitris Aragiorgis
    for k, v in replace.iteritems():
346 ad76b118 Dimitris Aragiorgis
        regex = "re.sub('%{0}%', '{1}', line)".format(k.upper(), v)
347 ad76b118 Dimitris Aragiorgis
        massedit.edit_files([custom], [regex], dry_run=False)
348 ad76b118 Dimitris Aragiorgis
349 ad76b118 Dimitris Aragiorgis
    return custom
350 ad76b118 Dimitris Aragiorgis
351 ad76b118 Dimitris Aragiorgis
352 ad76b118 Dimitris Aragiorgis
@roles("nodes")
353 ad76b118 Dimitris Aragiorgis
def setup_apt():
354 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Setting up apt sources...")
355 ad76b118 Dimitris Aragiorgis
    install_package("curl")
356 ad76b118 Dimitris Aragiorgis
    cmd = """
357 ad76b118 Dimitris Aragiorgis
    echo 'APT::Install-Suggests "false";' >> /etc/apt/apt.conf
358 ad76b118 Dimitris Aragiorgis
    curl -k https://dev.grnet.gr/files/apt-grnetdev.pub | apt-key add -
359 ad76b118 Dimitris Aragiorgis
    """
360 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
361 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/apt/sources.list.d/okeanos.list"
362 ad76b118 Dimitris Aragiorgis
    replace = {}
363 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
364 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
365 ad76b118 Dimitris Aragiorgis
    apt_get_update()
366 ad76b118 Dimitris Aragiorgis
367 ad76b118 Dimitris Aragiorgis
368 ad76b118 Dimitris Aragiorgis
@roles("cyclades", "cms", "pithos", "accounts")
369 ad76b118 Dimitris Aragiorgis
def restart_services():
370 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Restarting apache2 and gunicorn...")
371 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
372 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/apache2 restart")
373 ad76b118 Dimitris Aragiorgis
374 ad76b118 Dimitris Aragiorgis
375 ad76b118 Dimitris Aragiorgis
def setup_gunicorn():
376 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Setting up gunicorn...")
377 ad76b118 Dimitris Aragiorgis
    install_package("gunicorn")
378 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/gunicorn.d/synnefo"
379 ad76b118 Dimitris Aragiorgis
    replace = {}
380 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
381 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl, mode=0644)
382 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
383 ad76b118 Dimitris Aragiorgis
384 ad76b118 Dimitris Aragiorgis
385 ad76b118 Dimitris Aragiorgis
def setup_apache():
386 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Setting up apache2...")
387 ad76b118 Dimitris Aragiorgis
    host_info = env.env.ips_info[env.host]
388 ad76b118 Dimitris Aragiorgis
    install_package("apache2")
389 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/apache2/sites-available/synnefo"
390 ad76b118 Dimitris Aragiorgis
    replace = {
391 ad76b118 Dimitris Aragiorgis
        "HOST": host_info.fqdn,
392 ad76b118 Dimitris Aragiorgis
    }
393 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
394 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
395 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/apache2/sites-available/synnefo-ssl"
396 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
397 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
398 ad76b118 Dimitris Aragiorgis
    cmd = """
399 ad76b118 Dimitris Aragiorgis
    a2enmod ssl
400 ad76b118 Dimitris Aragiorgis
    a2enmod rewrite
401 ad76b118 Dimitris Aragiorgis
    a2dissite default
402 ad76b118 Dimitris Aragiorgis
    a2ensite synnefo
403 ad76b118 Dimitris Aragiorgis
    a2ensite synnefo-ssl
404 ad76b118 Dimitris Aragiorgis
    a2enmod headers
405 ad76b118 Dimitris Aragiorgis
    a2enmod proxy_http
406 ad76b118 Dimitris Aragiorgis
    a2dismod autoindex
407 ad76b118 Dimitris Aragiorgis
    """
408 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
409 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/apache2 restart")
410 ad76b118 Dimitris Aragiorgis
411 ad76b118 Dimitris Aragiorgis
412 ad76b118 Dimitris Aragiorgis
@roles("mq")
413 ad76b118 Dimitris Aragiorgis
def setup_mq():
414 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Setting up RabbitMQ...")
415 ad76b118 Dimitris Aragiorgis
    install_package("rabbitmq-server")
416 ad76b118 Dimitris Aragiorgis
    cmd = """
417 ad76b118 Dimitris Aragiorgis
    rabbitmqctl add_user {0} {1}
418 ad76b118 Dimitris Aragiorgis
    rabbitmqctl set_permissions {0} ".*" ".*" ".*"
419 ad76b118 Dimitris Aragiorgis
    rabbitmqctl delete_user guest
420 ad76b118 Dimitris Aragiorgis
    rabbitmqctl set_user_tags {0} administrator
421 ad76b118 Dimitris Aragiorgis
    """.format(env.env.synnefo_user, env.env.synnefo_rabbitmq_passwd)
422 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
423 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/rabbitmq-server restart")
424 ad76b118 Dimitris Aragiorgis
425 ad76b118 Dimitris Aragiorgis
426 ad76b118 Dimitris Aragiorgis
@roles("db")
427 7474f035 Dimitris Aragiorgis
def allow_access_in_db(ip, user="all", method="md5"):
428 ad76b118 Dimitris Aragiorgis
    cmd = """
429 7474f035 Dimitris Aragiorgis
    echo host all {0} {1}/32 {2} >> /etc/postgresql/8.4/main/pg_hba.conf
430 7474f035 Dimitris Aragiorgis
    """.format(user, ip, method)
431 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
432 36848a52 Christos Stavrakakis
    cmd = """
433 525d8b20 Christos Stavrakakis
    sed -i 's/\(host.*127.0.0.1.*\)md5/\\1trust/' /etc/postgresql/8.4/main/pg_hba.conf
434 36848a52 Christos Stavrakakis
    """
435 36848a52 Christos Stavrakakis
    try_run(cmd)
436 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/postgresql restart")
437 ad76b118 Dimitris Aragiorgis
438 ad76b118 Dimitris Aragiorgis
@roles("db")
439 ad76b118 Dimitris Aragiorgis
def setup_db():
440 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Setting up DataBase server...")
441 ad76b118 Dimitris Aragiorgis
    install_package("postgresql")
442 ad76b118 Dimitris Aragiorgis
443 ad76b118 Dimitris Aragiorgis
    tmpl = "/tmp/db-init.psql"
444 ad76b118 Dimitris Aragiorgis
    replace = {
445 ad76b118 Dimitris Aragiorgis
        "synnefo_user": env.env.synnefo_user,
446 ad76b118 Dimitris Aragiorgis
        "synnefo_db_passwd": env.env.synnefo_db_passwd,
447 ad76b118 Dimitris Aragiorgis
        }
448 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
449 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
450 ad76b118 Dimitris Aragiorgis
    cmd = 'su - postgres -c "psql -w -f %s" ' % tmpl
451 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
452 ad76b118 Dimitris Aragiorgis
    cmd = """
453 ad76b118 Dimitris Aragiorgis
    echo "listen_addresses = '*'" >> /etc/postgresql/8.4/main/postgresql.conf
454 ad76b118 Dimitris Aragiorgis
    """
455 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
456 ad76b118 Dimitris Aragiorgis
457 8ed8742f Christos Stavrakakis
    if env.env.testing_vm:
458 8ed8742f Christos Stavrakakis
        cmd = """
459 8ed8742f Christos Stavrakakis
        echo "fsync=off\nsynchronous_commit=off\nfull_page_writes=off" >> /etc/postgresql/8.4/main/postgresql.conf
460 8ed8742f Christos Stavrakakis
        """
461 8ed8742f Christos Stavrakakis
        try_run(cmd)
462 8ed8742f Christos Stavrakakis
463 7474f035 Dimitris Aragiorgis
    allow_access_in_db(env.host, "all", "trust")
464 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/postgresql restart")
465 ad76b118 Dimitris Aragiorgis
466 ad76b118 Dimitris Aragiorgis
467 ad76b118 Dimitris Aragiorgis
@roles("db")
468 ad76b118 Dimitris Aragiorgis
def destroy_db():
469 ad76b118 Dimitris Aragiorgis
    try_run("""su - postgres -c ' psql -w -c "drop database snf_apps" '""")
470 ad76b118 Dimitris Aragiorgis
    try_run("""su - postgres -c ' psql -w -c "drop database snf_pithos" '""")
471 ad76b118 Dimitris Aragiorgis
472 ad76b118 Dimitris Aragiorgis
473 ad76b118 Dimitris Aragiorgis
def setup_webproject():
474 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Setting up snf-webproject...")
475 ad76b118 Dimitris Aragiorgis
    with settings(hide("everything")):
476 ad76b118 Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.db.ip)
477 ad76b118 Dimitris Aragiorgis
    setup_common()
478 ad76b118 Dimitris Aragiorgis
    install_package("snf-webproject")
479 ad76b118 Dimitris Aragiorgis
    install_package("python-psycopg2")
480 ad76b118 Dimitris Aragiorgis
    install_package("python-gevent")
481 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/synnefo/webproject.conf"
482 ad76b118 Dimitris Aragiorgis
    replace = {
483 ad76b118 Dimitris Aragiorgis
        "synnefo_user": env.env.synnefo_user,
484 ad76b118 Dimitris Aragiorgis
        "synnefo_db_passwd": env.env.synnefo_db_passwd,
485 ad76b118 Dimitris Aragiorgis
        "db_node": env.env.db.ip,
486 ad76b118 Dimitris Aragiorgis
        "domain": env.env.domain,
487 ad76b118 Dimitris Aragiorgis
    }
488 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
489 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl, mode=0644)
490 9b69ce64 Dimitris Aragiorgis
    with settings(host_string=env.env.db.ip):
491 ad76b118 Dimitris Aragiorgis
        host_info = env.env.ips_info[env.host]
492 7474f035 Dimitris Aragiorgis
        allow_access_in_db(host_info.ip, "all", "trust")
493 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
494 ad76b118 Dimitris Aragiorgis
495 ad76b118 Dimitris Aragiorgis
496 ad76b118 Dimitris Aragiorgis
def setup_common():
497 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Setting up snf-common...")
498 ad76b118 Dimitris Aragiorgis
    host_info = env.env.ips_info[env.host]
499 ad76b118 Dimitris Aragiorgis
    install_package("python-objpool")
500 ad76b118 Dimitris Aragiorgis
    install_package("snf-common")
501 ad76b118 Dimitris Aragiorgis
    install_package("python-astakosclient")
502 ad76b118 Dimitris Aragiorgis
    install_package("snf-django-lib")
503 ad76b118 Dimitris Aragiorgis
    install_package("snf-branding")
504 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/synnefo/common.conf"
505 ad76b118 Dimitris Aragiorgis
    replace = {
506 ad76b118 Dimitris Aragiorgis
        #FIXME:
507 ad76b118 Dimitris Aragiorgis
        "EMAIL_SUBJECT_PREFIX": env.host,
508 ad76b118 Dimitris Aragiorgis
        "domain": env.env.domain,
509 ad76b118 Dimitris Aragiorgis
        "HOST": host_info.fqdn,
510 ad76b118 Dimitris Aragiorgis
    }
511 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
512 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl, mode=0644)
513 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
514 ad76b118 Dimitris Aragiorgis
515 ad76b118 Dimitris Aragiorgis
@roles("accounts")
516 ad76b118 Dimitris Aragiorgis
def astakos_loaddata():
517 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Loading initial data to astakos...")
518 ad76b118 Dimitris Aragiorgis
    cmd = """
519 ad76b118 Dimitris Aragiorgis
    snf-manage loaddata groups
520 ad76b118 Dimitris Aragiorgis
    """
521 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
522 ad76b118 Dimitris Aragiorgis
523 ad76b118 Dimitris Aragiorgis
524 ad76b118 Dimitris Aragiorgis
@roles("accounts")
525 ad76b118 Dimitris Aragiorgis
def astakos_register_services():
526 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Register services in astakos...")
527 ad76b118 Dimitris Aragiorgis
    cmd = """
528 ad76b118 Dimitris Aragiorgis
    snf-manage component-add "home" https://{0} home-icon.png
529 ad76b118 Dimitris Aragiorgis
    snf-manage component-add "cyclades" https://{1}/cyclades/ui/
530 ad76b118 Dimitris Aragiorgis
    snf-manage component-add "pithos" https://{2}/pithos/ui/
531 ad76b118 Dimitris Aragiorgis
    snf-manage component-add "astakos" https://{3}/astakos/ui/
532 ad76b118 Dimitris Aragiorgis
    """.format(env.env.cms.fqdn, env.env.cyclades.fqdn, env.env.pithos.fqdn, env.env.accounts.fqdn)
533 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
534 ad76b118 Dimitris Aragiorgis
    import_service("astakos")
535 ad76b118 Dimitris Aragiorgis
    import_service("pithos")
536 ad76b118 Dimitris Aragiorgis
    import_service("cyclades")
537 ad76b118 Dimitris Aragiorgis
    tmpl = "/tmp/resources.json"
538 ad76b118 Dimitris Aragiorgis
    replace = {}
539 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
540 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
541 ad76b118 Dimitris Aragiorgis
    try_run("snf-manage resource-import --json %s" % tmpl)
542 ad76b118 Dimitris Aragiorgis
    cmd = """
543 ad76b118 Dimitris Aragiorgis
    snf-manage resource-modify --limit 40G pithos.diskspace
544 ad76b118 Dimitris Aragiorgis
    snf-manage resource-modify --limit 2 astakos.pending_app
545 ad76b118 Dimitris Aragiorgis
    snf-manage resource-modify --limit 4 cyclades.vm
546 ad76b118 Dimitris Aragiorgis
    snf-manage resource-modify --limit 40G cyclades.disk
547 ad76b118 Dimitris Aragiorgis
    snf-manage resource-modify --limit 8G cyclades.ram
548 ad76b118 Dimitris Aragiorgis
    snf-manage resource-modify --limit 16 cyclades.cpu
549 ad76b118 Dimitris Aragiorgis
    snf-manage resource-modify --limit 4 cyclades.network.private
550 ad76b118 Dimitris Aragiorgis
    """
551 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
552 ad76b118 Dimitris Aragiorgis
553 ad76b118 Dimitris Aragiorgis
554 ad76b118 Dimitris Aragiorgis
@roles("accounts")
555 ad76b118 Dimitris Aragiorgis
def add_user():
556 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * adding user %s to astakos..." % env.env.user_email)
557 ad76b118 Dimitris Aragiorgis
    email=env.env.user_email
558 ad76b118 Dimitris Aragiorgis
    name=env.env.user_name
559 ad76b118 Dimitris Aragiorgis
    lastname=env.env.user_lastname
560 ad76b118 Dimitris Aragiorgis
    passwd=env.env.user_passwd
561 ad76b118 Dimitris Aragiorgis
    cmd = """
562 ad76b118 Dimitris Aragiorgis
    snf-manage user-add {0} {1} {2}
563 ad76b118 Dimitris Aragiorgis
    """.format(email, name, lastname)
564 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
565 9b69ce64 Dimitris Aragiorgis
    with settings(host_string=env.env.db.ip):
566 ad76b118 Dimitris Aragiorgis
        uid, user_auth_token, user_uuid = get_auth_token_from_db(email)
567 ad76b118 Dimitris Aragiorgis
    cmd = """
568 ad76b118 Dimitris Aragiorgis
    snf-manage user-modify --password {0} {1}
569 ad76b118 Dimitris Aragiorgis
    """.format(passwd, uid)
570 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
571 ad76b118 Dimitris Aragiorgis
572 ad76b118 Dimitris Aragiorgis
573 ad76b118 Dimitris Aragiorgis
@roles("accounts")
574 ad76b118 Dimitris Aragiorgis
def activate_user(user_email=None):
575 ad76b118 Dimitris Aragiorgis
    if not user_email:
576 ad76b118 Dimitris Aragiorgis
      user_email = env.env.user_email
577 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Activate user %s..." % user_email)
578 9b69ce64 Dimitris Aragiorgis
    with settings(host_string=env.env.db.ip):
579 ad76b118 Dimitris Aragiorgis
        uid, user_auth_token, user_uuid = get_auth_token_from_db(user_email)
580 ad76b118 Dimitris Aragiorgis
581 ad76b118 Dimitris Aragiorgis
    cmd = """
582 ad76b118 Dimitris Aragiorgis
    snf-manage user-modify --verify {0}
583 ad76b118 Dimitris Aragiorgis
    snf-manage user-modify --accept {0}
584 ad76b118 Dimitris Aragiorgis
    """.format(uid)
585 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
586 ad76b118 Dimitris Aragiorgis
587 ad76b118 Dimitris Aragiorgis
@roles("accounts")
588 ad76b118 Dimitris Aragiorgis
def setup_astakos():
589 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Setting up snf-astakos-app...")
590 ad76b118 Dimitris Aragiorgis
    setup_gunicorn()
591 ad76b118 Dimitris Aragiorgis
    setup_apache()
592 ad76b118 Dimitris Aragiorgis
    setup_webproject()
593 ad76b118 Dimitris Aragiorgis
    install_package("python-django-south")
594 ad76b118 Dimitris Aragiorgis
    install_package("snf-astakos-app")
595 ad76b118 Dimitris Aragiorgis
    install_package("kamaki")
596 ad76b118 Dimitris Aragiorgis
597 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/synnefo/astakos.conf"
598 ad76b118 Dimitris Aragiorgis
    replace = {
599 ad76b118 Dimitris Aragiorgis
      "ACCOUNTS": env.env.accounts.fqdn,
600 ad76b118 Dimitris Aragiorgis
      "domain": env.env.domain,
601 ad76b118 Dimitris Aragiorgis
      "CYCLADES": env.env.cyclades.fqdn,
602 ad76b118 Dimitris Aragiorgis
      "PITHOS": env.env.pithos.fqdn,
603 ad76b118 Dimitris Aragiorgis
    }
604 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
605 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl, mode=0644)
606 ad76b118 Dimitris Aragiorgis
    if env.csrf_disable:
607 ad76b118 Dimitris Aragiorgis
      cmd = """
608 ad76b118 Dimitris Aragiorgis
cat <<EOF >> /etc/synnefo/astakos.conf
609 ad76b118 Dimitris Aragiorgis
try:
610 ad76b118 Dimitris Aragiorgis
  MIDDLEWARE_CLASSES.remove('django.middleware.csrf.CsrfViewMiddleware')
611 ad76b118 Dimitris Aragiorgis
except:
612 ad76b118 Dimitris Aragiorgis
  pass
613 ad76b118 Dimitris Aragiorgis
EOF
614 ad76b118 Dimitris Aragiorgis
"""
615 ad76b118 Dimitris Aragiorgis
      try_run(cmd)
616 ad76b118 Dimitris Aragiorgis
617 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
618 ad76b118 Dimitris Aragiorgis
619 ad76b118 Dimitris Aragiorgis
    cmd = """
620 ad76b118 Dimitris Aragiorgis
    snf-manage syncdb --noinput
621 ad76b118 Dimitris Aragiorgis
    snf-manage migrate im --delete-ghost-migrations
622 ad76b118 Dimitris Aragiorgis
    snf-manage migrate quotaholder_app
623 ad76b118 Dimitris Aragiorgis
    """
624 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
625 ad76b118 Dimitris Aragiorgis
626 ad76b118 Dimitris Aragiorgis
def import_service(service):
627 ad76b118 Dimitris Aragiorgis
    tmpl = "/tmp/%s.json" % service
628 ad76b118 Dimitris Aragiorgis
    replace = {
629 ad76b118 Dimitris Aragiorgis
      "DOMAIN": env.env.domain,
630 ad76b118 Dimitris Aragiorgis
      }
631 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
632 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
633 ad76b118 Dimitris Aragiorgis
    try_run("snf-manage service-import --json %s" % tmpl)
634 ad76b118 Dimitris Aragiorgis
635 ad76b118 Dimitris Aragiorgis
@roles("accounts")
636 ad76b118 Dimitris Aragiorgis
def get_service_details(service="pithos"):
637 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Getting registered details for %s service..." % service)
638 ad76b118 Dimitris Aragiorgis
    result = try_run("snf-manage component-list")
639 ad76b118 Dimitris Aragiorgis
    r = re.compile(r".*%s.*" % service, re.M)
640 ad76b118 Dimitris Aragiorgis
    service_id, _, _, service_token = r.search(result).group().split()
641 ad76b118 Dimitris Aragiorgis
    # print("%s: %s %s" % (service, service_id, service_token))
642 ad76b118 Dimitris Aragiorgis
    return (service_id, service_token)
643 ad76b118 Dimitris Aragiorgis
644 ad76b118 Dimitris Aragiorgis
645 ad76b118 Dimitris Aragiorgis
@roles("db")
646 ad76b118 Dimitris Aragiorgis
def get_auth_token_from_db(user_email=None):
647 ad76b118 Dimitris Aragiorgis
    if not user_email:
648 ad76b118 Dimitris Aragiorgis
        user_email=env.env.user_email
649 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Getting authentication token and uuid for user %s..." % user_email)
650 ad76b118 Dimitris Aragiorgis
    cmd = """
651 ad76b118 Dimitris Aragiorgis
    echo "select id, auth_token, uuid, email from auth_user, im_astakosuser where auth_user.id = im_astakosuser.user_ptr_id and auth_user.email = '{0}';" > /tmp/psqlcmd
652 ad76b118 Dimitris Aragiorgis
    su - postgres -c  "psql -w -d snf_apps -f /tmp/psqlcmd"
653 ad76b118 Dimitris Aragiorgis
    """.format(user_email)
654 ad76b118 Dimitris Aragiorgis
655 ad76b118 Dimitris Aragiorgis
    result = try_run(cmd)
656 ad76b118 Dimitris Aragiorgis
    r = re.compile(r"(\d+)[ |]*(\S+)[ |]*(\S+)[ |]*" + user_email, re.M)
657 ad76b118 Dimitris Aragiorgis
    match = r.search(result)
658 ad76b118 Dimitris Aragiorgis
    uid, user_auth_token, user_uuid = match.groups()
659 ad76b118 Dimitris Aragiorgis
    # print("%s: %s %s %s" % ( user_email, uid, user_auth_token, user_uuid))
660 ad76b118 Dimitris Aragiorgis
661 ad76b118 Dimitris Aragiorgis
    return (uid, user_auth_token, user_uuid)
662 ad76b118 Dimitris Aragiorgis
663 ad76b118 Dimitris Aragiorgis
664 ad76b118 Dimitris Aragiorgis
@roles("cms")
665 ad76b118 Dimitris Aragiorgis
def cms_loaddata():
666 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Loading cms initial data...")
667 ad76b118 Dimitris Aragiorgis
    if env.cms_pass:
668 ad76b118 Dimitris Aragiorgis
      debug(env.host, "Aborting. Prerequisites not met.")
669 ad76b118 Dimitris Aragiorgis
      return
670 ad76b118 Dimitris Aragiorgis
    tmpl = "/tmp/sites.json"
671 ad76b118 Dimitris Aragiorgis
    replace = {}
672 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
673 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
674 ad76b118 Dimitris Aragiorgis
675 ad76b118 Dimitris Aragiorgis
    tmpl = "/tmp/page.json"
676 ad76b118 Dimitris Aragiorgis
    replace = {}
677 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
678 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
679 ad76b118 Dimitris Aragiorgis
680 ad76b118 Dimitris Aragiorgis
    cmd = """
681 ad76b118 Dimitris Aragiorgis
    snf-manage loaddata /tmp/sites.json
682 ad76b118 Dimitris Aragiorgis
    snf-manage loaddata /tmp/page.json
683 ad76b118 Dimitris Aragiorgis
    snf-manage createsuperuser --username=admin --email=admin@{0} --noinput
684 ad76b118 Dimitris Aragiorgis
    """.format(env.env.domain)
685 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
686 ad76b118 Dimitris Aragiorgis
687 ad76b118 Dimitris Aragiorgis
688 ad76b118 Dimitris Aragiorgis
@roles("cms")
689 ad76b118 Dimitris Aragiorgis
def setup_cms():
690 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Setting up cms...")
691 ad76b118 Dimitris Aragiorgis
    if env.cms_pass:
692 ad76b118 Dimitris Aragiorgis
      debug(env.host, "Aborting. Prerequisites not met.")
693 ad76b118 Dimitris Aragiorgis
      return
694 ad76b118 Dimitris Aragiorgis
    with settings(hide("everything")):
695 ad76b118 Dimitris Aragiorgis
        try_run("ping -c1 accounts." + env.env.domain)
696 ad76b118 Dimitris Aragiorgis
    setup_gunicorn()
697 ad76b118 Dimitris Aragiorgis
    setup_apache()
698 ad76b118 Dimitris Aragiorgis
    setup_webproject()
699 ad76b118 Dimitris Aragiorgis
    install_package("snf-cloudcms")
700 ad76b118 Dimitris Aragiorgis
701 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/synnefo/cms.conf"
702 ad76b118 Dimitris Aragiorgis
    replace = {
703 ad76b118 Dimitris Aragiorgis
        "ACCOUNTS": env.env.accounts.fqdn,
704 ad76b118 Dimitris Aragiorgis
        }
705 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
706 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl, mode=0644)
707 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
708 ad76b118 Dimitris Aragiorgis
709 ad76b118 Dimitris Aragiorgis
710 ad76b118 Dimitris Aragiorgis
    cmd = """
711 ad76b118 Dimitris Aragiorgis
    snf-manage syncdb
712 ad76b118 Dimitris Aragiorgis
    snf-manage migrate --delete-ghost-migrations
713 ad76b118 Dimitris Aragiorgis
    """.format(env.env.domain)
714 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
715 ad76b118 Dimitris Aragiorgis
716 ad76b118 Dimitris Aragiorgis
717 ad76b118 Dimitris Aragiorgis
def setup_nfs_dirs():
718 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Creating NFS mount point for pithos and ganeti...")
719 ad76b118 Dimitris Aragiorgis
    cmd = """
720 ad76b118 Dimitris Aragiorgis
    mkdir -p {0}
721 ad76b118 Dimitris Aragiorgis
    cd {0}
722 ad76b118 Dimitris Aragiorgis
    mkdir -p data
723 ad76b118 Dimitris Aragiorgis
    chown www-data:www-data data
724 ad76b118 Dimitris Aragiorgis
    chmod g+ws data
725 ad76b118 Dimitris Aragiorgis
    mkdir -p /srv/okeanos
726 ad76b118 Dimitris Aragiorgis
    """.format(env.env.pithos_dir)
727 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
728 ad76b118 Dimitris Aragiorgis
729 ad76b118 Dimitris Aragiorgis
730 ad76b118 Dimitris Aragiorgis
@roles("nodes")
731 ad76b118 Dimitris Aragiorgis
def setup_nfs_clients():
732 9b69ce64 Dimitris Aragiorgis
    if env.host == env.env.pithos.ip:
733 ad76b118 Dimitris Aragiorgis
      return
734 ad76b118 Dimitris Aragiorgis
735 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Mounting pithos NFS mount point...")
736 ad76b118 Dimitris Aragiorgis
    with settings(hide("everything")):
737 ad76b118 Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.pithos.hostname)
738 ad76b118 Dimitris Aragiorgis
    install_package("nfs-common")
739 ad76b118 Dimitris Aragiorgis
    for d in [env.env.pithos_dir, "/srv/okeanos"]:
740 ad76b118 Dimitris Aragiorgis
      try_run("mkdir -p " + d)
741 ad76b118 Dimitris Aragiorgis
      cmd = """
742 ad76b118 Dimitris Aragiorgis
      echo "{0}:/{1} {2}  nfs4 defaults,rw,noatime,nodiratime,intr,rsize=1048576,wsize=1048576,noacl" >> /etc/fstab
743 ad76b118 Dimitris Aragiorgis
      """.format(env.env.pithos.hostname, os.path.basename(d), d)
744 ad76b118 Dimitris Aragiorgis
      try_run(cmd)
745 ad76b118 Dimitris Aragiorgis
      try_run("mount " + d)
746 ad76b118 Dimitris Aragiorgis
747 ad76b118 Dimitris Aragiorgis
748 ad76b118 Dimitris Aragiorgis
@roles("pithos")
749 ad76b118 Dimitris Aragiorgis
def setup_nfs_server():
750 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Setting up NFS server for pithos...")
751 ad76b118 Dimitris Aragiorgis
    setup_nfs_dirs()
752 ad76b118 Dimitris Aragiorgis
    install_package("nfs-kernel-server")
753 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/exports"
754 ad76b118 Dimitris Aragiorgis
    replace = {
755 ad76b118 Dimitris Aragiorgis
      "pithos_dir": env.env.pithos_dir,
756 ad76b118 Dimitris Aragiorgis
      "srv": os.path.dirname(env.env.pithos_dir),
757 ad76b118 Dimitris Aragiorgis
      "subnet": env.env.subnet
758 ad76b118 Dimitris Aragiorgis
      }
759 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
760 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
761 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/nfs-kernel-server restart")
762 ad76b118 Dimitris Aragiorgis
763 ad76b118 Dimitris Aragiorgis
764 ad76b118 Dimitris Aragiorgis
@roles("pithos")
765 ad76b118 Dimitris Aragiorgis
def setup_pithos():
766 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Setting up snf-pithos-app...")
767 ad76b118 Dimitris Aragiorgis
    with settings(hide("everything")):
768 ad76b118 Dimitris Aragiorgis
        try_run("ping -c1 accounts." + env.env.domain)
769 ad76b118 Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.db.ip)
770 ad76b118 Dimitris Aragiorgis
    setup_gunicorn()
771 ad76b118 Dimitris Aragiorgis
    setup_apache()
772 ad76b118 Dimitris Aragiorgis
    setup_webproject()
773 ad76b118 Dimitris Aragiorgis
774 9b69ce64 Dimitris Aragiorgis
    with settings(host_string=env.env.accounts.ip):
775 ad76b118 Dimitris Aragiorgis
        service_id, service_token = get_service_details("pithos")
776 ad76b118 Dimitris Aragiorgis
777 ad76b118 Dimitris Aragiorgis
    install_package("kamaki")
778 ad76b118 Dimitris Aragiorgis
    install_package("snf-pithos-backend")
779 ad76b118 Dimitris Aragiorgis
    install_package("snf-pithos-app")
780 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/synnefo/pithos.conf"
781 ad76b118 Dimitris Aragiorgis
    replace = {
782 ad76b118 Dimitris Aragiorgis
        "ACCOUNTS": env.env.accounts.fqdn,
783 ad76b118 Dimitris Aragiorgis
        "PITHOS": env.env.pithos.fqdn,
784 ad76b118 Dimitris Aragiorgis
        "db_node": env.env.db.ip,
785 ad76b118 Dimitris Aragiorgis
        "synnefo_user": env.env.synnefo_user,
786 ad76b118 Dimitris Aragiorgis
        "synnefo_db_passwd": env.env.synnefo_db_passwd,
787 ad76b118 Dimitris Aragiorgis
        "pithos_dir": env.env.pithos_dir,
788 ad76b118 Dimitris Aragiorgis
        "PITHOS_SERVICE_TOKEN": service_token,
789 ad76b118 Dimitris Aragiorgis
        "proxy": env.env.pithos.hostname == env.env.accounts.hostname
790 ad76b118 Dimitris Aragiorgis
        }
791 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
792 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl, mode=0644)
793 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
794 ad76b118 Dimitris Aragiorgis
795 ad76b118 Dimitris Aragiorgis
    install_package("snf-pithos-webclient")
796 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/synnefo/webclient.conf"
797 ad76b118 Dimitris Aragiorgis
    replace = {
798 ad76b118 Dimitris Aragiorgis
        "ACCOUNTS": env.env.accounts.fqdn,
799 ad76b118 Dimitris Aragiorgis
        "PITHOS_UI_CLOUDBAR_ACTIVE_SERVICE": service_id,
800 ad76b118 Dimitris Aragiorgis
        }
801 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
802 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl, mode=0644)
803 ad76b118 Dimitris Aragiorgis
804 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
805 ad76b118 Dimitris Aragiorgis
    #TOFIX: the previous command lets pithos-backend create blocks and maps
806 ad76b118 Dimitris Aragiorgis
    #       with root owner
807 ad76b118 Dimitris Aragiorgis
    try_run("chown -R www-data:www-data %s/data " % env.env.pithos_dir)
808 ad76b118 Dimitris Aragiorgis
    #try_run("pithos-migrate stamp 4c8ccdc58192")
809 ad76b118 Dimitris Aragiorgis
    #try_run("pithos-migrate upgrade head")
810 ad76b118 Dimitris Aragiorgis
811 ad76b118 Dimitris Aragiorgis
812 ad76b118 Dimitris Aragiorgis
def add_wheezy():
813 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/apt/sources.list.d/wheezy.list"
814 ad76b118 Dimitris Aragiorgis
    replace = {}
815 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
816 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
817 ad76b118 Dimitris Aragiorgis
    apt_get_update()
818 ad76b118 Dimitris Aragiorgis
819 ad76b118 Dimitris Aragiorgis
820 ad76b118 Dimitris Aragiorgis
def remove_wheezy():
821 ad76b118 Dimitris Aragiorgis
    try_run("rm -f /etc/apt/sources.list.d/wheezy.list")
822 ad76b118 Dimitris Aragiorgis
    apt_get_update()
823 ad76b118 Dimitris Aragiorgis
824 ad76b118 Dimitris Aragiorgis
825 ad76b118 Dimitris Aragiorgis
@roles("ganeti")
826 ad76b118 Dimitris Aragiorgis
def setup_ganeti():
827 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Setting up snf-ganeti...")
828 ad76b118 Dimitris Aragiorgis
    node_info = env.env.ips_info[env.host]
829 ad76b118 Dimitris Aragiorgis
    with settings(hide("everything")):
830 ad76b118 Dimitris Aragiorgis
        #if env.enable_lvm:
831 ad76b118 Dimitris Aragiorgis
        #    try_run("vgs " + env.env.vg)
832 ad76b118 Dimitris Aragiorgis
        try_run("getent hosts " + env.env.cluster.fqdn)
833 ad76b118 Dimitris Aragiorgis
        try_run("getent hosts %s | grep -v ^127" % env.host)
834 ad76b118 Dimitris Aragiorgis
        try_run("hostname -f | grep " + node_info.fqdn)
835 ad76b118 Dimitris Aragiorgis
        #try_run("ip link show " + env.env.common_bridge)
836 ad76b118 Dimitris Aragiorgis
        #try_run("ip link show " + env.env.common_bridge)
837 ad76b118 Dimitris Aragiorgis
        #try_run("apt-get update")
838 ad76b118 Dimitris Aragiorgis
    install_package("qemu-kvm")
839 ad76b118 Dimitris Aragiorgis
    install_package("python-bitarray")
840 ad76b118 Dimitris Aragiorgis
    add_wheezy()
841 ad76b118 Dimitris Aragiorgis
    install_package("ganeti-htools")
842 ad76b118 Dimitris Aragiorgis
    remove_wheezy()
843 ad76b118 Dimitris Aragiorgis
    install_package("snf-ganeti")
844 ad76b118 Dimitris Aragiorgis
    try_run("mkdir -p /srv/ganeti/file-storage/")
845 ad76b118 Dimitris Aragiorgis
    cmd = """
846 ad76b118 Dimitris Aragiorgis
cat <<EOF > /etc/ganeti/file-storage-paths
847 ad76b118 Dimitris Aragiorgis
/srv/ganeti/file-storage
848 ad76b118 Dimitris Aragiorgis
/srv/ganeti/shared-file-storage
849 ad76b118 Dimitris Aragiorgis
EOF
850 ad76b118 Dimitris Aragiorgis
"""
851 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
852 ad76b118 Dimitris Aragiorgis
853 ad76b118 Dimitris Aragiorgis
854 ad76b118 Dimitris Aragiorgis
@roles("master")
855 ad76b118 Dimitris Aragiorgis
def add_rapi_user():
856 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Adding RAPI user to Ganeti backend...")
857 ad76b118 Dimitris Aragiorgis
    cmd = """
858 ad76b118 Dimitris Aragiorgis
    echo -n "{0}:Ganeti Remote API:{1}" | openssl md5
859 ad76b118 Dimitris Aragiorgis
    """.format(env.env.synnefo_user, env.env.synnefo_rapi_passwd)
860 ad76b118 Dimitris Aragiorgis
    result = try_run(cmd)
861 ad76b118 Dimitris Aragiorgis
    cmd = """
862 ad76b118 Dimitris Aragiorgis
    echo "{0} {1}{2} write" >> /var/lib/ganeti/rapi/users
863 ad76b118 Dimitris Aragiorgis
    """.format(env.env.synnefo_user, '{ha1}',result)
864 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
865 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/ganeti restart")
866 ad76b118 Dimitris Aragiorgis
867 ad76b118 Dimitris Aragiorgis
@roles("master")
868 ad76b118 Dimitris Aragiorgis
def add_nodes():
869 ad76b118 Dimitris Aragiorgis
    nodes = env.env.cluster_nodes.split(",")
870 ad76b118 Dimitris Aragiorgis
    nodes.remove(env.env.master_node)
871 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Adding nodes to Ganeti backend...")
872 ad76b118 Dimitris Aragiorgis
    for n in nodes:
873 ad76b118 Dimitris Aragiorgis
        add_node(n)
874 ad76b118 Dimitris Aragiorgis
875 ad76b118 Dimitris Aragiorgis
@roles("master")
876 ad76b118 Dimitris Aragiorgis
def add_node(node):
877 ad76b118 Dimitris Aragiorgis
    node_info = env.env.nodes_info[node]
878 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Adding node %s to Ganeti backend..." % node_info.fqdn)
879 ad76b118 Dimitris Aragiorgis
    cmd = "gnt-node add --no-ssh-key-check --master-capable=yes --vm-capable=yes " + node_info.fqdn
880 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
881 ad76b118 Dimitris Aragiorgis
882 ad76b118 Dimitris Aragiorgis
@roles("ganeti")
883 ad76b118 Dimitris Aragiorgis
def enable_drbd():
884 ad76b118 Dimitris Aragiorgis
    if env.enable_drbd:
885 ad76b118 Dimitris Aragiorgis
        debug(env.host, " * Enabling DRBD...")
886 ad76b118 Dimitris Aragiorgis
        try_run("modprobe drbd minor_count=255 usermode_helper=/bin/true")
887 ad76b118 Dimitris Aragiorgis
        try_run("echo drbd minor_count=255 usermode_helper=/bin/true >> /etc/modules")
888 ad76b118 Dimitris Aragiorgis
889 ad76b118 Dimitris Aragiorgis
@roles("master")
890 ad76b118 Dimitris Aragiorgis
def setup_drbd_dparams():
891 ad76b118 Dimitris Aragiorgis
    if env.enable_drbd:
892 ad76b118 Dimitris Aragiorgis
        debug(env.host, " * Twicking drbd related disk parameters in Ganeti...")
893 ad76b118 Dimitris Aragiorgis
        cmd = """
894 ad76b118 Dimitris Aragiorgis
        gnt-cluster modify --disk-parameters=drbd:metavg={0}
895 ad76b118 Dimitris Aragiorgis
        gnt-group modify --disk-parameters=drbd:metavg={0} default
896 ad76b118 Dimitris Aragiorgis
        """.format(env.env.vg)
897 ad76b118 Dimitris Aragiorgis
        try_run(cmd)
898 ad76b118 Dimitris Aragiorgis
899 ad76b118 Dimitris Aragiorgis
@roles("master")
900 ad76b118 Dimitris Aragiorgis
def enable_lvm():
901 ad76b118 Dimitris Aragiorgis
    if env.enable_lvm:
902 ad76b118 Dimitris Aragiorgis
        debug(env.host, " * Enabling LVM...")
903 ad76b118 Dimitris Aragiorgis
        cmd = """
904 ad76b118 Dimitris Aragiorgis
        gnt-cluster modify --vg-name={0}
905 ad76b118 Dimitris Aragiorgis
        """.format(env.env.vg)
906 ad76b118 Dimitris Aragiorgis
        try_run(cmd)
907 ad76b118 Dimitris Aragiorgis
    else:
908 ad76b118 Dimitris Aragiorgis
        debug(env.host, " * Disabling LVM...")
909 ad76b118 Dimitris Aragiorgis
        try_run("gnt-cluster modify --no-lvm-storage")
910 ad76b118 Dimitris Aragiorgis
911 ad76b118 Dimitris Aragiorgis
@roles("master")
912 ad76b118 Dimitris Aragiorgis
def destroy_cluster():
913 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Destroying Ganeti cluster...")
914 ad76b118 Dimitris Aragiorgis
    #TODO: remove instances first
915 ad76b118 Dimitris Aragiorgis
    allnodes = env.env.cluster_hostnames[:]
916 ad76b118 Dimitris Aragiorgis
    allnodes.remove(env.host)
917 ad76b118 Dimitris Aragiorgis
    for n in allnodes:
918 ad76b118 Dimitris Aragiorgis
      host_info = env.env.ips_info[host]
919 ad76b118 Dimitris Aragiorgis
      debug(env.host, " * Removing node %s..." % n)
920 ad76b118 Dimitris Aragiorgis
      cmd = "gnt-node remove  " + host_info.fqdn
921 ad76b118 Dimitris Aragiorgis
      try_run(cmd)
922 ad76b118 Dimitris Aragiorgis
    try_run("gnt-cluster destroy --yes-do-it")
923 ad76b118 Dimitris Aragiorgis
924 ad76b118 Dimitris Aragiorgis
925 ad76b118 Dimitris Aragiorgis
@roles("master")
926 ad76b118 Dimitris Aragiorgis
def init_cluster():
927 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Initializing Ganeti backend...")
928 ad76b118 Dimitris Aragiorgis
    # extra = ""
929 ad76b118 Dimitris Aragiorgis
    # if env.enable_lvm:
930 ad76b118 Dimitris Aragiorgis
    #     extra += " --vg-name={0} ".format(env.env.vg)
931 ad76b118 Dimitris Aragiorgis
    # else:
932 ad76b118 Dimitris Aragiorgis
    #     extra += " --no-lvm-storage "
933 ad76b118 Dimitris Aragiorgis
    # if not env.enable_drbd:
934 ad76b118 Dimitris Aragiorgis
    #     extra += " --no-drbd-storage "
935 ad76b118 Dimitris Aragiorgis
    extra = " --no-lvm-storage --no-drbd-storage "
936 ad76b118 Dimitris Aragiorgis
    cmd = """
937 ad76b118 Dimitris Aragiorgis
    gnt-cluster init --enabled-hypervisors=kvm \
938 ad76b118 Dimitris Aragiorgis
                     {0} \
939 ad76b118 Dimitris Aragiorgis
                     --nic-parameters link={1},mode=bridged \
940 ad76b118 Dimitris Aragiorgis
                     --master-netdev {2} \
941 ad76b118 Dimitris Aragiorgis
                     --default-iallocator hail \
942 ad76b118 Dimitris Aragiorgis
                     --hypervisor-parameters kvm:kernel_path=,vnc_bind_address=0.0.0.0 \
943 ad76b118 Dimitris Aragiorgis
                     --no-ssh-init --no-etc-hosts \
944 ad76b118 Dimitris Aragiorgis
                    {3}
945 ad76b118 Dimitris Aragiorgis

946 ad76b118 Dimitris Aragiorgis
    """.format(extra, env.env.common_bridge,
947 ad76b118 Dimitris Aragiorgis
               env.env.cluster_netdev, env.env.cluster.fqdn)
948 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
949 ad76b118 Dimitris Aragiorgis
950 ad76b118 Dimitris Aragiorgis
951 ad76b118 Dimitris Aragiorgis
@roles("ganeti")
952 ad76b118 Dimitris Aragiorgis
def debootstrap():
953 ad76b118 Dimitris Aragiorgis
    install_package("ganeti-instance-debootstrap")
954 ad76b118 Dimitris Aragiorgis
955 ad76b118 Dimitris Aragiorgis
956 ad76b118 Dimitris Aragiorgis
@roles("ganeti")
957 ad76b118 Dimitris Aragiorgis
def setup_image_host():
958 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Setting up snf-image...")
959 ad76b118 Dimitris Aragiorgis
    install_package("snf-pithos-backend")
960 ad76b118 Dimitris Aragiorgis
    install_package("snf-image")
961 ad76b118 Dimitris Aragiorgis
    try_run("mkdir -p /srv/okeanos")
962 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/default/snf-image"
963 ad76b118 Dimitris Aragiorgis
    replace = {
964 ad76b118 Dimitris Aragiorgis
        "synnefo_user": env.env.synnefo_user,
965 ad76b118 Dimitris Aragiorgis
        "synnefo_db_passwd": env.env.synnefo_db_passwd,
966 ad76b118 Dimitris Aragiorgis
        "pithos_dir": env.env.pithos_dir,
967 ad76b118 Dimitris Aragiorgis
        "db_node": env.env.db.ip,
968 ad76b118 Dimitris Aragiorgis
    }
969 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
970 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
971 ad76b118 Dimitris Aragiorgis
972 ad76b118 Dimitris Aragiorgis
973 ad76b118 Dimitris Aragiorgis
@roles("ganeti")
974 ad76b118 Dimitris Aragiorgis
def setup_image_helper():
975 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Updating helper image...")
976 ad76b118 Dimitris Aragiorgis
    cmd = """
977 ad76b118 Dimitris Aragiorgis
    snf-image-update-helper -y
978 ad76b118 Dimitris Aragiorgis
    """
979 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
980 ad76b118 Dimitris Aragiorgis
981 ad76b118 Dimitris Aragiorgis
982 ad76b118 Dimitris Aragiorgis
@roles("ganeti")
983 ad76b118 Dimitris Aragiorgis
def setup_gtools():
984 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Setting up snf-cyclades-gtools...")
985 ad76b118 Dimitris Aragiorgis
    with settings(hide("everything")):
986 ad76b118 Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.mq.ip)
987 ad76b118 Dimitris Aragiorgis
    setup_common()
988 ad76b118 Dimitris Aragiorgis
    install_package("snf-cyclades-gtools")
989 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/synnefo/gtools.conf"
990 ad76b118 Dimitris Aragiorgis
    replace = {
991 ad76b118 Dimitris Aragiorgis
        "synnefo_user": env.env.synnefo_user,
992 ad76b118 Dimitris Aragiorgis
        "synnefo_rabbitmq_passwd": env.env.synnefo_rabbitmq_passwd,
993 ad76b118 Dimitris Aragiorgis
        "mq_node": env.env.mq.ip,
994 ad76b118 Dimitris Aragiorgis
    }
995 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
996 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
997 ad76b118 Dimitris Aragiorgis
998 ad76b118 Dimitris Aragiorgis
    cmd = """
999 ad76b118 Dimitris Aragiorgis
    sed -i 's/false/true/' /etc/default/snf-ganeti-eventd
1000 ad76b118 Dimitris Aragiorgis
    /etc/init.d/snf-ganeti-eventd start
1001 ad76b118 Dimitris Aragiorgis
    """
1002 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
1003 ad76b118 Dimitris Aragiorgis
1004 ad76b118 Dimitris Aragiorgis
1005 ad76b118 Dimitris Aragiorgis
@roles("ganeti")
1006 ad76b118 Dimitris Aragiorgis
def setup_iptables():
1007 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Setting up iptables to mangle DHCP requests...")
1008 ad76b118 Dimitris Aragiorgis
    cmd = """
1009 ad76b118 Dimitris Aragiorgis
    iptables -t mangle -A PREROUTING -i br+ -p udp -m udp --dport 67 -j NFQUEUE --queue-num 42
1010 ad76b118 Dimitris Aragiorgis
    iptables -t mangle -A PREROUTING -i tap+ -p udp -m udp --dport 67 -j NFQUEUE --queue-num 42
1011 ad76b118 Dimitris Aragiorgis
    iptables -t mangle -A PREROUTING -i prv+ -p udp -m udp --dport 67 -j NFQUEUE --queue-num 42
1012 ad76b118 Dimitris Aragiorgis

1013 ad76b118 Dimitris Aragiorgis
    ip6tables -t mangle -A PREROUTING -i br+ -p ipv6-icmp -m icmp6 --icmpv6-type 133 -j NFQUEUE --queue-num 43
1014 ad76b118 Dimitris Aragiorgis
    ip6tables -t mangle -A PREROUTING -i br+ -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j NFQUEUE --queue-num 44
1015 ad76b118 Dimitris Aragiorgis
    """
1016 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
1017 ad76b118 Dimitris Aragiorgis
1018 ad76b118 Dimitris Aragiorgis
@roles("ganeti")
1019 ad76b118 Dimitris Aragiorgis
def setup_network():
1020 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Setting up networking for Ganeti instances (nfdhcpd, etc.)...")
1021 ad76b118 Dimitris Aragiorgis
    install_package("nfqueue-bindings-python")
1022 ad76b118 Dimitris Aragiorgis
    install_package("nfdhcpd")
1023 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/nfdhcpd/nfdhcpd.conf"
1024 ad76b118 Dimitris Aragiorgis
    replace = {
1025 ad76b118 Dimitris Aragiorgis
      "ns_node_ip": env.env.ns.ip
1026 ad76b118 Dimitris Aragiorgis
      }
1027 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
1028 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl)
1029 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/nfdhcpd restart")
1030 ad76b118 Dimitris Aragiorgis
1031 ad76b118 Dimitris Aragiorgis
    install_package("snf-network")
1032 ad76b118 Dimitris Aragiorgis
    cmd = """
1033 ad76b118 Dimitris Aragiorgis
    sed -i 's/MAC_MASK.*/MAC_MASK = ff:ff:f0:00:00:00/' /etc/default/snf-network
1034 ad76b118 Dimitris Aragiorgis
    """
1035 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
1036 ad76b118 Dimitris Aragiorgis
1037 ad76b118 Dimitris Aragiorgis
1038 ad76b118 Dimitris Aragiorgis
@roles("router")
1039 ad76b118 Dimitris Aragiorgis
def setup_router():
1040 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Setting up internal router for NAT...")
1041 ad76b118 Dimitris Aragiorgis
    cmd = """
1042 ad76b118 Dimitris Aragiorgis
    echo 1 > /proc/sys/net/ipv4/ip_forward
1043 ad76b118 Dimitris Aragiorgis
    iptables -t nat -A POSTROUTING -s {0} -o {3} -j MASQUERADE
1044 ad76b118 Dimitris Aragiorgis
    ip addr add {1} dev {2}
1045 ad76b118 Dimitris Aragiorgis
    ip route add {0} dev {2} src {1}
1046 ad76b118 Dimitris Aragiorgis
    """.format(env.env.synnefo_public_network_subnet,
1047 ad76b118 Dimitris Aragiorgis
               env.env.synnefo_public_network_gateway,
1048 ad76b118 Dimitris Aragiorgis
               env.env.common_bridge, env.env.public_iface)
1049 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
1050 ad76b118 Dimitris Aragiorgis
1051 1f471540 Dionysis Grigoropoulos
1052 ad76b118 Dimitris Aragiorgis
@roles("cyclades")
1053 ad76b118 Dimitris Aragiorgis
def cyclades_loaddata():
1054 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Loading initial data for cyclades...")
1055 1f471540 Dionysis Grigoropoulos
    try_run("snf-manage flavor-create %s %s %s %s" % (env.env.flavor_cpu,
1056 1f471540 Dionysis Grigoropoulos
                                                      env.env.flavor_ram,
1057 1f471540 Dionysis Grigoropoulos
                                                      env.env.flavor_disk,
1058 1f471540 Dionysis Grigoropoulos
                                                      env.env.flavor_storage))
1059 ad76b118 Dimitris Aragiorgis
    #run("snf-manage loaddata flavors")
1060 ad76b118 Dimitris Aragiorgis
1061 ad76b118 Dimitris Aragiorgis
1062 ad76b118 Dimitris Aragiorgis
@roles("cyclades")
1063 ad76b118 Dimitris Aragiorgis
def setup_cyclades():
1064 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Setting up snf-cyclades-app...")
1065 ad76b118 Dimitris Aragiorgis
    with settings(hide("everything")):
1066 ad76b118 Dimitris Aragiorgis
        try_run("ping -c1 accounts." + env.env.domain)
1067 ad76b118 Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.db.ip)
1068 ad76b118 Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.mq.ip)
1069 ad76b118 Dimitris Aragiorgis
    setup_gunicorn()
1070 ad76b118 Dimitris Aragiorgis
    setup_apache()
1071 ad76b118 Dimitris Aragiorgis
    setup_webproject()
1072 ad76b118 Dimitris Aragiorgis
    install_package("memcached")
1073 ad76b118 Dimitris Aragiorgis
    install_package("python-memcache")
1074 ad76b118 Dimitris Aragiorgis
    install_package("snf-pithos-backend")
1075 ad76b118 Dimitris Aragiorgis
    install_package("kamaki")
1076 ad76b118 Dimitris Aragiorgis
    install_package("snf-cyclades-app")
1077 ad76b118 Dimitris Aragiorgis
    install_package("python-django-south")
1078 ad76b118 Dimitris Aragiorgis
    tmpl = "/etc/synnefo/cyclades.conf"
1079 ad76b118 Dimitris Aragiorgis
1080 9b69ce64 Dimitris Aragiorgis
    with settings(host_string=env.env.accounts.ip):
1081 ad76b118 Dimitris Aragiorgis
        service_id, service_token = get_service_details("cyclades")
1082 ad76b118 Dimitris Aragiorgis
1083 ad76b118 Dimitris Aragiorgis
    replace = {
1084 ad76b118 Dimitris Aragiorgis
        "ACCOUNTS": env.env.accounts.fqdn,
1085 ad76b118 Dimitris Aragiorgis
        "CYCLADES": env.env.cyclades.fqdn,
1086 ad76b118 Dimitris Aragiorgis
        "mq_node": env.env.mq.ip,
1087 ad76b118 Dimitris Aragiorgis
        "db_node": env.env.db.ip,
1088 ad76b118 Dimitris Aragiorgis
        "synnefo_user": env.env.synnefo_user,
1089 ad76b118 Dimitris Aragiorgis
        "synnefo_db_passwd": env.env.synnefo_db_passwd,
1090 ad76b118 Dimitris Aragiorgis
        "synnefo_rabbitmq_passwd": env.env.synnefo_rabbitmq_passwd,
1091 ad76b118 Dimitris Aragiorgis
        "pithos_dir": env.env.pithos_dir,
1092 ad76b118 Dimitris Aragiorgis
        "common_bridge": env.env.common_bridge,
1093 ad76b118 Dimitris Aragiorgis
        "HOST": env.env.cyclades.ip,
1094 ad76b118 Dimitris Aragiorgis
        "domain": env.env.domain,
1095 ad76b118 Dimitris Aragiorgis
        "CYCLADES_SERVICE_TOKEN": service_token,
1096 ad76b118 Dimitris Aragiorgis
        "proxy": env.env.cyclades.hostname == env.env.accounts.hostname
1097 ad76b118 Dimitris Aragiorgis
        }
1098 ad76b118 Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
1099 ad76b118 Dimitris Aragiorgis
    put(custom, tmpl, mode=0644)
1100 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
1101 ad76b118 Dimitris Aragiorgis
1102 ad76b118 Dimitris Aragiorgis
    cmd = """
1103 ad76b118 Dimitris Aragiorgis
    sed -i 's/false/true/' /etc/default/snf-dispatcher
1104 ad76b118 Dimitris Aragiorgis
    /etc/init.d/snf-dispatcher start
1105 ad76b118 Dimitris Aragiorgis
    """
1106 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
1107 ad76b118 Dimitris Aragiorgis
1108 ad76b118 Dimitris Aragiorgis
    try_run("snf-manage syncdb")
1109 ad76b118 Dimitris Aragiorgis
    try_run("snf-manage migrate --delete-ghost-migrations")
1110 ad76b118 Dimitris Aragiorgis
1111 ad76b118 Dimitris Aragiorgis
1112 ad76b118 Dimitris Aragiorgis
@roles("cyclades")
1113 ad76b118 Dimitris Aragiorgis
def get_backend_id(cluster_name="ganeti1.synnefo.deploy.local"):
1114 ad76b118 Dimitris Aragiorgis
    backend_id = try_run("snf-manage backend-list 2>/dev/null | grep %s | awk '{print $1}'" % cluster_name)
1115 ad76b118 Dimitris Aragiorgis
    return backend_id
1116 ad76b118 Dimitris Aragiorgis
1117 ad76b118 Dimitris Aragiorgis
1118 ad76b118 Dimitris Aragiorgis
@roles("cyclades")
1119 ad76b118 Dimitris Aragiorgis
def add_backend():
1120 ad76b118 Dimitris Aragiorgis
    debug(env.host, "adding %s ganeti backend to cyclades..." % env.env.cluster.fqdn)
1121 ad76b118 Dimitris Aragiorgis
    with settings(hide("everything")):
1122 ad76b118 Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.cluster.fqdn)
1123 ad76b118 Dimitris Aragiorgis
    cmd = """
1124 ad76b118 Dimitris Aragiorgis
    snf-manage backend-add --clustername={0} --user={1} --pass={2}
1125 ad76b118 Dimitris Aragiorgis
    """.format(env.env.cluster.fqdn, env.env.synnefo_user,
1126 ad76b118 Dimitris Aragiorgis
               env.env.synnefo_rapi_passwd)
1127 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
1128 ad76b118 Dimitris Aragiorgis
    backend_id = get_backend_id(env.env.cluster.fqdn)
1129 ad76b118 Dimitris Aragiorgis
    try_run("snf-manage backend-modify --drained=False " + backend_id)
1130 ad76b118 Dimitris Aragiorgis
1131 ad76b118 Dimitris Aragiorgis
@roles("cyclades")
1132 ad76b118 Dimitris Aragiorgis
def pin_user_to_backend(user_email):
1133 ad76b118 Dimitris Aragiorgis
    backend_id = get_backend_id(env.env.cluster.fqdn)
1134 ad76b118 Dimitris Aragiorgis
    # pin user to backend
1135 ad76b118 Dimitris Aragiorgis
    cmd = """
1136 ad76b118 Dimitris Aragiorgis
cat <<EOF >> /etc/synnefo/cyclades.conf
1137 ad76b118 Dimitris Aragiorgis

1138 ad76b118 Dimitris Aragiorgis
BACKEND_PER_USER = {
1139 ad76b118 Dimitris Aragiorgis
  '%s': %s,
1140 ad76b118 Dimitris Aragiorgis
}
1141 ad76b118 Dimitris Aragiorgis

1142 ad76b118 Dimitris Aragiorgis
EOF
1143 ad76b118 Dimitris Aragiorgis
/etc/init.d/gunicorn restart
1144 ad76b118 Dimitris Aragiorgis
    """  % (user_email, backend_id)
1145 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
1146 ad76b118 Dimitris Aragiorgis
1147 ad76b118 Dimitris Aragiorgis
@roles("cyclades")
1148 ad76b118 Dimitris Aragiorgis
def add_pools():
1149 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Creating pools of resources (brigdes, mac prefixes) in cyclades...")
1150 ad76b118 Dimitris Aragiorgis
    try_run("snf-manage pool-create --type=mac-prefix --base=aa:00:0 --size=65536")
1151 ad76b118 Dimitris Aragiorgis
    try_run("snf-manage pool-create --type=bridge --base=prv --size=20")
1152 ad76b118 Dimitris Aragiorgis
1153 ad76b118 Dimitris Aragiorgis
1154 ad76b118 Dimitris Aragiorgis
@roles("cyclades")
1155 ad76b118 Dimitris Aragiorgis
def add_network():
1156 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Adding public network in cyclades...")
1157 ad76b118 Dimitris Aragiorgis
    backend_id = get_backend_id(env.env.cluster.fqdn)
1158 ad76b118 Dimitris Aragiorgis
    cmd = """
1159 73607c33 Christos Stavrakakis
    snf-manage network-create --subnet={0} --gateway={1} --public --dhcp=True --flavor={2} --mode=bridged --link={3} --name=Internet --backend-id={4}
1160 ad76b118 Dimitris Aragiorgis
    """.format(env.env.synnefo_public_network_subnet,
1161 ad76b118 Dimitris Aragiorgis
               env.env.synnefo_public_network_gateway,
1162 ad76b118 Dimitris Aragiorgis
               env.env.synnefo_public_network_type,
1163 ad76b118 Dimitris Aragiorgis
               env.env.common_bridge, backend_id)
1164 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
1165 ad76b118 Dimitris Aragiorgis
1166 ad76b118 Dimitris Aragiorgis
1167 ad76b118 Dimitris Aragiorgis
@roles("cyclades")
1168 ad76b118 Dimitris Aragiorgis
def setup_vncauthproxy():
1169 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Setting up vncauthproxy...")
1170 ad76b118 Dimitris Aragiorgis
    install_package("snf-vncauthproxy")
1171 ad76b118 Dimitris Aragiorgis
    cmd = """
1172 ad76b118 Dimitris Aragiorgis
    echo CHUID="www-data:nogroup" >> /etc/default/vncauthproxy
1173 ad76b118 Dimitris Aragiorgis
    rm /var/log/vncauthproxy/vncauthproxy.log
1174 ad76b118 Dimitris Aragiorgis
    """
1175 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
1176 ad76b118 Dimitris Aragiorgis
    try_run("/etc/init.d/vncauthproxy restart")
1177 ad76b118 Dimitris Aragiorgis
1178 ad76b118 Dimitris Aragiorgis
@roles("client")
1179 ad76b118 Dimitris Aragiorgis
def setup_kamaki():
1180 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Setting up kamaki client...")
1181 ad76b118 Dimitris Aragiorgis
    with settings(hide("everything")):
1182 ad76b118 Dimitris Aragiorgis
        try_run("ping -c1 accounts." + env.env.domain)
1183 ad76b118 Dimitris Aragiorgis
        try_run("ping -c1 cyclades." + env.env.domain)
1184 ad76b118 Dimitris Aragiorgis
        try_run("ping -c1 pithos." + env.env.domain)
1185 ad76b118 Dimitris Aragiorgis
1186 9b69ce64 Dimitris Aragiorgis
    with settings(host_string=env.env.db.ip):
1187 ad76b118 Dimitris Aragiorgis
        uid, user_auth_token, user_uuid = get_auth_token_from_db(env.env.user_email)
1188 ad76b118 Dimitris Aragiorgis
1189 ad76b118 Dimitris Aragiorgis
    install_package("python-progress")
1190 ad76b118 Dimitris Aragiorgis
    install_package("kamaki")
1191 ad76b118 Dimitris Aragiorgis
    cmd = """
1192 ad76b118 Dimitris Aragiorgis
    kamaki config set cloud.default.url "https://{0}/astakos/identity/v2.0/"
1193 ad76b118 Dimitris Aragiorgis
    kamaki config set cloud.default.token {1}
1194 ad76b118 Dimitris Aragiorgis
    """.format(env.env.accounts.fqdn, user_auth_token)
1195 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
1196 ad76b118 Dimitris Aragiorgis
    try_run("kamaki file create images")
1197 ad76b118 Dimitris Aragiorgis
1198 ad76b118 Dimitris Aragiorgis
@roles("client")
1199 ad76b118 Dimitris Aragiorgis
def upload_image(image="debian_base.diskdump"):
1200 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Uploading initial image to pithos...")
1201 ad76b118 Dimitris Aragiorgis
    image = "debian_base.diskdump"
1202 ad76b118 Dimitris Aragiorgis
    try_run("wget {0} -O /tmp/{1}".format(env.env.debian_base_url, image))
1203 ad76b118 Dimitris Aragiorgis
    try_run("kamaki file upload --container images /tmp/{0} {0}".format(image))
1204 ad76b118 Dimitris Aragiorgis
1205 ad76b118 Dimitris Aragiorgis
@roles("client")
1206 ad76b118 Dimitris Aragiorgis
def register_image(image="debian_base.diskdump"):
1207 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Register image to plankton...")
1208 9b69ce64 Dimitris Aragiorgis
    with settings(host_string=env.env.db.ip):
1209 ad76b118 Dimitris Aragiorgis
        uid, user_auth_token, user_uuid = get_auth_token_from_db(env.env.user_email)
1210 ad76b118 Dimitris Aragiorgis
1211 ad76b118 Dimitris Aragiorgis
    pithos_url = "pithos://{0}/images/{1}".format(user_uuid, image)
1212 ad76b118 Dimitris Aragiorgis
    cmd = """
1213 ad76b118 Dimitris Aragiorgis
    sleep 5
1214 ad76b118 Dimitris Aragiorgis
    kamaki image register "Debian Base" {0} --public --disk-format=diskdump --property OSFAMILY=linux --property ROOT_PARTITION=1 --property description="Debian Squeeze Base System" --property size=450M --property kernel=2.6.32 --property GUI="No GUI" --property sortorder=1 --property USERS=root --property OS=debian
1215 ad76b118 Dimitris Aragiorgis
    """.format(pithos_url)
1216 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
1217 ad76b118 Dimitris Aragiorgis
1218 ad76b118 Dimitris Aragiorgis
@roles("client")
1219 ad76b118 Dimitris Aragiorgis
def setup_burnin():
1220 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Setting up burnin testing tool...")
1221 ad76b118 Dimitris Aragiorgis
    install_package("kamaki")
1222 ad76b118 Dimitris Aragiorgis
    install_package("snf-tools")
1223 ad76b118 Dimitris Aragiorgis
1224 ad76b118 Dimitris Aragiorgis
@roles("pithos")
1225 ad76b118 Dimitris Aragiorgis
def add_image_locally():
1226 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Getting image locally in order snf-image to use it directly..")
1227 ad76b118 Dimitris Aragiorgis
    image = "debian_base.diskdump"
1228 ad76b118 Dimitris Aragiorgis
    try_run("wget {0} -O /srv/okeanos/{1}".format(env.env.debian_base_url, image))
1229 ad76b118 Dimitris Aragiorgis
1230 ad76b118 Dimitris Aragiorgis
1231 ad76b118 Dimitris Aragiorgis
@roles("master")
1232 ad76b118 Dimitris Aragiorgis
def gnt_instance_add(name="test"):
1233 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Adding test instance to Ganeti...")
1234 ad76b118 Dimitris Aragiorgis
    osp="""img_passwd=gamwtosecurity,img_format=diskdump,img_id=debian_base,img_properties='{"OSFAMILY":"linux"\,"ROOT_PARTITION":"1"}'"""
1235 ad76b118 Dimitris Aragiorgis
    cmd = """
1236 ad76b118 Dimitris Aragiorgis
    gnt-instance add  -o snf-image+default --os-parameters {0} -t plain --disk 0:size=1G --no-name-check --no-ip-check --net 0:ip=pool,network=test --no-install --hypervisor-parameters kvm:machine_version=pc-1.0 {1}
1237 ad76b118 Dimitris Aragiorgis
    """.format(osp, name)
1238 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
1239 ad76b118 Dimitris Aragiorgis
1240 ad76b118 Dimitris Aragiorgis
@roles("master")
1241 ad76b118 Dimitris Aragiorgis
def gnt_network_add(name="test", subnet="10.0.0.0/26", gw="10.0.0.1", mode="bridged", link="br0"):
1242 ad76b118 Dimitris Aragiorgis
    debug(env.host, " * Adding test network to Ganeti...")
1243 ad76b118 Dimitris Aragiorgis
    cmd = """
1244 ad76b118 Dimitris Aragiorgis
    gnt-network add --network={1} --gateway={2} {0}
1245 ad76b118 Dimitris Aragiorgis
    gnt-network connect {0} {3} {4}
1246 ad76b118 Dimitris Aragiorgis
    """.format(name, subnet, gw, mode, link)
1247 ad76b118 Dimitris Aragiorgis
    try_run(cmd)
1248 ad76b118 Dimitris Aragiorgis
1249 ad76b118 Dimitris Aragiorgis
@roles("ips")
1250 ad76b118 Dimitris Aragiorgis
def test():
1251 ad76b118 Dimitris Aragiorgis
    debug(env.host, "Testing...")
1252 ad76b118 Dimitris Aragiorgis
    try_run("hostname && date")