3939 wait_for_task = dict (type = 'bool' , default = True )
4040)
4141
42+ checkpoint_argument_spec_for_all = dict (
43+ version = dict (type = 'str' )
44+ )
45+
4246
4347# parse failure message with code and response
4448def parse_fail_message (code , response ):
4549 return 'Checkpoint device returned error {0} with message {1}' .format (code , response )
4650
4751
52+ def idempotency_check (old_val , new_val ):
53+ if isinstance (new_val , dict ):
54+ for key in new_val :
55+ if key in old_val :
56+ if idempotency_check (old_val [key ], new_val [key ]) is False :
57+ return False
58+ elif isinstance (new_val , list ):
59+ if len (new_val ) != len (old_val ):
60+ return False
61+ for item in new_val :
62+ if item not in old_val :
63+ return False
64+ else :
65+ if new_val != old_val :
66+ return False
67+ return True
68+
69+
70+ # if user insert a specific version, we add it to the url
71+ def get_version (module ):
72+ return ('v' + module .params ['version' ] + '/' ) if module .params .get ('version' ) else ''
73+
74+
4875# send the request to checkpoint
4976def send_request (connection , version , url , payload = None ):
5077 code , response = connection .send_request ('/gaia_api/' + version + url , payload )
@@ -54,7 +81,8 @@ def send_request(connection, version, url, payload=None):
5481# get the payload from the user parameters
5582def is_checkpoint_param (parameter ):
5683 if parameter == 'state' or \
57- parameter == 'wait_for_task' :
84+ parameter == 'wait_for_task' or \
85+ parameter == 'version' :
5886 return False
5987 return True
6088
@@ -138,7 +166,8 @@ def api_call(module, target_version, api_call_object):
138166 return code , response
139167
140168
141- def chkp_facts_api_call (module , target_version , api_call_object , is_multible ):
169+ def chkp_facts_api_call (module , api_call_object , is_multible ):
170+ target_version = get_version (module )
142171 if is_multible is True :
143172 show_single = False
144173 module_key_params = dict ((k , v ) for k , v in module .params .items () if v is not None )
@@ -164,7 +193,8 @@ def chkp_facts_api_call(module, target_version, api_call_object, is_multible):
164193 }
165194
166195
167- def chkp_api_call (module , target_version , api_call_object , has_add_api , ignore = None , show_params = None , add_params = None ):
196+ def chkp_api_call (module , api_call_object , has_add_api , ignore = None , show_params = None , add_params = None ):
197+ target_version = get_version (module )
168198 changed = False
169199 if show_params is None :
170200 show_params = []
@@ -190,6 +220,16 @@ def chkp_api_call(module, target_version, api_call_object, has_add_api, ignore=N
190220 "changed" : False
191221 }
192222 else : # handle set/add
223+ params_dict = module .params .copy ()
224+ for key , value in module .params .items ():
225+ if not is_checkpoint_param (key ):
226+ del params_dict [key ]
227+
228+ if idempotency_check (res , params_dict ) is True :
229+ return {
230+ api_call_object .replace ('-' , '_' ): res ,
231+ "changed" : False
232+ }
193233 code , res = api_call (module , target_version , api_call_object = "set-{0}" .format (api_call_object ))
194234 if code != 200 and has_add_api is True :
195235 if add_params :
@@ -212,7 +252,8 @@ def chkp_api_call(module, target_version, api_call_object, has_add_api, ignore=N
212252
213253
214254# for operation and async tasks
215- def chkp_api_operation (module , target_version , api_call_object ):
255+ def chkp_api_operation (module , api_call_object ):
256+ target_version = get_version (module )
216257 code , response = api_call (module , target_version , api_call_object )
217258 result = {'changed' : True }
218259 if code == 200 :
0 commit comments