Commit ff1359a5 authored by Christos Stavrakakis's avatar Christos Stavrakakis

Merge branch 'release-0.16' into debian-release-0.16

parents 9bbb2398 55086960
......@@ -8,6 +8,35 @@ repository and have aligned versions.
.. _Changelog-0.16:
v0.16rc3
========
Released: Wed Oct 15 14:14:33 EEST 2014
Synnefo-wide
------------
* Update upgrade notes and installation guide to conform with
Archipelago 0.16rc2.
* Add Synnefo wide accessible gunicorn hooks for Archipelago.
Astakos
-------
* Explicitly specify the lists in which every notification will be sent.
Cyclades
--------
* Remove stale '--public' and '--user' options from 'image-show' and
'snapshot-show' management commands.
Pithos
------
* Remove custom Gunicorn worker.
v0.16rc2
========
......
......@@ -10,9 +10,9 @@ Since v0.13 all Synnefo components have been merged into a single repository.
v0.16rc2
========
Released: Tue Sep 30 10:39:13 EEST 2014
Released: Wed Oct 15 14:14:33 EEST 2014
This is the first release candidate for Synnefo 0.16.
This is the third release candidate for Synnefo 0.16.
.. warning::
......
......@@ -70,7 +70,7 @@ ssh_port =
[Burnin]
# Maybe add some burnin options
# (e.g. tests to run/ignore, timeouts etc)
cmd_options = --images "name:.*" --flavors "name:C1R512D2file" --no-ipv6
cmd_options = --images "name:.*" --flavors "name:C1R512D2\D.*" --no-ipv6
[Unit Tests]
......
......@@ -4,7 +4,7 @@ set -e
runAstakosTests () {
if [ -z "$astakos_tests" ]; then return; fi
export SYNNEFO_EXCLUDE_PACKAGES="snf-cyclades-app snf-admin-app snf-pithos-app"
export SYNNEFO_EXCLUDE_PACKAGES="snf-cyclades-app:snf-admin-app:snf-pithos-app"
CURRENT_COMPONENT=astakos
createSnfManageTest $astakos_tests
runTest
......@@ -13,7 +13,7 @@ runAstakosTests () {
runCycladesTests () {
if [ -z "$cyclades_tests" ]; then return; fi
export SYNNEFO_EXCLUDE_PACKAGES="snf-pithos-app snf-astakos-app snf-admin-app"
export SYNNEFO_EXCLUDE_PACKAGES="snf-pithos-app:snf-astakos-app:snf-admin-app"
CURRENT_COMPONENT=synnefo
createSnfManageTest $cyclades_tests
runTest
......@@ -31,7 +31,7 @@ runAdminTests () {
runPithosTests () {
if [ -z "$pithos_tests" ]; then return; fi
export SYNNEFO_EXCLUDE_PACKAGES="snf-cyclades-app snf-astakos-app"
export SYNNEFO_EXCLUDE_PACKAGES="snf-cyclades-app:snf-astakos-app:snf-admin-app"
CURRENT_COMPONENT=pithos
createSnfManageTest $pithos_tests
runTest
......
......@@ -218,8 +218,8 @@ user in the following cases:
:ref:`authentication methods policies <auth_methods_policies>`).
If all of the above fail to trigger automatic activation, an email is sent to
the persons listed in ``HELPDESK``, ``MANAGERS`` and ``ADMINS`` settings,
notifing that there is a new user pending for moderation and that it's up to
the persons listed in ``ACCOUNT_NOTIFICATIONS_RECIPIENTS`` setting,
notifying that there is a new user pending for moderation and that it's up to
the administrator to decide if the user should be activated. The UI also shows
a corresponding 'pending moderation' message to the user. The administrator can
activate a user using the ``snf-manage user-modify`` command:
......@@ -234,7 +234,7 @@ activate a user using the ``snf-manage user-modify`` command:
Once the activation process finishes, a greeting message is sent to the user
email address and a notification for the activation to the persons listed in
``HELPDESK``, ``MANAGERS`` and ``ADMINS`` settings. Once activated the user is
``ACCOUNT_NOTIFICATIONS_RECIPIENTS`` setting. Once activated the user is
able to login and access the Synnefo services.
Additional authentication methods
......
......@@ -349,7 +349,9 @@ Now edit ``/etc/archipelago/archipelago.conf`` and tweak the following settings:
* ``SEGMENT_SIZE``: Adjust shared memory segment size according to your machine's
RAM. The default value is 2GB which in some situations might exceed your
machine's physical RAM.
machine's physical RAM. Consult also with `Archipelago administrator's guide
<https://www.synnefo.org/docs/archipelago/latest/admin-guide.html>`_ for an
appropriate value.
In section ``blockerb`` set:
......@@ -375,7 +377,7 @@ In order to set up a dns server using dnsmasq do the following:
# yum install dnsmasq
Then edit your ``/etc/hosts/`` file as follows:
Then edit your ``/etc/hosts`` file as follows:
.. code-block:: console
......@@ -583,11 +585,8 @@ Copy the file ``/etc/gunicorn.d/synnefo.example`` to
.. warning:: Do NOT start the server yet, because it won't find the
``synnefo.settings`` module. Also, change ``--worker-class=gevent`` to
``--worker-class=pithos.workers.gevent_archipelago.GeventArchipelagoWorker``
and set ``--config=/etc/synnefo/pithos.conf.py``.
We will start the server after successful installation of Astakos.
If the server is running::
``synnefo.settings`` module. Also set the Gunicorn config file to
``--config=/etc/synnefo/gunicorn-hooks/gunicorn-archipelago.py``.
# service gunicorn stop
......@@ -696,18 +695,19 @@ notify administrators with a notice that a new account has just been verified.
More specifically Astakos sends emails in the following cases
- An email containing a verification link after each signup process.
- An email to the people listed in ``ADMINS`` setting after each email
verification if ``ASTAKOS_MODERATION`` setting is ``True``. The email
notifies administrators that an additional action is required in order to
activate the user.
- A welcome email to the user email and an admin notification to ``ADMINS``
right after each account activation.
- Feedback messages submited from Astakos contact view and Astakos feedback
API endpoint are sent to contacts listed in ``HELPDESK`` setting.
- Project application request notifications to people included in ``HELPDESK``
and ``MANAGERS`` settings.
- An email to the people listed in ``ACCOUNT_NOTIFICATIONS_RECIPIENTS``
setting after each email verification if ``ASTAKOS_MODERATION`` setting is
``True``. The email notifies administrators that an additional action is
required in order to activate the user.
- A welcome email to the user email and a notification to
``ACCOUNT_NOTIFICATIONS_RECIPIENTS`` right after each account activation.
- Feedback messages submitted from Astakos contact view and Astakos feedback
API endpoint are sent to contacts listed in
``FEEDBACK_NOTIFICATIONS_RECIPIENTS`` setting.
- Project application request notifications to people included in
``PROJECT_NOTIFICATIONS_RECIPIENTS`` setting.
- Notifications after each project members action (join request, membership
accepted/declinde etc.) to project members or project owners.
accepted/declined etc.) to project members or project owners.
Astakos uses the Django internal email delivering mechanism to send email
notifications. A simple configuration, using an external smtp server to
......@@ -744,11 +744,13 @@ Refer to
`Django documentation <https://docs.djangoproject.com/en/1.4/topics/email/>`_
for additional information on available email settings.
As refered in the previous section, based on the operation that triggers
an email notification, the recipients list differs. Specifically, for
emails whose recipients include contacts from your service team
(administrators, managers, helpdesk etc) Synnefo provides the following
settings located in ``00-snf-common-admins.conf``:
As referred in the previous section, based on the operation that triggers an
email notification, the recipients list differs. For convenience (and backward
compatibility), Astakos defines three service teams (administrators, managers
and helpdesk) and send the above notifications to these teams in a
preconfigured way (ie. project notifications are sent to the members of
managers and helpdesk teams). These settings are located in
``00-snf-common-admins.conf``:
.. code-block:: python
......@@ -1055,7 +1057,9 @@ Now edit ``/etc/archipelago/archipelago.conf`` and tweak the following settings:
* ``SEGMENT_SIZE``: Adjust shared memory segment size according to your machine's
RAM. The default value is 2GB which in some situations might exceed your
machine's physical RAM.
machine's physical RAM. Consult also with `Archipelago administrator's guide
<https://www.synnefo.org/docs/archipelago/latest/admin-guide.html>`_ for an
appropriate value.
In section ``blockerb`` set:
......@@ -1089,11 +1093,8 @@ Copy the file ``/etc/gunicorn.d/synnefo.example`` to
.. warning:: Do NOT start the server yet, because it won't find the
``synnefo.settings`` module. Also, change ``--worker-class=gevent`` to
``--worker-class=pithos.workers.gevent_archipelago.GeventArchipelagoWorker``
and set ``--config=/etc/synnefo/pithos.conf.py``.
We will start the server after successful installation of Astakos.
If the server is running::
``synnefo.settings`` module. Also set the Gunicorn config file to
``--config=/etc/synnefo/gunicorn-hooks/gunicorn-archipelago.py``.
# service gunicorn stop
......
This diff is collapsed.
This diff is collapsed.
......@@ -88,6 +88,8 @@ application_status_choices = get_application_status_choices()
def filter_project_status(queryset, choices):
"""Filter project status."""
choices = choices or ()
if not choices:
return queryset
if len(choices) == len(project_status_choices):
return queryset
q = Q()
......@@ -100,6 +102,8 @@ def filter_project_status(queryset, choices):
def filter_application_status(queryset, choices):
"""Filter application status."""
choices = choices or ()
if not choices:
return queryset
if len(choices) == len(application_status_choices):
return queryset
q = Q()
......
......@@ -73,6 +73,8 @@ def filter_project(queryset, queries):
def filter_disk_template(queryset, choices):
if not query:
return queryset
choices = choices or ()
dt_choices = get_disk_template_choices()
if len(choices) == len(dt_choices):
......@@ -84,7 +86,9 @@ def filter_disk_template(queryset, choices):
def filter_index(queryset, query):
if not query.isdigit():
if not query:
return queryset
elif not query.isdigit():
return queryset.none()
return queryset.filter(index=query)
......
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<metadata>
<json>
{
"fontFamily": "font-icons",
"majorVersion": 1,
"minorVersion": 0,
"version": "Version 1.0",
"fontId": "font-icons",
"psName": "font-icons",
"subFamily": "Regular",
"fullName": "font-icons",
"description": "Font generated by IcoMoon."
}
</json>
</metadata>
<defs>
<font id="font-icons" horiz-adv-x="512">
<font-face units-per-em="512" ascent="480" descent="-32" />
......@@ -40,4 +54,5 @@
<glyph unicode="&#x78;" d="M288 128c-17.664 0-32 14.336-32 32v32c0 17.68 14.336 32 32 32h192v-96h-192zM312 198.672c-13.248 0-24-10.752-24-24 0-13.264 10.752-24 24-24 13.264 0 24 10.736 24 24 0 13.248-10.736 24-24 24zM240 192v-32c0-26.496 21.504-48 48-48h160v-64c0-26.496-21.488-48-48-48h-336c-26.496 0-48 21.504-48 48v304c0 26.512 21.504 48 48 48h154.112l-37.584-15.664h-124.512c-13.248 0-24-10.752-24-24 0-13.264 10.752-24 24-24h391.984v-96.336h-160c-26.496 0-48-21.488-48-48zM80.016 304h-32v-32h16v16h16v16zM80.016 256h-32v-32h16.656l-0.656 16 16-0.336v16.336zM80.016 208h-32v-32h16.336l-0.336 16h16v16zM80.016 160h-32v-32h16.336l-0.336 16 16-0.336v16.336zM80.016 112h-32v-32h16v16h16v16zM80.016 64h-32v-32h16.336l-0.336 15.664h16v16.336zM144.016 352.992l188 79.008 36-79.008h-224zM362.336 400h37.664c14.016 0 26.496-6.096 35.28-15.664h-65.296l-7.648 15.664z" />
<glyph unicode="&#x79;" d="M256 160c0 17.673 14.327 32 32 32s32-14.327 32-32c0-17.673-14.327-32-32-32s-32 14.327-32 32zM464.016 272c-0.016 0-0.016 0 0 0l-0.016 96v48c0 26.512-21.504 48-48 48h-328c-48.528 0-88-39.488-88-88v-320c0-48.512 39.472-88 88-88h288c48.512 0 88 39.488 88 88v24c0 0 0 0 0.016 0 63.968 48.016 63.968 143.984 0 192zM88 432h328c8.816 0 16-7.168 16-16v-98.944c-5.024 1.792-10.368 2.944-16 2.944h-0.016v80c0 8.848-7.168 16-16 16h-336c-8.832 0-16-7.152-16-16v-63.088c-9.872 10.096-15.984 23.856-15.984 39.088 0 30.928 25.056 56 56 56zM399.984 384h-336v16h336v-16zM399.984 368v-16h-336v16h336zM399.984 336v-16h-311.984c-8.64 0-16.704 2.112-24 5.6v10.4h335.984zM432 56c0-30.928-25.072-56-56-56h-288c-30.944 0-56 25.072-56 56v252.176c15.216-12.592 34.736-20.176 56-20.176h328c8.816 0 16-7.168 16-16v-32h-144c-44.192 0-80-35.808-80-80s35.824-80 80-80h144v-24zM452.432 112h-164.432c-26.464 0-48 21.536-48 48s21.536 48 48 48h144c9.872 0.128 19.664 4.912 25.632 12.864 1.664 2.24 2.96 4.752 4 7.376 0.144 0.352 0.4 0.624 0.528 0.992 11.504-15.088 17.84-33.584 17.84-53.232 0-24.608-9.936-47.44-27.568-64z" />
<glyph unicode="&#x7a;" d="M544 416h-512c-17.6 0-32-14.4-32-32v-320c0-17.6 14.4-32 32-32h512c17.6 0 32 14.4 32 32v320c0 17.6-14.4 32-32 32zM320 352h64v-64h-64v64zM416 256v-64h-64v64h64zM224 352h64v-64h-64v64zM320 256v-64h-64v64h64zM128 352h64v-64h-64v64zM224 256v-64h-64v64h64zM64 352h32v-64h-32v64zM64 256h64v-64h-64v64zM96 96h-32v64h32v-64zM384 96h-256v64h256v-64zM512 96h-96v64h96v-64zM512 192h-64v64h64v-64zM512 288h-96v64h96v-64z" horiz-adv-x="576" />
<glyph unicode="&#x7b;" d="M256 480c-141.385 0-256-35.817-256-80v-48l192-192v-160c0-17.673 28.653-32 64-32s64 14.327 64 32v160l192 192v48c0 44.183-114.615 80-256 80zM47.192 410.588c11.972 6.829 28.791 13.31 48.639 18.744 43.972 12.038 100.854 18.668 160.169 18.668s116.197-6.63 160.169-18.668c19.848-5.434 36.667-11.915 48.64-18.744 7.896-4.503 12.162-8.312 14.148-10.588-1.986-2.276-6.253-6.084-14.148-10.588-11.973-6.829-28.792-13.31-48.64-18.744-43.971-12.038-100.854-18.668-160.169-18.668s-116.197 6.63-160.169 18.668c-19.848 5.434-36.667 11.915-48.639 18.744-7.896 4.504-12.162 8.312-14.149 10.588 1.987 2.276 6.253 6.084 14.149 10.588z" />
</font></defs></svg>
\ No newline at end of file
snf = {
filters: {},
modals: {
performAction: function(modal, notificationArea, warningMsg, itemsCount, countAction) {
var $modal = $(modal);
......@@ -198,7 +199,7 @@ snf = {
toggleNotifications: '',
showTips: '',
trimedCell: '<span title="click to see"><span data-container="body" data-toggle="popover" data-placement="bottom" data-content="<%= data %>"><%= trimmedData %>...</span></span>',
checkboxCell: '<span class="snf-font-admin snf-checkbox-<%= state %> selection-indicator"></span><%= content %>',
checkboxCell: '<span class="snf-checkbox-unchecked selection-indicator select"></span><span class="snf-checkbox-checked selection-indicator select"></span><%= content %>',
summary: '<a title="Show summary" href="#" class="summary-expand expand-area"><span class="snf-font-admin snf-angle-down"></span></a><dl class="info-summary dl-horizontal"><%= list %></dl>',
summaryLine: '<dt><%= key %></dt><dd><%= value %></dd>',
detailsBtn: '<a title="Details" href="<%= url %>" class="details-link"><span class="snf-font-admin snf-search"></span></a>'
......@@ -253,14 +254,17 @@ $(document).ready(function(){
$("[data-toggle=popover]").click(function(e) {
e.preventDefault();
});
$("#select-filters").click(function(e) {
e.preventDefault();
});
$("[data-toggle=popover]").popover();
$("[data-toggle=tooltip]").tooltip();
$('body').on('click', function (e) {
//did not click a popover toggle or popover
if ($(e.target).data('toggle') !== 'popover'
&& $(e.target).parents('.popover.in').length === 0) {
if ($(e.target).data('toggle') !== 'popover' && $(e.target).closest('a').attr('id') !== 'select-filters' && $(e.target).parents('.popover.in').length === 0) {
$('[data-toggle="popover"]').popover('hide');
$('#select-filters').popover('hide');
}
});
......@@ -318,5 +322,4 @@ $(document).ready(function(){
e.preventDefault();
}
});
});
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -168,7 +168,7 @@ and light gray font colors
}
.instructions .line-btn {
padding: 8px 9px;
padding: 8px 10px;
span {
padding: 0 4px;
}
......@@ -395,3 +395,37 @@ body .custom-buttons .extra-btn {
right: 0px;
}
/* Clickable elements that change state */
/* These are icon-fonts. We insert in html two icons (one for each state) */
/* The icon with the false state is hidden and only the correct one is displayed */
/* Which state is the correct it comes from the class of a parent element */
li.active .snf-checkbox-unchecked, li.active .snf-radio-unchecked {
display: none;
}
li:not(.active) .snf-checkbox-checked, , li:not(.active) .snf-radio-checked {
display: none;
}
table.dataTable tbody tr.selected .snf-checkbox-unchecked{
display: none;
}
table.dataTable tbody tr:not(.selected) .snf-checkbox-checked {
display: none;
}
.show-hide-all.open .snf-font-arrow-down {
display: none;
}
.show-hide-all:not(.open) .snf-font-arrow-up {
display: none;
}
.instructions .line-btn.open .snf-angle-down {
display: none;
}
.instructions .line-btn:not(.open) .snf-angle-up {
display: none;
}
\ No newline at end of file
......@@ -229,20 +229,10 @@
.show-hide-all {
span.snf-font-arrow-up {
@extend .snf-arrow-up;
display: none;
padding: 0;
}
span.snf-font-arrow-down {
@extend .snf-arrow-down;
display: inline;
padding: 0;
}
&.open {
.snf-font-arrow-up {
display: inline;
}
.snf-font-arrow-down {
display: none;
}
}
}
......@@ -4,22 +4,24 @@ $filter-height: 30px;
.filters-area {
margin-bottom: $navbar-height - $filter-margin;
}
.filters {
margin-left: $sidebar-width + 30px;
@media (max-width: $screen-lg-min) {
margin: 0 $filter-margin $filter-margin 0;
}
&.no-margin-left {
margin-left: 0;
}
a:focus, input:focus {
outline: none;
}
}
.filters .badge {
margin-left: 6px;
opacity: 0.9;
padding: 2px 9px;
}
.filters ul.nav a {
padding-bottom: 10px;
.badge {
margin-left: 6px;
opacity: 0.9;
padding: 2px 9px;
}
ul.nav a {
padding-bottom: 10px;
}
}
.filter {
......@@ -42,10 +44,28 @@ $filter-height: 30px;
background: transparent;
font-weight: normal;
margin: 0;
&>a {
.selected-value {
margin-left: 4px;
}
.arrow {
font-weight: bold;
}
}
&.open {
a {
text-decoration: none;
color: $filter-font-color;
}
}
a {
color: $filter-font-color;
}
}
.dropdown-menu {
.dropdown-menu, .dropdown-list {
background: $filter-bg;
margin: 0;
width: auto;
> .active > a{
background: $filter-active-bg;
}
......@@ -53,6 +73,13 @@ $filter-height: 30px;
background: $filter-hover-bg;
color: $filter-hover-color;
}
a {
span {
margin-right: 6px;
}
padding-left: 12px;
padding-right: 12px;
}
}
input {
border: 0 none;
......@@ -63,47 +90,21 @@ $filter-height: 30px;
font-weight: normal;
color: $filter-font-color;
}
}
.filter-dropdown {
.dropdown {
&>a {
.selected-value {
margin-left: 4px;
}
.arrow {
font-weight: bold;
}
}
&.open {
a {
text-decoration: none;
color: $filter-font-color;
}
}
a {
color: $filter-font-color;
}
.dropdown-menu {
width: auto;
a {
span {
margin-right: 6px;
}
padding-left: 12px;
padding-right: 12px;
}
}
.dropdown-list > li > a {
display: block;
padding: 3px 20px;
clear: both;
font-weight: normal;
line-height: 1.42857;
color: #303030; // ?
white-space: nowrap;
}
}
.filters.subnav-fixed {
top: $navbar-height;
}
.input-with-btn {
border-width: 0px;
background-color: transparent;
display: inline;
input {
@media screen and (min-width: 400px) {
width: 200px;
......@@ -124,24 +125,18 @@ $filter-height: 30px;
border: 1px solid $filter-border-color;
margin-bottom: 0.6em;
}
.filter-error {
word-wrap: break-word;
}
.error-sign {
display: block;
opacity: 0;
position: static;
display: inline-block;
margin-right: 6px;
margin-left: 6;
margin-left: 10px;
vertical-align: bottom;
}
.form-group, .filter-error, .instructions {
margin-left: $sidebar-width + 30px;
@media (max-width: $screen-lg-min) {
margin: 0 $filter-margin $filter-margin 0;
}
}
&.no-margin-left .form-group, &.no-margin-left .filter-error, &.no-margin-left .instructions {
margin-left: 0;
}
.instructions {
margin-top: 0.6em;
......@@ -166,6 +161,55 @@ $filter-height: 30px;
}
.filter.invisible {
.filter:not(.visible-filter):not(.visible-filter-fade) {
display: none;
}
\ No newline at end of file
opacity: 0;
}
.visible-filter-fade {
opacity: 1;
transition: opacity 0.5s;
}
.filters .filters-list {
border-radius: 15px;
background: $btn-line-bg;
border: 1px solid $filter-border-color-alt;
height: 28px;
&>a {
color: $btn-line-border;
line-height: 28px;
font-weight: bold;
padding: 8px 7px;
background: transparent;
}
.popover {
padding: 0;
}
.popover-content {
padding: 0;
}
.popover ul {