Add option to overwrite when adding template

Add --overwrite to the cli as an option
and a parameter to the api

Change-Id: I76942f4b4ebab64fdb51f5a727cb72c40d7d11a5
This commit is contained in:
Eyal 2019-06-06 14:28:33 +03:00
parent 7c76bc764b
commit 5d00aa0e89
3 changed files with 44 additions and 0 deletions

View File

@ -1071,6 +1071,7 @@ Query Parameters
- path (string, required) - the path to template file or directory
- type (string, optional) - template type (standard,definition,equivalence)
- overwrite (boolean, optional) - if template already exists will overwrite it
Request Body
============

View File

@ -0,0 +1,3 @@
---
features:
- Added support to overwrite existing template when adding one.

View File

@ -11,7 +11,10 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from datetime import timedelta
import json
import time
import pecan
from pytz import utc
@ -28,6 +31,8 @@ from vitrage.common.exception import VitrageError
LOG = log.getLogger(__name__)
ONE_HOUR = int(timedelta(hours=1).total_seconds())
@profiler.trace_cls("template controller",
info={}, hide_args=False, trace_private=False)
@ -93,6 +98,16 @@ class TemplateController(RootRestController):
{})
template_type = kwargs['template_type']
params = kwargs.get('params')
overwrite = kwargs.get('overwrite')
if overwrite:
names = [
template[1]['metadata']['name']
for template in templates
]
uuids = self._to_uuids(names)
self._delete_templates_and_wait(uuids)
try:
return self._add(templates, template_type, params)
@ -218,6 +233,21 @@ class TemplateController(RootRestController):
return template.uuid
return val
def _delete_templates_and_wait(self, uuids):
self._delete(uuids)
def check_deleted():
for _id in uuids:
try:
self._show_template(_id)
except Exception: # if deleted we get exception
pass
else:
return False
return True
return wait_for_action_to_end(ONE_HOUR, check_deleted)
def is_uuid(val):
# unwrap the name or id
@ -226,3 +256,13 @@ def is_uuid(val):
if type(val) is list:
val, = val
return is_uuid_like(val)
def wait_for_action_to_end(timeout, func, **kwargs):
count = 0
while count < timeout:
if func(**kwargs):
return True
count += 1
time.sleep(1)
return False