Skip to content

Commit 31d3513

Browse files
authored
Changes for DF-beta inclusion (#17)
* Changes for DF-beta inclusion ** Dependent on cloudera-labs/cdpy#21 * Break out usage of environment name from environment crn * Use states from common instead of explicit values for checks * Fix check for wait condition when disabling, should wait if requested regardless of whether disable called or not * Fix attempting to enable when Environment not present * Fix wait for disable incorrectly stipulating that state should be None when it should be checking if field response is None * Include Dataflow in descendants collation for env_info * Switch to using REMOVABLE_STATES to indicate DF disable capability * Support force removal keyword for DF to enable delete functionality Signed-off-by: Daniel Chaffelson <chaffelson@gmail.com>
1 parent 9dec15f commit 31d3513

File tree

2 files changed

+33
-24
lines changed

2 files changed

+33
-24
lines changed

plugins/modules/df.py

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ def __init__(self, module):
240240
self.public_loadbalancer = self._get_param('public_loadbalancer')
241241
self.ip_ranges = self._get_param('ip_ranges')
242242
self.persist = self._get_param('persist')
243+
self.force = self._get_param('force')
243244

244245
self.state = self._get_param('state')
245246
self.wait = self._get_param('wait')
@@ -251,30 +252,33 @@ def __init__(self, module):
251252

252253
# Initialize internal values
253254
self.target = None
255+
self.env_crn = None
254256

255257
# Execute logic process
256258
self.process()
257259

258260
@CdpModule._Decorators.process_debug
259261
def process(self):
260-
self.name = self.cdpy.environments.resolve_environment_crn(self.name)
261-
self.target = self.cdpy.df.describe_environment(env_crn=self.name)
262+
self.env_crn = self.cdpy.environments.resolve_environment_crn(self.name)
263+
if self.env_crn is not None:
264+
self.target = self.cdpy.df.describe_environment(env_crn=self.name)
262265

263266
if self.target is not None:
264267
# DF Database Entry exists
265268
if self.state in ['absent']:
266269
if self.module.check_mode:
267270
self.service = self.target
268271
else:
269-
if self.target['status']['state'] != 'NOT_ENABLED':
272+
if self.target['status']['state'] in self.cdpy.sdk.REMOVABLE_STATES:
270273
self.service = self.cdpy.df.disable_environment(
271-
env_crn=self.name,
272-
persist=self.persist
274+
env_crn=self.env_crn,
275+
persist=self.persist,
276+
force=self.force
273277
)
274-
if self.wait:
275-
self.service = self._wait_for_disabled()
276-
else:
277-
self.service = self.target
278+
if self.wait:
279+
self.service = self._wait_for_disabled()
280+
else:
281+
self.service = self.cdpy.df.describe_environment(env_crn=self.name)
278282
elif self.state in ['present']:
279283
self.module.warn(
280284
"Dataflow Service already enabled and configuration validation and reconciliation is not supported;" +
@@ -288,33 +292,36 @@ def process(self):
288292
# Environment does not have DF database entry, and probably doesn't exist
289293
if self.state in ['absent']:
290294
self.module.log(
291-
"Dataflow Service %s already disabled in CDP Environment" % self.name)
295+
"Dataflow Service %s already disabled in CDP Environment %s" % (self.name, self.env_crn))
292296
elif self.state in ['present']:
293-
# create DF Service
294-
if not self.module.check_mode:
295-
self.service = self.cdpy.df.enable_environment(
296-
env_crn=self.name,
297-
authorized_ips=self.ip_ranges,
298-
min_nodes=self.nodes_min,
299-
max_nodes=self.nodes_max,
300-
enable_public_ip=self.public_loadbalancer
301-
)
302-
if self.wait:
303-
self.service = self._wait_for_enabled()
297+
if self.env_crn is None:
298+
self.module.fail_json(msg="Could not retrieve CRN for CDP Environment %s" % self.env)
299+
else:
300+
# create DF Service
301+
if not self.module.check_mode:
302+
self.service = self.cdpy.df.enable_environment(
303+
env_crn=self.env_crn,
304+
authorized_ips=self.ip_ranges,
305+
min_nodes=self.nodes_min,
306+
max_nodes=self.nodes_max,
307+
enable_public_ip=self.public_loadbalancer
308+
)
309+
if self.wait:
310+
self.service = self._wait_for_enabled()
304311
else:
305312
self.module.fail_json(
306313
msg="State %s is not valid for this module" % self.state)
307314

308315
def _wait_for_enabled(self):
309316
return self.cdpy.sdk.wait_for_state(
310-
describe_func=self.cdpy.df.describe_environment, params=dict(env_crn=self.name),
317+
describe_func=self.cdpy.df.describe_environment, params=dict(env_crn=self.env_crn),
311318
field=['status', 'state'], state=self.cdpy.sdk.STARTED_STATES,
312319
delay=self.delay, timeout=self.timeout
313320
)
314321

315322
def _wait_for_disabled(self):
316323
return self.cdpy.sdk.wait_for_state(
317-
describe_func=self.cdpy.df.describe_environment, params=dict(env_crn=self.name), state=None,
324+
describe_func=self.cdpy.df.describe_environment, params=dict(env_crn=self.env_crn), field=None,
318325
delay=self.delay, timeout=self.timeout
319326
)
320327

@@ -331,6 +338,7 @@ def main():
331338
persist=dict(required=False, type='bool', default=False),
332339
state=dict(required=False, type='str', choices=['present', 'absent'],
333340
default='present'),
341+
force=dict(required=False, type='bool', default=False, aliases=['force_delete']),
334342
wait=dict(required=False, type='bool', default=True),
335343
delay=dict(required=False, type='int', aliases=['polling_delay'], default=15),
336344
timeout=dict(required=False, type='int', aliases=['polling_timeout'], default=3600)

plugins/modules/env_info.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,8 @@ def process(self):
438438
'datahub': self.cdpy.datahub.describe_all_clusters(this_env['environmentName']),
439439
'dw': self.cdpy.dw.gather_clusters(this_env['crn']),
440440
'ml': self.cdpy.ml.describe_all_workspaces(this_env['environmentName']),
441-
'opdb': self.cdpy.opdb.describe_all_databases(this_env['environmentName'])
441+
'opdb': self.cdpy.opdb.describe_all_databases(this_env['environmentName']),
442+
'df': [self.cdpy.df.describe_environment(this_env['crn'])]
442443
}
443444
updated_envs.append(this_env)
444445
self.environments = updated_envs

0 commit comments

Comments
 (0)