diff --git a/library/cloud/ec2 b/library/cloud/ec2 index 4916594d5f..481892c7c4 100644 --- a/library/cloud/ec2 +++ b/library/cloud/ec2 @@ -36,7 +36,7 @@ options: aliases: [] group: description: - - security group to use with the instance + - security group (or list of groups) to use with the instance required: false default: null aliases: [] @@ -190,6 +190,18 @@ EXAMPLES = ''' count: 5 instance_tags: '{"db":"postgres"}' monitoring=yes' +# Multiple groups example +local_action: + module: ec2 + keypair: mykey + group: [databases, internal-services, sshable, and-so-forth] + instance_type: m1.large + image: ami-6e649707 + wait: yes + wait_timeout: 500 + count: 5 + instance_tags: '{"db":"postgres"}' monitoring=yes' + # VPC example - local_action: module: ec2 @@ -215,7 +227,7 @@ def main(): argument_spec = dict( key_name = dict(required=True, aliases = ['keypair']), id = dict(), - group = dict(), + group = dict(type='list'), group_id = dict(), region = dict(choices=['eu-west-1', 'sa-east-1', 'us-east-1', 'ap-northeast-1', 'us-west-2', 'us-west-1', 'ap-southeast-1', 'ap-southeast-2']), zone = dict(), @@ -294,14 +306,18 @@ def main(): # Here we try to lookup the group id from the security group name - if group is set. if group_name: grp_details = ec2.get_all_security_groups() - for grp in grp_details: - if str(group_name) in str(grp): - group_id = str(grp.id) + if type(group_name) == list: + group_id = list(filter(lambda grp: str(grp.id) if str(tmp) in str(grp) else None, grp_details) for tmp in group_name) + elif type(group_name) == str: + for grp in grp_details: + if str(group_name) in str(grp): + group_id = [str(grp.id)] + group_name = [group_name] # Now we try to lookup the group id testing if group exists. elif group_id: grp_details = ec2.get_all_security_groups(group_ids=group_id) grp_item = grp_details[0] - group_name = grp_item.name + group_name = [grp_item.name ] except boto.exception.NoAuthHandlerFound, e: module.fail_json(msg = str(e)) @@ -338,9 +354,9 @@ def main(): 'user_data': user_data} if vpc_subnet_id: - params['security_group_ids'] = [group_id] + params['security_group_ids'] = group_id else: - params['security_groups'] = [group_name] + params['security_groups'] = group_name res = ec2.run_instances(**params) except boto.exception.BotoServerError, e: diff --git a/library/files/ini_file b/library/files/ini_file index c0c2fe54e9..f2f73a7fce 100644 --- a/library/files/ini_file +++ b/library/files/ini_file @@ -108,12 +108,21 @@ def do_ini(module, filename, section=None, option=None, value=None, state='prese changed = True else: if option is not None: - try: - if cp.get(section, option): - cp.remove_option(section, option) - changed = True - except: - pass + if type(option) == str: + try: + if cp.get(section, option): + cp.remove_option(section, option) + changed = True + except: + pass + else: + for o in option: + try: + if cp.get(section, o): + cp.remove_option(section, o) + changed = True + except: + pass if state == 'present': if cp.has_section(section) == False: @@ -124,17 +133,31 @@ def do_ini(module, filename, section=None, option=None, value=None, state='prese changed = True if option is not None and value is not None: - try: - oldvalue = cp.get(section, option) - if str(value) != str(oldvalue): + olist = [] + vlist = [] + if type(option) == str and type(value) == str: + olist.append(option) + vlist.append(value) + else: + olist = list(option) + vlist = list(value) + if len(olist) != len(vlist): + module.fail_json(msg="Option and value lists must be of same lengths") + n = 0 + for option in olist: + value = vlist[n] + n = n + 1 + try: + oldvalue = cp.get(section, option) + if str(value) != str(oldvalue): + cp.set(section, option, value) + changed = True + except ConfigParser.NoSectionError: + cp.set(section, option, value) + changed = True + except ConfigParser.NoOptionError: cp.set(section, option, value) changed = True - except ConfigParser.NoSectionError: - cp.set(section, option, value) - changed = True - except ConfigParser.NoOptionError: - cp.set(section, option, value) - changed = True if changed: if backup: @@ -157,8 +180,8 @@ def main(): argument_spec = dict( dest = dict(required=True), section = dict(required=True), - option = dict(required=False), - value = dict(required=False), + option = dict(required=False, type='list'), + value = dict(required=False, type='list'), backup = dict(default='no', type='bool'), state = dict(default='present', choices=['present', 'absent']) ),