accept + and - modifiers for file attributes (#40061)

* accept + and - modifiers for file attributes
* tests for adding/removing file attributes
This commit is contained in:
Andreas Calminder 2018-06-14 15:31:14 +02:00 committed by Toshio Kuratomi
parent 8ab0d654f3
commit 75e9b76c15
2 changed files with 27 additions and 6 deletions

View file

@ -1355,10 +1355,15 @@ class AnsibleModule(object):
existing = self.get_file_attributes(b_path) existing = self.get_file_attributes(b_path)
if existing.get('attr_flags', '') != attributes: attr_mod = '='
if attributes.startswith(('-', '+')):
attr_mod = attributes[0]
attributes = attributes[1:]
if existing.get('attr_flags', '') != attributes or attr_mod == '-':
attrcmd = self.get_bin_path('chattr') attrcmd = self.get_bin_path('chattr')
if attrcmd: if attrcmd:
attrcmd = [attrcmd, '=%s' % attributes, b_path] attrcmd = [attrcmd, '%s%s' % (attr_mod, attributes), b_path]
changed = True changed = True
if diff is not None: if diff is not None:
@ -1367,7 +1372,7 @@ class AnsibleModule(object):
diff['before']['attributes'] = existing.get('attr_flags') diff['before']['attributes'] = existing.get('attr_flags')
if 'after' not in diff: if 'after' not in diff:
diff['after'] = {} diff['after'] = {}
diff['after']['attributes'] = attributes diff['after']['attributes'] = '%s%s' % (attr_mod, attributes)
if not self.check_mode: if not self.check_mode:
try: try:

View file

@ -82,13 +82,13 @@
- "file4_result.changed == true" - "file4_result.changed == true"
- "file4_result.mode == '0600'" - "file4_result.mode == '0600'"
- name: change file attribute "A" - name: explicitly set file attribute "A"
file: path={{output_dir}}/baz.txt attributes=A file: path={{output_dir}}/baz.txt attributes=A
register: file_attributes_result register: file_attributes_result
ignore_errors: True ignore_errors: True
- name: reapply file attribute "A" - name: add file attribute "A"
file: path={{output_dir}}/baz.txt attributes=A file: path={{output_dir}}/baz.txt attributes=+A
register: file_attributes_result_2 register: file_attributes_result_2
when: file_attributes_result is changed when: file_attributes_result is changed
@ -98,6 +98,22 @@
- "file_attributes_result_2 is not changed" - "file_attributes_result_2 is not changed"
when: file_attributes_result is changed when: file_attributes_result is changed
- name: remove file attribute "A"
file: path={{output_dir}}/baz.txt attributes=-A
register: file_attributes_result_3
ignore_errors: True
- name: explicitly remove file attributes
file: path={{output_dir}}/baz.txt attributes=""
register: file_attributes_result_4
when: file_attributes_result_3 is changed
- name: verify that the file was not marked as changed
assert:
that:
- "file_attributes_result_4 is not changed"
when: file_attributes_result_4 is changed
- name: change ownership and group - name: change ownership and group
file: path={{output_dir}}/baz.txt owner=1234 group=1234 file: path={{output_dir}}/baz.txt owner=1234 group=1234