Statistics
| Branch: | Tag: | Revision:

root / snf-deploy / snfdeploy / components.py @ 954ff0d8

History | View | Annotate | Download (32.5 kB)

1 ff5edb80 Giorgos Korfiatis
# Copyright (C) 2010, 2011, 2012, 2013, 2014 GRNET S.A. All rights reserved.
2 3c3bccab Dimitris Aragiorgis
#
3 3c3bccab Dimitris Aragiorgis
# Redistribution and use in source and binary forms, with or
4 3c3bccab Dimitris Aragiorgis
# without modification, are permitted provided that the following
5 3c3bccab Dimitris Aragiorgis
# conditions are met:
6 3c3bccab Dimitris Aragiorgis
#
7 3c3bccab Dimitris Aragiorgis
#   1. Redistributions of source code must retain the above
8 3c3bccab Dimitris Aragiorgis
#      copyright notice, this list of conditions and the following
9 3c3bccab Dimitris Aragiorgis
#      disclaimer.
10 3c3bccab Dimitris Aragiorgis
#
11 3c3bccab Dimitris Aragiorgis
#   2. Redistributions in binary form must reproduce the above
12 3c3bccab Dimitris Aragiorgis
#      copyright notice, this list of conditions and the following
13 3c3bccab Dimitris Aragiorgis
#      disclaimer in the documentation and/or other materials
14 3c3bccab Dimitris Aragiorgis
#      provided with the distribution.
15 3c3bccab Dimitris Aragiorgis
#
16 3c3bccab Dimitris Aragiorgis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 3c3bccab Dimitris Aragiorgis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 3c3bccab Dimitris Aragiorgis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 3c3bccab Dimitris Aragiorgis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A. OR
20 3c3bccab Dimitris Aragiorgis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 3c3bccab Dimitris Aragiorgis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 3c3bccab Dimitris Aragiorgis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 3c3bccab Dimitris Aragiorgis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 3c3bccab Dimitris Aragiorgis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 3c3bccab Dimitris Aragiorgis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 3c3bccab Dimitris Aragiorgis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 3c3bccab Dimitris Aragiorgis
# POSSIBILITY OF SUCH DAMAGE.
28 3c3bccab Dimitris Aragiorgis
#
29 3c3bccab Dimitris Aragiorgis
# The views and conclusions contained in the software and
30 3c3bccab Dimitris Aragiorgis
# documentation are those of the authors and should not be
31 3c3bccab Dimitris Aragiorgis
# interpreted as representing official policies, either expressed
32 3c3bccab Dimitris Aragiorgis
# or implied, of GRNET S.A.
33 3c3bccab Dimitris Aragiorgis
34 3c3bccab Dimitris Aragiorgis
import datetime
35 3c3bccab Dimitris Aragiorgis
from snfdeploy.utils import debug
36 3c3bccab Dimitris Aragiorgis
37 d4f28d8f Dimitris Aragiorgis
38 3c3bccab Dimitris Aragiorgis
class SynnefoComponent(object):
39 3c3bccab Dimitris Aragiorgis
40 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = []
41 3c3bccab Dimitris Aragiorgis
42 3c3bccab Dimitris Aragiorgis
    def debug(self, msg, info=""):
43 3c3bccab Dimitris Aragiorgis
        debug(self.__class__.__name__, msg, info)
44 3c3bccab Dimitris Aragiorgis
45 3c3bccab Dimitris Aragiorgis
    def __init__(self, node_info, env, *args, **kwargs):
46 3c3bccab Dimitris Aragiorgis
        """ Take a node_info and env as argument and initialize local vars """
47 3c3bccab Dimitris Aragiorgis
        self.node_info = node_info
48 3c3bccab Dimitris Aragiorgis
        self.env = env
49 3c3bccab Dimitris Aragiorgis
50 3c3bccab Dimitris Aragiorgis
    def check(self):
51 3c3bccab Dimitris Aragiorgis
        """ Returns a list of bash commands that check prerequisites """
52 3c3bccab Dimitris Aragiorgis
        return []
53 3c3bccab Dimitris Aragiorgis
54 3c3bccab Dimitris Aragiorgis
    def install(self):
55 3c3bccab Dimitris Aragiorgis
        """ Returns a list of debian packages to install """
56 3c3bccab Dimitris Aragiorgis
        return self.REQUIRED_PACKAGES
57 3c3bccab Dimitris Aragiorgis
58 3c3bccab Dimitris Aragiorgis
    def prepare(self):
59 3c3bccab Dimitris Aragiorgis
        """ Returs a list of bash commands that prepares the component """
60 3c3bccab Dimitris Aragiorgis
        return []
61 3c3bccab Dimitris Aragiorgis
62 3c3bccab Dimitris Aragiorgis
    def configure(self):
63 3c3bccab Dimitris Aragiorgis
        """ Must return a list of tuples (tmpl_path, replace_dict, mode) """
64 3c3bccab Dimitris Aragiorgis
        return []
65 3c3bccab Dimitris Aragiorgis
66 3c3bccab Dimitris Aragiorgis
    def initialize(self):
67 3c3bccab Dimitris Aragiorgis
        """ Returs a list of bash commands that initialize the component """
68 3c3bccab Dimitris Aragiorgis
        return []
69 3c3bccab Dimitris Aragiorgis
70 3c3bccab Dimitris Aragiorgis
    def test(self):
71 3c3bccab Dimitris Aragiorgis
        """ Returs a list of bash commands that test existing installation """
72 3c3bccab Dimitris Aragiorgis
        return []
73 3c3bccab Dimitris Aragiorgis
74 3c3bccab Dimitris Aragiorgis
    def restart(self):
75 3c3bccab Dimitris Aragiorgis
        return []
76 3c3bccab Dimitris Aragiorgis
77 3c3bccab Dimitris Aragiorgis
    #TODO: add cleanup method for each component
78 3c3bccab Dimitris Aragiorgis
    def clean(self):
79 3c3bccab Dimitris Aragiorgis
        return []
80 3c3bccab Dimitris Aragiorgis
81 3c3bccab Dimitris Aragiorgis
82 3c3bccab Dimitris Aragiorgis
class HW(SynnefoComponent):
83 3c3bccab Dimitris Aragiorgis
    def test(self):
84 3c3bccab Dimitris Aragiorgis
        return [
85 3c3bccab Dimitris Aragiorgis
            "ping -c 1 %s" % self.node_info.ip,
86 3c3bccab Dimitris Aragiorgis
            "ping -c 1 www.google.com",
87 3c3bccab Dimitris Aragiorgis
            "apt-get update",
88 3c3bccab Dimitris Aragiorgis
            ]
89 3c3bccab Dimitris Aragiorgis
90 d4f28d8f Dimitris Aragiorgis
91 3c3bccab Dimitris Aragiorgis
class SSH(SynnefoComponent):
92 3c3bccab Dimitris Aragiorgis
    def prepare(self):
93 3c3bccab Dimitris Aragiorgis
        return [
94 3c3bccab Dimitris Aragiorgis
            "mkdir -p /root/.ssh",
95 3c3bccab Dimitris Aragiorgis
            "for f in $(ls /root/.ssh/*); do cp $f $f.bak ; done",
96 3c3bccab Dimitris Aragiorgis
            "echo StrictHostKeyChecking no >> /etc/ssh/ssh_config",
97 3c3bccab Dimitris Aragiorgis
            ]
98 3c3bccab Dimitris Aragiorgis
99 3c3bccab Dimitris Aragiorgis
    def configure(self):
100 3c3bccab Dimitris Aragiorgis
        files = [
101 3c3bccab Dimitris Aragiorgis
            "authorized_keys", "id_dsa", "id_dsa.pub", "id_rsa", "id_rsa.pub"
102 3c3bccab Dimitris Aragiorgis
            ]
103 632ea467 Dimitris Aragiorgis
        ssh = [("/root/.ssh/%s" % f, {}, {"mode": 0600}) for f in files]
104 3c3bccab Dimitris Aragiorgis
        return ssh
105 3c3bccab Dimitris Aragiorgis
106 3c3bccab Dimitris Aragiorgis
    def initialize(self):
107 3c3bccab Dimitris Aragiorgis
        f = "/root/.ssh/authorized_keys"
108 3c3bccab Dimitris Aragiorgis
        return [
109 954ff0d8 Dimitris Aragiorgis
            "test -e {0}.bak && cat {0}.bak >> {0} || true".format(f)
110 3c3bccab Dimitris Aragiorgis
            ]
111 3c3bccab Dimitris Aragiorgis
112 3c3bccab Dimitris Aragiorgis
    def test(self):
113 3c3bccab Dimitris Aragiorgis
        return ["ssh %s date" % self.node_info.ip]
114 3c3bccab Dimitris Aragiorgis
115 3c3bccab Dimitris Aragiorgis
116 3c3bccab Dimitris Aragiorgis
class DNS(SynnefoComponent):
117 3c3bccab Dimitris Aragiorgis
    def prepare(self):
118 3c3bccab Dimitris Aragiorgis
        return [
119 3c3bccab Dimitris Aragiorgis
            "chattr -i /etc/resolv.conf",
120 3c3bccab Dimitris Aragiorgis
            "sed -i 's/^127.*$/127.0.0.1 localhost/g' /etc/hosts",
121 3c3bccab Dimitris Aragiorgis
            ]
122 3c3bccab Dimitris Aragiorgis
123 3c3bccab Dimitris Aragiorgis
    def configure(self):
124 3c3bccab Dimitris Aragiorgis
        r1 = {
125 3c3bccab Dimitris Aragiorgis
            "date": str(datetime.datetime.today()),
126 3c3bccab Dimitris Aragiorgis
            "domain": self.env.env.domain,
127 3c3bccab Dimitris Aragiorgis
            "ns_node_ip": self.env.env.ns.ip,
128 3c3bccab Dimitris Aragiorgis
            }
129 3c3bccab Dimitris Aragiorgis
        resolv = [
130 3c3bccab Dimitris Aragiorgis
            ("/etc/resolv.conf", r1, {})
131 3c3bccab Dimitris Aragiorgis
            ]
132 3c3bccab Dimitris Aragiorgis
        return resolv
133 3c3bccab Dimitris Aragiorgis
134 3c3bccab Dimitris Aragiorgis
    def initialize(self):
135 3c3bccab Dimitris Aragiorgis
        return ["chattr +i /etc/resolv.conf"]
136 3c3bccab Dimitris Aragiorgis
137 3c3bccab Dimitris Aragiorgis
138 3c3bccab Dimitris Aragiorgis
class DDNS(SynnefoComponent):
139 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
140 3c3bccab Dimitris Aragiorgis
        "dnsutils",
141 3c3bccab Dimitris Aragiorgis
        ]
142 3c3bccab Dimitris Aragiorgis
143 3c3bccab Dimitris Aragiorgis
    def prepare(self):
144 3c3bccab Dimitris Aragiorgis
        return [
145 3c3bccab Dimitris Aragiorgis
            "mkdir -p /root/ddns/"
146 3c3bccab Dimitris Aragiorgis
            ]
147 3c3bccab Dimitris Aragiorgis
148 3c3bccab Dimitris Aragiorgis
    def configure(self):
149 3c3bccab Dimitris Aragiorgis
        return [
150 3c3bccab Dimitris Aragiorgis
            ("/root/ddns/" + k, {}, {}) for k in self.env.env.ddns_keys
151 3c3bccab Dimitris Aragiorgis
            ]
152 3c3bccab Dimitris Aragiorgis
153 3c3bccab Dimitris Aragiorgis
154 3c3bccab Dimitris Aragiorgis
class NS(SynnefoComponent):
155 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
156 3c3bccab Dimitris Aragiorgis
        "bind9",
157 3c3bccab Dimitris Aragiorgis
        ]
158 3c3bccab Dimitris Aragiorgis
159 3c3bccab Dimitris Aragiorgis
    def nsupdate(self, cmd):
160 3c3bccab Dimitris Aragiorgis
        ret = """
161 3c3bccab Dimitris Aragiorgis
nsupdate -k {0} > /dev/null <<EOF || true
162 3c3bccab Dimitris Aragiorgis
server {1}
163 3c3bccab Dimitris Aragiorgis
{2}
164 3c3bccab Dimitris Aragiorgis
send
165 3c3bccab Dimitris Aragiorgis
EOF
166 3c3bccab Dimitris Aragiorgis
""".format(self.env.env.ddns_private_key, self.node_info.ip, cmd)
167 3c3bccab Dimitris Aragiorgis
        return ret
168 3c3bccab Dimitris Aragiorgis
169 3c3bccab Dimitris Aragiorgis
    def prepare(self):
170 3c3bccab Dimitris Aragiorgis
        return [
171 3c3bccab Dimitris Aragiorgis
            "mkdir -p /etc/bind/zones",
172 3c3bccab Dimitris Aragiorgis
            "chmod g+w /etc/bind/zones",
173 3c3bccab Dimitris Aragiorgis
            "mkdir -p /etc/bind/rev",
174 3c3bccab Dimitris Aragiorgis
            "chmod g+w /etc/bind/rev",
175 3c3bccab Dimitris Aragiorgis
            ]
176 3c3bccab Dimitris Aragiorgis
177 3c3bccab Dimitris Aragiorgis
    def configure(self):
178 3c3bccab Dimitris Aragiorgis
        d = self.env.env.domain
179 3c3bccab Dimitris Aragiorgis
        ip = self.node_info.ip
180 3c3bccab Dimitris Aragiorgis
        return [
181 3c3bccab Dimitris Aragiorgis
            ("/etc/bind/named.conf.local", {"domain": d}, {}),
182 3c3bccab Dimitris Aragiorgis
            ("/etc/bind/zones/example.com",
183 3c3bccab Dimitris Aragiorgis
             {"domain": d, "ns_node_ip": ip},
184 3c3bccab Dimitris Aragiorgis
             {"remote": "/etc/bind/zones/%s" % d}),
185 3c3bccab Dimitris Aragiorgis
            ("/etc/bind/zones/vm.example.com",
186 3c3bccab Dimitris Aragiorgis
             {"domain": d, "ns_node_ip": ip},
187 3c3bccab Dimitris Aragiorgis
             {"remote": "/etc/bind/zones/vm.%s" % d}),
188 3c3bccab Dimitris Aragiorgis
            ("/etc/bind/rev/synnefo.in-addr.arpa.zone", {"domain": d}, {}),
189 3c3bccab Dimitris Aragiorgis
            ("/etc/bind/rev/synnefo.ip6.arpa.zone", {"domain": d}, {}),
190 3c3bccab Dimitris Aragiorgis
            ("/etc/bind/named.conf.options",
191 3c3bccab Dimitris Aragiorgis
             {"node_ips": ";".join(self.env.env.ips)}, {}),
192 3c3bccab Dimitris Aragiorgis
            ("/root/ddns/ddns.key", {}, {"remote": "/etc/bind/ddns.key"}),
193 3c3bccab Dimitris Aragiorgis
            ]
194 3c3bccab Dimitris Aragiorgis
195 3c3bccab Dimitris Aragiorgis
    def update_cnamerecord(self, node_info):
196 3c3bccab Dimitris Aragiorgis
        return self.nsupdate("update add %s" % node_info.cnamerecord)
197 3c3bccab Dimitris Aragiorgis
198 3c3bccab Dimitris Aragiorgis
    def update_arecord(self, node_info):
199 3c3bccab Dimitris Aragiorgis
        return self.nsupdate("update add %s" % node_info.arecord)
200 3c3bccab Dimitris Aragiorgis
201 3c3bccab Dimitris Aragiorgis
    def update_ptrrecord(self, node_info):
202 3c3bccab Dimitris Aragiorgis
        return self.nsupdate("update add %s" % node_info.ptrrecord)
203 3c3bccab Dimitris Aragiorgis
204 3c3bccab Dimitris Aragiorgis
    def update_ns_for_node(self, node_info):
205 3c3bccab Dimitris Aragiorgis
        return [
206 3c3bccab Dimitris Aragiorgis
            self.update_arecord(node_info),
207 3c3bccab Dimitris Aragiorgis
            self.update_cnamerecord(node_info),
208 3c3bccab Dimitris Aragiorgis
            self.update_ptrrecord(node_info)
209 3c3bccab Dimitris Aragiorgis
            ]
210 3c3bccab Dimitris Aragiorgis
211 3c3bccab Dimitris Aragiorgis
    def initialize(self):
212 3c3bccab Dimitris Aragiorgis
        a = [self.update_arecord(n)
213 3c3bccab Dimitris Aragiorgis
             for n in self.env.env.nodes_info.values()]
214 3c3bccab Dimitris Aragiorgis
        ptr = [self.update_ptrrecord(n)
215 3c3bccab Dimitris Aragiorgis
               for n in self.env.env.nodes_info.values()]
216 3c3bccab Dimitris Aragiorgis
        cnames = [self.update_cnamerecord(n)
217 3c3bccab Dimitris Aragiorgis
                  for n in self.env.env.roles_info.values()]
218 3c3bccab Dimitris Aragiorgis
219 3c3bccab Dimitris Aragiorgis
        return a + ptr + cnames
220 3c3bccab Dimitris Aragiorgis
221 3c3bccab Dimitris Aragiorgis
    def restart(self):
222 3c3bccab Dimitris Aragiorgis
        return ["/etc/init.d/bind9 restart"]
223 3c3bccab Dimitris Aragiorgis
224 3c3bccab Dimitris Aragiorgis
    def test(self):
225 3c3bccab Dimitris Aragiorgis
        n = ["host %s localhost" % i.fqdn
226 3c3bccab Dimitris Aragiorgis
             for i in self.env.env.nodes_info.values()]
227 3c3bccab Dimitris Aragiorgis
        a = ["host %s localhost" % i.fqdn
228 3c3bccab Dimitris Aragiorgis
             for i in self.env.env.roles_info.values()]
229 3c3bccab Dimitris Aragiorgis
        return n + a
230 3c3bccab Dimitris Aragiorgis
231 3c3bccab Dimitris Aragiorgis
232 3c3bccab Dimitris Aragiorgis
class APT(SynnefoComponent):
233 3c3bccab Dimitris Aragiorgis
    """ Setup apt repos and check fqdns """
234 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = ["curl"]
235 3c3bccab Dimitris Aragiorgis
236 3c3bccab Dimitris Aragiorgis
    def prepare(self):
237 3c3bccab Dimitris Aragiorgis
        return [
238 3c3bccab Dimitris Aragiorgis
            "echo 'APT::Install-Suggests \"false\";' >> /etc/apt/apt.conf",
239 d4f28d8f Dimitris Aragiorgis
            "curl -k https://dev.grnet.gr/files/apt-grnetdev.pub | \
240 d4f28d8f Dimitris Aragiorgis
                apt-key add -",
241 3c3bccab Dimitris Aragiorgis
            ]
242 3c3bccab Dimitris Aragiorgis
243 3c3bccab Dimitris Aragiorgis
    def configure(self):
244 3c3bccab Dimitris Aragiorgis
        return [
245 3c3bccab Dimitris Aragiorgis
            ("/etc/apt/sources.list.d/synnefo.wheezy.list", {}, {})
246 3c3bccab Dimitris Aragiorgis
            ]
247 3c3bccab Dimitris Aragiorgis
248 3c3bccab Dimitris Aragiorgis
    def initialize(self):
249 3c3bccab Dimitris Aragiorgis
        return [
250 3c3bccab Dimitris Aragiorgis
            "apt-get update",
251 3c3bccab Dimitris Aragiorgis
            ]
252 3c3bccab Dimitris Aragiorgis
253 3c3bccab Dimitris Aragiorgis
254 3c3bccab Dimitris Aragiorgis
class MQ(SynnefoComponent):
255 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = ["rabbitmq-server"]
256 3c3bccab Dimitris Aragiorgis
257 3c3bccab Dimitris Aragiorgis
    def check(self):
258 3c3bccab Dimitris Aragiorgis
        return ["ping -c 1 mq.%s" % self.env.env.domain]
259 3c3bccab Dimitris Aragiorgis
260 3c3bccab Dimitris Aragiorgis
    def initialize(self):
261 3c3bccab Dimitris Aragiorgis
        u = self.env.env.synnefo_user
262 3c3bccab Dimitris Aragiorgis
        p = self.env.env.synnefo_rabbitmq_passwd
263 3c3bccab Dimitris Aragiorgis
        return [
264 3c3bccab Dimitris Aragiorgis
            "rabbitmqctl add_user %s %s" % (u, p),
265 3c3bccab Dimitris Aragiorgis
            "rabbitmqctl set_permissions %s \".*\" \".*\" \".*\"" % u,
266 3c3bccab Dimitris Aragiorgis
            "rabbitmqctl delete_user guest",
267 3c3bccab Dimitris Aragiorgis
            "rabbitmqctl set_user_tags %s administrator" % u,
268 3c3bccab Dimitris Aragiorgis
            ]
269 3c3bccab Dimitris Aragiorgis
270 3c3bccab Dimitris Aragiorgis
271 3c3bccab Dimitris Aragiorgis
class DB(SynnefoComponent):
272 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = ["postgresql"]
273 3c3bccab Dimitris Aragiorgis
274 3c3bccab Dimitris Aragiorgis
    def check(self):
275 3c3bccab Dimitris Aragiorgis
        return ["ping -c 1 db.%s" % self.env.env.domain]
276 3c3bccab Dimitris Aragiorgis
277 3c3bccab Dimitris Aragiorgis
    def get_user_info_from_db(self):
278 3c3bccab Dimitris Aragiorgis
        cmd = """
279 3c3bccab Dimitris Aragiorgis
cat > /tmp/psqlcmd <<EOF
280 3c3bccab Dimitris Aragiorgis
select id, auth_token, uuid, email from auth_user, im_astakosuser \
281 3c3bccab Dimitris Aragiorgis
where auth_user.id = im_astakosuser.user_ptr_id and auth_user.email = '{0}';
282 3c3bccab Dimitris Aragiorgis
EOF
283 3c3bccab Dimitris Aragiorgis

284 3c3bccab Dimitris Aragiorgis
su - postgres -c  "psql -w -d snf_apps -f /tmp/psqlcmd"
285 3c3bccab Dimitris Aragiorgis
""".format(self.env.env.user_email)
286 3c3bccab Dimitris Aragiorgis
287 3c3bccab Dimitris Aragiorgis
        return [cmd]
288 3c3bccab Dimitris Aragiorgis
289 3c3bccab Dimitris Aragiorgis
    def allow_access_in_db(self, node_info, user="all", method="md5"):
290 3c3bccab Dimitris Aragiorgis
        f = "/etc/postgresql/*/main/pg_hba.conf"
291 3c3bccab Dimitris Aragiorgis
        cmd1 = "echo host all %s %s/32 %s >> %s" % \
292 632ea467 Dimitris Aragiorgis
            (user, node_info.ip, method, f)
293 3c3bccab Dimitris Aragiorgis
        cmd2 = "sed -i 's/\(host.*127.0.0.1.*\)md5/\\1trust/' %s" % f
294 3c3bccab Dimitris Aragiorgis
        return [cmd1, cmd2] + self.restart()
295 3c3bccab Dimitris Aragiorgis
296 3c3bccab Dimitris Aragiorgis
    def configure(self):
297 3c3bccab Dimitris Aragiorgis
        u = self.env.env.synnefo_user
298 3c3bccab Dimitris Aragiorgis
        p = self.env.env.synnefo_db_passwd
299 3c3bccab Dimitris Aragiorgis
        replace = {"synnefo_user": u, "synnefo_db_passwd": p}
300 3c3bccab Dimitris Aragiorgis
        return [
301 3c3bccab Dimitris Aragiorgis
            ("/tmp/db-init.psql", replace, {}),
302 3c3bccab Dimitris Aragiorgis
            ]
303 3c3bccab Dimitris Aragiorgis
304 3c3bccab Dimitris Aragiorgis
    def make_db_fast(self):
305 3c3bccab Dimitris Aragiorgis
        f = "/etc/postgresql/*/main/postgresql.conf"
306 3c3bccab Dimitris Aragiorgis
        opts = "fsync=off\nsynchronous_commit=off\nfull_page_writes=off\n"
307 3c3bccab Dimitris Aragiorgis
        return ["""echo -e "%s" >> %s""" % (opts, f)]
308 3c3bccab Dimitris Aragiorgis
309 3c3bccab Dimitris Aragiorgis
    def prepare(self):
310 3c3bccab Dimitris Aragiorgis
        f = "/etc/postgresql/*/main/postgresql.conf"
311 3c3bccab Dimitris Aragiorgis
        return [
312 3c3bccab Dimitris Aragiorgis
            """echo "listen_addresses = '*'" >> %s""" % f,
313 3c3bccab Dimitris Aragiorgis
            ]
314 3c3bccab Dimitris Aragiorgis
315 3c3bccab Dimitris Aragiorgis
    def initialize(self):
316 3c3bccab Dimitris Aragiorgis
        script = "/tmp/db-init.psql"
317 3c3bccab Dimitris Aragiorgis
        cmd = "su - postgres -c \"psql -w -f %s\" " % script
318 3c3bccab Dimitris Aragiorgis
        return [cmd]
319 3c3bccab Dimitris Aragiorgis
320 3c3bccab Dimitris Aragiorgis
    def restart(self):
321 3c3bccab Dimitris Aragiorgis
        return ["/etc/init.d/postgresql restart"]
322 3c3bccab Dimitris Aragiorgis
323 3c3bccab Dimitris Aragiorgis
    def destroy_db(self):
324 3c3bccab Dimitris Aragiorgis
        return [
325 3c3bccab Dimitris Aragiorgis
            """su - postgres -c ' psql -w -c "drop database snf_apps" '""",
326 3c3bccab Dimitris Aragiorgis
            """su - postgres -c ' psql -w -c "drop database snf_pithos" '"""
327 3c3bccab Dimitris Aragiorgis
            ]
328 3c3bccab Dimitris Aragiorgis
329 3c3bccab Dimitris Aragiorgis
330 3c3bccab Dimitris Aragiorgis
class Ganeti(SynnefoComponent):
331 3c3bccab Dimitris Aragiorgis
332 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
333 3c3bccab Dimitris Aragiorgis
        "qemu-kvm",
334 3c3bccab Dimitris Aragiorgis
        "python-bitarray",
335 3c3bccab Dimitris Aragiorgis
        "ganeti-htools",
336 3c3bccab Dimitris Aragiorgis
        "ganeti-haskell",
337 3c3bccab Dimitris Aragiorgis
        "snf-ganeti",
338 3c3bccab Dimitris Aragiorgis
        "ganeti2",
339 3c3bccab Dimitris Aragiorgis
        "bridge-utils",
340 3c3bccab Dimitris Aragiorgis
        "lvm2",
341 3c3bccab Dimitris Aragiorgis
        "drbd8-utils",
342 3c3bccab Dimitris Aragiorgis
        ]
343 3c3bccab Dimitris Aragiorgis
344 3c3bccab Dimitris Aragiorgis
    def check(self):
345 3c3bccab Dimitris Aragiorgis
        commands = [
346 3c3bccab Dimitris Aragiorgis
            "getent hosts %s | grep -v ^127" % self.node_info.hostname,
347 3c3bccab Dimitris Aragiorgis
            "hostname -f | grep %s" % self.node_info.fqdn,
348 3c3bccab Dimitris Aragiorgis
            ]
349 3c3bccab Dimitris Aragiorgis
        return commands
350 3c3bccab Dimitris Aragiorgis
351 3c3bccab Dimitris Aragiorgis
    def configure(self):
352 3c3bccab Dimitris Aragiorgis
        return [
353 3c3bccab Dimitris Aragiorgis
            ("/etc/ganeti/file-storage-paths", {}, {}),
354 3c3bccab Dimitris Aragiorgis
            ]
355 3c3bccab Dimitris Aragiorgis
356 3c3bccab Dimitris Aragiorgis
    def prepare_lvm(self):
357 3c3bccab Dimitris Aragiorgis
        return [
358 3c3bccab Dimitris Aragiorgis
            "pvcreate %s" % self.env.env.extra_disk,
359 3c3bccab Dimitris Aragiorgis
            "vgcreate %s %s" % (self.env.env.extra_disk, self.env.env.vg)
360 3c3bccab Dimitris Aragiorgis
            ]
361 3c3bccab Dimitris Aragiorgis
362 3c3bccab Dimitris Aragiorgis
    def prepare_net_infra(self):
363 3c3bccab Dimitris Aragiorgis
        br = self.env.env.common_bridge
364 3c3bccab Dimitris Aragiorgis
        return [
365 3c3bccab Dimitris Aragiorgis
            "brctl addbr {0}; ip link set {0} up".format(br)
366 3c3bccab Dimitris Aragiorgis
            ]
367 3c3bccab Dimitris Aragiorgis
368 3c3bccab Dimitris Aragiorgis
    def prepare(self):
369 3c3bccab Dimitris Aragiorgis
        return [
370 3c3bccab Dimitris Aragiorgis
            "mkdir -p /srv/ganeti/file-storage/",
371 3c3bccab Dimitris Aragiorgis
            "sed -i 's/^127.*$/127.0.0.1 localhost/g' /etc/hosts"
372 3c3bccab Dimitris Aragiorgis
            ] + self.prepare_net_infra()
373 3c3bccab Dimitris Aragiorgis
374 3c3bccab Dimitris Aragiorgis
    def restart(self):
375 3c3bccab Dimitris Aragiorgis
        return ["/etc/init.d/ganeti restart"]
376 3c3bccab Dimitris Aragiorgis
377 3c3bccab Dimitris Aragiorgis
378 3c3bccab Dimitris Aragiorgis
class Master(SynnefoComponent):
379 3c3bccab Dimitris Aragiorgis
    def add_rapi_user(self):
380 31d179f3 Dimitris Aragiorgis
        user = self.env.env.synnefo_user
381 31d179f3 Dimitris Aragiorgis
        passwd = self.env.env.synnefo_rapi_passwd
382 31d179f3 Dimitris Aragiorgis
        x = "%s:Ganeti Remote API:%s" % (user, passwd)
383 3c3bccab Dimitris Aragiorgis
384 31d179f3 Dimitris Aragiorgis
        cmd = """
385 31d179f3 Dimitris Aragiorgis
cat >> /var/lib/ganeti/rapi/users <<EOF
386 31d179f3 Dimitris Aragiorgis
%s {HA1}$(echo -n %s | openssl md5 | sed 's/^.* //') write
387 31d179f3 Dimitris Aragiorgis
EOF
388 31d179f3 Dimitris Aragiorgis
""" % (self.env.env.synnefo_user, x)
389 3c3bccab Dimitris Aragiorgis
390 31d179f3 Dimitris Aragiorgis
        return [cmd] + self.restart()
391 3c3bccab Dimitris Aragiorgis
392 3c3bccab Dimitris Aragiorgis
    def add_node(self, node_info):
393 3c3bccab Dimitris Aragiorgis
        commands = [
394 d4f28d8f Dimitris Aragiorgis
            "gnt-node add --no-ssh-key-check --master-capable=yes " +
395 632ea467 Dimitris Aragiorgis
            "--vm-capable=yes " + node_info.fqdn,
396 3c3bccab Dimitris Aragiorgis
            ]
397 3c3bccab Dimitris Aragiorgis
        return commands
398 3c3bccab Dimitris Aragiorgis
399 3c3bccab Dimitris Aragiorgis
    def try_use_vg(self):
400 3c3bccab Dimitris Aragiorgis
        vg = self.env.env.vg
401 3c3bccab Dimitris Aragiorgis
        return [
402 3c3bccab Dimitris Aragiorgis
            "gnt-cluster modify --vg-name=%s || true" % vg,
403 3c3bccab Dimitris Aragiorgis
            "gnt-cluster modify --disk-parameters=drbd:metavg=%s" % vg,
404 3c3bccab Dimitris Aragiorgis
            "gnt-group modify --disk-parameters=drbd:metavg=%s default" % vg,
405 3c3bccab Dimitris Aragiorgis
            ]
406 3c3bccab Dimitris Aragiorgis
407 3c3bccab Dimitris Aragiorgis
    def initialize(self):
408 3c3bccab Dimitris Aragiorgis
        cmd = """
409 3c3bccab Dimitris Aragiorgis
        gnt-cluster init --enabled-hypervisors=kvm \
410 3c3bccab Dimitris Aragiorgis
            --no-lvm-storage --no-drbd-storage \
411 3c3bccab Dimitris Aragiorgis
            --nic-parameters link={0},mode=bridged \
412 3c3bccab Dimitris Aragiorgis
            --master-netdev {1} \
413 3c3bccab Dimitris Aragiorgis
            --specs-nic-count min=0,max=8 \
414 3c3bccab Dimitris Aragiorgis
            --default-iallocator hail \
415 3c3bccab Dimitris Aragiorgis
            --hypervisor-parameters kvm:kernel_path=,vnc_bind_address=0.0.0.0 \
416 3c3bccab Dimitris Aragiorgis
            --no-ssh-init --no-etc-hosts \
417 3c3bccab Dimitris Aragiorgis
            --enabled-disk-templates file,plain,ext,drbd \
418 3c3bccab Dimitris Aragiorgis
            {2}
419 3c3bccab Dimitris Aragiorgis
        """.format(self.env.env.common_bridge,
420 3c3bccab Dimitris Aragiorgis
                   self.env.env.cluster_netdev, self.env.env.cluster.fqdn)
421 3c3bccab Dimitris Aragiorgis
422 3c3bccab Dimitris Aragiorgis
        return [cmd] + self.try_use_vg() + self.add_rapi_user()
423 3c3bccab Dimitris Aragiorgis
424 3c3bccab Dimitris Aragiorgis
    def restart(self):
425 3c3bccab Dimitris Aragiorgis
        return ["/etc/init.d/ganeti restart"]
426 3c3bccab Dimitris Aragiorgis
427 3c3bccab Dimitris Aragiorgis
428 3c3bccab Dimitris Aragiorgis
class Image(SynnefoComponent):
429 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
430 3c3bccab Dimitris Aragiorgis
        "snf-pithos-backend",
431 3c3bccab Dimitris Aragiorgis
        "snf-image",
432 3c3bccab Dimitris Aragiorgis
        ]
433 3c3bccab Dimitris Aragiorgis
434 3c3bccab Dimitris Aragiorgis
    def check(self):
435 3c3bccab Dimitris Aragiorgis
        return ["mkdir -p %s" % self.env.env.image_dir]
436 3c3bccab Dimitris Aragiorgis
437 3c3bccab Dimitris Aragiorgis
    def configure(self):
438 3c3bccab Dimitris Aragiorgis
        tmpl = "/etc/default/snf-image"
439 3c3bccab Dimitris Aragiorgis
        replace = {
440 3c3bccab Dimitris Aragiorgis
            "synnefo_user": self.env.env.synnefo_user,
441 3c3bccab Dimitris Aragiorgis
            "synnefo_db_passwd": self.env.env.synnefo_db_passwd,
442 3c3bccab Dimitris Aragiorgis
            "pithos_dir": self.env.env.pithos_dir,
443 3c3bccab Dimitris Aragiorgis
            "db_node": self.env.env.db.ip,
444 3c3bccab Dimitris Aragiorgis
            "image_dir": self.env.env.image_dir,
445 3c3bccab Dimitris Aragiorgis
            }
446 3c3bccab Dimitris Aragiorgis
        return [(tmpl, replace, {})]
447 3c3bccab Dimitris Aragiorgis
448 3c3bccab Dimitris Aragiorgis
    def initialize(self):
449 3c3bccab Dimitris Aragiorgis
        return ["snf-image-update-helper -y"]
450 3c3bccab Dimitris Aragiorgis
451 3c3bccab Dimitris Aragiorgis
452 3c3bccab Dimitris Aragiorgis
class GTools(SynnefoComponent):
453 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
454 3c3bccab Dimitris Aragiorgis
        "snf-cyclades-gtools",
455 3c3bccab Dimitris Aragiorgis
        ]
456 3c3bccab Dimitris Aragiorgis
457 3c3bccab Dimitris Aragiorgis
    def check(self):
458 3c3bccab Dimitris Aragiorgis
        return ["ping -c1 %s" % self.env.env.mq.ip]
459 3c3bccab Dimitris Aragiorgis
460 f507ab25 Dimitris Aragiorgis
    def prepare(self):
461 f507ab25 Dimitris Aragiorgis
        return [
462 f507ab25 Dimitris Aragiorgis
            "sed -i 's/false/true/' /etc/default/snf-ganeti-eventd",
463 f507ab25 Dimitris Aragiorgis
            ]
464 f507ab25 Dimitris Aragiorgis
465 3c3bccab Dimitris Aragiorgis
    def configure(self):
466 3c3bccab Dimitris Aragiorgis
        tmpl = "/etc/synnefo/gtools.conf"
467 3c3bccab Dimitris Aragiorgis
        replace = {
468 3c3bccab Dimitris Aragiorgis
            "synnefo_user": self.env.env.synnefo_user,
469 3c3bccab Dimitris Aragiorgis
            "synnefo_rabbitmq_passwd": self.env.env.synnefo_rabbitmq_passwd,
470 3c3bccab Dimitris Aragiorgis
            "mq_node": self.env.env.mq.ip,
471 3c3bccab Dimitris Aragiorgis
            }
472 3c3bccab Dimitris Aragiorgis
        return [(tmpl, replace, {})]
473 3c3bccab Dimitris Aragiorgis
474 3c3bccab Dimitris Aragiorgis
    def restart(self):
475 3c3bccab Dimitris Aragiorgis
        return ["/etc/init.d/snf-ganeti-eventd restart"]
476 3c3bccab Dimitris Aragiorgis
477 3c3bccab Dimitris Aragiorgis
478 3c3bccab Dimitris Aragiorgis
class Network(SynnefoComponent):
479 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
480 3c3bccab Dimitris Aragiorgis
        "python-nfqueue",
481 3c3bccab Dimitris Aragiorgis
        "snf-network",
482 3c3bccab Dimitris Aragiorgis
        "nfdhcpd",
483 3c3bccab Dimitris Aragiorgis
        ]
484 3c3bccab Dimitris Aragiorgis
485 3c3bccab Dimitris Aragiorgis
    def configure(self):
486 3c3bccab Dimitris Aragiorgis
        r1 = {
487 3c3bccab Dimitris Aragiorgis
            "ns_node_ip": self.env.env.ns.ip
488 3c3bccab Dimitris Aragiorgis
            }
489 3c3bccab Dimitris Aragiorgis
        r2 = {
490 3c3bccab Dimitris Aragiorgis
            "common_bridge": self.env.env.common_bridge,
491 3c3bccab Dimitris Aragiorgis
            "public_iface": self.env.env.public_iface,
492 3c3bccab Dimitris Aragiorgis
            "subnet": self.env.env.synnefo_public_network_subnet,
493 3c3bccab Dimitris Aragiorgis
            "gateway": self.env.env.synnefo_public_network_gateway,
494 3c3bccab Dimitris Aragiorgis
            "router_ip": self.env.env.router.ip,
495 3c3bccab Dimitris Aragiorgis
            "node_ip": self.node_info.ip,
496 3c3bccab Dimitris Aragiorgis
            }
497 3c3bccab Dimitris Aragiorgis
        r3 = {
498 3c3bccab Dimitris Aragiorgis
            "domain": self.env.env.domain,
499 3c3bccab Dimitris Aragiorgis
            "server": self.env.env.ns.ip,
500 3c3bccab Dimitris Aragiorgis
            "keyfile": self.env.env.ddns_private_key,
501 3c3bccab Dimitris Aragiorgis
            }
502 3c3bccab Dimitris Aragiorgis
503 3c3bccab Dimitris Aragiorgis
        return [
504 3c3bccab Dimitris Aragiorgis
            ("/etc/nfdhcpd/nfdhcpd.conf", r1, {}),
505 3c3bccab Dimitris Aragiorgis
            ("/etc/rc.local", r2, {"mode": 0755}),
506 3c3bccab Dimitris Aragiorgis
            ("/etc/default/snf-network", r3, {}),
507 3c3bccab Dimitris Aragiorgis
            ]
508 3c3bccab Dimitris Aragiorgis
509 3c3bccab Dimitris Aragiorgis
    def initialize(self):
510 3c3bccab Dimitris Aragiorgis
        return ["/etc/init.d/rc.local start"]
511 3c3bccab Dimitris Aragiorgis
512 3c3bccab Dimitris Aragiorgis
    def restart(self):
513 3c3bccab Dimitris Aragiorgis
        return ["/etc/init.d/nfdhcpd restart"]
514 3c3bccab Dimitris Aragiorgis
515 3c3bccab Dimitris Aragiorgis
516 3c3bccab Dimitris Aragiorgis
class Apache(SynnefoComponent):
517 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
518 3c3bccab Dimitris Aragiorgis
        "apache2",
519 3c3bccab Dimitris Aragiorgis
        ]
520 3c3bccab Dimitris Aragiorgis
521 3c3bccab Dimitris Aragiorgis
    def prepare(self):
522 3c3bccab Dimitris Aragiorgis
        return [
523 3c3bccab Dimitris Aragiorgis
            "a2enmod ssl", "a2enmod rewrite", "a2dissite default",
524 3c3bccab Dimitris Aragiorgis
            "a2enmod headers",
525 3c3bccab Dimitris Aragiorgis
            "a2enmod proxy_http", "a2dismod autoindex",
526 3c3bccab Dimitris Aragiorgis
            ]
527 3c3bccab Dimitris Aragiorgis
528 3c3bccab Dimitris Aragiorgis
    def configure(self):
529 3c3bccab Dimitris Aragiorgis
        r1 = {"HOST": self.node_info.fqdn}
530 3c3bccab Dimitris Aragiorgis
        return [
531 3c3bccab Dimitris Aragiorgis
            ("/etc/apache2/sites-available/synnefo", r1, {}),
532 3c3bccab Dimitris Aragiorgis
            ("/etc/apache2/sites-available/synnefo-ssl", r1, {}),
533 3c3bccab Dimitris Aragiorgis
            ]
534 3c3bccab Dimitris Aragiorgis
535 3c3bccab Dimitris Aragiorgis
    def initialize(self):
536 3c3bccab Dimitris Aragiorgis
        return [
537 3c3bccab Dimitris Aragiorgis
            "a2ensite synnefo", "a2ensite synnefo-ssl",
538 3c3bccab Dimitris Aragiorgis
            ]
539 3c3bccab Dimitris Aragiorgis
540 3c3bccab Dimitris Aragiorgis
    def restart(self):
541 3c3bccab Dimitris Aragiorgis
        return [
542 632ea467 Dimitris Aragiorgis
            "/etc/init.d/apache2 restart",
543 632ea467 Dimitris Aragiorgis
            ]
544 3c3bccab Dimitris Aragiorgis
545 3c3bccab Dimitris Aragiorgis
546 3c3bccab Dimitris Aragiorgis
class Gunicorn(SynnefoComponent):
547 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
548 3c3bccab Dimitris Aragiorgis
        "gunicorn",
549 3c3bccab Dimitris Aragiorgis
        ]
550 3c3bccab Dimitris Aragiorgis
551 3c3bccab Dimitris Aragiorgis
    def prepare(self):
552 3c3bccab Dimitris Aragiorgis
        return [
553 3c3bccab Dimitris Aragiorgis
            "chown root.www-data /var/log/gunicorn",
554 3c3bccab Dimitris Aragiorgis
            ]
555 3c3bccab Dimitris Aragiorgis
556 3c3bccab Dimitris Aragiorgis
    def configure(self):
557 3c3bccab Dimitris Aragiorgis
        r1 = {"HOST": self.node_info.fqdn}
558 3c3bccab Dimitris Aragiorgis
        return [
559 3c3bccab Dimitris Aragiorgis
            ("/etc/gunicorn.d/synnefo", r1, {}),
560 3c3bccab Dimitris Aragiorgis
            ]
561 3c3bccab Dimitris Aragiorgis
562 3c3bccab Dimitris Aragiorgis
    def restart(self):
563 3c3bccab Dimitris Aragiorgis
        return [
564 632ea467 Dimitris Aragiorgis
            "/etc/init.d/gunicorn restart",
565 632ea467 Dimitris Aragiorgis
            ]
566 3c3bccab Dimitris Aragiorgis
567 3c3bccab Dimitris Aragiorgis
568 3c3bccab Dimitris Aragiorgis
class Common(SynnefoComponent):
569 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
570 3c3bccab Dimitris Aragiorgis
        # snf-common
571 3c3bccab Dimitris Aragiorgis
        "python-objpool",
572 3c3bccab Dimitris Aragiorgis
        "snf-common",
573 3c3bccab Dimitris Aragiorgis
        "python-astakosclient",
574 3c3bccab Dimitris Aragiorgis
        "snf-django-lib",
575 3c3bccab Dimitris Aragiorgis
        "snf-branding",
576 3c3bccab Dimitris Aragiorgis
        ]
577 3c3bccab Dimitris Aragiorgis
578 3c3bccab Dimitris Aragiorgis
    def configure(self):
579 3c3bccab Dimitris Aragiorgis
        r1 = {
580 3c3bccab Dimitris Aragiorgis
            "EMAIL_SUBJECT_PREFIX": self.node_info.hostname,
581 3c3bccab Dimitris Aragiorgis
            "domain": self.env.env.domain,
582 3c3bccab Dimitris Aragiorgis
            "HOST": self.node_info.fqdn,
583 3c3bccab Dimitris Aragiorgis
            "MAIL_DIR": self.env.env.mail_dir,
584 3c3bccab Dimitris Aragiorgis
            }
585 3c3bccab Dimitris Aragiorgis
        return [
586 3c3bccab Dimitris Aragiorgis
            ("/etc/synnefo/common.conf", r1, {}),
587 3c3bccab Dimitris Aragiorgis
            ]
588 3c3bccab Dimitris Aragiorgis
589 3c3bccab Dimitris Aragiorgis
    def initialize(self):
590 3c3bccab Dimitris Aragiorgis
        return ["mkdir -p {0}; chmod 777 {0}".format(self.env.env.mail_dir)]
591 3c3bccab Dimitris Aragiorgis
592 3c3bccab Dimitris Aragiorgis
    def restart(self):
593 3c3bccab Dimitris Aragiorgis
        return [
594 632ea467 Dimitris Aragiorgis
            "/etc/init.d/gunicorn restart",
595 632ea467 Dimitris Aragiorgis
            ]
596 3c3bccab Dimitris Aragiorgis
597 3c3bccab Dimitris Aragiorgis
598 3c3bccab Dimitris Aragiorgis
class WEB(SynnefoComponent):
599 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
600 3c3bccab Dimitris Aragiorgis
        "snf-webproject",
601 3c3bccab Dimitris Aragiorgis
        "python-psycopg2",
602 3c3bccab Dimitris Aragiorgis
        "python-gevent",
603 3c3bccab Dimitris Aragiorgis
        "python-django",
604 3c3bccab Dimitris Aragiorgis
        ]
605 3c3bccab Dimitris Aragiorgis
606 3c3bccab Dimitris Aragiorgis
    def check(self):
607 3c3bccab Dimitris Aragiorgis
        return ["ping -c1 %s" % self.env.env.db.fqdn]
608 3c3bccab Dimitris Aragiorgis
609 3c3bccab Dimitris Aragiorgis
    def configure(self):
610 3c3bccab Dimitris Aragiorgis
        r1 = {
611 3c3bccab Dimitris Aragiorgis
            "synnefo_user": self.env.env.synnefo_user,
612 3c3bccab Dimitris Aragiorgis
            "synnefo_db_passwd": self.env.env.synnefo_db_passwd,
613 3c3bccab Dimitris Aragiorgis
            "db_node": self.env.env.db.fqdn,
614 3c3bccab Dimitris Aragiorgis
            "domain": self.env.env.domain,
615 3c3bccab Dimitris Aragiorgis
            }
616 3c3bccab Dimitris Aragiorgis
        return [
617 3c3bccab Dimitris Aragiorgis
            ("/etc/synnefo/webproject.conf", r1, {}),
618 3c3bccab Dimitris Aragiorgis
            ]
619 3c3bccab Dimitris Aragiorgis
620 3c3bccab Dimitris Aragiorgis
    def restart(self):
621 3c3bccab Dimitris Aragiorgis
        return [
622 632ea467 Dimitris Aragiorgis
            "/etc/init.d/gunicorn restart",
623 632ea467 Dimitris Aragiorgis
            ]
624 3c3bccab Dimitris Aragiorgis
625 3c3bccab Dimitris Aragiorgis
626 3c3bccab Dimitris Aragiorgis
class Astakos(SynnefoComponent):
627 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
628 3c3bccab Dimitris Aragiorgis
        "python-django-south",
629 3c3bccab Dimitris Aragiorgis
        "snf-astakos-app",
630 3c3bccab Dimitris Aragiorgis
        "kamaki",
631 3c3bccab Dimitris Aragiorgis
        ]
632 3c3bccab Dimitris Aragiorgis
633 3c3bccab Dimitris Aragiorgis
    def export_service(self):
634 3c3bccab Dimitris Aragiorgis
        f = self.env.jsonfile
635 3c3bccab Dimitris Aragiorgis
        return [
636 3c3bccab Dimitris Aragiorgis
            "snf-manage service-export-astakos > %s" % f
637 3c3bccab Dimitris Aragiorgis
            ]
638 3c3bccab Dimitris Aragiorgis
639 3c3bccab Dimitris Aragiorgis
    def import_service(self):
640 3c3bccab Dimitris Aragiorgis
        f = self.env.jsonfile
641 3c3bccab Dimitris Aragiorgis
        return [
642 3c3bccab Dimitris Aragiorgis
            "snf-manage service-import --json=%s" % f
643 3c3bccab Dimitris Aragiorgis
            ]
644 3c3bccab Dimitris Aragiorgis
645 3c3bccab Dimitris Aragiorgis
    def set_default_quota(self):
646 ba8c50e5 Giorgos Korfiatis
        cmd = "snf-manage resource-modify"
647 ba8c50e5 Giorgos Korfiatis
        return [
648 ba8c50e5 Giorgos Korfiatis
            "%s --base-default 40G pithos.diskspace" % cmd,
649 ba8c50e5 Giorgos Korfiatis
            "%s --base-default 2 astakos.pending_app" % cmd,
650 ba8c50e5 Giorgos Korfiatis
            "%s --base-default 4 cyclades.vm" % cmd,
651 ba8c50e5 Giorgos Korfiatis
            "%s --base-default 40G cyclades.disk" % cmd,
652 ba8c50e5 Giorgos Korfiatis
            "%s --base-default 16G cyclades.total_ram" % cmd,
653 ba8c50e5 Giorgos Korfiatis
            "%s --base-default 8G cyclades.ram" % cmd,
654 ba8c50e5 Giorgos Korfiatis
            "%s --base-default 32 cyclades.total_cpu" % cmd,
655 ba8c50e5 Giorgos Korfiatis
            "%s --base-default 16 cyclades.cpu" % cmd,
656 ba8c50e5 Giorgos Korfiatis
            "%s --base-default 4 cyclades.network.private" % cmd,
657 ba8c50e5 Giorgos Korfiatis
            "%s --base-default 4 cyclades.floating_ip" % cmd,
658 ba8c50e5 Giorgos Korfiatis
            "%s --project-default 0 pithos.diskspace" % cmd,
659 ba8c50e5 Giorgos Korfiatis
            "%s --project-default 0 astakos.pending_app" % cmd,
660 ba8c50e5 Giorgos Korfiatis
            "%s --project-default 0 cyclades.vm" % cmd,
661 ba8c50e5 Giorgos Korfiatis
            "%s --project-default 0 cyclades.disk" % cmd,
662 ba8c50e5 Giorgos Korfiatis
            "%s --project-default inf cyclades.total_ram" % cmd,
663 ba8c50e5 Giorgos Korfiatis
            "%s --project-default 0 cyclades.ram" % cmd,
664 ba8c50e5 Giorgos Korfiatis
            "%s --project-default inf cyclades.total_cpu" % cmd,
665 ba8c50e5 Giorgos Korfiatis
            "%s --project-default 0 cyclades.cpu" % cmd,
666 ba8c50e5 Giorgos Korfiatis
            "%s --project-default 0 cyclades.network.private" % cmd,
667 ba8c50e5 Giorgos Korfiatis
            "%s --project-default 0 cyclades.floating_ip" % cmd,
668 3c3bccab Dimitris Aragiorgis
            ]
669 3c3bccab Dimitris Aragiorgis
670 3c3bccab Dimitris Aragiorgis
    def modify_all_quota(self):
671 5dc97d69 Giorgos Korfiatis
        cmd = "snf-manage project-modify --all-base-projects --limit"
672 5dc97d69 Giorgos Korfiatis
        return [
673 5dc97d69 Giorgos Korfiatis
            "%s pithos.diskspace 40G 40G" % cmd,
674 5dc97d69 Giorgos Korfiatis
            "%s astakos.pending_app 2 2" % cmd,
675 5dc97d69 Giorgos Korfiatis
            "%s cyclades.vm 4 4" % cmd,
676 5dc97d69 Giorgos Korfiatis
            "%s cyclades.disk 40G 40G" % cmd,
677 5dc97d69 Giorgos Korfiatis
            "%s cyclades.total_ram 16G 16G" % cmd,
678 5dc97d69 Giorgos Korfiatis
            "%s cyclades.ram 8G 8G" % cmd,
679 5dc97d69 Giorgos Korfiatis
            "%s cyclades.total_cpu 32 32" % cmd,
680 5dc97d69 Giorgos Korfiatis
            "%s cyclades.cpu 16 16" % cmd,
681 5dc97d69 Giorgos Korfiatis
            "%s cyclades.network.private 4 4" % cmd,
682 5dc97d69 Giorgos Korfiatis
            "%s cyclades.floating_ip 4 4" % cmd,
683 3c3bccab Dimitris Aragiorgis
            ]
684 3c3bccab Dimitris Aragiorgis
685 3c3bccab Dimitris Aragiorgis
    def get_services(self):
686 3c3bccab Dimitris Aragiorgis
        return [
687 3c3bccab Dimitris Aragiorgis
            "snf-manage component-list -o id,name,token"
688 3c3bccab Dimitris Aragiorgis
            ]
689 3c3bccab Dimitris Aragiorgis
690 3c3bccab Dimitris Aragiorgis
    def configure(self):
691 3c3bccab Dimitris Aragiorgis
        r1 = {
692 3c3bccab Dimitris Aragiorgis
            "ACCOUNTS": self.env.env.accounts.fqdn,
693 3c3bccab Dimitris Aragiorgis
            "domain": self.env.env.domain,
694 3c3bccab Dimitris Aragiorgis
            "CYCLADES": self.env.env.cyclades.fqdn,
695 3c3bccab Dimitris Aragiorgis
            "PITHOS": self.env.env.pithos.fqdn,
696 3c3bccab Dimitris Aragiorgis
            }
697 3c3bccab Dimitris Aragiorgis
        return [
698 3c3bccab Dimitris Aragiorgis
            ("/etc/synnefo/astakos.conf", r1, {})
699 3c3bccab Dimitris Aragiorgis
            ]
700 3c3bccab Dimitris Aragiorgis
701 3c3bccab Dimitris Aragiorgis
    def initialize(self):
702 3c3bccab Dimitris Aragiorgis
        secret = self.env.env.oa2_secret
703 3c3bccab Dimitris Aragiorgis
        view = "https://%s/pithos/ui/view" % self.env.env.pithos.fqdn
704 3c3bccab Dimitris Aragiorgis
        oa2 = "snf-manage oauth2-client-add pithos-view \
705 3c3bccab Dimitris Aragiorgis
                  --secret=%s --is-trusted --url %s" % (secret, view)
706 3c3bccab Dimitris Aragiorgis
707 3c3bccab Dimitris Aragiorgis
        return [
708 3c3bccab Dimitris Aragiorgis
            "snf-manage syncdb --noinput",
709 3c3bccab Dimitris Aragiorgis
            "snf-manage migrate im --delete-ghost-migrations",
710 3c3bccab Dimitris Aragiorgis
            "snf-manage migrate quotaholder_app",
711 3c3bccab Dimitris Aragiorgis
            "snf-manage migrate oa2",
712 3c3bccab Dimitris Aragiorgis
            "snf-manage loaddata groups",
713 3c3bccab Dimitris Aragiorgis
            oa2
714 3c3bccab Dimitris Aragiorgis
            ] + self.astakos_register_components()
715 3c3bccab Dimitris Aragiorgis
716 3c3bccab Dimitris Aragiorgis
    def astakos_register_components(self):
717 3c3bccab Dimitris Aragiorgis
        # base urls
718 3c3bccab Dimitris Aragiorgis
        cbu = "https://%s/cyclades" % self.env.env.cyclades.fqdn
719 3c3bccab Dimitris Aragiorgis
        pbu = "https://%s/pithos" % self.env.env.pithos.fqdn
720 3c3bccab Dimitris Aragiorgis
        abu = "https://%s/astakos" % self.env.env.accounts.fqdn
721 3c3bccab Dimitris Aragiorgis
        cmsurl = "https://%s/home" % self.env.env.cms.fqdn
722 3c3bccab Dimitris Aragiorgis
723 3c3bccab Dimitris Aragiorgis
        cmd = "snf-manage component-add"
724 3c3bccab Dimitris Aragiorgis
        h = "%s home --base-url %s --ui-url %s" % (cmd, cmsurl, cmsurl)
725 3c3bccab Dimitris Aragiorgis
        c = "%s cyclades --base-url %s --ui-url %s/ui" % (cmd, cbu, cbu)
726 3c3bccab Dimitris Aragiorgis
        p = "%s pithos --base-url %s --ui-url %s/ui" % (cmd, pbu, pbu)
727 3c3bccab Dimitris Aragiorgis
        a = "%s astakos --base-url %s --ui-url %s/ui" % (cmd, abu, abu)
728 3c3bccab Dimitris Aragiorgis
729 3c3bccab Dimitris Aragiorgis
        return [h, c, p, a]
730 3c3bccab Dimitris Aragiorgis
731 3c3bccab Dimitris Aragiorgis
    def add_user(self):
732 3c3bccab Dimitris Aragiorgis
        info = (
733 3c3bccab Dimitris Aragiorgis
            self.env.env.user_passwd,
734 3c3bccab Dimitris Aragiorgis
            self.env.env.user_email,
735 3c3bccab Dimitris Aragiorgis
            self.env.env.user_name,
736 3c3bccab Dimitris Aragiorgis
            self.env.env.user_lastname,
737 3c3bccab Dimitris Aragiorgis
            )
738 3c3bccab Dimitris Aragiorgis
        cmd = "snf-manage user-add --password %s %s %s %s" % info
739 3c3bccab Dimitris Aragiorgis
        return [cmd]
740 3c3bccab Dimitris Aragiorgis
741 3c3bccab Dimitris Aragiorgis
    def activate_user(self):
742 3c3bccab Dimitris Aragiorgis
        user_id = self.env.user_id
743 3c3bccab Dimitris Aragiorgis
        return [
744 3c3bccab Dimitris Aragiorgis
            "snf-manage user-modify --verify %s" % user_id,
745 3c3bccab Dimitris Aragiorgis
            "snf-manage user-modify --accept %s" % user_id,
746 3c3bccab Dimitris Aragiorgis
            ]
747 3c3bccab Dimitris Aragiorgis
748 3c3bccab Dimitris Aragiorgis
749 3c3bccab Dimitris Aragiorgis
class CMS(SynnefoComponent):
750 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
751 3c3bccab Dimitris Aragiorgis
        "snf-cloudcms"
752 3c3bccab Dimitris Aragiorgis
        ]
753 3c3bccab Dimitris Aragiorgis
754 3c3bccab Dimitris Aragiorgis
    def configure(self):
755 3c3bccab Dimitris Aragiorgis
        r1 = {
756 3c3bccab Dimitris Aragiorgis
            "ACCOUNTS": self.env.env.accounts.fqdn
757 3c3bccab Dimitris Aragiorgis
            }
758 3c3bccab Dimitris Aragiorgis
        r2 = {
759 3c3bccab Dimitris Aragiorgis
            "DOMAIN": self.env.env.domain
760 3c3bccab Dimitris Aragiorgis
            }
761 3c3bccab Dimitris Aragiorgis
        return [
762 3c3bccab Dimitris Aragiorgis
            ("/etc/synnefo/cms.conf", r1, {}),
763 3c3bccab Dimitris Aragiorgis
            ("/tmp/sites.json", r2, {}),
764 3c3bccab Dimitris Aragiorgis
            ("/tmp/page.json", {}, {}),
765 3c3bccab Dimitris Aragiorgis
            ]
766 3c3bccab Dimitris Aragiorgis
767 3c3bccab Dimitris Aragiorgis
    def initialize(self):
768 3c3bccab Dimitris Aragiorgis
        return [
769 3c3bccab Dimitris Aragiorgis
            "snf-manage syncdb",
770 3c3bccab Dimitris Aragiorgis
            "snf-manage migrate --delete-ghost-migrations",
771 3c3bccab Dimitris Aragiorgis
            "snf-manage loaddata /tmp/sites.json",
772 3c3bccab Dimitris Aragiorgis
            "snf-manage loaddata /tmp/page.json",
773 3c3bccab Dimitris Aragiorgis
            "snf-manage createsuperuser --username=admin \
774 3c3bccab Dimitris Aragiorgis
                  --email=admin@%s --noinput" % self.env.env.domain,
775 3c3bccab Dimitris Aragiorgis
            ]
776 3c3bccab Dimitris Aragiorgis
777 3c3bccab Dimitris Aragiorgis
    def restart(self):
778 3c3bccab Dimitris Aragiorgis
        return ["/etc/init.d/gunicorn restart"]
779 3c3bccab Dimitris Aragiorgis
780 3c3bccab Dimitris Aragiorgis
781 3c3bccab Dimitris Aragiorgis
class Mount(SynnefoComponent):
782 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
783 3c3bccab Dimitris Aragiorgis
        "nfs-common"
784 3c3bccab Dimitris Aragiorgis
        ]
785 3c3bccab Dimitris Aragiorgis
786 3c3bccab Dimitris Aragiorgis
    def prepare(self):
787 3c3bccab Dimitris Aragiorgis
        ret = []
788 3c3bccab Dimitris Aragiorgis
        for d in [self.env.env.pithos_dir, self.env.env.image_dir]:
789 3c3bccab Dimitris Aragiorgis
            ret.append("mkdir -p %s" % d)
790 3c3bccab Dimitris Aragiorgis
            cmd = """
791 3c3bccab Dimitris Aragiorgis
cat >> /etc/fstab <<EOF
792 3c3bccab Dimitris Aragiorgis
{0}:{1} {1}  nfs defaults,rw,noatime,rsize=131072,wsize=131072 0 0
793 3c3bccab Dimitris Aragiorgis
EOF
794 3c3bccab Dimitris Aragiorgis
""".format(self.env.env.pithos.ip, d)
795 3c3bccab Dimitris Aragiorgis
            ret.append(cmd)
796 3c3bccab Dimitris Aragiorgis
797 3c3bccab Dimitris Aragiorgis
        return ret
798 3c3bccab Dimitris Aragiorgis
799 3c3bccab Dimitris Aragiorgis
    def initialize(self):
800 3c3bccab Dimitris Aragiorgis
        ret = []
801 3c3bccab Dimitris Aragiorgis
        for d in [self.env.env.pithos_dir, self.env.env.image_dir]:
802 3c3bccab Dimitris Aragiorgis
            ret.append("mount %s" % d)
803 3c3bccab Dimitris Aragiorgis
        return ret
804 3c3bccab Dimitris Aragiorgis
805 3c3bccab Dimitris Aragiorgis
806 3c3bccab Dimitris Aragiorgis
class NFS(SynnefoComponent):
807 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
808 3c3bccab Dimitris Aragiorgis
        "nfs-kernel-server"
809 3c3bccab Dimitris Aragiorgis
        ]
810 3c3bccab Dimitris Aragiorgis
811 3c3bccab Dimitris Aragiorgis
    def prepare_image(self):
812 3c3bccab Dimitris Aragiorgis
        url = self.env.env.debian_base_url
813 3c3bccab Dimitris Aragiorgis
        d = self.env.env.image_dir
814 3c3bccab Dimitris Aragiorgis
        image = "debian_base.diskdump"
815 3c3bccab Dimitris Aragiorgis
        return ["wget %s -O %s/%s" % (url, d, image)]
816 3c3bccab Dimitris Aragiorgis
817 3c3bccab Dimitris Aragiorgis
    def prepare(self):
818 3c3bccab Dimitris Aragiorgis
        p = self.env.env.pithos_dir
819 3c3bccab Dimitris Aragiorgis
        return [
820 3c3bccab Dimitris Aragiorgis
            "mkdir -p %s" % self.env.env.image_dir,
821 3c3bccab Dimitris Aragiorgis
            "mkdir -p %s/data" % p,
822 3c3bccab Dimitris Aragiorgis
            "chown www-data.www-data %s/data" % p,
823 3c3bccab Dimitris Aragiorgis
            "chmod g+ws %s/data" % p,
824 3c3bccab Dimitris Aragiorgis
            ] + self.prepare_image()
825 3c3bccab Dimitris Aragiorgis
826 3c3bccab Dimitris Aragiorgis
    def update_exports(self, node_info):
827 3c3bccab Dimitris Aragiorgis
        cmd = """
828 3c3bccab Dimitris Aragiorgis
cat >> /etc/exports <<EOF
829 3c3bccab Dimitris Aragiorgis
{0} {2}(rw,async,no_subtree_check,no_root_squash)
830 3c3bccab Dimitris Aragiorgis
{1} {2}(rw,async,no_subtree_check,no_root_squash)
831 3c3bccab Dimitris Aragiorgis
EOF
832 3c3bccab Dimitris Aragiorgis
""".format(self.env.env.pithos_dir, self.env.env.image_dir, node_info.ip)
833 3c3bccab Dimitris Aragiorgis
        return [cmd] + self.restart()
834 3c3bccab Dimitris Aragiorgis
835 3c3bccab Dimitris Aragiorgis
    def restart(self):
836 3c3bccab Dimitris Aragiorgis
        return ["exportfs -a"]
837 3c3bccab Dimitris Aragiorgis
838 3c3bccab Dimitris Aragiorgis
839 3c3bccab Dimitris Aragiorgis
class Pithos(SynnefoComponent):
840 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
841 3c3bccab Dimitris Aragiorgis
        "kamaki",
842 3c3bccab Dimitris Aragiorgis
        "snf-pithos-backend",
843 3c3bccab Dimitris Aragiorgis
        "snf-pithos-app",
844 3c3bccab Dimitris Aragiorgis
        "snf-pithos-webclient",
845 3c3bccab Dimitris Aragiorgis
        ]
846 3c3bccab Dimitris Aragiorgis
847 3c3bccab Dimitris Aragiorgis
    def export_service(self):
848 3c3bccab Dimitris Aragiorgis
        f = self.env.jsonfile
849 3c3bccab Dimitris Aragiorgis
        return [
850 3c3bccab Dimitris Aragiorgis
            "snf-manage service-export-pithos > %s" % f
851 3c3bccab Dimitris Aragiorgis
            ]
852 3c3bccab Dimitris Aragiorgis
853 3c3bccab Dimitris Aragiorgis
    def configure(self):
854 3c3bccab Dimitris Aragiorgis
        r1 = {
855 3c3bccab Dimitris Aragiorgis
            "ACCOUNTS": self.env.env.accounts.fqdn,
856 3c3bccab Dimitris Aragiorgis
            "PITHOS": self.env.env.pithos.fqdn,
857 3c3bccab Dimitris Aragiorgis
            "db_node": self.env.env.db.ip,
858 3c3bccab Dimitris Aragiorgis
            "synnefo_user": self.env.env.synnefo_user,
859 3c3bccab Dimitris Aragiorgis
            "synnefo_db_passwd": self.env.env.synnefo_db_passwd,
860 3c3bccab Dimitris Aragiorgis
            "pithos_dir": self.env.env.pithos_dir,
861 3c3bccab Dimitris Aragiorgis
            "PITHOS_SERVICE_TOKEN": self.env.service_token,
862 3c3bccab Dimitris Aragiorgis
            "oa2_secret": self.env.env.oa2_secret,
863 3c3bccab Dimitris Aragiorgis
            }
864 3c3bccab Dimitris Aragiorgis
        r2 = {
865 3c3bccab Dimitris Aragiorgis
            "ACCOUNTS": self.env.env.accounts.fqdn,
866 3c3bccab Dimitris Aragiorgis
            "PITHOS_UI_CLOUDBAR_ACTIVE_SERVICE": self.env.service_id,
867 3c3bccab Dimitris Aragiorgis
            }
868 3c3bccab Dimitris Aragiorgis
869 3c3bccab Dimitris Aragiorgis
        return [
870 3c3bccab Dimitris Aragiorgis
            ("/etc/synnefo/pithos.conf", r1, {}),
871 3c3bccab Dimitris Aragiorgis
            ("/etc/synnefo/webclient.conf", r2, {}),
872 3c3bccab Dimitris Aragiorgis
            ]
873 3c3bccab Dimitris Aragiorgis
874 38cfb0c3 Sofia Papagiannaki
    def initialize(self):
875 38cfb0c3 Sofia Papagiannaki
        return ["pithos-migrate stamp head"]
876 38cfb0c3 Sofia Papagiannaki
877 d4f28d8f Dimitris Aragiorgis
878 3c3bccab Dimitris Aragiorgis
class Cyclades(SynnefoComponent):
879 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
880 3c3bccab Dimitris Aragiorgis
        "memcached",
881 3c3bccab Dimitris Aragiorgis
        "python-memcache",
882 3c3bccab Dimitris Aragiorgis
        "snf-pithos-backend",
883 3c3bccab Dimitris Aragiorgis
        "kamaki",
884 3c3bccab Dimitris Aragiorgis
        "snf-cyclades-app",
885 3c3bccab Dimitris Aragiorgis
        "python-django-south",
886 3c3bccab Dimitris Aragiorgis
        ]
887 3c3bccab Dimitris Aragiorgis
888 d4f28d8f Dimitris Aragiorgis
    def add_network(self):
889 d4f28d8f Dimitris Aragiorgis
        subnet = self.env.env.synnefo_public_network_subnet
890 d4f28d8f Dimitris Aragiorgis
        gw = self.env.env.synnefo_public_network_gateway
891 d4f28d8f Dimitris Aragiorgis
        ntype = self.env.env.synnefo_public_network_type
892 d4f28d8f Dimitris Aragiorgis
        link = self.env.env.common_bridge
893 3c3bccab Dimitris Aragiorgis
894 3c3bccab Dimitris Aragiorgis
        cmd = """
895 3c3bccab Dimitris Aragiorgis
snf-manage network-create --subnet={0} --gateway={1} --public \
896 3c3bccab Dimitris Aragiorgis
  --dhcp=True --flavor={2} --mode=bridged --link={3} --name=Internet \
897 3c3bccab Dimitris Aragiorgis
  --floating-ip-pool=True
898 3c3bccab Dimitris Aragiorgis
""".format(subnet, gw, ntype, link)
899 3c3bccab Dimitris Aragiorgis
900 3c3bccab Dimitris Aragiorgis
        return [cmd]
901 3c3bccab Dimitris Aragiorgis
902 d4f28d8f Dimitris Aragiorgis
    def add_network6(self):
903 d4f28d8f Dimitris Aragiorgis
        subnet = "babe::/64"
904 d4f28d8f Dimitris Aragiorgis
        gw = "babe::1"
905 d4f28d8f Dimitris Aragiorgis
        ntype = self.env.env.synnefo_public_network_type
906 d4f28d8f Dimitris Aragiorgis
        link = self.env.env.common_bridge
907 3c3bccab Dimitris Aragiorgis
908 d4f28d8f Dimitris Aragiorgis
        cmd = """
909 d4f28d8f Dimitris Aragiorgis
snf-manage network-create --subnet6={0} \
910 d4f28d8f Dimitris Aragiorgis
      --gateway6={1} --public --dhcp=True --flavor={2} --mode=bridged \
911 d4f28d8f Dimitris Aragiorgis
       --link={3} --name=IPv6PublicNetwork
912 d4f28d8f Dimitris Aragiorgis
""".format(subnet, gw, ntype, link)
913 3c3bccab Dimitris Aragiorgis
914 3c3bccab Dimitris Aragiorgis
        return [cmd]
915 3c3bccab Dimitris Aragiorgis
916 3c3bccab Dimitris Aragiorgis
    def export_service(self):
917 3c3bccab Dimitris Aragiorgis
        f = self.env.jsonfile
918 3c3bccab Dimitris Aragiorgis
        return [
919 3c3bccab Dimitris Aragiorgis
            "snf-manage service-export-cyclades > %s" % f
920 3c3bccab Dimitris Aragiorgis
            ]
921 3c3bccab Dimitris Aragiorgis
922 3c3bccab Dimitris Aragiorgis
    def list_backends(self):
923 3c3bccab Dimitris Aragiorgis
        return [
924 3c3bccab Dimitris Aragiorgis
            "snf-manage backend-list"
925 3c3bccab Dimitris Aragiorgis
            ]
926 3c3bccab Dimitris Aragiorgis
927 3c3bccab Dimitris Aragiorgis
    def add_backend(self):
928 3c3bccab Dimitris Aragiorgis
        cluster = self.env.env.cluster
929 3c3bccab Dimitris Aragiorgis
        user = self.env.env.synnefo_user
930 3c3bccab Dimitris Aragiorgis
        passwd = self.env.env.synnefo_rapi_passwd
931 3c3bccab Dimitris Aragiorgis
        return [
932 d4f28d8f Dimitris Aragiorgis
            "snf-manage backend-add --clustername=%s --user=%s --pass=%s" %
933 632ea467 Dimitris Aragiorgis
            (cluster.fqdn, user, passwd)
934 3c3bccab Dimitris Aragiorgis
            ]
935 3c3bccab Dimitris Aragiorgis
936 3c3bccab Dimitris Aragiorgis
    def undrain_backend(self):
937 3c3bccab Dimitris Aragiorgis
        backend_id = self.env.backend_id
938 3c3bccab Dimitris Aragiorgis
        return [
939 3c3bccab Dimitris Aragiorgis
            "snf-manage backend-modify --drained=False %s" % str(backend_id)
940 3c3bccab Dimitris Aragiorgis
            ]
941 3c3bccab Dimitris Aragiorgis
942 3c3bccab Dimitris Aragiorgis
    def prepare(self):
943 3c3bccab Dimitris Aragiorgis
        return ["sed -i 's/false/true/' /etc/default/snf-dispatcher"]
944 3c3bccab Dimitris Aragiorgis
945 3c3bccab Dimitris Aragiorgis
    def configure(self):
946 3c3bccab Dimitris Aragiorgis
        r1 = {
947 3c3bccab Dimitris Aragiorgis
            "ACCOUNTS": self.env.env.accounts.fqdn,
948 3c3bccab Dimitris Aragiorgis
            "CYCLADES": self.env.env.cyclades.fqdn,
949 3c3bccab Dimitris Aragiorgis
            "mq_node": self.env.env.mq.ip,
950 3c3bccab Dimitris Aragiorgis
            "db_node": self.env.env.db.ip,
951 3c3bccab Dimitris Aragiorgis
            "synnefo_user": self.env.env.synnefo_user,
952 3c3bccab Dimitris Aragiorgis
            "synnefo_db_passwd": self.env.env.synnefo_db_passwd,
953 3c3bccab Dimitris Aragiorgis
            "synnefo_rabbitmq_passwd": self.env.env.synnefo_rabbitmq_passwd,
954 3c3bccab Dimitris Aragiorgis
            "pithos_dir": self.env.env.pithos_dir,
955 3c3bccab Dimitris Aragiorgis
            "common_bridge": self.env.env.common_bridge,
956 3c3bccab Dimitris Aragiorgis
            "HOST": self.env.env.cyclades.ip,
957 3c3bccab Dimitris Aragiorgis
            "domain": self.env.env.domain,
958 3c3bccab Dimitris Aragiorgis
            "CYCLADES_SERVICE_TOKEN": self.env.service_token,
959 e23023e8 Dimitris Aragiorgis
            "STATS": self.env.env.stats.fqdn,
960 e23023e8 Dimitris Aragiorgis
            "SYNNEFO_VNC_PASSWD": self.env.env.synnefo_vnc_passwd,
961 de1dcc91 Dimitris Aragiorgis
            "CYCLADES_NODE_IP": self.env.env.cyclades.ip
962 3c3bccab Dimitris Aragiorgis
            }
963 3c3bccab Dimitris Aragiorgis
        return [
964 3c3bccab Dimitris Aragiorgis
            ("/etc/synnefo/cyclades.conf", r1, {})
965 3c3bccab Dimitris Aragiorgis
            ]
966 3c3bccab Dimitris Aragiorgis
967 3c3bccab Dimitris Aragiorgis
    def initialize(self):
968 3c3bccab Dimitris Aragiorgis
        cpu = self.env.env.flavor_cpu
969 3c3bccab Dimitris Aragiorgis
        ram = self.env.env.flavor_ram
970 3c3bccab Dimitris Aragiorgis
        disk = self.env.env.flavor_disk
971 3c3bccab Dimitris Aragiorgis
        storage = self.env.env.flavor_storage
972 3c3bccab Dimitris Aragiorgis
        return [
973 3c3bccab Dimitris Aragiorgis
            "snf-manage syncdb",
974 3c3bccab Dimitris Aragiorgis
            "snf-manage migrate --delete-ghost-migrations",
975 d4f28d8f Dimitris Aragiorgis
            "snf-manage pool-create --type=mac-prefix \
976 d4f28d8f Dimitris Aragiorgis
              --base=aa:00:0 --size=65536",
977 3c3bccab Dimitris Aragiorgis
            "snf-manage pool-create --type=bridge --base=prv --size=20",
978 3c3bccab Dimitris Aragiorgis
            "snf-manage flavor-create %s %s %s %s" % (cpu, ram, disk, storage),
979 3c3bccab Dimitris Aragiorgis
            ]
980 3c3bccab Dimitris Aragiorgis
981 3c3bccab Dimitris Aragiorgis
    def restart(self):
982 3c3bccab Dimitris Aragiorgis
        return [
983 3c3bccab Dimitris Aragiorgis
            "/etc/init.d/gunicorn restart",
984 3c3bccab Dimitris Aragiorgis
            "/etc/init.d/snf-dispatcher restart",
985 3c3bccab Dimitris Aragiorgis
            ]
986 3c3bccab Dimitris Aragiorgis
987 d4f28d8f Dimitris Aragiorgis
988 3c3bccab Dimitris Aragiorgis
class VNC(SynnefoComponent):
989 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
990 3c3bccab Dimitris Aragiorgis
        "snf-vncauthproxy"
991 3c3bccab Dimitris Aragiorgis
        ]
992 3c3bccab Dimitris Aragiorgis
993 e23023e8 Dimitris Aragiorgis
    def prepare(self):
994 368bac96 Dimitris Aragiorgis
        return ["mkdir -p /var/lib/vncauthproxy"]
995 e23023e8 Dimitris Aragiorgis
996 e23023e8 Dimitris Aragiorgis
    def configure(self):
997 e23023e8 Dimitris Aragiorgis
        return [
998 e23023e8 Dimitris Aragiorgis
            ("/var/lib/vncauthproxy/users", {}, {})
999 e23023e8 Dimitris Aragiorgis
            ]
1000 e23023e8 Dimitris Aragiorgis
1001 e23023e8 Dimitris Aragiorgis
    def initialize(self):
1002 e23023e8 Dimitris Aragiorgis
        user = self.env.env.synnefo_user
1003 e23023e8 Dimitris Aragiorgis
        passwd = self.env.env.synnefo_vnc_passwd
1004 e23023e8 Dimitris Aragiorgis
        #TODO: run vncauthproxy-passwd
1005 e23023e8 Dimitris Aragiorgis
        return []
1006 e23023e8 Dimitris Aragiorgis
1007 3c3bccab Dimitris Aragiorgis
    def restart(self):
1008 3c3bccab Dimitris Aragiorgis
        return [
1009 3c3bccab Dimitris Aragiorgis
            "/etc/init.d/vncauthproxy restart"
1010 3c3bccab Dimitris Aragiorgis
            ]
1011 3c3bccab Dimitris Aragiorgis
1012 3c3bccab Dimitris Aragiorgis
1013 3c3bccab Dimitris Aragiorgis
class Kamaki(SynnefoComponent):
1014 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
1015 3c3bccab Dimitris Aragiorgis
        "python-progress",
1016 3c3bccab Dimitris Aragiorgis
        "kamaki",
1017 3c3bccab Dimitris Aragiorgis
        ]
1018 3c3bccab Dimitris Aragiorgis
1019 3c3bccab Dimitris Aragiorgis
    def initialize(self):
1020 3c3bccab Dimitris Aragiorgis
        url = "https://%s/astakos/identity/v2.0" % self.env.env.accounts.fqdn
1021 632ea467 Dimitris Aragiorgis
        token = self.env.user_auth_token
1022 3c3bccab Dimitris Aragiorgis
        return [
1023 d4f28d8f Dimitris Aragiorgis
            "kamaki config set cloud.default.url %s" % url,
1024 632ea467 Dimitris Aragiorgis
            "kamaki config set cloud.default.token %s" % token,
1025 3c3bccab Dimitris Aragiorgis
            "kamaki container create images",
1026 3c3bccab Dimitris Aragiorgis
            ]
1027 3c3bccab Dimitris Aragiorgis
1028 3c3bccab Dimitris Aragiorgis
    def fetch_image(self):
1029 3c3bccab Dimitris Aragiorgis
        url = self.env.env.debian_base_url
1030 3c3bccab Dimitris Aragiorgis
        image = "debian_base.diskdump"
1031 3c3bccab Dimitris Aragiorgis
        return [
1032 3c3bccab Dimitris Aragiorgis
            "wget %s -O /tmp/%s" % (url, image)
1033 3c3bccab Dimitris Aragiorgis
            ]
1034 3c3bccab Dimitris Aragiorgis
1035 3c3bccab Dimitris Aragiorgis
    def upload_image(self):
1036 3c3bccab Dimitris Aragiorgis
        image = "debian_base.diskdump"
1037 3c3bccab Dimitris Aragiorgis
        return [
1038 3c3bccab Dimitris Aragiorgis
            "kamaki file upload --container images /tmp/%s %s" % (image, image)
1039 3c3bccab Dimitris Aragiorgis
            ]
1040 3c3bccab Dimitris Aragiorgis
1041 3c3bccab Dimitris Aragiorgis
    def register_image(self):
1042 3c3bccab Dimitris Aragiorgis
        image = "debian_base.diskdump"
1043 3c3bccab Dimitris Aragiorgis
        image_location = "/images/%s" % image
1044 3c3bccab Dimitris Aragiorgis
        cmd = """
1045 3c3bccab Dimitris Aragiorgis
        kamaki image register --name "Debian Base" --location {0} \
1046 3c3bccab Dimitris Aragiorgis
              --public --disk-format=diskdump \
1047 3c3bccab Dimitris Aragiorgis
              --property OSFAMILY=linux --property ROOT_PARTITION=1 \
1048 3c3bccab Dimitris Aragiorgis
              --property description="Debian Squeeze Base System" \
1049 3c3bccab Dimitris Aragiorgis
              --property size=450M --property kernel=2.6.32 \
1050 3c3bccab Dimitris Aragiorgis
              --property GUI="No GUI" --property sortorder=1 \
1051 3c3bccab Dimitris Aragiorgis
              --property USERS=root --property OS=debian
1052 3c3bccab Dimitris Aragiorgis
        """.format(image_location)
1053 3c3bccab Dimitris Aragiorgis
        return [
1054 3c3bccab Dimitris Aragiorgis
            "sleep 5",
1055 3c3bccab Dimitris Aragiorgis
            cmd
1056 3c3bccab Dimitris Aragiorgis
            ]
1057 3c3bccab Dimitris Aragiorgis
1058 d4f28d8f Dimitris Aragiorgis
1059 3c3bccab Dimitris Aragiorgis
class Burnin(SynnefoComponent):
1060 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
1061 3c3bccab Dimitris Aragiorgis
        "kamaki",
1062 3c3bccab Dimitris Aragiorgis
        "snf-tools",
1063 3c3bccab Dimitris Aragiorgis
        ]
1064 3c3bccab Dimitris Aragiorgis
1065 d4f28d8f Dimitris Aragiorgis
1066 3c3bccab Dimitris Aragiorgis
class Collectd(SynnefoComponent):
1067 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
1068 3c3bccab Dimitris Aragiorgis
        "collectd",
1069 3c3bccab Dimitris Aragiorgis
        ]
1070 3c3bccab Dimitris Aragiorgis
1071 3c3bccab Dimitris Aragiorgis
    def configure(self):
1072 3c3bccab Dimitris Aragiorgis
        return [
1073 3c3bccab Dimitris Aragiorgis
            ("/etc/collectd/collectd.conf", {}, {}),
1074 3c3bccab Dimitris Aragiorgis
            ]
1075 3c3bccab Dimitris Aragiorgis
1076 3c3bccab Dimitris Aragiorgis
    def restart(self):
1077 3c3bccab Dimitris Aragiorgis
        return [
1078 3c3bccab Dimitris Aragiorgis
            "/etc/init.d/collectd restart",
1079 3c3bccab Dimitris Aragiorgis
            ]
1080 3c3bccab Dimitris Aragiorgis
1081 3c3bccab Dimitris Aragiorgis
1082 3c3bccab Dimitris Aragiorgis
class Stats(SynnefoComponent):
1083 3c3bccab Dimitris Aragiorgis
    REQUIRED_PACKAGES = [
1084 3c3bccab Dimitris Aragiorgis
        "snf-stats-app",
1085 3c3bccab Dimitris Aragiorgis
        ]
1086 3c3bccab Dimitris Aragiorgis
1087 3c3bccab Dimitris Aragiorgis
    def prepare(self):
1088 3c3bccab Dimitris Aragiorgis
        return [
1089 3c3bccab Dimitris Aragiorgis
            "mkdir -p /var/cache/snf-stats-app/",
1090 3c3bccab Dimitris Aragiorgis
            "chown www-data:www-data /var/cache/snf-stats-app/",
1091 3c3bccab Dimitris Aragiorgis
            ]
1092 3c3bccab Dimitris Aragiorgis
1093 3c3bccab Dimitris Aragiorgis
    def configure(self):
1094 3c3bccab Dimitris Aragiorgis
        r1 = {
1095 3c3bccab Dimitris Aragiorgis
            "STATS": self.env.env.stats.fqdn,
1096 3c3bccab Dimitris Aragiorgis
            }
1097 3c3bccab Dimitris Aragiorgis
        return [
1098 3c3bccab Dimitris Aragiorgis
            ("/etc/synnefo/stats.conf", r1, {}),
1099 3c3bccab Dimitris Aragiorgis
            ("/etc/collectd/synnefo-stats.conf", r1, {}),
1100 3c3bccab Dimitris Aragiorgis
            ]
1101 3c3bccab Dimitris Aragiorgis
1102 3c3bccab Dimitris Aragiorgis
    def restart(self):
1103 3c3bccab Dimitris Aragiorgis
        return [
1104 3c3bccab Dimitris Aragiorgis
            "/etc/init.d/gunicorn restart",
1105 3c3bccab Dimitris Aragiorgis
            "/etc/init.d/apache2 restart",
1106 3c3bccab Dimitris Aragiorgis
            ]
1107 3c3bccab Dimitris Aragiorgis
1108 d4f28d8f Dimitris Aragiorgis
1109 3c3bccab Dimitris Aragiorgis
class GanetiCollectd(SynnefoComponent):
1110 3c3bccab Dimitris Aragiorgis
    def configure(self):
1111 3c3bccab Dimitris Aragiorgis
        r1 = {
1112 3c3bccab Dimitris Aragiorgis
            "STATS": self.env.env.stats.fqdn,
1113 3c3bccab Dimitris Aragiorgis
            }
1114 3c3bccab Dimitris Aragiorgis
        return [
1115 3c3bccab Dimitris Aragiorgis
            ("/etc/collectd/passwd", {}, {}),
1116 3c3bccab Dimitris Aragiorgis
            ("/etc/collectd/synnefo-ganeti.conf", r1, {}),
1117 3c3bccab Dimitris Aragiorgis
            ]