Statistics
| Branch: | Tag: | Revision:

root / snf-deploy / snfdeploy / fabfile.py @ bf644f91

History | View | Annotate | Download (42.2 kB)

1 f1800130 Ilias Tsitsimpis
# Too many lines in module pylint: disable-msg=C0302
2 f1800130 Ilias Tsitsimpis
# Too many arguments (7/5) pylint: disable-msg=R0913
3 f1800130 Ilias Tsitsimpis
"""
4 f1800130 Ilias Tsitsimpis
Fabric file for snf-deploy
5 f1800130 Ilias Tsitsimpis

6 f1800130 Ilias Tsitsimpis
"""
7 f1800130 Ilias Tsitsimpis
8 0ac84a9a Dimitris Aragiorgis
from __future__ import with_statement
9 3c3bccab Dimitris Aragiorgis
from fabric.api import hide, env, settings, local, roles, execute
10 f1800130 Ilias Tsitsimpis
from fabric.operations import run, put, get
11 0e6e73d3 Ilias Tsitsimpis
import fabric
12 0ac84a9a Dimitris Aragiorgis
import re
13 f1800130 Ilias Tsitsimpis
import os
14 f1800130 Ilias Tsitsimpis
import shutil
15 0ac84a9a Dimitris Aragiorgis
import tempfile
16 0ac84a9a Dimitris Aragiorgis
import ast
17 f1800130 Ilias Tsitsimpis
from snfdeploy.lib import debug, Conf, Env, disable_color
18 68d6d24b Dimitris Aragiorgis
from snfdeploy.utils import *
19 0ac84a9a Dimitris Aragiorgis
from snfdeploy import massedit
20 0ac84a9a Dimitris Aragiorgis
21 0ac84a9a Dimitris Aragiorgis
22 3bae85da Dimitris Aragiorgis
def setup_env(args):
23 f1800130 Ilias Tsitsimpis
    """Setup environment"""
24 0ac84a9a Dimitris Aragiorgis
    print("Loading configuration for synnefo...")
25 3bae85da Dimitris Aragiorgis
26 3bae85da Dimitris Aragiorgis
    conf = Conf(args)
27 0ac84a9a Dimitris Aragiorgis
    env.env = Env(conf)
28 0ac84a9a Dimitris Aragiorgis
29 3bae85da Dimitris Aragiorgis
    env.local = args.autoconf
30 3bae85da Dimitris Aragiorgis
    env.key_inject = args.key_inject
31 0ac84a9a Dimitris Aragiorgis
    env.password = env.env.password
32 0ac84a9a Dimitris Aragiorgis
    env.user = env.env.user
33 0ac84a9a Dimitris Aragiorgis
    env.shell = "/bin/bash -c"
34 3bae85da Dimitris Aragiorgis
    env.key_filename = args.ssh_key
35 0ac84a9a Dimitris Aragiorgis
36 3bae85da Dimitris Aragiorgis
    if args.disable_colors:
37 1bc6d467 Dionysis Grigoropoulos
        disable_color()
38 1bc6d467 Dionysis Grigoropoulos
39 f1800130 Ilias Tsitsimpis
    if env.env.cms.hostname in \
40 f1800130 Ilias Tsitsimpis
            [env.env.accounts.hostname, env.env.cyclades.hostname,
41 f1800130 Ilias Tsitsimpis
             env.env.pithos.hostname]:
42 f1800130 Ilias Tsitsimpis
        env.cms_pass = True
43 0ac84a9a Dimitris Aragiorgis
    else:
44 f1800130 Ilias Tsitsimpis
        env.cms_pass = False
45 0ac84a9a Dimitris Aragiorgis
46 f1800130 Ilias Tsitsimpis
    if env.env.accounts.hostname in \
47 f1800130 Ilias Tsitsimpis
            [env.env.cyclades.hostname, env.env.pithos.hostname]:
48 f1800130 Ilias Tsitsimpis
        env.csrf_disable = True
49 0ac84a9a Dimitris Aragiorgis
    else:
50 f1800130 Ilias Tsitsimpis
        env.csrf_disable = False
51 0ac84a9a Dimitris Aragiorgis
52 0ac84a9a Dimitris Aragiorgis
    env.roledefs = {
53 0ac84a9a Dimitris Aragiorgis
        "nodes": env.env.ips,
54 0ac84a9a Dimitris Aragiorgis
        "ips": env.env.ips,
55 0ac84a9a Dimitris Aragiorgis
        "accounts": [env.env.accounts.ip],
56 0ac84a9a Dimitris Aragiorgis
        "cyclades": [env.env.cyclades.ip],
57 0ac84a9a Dimitris Aragiorgis
        "pithos": [env.env.pithos.ip],
58 0ac84a9a Dimitris Aragiorgis
        "cms": [env.env.cms.ip],
59 0ac84a9a Dimitris Aragiorgis
        "mq": [env.env.mq.ip],
60 0ac84a9a Dimitris Aragiorgis
        "db": [env.env.db.ip],
61 f1800130 Ilias Tsitsimpis
        "mq": [env.env.mq.ip],
62 f1800130 Ilias Tsitsimpis
        "db": [env.env.db.ip],
63 0ac84a9a Dimitris Aragiorgis
        "ns": [env.env.ns.ip],
64 0ac84a9a Dimitris Aragiorgis
        "client": [env.env.client.ip],
65 0ac84a9a Dimitris Aragiorgis
        "router": [env.env.router.ip],
66 0cfa5e03 Stratos Psomadakis
        "stats": [env.env.stats.ip],
67 0ac84a9a Dimitris Aragiorgis
    }
68 0ac84a9a Dimitris Aragiorgis
69 0ac84a9a Dimitris Aragiorgis
    env.enable_lvm = False
70 0ac84a9a Dimitris Aragiorgis
    env.enable_drbd = False
71 0ac84a9a Dimitris Aragiorgis
    if ast.literal_eval(env.env.create_extra_disk) and env.env.extra_disk:
72 0ac84a9a Dimitris Aragiorgis
        env.enable_lvm = True
73 0ac84a9a Dimitris Aragiorgis
        env.enable_drbd = True
74 0ac84a9a Dimitris Aragiorgis
75 0ac84a9a Dimitris Aragiorgis
    env.roledefs.update({
76 0ac84a9a Dimitris Aragiorgis
        "ganeti": env.env.cluster_ips,
77 0ac84a9a Dimitris Aragiorgis
        "master": [env.env.master.ip],
78 0ac84a9a Dimitris Aragiorgis
    })
79 0ac84a9a Dimitris Aragiorgis
80 0ac84a9a Dimitris Aragiorgis
81 0ac84a9a Dimitris Aragiorgis
@roles("ns")
82 0ac84a9a Dimitris Aragiorgis
def update_ns_for_ganeti():
83 f1800130 Ilias Tsitsimpis
    debug(env.host,
84 f1800130 Ilias Tsitsimpis
          "Updating name server entries for backend %s..."
85 f1800130 Ilias Tsitsimpis
          % env.env.cluster.fqdn)
86 0ac84a9a Dimitris Aragiorgis
    update_arecord(env.env.cluster)
87 0ac84a9a Dimitris Aragiorgis
    update_ptrrecord(env.env.cluster)
88 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/bind9 restart")
89 0ac84a9a Dimitris Aragiorgis
90 0ac84a9a Dimitris Aragiorgis
91 0ac84a9a Dimitris Aragiorgis
@roles("ns")
92 0ac84a9a Dimitris Aragiorgis
def update_ns_for_node(node):
93 0ac84a9a Dimitris Aragiorgis
    info = env.env.nodes_info.get(node)
94 0ac84a9a Dimitris Aragiorgis
    update_arecord(info)
95 0ac84a9a Dimitris Aragiorgis
    update_ptrrecord(info)
96 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/bind9 restart")
97 0ac84a9a Dimitris Aragiorgis
98 0ac84a9a Dimitris Aragiorgis
99 0ac84a9a Dimitris Aragiorgis
@roles("ns")
100 0ac84a9a Dimitris Aragiorgis
def update_arecord(host):
101 0ac84a9a Dimitris Aragiorgis
    filename = "/etc/bind/zones/" + env.env.domain
102 0ac84a9a Dimitris Aragiorgis
    cmd = """
103 0ac84a9a Dimitris Aragiorgis
    echo '{0}' >> {1}
104 0ac84a9a Dimitris Aragiorgis
    """.format(host.arecord, filename)
105 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
106 0ac84a9a Dimitris Aragiorgis
107 0ac84a9a Dimitris Aragiorgis
108 0ac84a9a Dimitris Aragiorgis
@roles("ns")
109 0ac84a9a Dimitris Aragiorgis
def update_cnamerecord(host):
110 0ac84a9a Dimitris Aragiorgis
    filename = "/etc/bind/zones/" + env.env.domain
111 0ac84a9a Dimitris Aragiorgis
    cmd = """
112 0ac84a9a Dimitris Aragiorgis
    echo '{0}' >> {1}
113 0ac84a9a Dimitris Aragiorgis
    """.format(host.cnamerecord, filename)
114 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
115 0ac84a9a Dimitris Aragiorgis
116 0ac84a9a Dimitris Aragiorgis
117 0ac84a9a Dimitris Aragiorgis
@roles("ns")
118 0ac84a9a Dimitris Aragiorgis
def update_ptrrecord(host):
119 0ac84a9a Dimitris Aragiorgis
    filename = "/etc/bind/rev/synnefo.in-addr.arpa.zone"
120 0ac84a9a Dimitris Aragiorgis
    cmd = """
121 0ac84a9a Dimitris Aragiorgis
    echo '{0}' >> {1}
122 0ac84a9a Dimitris Aragiorgis
    """.format(host.ptrrecord, filename)
123 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
124 0ac84a9a Dimitris Aragiorgis
125 f1800130 Ilias Tsitsimpis
126 0ac84a9a Dimitris Aragiorgis
@roles("nodes")
127 0ac84a9a Dimitris Aragiorgis
def apt_get_update():
128 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "apt-get update....")
129 0ac84a9a Dimitris Aragiorgis
    try_run("apt-get update")
130 0ac84a9a Dimitris Aragiorgis
131 f1800130 Ilias Tsitsimpis
132 0ac84a9a Dimitris Aragiorgis
@roles("ns")
133 0ac84a9a Dimitris Aragiorgis
def setup_ns():
134 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up name server..")
135 0ac84a9a Dimitris Aragiorgis
    #WARNING: this should be remove after we are done
136 0ac84a9a Dimitris Aragiorgis
    # because gevent does pick randomly nameservers and google does
137 0ac84a9a Dimitris Aragiorgis
    # not know our setup!!!!!
138 0ac84a9a Dimitris Aragiorgis
    apt_get_update()
139 0ac84a9a Dimitris Aragiorgis
    install_package("bind9")
140 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/bind/named.conf.local"
141 0ac84a9a Dimitris Aragiorgis
    replace = {
142 f1800130 Ilias Tsitsimpis
        "domain": env.env.domain,
143 f1800130 Ilias Tsitsimpis
    }
144 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
145 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl)
146 0ac84a9a Dimitris Aragiorgis
147 0ac84a9a Dimitris Aragiorgis
    try_run("mkdir -p /etc/bind/zones")
148 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/bind/zones/example.com"
149 0ac84a9a Dimitris Aragiorgis
    replace = {
150 f1800130 Ilias Tsitsimpis
        "domain": env.env.domain,
151 f1800130 Ilias Tsitsimpis
        "ns_node_ip": env.env.ns.ip,
152 f1800130 Ilias Tsitsimpis
    }
153 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
154 0ac84a9a Dimitris Aragiorgis
    remote = "/etc/bind/zones/" + env.env.domain
155 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, remote)
156 0ac84a9a Dimitris Aragiorgis
157 0ac84a9a Dimitris Aragiorgis
    try_run("mkdir -p /etc/bind/rev")
158 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/bind/rev/synnefo.in-addr.arpa.zone"
159 0ac84a9a Dimitris Aragiorgis
    replace = {
160 f1800130 Ilias Tsitsimpis
        "domain": env.env.domain,
161 f1800130 Ilias Tsitsimpis
    }
162 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
163 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl)
164 0ac84a9a Dimitris Aragiorgis
165 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/bind/named.conf.options"
166 0ac84a9a Dimitris Aragiorgis
    replace = {
167 f1800130 Ilias Tsitsimpis
        "NODE_IPS": ";".join(env.env.ips),
168 f1800130 Ilias Tsitsimpis
    }
169 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
170 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl, mode=0644)
171 0ac84a9a Dimitris Aragiorgis
172 0ac84a9a Dimitris Aragiorgis
    for role, info in env.env.roles.iteritems():
173 0ac84a9a Dimitris Aragiorgis
        if role == "ns":
174 0ac84a9a Dimitris Aragiorgis
            continue
175 0ac84a9a Dimitris Aragiorgis
        update_cnamerecord(info)
176 0ac84a9a Dimitris Aragiorgis
    for node, info in env.env.nodes_info.iteritems():
177 0ac84a9a Dimitris Aragiorgis
        update_arecord(info)
178 0ac84a9a Dimitris Aragiorgis
        update_ptrrecord(info)
179 0ac84a9a Dimitris Aragiorgis
180 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/bind9 restart")
181 0ac84a9a Dimitris Aragiorgis
182 0ac84a9a Dimitris Aragiorgis
183 0ac84a9a Dimitris Aragiorgis
@roles("nodes")
184 0ac84a9a Dimitris Aragiorgis
def check_dhcp():
185 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Checking IPs for synnefo..")
186 0ac84a9a Dimitris Aragiorgis
    for n, info in env.env.nodes_info.iteritems():
187 0e6e73d3 Ilias Tsitsimpis
        try_run("ping -c 1 " + info.ip)
188 0ac84a9a Dimitris Aragiorgis
189 f1800130 Ilias Tsitsimpis
190 0ac84a9a Dimitris Aragiorgis
@roles("nodes")
191 0ac84a9a Dimitris Aragiorgis
def check_dns():
192 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Checking fqdns for synnefo..")
193 0ac84a9a Dimitris Aragiorgis
    for n, info in env.env.nodes_info.iteritems():
194 0e6e73d3 Ilias Tsitsimpis
        try_run("ping -c 1 " + info.fqdn)
195 0ac84a9a Dimitris Aragiorgis
196 0ac84a9a Dimitris Aragiorgis
    for n, info in env.env.roles.iteritems():
197 0e6e73d3 Ilias Tsitsimpis
        try_run("ping -c 1 " + info.fqdn)
198 0ac84a9a Dimitris Aragiorgis
199 f1800130 Ilias Tsitsimpis
200 0ac84a9a Dimitris Aragiorgis
@roles("nodes")
201 0ac84a9a Dimitris Aragiorgis
def check_connectivity():
202 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Checking internet connectivity..")
203 0e6e73d3 Ilias Tsitsimpis
    try_run("ping -c 1 www.google.com")
204 0ac84a9a Dimitris Aragiorgis
205 0ac84a9a Dimitris Aragiorgis
206 0ac84a9a Dimitris Aragiorgis
@roles("nodes")
207 0ac84a9a Dimitris Aragiorgis
def check_ssh():
208 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Checking password-less ssh..")
209 0ac84a9a Dimitris Aragiorgis
    for n, info in env.env.nodes_info.iteritems():
210 0e6e73d3 Ilias Tsitsimpis
        try_run("ssh " + info.fqdn + "  date")
211 0ac84a9a Dimitris Aragiorgis
212 0ac84a9a Dimitris Aragiorgis
213 0ac84a9a Dimitris Aragiorgis
@roles("ips")
214 0ac84a9a Dimitris Aragiorgis
def add_keys():
215 8780d2fa Dimitris Aragiorgis
    if not env.key_inject:
216 f1800130 Ilias Tsitsimpis
        debug(env.host, "Skipping ssh keys injection..")
217 f1800130 Ilias Tsitsimpis
        return
218 8780d2fa Dimitris Aragiorgis
    else:
219 f1800130 Ilias Tsitsimpis
        debug(env.host, "Adding rsa/dsa keys..")
220 0ac84a9a Dimitris Aragiorgis
    try_run("mkdir -p /root/.ssh")
221 0ac84a9a Dimitris Aragiorgis
    cmd = """
222 0ac84a9a Dimitris Aragiorgis
for f in $(ls /root/.ssh/*); do
223 0ac84a9a Dimitris Aragiorgis
  cp $f $f.bak
224 0ac84a9a Dimitris Aragiorgis
done
225 0ac84a9a Dimitris Aragiorgis
    """
226 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
227 0ac84a9a Dimitris Aragiorgis
    files = ["authorized_keys", "id_dsa", "id_dsa.pub",
228 0ac84a9a Dimitris Aragiorgis
             "id_rsa", "id_rsa.pub"]
229 0ac84a9a Dimitris Aragiorgis
    for f in files:
230 f1800130 Ilias Tsitsimpis
        tmpl = "/root/.ssh/" + f
231 f1800130 Ilias Tsitsimpis
        replace = {}
232 f1800130 Ilias Tsitsimpis
        custom = customize_settings_from_tmpl(tmpl, replace)
233 0e6e73d3 Ilias Tsitsimpis
        try_put(custom, tmpl, mode=0600)
234 0ac84a9a Dimitris Aragiorgis
235 0ac84a9a Dimitris Aragiorgis
    cmd = """
236 0ac84a9a Dimitris Aragiorgis
if [ -e /root/.ssh/authorized_keys.bak ]; then
237 0ac84a9a Dimitris Aragiorgis
  cat /root/.ssh/authorized_keys.bak >> /root/.ssh/authorized_keys
238 0ac84a9a Dimitris Aragiorgis
fi
239 0ac84a9a Dimitris Aragiorgis
    """
240 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Updating exising authorized keys..")
241 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
242 0ac84a9a Dimitris Aragiorgis
243 f1800130 Ilias Tsitsimpis
244 0ac84a9a Dimitris Aragiorgis
@roles("ips")
245 0ac84a9a Dimitris Aragiorgis
def setup_resolv_conf():
246 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Tweak /etc/resolv.conf...")
247 0e6e73d3 Ilias Tsitsimpis
    try_run("/etc/init.d/network-manager stop", abort=False)
248 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/dhcp/dhclient-enter-hooks.d/nodnsupdate"
249 0ac84a9a Dimitris Aragiorgis
    replace = {}
250 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
251 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl, mode=0644)
252 0ac84a9a Dimitris Aragiorgis
    try_run("cp /etc/resolv.conf /etc/resolv.conf.bak")
253 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/resolv.conf"
254 0ac84a9a Dimitris Aragiorgis
    replace = {
255 f1800130 Ilias Tsitsimpis
        "domain": env.env.domain,
256 f1800130 Ilias Tsitsimpis
        "ns_node_ip": env.env.ns.ip,
257 f1800130 Ilias Tsitsimpis
    }
258 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
259 703d78d6 Dimitris Aragiorgis
    try:
260 0e6e73d3 Ilias Tsitsimpis
        try_put(custom, tmpl)
261 28991d59 Ilias Tsitsimpis
        cmd = """
262 28991d59 Ilias Tsitsimpis
        echo "\
263 28991d59 Ilias Tsitsimpis
# This has been generated automatically by snf-deploy, at
264 28991d59 Ilias Tsitsimpis
# $(date).
265 28991d59 Ilias Tsitsimpis
# The immutable bit (+i attribute) has been used to avoid it being
266 28991d59 Ilias Tsitsimpis
# overwritten by software such as NetworkManager or resolvconf.
267 28991d59 Ilias Tsitsimpis
# Use lsattr/chattr to view or modify its file attributes.
268 28991d59 Ilias Tsitsimpis

269 28991d59 Ilias Tsitsimpis

270 28991d59 Ilias Tsitsimpis
$(cat {0})" > {0}
271 28991d59 Ilias Tsitsimpis
""".format(tmpl)
272 28991d59 Ilias Tsitsimpis
        try_run(cmd)
273 703d78d6 Dimitris Aragiorgis
    except:
274 f1800130 Ilias Tsitsimpis
        pass
275 0ac84a9a Dimitris Aragiorgis
    try_run("chattr +i /etc/resolv.conf")
276 0ac84a9a Dimitris Aragiorgis
277 0ac84a9a Dimitris Aragiorgis
278 0ac84a9a Dimitris Aragiorgis
@roles("ips")
279 0ac84a9a Dimitris Aragiorgis
def setup_hosts():
280 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Tweaking /etc/hosts and ssh_config files...")
281 0ac84a9a Dimitris Aragiorgis
    try_run("echo StrictHostKeyChecking no >> /etc/ssh/ssh_config")
282 fea067c8 Dimitris Aragiorgis
    cmd = "sed -i 's/^127.*$/127.0.0.1 localhost/g' /etc/hosts "
283 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
284 6e0e55ba Dimitris Aragiorgis
    host_info = env.env.ips_info[env.host]
285 6e0e55ba Dimitris Aragiorgis
    cmd = "hostname %s" % host_info.hostname
286 6e0e55ba Dimitris Aragiorgis
    try_run(cmd)
287 6e0e55ba Dimitris Aragiorgis
    cmd = "echo %s > /etc/hostname" % host_info.hostname
288 6e0e55ba Dimitris Aragiorgis
    try_run(cmd)
289 0ac84a9a Dimitris Aragiorgis
290 0ac84a9a Dimitris Aragiorgis
291 0ac84a9a Dimitris Aragiorgis
def create_bridges():
292 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Creating bridges...")
293 0ac84a9a Dimitris Aragiorgis
    install_package("bridge-utils")
294 0ac84a9a Dimitris Aragiorgis
    cmd = """
295 0ac84a9a Dimitris Aragiorgis
    brctl addbr {0} ; ip link set {0} up
296 0ac84a9a Dimitris Aragiorgis
    """.format(env.env.common_bridge)
297 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
298 0ac84a9a Dimitris Aragiorgis
299 0ac84a9a Dimitris Aragiorgis
300 0ac84a9a Dimitris Aragiorgis
def connect_bridges():
301 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Connecting bridges...")
302 f1800130 Ilias Tsitsimpis
    #cmd = """
303 f1800130 Ilias Tsitsimpis
    #brctl addif {0} {1}
304 f1800130 Ilias Tsitsimpis
    #""".format(env.env.common_bridge, env.env.public_iface)
305 0ac84a9a Dimitris Aragiorgis
    #try_run(cmd)
306 0ac84a9a Dimitris Aragiorgis
307 0ac84a9a Dimitris Aragiorgis
308 0ac84a9a Dimitris Aragiorgis
@roles("ganeti")
309 0ac84a9a Dimitris Aragiorgis
def setup_net_infra():
310 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setup networking infrastracture..")
311 0ac84a9a Dimitris Aragiorgis
    create_bridges()
312 0ac84a9a Dimitris Aragiorgis
    connect_bridges()
313 0ac84a9a Dimitris Aragiorgis
314 0ac84a9a Dimitris Aragiorgis
315 0ac84a9a Dimitris Aragiorgis
@roles("ganeti")
316 0ac84a9a Dimitris Aragiorgis
def setup_lvm():
317 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "create volume group %s for ganeti.." % env.env.vg)
318 0ac84a9a Dimitris Aragiorgis
    if env.enable_lvm:
319 0ac84a9a Dimitris Aragiorgis
        install_package("lvm2")
320 0ac84a9a Dimitris Aragiorgis
        cmd = """
321 0ac84a9a Dimitris Aragiorgis
        pvcreate {0}
322 0ac84a9a Dimitris Aragiorgis
        vgcreate {1} {0}
323 0ac84a9a Dimitris Aragiorgis
        """.format(env.env.extra_disk, env.env.vg)
324 0ac84a9a Dimitris Aragiorgis
        try_run(cmd)
325 0ac84a9a Dimitris Aragiorgis
326 0ac84a9a Dimitris Aragiorgis
327 0ac84a9a Dimitris Aragiorgis
@roles("nodes")
328 0ac84a9a Dimitris Aragiorgis
def setup_apt():
329 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up apt sources...")
330 0ac84a9a Dimitris Aragiorgis
    install_package("curl")
331 0ac84a9a Dimitris Aragiorgis
    cmd = """
332 0ac84a9a Dimitris Aragiorgis
    echo 'APT::Install-Suggests "false";' >> /etc/apt/apt.conf
333 0ac84a9a Dimitris Aragiorgis
    curl -k https://dev.grnet.gr/files/apt-grnetdev.pub | apt-key add -
334 0ac84a9a Dimitris Aragiorgis
    """
335 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
336 f1b4fdfc Dimitris Aragiorgis
    host_info = env.env.ips_info[env.host]
337 f1b4fdfc Dimitris Aragiorgis
    if host_info.os == "squeeze":
338 f1800130 Ilias Tsitsimpis
        tmpl = "/etc/apt/sources.list.d/synnefo.squeeze.list"
339 f1b4fdfc Dimitris Aragiorgis
    else:
340 f1800130 Ilias Tsitsimpis
        tmpl = "/etc/apt/sources.list.d/synnefo.wheezy.list"
341 0ac84a9a Dimitris Aragiorgis
    replace = {}
342 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
343 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl)
344 0ac84a9a Dimitris Aragiorgis
    apt_get_update()
345 0ac84a9a Dimitris Aragiorgis
346 0ac84a9a Dimitris Aragiorgis
347 0ac84a9a Dimitris Aragiorgis
@roles("cyclades", "cms", "pithos", "accounts")
348 0ac84a9a Dimitris Aragiorgis
def restart_services():
349 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Restarting apache2 and gunicorn...")
350 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
351 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/apache2 restart")
352 0ac84a9a Dimitris Aragiorgis
353 0ac84a9a Dimitris Aragiorgis
354 0ac84a9a Dimitris Aragiorgis
def setup_gunicorn():
355 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Setting up gunicorn...")
356 0ac84a9a Dimitris Aragiorgis
    install_package("gunicorn")
357 5a390037 Dimitris Aragiorgis
    try_run("chown root.www-data /var/log/gunicorn")
358 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/gunicorn.d/synnefo"
359 0ac84a9a Dimitris Aragiorgis
    replace = {}
360 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
361 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl, mode=0644)
362 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
363 0ac84a9a Dimitris Aragiorgis
364 0ac84a9a Dimitris Aragiorgis
365 0ac84a9a Dimitris Aragiorgis
def setup_apache():
366 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Setting up apache2...")
367 0ac84a9a Dimitris Aragiorgis
    host_info = env.env.ips_info[env.host]
368 0ac84a9a Dimitris Aragiorgis
    install_package("apache2")
369 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/apache2/sites-available/synnefo"
370 0ac84a9a Dimitris Aragiorgis
    replace = {
371 0ac84a9a Dimitris Aragiorgis
        "HOST": host_info.fqdn,
372 0ac84a9a Dimitris Aragiorgis
    }
373 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
374 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl)
375 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/apache2/sites-available/synnefo-ssl"
376 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
377 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl)
378 0ac84a9a Dimitris Aragiorgis
    cmd = """
379 0ac84a9a Dimitris Aragiorgis
    a2enmod ssl
380 0ac84a9a Dimitris Aragiorgis
    a2enmod rewrite
381 0ac84a9a Dimitris Aragiorgis
    a2dissite default
382 0ac84a9a Dimitris Aragiorgis
    a2ensite synnefo
383 0ac84a9a Dimitris Aragiorgis
    a2ensite synnefo-ssl
384 0ac84a9a Dimitris Aragiorgis
    a2enmod headers
385 0ac84a9a Dimitris Aragiorgis
    a2enmod proxy_http
386 0ac84a9a Dimitris Aragiorgis
    a2dismod autoindex
387 0ac84a9a Dimitris Aragiorgis
    """
388 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
389 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/apache2 restart")
390 0ac84a9a Dimitris Aragiorgis
391 0ac84a9a Dimitris Aragiorgis
392 0ac84a9a Dimitris Aragiorgis
@roles("mq")
393 0ac84a9a Dimitris Aragiorgis
def setup_mq():
394 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up RabbitMQ...")
395 0ac84a9a Dimitris Aragiorgis
    install_package("rabbitmq-server")
396 0ac84a9a Dimitris Aragiorgis
    cmd = """
397 0ac84a9a Dimitris Aragiorgis
    rabbitmqctl add_user {0} {1}
398 0ac84a9a Dimitris Aragiorgis
    rabbitmqctl set_permissions {0} ".*" ".*" ".*"
399 0ac84a9a Dimitris Aragiorgis
    rabbitmqctl delete_user guest
400 0ac84a9a Dimitris Aragiorgis
    rabbitmqctl set_user_tags {0} administrator
401 0ac84a9a Dimitris Aragiorgis
    """.format(env.env.synnefo_user, env.env.synnefo_rabbitmq_passwd)
402 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
403 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/rabbitmq-server restart")
404 0ac84a9a Dimitris Aragiorgis
405 0ac84a9a Dimitris Aragiorgis
406 0ac84a9a Dimitris Aragiorgis
@roles("db")
407 108fbde6 Dimitris Aragiorgis
def allow_access_in_db(ip, user="all", method="md5"):
408 0ac84a9a Dimitris Aragiorgis
    cmd = """
409 ccd1fef8 Ilias Tsitsimpis
    pg_hba=$(ls /etc/postgresql/*/main/pg_hba.conf)
410 ccd1fef8 Ilias Tsitsimpis
    echo host all {0} {1}/32 {2} >> $pg_hba
411 108fbde6 Dimitris Aragiorgis
    """.format(user, ip, method)
412 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
413 61aedf5a Christos Stavrakakis
    cmd = """
414 ccd1fef8 Ilias Tsitsimpis
    pg_hba=$(ls /etc/postgresql/*/main/pg_hba.conf)
415 ccd1fef8 Ilias Tsitsimpis
    sed -i 's/\(host.*127.0.0.1.*\)md5/\\1trust/' $pg_hba
416 61aedf5a Christos Stavrakakis
    """
417 61aedf5a Christos Stavrakakis
    try_run(cmd)
418 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/postgresql restart")
419 0ac84a9a Dimitris Aragiorgis
420 f1800130 Ilias Tsitsimpis
421 0ac84a9a Dimitris Aragiorgis
@roles("db")
422 0ac84a9a Dimitris Aragiorgis
def setup_db():
423 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up DataBase server...")
424 0ac84a9a Dimitris Aragiorgis
    install_package("postgresql")
425 0ac84a9a Dimitris Aragiorgis
426 0ac84a9a Dimitris Aragiorgis
    tmpl = "/tmp/db-init.psql"
427 0ac84a9a Dimitris Aragiorgis
    replace = {
428 0ac84a9a Dimitris Aragiorgis
        "synnefo_user": env.env.synnefo_user,
429 0ac84a9a Dimitris Aragiorgis
        "synnefo_db_passwd": env.env.synnefo_db_passwd,
430 0ac84a9a Dimitris Aragiorgis
        }
431 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
432 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl)
433 0ac84a9a Dimitris Aragiorgis
    cmd = 'su - postgres -c "psql -w -f %s" ' % tmpl
434 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
435 0ac84a9a Dimitris Aragiorgis
    cmd = """
436 ccd1fef8 Ilias Tsitsimpis
    conf=$(ls /etc/postgresql/*/main/postgresql.conf)
437 ccd1fef8 Ilias Tsitsimpis
    echo "listen_addresses = '*'" >> $conf
438 0ac84a9a Dimitris Aragiorgis
    """
439 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
440 0ac84a9a Dimitris Aragiorgis
441 bd9b6f21 Christos Stavrakakis
    if env.env.testing_vm:
442 bd9b6f21 Christos Stavrakakis
        cmd = """
443 ccd1fef8 Ilias Tsitsimpis
        conf=$(ls /etc/postgresql/*/main/postgresql.conf)
444 ccd1fef8 Ilias Tsitsimpis
        echo "fsync=off\nsynchronous_commit=off\nfull_page_writes=off" >> $conf
445 bd9b6f21 Christos Stavrakakis
        """
446 bd9b6f21 Christos Stavrakakis
        try_run(cmd)
447 bd9b6f21 Christos Stavrakakis
448 108fbde6 Dimitris Aragiorgis
    allow_access_in_db(env.host, "all", "trust")
449 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/postgresql restart")
450 0ac84a9a Dimitris Aragiorgis
451 0ac84a9a Dimitris Aragiorgis
452 0ac84a9a Dimitris Aragiorgis
@roles("db")
453 0ac84a9a Dimitris Aragiorgis
def destroy_db():
454 0ac84a9a Dimitris Aragiorgis
    try_run("""su - postgres -c ' psql -w -c "drop database snf_apps" '""")
455 0ac84a9a Dimitris Aragiorgis
    try_run("""su - postgres -c ' psql -w -c "drop database snf_pithos" '""")
456 0ac84a9a Dimitris Aragiorgis
457 0ac84a9a Dimitris Aragiorgis
458 0ac84a9a Dimitris Aragiorgis
def setup_webproject():
459 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Setting up snf-webproject...")
460 0ac84a9a Dimitris Aragiorgis
    with settings(hide("everything")):
461 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.db.ip)
462 0ac84a9a Dimitris Aragiorgis
    setup_common()
463 0ac84a9a Dimitris Aragiorgis
    install_package("snf-webproject")
464 0ac84a9a Dimitris Aragiorgis
    install_package("python-psycopg2")
465 0ac84a9a Dimitris Aragiorgis
    install_package("python-gevent")
466 0500dae6 Christos Stavrakakis
    install_package("python-django")
467 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/synnefo/webproject.conf"
468 0ac84a9a Dimitris Aragiorgis
    replace = {
469 0ac84a9a Dimitris Aragiorgis
        "synnefo_user": env.env.synnefo_user,
470 0ac84a9a Dimitris Aragiorgis
        "synnefo_db_passwd": env.env.synnefo_db_passwd,
471 0ac84a9a Dimitris Aragiorgis
        "db_node": env.env.db.ip,
472 0ac84a9a Dimitris Aragiorgis
        "domain": env.env.domain,
473 0ac84a9a Dimitris Aragiorgis
    }
474 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
475 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl, mode=0644)
476 1d8cf97d Dimitris Aragiorgis
    with settings(host_string=env.env.db.ip):
477 0ac84a9a Dimitris Aragiorgis
        host_info = env.env.ips_info[env.host]
478 108fbde6 Dimitris Aragiorgis
        allow_access_in_db(host_info.ip, "all", "trust")
479 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
480 0ac84a9a Dimitris Aragiorgis
481 0ac84a9a Dimitris Aragiorgis
482 0ac84a9a Dimitris Aragiorgis
def setup_common():
483 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Setting up snf-common...")
484 0ac84a9a Dimitris Aragiorgis
    host_info = env.env.ips_info[env.host]
485 0ac84a9a Dimitris Aragiorgis
    install_package("python-objpool")
486 0ac84a9a Dimitris Aragiorgis
    install_package("snf-common")
487 0ac84a9a Dimitris Aragiorgis
    install_package("python-astakosclient")
488 0ac84a9a Dimitris Aragiorgis
    install_package("snf-django-lib")
489 0ac84a9a Dimitris Aragiorgis
    install_package("snf-branding")
490 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/synnefo/common.conf"
491 0ac84a9a Dimitris Aragiorgis
    replace = {
492 0ac84a9a Dimitris Aragiorgis
        #FIXME:
493 0ac84a9a Dimitris Aragiorgis
        "EMAIL_SUBJECT_PREFIX": env.host,
494 0ac84a9a Dimitris Aragiorgis
        "domain": env.env.domain,
495 0ac84a9a Dimitris Aragiorgis
        "HOST": host_info.fqdn,
496 f4cb5d92 Ilias Tsitsimpis
        "MAIL_DIR": env.env.mail_dir,
497 0ac84a9a Dimitris Aragiorgis
    }
498 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
499 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl, mode=0644)
500 ed0dd751 Ilias Tsitsimpis
    try_run("mkdir -p {0}; chmod 777 {0}".format(env.env.mail_dir))
501 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
502 0ac84a9a Dimitris Aragiorgis
503 f1800130 Ilias Tsitsimpis
504 0ac84a9a Dimitris Aragiorgis
@roles("accounts")
505 0ac84a9a Dimitris Aragiorgis
def astakos_loaddata():
506 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Loading initial data to astakos...")
507 0ac84a9a Dimitris Aragiorgis
    cmd = """
508 0ac84a9a Dimitris Aragiorgis
    snf-manage loaddata groups
509 0ac84a9a Dimitris Aragiorgis
    """
510 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
511 0ac84a9a Dimitris Aragiorgis
512 0ac84a9a Dimitris Aragiorgis
513 0ac84a9a Dimitris Aragiorgis
@roles("accounts")
514 fea067c8 Dimitris Aragiorgis
def astakos_register_components():
515 65c656c1 Giorgos Korfiatis
    debug(env.host, " * Register services in astakos...")
516 65c656c1 Giorgos Korfiatis
517 eb765213 Giorgos Korfiatis
    cyclades_base_url = "https://%s/cyclades" % env.env.cyclades.fqdn
518 eb765213 Giorgos Korfiatis
    pithos_base_url = "https://%s/pithos" % env.env.pithos.fqdn
519 eb765213 Giorgos Korfiatis
    astakos_base_url = "https://%s/astakos" % env.env.accounts.fqdn
520 65c656c1 Giorgos Korfiatis
521 0ac84a9a Dimitris Aragiorgis
    cmd = """
522 eb765213 Giorgos Korfiatis
    snf-manage component-add "home" --ui-url https://{0}
523 eb765213 Giorgos Korfiatis
    snf-manage component-add "cyclades" --base-url {1} --ui-url {1}/ui
524 eb765213 Giorgos Korfiatis
    snf-manage component-add "pithos" --base-url {2} --ui-url {2}/ui
525 eb765213 Giorgos Korfiatis
    snf-manage component-add "astakos" --base-url {3} --ui-url {3}/ui
526 65c656c1 Giorgos Korfiatis
    """.format(env.env.cms.fqdn, cyclades_base_url,
527 5fcd489e Dimitris Aragiorgis
               pithos_base_url, astakos_base_url)
528 65c656c1 Giorgos Korfiatis
    try_run(cmd)
529 0ac84a9a Dimitris Aragiorgis
530 0ac84a9a Dimitris Aragiorgis
531 0ac84a9a Dimitris Aragiorgis
@roles("accounts")
532 952a28c0 Sofia Papagiannaki
def astakos_register_pithos_view():
533 952a28c0 Sofia Papagiannaki
    debug(env.host, " * Register pithos view as oauth2 client...")
534 952a28c0 Sofia Papagiannaki
535 952a28c0 Sofia Papagiannaki
    pithos_base_url = "https://%s/pithos" % env.env.pithos.fqdn
536 952a28c0 Sofia Papagiannaki
537 952a28c0 Sofia Papagiannaki
    cmd = """
538 b7245b84 Dimitris Aragiorgis
    snf-manage oauth2-client-add pithos-view --secret={0} --is-trusted \
539 b7245b84 Dimitris Aragiorgis
    --url {1}
540 b7245b84 Dimitris Aragiorgis
    """.format(env.env.oa2_secret, '%s/ui/view' % pithos_base_url)
541 952a28c0 Sofia Papagiannaki
    try_run(cmd)
542 952a28c0 Sofia Papagiannaki
543 952a28c0 Sofia Papagiannaki
544 952a28c0 Sofia Papagiannaki
@roles("accounts")
545 0ac84a9a Dimitris Aragiorgis
def add_user():
546 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * adding user %s to astakos..." % env.env.user_email)
547 f1800130 Ilias Tsitsimpis
    email = env.env.user_email
548 f1800130 Ilias Tsitsimpis
    name = env.env.user_name
549 f1800130 Ilias Tsitsimpis
    lastname = env.env.user_lastname
550 f1800130 Ilias Tsitsimpis
    passwd = env.env.user_passwd
551 0ac84a9a Dimitris Aragiorgis
    cmd = """
552 0ac84a9a Dimitris Aragiorgis
    snf-manage user-add {0} {1} {2}
553 0ac84a9a Dimitris Aragiorgis
    """.format(email, name, lastname)
554 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
555 1d8cf97d Dimitris Aragiorgis
    with settings(host_string=env.env.db.ip):
556 0ac84a9a Dimitris Aragiorgis
        uid, user_auth_token, user_uuid = get_auth_token_from_db(email)
557 0ac84a9a Dimitris Aragiorgis
    cmd = """
558 0ac84a9a Dimitris Aragiorgis
    snf-manage user-modify --password {0} {1}
559 0ac84a9a Dimitris Aragiorgis
    """.format(passwd, uid)
560 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
561 0ac84a9a Dimitris Aragiorgis
562 0ac84a9a Dimitris Aragiorgis
563 0ac84a9a Dimitris Aragiorgis
@roles("accounts")
564 0ac84a9a Dimitris Aragiorgis
def activate_user(user_email=None):
565 0ac84a9a Dimitris Aragiorgis
    if not user_email:
566 f1800130 Ilias Tsitsimpis
        user_email = env.env.user_email
567 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Activate user %s..." % user_email)
568 1d8cf97d Dimitris Aragiorgis
    with settings(host_string=env.env.db.ip):
569 0ac84a9a Dimitris Aragiorgis
        uid, user_auth_token, user_uuid = get_auth_token_from_db(user_email)
570 0ac84a9a Dimitris Aragiorgis
571 0ac84a9a Dimitris Aragiorgis
    cmd = """
572 0ac84a9a Dimitris Aragiorgis
    snf-manage user-modify --verify {0}
573 0ac84a9a Dimitris Aragiorgis
    snf-manage user-modify --accept {0}
574 0ac84a9a Dimitris Aragiorgis
    """.format(uid)
575 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
576 0ac84a9a Dimitris Aragiorgis
577 f1800130 Ilias Tsitsimpis
578 0ac84a9a Dimitris Aragiorgis
@roles("accounts")
579 0ac84a9a Dimitris Aragiorgis
def setup_astakos():
580 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up snf-astakos-app...")
581 0ac84a9a Dimitris Aragiorgis
    setup_gunicorn()
582 0ac84a9a Dimitris Aragiorgis
    setup_apache()
583 0ac84a9a Dimitris Aragiorgis
    setup_webproject()
584 0ac84a9a Dimitris Aragiorgis
    install_package("python-django-south")
585 0ac84a9a Dimitris Aragiorgis
    install_package("snf-astakos-app")
586 0ac84a9a Dimitris Aragiorgis
    install_package("kamaki")
587 0ac84a9a Dimitris Aragiorgis
588 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/synnefo/astakos.conf"
589 0ac84a9a Dimitris Aragiorgis
    replace = {
590 f1800130 Ilias Tsitsimpis
        "ACCOUNTS": env.env.accounts.fqdn,
591 f1800130 Ilias Tsitsimpis
        "domain": env.env.domain,
592 f1800130 Ilias Tsitsimpis
        "CYCLADES": env.env.cyclades.fqdn,
593 f1800130 Ilias Tsitsimpis
        "PITHOS": env.env.pithos.fqdn,
594 0ac84a9a Dimitris Aragiorgis
    }
595 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
596 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl, mode=0644)
597 0ac84a9a Dimitris Aragiorgis
    if env.csrf_disable:
598 f1800130 Ilias Tsitsimpis
        cmd = """
599 0ac84a9a Dimitris Aragiorgis
cat <<EOF >> /etc/synnefo/astakos.conf
600 0ac84a9a Dimitris Aragiorgis
try:
601 0ac84a9a Dimitris Aragiorgis
  MIDDLEWARE_CLASSES.remove('django.middleware.csrf.CsrfViewMiddleware')
602 0ac84a9a Dimitris Aragiorgis
except:
603 0ac84a9a Dimitris Aragiorgis
  pass
604 0ac84a9a Dimitris Aragiorgis
EOF
605 0ac84a9a Dimitris Aragiorgis
"""
606 f1800130 Ilias Tsitsimpis
        try_run(cmd)
607 0ac84a9a Dimitris Aragiorgis
608 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
609 0ac84a9a Dimitris Aragiorgis
610 0ac84a9a Dimitris Aragiorgis
    cmd = """
611 0ac84a9a Dimitris Aragiorgis
    snf-manage syncdb --noinput
612 0ac84a9a Dimitris Aragiorgis
    snf-manage migrate im --delete-ghost-migrations
613 0ac84a9a Dimitris Aragiorgis
    snf-manage migrate quotaholder_app
614 952a28c0 Sofia Papagiannaki
    snf-manage migrate oa2
615 0ac84a9a Dimitris Aragiorgis
    """
616 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
617 0ac84a9a Dimitris Aragiorgis
618 65c656c1 Giorgos Korfiatis
619 0ac84a9a Dimitris Aragiorgis
@roles("accounts")
620 0ac84a9a Dimitris Aragiorgis
def get_service_details(service="pithos"):
621 f1800130 Ilias Tsitsimpis
    debug(env.host,
622 f1800130 Ilias Tsitsimpis
          " * Getting registered details for %s service..." % service)
623 b3adfb20 Christos Stavrakakis
    result = try_run("snf-manage component-list -o id,name,token")
624 0ac84a9a Dimitris Aragiorgis
    r = re.compile(r".*%s.*" % service, re.M)
625 b3adfb20 Christos Stavrakakis
    service_id, _, service_token = r.search(result).group().split()
626 0ac84a9a Dimitris Aragiorgis
    # print("%s: %s %s" % (service, service_id, service_token))
627 0ac84a9a Dimitris Aragiorgis
    return (service_id, service_token)
628 0ac84a9a Dimitris Aragiorgis
629 0ac84a9a Dimitris Aragiorgis
630 0ac84a9a Dimitris Aragiorgis
@roles("db")
631 0ac84a9a Dimitris Aragiorgis
def get_auth_token_from_db(user_email=None):
632 0ac84a9a Dimitris Aragiorgis
    if not user_email:
633 f1800130 Ilias Tsitsimpis
        user_email = env.env.user_email
634 f1800130 Ilias Tsitsimpis
    debug(env.host,
635 f1800130 Ilias Tsitsimpis
          " * Getting authentication token and uuid for user %s..."
636 f1800130 Ilias Tsitsimpis
          % user_email)
637 0ac84a9a Dimitris Aragiorgis
    cmd = """
638 f1800130 Ilias Tsitsimpis
echo "select id, auth_token, uuid, email from auth_user, im_astakosuser \
639 f1800130 Ilias Tsitsimpis
where auth_user.id = im_astakosuser.user_ptr_id and auth_user.email = '{0}';" \
640 f1800130 Ilias Tsitsimpis
> /tmp/psqlcmd
641 f1800130 Ilias Tsitsimpis
su - postgres -c  "psql -w -d snf_apps -f /tmp/psqlcmd"
642 f1800130 Ilias Tsitsimpis
""".format(user_email)
643 0ac84a9a Dimitris Aragiorgis
644 0ac84a9a Dimitris Aragiorgis
    result = try_run(cmd)
645 0ac84a9a Dimitris Aragiorgis
    r = re.compile(r"(\d+)[ |]*(\S+)[ |]*(\S+)[ |]*" + user_email, re.M)
646 0ac84a9a Dimitris Aragiorgis
    match = r.search(result)
647 0ac84a9a Dimitris Aragiorgis
    uid, user_auth_token, user_uuid = match.groups()
648 0ac84a9a Dimitris Aragiorgis
    # print("%s: %s %s %s" % ( user_email, uid, user_auth_token, user_uuid))
649 0ac84a9a Dimitris Aragiorgis
650 0ac84a9a Dimitris Aragiorgis
    return (uid, user_auth_token, user_uuid)
651 0ac84a9a Dimitris Aragiorgis
652 0ac84a9a Dimitris Aragiorgis
653 0ac84a9a Dimitris Aragiorgis
@roles("cms")
654 0ac84a9a Dimitris Aragiorgis
def cms_loaddata():
655 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Loading cms initial data...")
656 0ac84a9a Dimitris Aragiorgis
    if env.cms_pass:
657 f1800130 Ilias Tsitsimpis
        debug(env.host, "Aborting. Prerequisites not met.")
658 f1800130 Ilias Tsitsimpis
        return
659 0ac84a9a Dimitris Aragiorgis
    tmpl = "/tmp/sites.json"
660 0ac84a9a Dimitris Aragiorgis
    replace = {}
661 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
662 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl)
663 0ac84a9a Dimitris Aragiorgis
664 0ac84a9a Dimitris Aragiorgis
    tmpl = "/tmp/page.json"
665 0ac84a9a Dimitris Aragiorgis
    replace = {}
666 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
667 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl)
668 0ac84a9a Dimitris Aragiorgis
669 0ac84a9a Dimitris Aragiorgis
    cmd = """
670 0ac84a9a Dimitris Aragiorgis
    snf-manage loaddata /tmp/sites.json
671 0ac84a9a Dimitris Aragiorgis
    snf-manage loaddata /tmp/page.json
672 0ac84a9a Dimitris Aragiorgis
    snf-manage createsuperuser --username=admin --email=admin@{0} --noinput
673 0ac84a9a Dimitris Aragiorgis
    """.format(env.env.domain)
674 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
675 0ac84a9a Dimitris Aragiorgis
676 0ac84a9a Dimitris Aragiorgis
677 0ac84a9a Dimitris Aragiorgis
@roles("cms")
678 0ac84a9a Dimitris Aragiorgis
def setup_cms():
679 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up cms...")
680 0ac84a9a Dimitris Aragiorgis
    if env.cms_pass:
681 f1800130 Ilias Tsitsimpis
        debug(env.host, "Aborting. Prerequisites not met.")
682 f1800130 Ilias Tsitsimpis
        return
683 0ac84a9a Dimitris Aragiorgis
    with settings(hide("everything")):
684 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 accounts." + env.env.domain)
685 0ac84a9a Dimitris Aragiorgis
    setup_gunicorn()
686 0ac84a9a Dimitris Aragiorgis
    setup_apache()
687 0ac84a9a Dimitris Aragiorgis
    setup_webproject()
688 0ac84a9a Dimitris Aragiorgis
    install_package("snf-cloudcms")
689 0ac84a9a Dimitris Aragiorgis
690 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/synnefo/cms.conf"
691 0ac84a9a Dimitris Aragiorgis
    replace = {
692 0ac84a9a Dimitris Aragiorgis
        "ACCOUNTS": env.env.accounts.fqdn,
693 0ac84a9a Dimitris Aragiorgis
        }
694 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
695 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl, mode=0644)
696 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
697 0ac84a9a Dimitris Aragiorgis
698 0ac84a9a Dimitris Aragiorgis
    cmd = """
699 0ac84a9a Dimitris Aragiorgis
    snf-manage syncdb
700 0ac84a9a Dimitris Aragiorgis
    snf-manage migrate --delete-ghost-migrations
701 0ac84a9a Dimitris Aragiorgis
    """.format(env.env.domain)
702 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
703 0ac84a9a Dimitris Aragiorgis
704 0ac84a9a Dimitris Aragiorgis
705 0ac84a9a Dimitris Aragiorgis
def setup_nfs_dirs():
706 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Creating NFS mount point for pithos and ganeti...")
707 0ac84a9a Dimitris Aragiorgis
    cmd = """
708 0ac84a9a Dimitris Aragiorgis
    mkdir -p {0}
709 0ac84a9a Dimitris Aragiorgis
    cd {0}
710 0ac84a9a Dimitris Aragiorgis
    mkdir -p data
711 0ac84a9a Dimitris Aragiorgis
    chown www-data:www-data data
712 0ac84a9a Dimitris Aragiorgis
    chmod g+ws data
713 093d25d8 Dimitris Aragiorgis
    mkdir -p {1}
714 093d25d8 Dimitris Aragiorgis
    """.format(env.env.pithos_dir, env.env.image_dir)
715 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
716 0ac84a9a Dimitris Aragiorgis
717 0ac84a9a Dimitris Aragiorgis
718 0ac84a9a Dimitris Aragiorgis
@roles("nodes")
719 0ac84a9a Dimitris Aragiorgis
def setup_nfs_clients():
720 1d8cf97d Dimitris Aragiorgis
    if env.host == env.env.pithos.ip:
721 f1800130 Ilias Tsitsimpis
        return
722 0ac84a9a Dimitris Aragiorgis
723 9f93a6fb Dimitris Aragiorgis
    host_info = env.env.ips_info[env.host]
724 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Mounting pithos NFS mount point...")
725 0ac84a9a Dimitris Aragiorgis
    with settings(hide("everything")):
726 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.pithos.hostname)
727 9f93a6fb Dimitris Aragiorgis
    with settings(host_string=env.env.pithos.ip):
728 9f93a6fb Dimitris Aragiorgis
        update_nfs_exports(host_info.ip)
729 9f93a6fb Dimitris Aragiorgis
730 0ac84a9a Dimitris Aragiorgis
    install_package("nfs-common")
731 9f93a6fb Dimitris Aragiorgis
    for d in [env.env.pithos_dir, env.env.image_dir]:
732 f1800130 Ilias Tsitsimpis
        try_run("mkdir -p " + d)
733 f1800130 Ilias Tsitsimpis
        cmd = """
734 f1800130 Ilias Tsitsimpis
echo "{0}:{1} {1}  nfs defaults,rw,noatime,rsize=131072,\
735 f1800130 Ilias Tsitsimpis
wsize=131072,timeo=14,intr,noacl" >> /etc/fstab
736 f1800130 Ilias Tsitsimpis
""".format(env.env.pithos.ip, d)
737 f1800130 Ilias Tsitsimpis
        try_run(cmd)
738 f1800130 Ilias Tsitsimpis
        try_run("mount " + d)
739 f1800130 Ilias Tsitsimpis
740 0ac84a9a Dimitris Aragiorgis
741 0ac84a9a Dimitris Aragiorgis
@roles("pithos")
742 9f93a6fb Dimitris Aragiorgis
def update_nfs_exports(ip):
743 9f93a6fb Dimitris Aragiorgis
    tmpl = "/tmp/exports"
744 0ac84a9a Dimitris Aragiorgis
    replace = {
745 f1800130 Ilias Tsitsimpis
        "pithos_dir": env.env.pithos_dir,
746 f1800130 Ilias Tsitsimpis
        "image_dir": env.env.image_dir,
747 f1800130 Ilias Tsitsimpis
        "ip": ip,
748 f1800130 Ilias Tsitsimpis
    }
749 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
750 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl)
751 9f93a6fb Dimitris Aragiorgis
    try_run("cat %s >> /etc/exports" % tmpl)
752 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/nfs-kernel-server restart")
753 0ac84a9a Dimitris Aragiorgis
754 f1800130 Ilias Tsitsimpis
755 9f93a6fb Dimitris Aragiorgis
@roles("pithos")
756 9f93a6fb Dimitris Aragiorgis
def setup_nfs_server():
757 9f93a6fb Dimitris Aragiorgis
    debug(env.host, " * Setting up NFS server for pithos...")
758 9f93a6fb Dimitris Aragiorgis
    setup_nfs_dirs()
759 9f93a6fb Dimitris Aragiorgis
    install_package("nfs-kernel-server")
760 9f93a6fb Dimitris Aragiorgis
761 0ac84a9a Dimitris Aragiorgis
762 0ac84a9a Dimitris Aragiorgis
@roles("pithos")
763 0ac84a9a Dimitris Aragiorgis
def setup_pithos():
764 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up snf-pithos-app...")
765 0ac84a9a Dimitris Aragiorgis
    with settings(hide("everything")):
766 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 accounts." + env.env.domain)
767 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.db.ip)
768 0ac84a9a Dimitris Aragiorgis
    setup_gunicorn()
769 0ac84a9a Dimitris Aragiorgis
    setup_apache()
770 0ac84a9a Dimitris Aragiorgis
    setup_webproject()
771 0ac84a9a Dimitris Aragiorgis
772 1d8cf97d Dimitris Aragiorgis
    with settings(host_string=env.env.accounts.ip):
773 0ac84a9a Dimitris Aragiorgis
        service_id, service_token = get_service_details("pithos")
774 0ac84a9a Dimitris Aragiorgis
775 0ac84a9a Dimitris Aragiorgis
    install_package("kamaki")
776 0ac84a9a Dimitris Aragiorgis
    install_package("snf-pithos-backend")
777 0ac84a9a Dimitris Aragiorgis
    install_package("snf-pithos-app")
778 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/synnefo/pithos.conf"
779 0ac84a9a Dimitris Aragiorgis
    replace = {
780 0ac84a9a Dimitris Aragiorgis
        "ACCOUNTS": env.env.accounts.fqdn,
781 0ac84a9a Dimitris Aragiorgis
        "PITHOS": env.env.pithos.fqdn,
782 0ac84a9a Dimitris Aragiorgis
        "db_node": env.env.db.ip,
783 0ac84a9a Dimitris Aragiorgis
        "synnefo_user": env.env.synnefo_user,
784 0ac84a9a Dimitris Aragiorgis
        "synnefo_db_passwd": env.env.synnefo_db_passwd,
785 0ac84a9a Dimitris Aragiorgis
        "pithos_dir": env.env.pithos_dir,
786 0ac84a9a Dimitris Aragiorgis
        "PITHOS_SERVICE_TOKEN": service_token,
787 5ffa5e6d Dimitris Aragiorgis
        "oa2_secret": env.env.oa2_secret,
788 0ac84a9a Dimitris Aragiorgis
        }
789 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
790 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl, mode=0644)
791 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
792 0ac84a9a Dimitris Aragiorgis
793 0ac84a9a Dimitris Aragiorgis
    install_package("snf-pithos-webclient")
794 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/synnefo/webclient.conf"
795 0ac84a9a Dimitris Aragiorgis
    replace = {
796 0ac84a9a Dimitris Aragiorgis
        "ACCOUNTS": env.env.accounts.fqdn,
797 0ac84a9a Dimitris Aragiorgis
        "PITHOS_UI_CLOUDBAR_ACTIVE_SERVICE": service_id,
798 0ac84a9a Dimitris Aragiorgis
        }
799 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
800 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl, mode=0644)
801 0ac84a9a Dimitris Aragiorgis
802 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
803 0ac84a9a Dimitris Aragiorgis
    #TOFIX: the previous command lets pithos-backend create blocks and maps
804 0ac84a9a Dimitris Aragiorgis
    #       with root owner
805 0ac84a9a Dimitris Aragiorgis
    try_run("chown -R www-data:www-data %s/data " % env.env.pithos_dir)
806 68269100 Giorgos Korfiatis
    try_run("pithos-migrate stamp head")
807 0ac84a9a Dimitris Aragiorgis
    #try_run("pithos-migrate upgrade head")
808 0ac84a9a Dimitris Aragiorgis
809 0ac84a9a Dimitris Aragiorgis
810 0ac84a9a Dimitris Aragiorgis
@roles("ganeti")
811 0ac84a9a Dimitris Aragiorgis
def setup_ganeti():
812 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up snf-ganeti...")
813 0ac84a9a Dimitris Aragiorgis
    node_info = env.env.ips_info[env.host]
814 0ac84a9a Dimitris Aragiorgis
    with settings(hide("everything")):
815 0ac84a9a Dimitris Aragiorgis
        #if env.enable_lvm:
816 0ac84a9a Dimitris Aragiorgis
        #    try_run("vgs " + env.env.vg)
817 0ac84a9a Dimitris Aragiorgis
        try_run("getent hosts " + env.env.cluster.fqdn)
818 0ac84a9a Dimitris Aragiorgis
        try_run("getent hosts %s | grep -v ^127" % env.host)
819 0ac84a9a Dimitris Aragiorgis
        try_run("hostname -f | grep " + node_info.fqdn)
820 0ac84a9a Dimitris Aragiorgis
        #try_run("ip link show " + env.env.common_bridge)
821 0ac84a9a Dimitris Aragiorgis
        #try_run("ip link show " + env.env.common_bridge)
822 0ac84a9a Dimitris Aragiorgis
        #try_run("apt-get update")
823 0ac84a9a Dimitris Aragiorgis
    install_package("qemu-kvm")
824 0ac84a9a Dimitris Aragiorgis
    install_package("python-bitarray")
825 03f01e0d Dimitris Aragiorgis
    install_package("ganeti-haskell")
826 0ac84a9a Dimitris Aragiorgis
    install_package("ganeti-htools")
827 0ac84a9a Dimitris Aragiorgis
    install_package("snf-ganeti")
828 0ac84a9a Dimitris Aragiorgis
    try_run("mkdir -p /srv/ganeti/file-storage/")
829 0ac84a9a Dimitris Aragiorgis
    cmd = """
830 0ac84a9a Dimitris Aragiorgis
cat <<EOF > /etc/ganeti/file-storage-paths
831 0ac84a9a Dimitris Aragiorgis
/srv/ganeti/file-storage
832 0ac84a9a Dimitris Aragiorgis
/srv/ganeti/shared-file-storage
833 0ac84a9a Dimitris Aragiorgis
EOF
834 0ac84a9a Dimitris Aragiorgis
"""
835 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
836 0ac84a9a Dimitris Aragiorgis
837 0ac84a9a Dimitris Aragiorgis
838 0ac84a9a Dimitris Aragiorgis
@roles("master")
839 0ac84a9a Dimitris Aragiorgis
def add_rapi_user():
840 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Adding RAPI user to Ganeti backend...")
841 0ac84a9a Dimitris Aragiorgis
    cmd = """
842 2242394d Dimitris Aragiorgis
    echo -n "{0}:Ganeti Remote API:{1}" | openssl md5 | sed 's/^.* //'
843 0ac84a9a Dimitris Aragiorgis
    """.format(env.env.synnefo_user, env.env.synnefo_rapi_passwd)
844 0ac84a9a Dimitris Aragiorgis
    result = try_run(cmd)
845 b249aba9 Christos Stavrakakis
    if result.startswith("(stdin)= "):
846 b249aba9 Christos Stavrakakis
        result = result.split("(stdin)= ")[1]
847 0ac84a9a Dimitris Aragiorgis
    cmd = """
848 0ac84a9a Dimitris Aragiorgis
    echo "{0} {1}{2} write" >> /var/lib/ganeti/rapi/users
849 f1800130 Ilias Tsitsimpis
    """.format(env.env.synnefo_user, '{ha1}', result)
850 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
851 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/ganeti restart")
852 0ac84a9a Dimitris Aragiorgis
853 f1800130 Ilias Tsitsimpis
854 0ac84a9a Dimitris Aragiorgis
@roles("master")
855 0ac84a9a Dimitris Aragiorgis
def add_nodes():
856 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Adding nodes to Ganeti backend...")
857 3c3bccab Dimitris Aragiorgis
    for n in env.env.cluster_nodes:
858 0ac84a9a Dimitris Aragiorgis
        add_node(n)
859 0ac84a9a Dimitris Aragiorgis
860 f1800130 Ilias Tsitsimpis
861 0ac84a9a Dimitris Aragiorgis
@roles("master")
862 0ac84a9a Dimitris Aragiorgis
def add_node(node):
863 0ac84a9a Dimitris Aragiorgis
    node_info = env.env.nodes_info[node]
864 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Adding node %s to Ganeti backend..." % node_info.fqdn)
865 f1800130 Ilias Tsitsimpis
    cmd = "gnt-node add --no-ssh-key-check --master-capable=yes " + \
866 f1800130 Ilias Tsitsimpis
          "--vm-capable=yes " + node_info.fqdn
867 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
868 0ac84a9a Dimitris Aragiorgis
869 f1800130 Ilias Tsitsimpis
870 0ac84a9a Dimitris Aragiorgis
@roles("ganeti")
871 0ac84a9a Dimitris Aragiorgis
def enable_drbd():
872 0ac84a9a Dimitris Aragiorgis
    if env.enable_drbd:
873 0ac84a9a Dimitris Aragiorgis
        debug(env.host, " * Enabling DRBD...")
874 04660f63 Dimitris Aragiorgis
        install_package("drbd8-utils")
875 0ac84a9a Dimitris Aragiorgis
        try_run("modprobe drbd minor_count=255 usermode_helper=/bin/true")
876 f1800130 Ilias Tsitsimpis
        try_run("echo drbd minor_count=255 usermode_helper=/bin/true " +
877 f1800130 Ilias Tsitsimpis
                ">> /etc/modules")
878 f1800130 Ilias Tsitsimpis
879 0ac84a9a Dimitris Aragiorgis
880 0ac84a9a Dimitris Aragiorgis
@roles("master")
881 0ac84a9a Dimitris Aragiorgis
def setup_drbd_dparams():
882 0ac84a9a Dimitris Aragiorgis
    if env.enable_drbd:
883 f1800130 Ilias Tsitsimpis
        debug(env.host,
884 f1800130 Ilias Tsitsimpis
              " * Twicking drbd related disk parameters in Ganeti...")
885 0ac84a9a Dimitris Aragiorgis
        cmd = """
886 0ac84a9a Dimitris Aragiorgis
        gnt-cluster modify --disk-parameters=drbd:metavg={0}
887 0ac84a9a Dimitris Aragiorgis
        gnt-group modify --disk-parameters=drbd:metavg={0} default
888 0ac84a9a Dimitris Aragiorgis
        """.format(env.env.vg)
889 0ac84a9a Dimitris Aragiorgis
        try_run(cmd)
890 0ac84a9a Dimitris Aragiorgis
891 f1800130 Ilias Tsitsimpis
892 0ac84a9a Dimitris Aragiorgis
@roles("master")
893 0ac84a9a Dimitris Aragiorgis
def enable_lvm():
894 0ac84a9a Dimitris Aragiorgis
    if env.enable_lvm:
895 0ac84a9a Dimitris Aragiorgis
        debug(env.host, " * Enabling LVM...")
896 0ac84a9a Dimitris Aragiorgis
        cmd = """
897 0ac84a9a Dimitris Aragiorgis
        gnt-cluster modify --vg-name={0}
898 0ac84a9a Dimitris Aragiorgis
        """.format(env.env.vg)
899 0ac84a9a Dimitris Aragiorgis
        try_run(cmd)
900 0ac84a9a Dimitris Aragiorgis
    else:
901 0ac84a9a Dimitris Aragiorgis
        debug(env.host, " * Disabling LVM...")
902 0ac84a9a Dimitris Aragiorgis
        try_run("gnt-cluster modify --no-lvm-storage")
903 0ac84a9a Dimitris Aragiorgis
904 f1800130 Ilias Tsitsimpis
905 0ac84a9a Dimitris Aragiorgis
@roles("master")
906 0ac84a9a Dimitris Aragiorgis
def destroy_cluster():
907 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Destroying Ganeti cluster...")
908 0ac84a9a Dimitris Aragiorgis
    #TODO: remove instances first
909 0ac84a9a Dimitris Aragiorgis
    allnodes = env.env.cluster_hostnames[:]
910 0ac84a9a Dimitris Aragiorgis
    allnodes.remove(env.host)
911 0ac84a9a Dimitris Aragiorgis
    for n in allnodes:
912 f1800130 Ilias Tsitsimpis
        host_info = env.env.ips_info[env.host]
913 f1800130 Ilias Tsitsimpis
        debug(env.host, " * Removing node %s..." % n)
914 f1800130 Ilias Tsitsimpis
        cmd = "gnt-node remove  " + host_info.fqdn
915 f1800130 Ilias Tsitsimpis
        try_run(cmd)
916 0ac84a9a Dimitris Aragiorgis
    try_run("gnt-cluster destroy --yes-do-it")
917 0ac84a9a Dimitris Aragiorgis
918 0ac84a9a Dimitris Aragiorgis
919 0ac84a9a Dimitris Aragiorgis
@roles("master")
920 0ac84a9a Dimitris Aragiorgis
def init_cluster():
921 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Initializing Ganeti backend...")
922 0ac84a9a Dimitris Aragiorgis
    # extra = ""
923 0ac84a9a Dimitris Aragiorgis
    # if env.enable_lvm:
924 0ac84a9a Dimitris Aragiorgis
    #     extra += " --vg-name={0} ".format(env.env.vg)
925 0ac84a9a Dimitris Aragiorgis
    # else:
926 0ac84a9a Dimitris Aragiorgis
    #     extra += " --no-lvm-storage "
927 0ac84a9a Dimitris Aragiorgis
    # if not env.enable_drbd:
928 0ac84a9a Dimitris Aragiorgis
    #     extra += " --no-drbd-storage "
929 0ac84a9a Dimitris Aragiorgis
    extra = " --no-lvm-storage --no-drbd-storage "
930 0ac84a9a Dimitris Aragiorgis
    cmd = """
931 0ac84a9a Dimitris Aragiorgis
    gnt-cluster init --enabled-hypervisors=kvm \
932 f1800130 Ilias Tsitsimpis
        {0} \
933 f1800130 Ilias Tsitsimpis
        --nic-parameters link={1},mode=bridged \
934 f1800130 Ilias Tsitsimpis
        --master-netdev {2} \
935 f1800130 Ilias Tsitsimpis
        --default-iallocator hail \
936 c6e90126 Christos Stavrakakis
        --specs-nic-count min=0,max=8 \
937 f1800130 Ilias Tsitsimpis
        --hypervisor-parameters kvm:kernel_path=,vnc_bind_address=0.0.0.0 \
938 f1800130 Ilias Tsitsimpis
        --no-ssh-init --no-etc-hosts \
939 f1800130 Ilias Tsitsimpis
        {3}
940 0ac84a9a Dimitris Aragiorgis
    """.format(extra, env.env.common_bridge,
941 0ac84a9a Dimitris Aragiorgis
               env.env.cluster_netdev, env.env.cluster.fqdn)
942 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
943 d88c9628 Christos Stavrakakis
    cmd = """gnt-cluster modify --enabled-disk-templates file,plain,ext"""
944 d88c9628 Christos Stavrakakis
    try_run(cmd)
945 0ac84a9a Dimitris Aragiorgis
946 0ac84a9a Dimitris Aragiorgis
947 0ac84a9a Dimitris Aragiorgis
@roles("ganeti")
948 0ac84a9a Dimitris Aragiorgis
def debootstrap():
949 0ac84a9a Dimitris Aragiorgis
    install_package("ganeti-instance-debootstrap")
950 0ac84a9a Dimitris Aragiorgis
951 0ac84a9a Dimitris Aragiorgis
952 0ac84a9a Dimitris Aragiorgis
@roles("ganeti")
953 0ac84a9a Dimitris Aragiorgis
def setup_image_host():
954 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up snf-image...")
955 0ac84a9a Dimitris Aragiorgis
    install_package("snf-pithos-backend")
956 0ac84a9a Dimitris Aragiorgis
    install_package("snf-image")
957 9f93a6fb Dimitris Aragiorgis
    try_run("mkdir -p %s" % env.env.image_dir)
958 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/default/snf-image"
959 0ac84a9a Dimitris Aragiorgis
    replace = {
960 0ac84a9a Dimitris Aragiorgis
        "synnefo_user": env.env.synnefo_user,
961 0ac84a9a Dimitris Aragiorgis
        "synnefo_db_passwd": env.env.synnefo_db_passwd,
962 0ac84a9a Dimitris Aragiorgis
        "pithos_dir": env.env.pithos_dir,
963 0ac84a9a Dimitris Aragiorgis
        "db_node": env.env.db.ip,
964 093d25d8 Dimitris Aragiorgis
        "image_dir": env.env.image_dir,
965 0ac84a9a Dimitris Aragiorgis
    }
966 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
967 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl)
968 0ac84a9a Dimitris Aragiorgis
969 0ac84a9a Dimitris Aragiorgis
970 0ac84a9a Dimitris Aragiorgis
@roles("ganeti")
971 0ac84a9a Dimitris Aragiorgis
def setup_image_helper():
972 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Updating helper image...")
973 0ac84a9a Dimitris Aragiorgis
    cmd = """
974 0ac84a9a Dimitris Aragiorgis
    snf-image-update-helper -y
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_gtools():
981 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Setting up snf-cyclades-gtools...")
982 0ac84a9a Dimitris Aragiorgis
    with settings(hide("everything")):
983 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.mq.ip)
984 0ac84a9a Dimitris Aragiorgis
    setup_common()
985 0ac84a9a Dimitris Aragiorgis
    install_package("snf-cyclades-gtools")
986 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/synnefo/gtools.conf"
987 0ac84a9a Dimitris Aragiorgis
    replace = {
988 0ac84a9a Dimitris Aragiorgis
        "synnefo_user": env.env.synnefo_user,
989 0ac84a9a Dimitris Aragiorgis
        "synnefo_rabbitmq_passwd": env.env.synnefo_rabbitmq_passwd,
990 0ac84a9a Dimitris Aragiorgis
        "mq_node": env.env.mq.ip,
991 0ac84a9a Dimitris Aragiorgis
    }
992 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
993 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl)
994 0ac84a9a Dimitris Aragiorgis
995 0ac84a9a Dimitris Aragiorgis
    cmd = """
996 0ac84a9a Dimitris Aragiorgis
    sed -i 's/false/true/' /etc/default/snf-ganeti-eventd
997 0ac84a9a Dimitris Aragiorgis
    /etc/init.d/snf-ganeti-eventd start
998 0ac84a9a Dimitris Aragiorgis
    """
999 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1000 0ac84a9a Dimitris Aragiorgis
1001 0ac84a9a Dimitris Aragiorgis
1002 0ac84a9a Dimitris Aragiorgis
@roles("ganeti")
1003 0ac84a9a Dimitris Aragiorgis
def setup_iptables():
1004 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Setting up iptables to mangle DHCP requests...")
1005 0ac84a9a Dimitris Aragiorgis
    cmd = """
1006 f1800130 Ilias Tsitsimpis
    iptables -t mangle -A PREROUTING -i br+ -p udp -m udp --dport 67 \
1007 f1800130 Ilias Tsitsimpis
            -j NFQUEUE --queue-num 42
1008 f1800130 Ilias Tsitsimpis
    iptables -t mangle -A PREROUTING -i tap+ -p udp -m udp --dport 67 \
1009 f1800130 Ilias Tsitsimpis
            -j NFQUEUE --queue-num 42
1010 f1800130 Ilias Tsitsimpis
    iptables -t mangle -A PREROUTING -i prv+ -p udp -m udp --dport 67 \
1011 f1800130 Ilias Tsitsimpis
            -j NFQUEUE --queue-num 42
1012 f1800130 Ilias Tsitsimpis

1013 f1800130 Ilias Tsitsimpis
    ip6tables -t mangle -A PREROUTING -i br+ -p ipv6-icmp -m icmp6 \
1014 f1800130 Ilias Tsitsimpis
            --icmpv6-type 133 -j NFQUEUE --queue-num 43
1015 f1800130 Ilias Tsitsimpis
    ip6tables -t mangle -A PREROUTING -i br+ -p ipv6-icmp -m icmp6 \
1016 f1800130 Ilias Tsitsimpis
            --icmpv6-type 135 -j NFQUEUE --queue-num 44
1017 0ac84a9a Dimitris Aragiorgis
    """
1018 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1019 0ac84a9a Dimitris Aragiorgis
1020 f1800130 Ilias Tsitsimpis
1021 0ac84a9a Dimitris Aragiorgis
@roles("ganeti")
1022 0ac84a9a Dimitris Aragiorgis
def setup_network():
1023 f1800130 Ilias Tsitsimpis
    debug(env.host,
1024 f1800130 Ilias Tsitsimpis
          "Setting up networking for Ganeti instances (nfdhcpd, etc.)...")
1025 03f01e0d Dimitris Aragiorgis
    install_package("python-nfqueue")
1026 0ac84a9a Dimitris Aragiorgis
    install_package("nfdhcpd")
1027 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/nfdhcpd/nfdhcpd.conf"
1028 0ac84a9a Dimitris Aragiorgis
    replace = {
1029 f1800130 Ilias Tsitsimpis
        "ns_node_ip": env.env.ns.ip
1030 f1800130 Ilias Tsitsimpis
    }
1031 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
1032 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl)
1033 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/nfdhcpd restart")
1034 0ac84a9a Dimitris Aragiorgis
1035 0ac84a9a Dimitris Aragiorgis
    install_package("snf-network")
1036 0ac84a9a Dimitris Aragiorgis
    cmd = """
1037 f1800130 Ilias Tsitsimpis
sed -i 's/MAC_MASK.*/MAC_MASK = ff:ff:f0:00:00:00/' /etc/default/snf-network
1038 0ac84a9a Dimitris Aragiorgis
    """
1039 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1040 0ac84a9a Dimitris Aragiorgis
1041 0ac84a9a Dimitris Aragiorgis
1042 0ac84a9a Dimitris Aragiorgis
@roles("router")
1043 0ac84a9a Dimitris Aragiorgis
def setup_router():
1044 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Setting up internal router for NAT...")
1045 0ac84a9a Dimitris Aragiorgis
    cmd = """
1046 0ac84a9a Dimitris Aragiorgis
    echo 1 > /proc/sys/net/ipv4/ip_forward
1047 0ac84a9a Dimitris Aragiorgis
    iptables -t nat -A POSTROUTING -s {0} -o {3} -j MASQUERADE
1048 0ac84a9a Dimitris Aragiorgis
    ip addr add {1} dev {2}
1049 0ac84a9a Dimitris Aragiorgis
    ip route add {0} dev {2} src {1}
1050 0ac84a9a Dimitris Aragiorgis
    """.format(env.env.synnefo_public_network_subnet,
1051 0ac84a9a Dimitris Aragiorgis
               env.env.synnefo_public_network_gateway,
1052 0ac84a9a Dimitris Aragiorgis
               env.env.common_bridge, env.env.public_iface)
1053 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1054 0ac84a9a Dimitris Aragiorgis
1055 6c51153a Dionysis Grigoropoulos
1056 0ac84a9a Dimitris Aragiorgis
@roles("cyclades")
1057 0ac84a9a Dimitris Aragiorgis
def cyclades_loaddata():
1058 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Loading initial data for cyclades...")
1059 6c51153a Dionysis Grigoropoulos
    try_run("snf-manage flavor-create %s %s %s %s" % (env.env.flavor_cpu,
1060 6c51153a Dionysis Grigoropoulos
                                                      env.env.flavor_ram,
1061 6c51153a Dionysis Grigoropoulos
                                                      env.env.flavor_disk,
1062 6c51153a Dionysis Grigoropoulos
                                                      env.env.flavor_storage))
1063 0ac84a9a Dimitris Aragiorgis
    #run("snf-manage loaddata flavors")
1064 0ac84a9a Dimitris Aragiorgis
1065 0ac84a9a Dimitris Aragiorgis
1066 0cfa5e03 Stratos Psomadakis
@roles("ganeti", "stats")
1067 0cfa5e03 Stratos Psomadakis
def setup_collectd():
1068 0cfa5e03 Stratos Psomadakis
    install_package("collectd")
1069 0cfa5e03 Stratos Psomadakis
    tmpl = "/etc/collectd/collectd.conf"
1070 0cfa5e03 Stratos Psomadakis
    replace = {}
1071 0cfa5e03 Stratos Psomadakis
    custom = customize_settings_from_tmpl(tmpl, replace)
1072 0cfa5e03 Stratos Psomadakis
    try_put(custom, tmpl, mode=0644)
1073 0cfa5e03 Stratos Psomadakis
1074 0cfa5e03 Stratos Psomadakis
1075 0cfa5e03 Stratos Psomadakis
@roles("ganeti")
1076 0cfa5e03 Stratos Psomadakis
def setup_ganeti_collectd():
1077 0cfa5e03 Stratos Psomadakis
    setup_collectd()
1078 0cfa5e03 Stratos Psomadakis
1079 0cfa5e03 Stratos Psomadakis
    tmpl = "/etc/collectd/passwd"
1080 0cfa5e03 Stratos Psomadakis
    replace = {}
1081 0cfa5e03 Stratos Psomadakis
    custom = customize_settings_from_tmpl(tmpl, replace)
1082 0cfa5e03 Stratos Psomadakis
    try_put(custom, tmpl, mode=0644)
1083 0cfa5e03 Stratos Psomadakis
1084 0cfa5e03 Stratos Psomadakis
    tmpl = "/etc/collectd/synnefo-ganeti.conf"
1085 0cfa5e03 Stratos Psomadakis
    replace = {
1086 0cfa5e03 Stratos Psomadakis
        "STATS": env.env.stats.fqdn,
1087 0cfa5e03 Stratos Psomadakis
        }
1088 0cfa5e03 Stratos Psomadakis
    custom = customize_settings_from_tmpl(tmpl, replace)
1089 0cfa5e03 Stratos Psomadakis
    try_put(custom, tmpl, mode=0644)
1090 0cfa5e03 Stratos Psomadakis
1091 0cfa5e03 Stratos Psomadakis
    try_run("/etc/init.d/collectd restart")
1092 0cfa5e03 Stratos Psomadakis
1093 0cfa5e03 Stratos Psomadakis
1094 0cfa5e03 Stratos Psomadakis
@roles("stats")
1095 0cfa5e03 Stratos Psomadakis
def setup_stats_collectd():
1096 0cfa5e03 Stratos Psomadakis
    setup_collectd()
1097 0cfa5e03 Stratos Psomadakis
    tmpl = "/etc/collectd/synnefo-stats.conf"
1098 0cfa5e03 Stratos Psomadakis
1099 0cfa5e03 Stratos Psomadakis
    replace = {
1100 0cfa5e03 Stratos Psomadakis
        "STATS": env.env.stats.fqdn,
1101 0cfa5e03 Stratos Psomadakis
        }
1102 0cfa5e03 Stratos Psomadakis
    custom = customize_settings_from_tmpl(tmpl, replace)
1103 0cfa5e03 Stratos Psomadakis
    try_put(custom, tmpl, mode=0644)
1104 0cfa5e03 Stratos Psomadakis
    try_run("/etc/init.d/collectd restart")
1105 0cfa5e03 Stratos Psomadakis
1106 0cfa5e03 Stratos Psomadakis
1107 0cfa5e03 Stratos Psomadakis
@roles("stats")
1108 0cfa5e03 Stratos Psomadakis
def setup_stats():
1109 0cfa5e03 Stratos Psomadakis
    debug(env.host, "Setting up snf-stats-app...")
1110 0cfa5e03 Stratos Psomadakis
    setup_stats_collectd()
1111 0cfa5e03 Stratos Psomadakis
    setup_gunicorn()
1112 0cfa5e03 Stratos Psomadakis
    setup_apache()
1113 0cfa5e03 Stratos Psomadakis
    setup_webproject()
1114 0cfa5e03 Stratos Psomadakis
    install_package("snf-stats-app")
1115 0cfa5e03 Stratos Psomadakis
    cmd = """
1116 0cfa5e03 Stratos Psomadakis
    mkdir /var/cache/snf-stats-app/
1117 0cfa5e03 Stratos Psomadakis
    chown www-data:www-data /var/cache/snf-stats-app/
1118 0cfa5e03 Stratos Psomadakis
    """
1119 0cfa5e03 Stratos Psomadakis
    try_run(cmd)
1120 0cfa5e03 Stratos Psomadakis
    tmpl = "/etc/synnefo/stats.conf"
1121 0cfa5e03 Stratos Psomadakis
1122 0cfa5e03 Stratos Psomadakis
    replace = {
1123 0cfa5e03 Stratos Psomadakis
        "STATS": env.env.stats.fqdn,
1124 0cfa5e03 Stratos Psomadakis
        }
1125 0cfa5e03 Stratos Psomadakis
    custom = customize_settings_from_tmpl(tmpl, replace)
1126 0cfa5e03 Stratos Psomadakis
    try_put(custom, tmpl, mode=0644)
1127 0cfa5e03 Stratos Psomadakis
    try_run("/etc/init.d/gunicorn restart")
1128 0cfa5e03 Stratos Psomadakis
1129 0cfa5e03 Stratos Psomadakis
1130 0ac84a9a Dimitris Aragiorgis
@roles("cyclades")
1131 0ac84a9a Dimitris Aragiorgis
def setup_cyclades():
1132 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up snf-cyclades-app...")
1133 0ac84a9a Dimitris Aragiorgis
    with settings(hide("everything")):
1134 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 accounts." + env.env.domain)
1135 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.db.ip)
1136 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.mq.ip)
1137 0ac84a9a Dimitris Aragiorgis
    setup_gunicorn()
1138 0ac84a9a Dimitris Aragiorgis
    setup_apache()
1139 0ac84a9a Dimitris Aragiorgis
    setup_webproject()
1140 0ac84a9a Dimitris Aragiorgis
    install_package("memcached")
1141 0ac84a9a Dimitris Aragiorgis
    install_package("python-memcache")
1142 0ac84a9a Dimitris Aragiorgis
    install_package("snf-pithos-backend")
1143 0ac84a9a Dimitris Aragiorgis
    install_package("kamaki")
1144 0ac84a9a Dimitris Aragiorgis
    install_package("snf-cyclades-app")
1145 0ac84a9a Dimitris Aragiorgis
    install_package("python-django-south")
1146 0ac84a9a Dimitris Aragiorgis
    tmpl = "/etc/synnefo/cyclades.conf"
1147 0ac84a9a Dimitris Aragiorgis
1148 1d8cf97d Dimitris Aragiorgis
    with settings(host_string=env.env.accounts.ip):
1149 0ac84a9a Dimitris Aragiorgis
        service_id, service_token = get_service_details("cyclades")
1150 0ac84a9a Dimitris Aragiorgis
1151 0ac84a9a Dimitris Aragiorgis
    replace = {
1152 0ac84a9a Dimitris Aragiorgis
        "ACCOUNTS": env.env.accounts.fqdn,
1153 0ac84a9a Dimitris Aragiorgis
        "CYCLADES": env.env.cyclades.fqdn,
1154 0ac84a9a Dimitris Aragiorgis
        "mq_node": env.env.mq.ip,
1155 0ac84a9a Dimitris Aragiorgis
        "db_node": env.env.db.ip,
1156 0ac84a9a Dimitris Aragiorgis
        "synnefo_user": env.env.synnefo_user,
1157 0ac84a9a Dimitris Aragiorgis
        "synnefo_db_passwd": env.env.synnefo_db_passwd,
1158 0ac84a9a Dimitris Aragiorgis
        "synnefo_rabbitmq_passwd": env.env.synnefo_rabbitmq_passwd,
1159 0ac84a9a Dimitris Aragiorgis
        "pithos_dir": env.env.pithos_dir,
1160 0ac84a9a Dimitris Aragiorgis
        "common_bridge": env.env.common_bridge,
1161 0ac84a9a Dimitris Aragiorgis
        "HOST": env.env.cyclades.ip,
1162 0ac84a9a Dimitris Aragiorgis
        "domain": env.env.domain,
1163 0ac84a9a Dimitris Aragiorgis
        "CYCLADES_SERVICE_TOKEN": service_token,
1164 0cfa5e03 Stratos Psomadakis
        'STATS': env.env.stats.fqdn,
1165 8d693406 Dimitris Aragiorgis
        'CYCLADES_NODE_IP': env.env.cyclades.ip,
1166 0ac84a9a Dimitris Aragiorgis
        }
1167 0ac84a9a Dimitris Aragiorgis
    custom = customize_settings_from_tmpl(tmpl, replace)
1168 0e6e73d3 Ilias Tsitsimpis
    try_put(custom, tmpl, mode=0644)
1169 0ac84a9a Dimitris Aragiorgis
    try_run("/etc/init.d/gunicorn restart")
1170 0ac84a9a Dimitris Aragiorgis
1171 0ac84a9a Dimitris Aragiorgis
    cmd = """
1172 0ac84a9a Dimitris Aragiorgis
    sed -i 's/false/true/' /etc/default/snf-dispatcher
1173 0ac84a9a Dimitris Aragiorgis
    /etc/init.d/snf-dispatcher start
1174 0ac84a9a Dimitris Aragiorgis
    """
1175 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1176 0ac84a9a Dimitris Aragiorgis
1177 0ac84a9a Dimitris Aragiorgis
    try_run("snf-manage syncdb")
1178 0ac84a9a Dimitris Aragiorgis
    try_run("snf-manage migrate --delete-ghost-migrations")
1179 0ac84a9a Dimitris Aragiorgis
1180 0ac84a9a Dimitris Aragiorgis
1181 0ac84a9a Dimitris Aragiorgis
@roles("cyclades")
1182 0ac84a9a Dimitris Aragiorgis
def get_backend_id(cluster_name="ganeti1.synnefo.deploy.local"):
1183 f1800130 Ilias Tsitsimpis
    backend_id = try_run("snf-manage backend-list 2>/dev/null " +
1184 f1800130 Ilias Tsitsimpis
                         "| grep %s | awk '{print $1}'" % cluster_name)
1185 0ac84a9a Dimitris Aragiorgis
    return backend_id
1186 0ac84a9a Dimitris Aragiorgis
1187 0ac84a9a Dimitris Aragiorgis
1188 0ac84a9a Dimitris Aragiorgis
@roles("cyclades")
1189 0ac84a9a Dimitris Aragiorgis
def add_backend():
1190 f1800130 Ilias Tsitsimpis
    debug(env.host,
1191 f1800130 Ilias Tsitsimpis
          "adding %s ganeti backend to cyclades..." % env.env.cluster.fqdn)
1192 0ac84a9a Dimitris Aragiorgis
    with settings(hide("everything")):
1193 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 " + env.env.cluster.fqdn)
1194 0ac84a9a Dimitris Aragiorgis
    cmd = """
1195 0ac84a9a Dimitris Aragiorgis
    snf-manage backend-add --clustername={0} --user={1} --pass={2}
1196 0ac84a9a Dimitris Aragiorgis
    """.format(env.env.cluster.fqdn, env.env.synnefo_user,
1197 0ac84a9a Dimitris Aragiorgis
               env.env.synnefo_rapi_passwd)
1198 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1199 0ac84a9a Dimitris Aragiorgis
    backend_id = get_backend_id(env.env.cluster.fqdn)
1200 0ac84a9a Dimitris Aragiorgis
    try_run("snf-manage backend-modify --drained=False " + backend_id)
1201 0ac84a9a Dimitris Aragiorgis
1202 f1800130 Ilias Tsitsimpis
1203 0ac84a9a Dimitris Aragiorgis
@roles("cyclades")
1204 0ac84a9a Dimitris Aragiorgis
def pin_user_to_backend(user_email):
1205 0ac84a9a Dimitris Aragiorgis
    backend_id = get_backend_id(env.env.cluster.fqdn)
1206 0ac84a9a Dimitris Aragiorgis
    # pin user to backend
1207 0ac84a9a Dimitris Aragiorgis
    cmd = """
1208 0ac84a9a Dimitris Aragiorgis
cat <<EOF >> /etc/synnefo/cyclades.conf
1209 0ac84a9a Dimitris Aragiorgis

1210 0ac84a9a Dimitris Aragiorgis
BACKEND_PER_USER = {
1211 f1800130 Ilias Tsitsimpis
  '{0}': {1},
1212 0ac84a9a Dimitris Aragiorgis
}
1213 0ac84a9a Dimitris Aragiorgis

1214 0ac84a9a Dimitris Aragiorgis
EOF
1215 0ac84a9a Dimitris Aragiorgis
/etc/init.d/gunicorn restart
1216 f1800130 Ilias Tsitsimpis
""".format(user_email, backend_id)
1217 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1218 0ac84a9a Dimitris Aragiorgis
1219 f1800130 Ilias Tsitsimpis
1220 0ac84a9a Dimitris Aragiorgis
@roles("cyclades")
1221 0ac84a9a Dimitris Aragiorgis
def add_pools():
1222 f1800130 Ilias Tsitsimpis
    debug(env.host,
1223 f1800130 Ilias Tsitsimpis
          " * Creating pools of resources (brigdes, mac prefixes) " +
1224 f1800130 Ilias Tsitsimpis
          "in cyclades...")
1225 f1800130 Ilias Tsitsimpis
    try_run("snf-manage pool-create --type=mac-prefix " +
1226 f1800130 Ilias Tsitsimpis
            "--base=aa:00:0 --size=65536")
1227 0ac84a9a Dimitris Aragiorgis
    try_run("snf-manage pool-create --type=bridge --base=prv --size=20")
1228 0ac84a9a Dimitris Aragiorgis
1229 0ac84a9a Dimitris Aragiorgis
1230 3c626269 Christos Stavrakakis
@roles("accounts", "cyclades", "pithos")
1231 3c626269 Christos Stavrakakis
def export_services():
1232 3c626269 Christos Stavrakakis
    debug(env.host, " * Exporting services...")
1233 3c626269 Christos Stavrakakis
    host = env.host
1234 3c626269 Christos Stavrakakis
    services = []
1235 3c626269 Christos Stavrakakis
    if host == env.env.cyclades.ip:
1236 3c626269 Christos Stavrakakis
        services.append("cyclades")
1237 3c626269 Christos Stavrakakis
    if host == env.env.pithos.ip:
1238 3c626269 Christos Stavrakakis
        services.append("pithos")
1239 3c626269 Christos Stavrakakis
    if host == env.env.accounts.ip:
1240 3c626269 Christos Stavrakakis
        services.append("astakos")
1241 3c626269 Christos Stavrakakis
    for service in services:
1242 3c626269 Christos Stavrakakis
        filename = "%s_services.json" % service
1243 3c626269 Christos Stavrakakis
        cmd = "snf-manage service-export-%s > %s" % (service, filename)
1244 3c626269 Christos Stavrakakis
        run(cmd)
1245 d4f28d8f Dimitris Aragiorgis
        try_get(filename, filename + ".local")
1246 3c626269 Christos Stavrakakis
1247 3c626269 Christos Stavrakakis
1248 3c626269 Christos Stavrakakis
@roles("accounts")
1249 3c626269 Christos Stavrakakis
def import_services():
1250 3c626269 Christos Stavrakakis
    debug(env.host, " * Registering services to astakos...")
1251 3c626269 Christos Stavrakakis
    for service in ["cyclades", "pithos", "astakos"]:
1252 3c626269 Christos Stavrakakis
        filename = "%s_services.json" % service
1253 0e6e73d3 Ilias Tsitsimpis
        try_put(filename + ".local", filename)
1254 3c626269 Christos Stavrakakis
        cmd = "snf-manage service-import --json=%s" % filename
1255 3c626269 Christos Stavrakakis
        run(cmd)
1256 3c626269 Christos Stavrakakis
1257 3c626269 Christos Stavrakakis
    debug(env.host, " * Setting default quota...")
1258 3c626269 Christos Stavrakakis
    cmd = """
1259 bf644f91 Giorgos Korfiatis
    snf-manage resource-modify --base-default 40G pithos.diskspace
1260 bf644f91 Giorgos Korfiatis
    snf-manage resource-modify --base-default 2 astakos.pending_app
1261 bf644f91 Giorgos Korfiatis
    snf-manage resource-modify --base-default 4 cyclades.vm
1262 bf644f91 Giorgos Korfiatis
    snf-manage resource-modify --base-default 40G cyclades.disk
1263 bf644f91 Giorgos Korfiatis
    snf-manage resource-modify --base-default 16G cyclades.total_ram
1264 bf644f91 Giorgos Korfiatis
    snf-manage resource-modify --base-default 8G cyclades.ram
1265 bf644f91 Giorgos Korfiatis
    snf-manage resource-modify --base-default 32 cyclades.total_cpu
1266 bf644f91 Giorgos Korfiatis
    snf-manage resource-modify --base-default 16 cyclades.cpu
1267 bf644f91 Giorgos Korfiatis
    snf-manage resource-modify --base-default 4 cyclades.network.private
1268 bf644f91 Giorgos Korfiatis
    snf-manage resource-modify --base-default 4 cyclades.floating_ip
1269 3c626269 Christos Stavrakakis
    """
1270 3c626269 Christos Stavrakakis
    try_run(cmd)
1271 3c626269 Christos Stavrakakis
1272 3c626269 Christos Stavrakakis
1273 38fd3090 Christos Stavrakakis
@roles("accounts")
1274 38fd3090 Christos Stavrakakis
def set_user_quota():
1275 38fd3090 Christos Stavrakakis
    debug(env.host, " * Setting user quota...")
1276 38fd3090 Christos Stavrakakis
    cmd = """
1277 38fd3090 Christos Stavrakakis
    snf-manage user-modify -f --all --base-quota pithos.diskspace 40G
1278 38fd3090 Christos Stavrakakis
    snf-manage user-modify -f --all --base-quota astakos.pending_app 2
1279 38fd3090 Christos Stavrakakis
    snf-manage user-modify -f --all --base-quota cyclades.vm 4
1280 38fd3090 Christos Stavrakakis
    snf-manage user-modify -f --all --base-quota cyclades.disk 40G
1281 38fd3090 Christos Stavrakakis
    snf-manage user-modify -f --all --base-quota cyclades.total_ram 16G
1282 38fd3090 Christos Stavrakakis
    snf-manage user-modify -f --all --base-quota cyclades.ram 8G
1283 38fd3090 Christos Stavrakakis
    snf-manage user-modify -f --all --base-quota cyclades.total_cpu 32
1284 38fd3090 Christos Stavrakakis
    snf-manage user-modify -f --all --base-quota cyclades.cpu 16
1285 38fd3090 Christos Stavrakakis
    snf-manage user-modify -f --all --base-quota cyclades.network.private 4
1286 38fd3090 Christos Stavrakakis
    snf-manage user-modify -f --all --base-quota cyclades.floating_ip 4
1287 38fd3090 Christos Stavrakakis
    """
1288 38fd3090 Christos Stavrakakis
    try_run(cmd)
1289 38fd3090 Christos Stavrakakis
1290 38fd3090 Christos Stavrakakis
1291 0ac84a9a Dimitris Aragiorgis
@roles("cyclades")
1292 0ac84a9a Dimitris Aragiorgis
def add_network():
1293 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Adding public network in cyclades...")
1294 0ac84a9a Dimitris Aragiorgis
    cmd = """
1295 28991d59 Ilias Tsitsimpis
    snf-manage network-create --subnet={0} --gateway={1} --public \
1296 28991d59 Ilias Tsitsimpis
        --dhcp=True --flavor={2} --mode=bridged --link={3} --name=Internet \
1297 3672c171 Christos Stavrakakis
        --floating-ip-pool=True
1298 0ac84a9a Dimitris Aragiorgis
    """.format(env.env.synnefo_public_network_subnet,
1299 0ac84a9a Dimitris Aragiorgis
               env.env.synnefo_public_network_gateway,
1300 0ac84a9a Dimitris Aragiorgis
               env.env.synnefo_public_network_type,
1301 23f46a1b Christos Stavrakakis
               env.env.common_bridge)
1302 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1303 23f46a1b Christos Stavrakakis
    if env.env.testing_vm:
1304 23f46a1b Christos Stavrakakis
        cmd = ("snf-manage network-create --subnet6=babe::/64"
1305 23f46a1b Christos Stavrakakis
               " --gateway6=babe::1 --public --flavor={0} --mode=bridged"
1306 23f46a1b Christos Stavrakakis
               " --link={1} --name=IPv6PublicNetwork"
1307 23f46a1b Christos Stavrakakis
               .format(env.env.synnefo_public_network_type,
1308 23f46a1b Christos Stavrakakis
                       env.env.common_bridge))
1309 23f46a1b Christos Stavrakakis
        try_run(cmd)
1310 0ac84a9a Dimitris Aragiorgis
1311 0ac84a9a Dimitris Aragiorgis
1312 0ac84a9a Dimitris Aragiorgis
@roles("cyclades")
1313 0ac84a9a Dimitris Aragiorgis
def setup_vncauthproxy():
1314 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Setting up vncauthproxy...")
1315 fba7aaf4 Stratos Psomadakis
    user = "synnefo"
1316 fba7aaf4 Stratos Psomadakis
    salt = "$6$7FUdSvFcWAs3hfVj$"
1317 fba7aaf4 Stratos Psomadakis
    passhash = "ZwvnvpQclTrDYWEwBvZDMRJZNgb6ZUKT1vNsh9NzUIxMpzBuGgMqYxCDTYF"\
1318 fba7aaf4 Stratos Psomadakis
               "6OZcbunDZb88pjL2EIBnzrGMQW1"
1319 0ac84a9a Dimitris Aragiorgis
    cmd = """
1320 fba7aaf4 Stratos Psomadakis
    mkdir /var/lib/vncauthproxy
1321 fba7aaf4 Stratos Psomadakis
    echo '%s:%s%s' > /var/lib/vncauthproxy/users
1322 fba7aaf4 Stratos Psomadakis
    """ % (user, salt, passhash)
1323 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1324 fba7aaf4 Stratos Psomadakis
    install_package("snf-vncauthproxy")
1325 0ac84a9a Dimitris Aragiorgis
1326 f1800130 Ilias Tsitsimpis
1327 0ac84a9a Dimitris Aragiorgis
@roles("client")
1328 0ac84a9a Dimitris Aragiorgis
def setup_kamaki():
1329 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up kamaki client...")
1330 0ac84a9a Dimitris Aragiorgis
    with settings(hide("everything")):
1331 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 accounts." + env.env.domain)
1332 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 cyclades." + env.env.domain)
1333 0ac84a9a Dimitris Aragiorgis
        try_run("ping -c1 pithos." + env.env.domain)
1334 0ac84a9a Dimitris Aragiorgis
1335 1d8cf97d Dimitris Aragiorgis
    with settings(host_string=env.env.db.ip):
1336 f1800130 Ilias Tsitsimpis
        uid, user_auth_token, user_uuid = \
1337 f1800130 Ilias Tsitsimpis
            get_auth_token_from_db(env.env.user_email)
1338 0ac84a9a Dimitris Aragiorgis
1339 0ac84a9a Dimitris Aragiorgis
    install_package("python-progress")
1340 0ac84a9a Dimitris Aragiorgis
    install_package("kamaki")
1341 0ac84a9a Dimitris Aragiorgis
    cmd = """
1342 6ce03057 Giorgos Korfiatis
    kamaki config set cloud.default.url "https://{0}/astakos/identity/v2.0"
1343 0ac84a9a Dimitris Aragiorgis
    kamaki config set cloud.default.token {1}
1344 0ac84a9a Dimitris Aragiorgis
    """.format(env.env.accounts.fqdn, user_auth_token)
1345 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1346 9f41ab1e Ilias Tsitsimpis
    try_run("kamaki container create images")
1347 0ac84a9a Dimitris Aragiorgis
1348 f1800130 Ilias Tsitsimpis
1349 0ac84a9a Dimitris Aragiorgis
@roles("client")
1350 0ac84a9a Dimitris Aragiorgis
def upload_image(image="debian_base.diskdump"):
1351 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Uploading initial image to pithos...")
1352 0ac84a9a Dimitris Aragiorgis
    image = "debian_base.diskdump"
1353 0ac84a9a Dimitris Aragiorgis
    try_run("wget {0} -O /tmp/{1}".format(env.env.debian_base_url, image))
1354 0ac84a9a Dimitris Aragiorgis
    try_run("kamaki file upload --container images /tmp/{0} {0}".format(image))
1355 0ac84a9a Dimitris Aragiorgis
1356 f1800130 Ilias Tsitsimpis
1357 0ac84a9a Dimitris Aragiorgis
@roles("client")
1358 0ac84a9a Dimitris Aragiorgis
def register_image(image="debian_base.diskdump"):
1359 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Register image to plankton...")
1360 fea067c8 Dimitris Aragiorgis
    # with settings(host_string=env.env.db.ip):
1361 f1800130 Ilias Tsitsimpis
    #     uid, user_auth_token, user_uuid = \
1362 f1800130 Ilias Tsitsimpis
    #        get_auth_token_from_db(env.env.user_email)
1363 0ac84a9a Dimitris Aragiorgis
1364 6d28ce6a Ilias Tsitsimpis
    image_location = "/images/{0}".format(image)
1365 0ac84a9a Dimitris Aragiorgis
    cmd = """
1366 0ac84a9a Dimitris Aragiorgis
    sleep 5
1367 f92dffed Christos Stavrakakis
    kamaki image register --name="Debian Base" --location={0} --public \
1368 f92dffed Christos Stavrakakis
            --disk-format=diskdump \
1369 f1800130 Ilias Tsitsimpis
            --property OSFAMILY=linux --property ROOT_PARTITION=1 \
1370 f1800130 Ilias Tsitsimpis
            --property description="Debian Squeeze Base System" \
1371 f1800130 Ilias Tsitsimpis
            --property size=450M --property kernel=2.6.32 \
1372 f1800130 Ilias Tsitsimpis
            --property GUI="No GUI" --property sortorder=1 \
1373 f1800130 Ilias Tsitsimpis
            --property USERS=root --property OS=debian
1374 83aa2ea5 Ilias Tsitsimpis
    """.format(image_location)
1375 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1376 0ac84a9a Dimitris Aragiorgis
1377 f1800130 Ilias Tsitsimpis
1378 0ac84a9a Dimitris Aragiorgis
@roles("client")
1379 0ac84a9a Dimitris Aragiorgis
def setup_burnin():
1380 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Setting up burnin testing tool...")
1381 0ac84a9a Dimitris Aragiorgis
    install_package("kamaki")
1382 0ac84a9a Dimitris Aragiorgis
    install_package("snf-tools")
1383 0ac84a9a Dimitris Aragiorgis
1384 f1800130 Ilias Tsitsimpis
1385 0ac84a9a Dimitris Aragiorgis
@roles("pithos")
1386 0ac84a9a Dimitris Aragiorgis
def add_image_locally():
1387 f1800130 Ilias Tsitsimpis
    debug(env.host,
1388 f1800130 Ilias Tsitsimpis
          " * Getting image locally in order snf-image to use it directly..")
1389 0ac84a9a Dimitris Aragiorgis
    image = "debian_base.diskdump"
1390 f1800130 Ilias Tsitsimpis
    try_run("wget {0} -O {1}/{2}".format(
1391 f1800130 Ilias Tsitsimpis
            env.env.debian_base_url, env.env.image_dir, image))
1392 0ac84a9a Dimitris Aragiorgis
1393 0ac84a9a Dimitris Aragiorgis
1394 0ac84a9a Dimitris Aragiorgis
@roles("master")
1395 0ac84a9a Dimitris Aragiorgis
def gnt_instance_add(name="test"):
1396 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Adding test instance to Ganeti...")
1397 f1800130 Ilias Tsitsimpis
    osp = """img_passwd=gamwtosecurity,\
1398 f1800130 Ilias Tsitsimpis
img_format=diskdump,img_id=debian_base,\
1399 f1800130 Ilias Tsitsimpis
img_properties='{"OSFAMILY":"linux"\,"ROOT_PARTITION":"1"}'"""
1400 0ac84a9a Dimitris Aragiorgis
    cmd = """
1401 f1800130 Ilias Tsitsimpis
    gnt-instance add  -o snf-image+default --os-parameters {0} \
1402 f1800130 Ilias Tsitsimpis
            -t plain --disk 0:size=1G --no-name-check --no-ip-check \
1403 f1800130 Ilias Tsitsimpis
            --net 0:ip=pool,network=test --no-install \
1404 f1800130 Ilias Tsitsimpis
            --hypervisor-parameters kvm:machine_version=pc-1.0 {1}
1405 0ac84a9a Dimitris Aragiorgis
    """.format(osp, name)
1406 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1407 0ac84a9a Dimitris Aragiorgis
1408 f1800130 Ilias Tsitsimpis
1409 0ac84a9a Dimitris Aragiorgis
@roles("master")
1410 f1800130 Ilias Tsitsimpis
def gnt_network_add(name="test", subnet="10.0.0.0/26", gw="10.0.0.1",
1411 f1800130 Ilias Tsitsimpis
                    mode="bridged", link="br0"):
1412 0ac84a9a Dimitris Aragiorgis
    debug(env.host, " * Adding test network to Ganeti...")
1413 0ac84a9a Dimitris Aragiorgis
    cmd = """
1414 0ac84a9a Dimitris Aragiorgis
    gnt-network add --network={1} --gateway={2} {0}
1415 0ac84a9a Dimitris Aragiorgis
    gnt-network connect {0} {3} {4}
1416 0ac84a9a Dimitris Aragiorgis
    """.format(name, subnet, gw, mode, link)
1417 0ac84a9a Dimitris Aragiorgis
    try_run(cmd)
1418 0ac84a9a Dimitris Aragiorgis
1419 f1800130 Ilias Tsitsimpis
1420 0ac84a9a Dimitris Aragiorgis
@roles("ips")
1421 0ac84a9a Dimitris Aragiorgis
def test():
1422 0ac84a9a Dimitris Aragiorgis
    debug(env.host, "Testing...")
1423 0ac84a9a Dimitris Aragiorgis
    try_run("hostname && date")