Skip to content

Commit 4513c66

Browse files
committed
chore(helmbroker): verify parameters
1 parent d13002f commit 4513c66

2 files changed

Lines changed: 33 additions & 1 deletion

File tree

rootfs/helmbroker/broker.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from .utils import get_instance_path, get_chart_path, get_plan_path, \
1818
get_addon_path, get_addon_updateable, get_addon_bindable, InstanceLock, \
1919
load_instance_meta, load_binding_meta, dump_instance_meta, \
20-
load_addons_meta
20+
load_addons_meta, get_addon_allow_paras, verify_parameters
2121
from .tasks import provision, bind, deprovision, update
2222

2323
logger = logging.getLogger(__name__)
@@ -46,6 +46,11 @@ def provision(self,
4646
raise ErrInstanceAlreadyExists()
4747
if not async_allowed:
4848
raise ErrAsyncRequired()
49+
allow_paras = get_addon_allow_paras(details.service_id)
50+
not_allow_keys = verify_parameters(allow_paras, details.parameters)
51+
if not_allow_keys:
52+
raise ErrBadRequest(
53+
msg="Instance parameters %s does not allowed" % not_allow_keys)
4954
os.makedirs(instance_path, exist_ok=True)
5055
chart_path, plan_path = (
5156
get_chart_path(instance_id), get_plan_path(instance_id))
@@ -140,6 +145,11 @@ def update(self,
140145
if not is_plan_updateable:
141146
raise ErrBadRequest(
142147
msg="Instance %s does not updateable" % instance_id)
148+
allow_paras = get_addon_allow_paras(details.service_id)
149+
not_allow_keys = verify_parameters(allow_paras, details.parameters)
150+
if not_allow_keys:
151+
raise ErrBadRequest(
152+
msg="Instance parameters %s does not allowed" % not_allow_keys)
143153
if not async_allowed:
144154
raise ErrAsyncRequired()
145155
if details.plan_id is not None:

rootfs/helmbroker/utils.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,11 @@ def get_addon_bindable(service_id):
217217
return service.get('bindable', False)
218218

219219

220+
def get_addon_allow_parameters(service_id):
221+
service = get_addon_meta(service_id)
222+
return service.get('allow_parameters', [])
223+
224+
220225
def get_cred_value(ns, source):
221226
if source.get('serviceRef'):
222227
return get_service_key_value(ns, source['serviceRef'])
@@ -271,3 +276,20 @@ def __exit__(self, exc_type, exc_value, traceback):
271276
def __del__(self):
272277
if hasattr(self, "fileno"):
273278
fcntl.flock(self.fileno, fcntl.LOCK_UN)
279+
280+
281+
def verify_parameters(allow_paras, paras):
282+
"""verify parameters allowed or not"""
283+
if not paras or not allow_paras:
284+
return ""
285+
else:
286+
not_allow_paras = []
287+
allow_para_keys = [allow_para["name"] + "." for allow_para in allow_paras] # noqa
288+
para_keys = [k + "." for k in paras]
289+
for para_key in para_keys:
290+
for allow_para_key in allow_para_keys:
291+
# sub string Inclusion relationship
292+
if not para_key.startswith(allow_para_key):
293+
not_allow_paras.append(para_key)
294+
not_allow_keys = ",".split(not_allow_paras)
295+
return not_allow_keys

0 commit comments

Comments
 (0)