Skip to content

Commit 2ace3b3

Browse files
committed
fixup
1 parent a7dd06b commit 2ace3b3

2 files changed

Lines changed: 33 additions & 27 deletions

File tree

rootfs/helmbroker/broker.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
import shutil
33
from typing import Union, List
44
from openbrokerapi import api
5-
from openbrokerapi.api import ServiceBroker
6-
from openbrokerapi.catalog import ServicePlan
5+
from openbrokerapi.api import ServiceBroker, ErrInstanceAlreadyExists, ErrAsyncRequired
76
from openbrokerapi.service_broker import *
87

98
from .meta import InstanceMeta
@@ -28,18 +27,17 @@ def provision(self,
2827
**kwargs) -> ProvisionedServiceSpec:
2928
instance_path = get_instance_path(instance_id)
3029
if os.path.exists(instance_path):
31-
return ProvisionedServiceSpec(
32-
state=ProvisionState.IDENTICAL_ALREADY_EXISTS
33-
)
30+
raise ErrInstanceAlreadyExists("Instance %s already exists" % instance_id)
31+
if not async_allowed:
32+
raise ErrAsyncRequired()
3433
os.makedirs(instance_path, exist_ok=True)
3534
chart_path, plan_path =get_chart_path(instance_id), get_plan_path(instance_id)
3635
addon_chart_path, addon_plan_path = get_addon_path(details.service_id, details.plan_id)
3736
shutil.copy(addon_chart_path, chart_path)
3837
shutil.copy(addon_plan_path, plan_path)
39-
if async_allowed:
40-
provision.delay(instance_id, details, async_allowed, **kwargs)
41-
return ProvisionedServiceSpec(state=ProvisionState.IS_ASYNC)
42-
return provision(instance_id, details, async_allowed, **kwargs)
38+
provision.delay(instance_id, details, async_allowed, **kwargs)
39+
return ProvisionedServiceSpec(state=ProvisionState.IS_ASYNC)
40+
4341

4442
def get_binding(self,
4543
instance_id: str,
@@ -59,17 +57,16 @@ def bind(self,
5957
if not (InstanceMeta.load(instance_id) and
6058
InstanceMeta.load(instance_id)['last_operation']['state'] == 'Ready'):
6159
return Binding(state="status error: this instance is not ready")
62-
60+
if not async_allowed:
61+
raise ErrAsyncRequired()
6362
instance_path = get_instance_path(instance_id)
6463
if os.path.exists(f'{instance_path}/bind.yaml'):
6564
return Binding(state=BindState.IDENTICAL_ALREADY_EXISTS)
6665
chart_path, plan_path =get_chart_path(instance_id), get_plan_path(instance_id)
6766
addon_name = get_addon_name(details.service_id)
6867
shutil.copy(f'{plan_path}/bind.yaml', f'{chart_path}/{addon_name}/templates')
69-
if async_allowed:
70-
bind.delay(instance_id, binding_id, details, async_allowed, **kwargs)
71-
return Binding(state=BindState.IS_ASYNC)
72-
return bind(instance_id, binding_id, details, async_allowed, **kwargs)
68+
bind.delay(instance_id, binding_id, details, async_allowed, **kwargs)
69+
return Binding(state=BindState.IS_ASYNC)
7370

7471
def unbind(self,
7572
instance_id: str,

rootfs/helmbroker/tasks.py

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
11
import os
2-
import shutil
2+
import time
33
from .utils import command, get_plan_path, get_chart_path, \
44
get_or_create_instance_meta, get_or_create_binding_meta
5+
from .meta import dump_instance_meta
56
from openbrokerapi.service_broker import *
67

78

8-
def provision(instance_id: str,
9-
details: ProvisionDetails,
10-
async_allowed: bool,
11-
**kwargs) -> ProvisionedServiceSpec:
9+
def provision(instance_id: str, details: ProvisionDetails):
10+
data = {
11+
"id": instance_id,
12+
"details": {
13+
"service_id": details.service_id,
14+
"plan_id" : details.plan_id,
15+
"context" : details.context,
16+
"parameters": details.parameters,
17+
},
18+
"last_operation": {
19+
"state": OperationState.IN_PROGRESS,
20+
"description": "%s in progress at %s" % (instance_id, time.time())
21+
}
22+
}
23+
dump_instance_meta(data)
1224
chart_path = get_chart_path(instance_id)
1325
values_file = os.path.join(get_plan_path(instance_id), "values.yaml")
1426
args = [
@@ -18,22 +30,19 @@ def provision(instance_id: str,
1830
"--namespace",
1931
details.context["namespace"],
2032
"--create-namespace",
21-
"--output",
2233
"--wait",
2334
"--timeout 30m0s"
2435
"-f",
2536
values_file
2637
]
38+
2739
status, output = command("helm", *args)
2840
if status != 0:
29-
return ProvisionedServiceSpec(state="status error: %s" % status, operation=output)
41+
data["last_operation"]["state"] = OperationState.FAILED
42+
data["last_operation"]["description"] = output
3043
else:
31-
config = get_or_create_instance_meta(instance_id)
32-
return ProvisionedServiceSpec(
33-
dashboard_url=config.get("dashboard_url", None),
34-
state=ProvisionState.SUCCESSFUL_CREATED,
35-
operation=config.get("operation", None),
36-
)
44+
data["last_operation"]["state"] = OperationState.SUCCEEDED
45+
data["last_operation"]["description"] = "succeeded at %s" % time.time()
3746

3847

3948
def bind(instance_id: str,

0 commit comments

Comments
 (0)