From 403d89ccff7e6e30f12ffdcbabc384c407d749d8 Mon Sep 17 00:00:00 2001
From: Giorgos Korfiatis <gkorf@grnet.gr>
Date: Mon, 20 Jan 2014 14:57:57 +0200
Subject: [PATCH] astakos: Modify resource project default

Add support in resource-modify for changing the project_default.
---
 .../im/management/commands/resource-modify.py | 12 +++++--
 snf-astakos-app/astakos/im/register.py        | 12 +++++++
 snf-deploy/snfdeploy/components.py            | 34 ++++++++++++-------
 3 files changed, 44 insertions(+), 14 deletions(-)

diff --git a/snf-astakos-app/astakos/im/management/commands/resource-modify.py b/snf-astakos-app/astakos/im/management/commands/resource-modify.py
index 5d506d06b..91233a67b 100644
--- a/snf-astakos-app/astakos/im/management/commands/resource-modify.py
+++ b/snf-astakos-app/astakos/im/management/commands/resource-modify.py
@@ -42,12 +42,15 @@ from ._common import style_options, check_style, units
 
 class Command(BaseCommand):
     args = "<resource name>"
-    help = "Modify a resource's default base quota and boolean flags."
+    help = "Modify a resource's quota defaults and boolean flags."
 
     option_list = BaseCommand.option_list + (
         make_option('--base-default',
                     metavar='<limit>',
-                    help="Specify default base quota"),
+                    help="Specify default quota for base projects"),
+        make_option('--project-default',
+                    metavar='<limit>',
+                    help="Specify default quota for non-base projects"),
         make_option('--unit-style',
                     default='mb',
                     help=("Specify display unit for resource values "
@@ -68,6 +71,7 @@ class Command(BaseCommand):
 
         actions = {
             'base_default': self.change_base_default,
+            'project_default': self.change_project_default,
             'api_visible': self.set_api_visible,
             'ui_visible': self.set_ui_visible,
         }
@@ -116,6 +120,10 @@ class Command(BaseCommand):
         limit = self.parse_limit(limit)
         register.update_base_default(resource, limit)
 
+    def change_project_default(self, resource, limit):
+        limit = self.parse_limit(limit)
+        register.update_project_default(resource, limit)
+
     def parse_limit(self, limit):
         try:
             return units.parse(limit)
diff --git a/snf-astakos-app/astakos/im/register.py b/snf-astakos-app/astakos/im/register.py
index a4ab9138b..3eed90e7b 100644
--- a/snf-astakos-app/astakos/im/register.py
+++ b/snf-astakos-app/astakos/im/register.py
@@ -126,6 +126,18 @@ def update_base_default(resource, base_default):
                     % (resource.name, base_default))
 
 
+def update_project_default(resource, project_default):
+    old_project_default = resource.project_default
+    if project_default == old_project_default:
+        logger.info("Resource %s has project default %s; no need to update."
+                    % (resource.name, project_default))
+    else:
+        resource.project_default = project_default
+        resource.save()
+        logger.info("Updated resource %s with project default %s."
+                    % (resource.name, project_default))
+
+
 def resources_to_dict(resources):
     resource_dict = {}
     for r in resources:
diff --git a/snf-deploy/snfdeploy/components.py b/snf-deploy/snfdeploy/components.py
index f96d742b1..45173776a 100644
--- a/snf-deploy/snfdeploy/components.py
+++ b/snf-deploy/snfdeploy/components.py
@@ -643,18 +643,28 @@ class Astakos(SynnefoComponent):
             ]
 
     def set_default_quota(self):
-        cmd = "snf-manage resource-modify --base-default"
-        return [
-            "%s 40G pithos.diskspace" % cmd,
-            "%s 2 astakos.pending_app" % cmd,
-            "%s 4 cyclades.vm" % cmd,
-            "%s 40G cyclades.disk" % cmd,
-            "%s 16G cyclades.total_ram" % cmd,
-            "%s 8G cyclades.ram" % cmd,
-            "%s 32 cyclades.total_cpu" % cmd,
-            "%s 16 cyclades.cpu" % cmd,
-            "%s 4 cyclades.network.private" % cmd,
-            "%s 4 cyclades.floating_ip" % cmd,
+        cmd = "snf-manage resource-modify"
+        return [
+            "%s --base-default 40G pithos.diskspace" % cmd,
+            "%s --base-default 2 astakos.pending_app" % cmd,
+            "%s --base-default 4 cyclades.vm" % cmd,
+            "%s --base-default 40G cyclades.disk" % cmd,
+            "%s --base-default 16G cyclades.total_ram" % cmd,
+            "%s --base-default 8G cyclades.ram" % cmd,
+            "%s --base-default 32 cyclades.total_cpu" % cmd,
+            "%s --base-default 16 cyclades.cpu" % cmd,
+            "%s --base-default 4 cyclades.network.private" % cmd,
+            "%s --base-default 4 cyclades.floating_ip" % cmd,
+            "%s --project-default 0 pithos.diskspace" % cmd,
+            "%s --project-default 0 astakos.pending_app" % cmd,
+            "%s --project-default 0 cyclades.vm" % cmd,
+            "%s --project-default 0 cyclades.disk" % cmd,
+            "%s --project-default inf cyclades.total_ram" % cmd,
+            "%s --project-default 0 cyclades.ram" % cmd,
+            "%s --project-default inf cyclades.total_cpu" % cmd,
+            "%s --project-default 0 cyclades.cpu" % cmd,
+            "%s --project-default 0 cyclades.network.private" % cmd,
+            "%s --project-default 0 cyclades.floating_ip" % cmd,
             ]
 
     def modify_all_quota(self):
-- 
GitLab