Skip to content

Commit 7d85a8e

Browse files
authored
Move DFX Beta implementation to GA (#30)
* Rework cdpy/df to use the 'service' nomenclature instead of 'environment' for DataFlow * Allow separate submission of a name, env_crn, or df_crn for filtering the list of enabled DataFlow services * Allow submission of an env_crn or df_crn for the description of a Dataflow Service, as you cannot know the df_crn during creation until it is actually created * Standardise on use of df_crn for the service crn in DataFlow to provide differentiation from the env crn and other crns in CDP * Add new service enablement parameters to the dfx enable_service call * Add new terminate option to the DFX disable_service call * Change delete_environment to reset_service to reflect new usage * Squelch 403 response on describing a recently deleted Dataflow Service while it is being cleaned up Signed-off-by: Daniel Chaffelson <chaffelson@gmail.com>
1 parent 6a7befc commit 7d85a8e

File tree

1 file changed

+42
-21
lines changed

1 file changed

+42
-21
lines changed

src/cdpy/df.py

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,48 +7,69 @@ class CdpyDf(CdpSdkBase):
77
def __init__(self, *args, **kwargs):
88
super().__init__(*args, **kwargs)
99

10-
def list_environments(self, only_enabled=False, name=None):
10+
def list_services(self, only_enabled=False, env_crn=None, df_crn=None, name=None):
1111
result = self.sdk.call(
12-
svc='df', func='list_environments', ret_field='environments', squelch=[
12+
svc='df', func='list_services', ret_field='services', squelch=[
1313
Squelch(value='NOT_FOUND', default=list(),
14-
warning='No Environments for DataFlow found in Tenant')
14+
warning='No DataFlow Deployments found')
1515
],
1616
pageSize=self.sdk.DEFAULT_PAGE_SIZE
1717
)
1818
if only_enabled:
1919
result = [x for x in result if x['status']['state'] not in ['NOT_ENABLED']]
2020
if name is not None:
2121
result = [x for x in result if x['name'] == name]
22+
if df_crn is not None:
23+
result = [x for x in result if x['crn'] == df_crn]
24+
if env_crn is not None:
25+
result = [x for x in result if x['environmentCrn'] == env_crn]
2226
return result
2327

24-
def describe_environment(self, env_crn: str = None):
28+
def describe_service(self, df_crn: str = None, env_crn: str = None):
29+
if df_crn is not None:
30+
resolved_df_crn = df_crn
31+
elif env_crn is not None:
32+
services = self.list_services(env_crn=env_crn)
33+
if len(services) == 0:
34+
return None
35+
elif len(services) == 1:
36+
resolved_df_crn = services[0]['crn']
37+
else:
38+
self.sdk.throw_error(
39+
CdpError('More than one DataFlow service found for env_crn, please try list instead')
40+
)
41+
else:
42+
self.sdk.throw_error(CdpError("Either df_crn or env_crn must be supplied to df.describe_service"))
2543
return self.sdk.call(
26-
svc='df', func='get_environment', ret_field='environment', squelch=[
44+
svc='df', func='describe_service', ret_field='service', squelch=[
2745
Squelch(value='NOT_FOUND',
28-
warning='No Environment with crn %s for DataFlow found in Tenant' % env_crn)
46+
warning='No DataFlow Deployment with crn %s found' % df_crn),
47+
Squelch(value='PERMISSION_DENIED') # DF GRPC sometimes returns 403 when finishing deletion
2948
],
30-
crn=env_crn
49+
serviceCrn=resolved_df_crn
3150
)
3251

33-
def enable_environment(self, env_crn: str, authorized_ips: list = None, min_nodes: int = 3, max_nodes: int = 3,
34-
enable_public_ip: bool = True):
52+
def enable_service(self, env_crn: str, lb_ips: list = None, min_nodes: int = 3, max_nodes: int = 3,
53+
enable_public_ip: bool = True, kube_ips: list = None, cluster_subnets: list = None,
54+
lb_subnets: list = None):
3555
self.sdk.validate_crn(env_crn)
3656
return self.sdk.call(
37-
svc='df', func='enable_environment', ret_field='environment',
38-
crn=env_crn, minK8sNodeCount=min_nodes, maxK8sNodeCount=max_nodes,
39-
usePublicLoadBalancer=enable_public_ip, authorizedIpRanges=authorized_ips
57+
svc='df', func='enable_service', ret_field='service',
58+
environmentCrn=env_crn, minK8sNodeCount=min_nodes, maxK8sNodeCount=max_nodes,
59+
usePublicLoadBalancer=enable_public_ip, kubeApiAuthorizedIpRanges=kube_ips,
60+
loadBalancerAuthorizedIpRanges=lb_ips, clusterSubnets=cluster_subnets, loadBalancerSubnets=lb_subnets
4061
)
4162

42-
def disable_environment(self, env_crn: str, persist: bool = False):
43-
self.sdk.validate_crn(env_crn)
63+
def disable_service(self, df_crn: str, persist: bool = False, terminate=False):
64+
self.sdk.validate_crn(df_crn)
4465
return self.sdk.call(
45-
svc='df', func='disable_environment', ret_field='status', ret_error=True,
46-
crn=env_crn, persist=persist
66+
svc='df', func='disable_service', ret_field='status', ret_error=True,
67+
serviceCrn=df_crn, persist=persist, terminateDeployments=terminate
4768
)
4869

49-
def delete_environment(self, env_crn: str):
50-
self.sdk.validate_crn(env_crn)
70+
def reset_service(self, df_crn: str):
71+
self.sdk.validate_crn(df_crn)
5172
return self.sdk.call(
52-
svc='df', func='delete_environment',
53-
crn=env_crn
54-
)
73+
svc='df', func='reset_service',
74+
serviceCrn=df_crn
75+
)

0 commit comments

Comments
 (0)