mirror of
https://github.com/valitydev/salt.git
synced 2024-11-08 17:33:54 +00:00
Merge pull request #19154 from lyft/more-boto-secgroup-fixes
Fix for boto_secgroup state to properly support lists for cidrs, group i...
This commit is contained in:
commit
8e4d9f2dcb
@ -77,6 +77,7 @@ import logging
|
|||||||
# Import salt libs
|
# Import salt libs
|
||||||
import salt.utils.dictupdate as dictupdate
|
import salt.utils.dictupdate as dictupdate
|
||||||
from salt.exceptions import SaltInvocationError
|
from salt.exceptions import SaltInvocationError
|
||||||
|
from salt.ext.six import string_types
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -184,6 +185,39 @@ def _security_group_present(
|
|||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
def _split_rules(rules):
|
||||||
|
'''
|
||||||
|
Split rules with lists into individual rules.
|
||||||
|
|
||||||
|
We accept some attributes as lists or strings. The data we get back from
|
||||||
|
the execution module lists rules as individual rules. We need to split the
|
||||||
|
provided rules into individual rules to compare them.
|
||||||
|
'''
|
||||||
|
split = []
|
||||||
|
for rule in rules:
|
||||||
|
cidr_ip = rule.get('cidr_ip')
|
||||||
|
group_name = rule.get('source_group_name')
|
||||||
|
group_id = rule.get('source_group_group_id')
|
||||||
|
if cidr_ip and not isinstance(cidr_ip, string_types):
|
||||||
|
for ip in cidr_ip:
|
||||||
|
_rule = rule.copy()
|
||||||
|
_rule['cidr_ip'] = ip
|
||||||
|
split.append(_rule)
|
||||||
|
elif group_name and not isinstance(group_name, string_types):
|
||||||
|
for name in group_name:
|
||||||
|
_rule = rule.copy()
|
||||||
|
_rule['source_group_name'] = name
|
||||||
|
split.append(_rule)
|
||||||
|
elif group_id and not isinstance(group_id, string_types):
|
||||||
|
for _id in group_id:
|
||||||
|
_rule = rule.copy()
|
||||||
|
_rule['source_group_group_id'] = _id
|
||||||
|
split.append(_rule)
|
||||||
|
else:
|
||||||
|
split.append(rule)
|
||||||
|
return split
|
||||||
|
|
||||||
|
|
||||||
def _check_rule(rule, _rule):
|
def _check_rule(rule, _rule):
|
||||||
'''
|
'''
|
||||||
Check to see if two rules are the same. Needed to compare rules fetched
|
Check to see if two rules are the same. Needed to compare rules fetched
|
||||||
@ -265,6 +299,8 @@ def _get_rule_changes(rules, _rules):
|
|||||||
# entries, it doesn't matter which we pick.
|
# entries, it doesn't matter which we pick.
|
||||||
_rule.pop('source_group_name', None)
|
_rule.pop('source_group_name', None)
|
||||||
to_delete.append(_rule)
|
to_delete.append(_rule)
|
||||||
|
log.debug('Rules to be deleted: {0}'.format(to_delete))
|
||||||
|
log.debug('Rules to be created: {0}'.format(to_create))
|
||||||
return (to_delete, to_create)
|
return (to_delete, to_create)
|
||||||
|
|
||||||
|
|
||||||
@ -290,6 +326,7 @@ def _rules_present(
|
|||||||
ret['comment'] = msg.format(name)
|
ret['comment'] = msg.format(name)
|
||||||
ret['result'] = False
|
ret['result'] = False
|
||||||
return ret
|
return ret
|
||||||
|
rules = _split_rules(rules)
|
||||||
if vpc_id:
|
if vpc_id:
|
||||||
for rule in rules:
|
for rule in rules:
|
||||||
_source_group_name = rule.get('source_group_name', None)
|
_source_group_name = rule.get('source_group_name', None)
|
||||||
|
Loading…
Reference in New Issue
Block a user