Merge pull request #4517 from adfinis-sygroup/devel

Remove keys regardless of the options
reviewable/pr18780/r1
jctanner 11 years ago
commit 6dedb68bde

@ -226,16 +226,17 @@ def readkeys(filename):
if not os.path.isfile(filename): if not os.path.isfile(filename):
return [] return []
keys = [] keys = {}
f = open(filename) f = open(filename)
for line in f.readlines(): for line in f.readlines():
key_data = parsekey(line) key_data = parsekey(line)
if key_data: if key_data:
keys.append(key_data) # use key as identifier
keys[key_data[0]] = key_data
else: else:
# for an invalid line, just append the line # for an invalid line, just append the line
# to the array so it will be re-output later # to the array so it will be re-output later
keys.append(line) keys[line] = line
f.close() f.close()
return keys return keys
@ -244,16 +245,20 @@ def writekeys(module, filename, keys):
fd, tmp_path = tempfile.mkstemp('', 'tmp', os.path.dirname(filename)) fd, tmp_path = tempfile.mkstemp('', 'tmp', os.path.dirname(filename))
f = open(tmp_path,"w") f = open(tmp_path,"w")
try: try:
for key in keys: for index, key in keys.items():
try: try:
(keyhash,type,options,comment) = key (keyhash,type,options,comment) = key
option_str = "" option_str = ""
if options: if options:
option_strings = []
for option_key in options.keys(): for option_key in options.keys():
if options[option_key]: if options[option_key]:
option_str += "%s=%s " % (option_key, options[option_key]) option_strings.append("%s=%s" % (option_key, options[option_key]))
else: else:
option_str += "%s " % option_key option_strings.append("%s " % option_key)
option_str = ",".join(option_strings)
option_str += " "
key_line = "%s%s %s %s\n" % (option_str, type, keyhash, comment) key_line = "%s%s %s %s\n" % (option_str, type, keyhash, comment)
except: except:
key_line = key key_line = key
@ -295,39 +300,35 @@ def enforce_state(module, params):
present = False present = False
matched = False matched = False
non_matching_keys = [] non_matching_keys = []
for existing_key in existing_keys:
# skip bad entries or bad input if parsed_new_key[0] in existing_keys:
if len(parsed_new_key) == 0 or len(existing_key) == 0:
continue
# the first element in the array after parsing
# is the actual key hash, which we check first
if parsed_new_key[0] == existing_key[0]:
present = True present = True
# Then we check if everything matches, including # Then we check if everything matches, including
# the key type and options. If not, we append this # the key type and options. If not, we append this
# existing key to the non-matching list # existing key to the non-matching list
if parsed_new_key != existing_key: # We only want it to match everything when the state
non_matching_keys.append(existing_key) # is present
if parsed_new_key != existing_keys[parsed_new_key[0]] and state == "present":
non_matching_keys.append(existing_keys[parsed_new_key[0]])
else: else:
matched = True matched = True
# handle idempotent state=present # handle idempotent state=present
if state=="present": if state=="present":
if unique and len(non_matching_keys) > 0: if unique and len(non_matching_keys) > 0:
for non_matching_key in non_matching_keys: for non_matching_key in non_matching_keys:
existing_keys.remove(non_matching_key) del existing_keys[non_matching_key[0]]
do_write = True do_write = True
if not matched: if not matched:
existing_keys.append(parsed_new_key) existing_keys[parsed_new_key[0]] = parsed_new_key
do_write = True do_write = True
elif state=="absent": elif state=="absent":
# currently, we only remove keys when
# they are an exact match
if not matched: if not matched:
continue continue
existing_keys.remove(parsed_new_key) del existing_keys[parsed_new_key[0]]
do_write = True do_write = True
if do_write: if do_write:

Loading…
Cancel
Save