8383    type: bool 
8484    required: False 
8585    default: False 
86+   terminate: 
87+     description: Whether or  not to terminate all deployments associated with this DataFlow service 
88+     type: bool 
89+     required: False 
90+     default: False 
8691  wait: 
8792    description: 
8893      - Flag to enable internal polling to wait for the Dataflow Service to achieve the declared state. 
119124# Note: These examples do not set authentication details. 
120125
121126# Create a Dataflow Service 
122- - cloudera.cloud.df : 
127+ - cloudera.cloud.df_service : 
123128    name: my-service 
124129    nodes_min: 3 
125130    nodes_max: 10 
129134    wait: yes 
130135
131136# Remove a Dataflow Service with Async wait 
132- - cloudera.cloud.df : 
137+ - cloudera.cloud.df_service : 
133138    name: my-service 
134139    persist: False 
135140    state: absent 
@@ -234,12 +239,17 @@ def __init__(self, module):
234239        super (DFService , self ).__init__ (module )
235240
236241        # Set variables 
237-         self .name  =  self ._get_param ('name' )
242+         self .env_crn  =  self ._get_param ('env_crn' )
243+         self .df_crn  =  self ._get_param ('df_crn' )
238244        self .nodes_min  =  self ._get_param ('nodes_min' )
239245        self .nodes_max  =  self ._get_param ('nodes_max' )
240246        self .public_loadbalancer  =  self ._get_param ('public_loadbalancer' )
241-         self .ip_ranges  =  self ._get_param ('ip_ranges' )
247+         self .lb_ip_ranges  =  self ._get_param ('loadbalancer_ip_ranges' )
248+         self .kube_ip_ranges  =  self ._get_param ('kube_ip_ranges' )
249+         self .cluster_subnets  =  self ._get_param ('cluster_subnets' )
250+         self .lb_subnets  =  self ._get_param ('lb_subnets' )
242251        self .persist  =  self ._get_param ('persist' )
252+         self .terminate  =  self ._get_param ('terminate' )
243253        self .force  =  self ._get_param ('force' )
244254
245255        self .state  =  self ._get_param ('state' )
@@ -252,16 +262,16 @@ def __init__(self, module):
252262
253263        # Initialize internal values 
254264        self .target  =  None 
255-         self .env_crn  =  None 
256265
257266        # Execute logic process 
258267        self .process ()
259268
260269    @CdpModule ._Decorators .process_debug  
261270    def  process (self ):
262-         self .env_crn  =  self .cdpy .environments .resolve_environment_crn (self .name )
263271        if  self .env_crn  is  not None :
264-             self .target  =  self .cdpy .df .describe_environment (env_crn = self .name )
272+             self .env_crn  =  self .cdpy .environments .resolve_environment_crn (self .env_crn )
273+         if  self .env_crn  is  not None  or  self .df_crn  is  not None :
274+             self .target  =  self .cdpy .df .describe_service (env_crn = self .env_crn , df_crn = self .df_crn )
265275
266276        if  self .target  is  not None :
267277            # DF Database Entry exists 
@@ -283,19 +293,22 @@ def process(self):
283293            # Environment does not have DF database entry, and probably doesn't exist 
284294            if  self .state  in  ['absent' ]:
285295                self .module .log (
286-                     "Dataflow Service %s  already disabled in CDP Environment %s"  %  ( self .name ,  self . env_crn ) )
296+                     "Dataflow Service already disabled in CDP Environment %s"  %  self .env_crn )
287297            elif  self .state  in  ['present' ]:
288298                if  self .env_crn  is  None :
289299                    self .module .fail_json (msg = "Could not retrieve CRN for CDP Environment %s"  %  self .env )
290300                else :
291301                    # create DF Service 
292302                    if  not  self .module .check_mode :
293-                         self .service  =  self .cdpy .df .enable_environment (
303+                         self .service  =  self .cdpy .df .enable_service (
294304                            env_crn = self .env_crn ,
295-                             authorized_ips = self .ip_ranges ,
296305                            min_nodes = self .nodes_min ,
297306                            max_nodes = self .nodes_max ,
298-                             enable_public_ip = self .public_loadbalancer 
307+                             enable_public_ip = self .public_loadbalancer ,
308+                             lb_ips = self .lb_ip_ranges ,
309+                             kube_ips = self .kube_ip_ranges ,
310+                             cluster_subnets = self .cluster_subnets ,
311+                             lb_subnets = self .lb_subnets 
299312                        )
300313                        if  self .wait :
301314                            self .service  =  self ._wait_for_enabled ()
@@ -305,65 +318,77 @@ def process(self):
305318
306319    def  _wait_for_enabled (self ):
307320        return  self .cdpy .sdk .wait_for_state (
308-             describe_func = self .cdpy .df .describe_environment , params = dict (env_crn = self .env_crn ),
321+             describe_func = self .cdpy .df .describe_service , params = dict (env_crn = self .env_crn ),
309322            field = ['status' , 'state' ], state = self .cdpy .sdk .STARTED_STATES ,
310323            delay = self .delay , timeout = self .timeout 
311324        )
312325
313326    def  _disable_df (self ):
314327        # Attempt clean Disable, which also ensures we have tried at least once before we do a forced removal 
315328        if  self .target ['status' ]['state' ] in  self .cdpy .sdk .REMOVABLE_STATES :
316-             self .service  =  self .cdpy .df .disable_environment (
317-                 env_crn = self .env_crn ,
318-                 persist = self .persist 
329+             self .service  =  self .cdpy .df .disable_service (
330+                 df_crn = self .df_crn ,
331+                 persist = self .persist ,
332+                 terminate = self .terminate 
319333            )
334+         else :
335+             self .module .warn ("Attempting to disable DataFlow Service but state %s not in Removable States %s" 
336+                              %  (self .target ['status' ]['state' ], self .cdpy .sdk .REMOVABLE_STATES ))
320337        if  self .wait :
321338            # Wait for Clean Disable, if possible 
322339            self .service  =  self .cdpy .sdk .wait_for_state (
323-                 describe_func = self .cdpy .df .describe_environment , params = dict (env_crn = self .env_crn ),
340+                 describe_func = self .cdpy .df .describe_service , params = dict (df_crn = self .df_crn ),
324341                field = ['status' , 'state' ],
325342                state = self .cdpy .sdk .STOPPED_STATES  +  self .cdpy .sdk .REMOVABLE_STATES  +  [None ],
326343                delay = self .delay , timeout = self .timeout , ignore_failures = True 
327344            )
328345        else :
329-             self .service  =  self .cdpy .df .describe_environment ( env_crn = self .name )
346+             self .service  =  self .cdpy .df .describe_service ( df_crn = self .df_crn )
330347        # Check disable result against need for further forced delete action, in case it didn't work first time around 
331348        if  self .service  is  not None :
332349            if  self .service ['status' ]['state' ] in  self .cdpy .sdk .REMOVABLE_STATES :
333350                if  self .force :
334-                     self .service  =  self .cdpy .df .delete_environment (
335-                         env_crn = self .env_crn 
351+                     self .service  =  self .cdpy .df .reset_service (
352+                         df_crn = self .df_crn 
336353                    )
337354                else :
338355                    self .module .fail_json (msg = "DF Service Disable failed and Force delete not requested" )
339356            if  self .wait :
340357                self .service  =  self .cdpy .sdk .wait_for_state (
341-                     describe_func = self .cdpy .df .describe_environment , params = dict (env_crn = self .env_crn ),
358+                     describe_func = self .cdpy .df .describe_service , params = dict (df_crn = self .df_crn ),
342359                    field = None ,  # This time we require removal or declare failure 
343360                    delay = self .delay , timeout = self .timeout 
344361                )
345362            else :
346-                 self .service  =  self .cdpy .df .describe_environment ( env_crn = self .name )
363+                 self .service  =  self .cdpy .df .describe_service ( df_crn = self .df_crn )
347364
348365
349366def  main ():
350367    module  =  AnsibleModule (
351368        argument_spec = CdpModule .argument_spec (
352-             name = dict (required = True , type = 'str' , aliases = ['crn' , 'env_crn' ]),
353-             nodes_min = dict (required = False , type = 'int' , default = 3 , aliases = ['min_k8s_node_count' ]),
354-             nodes_max = dict (required = False , type = 'int' , default = 3 , aliases = ['max_k8s_node_count' ]),
355-             public_loadbalancer = dict (required = False , type = 'bool' , default = False , aliases = ['use_public_load_balancer' ]),
356-             ip_ranges = dict (required = False , type = 'list' , elements = 'str' , default = list (),
357-                            aliases = ['authorized_ip_ranges' ]),
358-             persist = dict (required = False , type = 'bool' , default = False ),
359-             state = dict (required = False , type = 'str' , choices = ['present' , 'absent' ],
369+             env_crn = dict (type = 'str' ),
370+             df_crn = dict (type = 'str' ),
371+             nodes_min = dict (type = 'int' , default = 3 , aliases = ['min_k8s_node_count' ]),
372+             nodes_max = dict (type = 'int' , default = 3 , aliases = ['max_k8s_node_count' ]),
373+             public_loadbalancer = dict (type = 'bool' , default = False , aliases = ['use_public_load_balancer' ]),
374+             loadbalancer_ip_ranges = dict (type = 'list' , elements = 'str' , default = None ),
375+             kube_ip_ranges = dict (type = 'list' , elements = 'str' , default = None ),
376+             cluster_subnets = dict (type = 'list' , elements = 'str' , default = None ),
377+             loadbalancer_subnets = dict (type = 'list' , elements = 'str' , default = None ),
378+             persist = dict (type = 'bool' , default = False ),
379+             terminate = dict (type = 'bool' , default = False ),
380+             state = dict (type = 'str' , choices = ['present' , 'absent' ],
360381                       default = 'present' ),
361-             force = dict (required = False ,  type = 'bool' , default = False , aliases = ['force_delete' ]),
362-             wait = dict (required = False ,  type = 'bool' , default = True ),
363-             delay = dict (required = False ,  type = 'int' , aliases = ['polling_delay' ], default = 15 ),
364-             timeout = dict (required = False ,  type = 'int' , aliases = ['polling_timeout' ], default = 3600 )
382+             force = dict (type = 'bool' , default = False , aliases = ['force_delete' ]),
383+             wait = dict (type = 'bool' , default = True ),
384+             delay = dict (type = 'int' , aliases = ['polling_delay' ], default = 15 ),
385+             timeout = dict (type = 'int' , aliases = ['polling_timeout' ], default = 3600 )
365386        ),
366387        supports_check_mode = True ,
388+         required_if = [
389+             ('state' , 'present' , ('env_crn' , ), False ),
390+             ('state' , 'absent' , ('df_crn' , ), False )
391+         ]
367392    )
368393
369394    result  =  DFService (module )
0 commit comments