Statistics
| Branch: | Tag: | Revision:

root / snf-deploy / fabfile.py @ 542d8129

History | View | Annotate | Download (37.3 kB)

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

920 0ac84a9a Dimitris Aragiorgis
    """.format(extra, env.env.common_bridge,
921 0ac84a9a Dimitris Aragiorgis
               env.env.cluster_netdev, env.env.cluster.fqdn)
922 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
923 0ac84a9a Dimitris Aragiorgis
924 0ac84a9a Dimitris Aragiorgis
925 0ac84a9a Dimitris Aragiorgis
@roles("ganeti")
926 0ac84a9a Dimitris Aragiorgis
def debootstrap():
927 0ac84a9a Dimitris Aragiorgis
    install_package("ganeti-instance-debootstrap")
928 0ac84a9a Dimitris Aragiorgis
929 0ac84a9a Dimitris Aragiorgis
930 0ac84a9a Dimitris Aragiorgis
@roles("ganeti")
931 0ac84a9a Dimitris Aragiorgis
def setup_image_host():
932 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up snf-image...")
933 0ac84a9a Dimitris Aragiorgis
    install_package("snf-pithos-backend")
934 0ac84a9a Dimitris Aragiorgis
    install_package("snf-image")
935 0ac84a9a Dimitris Aragiorgis
    try_run("mkdir -p /srv/okeanos")
936 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/default/snf-image"
937 0ac84a9a Dimitris Aragiorgis
    replace = {
938 0ac84a9a Dimitris Aragiorgis
        "synnefo_user": env.env.synnefo_user,
939 0ac84a9a Dimitris Aragiorgis
        "synnefo_db_passwd": env.env.synnefo_db_passwd,
940 0ac84a9a Dimitris Aragiorgis
        "pithos_dir": env.env.pithos_dir,
941 0ac84a9a Dimitris Aragiorgis
        "db_node": env.env.db.ip,
942 0ac84a9a Dimitris Aragiorgis
    }
943 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
944 0ac84a9a Dimitris Aragiorgis
    put(custom, tmpl)
945 0ac84a9a Dimitris Aragiorgis
946 0ac84a9a Dimitris Aragiorgis
947 0ac84a9a Dimitris Aragiorgis
@roles("ganeti")
948 0ac84a9a Dimitris Aragiorgis
def setup_image_helper():
949 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Updating helper image...")
950 0ac84a9a Dimitris Aragiorgis
    cmd = """
951 0ac84a9a Dimitris Aragiorgis
    snf-image-update-helper -y
952 0ac84a9a Dimitris Aragiorgis
    """
953 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
954 0ac84a9a Dimitris Aragiorgis
955 0ac84a9a Dimitris Aragiorgis
956 0ac84a9a Dimitris Aragiorgis
@roles("ganeti")
957 0ac84a9a Dimitris Aragiorgis
def setup_gtools():
958 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Setting up snf-cyclades-gtools...")
959 0ac84a9a Dimitris Aragiorgis
    with settings(hide("everything")):
960 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.mq.ip)
961 0ac84a9a Dimitris Aragiorgis
    setup_common()
962 0ac84a9a Dimitris Aragiorgis
    install_package("snf-cyclades-gtools")
963 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/synnefo/gtools.conf"
964 0ac84a9a Dimitris Aragiorgis
    replace = {
965 0ac84a9a Dimitris Aragiorgis
        "synnefo_user": env.env.synnefo_user,
966 0ac84a9a Dimitris Aragiorgis
        "synnefo_rabbitmq_passwd": env.env.synnefo_rabbitmq_passwd,
967 0ac84a9a Dimitris Aragiorgis
        "mq_node": env.env.mq.ip,
968 0ac84a9a Dimitris Aragiorgis
    }
969 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
970 0ac84a9a Dimitris Aragiorgis
    put(custom, tmpl)
971 0ac84a9a Dimitris Aragiorgis
972 0ac84a9a Dimitris Aragiorgis
    cmd = """
973 0ac84a9a Dimitris Aragiorgis
    sed -i 's/false/true/' /etc/default/snf-ganeti-eventd
974 0ac84a9a Dimitris Aragiorgis
    /etc/init.d/snf-ganeti-eventd start
975 0ac84a9a Dimitris Aragiorgis
    """
976 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
977 0ac84a9a Dimitris Aragiorgis
978 0ac84a9a Dimitris Aragiorgis
979 0ac84a9a Dimitris Aragiorgis
@roles("ganeti")
980 0ac84a9a Dimitris Aragiorgis
def setup_iptables():
981 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Setting up iptables to mangle DHCP requests...")
982 0ac84a9a Dimitris Aragiorgis
    cmd = """
983 0ac84a9a Dimitris Aragiorgis
    iptables -t mangle -A PREROUTING -i br+ -p udp -m udp --dport 67 -j NFQUEUE --queue-num 42
984 0ac84a9a Dimitris Aragiorgis
    iptables -t mangle -A PREROUTING -i tap+ -p udp -m udp --dport 67 -j NFQUEUE --queue-num 42
985 0ac84a9a Dimitris Aragiorgis
    iptables -t mangle -A PREROUTING -i prv+ -p udp -m udp --dport 67 -j NFQUEUE --queue-num 42
986 0ac84a9a Dimitris Aragiorgis

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

1112 0ac84a9a Dimitris Aragiorgis
BACKEND_PER_USER = {
1113 0ac84a9a Dimitris Aragiorgis
  '%s': %s,
1114 0ac84a9a Dimitris Aragiorgis
}
1115 0ac84a9a Dimitris Aragiorgis

1116 0ac84a9a Dimitris Aragiorgis
EOF
1117 0ac84a9a Dimitris Aragiorgis
/etc/init.d/gunicorn restart
1118 0ac84a9a Dimitris Aragiorgis
    """  % (user_email, backend_id)
1119 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1120 0ac84a9a Dimitris Aragiorgis
1121 0ac84a9a Dimitris Aragiorgis
@roles("cyclades")
1122 0ac84a9a Dimitris Aragiorgis
def add_pools():
1123 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Creating pools of resources (brigdes, mac prefixes) in cyclades...")
1124 0ac84a9a Dimitris Aragiorgis
    try_run("snf-manage pool-create --type=mac-prefix --base=aa:00:0 --size=65536")
1125 0ac84a9a Dimitris Aragiorgis
    try_run("snf-manage pool-create --type=bridge --base=prv --size=20")
1126 0ac84a9a Dimitris Aragiorgis
1127 0ac84a9a Dimitris Aragiorgis
1128 0ac84a9a Dimitris Aragiorgis
@roles("cyclades")
1129 0ac84a9a Dimitris Aragiorgis
def add_network():
1130 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Adding public network in cyclades...")
1131 0ac84a9a Dimitris Aragiorgis
    backend_id = get_backend_id(env.env.cluster.fqdn)
1132 0ac84a9a Dimitris Aragiorgis
    cmd = """
1133 0ac84a9a Dimitris Aragiorgis
    snf-manage network-create --subnet={0} --gateway={1} --public --dhcp --flavor={2} --mode=bridged --link={3} --name=Internet --backend-id={4}
1134 0ac84a9a Dimitris Aragiorgis
    """.format(env.env.synnefo_public_network_subnet,
1135 0ac84a9a Dimitris Aragiorgis
               env.env.synnefo_public_network_gateway,
1136 0ac84a9a Dimitris Aragiorgis
               env.env.synnefo_public_network_type,
1137 0ac84a9a Dimitris Aragiorgis
               env.env.common_bridge, backend_id)
1138 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1139 0ac84a9a Dimitris Aragiorgis
1140 0ac84a9a Dimitris Aragiorgis
1141 0ac84a9a Dimitris Aragiorgis
@roles("cyclades")
1142 0ac84a9a Dimitris Aragiorgis
def setup_vncauthproxy():
1143 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Setting up vncauthproxy...")
1144 0ac84a9a Dimitris Aragiorgis
    install_package("snf-vncauthproxy")
1145 0ac84a9a Dimitris Aragiorgis
    cmd = """
1146 0ac84a9a Dimitris Aragiorgis
    echo CHUID="www-data:nogroup" >> /etc/default/vncauthproxy
1147 0ac84a9a Dimitris Aragiorgis
    rm /var/log/vncauthproxy/vncauthproxy.log
1148 0ac84a9a Dimitris Aragiorgis
    """
1149 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1150 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/vncauthproxy restart")
1151 0ac84a9a Dimitris Aragiorgis
1152 0ac84a9a Dimitris Aragiorgis
@roles("client")
1153 0ac84a9a Dimitris Aragiorgis
def setup_kamaki():
1154 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up kamaki client...")
1155 0ac84a9a Dimitris Aragiorgis
    with settings(hide("everything")):
1156 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 accounts." + env.env.domain)
1157 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 cyclades." + env.env.domain)
1158 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 pithos." + env.env.domain)
1159 0ac84a9a Dimitris Aragiorgis
1160 1d8cf97d Dimitris Aragiorgis
    with settings(host_string=env.env.db.ip):
1161 0ac84a9a Dimitris Aragiorgis
        uid, user_auth_token, user_uuid = get_auth_token_from_db(env.env.user_email)
1162 0ac84a9a Dimitris Aragiorgis
1163 0ac84a9a Dimitris Aragiorgis
    install_package("python-progress")
1164 0ac84a9a Dimitris Aragiorgis
    install_package("kamaki")
1165 0ac84a9a Dimitris Aragiorgis
    cmd = """
1166 0ac84a9a Dimitris Aragiorgis
    kamaki config set cloud.default.url "https://{0}/astakos/identity/v2.0/"
1167 0ac84a9a Dimitris Aragiorgis
    kamaki config set cloud.default.token {1}
1168 0ac84a9a Dimitris Aragiorgis
    """.format(env.env.accounts.fqdn, user_auth_token)
1169 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1170 0ac84a9a Dimitris Aragiorgis
    try_run("kamaki file create images")
1171 0ac84a9a Dimitris Aragiorgis
1172 0ac84a9a Dimitris Aragiorgis
@roles("client")
1173 0ac84a9a Dimitris Aragiorgis
def upload_image(image="debian_base.diskdump"):
1174 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Uploading initial image to pithos...")
1175 0ac84a9a Dimitris Aragiorgis
    image = "debian_base.diskdump"
1176 0ac84a9a Dimitris Aragiorgis
    try_run("wget {0} -O /tmp/{1}".format(env.env.debian_base_url, image))
1177 0ac84a9a Dimitris Aragiorgis
    try_run("kamaki file upload --container images /tmp/{0} {0}".format(image))
1178 0ac84a9a Dimitris Aragiorgis
1179 0ac84a9a Dimitris Aragiorgis
@roles("client")
1180 0ac84a9a Dimitris Aragiorgis
def register_image(image="debian_base.diskdump"):
1181 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Register image to plankton...")
1182 1d8cf97d Dimitris Aragiorgis
    with settings(host_string=env.env.db.ip):
1183 0ac84a9a Dimitris Aragiorgis
        uid, user_auth_token, user_uuid = get_auth_token_from_db(env.env.user_email)
1184 0ac84a9a Dimitris Aragiorgis
1185 0ac84a9a Dimitris Aragiorgis
    pithos_url = "pithos://{0}/images/{1}".format(user_uuid, image)
1186 0ac84a9a Dimitris Aragiorgis
    cmd = """
1187 0ac84a9a Dimitris Aragiorgis
    sleep 5
1188 0ac84a9a 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
1189 0ac84a9a Dimitris Aragiorgis
    """.format(pithos_url)
1190 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1191 0ac84a9a Dimitris Aragiorgis
1192 0ac84a9a Dimitris Aragiorgis
@roles("client")
1193 0ac84a9a Dimitris Aragiorgis
def setup_burnin():
1194 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up burnin testing tool...")
1195 0ac84a9a Dimitris Aragiorgis
    install_package("kamaki")
1196 0ac84a9a Dimitris Aragiorgis
    install_package("snf-tools")
1197 0ac84a9a Dimitris Aragiorgis
1198 0ac84a9a Dimitris Aragiorgis
@roles("pithos")
1199 0ac84a9a Dimitris Aragiorgis
def add_image_locally():
1200 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Getting image locally in order snf-image to use it directly..")
1201 0ac84a9a Dimitris Aragiorgis
    image = "debian_base.diskdump"
1202 0ac84a9a Dimitris Aragiorgis
    try_run("wget {0} -O /srv/okeanos/{1}".format(env.env.debian_base_url, image))
1203 0ac84a9a Dimitris Aragiorgis
1204 0ac84a9a Dimitris Aragiorgis
1205 0ac84a9a Dimitris Aragiorgis
@roles("master")
1206 0ac84a9a Dimitris Aragiorgis
def gnt_instance_add(name="test"):
1207 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Adding test instance to Ganeti...")
1208 0ac84a9a Dimitris Aragiorgis
    osp="""img_passwd=gamwtosecurity,img_format=diskdump,img_id=debian_base,img_properties='{"OSFAMILY":"linux"\,"ROOT_PARTITION":"1"}'"""
1209 0ac84a9a Dimitris Aragiorgis
    cmd = """
1210 0ac84a9a 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}
1211 0ac84a9a Dimitris Aragiorgis
    """.format(osp, name)
1212 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1213 0ac84a9a Dimitris Aragiorgis
1214 0ac84a9a Dimitris Aragiorgis
@roles("master")
1215 0ac84a9a Dimitris Aragiorgis
def gnt_network_add(name="test", subnet="10.0.0.0/26", gw="10.0.0.1", mode="bridged", link="br0"):
1216 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Adding test network to Ganeti...")
1217 0ac84a9a Dimitris Aragiorgis
    cmd = """
1218 0ac84a9a Dimitris Aragiorgis
    gnt-network add --network={1} --gateway={2} {0}
1219 0ac84a9a Dimitris Aragiorgis
    gnt-network connect {0} {3} {4}
1220 0ac84a9a Dimitris Aragiorgis
    """.format(name, subnet, gw, mode, link)
1221 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1222 0ac84a9a Dimitris Aragiorgis
1223 0ac84a9a Dimitris Aragiorgis
@roles("ips")
1224 0ac84a9a Dimitris Aragiorgis
def test():
1225 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Testing...")
1226 0ac84a9a Dimitris Aragiorgis
    try_run("hostname && date")