Revision 252bb277

b/snf-app/docs/index.rst
17 17
.. toctree::
18 18
   :maxdepth: 1
19 19

  
20
   compute (name TBD): Compute Service <src/compute.rst>
20
   asterias (name TBD): Compute Service <src/asterias.rst>
21 21
   pithos+: File storage service <http://docs.dev.grnet.gr/pithos>
22 22
   plankton: Image registry <src/snf-plankton.rst>
23 23
   archipelagos: Volume storage service <http://docs.dev.grnet.gr/archipelagos>
b/snf-app/docs/src/admin-guide.rst
1
.. _snf-compute-admin-guide:
1
.. _snf-asterias-admin-guide:
2 2

  
3
===================
3 4
Administrator Guide
4 5
===================
5 6

  
6
This is the snf-compute administrator guide.
7
This is the asterias administrator guide.
7 8

  
8 9
It contains instructions on how to download, install and configure
9 10
the synnefo components necessary to deploy the Compute Service. It also covers
......
16 17
--------
17 18

  
18 19
This guide covers the following:
19
Compute architecture
20
    Node types needed for a complete deployment of snf-compute,
20

  
21
Architecture
22
    Node types needed for a complete deployment of asterias,
21 23
    and their roles. Throughout this guide, `node` refers to a physical machine
22 24
    in the deployment.
23 25
Installation
24 26
    The installation of services and synnefo software components for a working
25
    deployment of snf-compute, either from source packages or the provided
27
    deployment of asterias, either from source packages or the provided
26 28
    packages for Debian Squeeze.
27 29
Configuration
28
    Configuration of the various software components comprising an snf-compute
30
    Configuration of the various software components comprising an asterias
29 31
    deployment.
30 32
Upgrades
31 33
Changelogs
......
36 38
Architecture
37 39
------------
38 40

  
39
Nodes in a synnefo deployment belong in one of the following types.
41
Nodes in an asterias deployment belong in one of the following types.
40 42
For every type, we list the services that execute on corresponding nodes.
41 43

  
42 44
.. _DB_NODE:
......
46 48

  
47 49
A node [or more than one nodes, if using an HA configuration], running a DB
48 50
engine supported by the Django ORM layer. The DB is the single source of
49
truth for the servicing of API requests by snf-compute.
51
truth for the servicing of API requests by asterias.
50 52

  
51
_Services:_ PostgreSQL / MySQL
53
*Services:* PostgreSQL / MySQL
52 54

  
53 55
.. _APISERVER_NODE:
54 56

  
55 57
APISERVER
56 58
*********
57
A node running the implementation of the OpenStack API, in Django. Any number
58
of APISERVERs can be used, in a load-balancing configuration, without any
59
A node running the ``api`` application contained in
60
:ref:`snf-asterias-app <snf-asterias-app>`. Any number of
61
:ref:`APISERVER <APISERVER_NODE>` nodes
62
can be used, in a load-balancing configuration, without any
59 63
special consideration. Access to a common DB ensures consistency.
60
_Services:_ Web server, vncauthproxy
64

  
65
*Services:* Web server, vncauthproxy
61 66

  
62 67

  
63 68
.. _QUEUE_NODE:
......
65 70
QUEUE
66 71
*****
67 72
A node running the RabbitMQ software, which provides AMQP functionality. More
68
than one QUEUE nodes may be deployed, in an HA configuration. Such
69
deployments require shared storage, provided e.g., by DRBD.
70
_Services:_ RabbitMQ [rabbitmq-server]
73
than one :ref:`QUEUE <QUEUE_NODE>` nodes may be deployed, in an HA
74
configuration. Such deployments require shared storage, provided e.g., by DRBD.
75

  
76
*Services:* RabbitMQ [rabbitmq-server]
71 77

  
72 78

  
73 79
.. _LOGIC_NODE:
......
80 86
functions run. It uses Django ORM to connect to the common DB and update the
81 87
state of the system, based on notifications received from the rest of the
82 88
infrastructure, over AMQP.
83
_Services:_ the synnefo logic dispatcher, ``snf-dispatcher``
89

  
90
*Services:* the synnefo logic dispatcher, ``snf-dispatcher``
84 91

  
85 92

  
86 93
.. _GANETI_NODES:
......
95 102
changes in the state of the VMs. The GANETI-MASTER runs the Ganeti request
96 103
queue.
97 104

  
98
_Services:_
105
*Services:*
99 106
    * only on :ref:`GANETI-MASTER <GANETI_MASTER>`:
100 107
        * the synnefo Ganeti monitoring daemon, ``snf-ganeti-eventd``
101 108
        * the synnefo Ganeti hook, ``ganeti/snf-ganeti-hook.py``.
......
108 115
WEBAPP
109 116
******
110 117
A WEBAPP node runs the web application provided by the synnefo component
111
:ref:`snf-app <snf-app>`.
118
:ref:`snf-asterias-app <snf-asterias-app>`.
112 119

  
113 120
Installation
114 121
------------
115 122

  
116
Depending on the type of the node, you need to install the following synnefo
117
components:
123
Installation of asterias is a two step process:
124

  
125
1. install the external services (prerequisites) on which asterias depends
126
2. install the synnefo software components associated with asterias
127

  
128
Prerequisites
129
*************
130
.. _ganeti-setup:
131

  
132
1. Ganeti installation
133
``````````````````````
134
Synnefo requires a working Ganeti installation at the backend. Installation
135
of Ganeti is not covered by this document, please refer to
136
`ganeti documentation <http://docs.ganeti.org/ganeti/current/html>`_ for all the 
137
gory details. A successful Ganeti installation concludes with a working 
138
:ref:`GANETI-MASTER <GANETI_NODES>` and a number of :ref:`GANETI-NODEs <GANETI_NODES>`.
139

  
140
2. Database
141
```````````
142

  
143
SQLite
144
~~~~~~
145
Most self-respecting systems have ``sqlite`` installed by default.
146

  
147
MySQL
148
~~~~~
149
MySQL must be installed first:
150

  
151
.. code-block:: console
152

  
153
    $ sudo apt-get install libmysqlclient-dev
154

  
155
if you are using MacPorts:
156

  
157
.. code-block:: console
158

  
159
    $ sudo port install mysql5
160

  
161
.. note::
162

  
163
    On MacOSX with Mysql install from MacPorts the above command will
164
    fail complaining that it cannot find the mysql_config command. Do
165
    the following and restart the installation:
166

  
167
    .. code-block:: console
168

  
169
       $ echo "mysql_config = /opt/local/bin/mysql_config5" >> ./build/MySQL-python/site.cfg
170

  
171
Configure a MySQL db/account for the Django project:
172

  
173
.. code-block:: console
174

  
175
    $ mysql -u root -p;
176

  
177
.. code-block:: mysql
178

  
179
    CREATE DATABASE <database name>;
180
    SHOW DATABASES;
181
    GRANT ALL ON <database name>.* TO <db username> IDENTIFIED BY '<db password>';
182

  
183
.. warning::
184
        MySQL *must* be set in ``READ-COMMITED`` mode, e.g. by setting:
185

  
186
   .. code-block:: ini
187
   
188
      transaction-isolation = READ-COMMITTED
189
               
190
   in the ``[mysqld]`` section of :file:`/etc/mysql/my.cnf`.
191

  
192
   Alternatively, make sure the following code fragment stays enabled
193
   in :file:`/etc/synnefo/10-database.conf` file:
194
       
195
   .. code-block:: python
196
   
197
       if DATABASES['default']['ENGINE'].endswith('mysql'):
198
           DATABASES['default']['OPTIONS'] = {
199
                   'init_command': 'SET storage_engine=INNODB; ' +
200
                       'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
201
           }
202
   
203
PostgreSQL
204
~~~~~~~~~~
205

  
206
You need to install the PostgreSQL binaries, e.g., for Debian:
207

  
208
.. code-block:: console
209
	     
210
    $ sudo apt-get install postgresql-8.4 libpq-dev
211

  
212
or ir you are using MacPorts:
213

  
214
.. code-block:: console
215

  
216
    $ sudo port install postgresql84
217

  
218
To configure a postgres db/account for synnefo,
219

  
220
*  Become the postgres user, connect to PostgreSQL:
221

  
222
.. code-block:: console
223

  
224
       $ sudo su - postgres
225
       $ psql
226
	
227
* Run the following commands:
228

  
229
.. code-block:: sql
230

  
231
	   DROP DATABASE <database name>;
232
	   DROP USER <db username>;
233
	   CREATE USER <db username> WITH PASSWORD '<db password>';
234
	   CREATE DATABASE <database name>;
235
	   GRANT ALL PRIVILEGES ON DATABASE <database name> TO <db username>;
236
	   ALTER DATABASE <database name> OWNER TO <db username>;
237
	   ALTER USER <db username> CREATEDB;
238
       
239
.. note:: 
240
   The last line enables the newly created user to create own databases. This
241
   is needed for Django to create and drop the ``test_synnefo`` database for
242
   unit testing.
243

  
244
3. RabbitMQ 
245
```````````
246

  
247
RabbitMQ is used as a generic message broker for asterias. It should be
248
installed on two seperate :ref:`QUEUE <QUEUE_NODE>` nodes in a high availability
249
configuration as described here:
250

  
251
    http://www.rabbitmq.com/pacemaker.html
252

  
253
After installation, create a user and set its permissions:
254

  
255
.. code-block:: console
256

  
257
    $ rabbitmqctl add_user <username> <password>
258
    $ rabbitmqctl set_permissions -p / <username>  "^.*" ".*" ".*"
259

  
260
The values set for the user and password must be mirrored in the
261
``RABBIT_*`` variables in your settings, as managed by
262
:ref:`snf-common <snf-common>`.
263

  
264
.. todo:: Document an active-active configuration based on the latest version
265
   of RabbitMQ.
266

  
267
4. vncauthproxy
268
```````````````
269

  
270
To support OOB console access to the VMs over VNC, the vncauthproxy
271
daemon must be running on every :ref:`APISERVER <APISERVER_NODE>` node.
272

  
273
.. note:: The Debian package for vncauthproxy undertakes all configuration
274
   automatically.
275

  
276
Download and install the latest vncauthproxy from its own repository,
277
at `https://code.grnet.gr/git/vncauthproxy`, or a specific commit:
278

  
279
.. code-block:: console
280

  
281
    $ bin/pip install -e git+https://code.grnet.gr/git/vncauthproxy@INSERT_COMMIT_HERE#egg=vncauthproxy
282

  
283
Create ``/var/log/vncauthproxy`` and set its permissions appropriately.
284

  
285
Alternatively, build and install Debian packages.
286

  
287
.. code-block:: console
288

  
289
    $ git checkout debian
290
    $ dpkg-buildpackage -b -uc -us
291
    # dpkg -i ../vncauthproxy_1.0-1_all.deb
292

  
293
.. warning::
294
    **Failure to build the package on the Mac.**
295

  
296
    ``libevent``, a requirement for gevent which in turn is a requirement for
297
    vncauthproxy is not included in `MacOSX` by default and installing it with
298
    MacPorts does not lead to a version that can be found by the gevent
299
    build process. A quick workaround is to execute the following commands::
300

  
301
        $ cd $SYNNEFO
302
        $ sudo pip install -e git+https://code.grnet.gr/git/vncauthproxy@5a196d8481e171a#egg=vncauthproxy
303
        <the above fails>
304
        $ cd build/gevent
305
        $ sudo python setup.py -I/opt/local/include -L/opt/local/lib build
306
        $ cd $SYNNEFO
307
        $ sudo pip install -e git+https://code.grnet.gr/git/vncauthproxy@5a196d8481e171a#egg=vncauthproxy
308

  
309
.. todo:: Mention vncauthproxy bug, snf-vncauthproxy, inability to install using pip
310
.. todo:: kpap: fix installation commands
311

  
312
.. _nfdhcpd-setup:
313

  
314
5. NFDHCPD
315
``````````
316

  
317
Setup Synnefo-specific networking on the Ganeti backend.
318
This part is deployment-specific and must be customized based on the
319
specific needs of the system administrators.
320

  
321
A reference installation will use a Synnefo-specific KVM ifup script,
322
NFDHCPD and pre-provisioned Linux bridges to support public and private
323
network functionality. For this:
324

  
325
Grab NFDHCPD from its own repository (https://code.grnet.gr/git/nfdhcpd),
326
install it, modify ``/etc/nfdhcpd/nfdhcpd.conf`` to reflect your network
327
configuration.
328

  
329
Install a custom KVM ifup script for use by Ganeti, as
330
``/etc/ganeti/kvm-vif-bridge``, on GANETI-NODEs. A sample implementation is
331
provided under ``/contrib/ganeti-hooks``. Set ``NFDHCPD_STATE_DIR`` to point
332
to NFDHCPD's state directory, usually ``/var/lib/nfdhcpd``.
333

  
334
.. todo:: soc: document NFDHCPD installation, settle on KVM ifup script
335

  
336
.. _rabbitmq-setup:
337

  
338
6. snf-image
339
````````````
340

  
341
Install the :ref:`snf-image <snf-image>` Ganeti OS provider for image
342
deployment.
343

  
344
For :ref:`asterias <snf-asterias>` to be able to launch VMs from specified
345
Images, you need the snf-image OS Provider installed on *all* Ganeti nodes.
346

  
347
Please see `https://code.grnet.gr/projects/snf-image/wiki`_
348
for installation instructions and documentation on the design
349
and implementation of snf-image.
350

  
351
Please see `https://code.grnet.gr/projects/snf-image/files`
352
for the latest packages.
353

  
354
Images should be stored under extdump format in a directory
355
of your choice, configurable as ``IMAGE_DIR`` in 
356
:file:`/etc/default/snf-image`.
357

  
358
synnefo components
359
******************
360

  
361
You need to install the following synnefo components on each node,
362
depending on its type. Please see the page of each synnefo software
363
component for specific installation instructions, where applicable.
118 364

  
119 365
Nodes of type :ref:`APISERVER <APISERVER_NODE>`
120 366
    Components
121 367
    :ref:`snf-common <snf-common>`,
122 368
    :ref:`snf-webproject <snf-webproject>`,
123
    :ref:`snf-app <snf-app>`
369
    :ref:`snf-asterias-app <snf-asterias-app>`
124 370
Nodes of type :ref:`GANETI-MASTER <GANETI_MASTER>` and :ref:`GANETI-NODE <GANETI_NODE>`
125 371
    Components
126 372
    :ref:`snf-common <snf-common>`,
127 373
    :ref:`snf-ganeti-tools <snf-ganeti-tools>`
128
Nodes of type :ref:`LOGIC <LOGIC>`
374
Nodes of type :ref:`LOGIC <LOGIC_NODE>`
129 375
    Components
130 376
    :ref:`snf-common <snf-common>`,
131 377
    :ref:`snf-webproject <snf-webproject>`,
132
    :ref:`snf-app <snf-app>`.
378
    :ref:`snf-asterias-app <snf-asterias-app>`.
133 379

  
134 380
.. todo:: describe prerequisites -- e.g., Debian
135 381

  
136 382
Configuration
137 383
-------------
138 384

  
139
The Compute Service uses :ref:`snf-common <snf-common>` for settings.
140

  
385
asterias uses :ref:`snf-common <snf-common>` for settings.
141 386

  
142 387
Web admin
143 388
`````````
......
158 403
on :ref:`LOGIC <LOGIC_NODE>` nodes.
159 404

  
160 405
The dispatcher retrieves messages from the queue and calls the appropriate
161
handler function as defined in the queue configuration in ``/etc/synnefo/*.conf``
406
handler function as defined in the queue configuration in :file:`/etc/synnefo/*.conf`
162 407
files.
163 408

  
164 409
The default configuration should work directly without any modifications.
......
181 426
Static files
182 427
************
183 428

  
184
* Choose an appropriate path (e.g. ``/var/lib/synnefo/static/``) from which
429
* Choose an appropriate path (e.g. :file:`/var/lib/synnefo/static/`) from which
185 430
  your web server will serve all static files (js/css) required by the synnefo
186 431
  web frontend to run.
187 432
* Change the ``MEDIA_ROOT`` value in your settings to point to that directory.
......
235 480

  
236 481
snf-burnin
237 482
**************
483

  
484

  
485

  
486
.. _installation:
487

  
488

  
489
.. _database-setup:
490

  
491

  
492

  
493
Installing depedencies
494
**********************
495

  
496
Synnefo is written in Python 2.6 requires the some additional python packages 
497
to run properly.
498

  
499
The easiest method for installation of the Django project is to setup a
500
working environment through virtualenv. Alternatively, you can use your
501
system's package manager to install the dependencies (e.g. Macports has them
502
all).
503

  
504
You can install these packages either using `pip` python package manager::
505
    
506
    $ pip install <pypi-package-name>==<version>
507

  
508
or using the requirements.pip file that exists in Synnefo package repository::
509

  
510
    $ pip install -r requirements.pip
511

  
512
or Debian's `apt-get`::
513

  
514
    $ apt-get install <debian-package-name>
515

  
516

  
517
Required packages
518
`````````````````
519

  
520
.. todo::
521
    Confirm debian package names
522

  
523
=======================     ===================         ==========
524
PyPi package name           Debian package name         version   
525
=======================     ===================         ==========
526
django                      python-django               1.2.4      
527
simplejson                  python-simplejson           2.1.3
528
pycurl                      python-pycurl               7.19.0
529
python-dateutil             python-dateutil             1.4.1
530
IPy                         python-ipy                  0.75
531
south                       python-django-south         0.7.1
532
amqplib                     python-amqplib              0.6.1
533
lockfile                    python-lockfile             0.8
534
python-daemon               python-daemon               1.5.5
535
python-prctl                python-prctl                1.3.0
536
=======================     ===================         ==========
537

  
538
.. note::
539
    On Snow Leopard and linux (64-bit), you have to set the following
540
    environment variable for pip to compile the dependencies correctly::
541

  
542
        $ export ARCHFLAGS="-arch x86_64"
543

  
544
.. note::
545
    On Ubuntu/Debian, a few more packages must be installed before installing the
546
    prerequisite Python libraries::
547

  
548
        $ sudo aptitude install libcurl3-gnutls libcurl3-gnutls-dev uuid-dev
549

  
550
.. note::
551
    Depending on the permissions of your system’s Python, you might need to be the 
552
    root user to install those packages system-wide
553

  
554

  
555
Database driver
556
```````````````
557

  
558
Depending on the database software you choose to use one of the following:
559

  
560
=========     =======================     ===================         ==========
561
Database      PyPi package name           Debian package name         version   
562
=========     =======================     ===================         ==========
563
mysql         MySQL-python                python-mysql                1.2.3
564
postgres      psycopg2                    python-psycopg2             2.4  
565
=========     =======================     ===================         ==========
566

  
567
.. note::
568
    The python sqlite driver is available by default with Python so no
569
    additional configuration is required. Also, most self-respecting systems
570
    have the sqlite library installed by default.
571

  
572

  
573
Extra depedencies
574
`````````````````
575

  
576
Synnefo provides some optional features that require specific python packages to
577
be installed.
578

  
579
**Invitations and SSH Keys generation**
580

  
581
=======================     ===================         ==========
582
PyPi package name           Debian package name         version   
583
=======================     ===================         ==========
584
pycrypto                    python-crypto               2.1.0      
585
=======================     ===================         ==========
586

  
587

  
588

  
589
Installing Synnefo package
590
--------------------------
591

  
592
Using ``pip``::
593

  
594
    $ pip install https://code.grnet.gr/projects/synnefo/synnefo-<version>.tar.gz --no-deps
595

  
596
by checking out git repository::
597

  
598
    $ git clone https://code.grnet.gr/git/synnefo synnefo-repo
599
    $ cd synnefo-repo
600
    $ python setup.py install
601

  
602
this should be enough for synnefo to get installed in your system-wide or
603
``virtualenv`` python installation and the following commands should be 
604
available from the command line::
605

  
606
    $ snf-manage
607
    $ snf-dispatcher
608
    $ snf-admin
609

  
610
Notice that Synnefo installation does not handle the creation of
611
``/etc/synnefo/`` directory which is the place where custom configuration 
612
files are loaded from. You are encouraged to create this directory and place a 
613
file named ``settings.conf`` with the following contents:
614

  
615
.. _sample-settings:
616
.. literalinclude:: ../_static/sample_settings.conf
617
    :language: python
618

  
619
`download <../_static/sample_settings.conf>`_
620

  
621
this is just to get you started on how to configure your Synnefo installation.
622
From this point you can continue your read to the `Initial configuration`_ section 
623
in this document which contains quickstart instructions for some of the initial
624
configuration required for Synnefo to get up and running.
625

  
626
For additional instructions about Synnefo settings files and what the available 
627
settings are, you can refer to the :ref:`configuration <configuration>` guide.
628

  
629

  
630
Initial configuration
631
---------------------
632

  
633
Synnefo comes with most of the required settings predefined with values that 
634
would cover many of the most common installation scenarios. However some basic
635
settings must be set be set before running Synnefo for the first time.
636

  
637
:ref:`sample settings file <sample-settings>`
638

  
639

  
640
Database
641
********
642

  
643
Change ``DATABASES`` setting based on your :ref:`database setup <database-setup>` 
644
and :ref:`initialize/update your database structure <database-initialization>`
645

  
646
.. seealso::
647
    :ref:`database-configuration` /
648
    :ref:`database-initialization`
649

  
650

  
651
Queue
652
*****
653

  
654
Change ``RABBIT_*`` settings to match your :ref:`RabbitMQ setup <rabbitmq-setup>`.
655

  
656

  
657
Backend
658
*******
659

  
660
Set ``GANETI_NODES``, ``GANETI_MASTER_IP``, ``GANETI_CLUSTER_INFO`` based on your :ref:`Ganeti
661
installation <ganeti-setup>` and change BACKEND_PREFIX_ID using an custom `prefix
662
id`.
663

  
664

  
665
Web application
666
***************
667

  
668
See the extended :ref:`deployment guide <webapp-deploy>` for instructions on how to
669
setup the Synnefo web application.
670

  
671
.. _database-setup:
672

  
673
Installing depedencies
674
**********************
675

  
676
Synnefo is written in Python 2.6 requires the some additional python packages 
677
to run properly.
678

  
679
The easiest method for installation of the Django project is to setup a
680
working environment through virtualenv. Alternatively, you can use your
681
system's package manager to install the dependencies (e.g. Macports has them
682
all).
683

  
684
You can install these packages either using `pip` python package manager::
685
    
686
    $ pip install <pypi-package-name>==<version>
687

  
688
or using the requirements.pip file that exists in Synnefo package repository::
689

  
690
    $ pip install -r requirements.pip
691

  
692
or Debian's `apt-get`::
693

  
694
    $ apt-get install <debian-package-name>
695

  
696

  
697
Required packages
698
`````````````````
699

  
700
.. todo::
701
    Confirm debian package names
702

  
703
=======================     ===================         ==========
704
PyPi package name           Debian package name         version   
705
=======================     ===================         ==========
706
django                      python-django               1.2.4      
707
simplejson                  python-simplejson           2.1.3
708
pycurl                      python-pycurl               7.19.0
709
python-dateutil             python-dateutil             1.4.1
710
IPy                         python-ipy                  0.75
711
south                       python-django-south         0.7.1
712
amqplib                     python-amqplib              0.6.1
713
lockfile                    python-lockfile             0.8
714
python-daemon               python-daemon               1.5.5
715
python-prctl                python-prctl                1.3.0
716
=======================     ===================         ==========
717

  
718
.. note::
719
    On Snow Leopard and linux (64-bit), you have to set the following
720
    environment variable for pip to compile the dependencies correctly::
721

  
722
        $ export ARCHFLAGS="-arch x86_64"
723

  
724
.. note::
725
    On Ubuntu/Debian, a few more packages must be installed before installing the
726
    prerequisite Python libraries::
727

  
728
        $ sudo aptitude install libcurl3-gnutls libcurl3-gnutls-dev uuid-dev
729

  
730
.. note::
731
    Depending on the permissions of your system’s Python, you might need to be the 
732
    root user to install those packages system-wide
733

  
734

  
735
Database driver
736
```````````````
737

  
738
Depending on the database software you choose to use one of the following:
739

  
740
=========     =======================     ===================         ==========
741
Database      PyPi package name           Debian package name         version   
742
=========     =======================     ===================         ==========
743
mysql         MySQL-python                python-mysql                1.2.3
744
postgres      psycopg2                    python-psycopg2             2.4  
745
=========     =======================     ===================         ==========
746

  
747
.. note::
748
    The python sqlite driver is available by default with Python so no
749
    additional configuration is required. Also, most self-respecting systems
750
    have the sqlite library installed by default.
751

  
752

  
753
Extra depedencies
754
`````````````````
755

  
756
Synnefo provides some optional features that require specific python packages to
757
be installed.
758

  
759
**Invitations and SSH Keys generation**
760

  
761
=======================     ===================         ==========
762
PyPi package name           Debian package name         version   
763
=======================     ===================         ==========
764
pycrypto                    python-crypto               2.1.0      
765
=======================     ===================         ==========
766

  
767

  
768

  
769
Installing Synnefo package
770
--------------------------
771

  
772
Using ``pip``::
773

  
774
    $ pip install https://code.grnet.gr/projects/synnefo/synnefo-<version>.tar.gz --no-deps
775

  
776
by checking out git repository::
777

  
778
    $ git clone https://code.grnet.gr/git/synnefo synnefo-repo
779
    $ cd synnefo-repo
780
    $ python setup.py install
781

  
782
this should be enough for synnefo to get installed in your system-wide or
783
``virtualenv`` python installation and the following commands should be 
784
available from the command line::
785

  
786
    $ snf-manage
787
    $ snf-dispatcher
788
    $ snf-admin
789

  
790
Notice that Synnefo installation does not handle the creation of
791
``/etc/synnefo/`` directory which is the place where custom configuration 
792
files are loaded from. You are encouraged to create this directory and place a 
793
file named ``settings.conf`` with the following contents:
794

  
795
.. _sample-settings:
796
.. literalinclude:: ../_static/sample_settings.conf
797
    :language: python
798

  
799
`download <../_static/sample_settings.conf>`_
800

  
801
this is just to get you started on how to configure your Synnefo installation.
802
From this point you can continue your read to the `Initial configuration`_ section 
803
in this document which contains quickstart instructions for some of the initial
804
configuration required for Synnefo to get up and running.
805

  
806
For additional instructions about Synnefo settings files and what the available 
807
settings are, you can refer to the :ref:`configuration <configuration>` guide.
808

  
809

  
810
Initial configuration
811
---------------------
812

  
813
Synnefo comes with most of the required settings predefined with values that 
814
would cover many of the most common installation scenarios. However some basic
815
settings must be set be set before running Synnefo for the first time.
816

  
817
:ref:`sample settings file <sample-settings>`
818

  
819

  
820
Database
821
********
822

  
823
Change ``DATABASES`` setting based on your :ref:`database setup <database-setup>` 
824
and :ref:`initialize/update your database structure <database-initialization>`
825

  
826
.. seealso::
827
    :ref:`database-configuration` /
828
    :ref:`database-initialization`
829

  
830

  
831
Queue
832
*****
833

  
834
Change ``RABBIT_*`` settings to match your :ref:`RabbitMQ setup <rabbitmq-setup>`.
835

  
836

  
837
Backend
838
*******
839

  
840
Set ``GANETI_NODES``, ``GANETI_MASTER_IP``, ``GANETI_CLUSTER_INFO`` based on your :ref:`Ganeti
841
installation <ganeti-setup>` and change BACKEND_PREFIX_ID using an custom `prefix
842
id`.
843

  
844

  
845
Web application
846
***************
847

  
848
See the extended :ref:`deployment guide <webapp-deploy>` for instructions on how to
849
setup the Synnefo web application.
b/snf-app/docs/src/api.rst
8 8

  
9 9
The :ref:`kamaki <http://docs.dev.grnet.gr/kamaki>` command-line client
10 10
and associated python library can be used instead of making direct calls to
11
:ref:`snf-compute <snf-compute>`.
11
:ref:`asterias <snf-asterias>`.
12 12

  
13 13
Overview
14 14
========
b/snf-app/docs/src/asterias.rst
1
.. _snf-asterias:
2

  
3
Asterias Service
4
----------------
5

  
6
Asterias is the the synnefo Compute Service and implements OpenStack Compute API v1.1.
7

  
8
.. todo:: document the Compute Service.
9

  
10
.. toctree::
11
   :maxdepth: 2
12

  
13
   admin-guide
14
   api
15
..   src/design
16
..   src/dev
17
..   src/user
18
..   src/api
19

  
20
..   src/install
21
..   src/configuration
22
..   src/deployment
23
..   src/admin
24
..   src/admin_tools
25
..   src/develop
26
..   src/api
27
..   src/plankton
28
..   src/storage
29
..   src/upgrade
30
..   src/changelog
31

  
32
Indices and tables
33
==================
34

  
35

  
36
* :ref:`genindex`
37
* :ref:`modindex`
38
* :ref:`search`
/dev/null
1
.. _snf-compute:
2

  
3
Compute Service
4
----------------
5

  
6
The Compute Service implements the OpenStack Compute API v1.1.
7

  
8
.. todo:: document the Compute Service.
9

  
10
.. toctree::
11
   :maxdepth: 2
12

  
13
   admin-guide
14
   api
15
..   src/design
16
..   src/dev
17
..   src/user
18
..   src/api
19

  
20
..   src/install
21
..   src/configuration
22
..   src/deployment
23
..   src/admin
24
..   src/admin_tools
25
..   src/develop
26
..   src/api
27
..   src/plankton
28
..   src/storage
29
..   src/upgrade
30
..   src/changelog
31

  
32
Indices and tables
33
==================
34

  
35

  
36
* :ref:`genindex`
37
* :ref:`modindex`
38
* :ref:`search`
/dev/null
1
.. _installation:
2

  
3
Installation
4
============
5

  
6
This document describes the basic steps to obtain a basic, working Synnefo
7
deployment. 
8

  
9
The Synnefo package needs to be installed on nodes of type :ref:`APISERVER_NODE`, 
10
:ref:`LOGIC_NODE` and :ref:`WEBAPP_NODE` nodes with properly configured  
11
:ref:`settings <configuration>`. 
12

  
13
This guide also covers in some detail instructions on how to set up additional
14
additional software required by Synnefo to run properly.
15

  
16

  
17
Prerequisites
18
-------------
19

  
20

  
21
.. _ganeti-setup:
22

  
23
Ganeti installation
24
*******************
25
Synnefo requires a working Ganeti installation at the backend. Installation
26
of Ganeti is not covered by this document, please refer to
27
`ganeti documentation <http://docs.ganeti.org/ganeti/current/html>`_ for all the 
28
gory details. A successful Ganeti installation concludes with a working 
29
:ref:`GANETI-MASTER <GANETI_NODES>` and a number of :ref:`GANETI-NODEs <GANETI_NODES>`.
30

  
31

  
32
vncauthproxy
33
************
34
To support OOB console access to the VMs over VNC, the vncauthproxy
35
daemon must be running on every node of type APISERVER.
36

  
37
Download and install vncauthproxy from its own repository,
38
at `https://code.grnet.gr/git/vncauthproxy` (known good commit: tag v1.0).
39

  
40
Download and install a specific repository commit::
41

  
42
    $ bin/pip install -e git+https://code.grnet.gr/git/vncauthproxy@INSERT_COMMIT_HERE#egg=vncauthproxy
43

  
44
Create ``/var/log/vncauthproxy`` and set its permissions appropriately.
45

  
46
Alternatively, you can build Debian packages. To do so,
47
checkout the "debian" branch of the vncauthproxy repository
48
(known good commit: tag debian/v1.0)::
49

  
50
    $ git checkout debian
51

  
52
Then build debian package, and install as root::
53

  
54
    $ dpkg-buildpackage -b -uc -us
55
    $ dpkg -i ../vncauthproxy_1.0-1_all.deb
56

  
57
.. warning::
58
    **Failure to build the package on the Mac.**
59

  
60
    ``libevent``, a requirement for gevent which in turn is a requirement for
61
    vncauthproxy is not included in `MacOSX` by default and installing it with
62
    MacPorts does not lead to a version that can be found by the gevent
63
    build process. A quick workaround is to execute the following commands::
64

  
65
        cd $SYNNEFO
66
        sudo pip install -e git+https://code.grnet.gr/git/vncauthproxy@5a196d8481e171a#egg=vncauthproxy
67
        <the above fails>
68
        cd build/gevent
69
        sudo python setup.py -I/opt/local/include -L/opt/local/lib build
70
        cd $SYNNEFO
71
        sudo pip install -e git+https://code.grnet.gr/git/vncauthproxy@5a196d8481e171a#egg=vncauthproxy
72

  
73

  
74
.. _nfdhcpd-setup:
75

  
76
NFDHCPD installation
77
********************
78
Setup Synnefo-specific networking on the Ganeti backend.
79
This part is deployment-specific and must be customized based on the
80
specific needs of the system administrators.
81

  
82
A reference installation will use a Synnefo-specific KVM ifup script,
83
NFDHCPD and pre-provisioned Linux bridges to support public and private
84
network functionality. For this:
85

  
86
Grab NFDHCPD from its own repository (https://code.grnet.gr/git/nfdhcpd),
87
install it, modify ``/etc/nfdhcpd/nfdhcpd.conf`` to reflect your network
88
configuration.
89

  
90
Install a custom KVM ifup script for use by Ganeti, as
91
``/etc/ganeti/kvm-vif-bridge``, on GANETI-NODEs. A sample implementation is
92
provided under ``/contrib/ganeti-hooks``. Set ``NFDHCPD_STATE_DIR`` to point
93
to NFDHCPD's state directory, usually ``/var/lib/nfdhcpd``.
94

  
95

  
96
.. _rabbitmq-setup:
97

  
98
RabbitMQ installation
99
*********************
100
RabbitMQ is used as a generic message broker for the system. It should be
101
installed on two seperate QUEUE nodes (VMs should be enough for the moment)
102
in a high availability configuration as described here:
103

  
104
    http://www.rabbitmq.com/pacemaker.html
105

  
106
After installation, create a user and set its permissions::
107

  
108
    $ rabbitmqctl add_user <username> <password>
109
    $ rabbitmqctl set_permissions -p / <username>  "^.*" ".*" ".*"
110

  
111
The values set for the user and password must be mirrored in the
112
`RABBIT_*` variables in your :ref:`settings <configuration>`.
113

  
114

  
115
snf-image installation
116
**********************
117
Installation of the `snf-image` `Ganeti OS provider` for image deployment.
118

  
119
For Synnefo to be able to launch VMs from specified Images, you need
120
the snf-image OS Provider installed on *all* Ganeti nodes.
121

  
122
Please see `https://code.grnet.gr/projects/snf-image/wiki`
123
for installation instructions and documentation on the design
124
and implementation of snf-image.
125

  
126
Please see `https://code.grnet.gr/projects/snf-image/files`
127
for the latest packages.
128

  
129
Images should be stored under extdump format in a directory
130
of your choice, configurable as ``IMAGE_DIR`` in ``/etc/default/snf-image``.
131

  
132

  
133
.. _database-setup:
134

  
135
Database installation
136
*********************
137

  
138
SQLite
139
``````
140
Most self-respecting systems have the sqlite library installed by default.
141

  
142
MySQL
143
`````
144
MySQL must be installed first::
145

  
146
    $ sudo apt-get install libmysqlclient-dev
147

  
148
if you are using MacPorts::
149

  
150
    $ sudo port install mysql5
151

  
152
.. note::
153
    On MacOSX with Mysql install from MacPorts the above command will
154
    fail complaining that it cannot find the mysql_config command. Do
155
    the following and restart the installation::
156

  
157
	    $ echo "mysql_config = /opt/local/bin/mysql_config5" >> ./build/MySQL-python/site.cfg
158

  
159
Configure a MySQL db/account for synnefo::
160

  
161
    $ mysql -u root -p;
162

  
163
    mysql> create database <database name>;
164
    mysql> show databases;
165
    mysql> GRANT ALL on <database name>.* TO <db username> IDENTIFIED BY '<db password>';
166

  
167
.. warning::
168
        MySQL *must* be set in READ-COMMITED mode, e.g. by setting::
169

  
170
            transaction-isolation = READ-COMMITTED
171
            
172
        in the [mysqld] section of /etc/mysql/my.cnf.
173

  
174
        Alternatively, make sure the following code fragment stays enabled
175
        in /etc/synnefo/10-database.conf file:
176
        
177
        .. code-block:: python
178

  
179
            if DATABASES['default']['ENGINE'].endswith('mysql'):
180
                DATABASES['default']['OPTIONS'] = {
181
                        'init_command': 'SET storage_engine=INNODB; ' +
182
                            'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
183
                }
184
          
185
PostgreSQL
186
``````````
187
You need to install the PostgreSQL binaries::
188
	     
189
    $ sudo apt-get install postgresql-8.4 libpq-dev
190

  
191
or ir you are using MacPorts::
192

  
193
    $ sudo port install postgresql84
194

  
195
To configure a postgres db/account for synnefo,
196

  
197
* Become the postgres user, connect to PostgreSQL::
198

  
199
       $ sudo su - postgres
200
       $ psql
201
	
202
* Run the following commands::
203

  
204
	   DROP DATABASE <database name>;
205
	   DROP USER <db username>;
206
	   CREATE USER <db username> WITH PASSWORD '<db password>';
207
	   CREATE DATABASE <database name>;
208
	   GRANT ALL PRIVILEGES ON DATABASE <database name> TO <db username>;
209
	   ALTER DATABASE <database name> OWNER TO <db username>;
210
	   ALTER USER <db username> CREATEDB;
211
       
212
.. note:: 
213
   The last line enables the newly created user to create own databases. This
214
   is needed for Django to create and drop the test_synnefo database for unit
215
   testing.
216

  
217

  
218

  
219
Installing depedencies
220
**********************
221

  
222
Synnefo is written in Python 2.6 requires the some additional python packages 
223
to run properly.
224

  
225
The easiest method for installation of the Django project is to setup a
226
working environment through virtualenv. Alternatively, you can use your
227
system's package manager to install the dependencies (e.g. Macports has them
228
all).
229

  
230
You can install these packages either using `pip` python package manager::
231
    
232
    $ pip install <pypi-package-name>==<version>
233

  
234
or using the requirements.pip file that exists in Synnefo package repository::
235

  
236
    $ pip install -r requirements.pip
237

  
238
or Debian's `apt-get`::
239

  
240
    $ apt-get install <debian-package-name>
241

  
242

  
243
Required packages
244
`````````````````
245

  
246
.. todo::
247
    Confirm debian package names
248

  
249
=======================     ===================         ==========
250
PyPi package name           Debian package name         version   
251
=======================     ===================         ==========
252
django                      python-django               1.2.4      
253
simplejson                  python-simplejson           2.1.3
254
pycurl                      python-pycurl               7.19.0
255
python-dateutil             python-dateutil             1.4.1
256
IPy                         python-ipy                  0.75
257
south                       python-django-south         0.7.1
258
amqplib                     python-amqplib              0.6.1
259
lockfile                    python-lockfile             0.8
260
python-daemon               python-daemon               1.5.5
261
python-prctl                python-prctl                1.3.0
262
=======================     ===================         ==========
263

  
264
.. note::
265
    On Snow Leopard and linux (64-bit), you have to set the following
266
    environment variable for pip to compile the dependencies correctly::
267

  
268
        $ export ARCHFLAGS="-arch x86_64"
269

  
270
.. note::
271
    On Ubuntu/Debian, a few more packages must be installed before installing the
272
    prerequisite Python libraries::
273

  
274
        $ sudo aptitude install libcurl3-gnutls libcurl3-gnutls-dev uuid-dev
275

  
276
.. note::
277
    Depending on the permissions of your system’s Python, you might need to be the 
278
    root user to install those packages system-wide
279

  
280

  
281
Database driver
282
```````````````
283

  
284
Depending on the database software you choose to use one of the following:
285

  
286
=========     =======================     ===================         ==========
287
Database      PyPi package name           Debian package name         version   
288
=========     =======================     ===================         ==========
289
mysql         MySQL-python                python-mysql                1.2.3
290
postgres      psycopg2                    python-psycopg2             2.4  
291
=========     =======================     ===================         ==========
292

  
293
.. note::
294
    The python sqlite driver is available by default with Python so no
295
    additional configuration is required. Also, most self-respecting systems
296
    have the sqlite library installed by default.
297

  
298

  
299
Extra depedencies
300
`````````````````
301

  
302
Synnefo provides some optional features that require specific python packages to
303
be installed.
304

  
305
**Invitations and SSH Keys generation**
306

  
307
=======================     ===================         ==========
308
PyPi package name           Debian package name         version   
309
=======================     ===================         ==========
310
pycrypto                    python-crypto               2.1.0      
311
=======================     ===================         ==========
312

  
313

  
314

  
315
Installing Synnefo package
316
--------------------------
317

  
318
Using ``pip``::
319

  
320
    $ pip install https://code.grnet.gr/projects/synnefo/synnefo-<version>.tar.gz --no-deps
321

  
322
by checking out git repository::
323

  
324
    $ git clone https://code.grnet.gr/git/synnefo synnefo-repo
325
    $ cd synnefo-repo
326
    $ python setup.py install
327

  
328
this should be enough for synnefo to get installed in your system-wide or
329
``virtualenv`` python installation and the following commands should be 
330
available from the command line::
331

  
332
    $ snf-manage
333
    $ snf-dispatcher
334
    $ snf-admin
335

  
336
Notice that Synnefo installation does not handle the creation of
337
``/etc/synnefo/`` directory which is the place where custom configuration 
338
files are loaded from. You are encouraged to create this directory and place a 
339
file named ``settings.conf`` with the following contents:
340

  
341
.. _sample-settings:
342
.. literalinclude:: ../_static/sample_settings.conf
343
    :language: python
344

  
345
`download <../_static/sample_settings.conf>`_
346

  
347
this is just to get you started on how to configure your Synnefo installation.
348
From this point you can continue your read to the `Initial configuration`_ section 
349
in this document which contains quickstart instructions for some of the initial
350
configuration required for Synnefo to get up and running.
351

  
352
For additional instructions about Synnefo settings files and what the available 
353
settings are, you can refer to the :ref:`configuration <configuration>` guide.
354

  
355

  
356
Initial configuration
357
---------------------
358

  
359
Synnefo comes with most of the required settings predefined with values that 
360
would cover many of the most common installation scenarios. However some basic
361
settings must be set be set before running Synnefo for the first time.
362

  
363
:ref:`sample settings file <sample-settings>`
364

  
365

  
366
Database
367
********
368

  
369
Change ``DATABASES`` setting based on your :ref:`database setup <database-setup>` 
370
and :ref:`initialize/update your database structure <database-initialization>`
371

  
372
.. seealso::
373
    :ref:`database-configuration` /
374
    :ref:`database-initialization`
375

  
376

  
377
Queue
378
*****
379

  
380
Change ``RABBIT_*`` settings to match your :ref:`RabbitMQ setup <rabbitmq-setup>`.
381

  
382

  
383
Backend
384
*******
385

  
386
Set ``GANETI_NODES``, ``GANETI_MASTER_IP``, ``GANETI_CLUSTER_INFO`` based on your :ref:`Ganeti
387
installation <ganeti-setup>` and change BACKEND_PREFIX_ID using an custom `prefix
388
id`.
389

  
390

  
391
Web application
392
***************
393

  
394
See the extended :ref:`deployment guide <webapp-deploy>` for instructions on how to
395
setup the Synnefo web application.
/dev/null
1
.. _snf-app:
2

  
3
Component snf-app
4
--------------------
5

  
6
synnefo component :ref:`snf-app <snf-app>` defines the main web application
7
for snf-compute.
b/snf-app/docs/src/snf-asterias-app.rst
1
.. _snf-asterias-app:
2

  
3
Component snf-asterias-app
4
==========================
5

  
6
synnefo component :ref:`snf-asterias-app <snf-asterias-app>` defines the main
7
web application for asterias, as a set of Django applications.
8

  
9
Package installation
10
--------------------
11

  
12
.. todo:: kpap: verify instructions for installation from source.
13

  
14
Use ``pip`` to install the latest version of the package from source,
15
or request a specific version as ``snf-asterias-app==x.y.z``.
16

  
17
.. code-block:: console
18

  
19
   $ pip install snf-asterias-app -f https://code.grnet.gr/projects/synnefo/files
20

  
21
On Debian Squeeze, install the ``snf-asterias-app`` Debian package.
22

  
23
Package configuration
24
---------------------
25

  
26
.. todo:: The Debian package does the following configuration steps
27
   automatically, see ``/etc/default/snf-ganeti-eventd``.
28

  
29
Event daemon
30
************
31

  
32
Make sure the event daemon starts automatically on system boot.
33
Initscript ``conf/init.d/snf-ganeti-eventd`` is provided for your convenience.
34

  
35
Hook
36
****
37
The hook needs to be enabled for phases ``post-{add,modify,reboot,start,stop}``
38
by *symlinking* in
39
``/etc/ganeti/hooks/instance-{add,modify,reboot,start,stop}-post.d`` 
40
on :ref:`GANETI-MASTER <GANETI_MASTER>`, e.g.:
41

  
42
.. code-block:: console
43

  
44
    root@ganeti-master:/etc/ganeti/hooks/instance-start-post.d# ls -l
45
    lrwxrwxrwx 1 root root 45 May   3 13:45 00-snf-ganeti-hook -> /home/devel/synnefo/snf-ganeti-hook/snf-ganeti-hook.py
46

  
47
.. todo:: fix the actual location of the link target above.
48

  
49
.. note::
50
    The link name may only contain "upper and lower case, digits,
51
    underscores and hyphens. In other words, the regexp ^[a-zA-Z0-9\_-]+$."
52

  
53
.. seealso::
54
   `Ganeti customisation using hooks <http://docs.ganeti.org/ganeti/master/html/hooks.html?highlight=hooks#naming>`_
55

  
56
Package settings
57
----------------
58

  
59
Component :ref:`snf-asterias-app <snf-asterias-app>` requires the following
60
settings, as managed by :ref:`snf-common <snf-common>`:
61

  
62
.. literalinclude:: ../../../snf-app/synnefo/app_settings/default/*.py
63

  
64
.. todo:: make sure the settings are included properly above this point.
b/snf-app/docs/src/snf-common.rst
32 32
To use synnefo settings with Django, have ``$DJANGO_SETTINGS_MODULE`` point
33 33
to the ``synnefo.settings`` module
34 34

  
35
.. code-block:: bash
35
.. code-block:: console
36 36

  
37
    export DJANGO_SETTINGS_MODULE=synnefo.settings
37
    $ export DJANGO_SETTINGS_MODULE=synnefo.settings
38 38

  
39 39
then import Django settings as usual:
40 40

  
b/snf-app/docs/src/snf-ganeti-tools.rst
40 40
.. todo:: Document the synnefo-specific progress monitor.
41 41

  
42 42
Package source
43
**************
43
--------------
44 44

  
45 45
The source for component :ref:`snf-ganeti-tools <snf-ganeti-tools>`
46 46
lives under ``snf-ganeti-tools/`` at ``git://code.grnet.gr/git/synnefo``,
......
48 48
`code.grnet.gr <https://code.grnet.gr/projects/synnefo/repository/revisions/master/show/snf-ganeti-tools>`_.
49 49

  
50 50
Package installation
51
********************
51
--------------------
52 52

  
53 53
.. todo:: kpap: verify instructions for installation from source.
54 54

  
55 55
Use ``pip`` to install the latest version of the package from source,
56 56
or request a specific version as ``snf-ganeti-tools==x.y.z``.
57 57

  
58
.. code-block:: bash
58
.. code-block:: console
59 59

  
60 60
   pip install snf-ganeti-tools -f https://code.grnet.gr/projects/synnefo/files
61 61

  
62 62
On Debian Squeeze, install the ``snf-ganeti-tools`` Debian package.
63 63

  
64 64
Package configuration
65
*********************
65
---------------------
66 66

  
67 67
.. note:: The Debian package does the following configuration steps
68 68
   automatically, see ``/etc/default/snf-ganeti-eventd``.
69 69

  
70 70
Event daemon
71
------------
71
************
72 72

  
73 73
Make sure the event daemon starts automatically on system boot.
74 74
Initscript ``conf/init.d/snf-ganeti-eventd`` is provided for your convenience.
75 75

  
76 76
Hook
77
----
77
****
78 78
The hook needs to be enabled for phases ``post-{add,modify,reboot,start,stop}``
79 79
by *symlinking* in
80 80
``/etc/ganeti/hooks/instance-{add,modify,reboot,start,stop}-post.d`` 
81 81
on :ref:`GANETI-MASTER <GANETI_MASTER>`, e.g.:
82 82

  
83
.. code-block:: bash
83
.. code-block:: console
84 84

  
85 85
    root@ganeti-master:/etc/ganeti/hooks/instance-start-post.d# ls -l
86 86
    lrwxrwxrwx 1 root root 45 May   3 13:45 00-snf-ganeti-hook -> /home/devel/synnefo/snf-ganeti-hook/snf-ganeti-hook.py
......
95 95
   `Ganeti customisation using hooks <http://docs.ganeti.org/ganeti/master/html/hooks.html?highlight=hooks#naming>`_
96 96

  
97 97
Package settings
98
****************
98
----------------
99 99

  
100 100
Component :ref:`snf-ganeti-tools <snf-ganeti-tools>` requires the following
101 101
settings, as managed by :ref:`snf-common <snf-common>`:
b/snf-app/docs/src/snf-image.rst
1
.. _snf-image:
2

  
3
=========
4
snf-image
5
=========
6

  
7
:ref:`snf-image <snf-image>` is the secure image deployment tool used
8
by the synnefo's Compute Service, :ref:`asterias <snf-asterias>`.
9

  
10
Currently, it is implemented as an OS definition inside Ganeti.
11

  
12
.. warning::
13

  
14
   this is just a placeholder in the documentation.
15
   Please see the `main snf-image site <https://code.grnet.gr/projects/snf-image>`_
16
   for more information on installing and configuring snf-image.
b/snf-app/docs/src/snf-plankton.rst
1
.. _snf-compute:
1
. _snf-plankton:
2 2

  
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff