Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
itminedu
kamaki
Commits
c788a761
Commit
c788a761
authored
Sep 30, 2013
by
Stavros Sachtouris
Browse files
Add -w/--wait to server firewall set
Refs: #4298
parent
c6a77104
Changes
2
Hide whitespace changes
Inline
Side-by-side
kamaki/cli/commands/cyclades.py
View file @
c788a761
...
...
@@ -39,7 +39,8 @@ from pydoc import pager
from
kamaki.cli
import
command
from
kamaki.cli.command_tree
import
CommandTree
from
kamaki.cli.utils
import
remove_from_items
,
filter_dicts_by_dict
from
kamaki.cli.errors
import
raiseCLIError
,
CLISyntaxError
,
CLIBaseUrlError
from
kamaki.cli.errors
import
(
raiseCLIError
,
CLISyntaxError
,
CLIBaseUrlError
,
CLIInvalidArgument
)
from
kamaki.clients.cyclades
import
CycladesClient
,
ClientError
from
kamaki.cli.argument
import
FlagArgument
,
ValueArgument
,
KeyValueArgument
from
kamaki.cli.argument
import
ProgressBarArgument
,
DateArgument
,
IntArgument
...
...
@@ -116,6 +117,15 @@ class _network_wait(_service_wait):
timeout
=
timeout
)
class
_firewall_wait
(
_service_wait
):
def
_wait
(
self
,
server_id
,
current_status
,
timeout
=
60
):
super
(
_firewall_wait
,
self
).
_wait
(
'Firewall of server'
,
server_id
,
self
.
client
.
wait_firewall
,
current_status
,
timeout
=
timeout
)
class
_init_cyclades
(
_command_init
):
@
errors
.
generic
.
all
@
addLogSettings
...
...
@@ -552,7 +562,8 @@ class server_firewall(_init_cyclades):
@
command
(
server_cmds
)
class
server_firewall_set
(
_init_cyclades
,
_optional_output_cmd
):
class
server_firewall_set
(
_init_cyclades
,
_optional_output_cmd
,
_firewall_wait
):
"""Set the firewall profile on virtual server public network
Values for profile:
- DISABLED: Shutdown firewall
...
...
@@ -560,13 +571,30 @@ class server_firewall_set(_init_cyclades, _optional_output_cmd):
- PROTECTED: Firewall in secure mode
"""
arguments
=
dict
(
wait
=
FlagArgument
(
'Wait server firewall to build'
,
(
'-w'
,
'--wait'
)),
timeout
=
IntArgument
(
'Set wait timeout in seconds (default: 60)'
,
'--timeout'
,
default
=
60
)
)
@
errors
.
generic
.
all
@
errors
.
cyclades
.
connection
@
errors
.
cyclades
.
server_id
@
errors
.
cyclades
.
firewall
def
_run
(
self
,
server_id
,
profile
):
self
.
_optional_output
(
self
.
client
.
set_firewall_profile
(
server_id
=
int
(
server_id
),
profile
=
(
'%s'
%
profile
).
upper
()))
if
self
[
'timeout'
]
and
not
self
[
'wait'
]:
raise
CLIInvalidArgument
(
'Invalid use of --timeout'
,
details
=
[
'Timeout is used only along with -w/--wait'
])
old_profile
=
self
.
client
.
get_firewall_profile
(
server_id
)
if
old_profile
.
lower
()
==
profile
.
lower
():
self
.
error
(
'Firewall of server %s: allready in status %s'
%
(
server_id
,
old_profile
))
else
:
self
.
_optional_output
(
self
.
client
.
set_firewall_profile
(
server_id
=
int
(
server_id
),
profile
=
(
'%s'
%
profile
).
upper
()))
if
self
[
'wait'
]:
self
.
_wait
(
server_id
,
old_profile
,
timeout
=
self
[
'timeout'
])
def
main
(
self
,
server_id
,
profile
):
super
(
self
.
__class__
,
self
).
_run
()
...
...
kamaki/clients/cyclades/__init__.py
View file @
c788a761
...
...
@@ -342,6 +342,8 @@ class CycladesClient(CycladesRestClient):
:param delay: time interval between retries
:max_wait: (int) timeout in secconds
:param wait_cb: if set a progressbar is used to show progress
:returns: (str) the new mode if succesfull, (bool) False if timed out
...
...
@@ -366,6 +368,8 @@ class CycladesClient(CycladesRestClient):
:param delay: time interval between retries
:max_wait: (int) timeout in secconds
:param wait_cb: if set a progressbar is used to show progress
:returns: (str) the new mode if succesfull, (bool) False if timed out
...
...
@@ -378,6 +382,30 @@ class CycladesClient(CycladesRestClient):
return
self
.
_wait
(
net_id
,
current_status
,
get_status
,
delay
,
max_wait
,
wait_cb
)
def
wait_firewall
(
self
,
server_id
,
current_status
=
'DISABLED'
,
delay
=
1
,
max_wait
=
100
,
wait_cb
=
None
):
"""Wait while the public network firewall status is current_status
:param server_id: integer (str or int)
:param current_status: (str) DISABLED | ENABLED | PROTECTED
:param delay: time interval between retries
:max_wait: (int) timeout in secconds
:param wait_cb: if set a progressbar is used to show progress
:returns: (str) the new mode if succesfull, (bool) False if timed out
"""
def
get_status
(
self
,
server_id
):
return
self
.
get_firewall_profile
(
server_id
),
None
return
self
.
_wait
(
server_id
,
current_status
,
get_status
,
delay
,
max_wait
,
wait_cb
)
def
get_floating_ip_pools
(
self
):
"""
:returns: (dict) {floating_ip_pools:[{name: ...}, ...]}
...
...
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