From e44412101b630fe9df823b6d5b6581ca350f2d31 Mon Sep 17 00:00:00 2001 From: shlomozippel Date: Sat, 9 Feb 2013 12:01:11 -0500 Subject: [PATCH] Merge recursive file permission setting on directories --- library/ec2 | 6 +++--- library/file | 21 ++++++++++++++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/library/ec2 b/library/ec2 index 297a0b937a3..10f4de36d3a 100644 --- a/library/ec2 +++ b/library/ec2 @@ -133,7 +133,7 @@ def main(): image = dict(required=True), kernel = dict(), count = dict(default='1'), - monitoring = dict(choices=BOOLEANS, default=False), + monitoring = dict(choices=BOOLEANS, default=False), ramdisk = dict(), wait = dict(choices=BOOLEANS, default=False), ec2_url = dict(aliases=['EC2_URL']), @@ -177,8 +177,8 @@ def main(): try: res = ec2.run_instances(image, key_name = key_name, min_count = count, - max_count = count, - monitoring_enabled = monitoring, + max_count = count, + monitoring_enabled = monitoring, security_groups = [group], instance_type = instance_type, kernel_id = kernel, diff --git a/library/file b/library/file index 7b1ac0b8835..97bdc52e58b 100644 --- a/library/file +++ b/library/file @@ -113,6 +113,12 @@ options: description: - accepts only C(default) as value. This will restore a file's SELinux context in the policy. Does nothing if no default value is available. + recurse: + required: false + default: no + choices: [ "yes", "no" ] + description: + - recursively set the specified file attributes (applies only to state=directory) examples: - code: "file: path=/etc/foo.conf owner=foo group=foo mode=0644" description: Example from Ansible Playbooks @@ -133,6 +139,7 @@ def main(): argument_spec = dict( state = dict(choices=['file','directory','link','absent'], default='file'), path = dict(aliases=['dest', 'name'], required=True), + recurse = dict(default='no', choices=BOOLEANS) ), add_file_common_args=True, supports_check_mode=True @@ -202,12 +209,24 @@ def main(): module.exit_json(path=path, changed=changed) elif state == 'directory': - if prev_state == 'absent': os.makedirs(path) changed = True changed = module.set_directory_attributes_if_different(file_args, changed) + recurse = module.boolean(params['recurse']) + if recurse: + for root,dirs,files in os.walk( file_args['path'] ): + for dir in dirs: + dirname=os.path.join(root,dir) + tmp_file_args = file_args.copy() + tmp_file_args['path']=dirname + changed = module.set_directory_attributes_if_different(tmp_file_args, changed) + for file in files: + filename=os.path.join(root,file) + tmp_file_args = file_args.copy() + tmp_file_args['path']=filename + changed = module.set_file_attributes_if_different(tmp_file_args, changed) module.exit_json(path=path, changed=changed) elif state == 'link':