Skip to content

Commit ad9bddd

Browse files
committed
fix(helmbroker): fix bind error when parameters
1 parent c6c2c96 commit ad9bddd

3 files changed

Lines changed: 36 additions & 32 deletions

File tree

rootfs/helmbroker/broker.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def provision(self,
6868
"service_id": details.service_id,
6969
"plan_id": details.plan_id,
7070
"context": details.context,
71-
"parameters": details.parameters,
71+
"parameters": details.parameters if details.parameters is not None else {}, # noqa
7272
},
7373
"last_operation": {
7474
"state": OperationState.IN_PROGRESS.value,
@@ -150,6 +150,7 @@ def update(self,
150150
raise ErrBadRequest(
151151
msg="Instance %s does not updateable" % instance_id)
152152
allow_paras = get_addon_allow_paras(details.service_id)
153+
logger.info(f"service instance update parameters: {details.parameters}")
153154
not_allow_keys = verify_parameters(allow_paras, details.parameters)
154155
if not_allow_keys:
155156
raise ErrBadRequest(
@@ -164,8 +165,6 @@ def update(self,
164165
details.service_id, details.plan_id)
165166
# add the new plan
166167
shutil.copytree(addon_plan_path, plan_path)
167-
logger.info(f"service update parameters: {details.parameters}")
168-
logger.info(f"service update parameters type: {type(details.parameters)}") # noqa
169168
update.delay(instance_id, details)
170169
return UpdateServiceSpec(is_async=True)
171170

rootfs/helmbroker/tasks.py

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import time
33
import shutil
44
import yaml
5-
import base64
65
import logging
76

87
from openbrokerapi.service_broker import ProvisionDetails, OperationState, \
@@ -11,7 +10,7 @@
1110
from .celery import app
1211
from .utils import get_plan_path, get_chart_path, get_cred_value, \
1312
InstanceLock, dump_instance_meta, dump_binding_meta, load_instance_meta, \
14-
get_instance_file, helm, dump_raw_values
13+
get_instance_file, helm, format_paras_to_helm_args
1514

1615
logger = logging.getLogger(__name__)
1716

@@ -47,15 +46,7 @@ def provision(instance_id: str, details: ProvisionDetails):
4746
f"fullnameOverride=helmbroker-{details.context['instance_name']}"
4847
]
4948
logger.debug(f"helm install parameters :{details.parameters}")
50-
if details.parameters and "rawValues" in details.parameters \
51-
and details.parameters.get("rawValues", ""):
52-
values = str(base64.b64decode(details.parameters["rawValues"]), "utf-8") # noqa
53-
raw_values_file = dump_raw_values(instance_id, values)
54-
args.extend(["-f", raw_values_file])
55-
details.parameters.pop("rawValues")
56-
if details.parameters:
57-
for k, v in details.parameters.items():
58-
args.extend(["--set", f"{k}={v}"])
49+
args = format_paras_to_helm_args(instance_id, details.parameters, args)
5950
logger.debug(f"helm install args:{args}")
6051
status, output = helm(instance_id, *args)
6152
data = load_instance_meta(instance_id)
@@ -80,12 +71,12 @@ def update(instance_id: str, details: UpdateDetails):
8071
if details.context:
8172
data['details']['context'] = details.context
8273
if details.parameters:
83-
data['details']['parameters'] = details.parameters
84-
data['last_operation'] = {
85-
"state": OperationState.IN_PROGRESS.value,
86-
"description": (
87-
"update %s in progress at %s" % (instance_id, time.time()))
88-
}
74+
paras = data['details']['parameters']
75+
paras.update(details.parameters)
76+
# remove the key which value is null
77+
data['details']['parameters'] = {k: v for k, v in paras.items() if v != ""} # noqa
78+
data['last_operation']["state"] = OperationState.IN_PROGRESS.value
79+
data['last_operation']["description"] = "update %s in progress at %s" % (instance_id, time.time())
8980
dump_instance_meta(instance_id, data)
9081
chart_path = get_chart_path(instance_id)
9182
values_file = os.path.join(get_plan_path(instance_id), "values.yaml")
@@ -105,16 +96,9 @@ def update(instance_id: str, details: UpdateDetails):
10596
"--set",
10697
f"fullnameOverride=helmbroker-{details.context['instance_name']}"
10798
]
108-
logger.info(f"helm upgrade parameters: {details.parameters}")
109-
if details.parameters and "rawValues" in details.parameters \
110-
and details.parameters.get("rawValues", ""):
111-
values = str(base64.b64decode(details.parameters["rawValues"]), "utf-8") # noqa
112-
raw_values_file = dump_raw_values(instance_id, values)
113-
args.extend(["-f", raw_values_file])
114-
details.parameters.pop("rawValues")
115-
if details.parameters:
116-
for k, v in details.parameters.items():
117-
args.extend(["--set", f"{k}={v}"])
99+
paras = data['details']['parameters']
100+
logger.info(f"helm upgrade parameters: {paras}")
101+
args = format_paras_to_helm_args(instance_id, paras, args)
118102
logger.info(f"helm upgrade args:{args}")
119103
status, output = helm(instance_id, *args)
120104
if status != 0:
@@ -156,6 +140,11 @@ def bind(instance_id: str,
156140
"--set",
157141
f"fullnameOverride=helmbroker-{details.context['instance_name']}"
158142
]
143+
instance_data = load_instance_meta(instance_id)
144+
paras = instance_data["details"]["parameters"]
145+
logger.info(f"helm template parameters: {paras}")
146+
args = format_paras_to_helm_args(instance_id, paras, args)
147+
logger.info(f"helm template args: {args}")
159148
status, templates = helm(instance_id, *args) # output: templates.yaml
160149
if status != 0:
161150
data["last_operation"]["state"] = OperationState.FAILED.value

rootfs/helmbroker/utils.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def helm(instance_id, *args, output_type="text"):
8080
def load_instance_meta(instance_id):
8181
file = get_instance_file(instance_id)
8282
with open(file) as f:
83-
data = json.load(f)
83+
data = json.loads(f.read())
8484
validate(instance=data, schema=INSTANCE_META_SCHEMA)
8585
return data
8686

@@ -268,7 +268,6 @@ def get_secret_key_value(ns, secret_ref):
268268
]
269269
status, output = command("kubectl", *args)
270270
if status == 0:
271-
import base64
272271
output = base64.b64decode(output).decode()
273272
return status, output
274273

@@ -339,3 +338,20 @@ def raw_values_format_keys(raw_values, prefix=''):
339338
else:
340339
keys.append(new_prefix)
341340
return keys
341+
342+
343+
def format_paras_to_helm_args(instance_id, parameters, args):
344+
"""
345+
346+
"""
347+
params = copy.deepcopy(parameters)
348+
if params and "rawValues" in params \
349+
and params.get("rawValues", ""):
350+
values = str(base64.b64decode(params["rawValues"]), "utf-8") # noqa
351+
raw_values_file = dump_raw_values(instance_id, values)
352+
args.extend(["-f", raw_values_file])
353+
params.pop("rawValues")
354+
if params:
355+
for k, v in params.items():
356+
args.extend(["--set", f"{k}={v}"])
357+
return args

0 commit comments

Comments
 (0)