Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
synnefo
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
itminedu
synnefo
Commits
b972ec61
Commit
b972ec61
authored
Jan 20, 2014
by
Giorgos Korfiatis
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
astakos: Refactor resource-modify
Remove interactive operations, rename default-quota to base-default.
parent
58f44970
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
44 additions
and
142 deletions
+44
-142
docs/admin-guide.rst
docs/admin-guide.rst
+2
-2
docs/quick-install-admin-guide.rst
docs/quick-install-admin-guide.rst
+1
-1
snf-astakos-app/astakos/im/management/commands/resource-modify.py
...kos-app/astakos/im/management/commands/resource-modify.py
+19
-114
snf-astakos-app/astakos/im/register.py
snf-astakos-app/astakos/im/register.py
+10
-13
snf-astakos-app/astakos/scripts/snf-component-register
snf-astakos-app/astakos/scripts/snf-component-register
+1
-1
snf-deploy/snfdeploy/components.py
snf-deploy/snfdeploy/components.py
+1
-1
snf-deploy/snfdeploy/fabfile.py
snf-deploy/snfdeploy/fabfile.py
+10
-10
No files found.
docs/admin-guide.rst
View file @
b972ec61
...
...
@@ -327,7 +327,7 @@ To inspect current default base quota limits, run::
You
can
modify
the
default
base
quota
limit
for
all
future
users
with
::
#
snf
-
manage
resource
-
modify
<
resource_name
>
--
default
-
quota
<
value
>
#
snf
-
manage
resource
-
modify
<
resource_name
>
--
base
-
default
<
value
>
Set
base
quota
for
individual
users
```````````````````````````````````
...
...
@@ -363,7 +363,7 @@ in ``20-snf-astakos-app-settings.conf`` set::
You
can
change
the
maximum
allowed
number
of
pending
project
applications
per
user
with
::
#
snf
-
manage
resource
-
modify
astakos
.
pending_app
--
default
-
quota
<
number
>
#
snf
-
manage
resource
-
modify
astakos
.
pending_app
--
base
-
default
<
number
>
You
can
also
set
a
user
-
specific
limit
with
::
...
...
docs/quick-install-admin-guide.rst
View file @
b972ec61
...
...
@@ -912,7 +912,7 @@ resource.
..
code
-
block
::
console
#
snf
-
manage
resource
-
modify
--
default
-
quota
-
interactive
#
snf
-
manage
resource
-
modify
cyclades
.
vm
--
base
-
default
2
Setting
Resource
Visibility
---------------------------
...
...
snf-astakos-app/astakos/im/management/commands/resource-modify.py
View file @
b972ec61
# Copyright 2013 GRNET S.A. All rights reserved.
# Copyright 2013
, 2014
GRNET S.A. All rights reserved.
#
# Redistribution and use in source and binary forms, with or
# without modification, are permitted provided that the following
...
...
@@ -33,12 +33,11 @@
from
optparse
import
make_option
from
django.core.management.base
import
BaseCommand
,
CommandError
from
django.utils
import
simplejson
as
json
from
snf_django.management
import
utils
from
astakos.im.models
import
Resource
from
astakos.im
.register
import
update_resources
from
._common
import
s
how_resource_value
,
s
tyle_options
,
check_style
,
units
from
astakos.im
import
register
from
._common
import
style_options
,
check_style
,
units
class
Command
(
BaseCommand
):
...
...
@@ -46,20 +45,9 @@ class Command(BaseCommand):
help
=
"Modify a resource's default base quota and boolean flags."
option_list
=
BaseCommand
.
option_list
+
(
make_option
(
'--
default-quota
'
,
make_option
(
'--
base-default
'
,
metavar
=
'<limit>'
,
help
=
"Specify default base quota"
),
make_option
(
'--default-quota-interactive'
,
action
=
'store_true'
,
default
=
None
,
help
=
(
"Prompt user to change default base quota. "
"If no resource is given, prompts for all "
"resources."
)),
make_option
(
'--default-quota-from-file'
,
metavar
=
'<limits_file.json>'
,
help
=
(
"Read default base quota from a file. "
"File should contain a json dict mapping resource "
"names to limits"
)),
make_option
(
'--unit-style'
,
default
=
'mb'
,
help
=
(
"Specify display unit for resource values "
...
...
@@ -74,11 +62,12 @@ class Command(BaseCommand):
def
handle
(
self
,
*
args
,
**
options
):
resource_name
=
args
[
0
]
if
len
(
args
)
>
0
else
None
if
resource_name
is
None
:
raise
CommandError
(
"Please provide a resource name."
)
resource
=
self
.
get_resource
(
resource_name
)
actions
=
{
'default_quota'
:
self
.
change_limit
,
'default_quota_interactive'
:
self
.
change_interactive
,
'default_quota_from_file'
:
self
.
change_from_file
,
'base_default'
:
self
.
change_base_default
,
'api_visible'
:
self
.
set_api_visible
,
'ui_visible'
:
self
.
set_ui_visible
,
}
...
...
@@ -87,44 +76,29 @@ class Command(BaseCommand):
for
(
key
,
value
)
in
options
.
items
()
if
key
in
actions
and
value
is
not
None
]
if
len
(
opts
)
!=
1
:
raise
CommandError
(
"Please provide exactly one of the options: "
"--default-quota, --default-quota-interactive, "
"--default-quota-from-file, "
"--api-visible, --ui-visible."
)
self
.
unit_style
=
options
[
'unit_style'
]
check_style
(
self
.
unit_style
)
key
,
value
=
opts
[
0
]
for
key
,
value
in
opts
:
action
=
actions
[
key
]
action
(
resource_name
,
value
)
def
set_api_visible
(
self
,
resource_name
,
allow
):
if
resource_name
is
None
:
raise
CommandError
(
"Please provide a resource name."
)
action
(
resource
,
value
)
def
set_api_visible
(
self
,
resource
,
allow
):
try
:
allow
=
utils
.
parse_bool
(
allow
)
except
ValueError
:
raise
CommandError
(
"Expecting a boolean value."
)
resource
=
self
.
get_resource
(
resource_name
)
resource
.
api_visible
=
allow
if
not
allow
and
resource
.
ui_visible
:
self
.
stderr
.
write
(
"Also resetting 'ui_visible' for consistency.
\n
"
)
resource
.
ui_visible
=
False
resource
.
save
()
def
set_ui_visible
(
self
,
resource_name
,
allow
):
if
resource_name
is
None
:
raise
CommandError
(
"Please provide a resource name."
)
def
set_ui_visible
(
self
,
resource
,
allow
):
try
:
allow
=
utils
.
parse_bool
(
allow
)
except
ValueError
:
raise
CommandError
(
"Expecting a boolean value."
)
resource
=
self
.
get_resource
(
resource_name
)
resource
.
ui_visible
=
allow
if
allow
and
not
resource
.
api_visible
:
self
.
stderr
.
write
(
"Also setting 'api_visible' for consistency.
\n
"
)
...
...
@@ -138,83 +112,14 @@ class Command(BaseCommand):
raise
CommandError
(
"Resource %s does not exist."
%
resource_name
)
def
change_limit
(
self
,
resource_name
,
limit
):
if
resource_name
is
None
:
raise
CommandError
(
"Please provide a resource name."
)
resource
=
self
.
get_resource
(
resource_name
)
self
.
change_resource_limit
(
resource
,
limit
)
def
change_from_file
(
self
,
resource_name
,
filename
):
with
open
(
filename
)
as
file_data
:
try
:
config
=
json
.
load
(
file_data
)
except
json
.
JSONDecodeError
:
raise
CommandError
(
"Malformed JSON file."
)
if
not
isinstance
(
config
,
dict
):
raise
CommandError
(
"Malformed JSON file."
)
self
.
change_with_conf
(
resource_name
,
config
)
def
change_with_conf
(
self
,
resource_name
,
config
):
if
resource_name
is
None
:
resources
=
Resource
.
objects
.
all
().
select_for_update
()
else
:
resources
=
[
self
.
get_resource
(
resource_name
)]
updates
=
[]
for
resource
in
resources
:
limit
=
config
.
get
(
resource
.
name
)
if
limit
is
not
None
:
def
change_base_default
(
self
,
resource
,
limit
):
limit
=
self
.
parse_limit
(
limit
)
updates
.
append
((
resource
,
limit
))
if
updates
:
update_resources
(
updates
)
def
change_interactive
(
self
,
resource_name
,
_placeholder
):
if
resource_name
is
None
:
resources
=
Resource
.
objects
.
all
().
select_for_update
()
else
:
resources
=
[
self
.
get_resource
(
resource_name
)]
updates
=
[]
for
resource
in
resources
:
self
.
stdout
.
write
(
"Resource '%s' (%s)
\n
"
%
(
resource
.
name
,
resource
.
desc
))
value
=
show_resource_value
(
resource
.
uplimit
,
resource
.
name
,
self
.
unit_style
)
self
.
stdout
.
write
(
"Current limit: %s
\n
"
%
value
)
while
True
:
self
.
stdout
.
write
(
"New limit (leave blank to keep current): "
)
try
:
response
=
raw_input
()
except
EOFError
:
self
.
stderr
.
write
(
"Aborted.
\n
"
)
exit
()
if
response
==
""
:
break
else
:
try
:
value
=
units
.
parse
(
response
)
except
units
.
ParseError
:
continue
updates
.
append
((
resource
,
value
))
break
if
updates
:
self
.
stderr
.
write
(
"Updating...
\n
"
)
update_resources
(
updates
)
register
.
update_base_default
(
resource
,
limit
)
def
parse_limit
(
self
,
limit
):
try
:
if
isinstance
(
limit
,
(
int
,
long
)):
return
limit
if
isinstance
(
limit
,
basestring
):
return
units
.
parse
(
limit
)
raise
units
.
ParseError
()
except
units
.
ParseError
:
m
=
(
"
Limit should be an integer, optionally followed by a unit,
"
" or 'inf'."
)
m
=
(
"
Quota limit should be an integer,
"
"
optionally followed by a unit,
or 'inf'."
)
raise
CommandError
(
m
)
def
change_resource_limit
(
self
,
resource
,
limit
):
limit
=
self
.
parse_limit
(
limit
)
update_resources
([(
resource
,
limit
)])
snf-astakos-app/astakos/im/register.py
View file @
b972ec61
...
...
@@ -114,19 +114,16 @@ def add_resource(resource_dict):
return
r
,
exists
def
update_resources
(
updates
):
resources
=
[]
for
resource
,
uplimit
in
updates
:
resources
.
append
(
resource
)
old_uplimit
=
resource
.
uplimit
if
uplimit
==
old_uplimit
:
logger
.
info
(
"Resource %s has limit %s; no need to update."
%
(
resource
.
name
,
uplimit
))
def
update_base_default
(
resource
,
base_default
):
old_base_default
=
resource
.
uplimit
if
base_default
==
old_base_default
:
logger
.
info
(
"Resource %s has base default %s; no need to update."
%
(
resource
.
name
,
base_default
))
else
:
resource
.
uplimit
=
uplimi
t
resource
.
uplimit
=
base_defaul
t
resource
.
save
()
logger
.
info
(
"Updated resource %s with limi
t %s."
%
(
resource
.
name
,
uplimi
t
))
logger
.
info
(
"Updated resource %s with base defaul
t %s."
%
(
resource
.
name
,
base_defaul
t
))
def
resources_to_dict
(
resources
):
...
...
snf-astakos-app/astakos/scripts/snf-component-register
View file @
b972ec61
...
...
@@ -109,7 +109,7 @@ fi
if
[
$changed
-eq
1
]
;
then
echo
'Done with registering services and their resources.'
echo
'Now run '
echo
" snf-manage resource-modify
--limit-interactive
"
echo
" snf-manage resource-modify
<resource_name> --base-default <limit>
"
echo
'to specify the default base quota for each resource provided by'
\
'the services.'
fi
snf-deploy/snfdeploy/components.py
View file @
b972ec61
...
...
@@ -643,7 +643,7 @@ class Astakos(SynnefoComponent):
]
def
set_default_quota
(
self
):
cmd
=
"snf-manage resource-modify --
default-quota
"
cmd
=
"snf-manage resource-modify --
base-default
"
return
[
"%s 40G pithos.diskspace"
%
cmd
,
"%s 2 astakos.pending_app"
%
cmd
,
...
...
snf-deploy/snfdeploy/fabfile.py
View file @
b972ec61
...
...
@@ -1256,16 +1256,16 @@ def import_services():
debug
(
env
.
host
,
" * Setting default quota..."
)
cmd
=
"""
snf-manage resource-modify --
default-quota
40G pithos.diskspace
snf-manage resource-modify --
default-quota
2 astakos.pending_app
snf-manage resource-modify --
default-quota
4 cyclades.vm
snf-manage resource-modify --
default-quota
40G cyclades.disk
snf-manage resource-modify --
default-quota
16G cyclades.total_ram
snf-manage resource-modify --
default-quota
8G cyclades.ram
snf-manage resource-modify --
default-quota
32 cyclades.total_cpu
snf-manage resource-modify --
default-quota
16 cyclades.cpu
snf-manage resource-modify --
default-quota
4 cyclades.network.private
snf-manage resource-modify --
default-quota
4 cyclades.floating_ip
snf-manage resource-modify --
base-default
40G pithos.diskspace
snf-manage resource-modify --
base-default
2 astakos.pending_app
snf-manage resource-modify --
base-default
4 cyclades.vm
snf-manage resource-modify --
base-default
40G cyclades.disk
snf-manage resource-modify --
base-default
16G cyclades.total_ram
snf-manage resource-modify --
base-default
8G cyclades.ram
snf-manage resource-modify --
base-default
32 cyclades.total_cpu
snf-manage resource-modify --
base-default
16 cyclades.cpu
snf-manage resource-modify --
base-default
4 cyclades.network.private
snf-manage resource-modify --
base-default
4 cyclades.floating_ip
"""
try_run
(
cmd
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment