Not sure if this would help, but maybe a different way of looking at it using with_subelements?
security_groups:
- group: prod_traffic_plane
rules:
- { "direction":"ingress", "protocol": "tcp", "remote_ip": "
0.0.0.0/0" }
- { "direction":"ingress", "protocol": "udp", "remote_ip": "
0.0.0.0/0" }
- { "direction":"ingress", "protocol": "icmp", "remote_ip": "
0.0.0.0/0" }
- { "direction":"ingress", "protocol": "tcp", "remote_ip": "::/0" }
- { "direction":"ingress", "protocol": "udp", "remote_ip": "::/0" }
- { "direction":"ingress", "protocol": "icmp", "remote_ip": "::/0" }
- { "direction":"egress", "protocol": "tcp", "remote_ip": "
0.0.0.0/0" }
- { "direction":"egress", "protocol": "udp", "remote_ip": "
0.0.0.0/0" }
- { "direction":"egress", "protocol": "icmp", "remote_ip": "
0.0.0.0/0" }
- { "direction":"egress", "protocol": "tcp", "remote_ip": "::/0" }
- { "direction":"egress", "protocol": "udp", "remote_ip": "::/0" }
- { "direction":"egress", "protocol": "icmp", "remote_ip": "::/0" }
- group: dev_traffic_plane
rules:
- { "direction":"ingress", "protocol": "tcp", "remote_ip": "
0.0.0.0/0" }
- { "direction":"ingress", "protocol": "udp", "remote_ip": "
0.0.0.0/0" }
- { "direction":"ingress", "protocol": "icmp", "remote_ip": "
0.0.0.0/0" }
- { "direction":"ingress", "protocol": "tcp", "remote_ip": "::/0" }
- { "direction":"ingress", "protocol": "udp", "remote_ip": "::/0" }
- { "direction":"ingress", "protocol": "icmp", "remote_ip": "::/0" }
- { "direction":"egress", "protocol": "tcp", "remote_ip": "
0.0.0.0/0" }
- { "direction":"egress", "protocol": "udp", "remote_ip": "
0.0.0.0/0" }
- { "direction":"egress", "protocol": "icmp", "remote_ip": "
0.0.0.0/0" }
- { "direction":"egress", "protocol": "tcp", "remote_ip": "::/0" }
- { "direction":"egress", "protocol": "udp", "remote_ip": "::/0" }
- { "direction":"egress", "protocol": "icmp", "remote_ip": "::/0" }