Revision 7260959d

/dev/null
1
#!/bin/bash
2

  
3
if [ $# -ne 3 ]; then
4
  echo "$0 localbranch remotedebian remoteupstream"
5
  exit 1
6
fi
7

  
8

  
9
LOCALBRANCH=$1
10
REMOTEDEBIAN=$2
11
REMOTEUPSTREAM=$3
12
BUILDAREA=~/build-area
13
PKGAREA=~/packages
14
BACKUPAREA=~/backup
15

  
16
PACKAGES="
17
  snf-astakos-app
18
  snf-common
19
  snf-webproject
20
  snf-cyclades-app
21
  snf-cyclades-gtools
22
  snf-tools
23
  snf-pithos-app
24
  snf-pithos-backend
25
  snf-pithos-tools"
26

  
27

  
28
set -e
29

  
30
test -d $BUILDAREA
31
test -d $PKGAREA
32
test -d $BACKUPAREA
33

  
34

  
35

  
36
#TODO: check for up-to-date branches
37
git checkout $LOCALBRANCH
38
git checkout $REMOTEUPSTREAM
39
git checkout $REMOTEDEBIAN
40

  
41
TMPDEBIAN=$(mktemp -u debian.XXX)
42

  
43

  
44
# create tmp debian branch to do everything
45
git checkout --track $REMOTEDEBIAN -b $TMPDEBIAN
46

  
47
mrgextra=-m
48
mrgmsg="Merge branch '$REMOTEUPSTREAM' into $REMOTEDEBIAN"
49
dchextra=-R
50

  
51
# whether we are in snapshot or release mode
52
snap=false
53

  
54
tcdialog --defaultno --yesno "Create Snapshot?" 5 20 && snap=true && dchextra=-S && mrgextra= && mrgmsg=
55

  
56

  
57
# merge local branch to tmp branch with correct msg so that it can be pushes as is to upstream debian
58
git merge --no-edit $mrgextra ${mrgextra:+"$mrgmsg"} $LOCALBRANCH
59

  
60

  
61
# auto edit changlog depending on Snapshot or Release mode
62
export EDITOR=/usr/bin/vim
63
git-dch --debian-branch=$TMPDEBIAN --git-author --ignore-regex=".*" --multimaint-merge --since=HEAD $dchextra
64
git add debian/changelog
65

  
66

  
67
# get version from the changelog
68
# we tag here in order sdist to work as expexted.
69
version=$(IFS="()" ; read  x v x < debian/changelog  ; echo $v)
70
if ! $snap; then
71
  git commit -s -a -m "Bump new upstream version"
72
  TAGFILE=$(mktemp -t tag.XXX)
73
  tcdialog --inputbox "New Debian Tag: " 5 30 "debian/$version" 2>$TAGFILE
74
  git tag $(<$TAGFILE)
75
fi
76

  
77
rm -rf $BUILDAREA/*
78

  
79
for p in $PACKAGES; do
80

  
81
  cd  $p
82
  python setup.py sdist
83
  grep "__version_vcs" -r . -l -I | xargs git add -f
84
  cd -
85

  
86
done
87

  
88

  
89
git-buildpackage --git-export-dir=$BUILDAREA \
90
                 --git-upstream-branch=$REMOTEUPSTREAM \
91
                 --git-debian-branch=$TMPDEBIAN \
92
                 --git-export=INDEX \
93
                 --git-ignore-new -sa
94

  
95
# do some dirty backup
96
# pkgarea might be needed by auto-deploy tool
97
rm -f $PKGAREA/* || true
98
cp -v $BUILDAREA/*deb $PKGAREA/ || true
99

  
100
cp -v $BUILDAREA/* $BACKUPAREA/ || true
101

  
102

  
103
git reset --hard HEAD
104
if $snap ; then
105
  git checkout $LOCALBRANCH
106
  git branch -D $TMPDEBIAN
107
else
108
  # here we can push as is the commits in remote debian branch
109
  echo "########### All OK #####################"
110
  echo "git push origin $REMOTEDEBIAN"
111
  echo "git checkout $LOCALBRANCH"
112
  echo
113
  echo "############ Revert ######################"
114
  echo "git tag -d " $(<$TAGFILE)
115
  rm $TAGFILE
116
fi
117

  
118

  
/dev/null
1
#!/usr/bin/env python2.6
2
# -*- coding: utf-8 -*-
3
from os import path
4
import shutil, sys, virtualenv, subprocess
5

  
6
PROJECT_ROOT = path.abspath(path.dirname(__file__))
7
REQUIREMENTS = path.join(PROJECT_ROOT, 'requirements.pip')
8

  
9
VE_ROOT = path.join(PROJECT_ROOT, '.ve')
10
VE_TIMESTAMP = path.join(VE_ROOT, 'timestamp')
11

  
12
envtime = path.exists(VE_ROOT) and path.getmtime(VE_ROOT) or 0
13
envreqs = path.exists(VE_TIMESTAMP) and path.getmtime(VE_TIMESTAMP) or 0
14
envspec = path.getmtime(REQUIREMENTS)
15

  
16
def go_to_ve():
17
    # going into ve
18
    if not sys.prefix == VE_ROOT:
19
        if sys.platform == 'win32':
20
            python = path.join(VE_ROOT, 'Scripts', 'python.exe')
21
        else:
22
            python = path.join(VE_ROOT, 'bin', 'python')
23
            
24
        retcode = subprocess.call([python, __file__] + sys.argv[1:])
25
        sys.exit(retcode)
26

  
27
update_ve = 'update_ve' in sys.argv
28
if update_ve or envtime < envspec or envreqs < envspec:
29
    if update_ve:
30
        # install ve
31
        if envtime < envspec:
32
            if path.exists(VE_ROOT):
33
                shutil.rmtree(VE_ROOT)
34
            virtualenv.logger = virtualenv.Logger(consumers=[])
35
            virtualenv.create_environment(VE_ROOT, site_packages=True)
36

  
37
        go_to_ve()    
38

  
39
        # check requirements
40
        if update_ve or envreqs < envspec:
41
            import pip
42
            pip.main(initial_args=['install', '-r', REQUIREMENTS])
43
            file(VE_TIMESTAMP, 'w').close()
44
        sys.exit(0)
45
    else:
46
        print "VirtualEnv need to be updated"
47
        print "Run ./manage.py update_ve"
48
        sys.exit(1)
49

  
50
go_to_ve()
51

  
52
# run django
53
from django.core.management import execute_manager
54
try:
55
    import settings # Assumed to be in the same directory.
56
    import os
57
    path = os.path.normpath(os.path.join(os.getcwd(), '..'))
58
    sys.path.append(path)
59
except ImportError:
60
    import sys
61
    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory")
62
    sys.exit(1)
63

  
64
if __name__ == "__main__":
65
    execute_manager(settings)
/dev/null
1
Django==1.2.4
2
simplejson==2.1.3
3
pycurl==7.19.0
4
python-dateutil==1.4.1
5
django-hudson
6
MySQL-python==1.2.3
7
psycopg2==2.4
8
south==0.7.1
9
amqplib==0.6.1
10
lockfile==0.8
11
python-daemon==1.5.5
12
pycrypto==2.1.0
13
IPy==0.75
14
-e git+https://code.grnet.gr/git/vncauthproxy@v1.0#egg=vncauthproxy
/dev/null
1

  
2
DATABASES = {
3
	    'default': {
4
		'ENGINE': 'django.db.backends.mysql',
5
		'NAME': 'synnefo',
6
		'USER': 'synnefo',
7
		'PASSWORD': 'synnefo',
8
		'HOST': 'localhost',
9
		'PORT': '3128',
10
		'OPTIONS': {
11
		    'init_command': 'SET storage_engine=INNODB',
12
		}
13
	    }
14
	}
15

  
16
BACKEND_PREFIX_ID = "jenkins-"
17
INSTALLED_APPS += ('django_hudson',)
18

  
19
#One year
20
AUTH_TOKEN_DURATION = 24 * 365
/dev/null
1

  
2
DATABASES = {
3
	    'default': {
4
		'ENGINE': 'django.db.backends.postgresql_psycopg2',
5
		'NAME': 'synnefo',
6
		'USER': 'synnefo',
7
		'PASSWORD': 'synnefo',
8
		'HOST': '127.0.0.1'
9
	    }
10
}
11

  
12
BACKEND_PREFIX_ID = "jenkins-"
13
INSTALLED_APPS += ('django_hudson',)
14

  
15
#One year
16
AUTH_TOKEN_DURATION = 24 * 365
/dev/null
1

  
2
DATABASES = {
3
	    'default': {
4
		'ENGINE': 'django.db.backends.sqlite3',
5
		'NAME': PROJECT_PATH + 'synnefo.db' #WARN: This must be an absolute path
6
    }
7
}
8

  
9
BACKEND_PREFIX_ID = "jenkins-"
10
INSTALLED_APPS += ('django_hudson',)
11

  
12
#One year
13
AUTH_TOKEN_DURATION = 24 * 365
/dev/null
1
--- rlib2.py    2011-07-17 20:45:56.000000000 +0300
2
+++ rlib2.py.20110717   2011-07-17 20:45:51.000000000 +0300
3
@@ -785,7 +785,7 @@
4
     src_node=baserlib.CheckParameter(data, "src_node", default=None),
5
     src_path=baserlib.CheckParameter(data, "src_path", default=None),
6
     start=baserlib.CheckParameter(data, "start", default=True),
7
-    wait_for_sync=baserlib.CheckParameter(data, "wait_for_sync", default=True),
8
+    wait_for_sync=True,
9
     ip_check=baserlib.CheckParameter(data, "ip_check", default=True),
10
     name_check=baserlib.CheckParameter(data, "name_check", default=True),
11
     file_storage_dir=baserlib.CheckParameter(data, "file_storage_dir",
/dev/null
1
--- kvm-vif-bridge	2011-06-05 11:52:48.000000000 +0300
2
+++ /etc/ganeti/kvm-vif-bridge	2011-06-05 11:55:16.000000000 +0300
3
@@ -91,6 +91,10 @@
4
 	routed_setup_ipv6
5
 	routed_setup_firewall
6
 	routed_setup_nfdhcpd
7
+
8
+    # Quick and dirty hack for the development platform
9
+    # also *bridge* the interface to br0, to support host-based NAT
10
+    brctl addif br0 $INTERFACE
11
 elif [ "$MODE" = "bridged" ]; then
12
 	ifconfig $INTERFACE 0.0.0.0 up
13
 	brctl addif $BRIDGE $INTERFACE
/dev/null
1
diff --git a/nfdhcpd b/nfdhcpd
2
index c3bdcc7..19e8d6c 100755
3
--- a/nfdhcpd
4
+++ b/nfdhcpd
5
@@ -1,4 +1,4 @@
6
-#!/usr/bin/env python
7
+#!/usr/bin/env python2.7
8
 #
9
 
10
 # nfdcpd: A promiscuous, NFQUEUE-based DHCP server for virtual machine hosting
11
@@ -496,7 +496,9 @@ class VMNetProxy(object): # pylint: disable=R0902
12
         """ Generate a reply to a BOOTP/DHCP request
13
 
14
         """
15
-        indev = payload.get_indev()
16
+        # If the packet comes from a bridged interface, use the ifindex
17
+        # of the physical device instead of the ifindex of the bridge interface
18
+        indev = payload.get_physindev() or payload.get_indev()
19
         try:
20
             # Get the actual interface from the ifindex
21
             iface = self.ifaces[indev]
22
@@ -537,7 +539,7 @@ class VMNetProxy(object): # pylint: disable=R0902
23
             return
24
 
25
         resp = Ether(dst=mac, src=self.get_iface_hw_addr(iface))/\
26
-               IP(src=DHCP_DUMMY_SERVER_IP, dst=binding.ip)/\
27
+               IP(src=self.dhcp_server_ip, dst=binding.ip)/\
28
                UDP(sport=pkt.dport, dport=pkt.sport)/resp
29
         subnet = self.subnets[binding.link]
30
 
31
@@ -593,7 +595,7 @@ class VMNetProxy(object): # pylint: disable=R0902
32
         # Finally, always add the server identifier and end options
33
         dhcp_options += [
34
             ("message-type", resp_type),
35
-            ("server_id", DHCP_DUMMY_SERVER_IP),
36
+            ("server_id", self.dhcp_server_ip),
37
             "end"
38
         ]
39
         resp /= DHCP(options=dhcp_options)
40
@@ -606,7 +608,7 @@ class VMNetProxy(object): # pylint: disable=R0902
41
         """ Generate a reply to a BOOTP/DHCP request
42
 
43
         """
44
-        indev = payload.get_indev()
45
+        indev = payload.get_physindev() or payload.get_indev()
46
         try:
47
             # Get the actual interface from the ifindex
48
             iface = self.ifaces[indev]
49
@@ -641,7 +643,7 @@ class VMNetProxy(object): # pylint: disable=R0902
50
         """ Generate a reply to an ICMPv6 neighbor solicitation
51
 
52
         """
53
-        indev = payload.get_indev()
54
+        indev = payload.get_physindev() or payload.get_indev()
55
         try:
56
             # Get the actual interface from the ifindex
57
             iface = self.ifaces[indev]
/dev/null
1
root@store67:~/src/python-nfqueue# diff -ur original/nfqueue-bindings-0.3/ mine/nfqueue-bindings-0.3|grep -v ^Only
2
diff -ur original/nfqueue-bindings-0.3//libnetfilter_queue.i mine/nfqueue-bindings-0.3/libnetfilter_queue.i
3
--- original/nfqueue-bindings-0.3//libnetfilter_queue.i 2009-10-18 18:37:28.000000000 +0300
4
+++ mine/nfqueue-bindings-0.3/libnetfilter_queue.i      2011-06-05 10:58:46.000000000 +0300
5
@@ -51,6 +51,7 @@
6
 %extend payload {
7
         int get_nfmark();
8
         int get_indev();
9
+        int get_physindev();
10
         int get_outdev();
11

  
12
 unsigned int get_length(void) {
13
diff -ur original/nfqueue-bindings-0.3//nfq_common.c mine/nfqueue-bindings-0.3/nfq_common.c
14
--- original/nfqueue-bindings-0.3//nfq_common.c 2009-10-18 18:37:28.000000000 +0300
15
+++ mine/nfqueue-bindings-0.3/nfq_common.c      2011-06-05 10:59:54.000000000 +0300
16
@@ -192,6 +192,11 @@
17
         return nfq_get_indev(self->nfad);
18
 }
19

  
20
+int payload_get_physindev(struct payload *self)
21
+{
22
+        return nfq_get_physindev(self->nfad);
23
+}
24
+
25
 int payload_get_outdev(struct payload *self)
26
 {
27
         return nfq_get_outdev(self->nfad);
28
diff -ur original/nfqueue-bindings-0.3//nfq_common.h mine/nfqueue-bindings-0.3/nfq_common.h
29
--- original/nfqueue-bindings-0.3//nfq_common.h 2009-10-18 18:37:28.000000000 +0300
30
+++ mine/nfqueue-bindings-0.3/nfq_common.h      2011-06-05 10:59:18.000000000 +0300
31
@@ -32,6 +32,8 @@
32

  
33
 int payload_get_indev(struct payload *self);
34

  
35
+int payload_get_physindev(struct payload *self);
36
+
37
 int payload_get_outdev(struct payload *self);
38

  
39
 #endif /* __NFQ_COMMON__ */
/dev/null
1
django_extensions
2
Sphinx>=1.1.2
b/devtools/autopkg.sh
1
#!/bin/bash
2

  
3
if [ $# -ne 3 ]; then
4
  echo "$0 localbranch remotedebian remoteupstream"
5
  exit 1
6
fi
7

  
8

  
9
LOCALBRANCH=$1
10
REMOTEDEBIAN=$2
11
REMOTEUPSTREAM=$3
12
BUILDAREA=~/build-area
13
PKGAREA=~/packages
14
BACKUPAREA=~/backup
15

  
16
PACKAGES="
17
  snf-astakos-app
18
  snf-common
19
  snf-webproject
20
  snf-cyclades-app
21
  snf-cyclades-gtools
22
  snf-tools
23
  snf-pithos-app
24
  snf-pithos-backend
25
  snf-pithos-tools"
26

  
27

  
28
set -e
29

  
30
test -d $BUILDAREA
31
test -d $PKGAREA
32
test -d $BACKUPAREA
33

  
34

  
35

  
36
#TODO: check for up-to-date branches
37
git checkout $LOCALBRANCH
38
git checkout $REMOTEUPSTREAM
39
git checkout $REMOTEDEBIAN
40

  
41
TMPDEBIAN=$(mktemp -u debian.XXX)
42

  
43

  
44
# create tmp debian branch to do everything
45
git checkout --track $REMOTEDEBIAN -b $TMPDEBIAN
46

  
47
mrgextra=-m
48
mrgmsg="Merge branch '$REMOTEUPSTREAM' into $REMOTEDEBIAN"
49
dchextra=-R
50

  
51
# whether we are in snapshot or release mode
52
snap=false
53

  
54
tcdialog --defaultno --yesno "Create Snapshot?" 5 20 && snap=true && dchextra=-S && mrgextra= && mrgmsg=
55

  
56

  
57
# merge local branch to tmp branch with correct msg so that it can be pushes as is to upstream debian
58
git merge --no-edit $mrgextra ${mrgextra:+"$mrgmsg"} $LOCALBRANCH
59

  
60

  
61
# auto edit changlog depending on Snapshot or Release mode
62
export EDITOR=/usr/bin/vim
63
git-dch --debian-branch=$TMPDEBIAN --git-author --ignore-regex=".*" --multimaint-merge --since=HEAD $dchextra
64
git add debian/changelog
65

  
66

  
67
# get version from the changelog
68
# we tag here in order sdist to work as expexted.
69
version=$(IFS="()" ; read  x v x < debian/changelog  ; echo $v)
70
if ! $snap; then
71
  git commit -s -a -m "Bump new upstream version"
72
  TAGFILE=$(mktemp -t tag.XXX)
73
  tcdialog --inputbox "New Debian Tag: " 5 30 "debian/$version" 2>$TAGFILE
74
  git tag $(<$TAGFILE)
75
fi
76

  
77
rm -rf $BUILDAREA/*
78

  
79
for p in $PACKAGES; do
80

  
81
  cd  $p
82
  python setup.py sdist
83
  grep "__version_vcs" -r . -l -I | xargs git add -f
84
  cd -
85

  
86
done
87

  
88

  
89
git-buildpackage --git-export-dir=$BUILDAREA \
90
                 --git-upstream-branch=$REMOTEUPSTREAM \
91
                 --git-debian-branch=$TMPDEBIAN \
92
                 --git-export=INDEX \
93
                 --git-ignore-new -sa
94

  
95
# do some dirty backup
96
# pkgarea might be needed by auto-deploy tool
97
rm -f $PKGAREA/* || true
98
cp -v $BUILDAREA/*deb $PKGAREA/ || true
99

  
100
cp -v $BUILDAREA/* $BACKUPAREA/ || true
101

  
102

  
103
git reset --hard HEAD
104
if $snap ; then
105
  git checkout $LOCALBRANCH
106
  git branch -D $TMPDEBIAN
107
else
108
  # here we can push as is the commits in remote debian branch
109
  echo "########### All OK #####################"
110
  echo "git push origin $REMOTEDEBIAN"
111
  echo "git checkout $LOCALBRANCH"
112
  echo
113
  echo "############ Revert ######################"
114
  echo "git tag -d " $(<$TAGFILE)
115
  rm $TAGFILE
116
fi
117

  
118

  
b/devtools/runtests-venvs.sh
1
#!/bin/bash
2
#
3
#
4
# Copyright 2011 GRNET S.A. All rights reserved.
5
#
6
# Redistribution and use in source and binary forms, with or
7
# without modification, are permitted provided that the following
8
# conditions are met:
9
#
10
#   1. Redistributions of source code must retain the above
11
#      copyright notice, this list of conditions and the following
12
#      disclaimer.
13
#
14
#   2. Redistributions in binary form must reproduce the above
15
#      copyright notice, this list of conditions and the following
16
#      disclaimer in the documentation and/or other materials
17
#      provided with the distribution.
18
#
19
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
20
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
23
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
# POSSIBILITY OF SUCH DAMAGE.
31
#
32
# The views and conclusions contained in the software and
33
# documentation are those of the authors and should not be
34
# interpreted as representing official policies, either expressed
35
# or implied, of GRNET S.A.
36
#
37

  
38
set -e
39

  
40
rm -rf env
41
virtualenv --no-site-packages -ppython2.6 env
42
source env/bin/activate
43
export PIP_DOWNLOAD_CACHE=/tmp/.pip_cache
44
pip install -r requirements.pip
45

  
46
cd snf-common
47
rm -rf build dist
48
python setup.py install
49
cd ../snf-cyclades-app
50
rm -rf build dist
51
python setup.py install
52
cd ../snf-cyclades-gtools
53
rm -rf build dist
54
python setup.py install
55

  
56

  
57
cd ../env
58
# avoid vncauthproxy errors
59
rm bin/vncauthproxy.py
60
echo "running django tests..." >&2
61
export SYNNEFO_SETTINGS_DIR=/etc/lala
62
snf-manage test admin api db logic userdata --settings=synnefo.settings.test
63
cd ..
64
deactivate
65

  
66
#rm -rf env
67
#virtualenv --no-site-packages -ppython2.7 env
68
#source env/bin/activate
69
#export PIP_DOWNLOAD_CACHE=/tmp/.pip_cache
70
#pip install -r requirements.pip
71

  
72
#cd snf-common
73
#rm -rf build dist
74
#python setup.py install
75
#cd ../snf-cyclades-app
76
#rm -rf build dist
77
#python setup.py install
78
#cd ../snf-cyclades-gtools
79
#rm -rf build dist
80
#python setup.py install
81

  
82
#cd env
83
## avoid vncauthproxy errors
84
#rm bin/vncauthproxy.py
85
#echo "running django tests..." >&2
86
#snf-manage test aai admin api db helpdesk invitations logic userdata --settings=synnefo.settings.test
87
#cd ..
88
#deactivate
89
#rm -rf env
b/devtools/runtests.sh
1
#!/bin/bash
2
#
3
#
4
# Copyright 2011 GRNET S.A. All rights reserved.
5
#
6
# Redistribution and use in source and binary forms, with or
7
# without modification, are permitted provided that the following
8
# conditions are met:
9
#
10
#   1. Redistributions of source code must retain the above
11
#      copyright notice, this list of conditions and the following
12
#      disclaimer.
13
#
14
#   2. Redistributions in binary form must reproduce the above
15
#      copyright notice, this list of conditions and the following
16
#      disclaimer in the documentation and/or other materials
17
#      provided with the distribution.
18
#
19
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
20
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
23
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
# POSSIBILITY OF SUCH DAMAGE.
31
#
32
# The views and conclusions contained in the software and
33
# documentation are those of the authors and should not be
34
# interpreted as representing official policies, either expressed
35
# or implied, of GRNET S.A.
36
#
37

  
38
set -e
39

  
40
echo "Running snf-cyclades-app tests..." >&2
41
snf-manage test admin api db logic userdata --settings=synnefo.settings.test
42

  
43
echo "Running snf-cyclades-gtools tests..." >&2
44
./snf-cyclades-gtools/test/synnefo.ganeti_unittest.py
45

  
/dev/null
1
pithos.html
/dev/null
1
<!doctype html>
2
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
3
<!--[if IE 7 ]>    <html lang="en" class="no-js ie7"> <![endif]-->
4
<!--[if IE 8 ]>    <html lang="en" class="no-js ie8"> <![endif]-->
5
<!--[if (gte IE 9)|!(IE)]><!--> <html lang="en" class="no-js"> <!--<![endif]-->
6
<head>
7
    <meta charset="utf-8">
8

  
9
  <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
10
       Remove this if you use the .htaccess -->
11
  <meta http-equiv="X-UA-Compatible" content="chrome=1">
12

  
13
  <title>~okeanos</title>
14
  <meta name="description" content="Pithos+ GRNet Service">
15
  <meta name="author" content="Kostas Papadimitriou <kpap@grnet.gr>">
16

  
17
  <!--  Mobile viewport optimized: j.mp/bplateviewport -->
18
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
19

  
20
    <!-- Place favicon.ico & apple-touch-icon.png
21
        in the root of your domain and delete these references -->
22
  <link rel="shortcut icon" href="/favicon.ico">
23
  <link rel="apple-touch-icon" href="/apple-touch-icon.png">
24
  
25
  <link rel="stylesheet" href="site_media/css/site.css">
26
  <script src="site_media/js/libs/modernizr-1.7.min.js"></script>
27
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
28
  <script>
29
    var CLOUDBAR_ACTIVE_SERVICE = 'okeanos';
30
    var CLOUDBAR_LOCATION = "/static/im/cloudbar/";
31
    var CLOUDBAR_SERVICES = "/im/get_services";
32
    var CLOUDBAR_MENU = "/im/get_menu";
33

  
34
    $(document).ready(function(){
35
      $.getScript(CLOUDBAR_LOCATION + 'cloudbar.js');
36
    })
37
  </script>
38
</head>
39
<body id="index" style="background-position: 0px -200px">
40
    <div class="container">
41
        <div class="logo">
42
            <a href="#" title="Pithos+"><img 
43
                src="site_media/images/okeanos-logo-alpha.png" 
44
                alt="~okeanos" 
45
                title="~okeanos" /></a>
46
        </div>
47

  
48
        <div class="inner box-round-mid box-shadow-mid clearfix">
49
            <div class="cols clearfix">
50
                <div class="main-content">
51

  
52
    <div class="intro-text page text">
53
        <p>
54
        Η έκδοση alpha 2 της υπηρεσίας ~okeanos θα είναι σύντομα διαθέσιμη.<br /><br />
55
        Αν έχετε λογαριασμό θα λάβετε ενημερωτικό μήνυμα στο email σας.<br />
56
        Αν δεν έχετε, φτιάξτε έναν <a href="/im">τώρα</a>!
57
        </p>
58
    </div>
59
</div>
60

  
61
            </div>
62
        </div>
63
    </div>
64

  
65
</div>
66
</div>
67

  
68
<div class="footer">
69
    
70
<div class="bottom-text">
71
    <p>&copy; 2011 <a target="_blank" href="http://www.grnet.gr/">Εθνικό Δίκτυο Έρευνας και Τεχνολογίας</a></p>
72
</div>
73
</div>
74
  
75
              
76
      <script src="site_media/js/libs/jquery-1.5.1.min.js"></script>
77
      <script src="site_media/js/libs/jquery.cookie.js"></script>
78
      <script src="site_media/js/intro-hover.js"></script>
79
      <script src="site_media/js/main.js"></script>
80

  
81
                        <!--[if lt IE 7 ]>
82
      <script src="site_media/js/libs/dd_belatedpng.js"></script>
83
      <script>DD_belatedPNG.fix('img, .png_bg');</script>
84
      <![endif]-->
85
</body>
86
</html>
/dev/null
1
<!doctype html>
2
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
3
<!--[if IE 7 ]>    <html lang="en" class="no-js ie7"> <![endif]-->
4
<!--[if IE 8 ]>    <html lang="en" class="no-js ie8"> <![endif]-->
5
<!--[if (gte IE 9)|!(IE)]><!--> <html lang="en" class="no-js"> <!--<![endif]-->
6
<head>
7
    <meta charset="utf-8">
8

  
9
  <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
10
       Remove this if you use the .htaccess -->
11
  <meta http-equiv="X-UA-Compatible" content="chrome=1">
12

  
13
  <title>Pithos+</title>
14
  <meta name="description" content="Pithos+ GRNet Service">
15
  <meta name="author" content="Kostas Papadimitriou <kpap@grnet.gr>">
16

  
17
  <!--  Mobile viewport optimized: j.mp/bplateviewport -->
18
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
19

  
20
    <!-- Place favicon.ico & apple-touch-icon.png
21
        in the root of your domain and delete these references -->
22
  <link rel="shortcut icon" href="/favicon.ico">
23
  <link rel="apple-touch-icon" href="/apple-touch-icon.png">
24
  
25
  <link rel="stylesheet" href="site_media/css/site.css">
26
  <script src="site_media/js/libs/modernizr-1.7.min.js"></script>
27
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
28
  <script>
29
    var CLOUDBAR_ACTIVE_SERVICE = 'cloud';
30
    var CLOUDBAR_LOCATION = "/static/im/cloudbar/";
31
    var CLOUDBAR_SERVICES = "/im/get_services";
32
    var CLOUDBAR_MENU = "/im/get_menu";
33

  
34
    $(document).ready(function(){
35
      $.getScript(CLOUDBAR_LOCATION + 'cloudbar.js');
36
    })
37
  </script>
38
</head>
39
<body id="index">
40
    <div class="container">
41
        <div class="logo">
42
            <a href="#" title="Pithos+"><img 
43
                src="site_media/images/logo.png" 
44
                alt="Pithos+" 
45
                title="Pithos+" /></a>
46
        </div>
47

  
48
        <div class="inner box-round-mid box-shadow-mid clearfix">
49
            <div class="cols clearfix">
50
                <div class="main-content">
51

  
52
    <div class="intro-text page text">
53
        <p>
54
        Η υπηρεσία Pithos+ προσφέρει σε κάθε χρήστη <em class="bold">50 GBytes</em> αποθηκευτικού χώρου online, προσβάσιμα από παντού, πάντοτε, με ασφάλεια. Η χρήση είναι <em class="bold">ελεύθερη και δωρεάν</em> για τους φοιτητές και μέλη της ακαδημαϊκής, ερευνητικής και εκπαιδευτικής κοινότητας της Ελλάδας, οι οποίοι μπορούν να αποθηκεύουν τα αρχεία τους και να τα μοιράζονται με άλλους χρήστες ή να τα διαθέτουν στο Διαδίκτυο. Προαιρετικά, τηρείται ιστορικό των αρχείων με δυνατότητα ανάγνωσης παλαιότερων εκδόσεων (versioning).
55
        </p>
56
        <!--<p>
57
        Η χρήση της υπηρεσίας διέπεται από τους όρους χρήσης της.
58
        </p>-->
59
    </div>
60
    <div class="inner-bottom">
61
        <a class="gotoapp" 
62
            href="/ui" 
63
            title="Enter Pithos+">Είσοδος</a>
64
    </div>
65
    <div class="downloads clearfix">
66
        <div class="desc">
67
        <h4>Λογισμικό</h4>
68
            <p class="desc">Για την άμεση πρόσβαση και τον συγχρονισμό των αρχείων του υπολογιστή σας με την υπηρεσία, κατεβάστε την εφαρμογή Pithos+ για το λειτουργικό σύστημα που χρησιμοποιείτε:</p>
69
        </div>
70
        <div class="downloads-list">
71
            <div class="download windows">
72
                <div class="subtitle">Pithos+ για</div>
73
                <div class="title">Windows</div>
74
                <div class="compat">XP, Vista, 7</div>
75
                <div class="link"><a href="http://code.grnet.gr/projects/pithos-ms-client/files">Επιλογή</a></div>
76
            </div>
77
            <div class="download osx">
78
                <div class="subtitle">Pithos+ για</div>
79
                <div class="title">Mac OS X</div>
80
                <div class="compat">10.6 ή νεότερο</div>
81
                <div class="link"><a href="http://code.grnet.gr/projects/pithos-macos/files">Επιλογή</a></div>
82
            </div>
83
            <div class="download linux last">
84
                <div class="subtitle">Pithos+ για</div>
85
                <div class="title">Linux</div>
86
                <div class="compat">Πακέτο Python</div>
87
                <div class="link"><a href="http://code.grnet.gr/projects/pithos-tools/files">Επιλογή</a></div>
88
            </div>
89
        </div>
90
    </div>
91
</div>
92

  
93
            </div>
94
        </div>
95
    </div>
96

  
97
</div>
98
</div>
99

  
100
<div class="footer">
101
    
102
<div class="bottom-text">
103
    <p>&copy; 2011 <a target="_blank" href="http://www.grnet.gr/">Εθνικό Δίκτυο Έρευνας και Τεχνολογίας</a></p>
104
</div>
105
</div>
106
  
107
              
108
      <script src="site_media/js/libs/jquery-1.5.1.min.js"></script>
109
      <script src="site_media/js/libs/jquery.cookie.js"></script>
110
      <script src="site_media/js/intro-hover.js"></script>
111
      <script src="site_media/js/main.js"></script>
112

  
113
                        <!--[if lt IE 7 ]>
114
      <script src="site_media/js/libs/dd_belatedpng.js"></script>
115
      <script>DD_belatedPNG.fix('img, .png_bg');</script>
116
      <![endif]-->
117
</body>
118
</html>
/dev/null
1
html,
2
body,
3
div,
4
span,
5
applet,
6
object,
7
iframe,
8
h1,
9
h2,
10
h3,
11
h4,
12
h5,
13
h6,
14
p,
15
blockquote,
16
pre,
17
a,
18
abbr,
19
acronym,
20
address,
21
big,
22
cite,
23
code,
24
del,
25
dfn,
26
em,
27
font,
28
img,
29
ins,
30
kbd,
31
q,
32
s,
33
samp,
34
small,
35
strike,
36
strong,
37
sub,
38
sup,
39
tt,
40
var,
41
dl,
42
dt,
43
dd,
44
ol,
45
ul,
46
li,
47
fieldset,
48
form,
49
label,
50
legend,
51
table,
52
caption,
53
tbody,
54
tfoot,
55
thead,
56
tr,
57
th,
58
td {
59
  margin: 0;
60
  padding: 0;
61
  outline: 0;
62
  border: 0;
63
  vertical-align: baseline;
64
  font-weight: inherit;
65
  font-style: inherit;
66
  font-size: 100%;
67
  font-family: inherit;
68
}
69
body {
70
  background: #fff;
71
  color: #000;
72
  line-height: 1;
73
}
74
ol, ul {
75
  list-style: none;
76
}
77
table {
78
  border-collapse: separate;
79
  border-spacing: 0;
80
  vertical-align: middle;
81
}
82
caption, th, td {
83
  vertical-align: middle;
84
  text-align: left;
85
  font-weight: normal;
86
}
87
q, blockquote {
88
  quotes: '' '';
89
}
90
q:before,
91
q:after,
92
blockquote:before,
93
blockquote:after {
94
  content: '';
95
}
96
a img {
97
  border: none;
98
}
99
/*@import "grnetstyles/css3.less";*/
100
/* float clearing for IE6 */
101
* html .clearfix {
102
  height: 1%;
103
  overflow: visible;
104
}
105
/* float clearing for IE7 */
106
* + html .clearfix {
107
  min-height: 1%;
108
}
109
/* float clearing for everyone else */
110
.clearfix:after {
111
  clear: both;
112
  content: ".";
113
  display: block;
114
  height: 0;
115
  visibility: hidden;
116
  font-size: 0;
117
}
118
.footer a {
119
  color: #74AEC9;
120
  text-decoration: underline;
121
}
122
.footer a:hover {
123
  color: #4085A5;
124
}
125
body {
126
  background-image: url("../images/bg.png");
127
  background-repeat: repeat-x;
128
  font-size: 13px;
129
  font-family: verdana;
130
  background-position: 0px -90px;
131
  min-width: 870px;
132
}
133
body.alt {
134
  background-image: url("../images/bg-alt.png");
135
}
136
.container {
137
  width: 870px;
138
  margin: 0 auto;
139
  margin-top: 20px;
140
}
141
.inner {
142
  margin-top: 2.5em;
143
  background-image: url("../images/bg-inner.png");
144
  width: 100%;
145
}
146
.inner .left {
147
  position: relative;
148
  width: 180px;
149
  float: left;
150
}
151
.inner .left ul {
152
  margin-top: 90px;
153
  color: #4085A5;
154
  left: -16px;
155
  padding-top: 40px;
156
  padding-right: 10px;
157
}
158
.inner .left ul li {
159
  font-size: 1.8em;
160
  margin-bottom: 0.2em;
161
  position: relative;
162
}
163
.inner .left ul li a.page-link {
164
  display: block;
165
  color: inherit;
166
  text-decoration: none;
167
  padding: 10px;
168
  padding-left: 36px;
169
}
170
.inner .left ul li a.page-link:hover, .inner .left ul li.selected a.page-link {
171
  text-shadow: none;
172
  color: #fff;
173
  background-color: #74AEC9;
174
  border-left: 0px solid #92C1D7;
175
  padding-left: 36px;
176
}
177
.inner .left ul li .close-button:hover {
178
  background-color: #99C9E0;
179
}
180
.inner .left ul li .close-button {
181
  display: block;
182
  position: absolute;
183
  left: -30px;
184
  top: 0px;
185
  font-size: 0.7em;
186
  border: none;
187
  background: transparent;
188
  padding: 0;
189
  padding-top: 13px;
190
  padding-left: 9px;
191
  margin: 0px;
192
  text-decoration: none;
193
  color: #fff;
194
  width: 21px;
195
  height: 30px;
196
  font-weight: bold;
197
  display: block;
198
  visibility: hidden;
199
}
200
.inner .left ul li.current a.page-link {
201
  color: #fff;
202
  background-color: #74AEC9;
203
  border-left: 30px solid #92C1D7;
204
  padding-left: 36px;
205
  margin-left: -30px;
206
}
207
.inner .video-cont, .inner .page-cont {
208
  width: 690px;
209
  float: right;
210
}
211
.inner .cols {
212
  position: relative;
213
}
214
.page {
215
  display: block;
216
  top: 0;
217
}
218
.page-wrapper {
219
  position: relative;
220
}
221
.page.text {
222
  margin-left: 27px;
223
  padding-top: 20px;
224
  padding-right: 20px;
225
  padding-bottom: 10px;
226
}
227
.page.text h2 {
228
  font-size: 1.9em;
229
  color: #4085A5;
230
  margin-bottom: 1.2em;
231
}
232
.page.text h2 em {
233
  color: #FCFDFE;
234
}
235
.page.text a {
236
  color: #213D4A;
237
}
238
.page.text p em {
239
  color: #4C6A78;
240
  /*font-weight: bold;*/
241

  
242
}
243
.page.text h3 {
244
  font-size: 1.2em;
245
  color: #4394B9;
246
  margin-bottom: 0.5em;
247
  margin-top: 1.5em;
248
}
249
.page.text h4 {
250
  font-weight: bold;
251
  font-size: 1.1em;
252
  margin-bottom: 0.3em;
253
}
254
.page.text p {
255
  color: #213D4A;
256
  font-size: 1.1em;
257
  margin-bottom: 1em;
258
  text-align: justify;
259
  line-height: 1.4em;
260
}
261
.inner .video {
262
  width: 640px;
263
  height: 360px;
264
  background-color: #4085A5;
265
  margin: 20px;
266
  margin-left: 27px;
267
  margin-bottom: 20px;
268
  margin-top: 20px;
269
  /*border: 1px solid #4085A5;*/
270

  
271
}
272
.logo {
273
  text-align: center;
274
}
275
.logo img {
276
  margin-left: 75px;
277
}
278
.inner-bottom {
279
  width: 100%;
280
}
281
.inner-bottom .testuser {
282
  display: none;
283
  background: #000;
284
  margin-right: 40px;
285
  float: right;
286
  margin-top: 10px;
287
  margin-bottom: 20px;
288
}
289
.gotoapp {
290
  display: block;
291
  padding: 0.7em 5em;
292
  color: #fff;
293
  font-size: 1.1em;
294
  background-color: #FF7F2A;
295
  cursor: pointer;
296
  margin-right: -20px;
297
  text-decoration: none;
298
}
299
.gotoapp:hover {
300
  background-color: #FF9955;
301
}
302
.page.text {
303
  margin-right: 20px;
304
  margin-top: 20px;
305
}
306
.inner-bottom.in-page .testuser {
307
  margin-right: 60px;
308
}
309
.banner-coming {
310
  position: absolute;
311
  left: 0px;
312
  top: 0px;
313
}
314
.footer {
315
  text-align: center;
316
  margin: 0 auto;
317
  width: 870px;
318
  margin: 2em auto;
319
}
320
.footer .links {
321
  color: #4085A5;
322
  margin-bottom: 1em;
323
}
324
.footer .links li {
325
  display: inline;
326
  margin-right: 1em;
327
  padding-right: 1em;
328
  border-right: 1px solid #4085A5;
329
}
330
.footer .links li a {
331
  color: inherit;
332
  text-decoration: none;
333
}
334
.footer .links li.last {
335
  margin-right: 0;
336
  padding-right: 0;
337
  border: none;
338
}
339
.footer .bottom-text {
340
  color: #74AEC9;
341
}
342
/*style 2*/
343
body.style2 .page.text {
344
  background-color: #7DB3CC;
345
  padding-left: 20px;
346
}
347
body.style2 .page.text p, body.style2 .page.text h2 {
348
  color: #fff;
349
}
350
#video div.vjs-big-play-button {
351
  background: none !important;
352
  border: none !important;
353
  box-shadow: 4px 4px 20px #477589 !important;
354
}
355
#video div.vjs-big-play-button:hover {
356
  background: none !important;
357
  border: none !important;
358
  box-shadow: 4px 4px 50px #477589 !important;
359
  background: #4085A5 !important;
360
}
361
body {
362
  text-align: center;
363
}
364
* html body legend {
365
  margin: -8px 16px 0;
366
  padding: 0;
367
}
368
html > body p code {
369
  *white-space: normal;
370
}
371
.container {
372
  text-align: left;
373
}
374
sup {
375
  vertical-align: text-top;
376
}
377
sub {
378
  vertical-align: text-bottom;
379
}
380
hr {
381
  margin: -8px auto 11px;
382
}
383
img {
384
  -ms-interpolation-mode: bicubic;
385
}
386
fieldset {
387
  padding-top: 0;
388
}
389
textarea {
390
  overflow: auto;
391
}
392
input.text {
393
  margin: .5em 0;
394
  border: 1px solid #bbb;
395
  background-color: #ffffff;
396
}
397
input.text:focus {
398
  border: 1px solid #666666;
399
}
400
input.title {
401
  margin: .5em 0;
402
  border: 1px solid #bbb;
403
  background-color: #ffffff;
404
}
405
input.title:focus {
406
  border: 1px solid #666666;
407
}
408
input.checkbox {
409
  position: relative;
410
  top: 0.25em;
411
}
412
input.radio {
413
  position: relative;
414
  top: 0.25em;
415
}
416
input.button {
417
  position: relative;
418
  top: 0.25em;
419
}
420
textarea {
421
  margin: 0.5em 0;
422
}
423
select {
424
  margin: 0.5em 0;
425
}
426
button {
427
  position: relative;
428
  top: 0.25em;
429
}
430
a {
431
  color: #4085A5;
432
}
433
.menu li {
434
  height: 50px;
435
}
436
.inner-bottom .testuser {
437
  margin-right: 22px;
438
}
439
.inner-bottom .testuser a {
440
  margin-right: 0px;
441
}
442
/* Reset.less
443
 * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here	that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc).
444
 * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
445
html, body {
446
  margin: 0;
447
  padding: 0;
448
}
449
h1,
450
h2,
451
h3,
452
h4,
453
h5,
454
h6,
455
p,
456
blockquote,
457
pre,
458
a,
459
abbr,
460
acronym,
461
address,
462
cite,
463
code,
464
del,
465
dfn,
466
em,
467
img,
468
q,
469
s,
470
samp,
471
small,
472
strike,
473
strong,
474
sub,
475
sup,
476
tt,
477
var,
478
dd,
479
dl,
480
dt,
481
li,
482
ol,
483
ul,
484
fieldset,
485
form,
486
label,
487
legend,
488
button,
489
table,
490
caption,
491
tbody,
492
tfoot,
493
thead,
494
tr,
495
th,
496
td {
497
  margin: 0;
498
  padding: 0;
499
  border: 0;
500
  font-weight: normal;
501
  font-style: normal;
502
  font-size: 100%;
503
  line-height: 1;
504
  font-family: inherit;
505
}
506
table {
507
  border-collapse: collapse;
508
  border-spacing: 0;
509
}
510
ol, ul {
511
  list-style: none;
512
}
513
q:before,
514
q:after,
515
blockquote:before,
516
blockquote:after {
517
  content: "";
518
}
519
html {
520
  overflow-y: scroll;
521
  font-size: 100%;
522
  -webkit-text-size-adjust: 100%;
523
  -ms-text-size-adjust: 100%;
524
}
525
a:focus {
526
  outline: thin dotted;
527
}
528
a:hover, a:active {
529
  outline: 0;
530
}
531
article,
532
aside,
533
details,
534
figcaption,
535
figure,
536
footer,
537
header,
538
hgroup,
539
nav,
540
section {
541
  display: block;
542
}
543
audio, canvas, video {
544
  display: inline-block;
545
  *display: inline;
546
  *zoom: 1;
547
}
548
audio:not([controls]) {
549
  display: none;
550
}
551
sub, sup {
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff