3535requirements:
3636 - cdpy
3737options:
38+ id:
39+ description:
40+ - If an ID is provided, that Database Catalog will be deleted if C(state=absent)
41+ type: str
42+ required: When state is absent
3843 cluster_id:
3944 description: ID of cluster where Database Catalog should be created.
4045 type: str
8287
8388# Create Database Catalog
8489- cloudera.cloud.dw_dbc:
85- name: example-database-catalog
86- cluster_id: example-cluster-id
90+ name: " example-database-catalog-name"
91+ cluster_id: " example-cluster-id"
8792
8893# Delete Database Catalog
8994- cloudera.cloud.dw_dbc:
90- name: example-database-catalog
91- cluster_id: example-cluster-id
92- state: absent
95+ id: " example-database-id"
96+ cluster_id: " example-cluster-id"
97+ state: " absent"
9398'''
9499
95100RETURN = r'''
@@ -129,6 +134,7 @@ def __init__(self, module):
129134 super (DwDbc , self ).__init__ (module )
130135
131136 # Set variables
137+ self .id = self ._get_param ('id' )
132138 self .cluster_id = self ._get_param ('cluster_id' )
133139 self .name = self ._get_param ('name' )
134140 self .load_demo_data = self ._get_param ('load_demo_data' )
@@ -148,76 +154,79 @@ def __init__(self, module):
148154
149155 @CdpModule ._Decorators .process_debug
150156 def process (self ):
151- cluster = self .cdpy .dw .describe_cluster (cluster_id = self .cluster_id )
152- if cluster is None :
153- self .module .fail_json (msg = "Couldn't retrieve cluster info for %s " % self .cluster_id )
154- else :
155- self .target = self .cdpy .dw .describe_dbc (cluster_id = self .cluster_id , dbc_id = self .name )
156- # If Database Catalog exists
157- if self .target is not None :
158- if self .state == 'absent' :
159- if self .module .check_mode :
160- self .clusters .append (self .target )
157+ if self .id is None :
158+ dbcs = self .cdpy .dw .list_dbcs (cluster_id = self .cluster_id )
159+ for dbc in dbcs :
160+ if self .name is not None and dbc ['name' ] == self .name :
161+ self .target = self .cdpy .dw .describe_dbc (cluster_id = self .cluster_id , dbc_id = dbc ['id' ])
162+ elif self .id is not None and dbc ['id' ] == self .id :
163+ self .target = self .cdpy .dw .describe_dbc (cluster_id = self .cluster_id , dbc_id = self .id )
164+ # If Database Catalog exists
165+ if self .target is not None :
166+ if self .state == 'absent' :
167+ if self .module .check_mode :
168+ self .dbcs .append (self .target )
169+ else :
170+ if self .target ['status' ] not in self .cdpy .sdk .REMOVABLE_STATES :
171+ self .module .warn (
172+ "DW Database Catalog not in valid state for Delete operation: %s" % self .target ['status' ])
161173 else :
162- if self .target ['status' ] not in self .cdpy .sdk .REMOVABLE_STATES :
163- self .module .warn (
164- "DW Database Catalog not in valid state for Delete operation: %s" % self .target ['status' ])
165- else :
166- _ = self .cdpy .dw .delete_dbc (cluster_id = self .cluster_id , dbc_id = self .name )
167- if self .wait :
168- self .cdpy .sdk .wait_for_state (
169- describe_func = self .cdpy .dw .describe_dbc ,
170- params = dict (cluster_id = self .cluster_id , dbc_id = self .name ),
171- field = None , delay = self .delay , timeout = self .timeout
172- )
173- else :
174- self .cdpy .sdk .sleep (3 ) # Wait for consistency sync
175- self .target = self .cdpy .dw .describe_dbc (cluster_id = self .cluster_id , dbc_id = self .name )
176- self .clusters .append (self .target )
177- # Drop Done
178- elif self .state == 'present' :
179- # Begin Config check
180- self .module .warn ("DW Database Catalog already present and config validation is not implemented" )
174+ _ = self .cdpy .dw .delete_dbc (cluster_id = self .cluster_id , dbc_id = self .target ['id' ])
181175 if self .wait :
182- self .target = self . cdpy .sdk .wait_for_state (
176+ self .cdpy .sdk .wait_for_state (
183177 describe_func = self .cdpy .dw .describe_dbc ,
184- params = dict (cluster_id = self .cluster_id ,dbc_id = self .name ),
185- state = 'Running' , delay = self .delay , timeout = self .timeout
178+ params = dict (cluster_id = self .cluster_id , dbc_id = self .target [ 'id' ] ),
179+ field = None , delay = self .delay , timeout = self .timeout
186180 )
187- self .clusters .append (self .target )
188- # End Config check
189- else :
190- self .module .fail_json (msg = "State %s is not valid for this module" % self .state )
191- # End handling Database Catalog exists
192- else :
193- # Begin handling Database Catalog not found
194- if self .state == 'absent' :
195- self .module .warn ("DW Database Catalog %s already absent in Cluster %s" % (self .name , self .cluster_id ))
196- elif self .state == 'present' :
197- if self .module .check_mode :
198- pass
199181 else :
200- self .name = self .cdpy .dw .create_dbc (cluster_id = self .cluster_id , name = self .name ,
201- load_demo_data = self .load_demo_data )
202- if self .wait :
203- self .target = self .cdpy .sdk .wait_for_state (
204- describe_func = self .cdpy .dw .describe_dbc ,
205- params = dict (cluster_id = self .cluster_id , dbc_id = self .name ['dbcId' ]),
206- state = 'Running' , delay = self .delay , timeout = self .timeout
207- )
208- else :
209- self .target = self .cdpy .dw .describe_dbc (cluster_id = self .cluster_id , dbc_id = self .name ['dbcId' ])
182+ self .cdpy .sdk .sleep (3 ) # Wait for consistency sync
183+ self .target = self .cdpy .dw .describe_dbc (cluster_id = self .cluster_id , dbc_id = self .target ['id' ])
210184 self .dbcs .append (self .target )
185+ # Drop Done
186+ elif self .state == 'present' :
187+ # Begin Config check
188+ self .module .warn ("DW Database Catalog already present and config validation is not implemented" )
189+ if self .wait :
190+ self .target = self .cdpy .sdk .wait_for_state (
191+ describe_func = self .cdpy .dw .describe_dbc ,
192+ params = dict (cluster_id = self .cluster_id , dbc_id = self .target ['id' ]),
193+ state = 'Running' , delay = self .delay , timeout = self .timeout
194+ )
195+ self .dbcs .append (self .target )
196+ # End Config check
197+ else :
198+ self .module .fail_json (msg = "State %s is not valid for this module" % self .state )
199+ # End handling Database Catalog exists
200+ else :
201+ # Begin handling Database Catalog not found
202+ if self .state == 'absent' :
203+ self .module .warn ("DW Database Catalog %s already absent in Cluster %s" % (self .name , self .cluster_id ))
204+ elif self .state == 'present' :
205+ if self .module .check_mode :
206+ pass
211207 else :
212- self .module .fail_json (msg = "State %s is not valid for this module" % self .state )
208+ dbc_id = self .cdpy .dw .create_dbc (cluster_id = self .cluster_id , name = self .name ,
209+ load_demo_data = self .load_demo_data )
210+ if self .wait :
211+ self .target = self .cdpy .sdk .wait_for_state (
212+ describe_func = self .cdpy .dw .describe_dbc ,
213+ params = dict (cluster_id = self .cluster_id , dbc_id = dbc_id ),
214+ state = 'Running' , delay = self .delay , timeout = self .timeout
215+ )
216+ else :
217+ self .target = self .cdpy .dw .describe_dbc (cluster_id = self .cluster_id , dbc_id = dbc_id )
218+ self .dbcs .append (self .target )
219+ else :
220+ self .module .fail_json (msg = "State %s is not valid for this module" % self .state )
213221
214222
215223def main ():
216224 module = AnsibleModule (
217225 argument_spec = CdpModule .argument_spec (
218- cluster_id = dict (required = True , type = 'str' , aliases = ['cluster_id' ]),
219- name = dict (required = True , type = 'str' , aliases = ['name' ]),
220- load_demo_data = dict (required = False , type = 'bool' , aliases = ['load_demo_data' ]),
226+ id = dict (required = False , type = 'str' , default = None ),
227+ cluster_id = dict (required = True , type = 'str' ),
228+ name = dict (required = False , type = 'str' , default = None ),
229+ load_demo_data = dict (required = False , type = 'bool' , default = False ),
221230 state = dict (required = False , type = 'str' , choices = ['present' , 'absent' ], default = 'present' ),
222231 wait = dict (required = False , type = 'bool' , default = True ),
223232 delay = dict (required = False , type = 'int' , aliases = ['polling_delay' ], default = 15 ),
0 commit comments