Add support for AWS::ElasticLoadBalancingV2::ListenerRule (#3969)
* Add ssm parsing support for cloudformation stacks * Start adding unit tests for ssm parameter parsing * Add tests for code update * Add tests to parse ssm parameters code * Fix black lint errors * Fix bug. * Need to specify region_name * region needs to be same * Use ssm_backends[region] instead of ssm_backend * StringList -> string * Linting * check if servermode tests are on * Typo * Added support for ListenerRule. Will remove cruft * Pushing latest * Something works * Put back ripped out code * Save point. Incase I need more validations * Revert "Save point. Incase I need more validations" This reverts commit dac4953335dd9335eddb7a91a63667bc3c17104c. * Fixed validations and some refactor * Fix formatting * Linting * Cannot refactor if I have to fix all tests * Remove exceptions for now. Will do in another PR * Remove validations. Will add in next PR * Fix broken tests. Almost.: * Fix all tests. Some sneaky for now. * Python2 making me write bad code * OrderedDict.move_to_end() does not work in python2 * Linting * Add more checks to field in conditions later. * Unwnated change in FakeListener * Revert "Unwnated change in FakeListener" This reverts commit 962c2fdfd76fce999de9feccf1dd1c3ec48c459f. * Add back default listener rule * Linting fix * Fix priority sorting * Add cloudformation test for edge case Co-authored-by: Bert Blommers <bblommers@users.noreply.github.com>
This commit is contained in:
parent
a281f9d4a6
commit
b82096ba37
4 changed files with 295 additions and 121 deletions
|
|
@ -12,6 +12,7 @@ import boto.ec2
|
|||
import boto.ec2.autoscale
|
||||
import boto.ec2.elb
|
||||
from boto.exception import BotoServerError
|
||||
from botocore.exceptions import ClientError
|
||||
import boto.iam
|
||||
import boto.rds
|
||||
import boto.redshift
|
||||
|
|
@ -2154,6 +2155,74 @@ def test_stack_spot_fleet_should_figure_out_default_price():
|
|||
assert "SpotPrice" not in launch_spec2
|
||||
|
||||
|
||||
@mock_ec2
|
||||
@mock_elbv2
|
||||
@mock_cloudformation
|
||||
def test_invalid_action_type_listener_rule():
|
||||
|
||||
invalid_listener_template = {
|
||||
"AWSTemplateFormatVersion": "2010-09-09",
|
||||
"Resources": {
|
||||
"alb": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
|
||||
"Properties": {
|
||||
"Name": "myelbv2",
|
||||
"Scheme": "internet-facing",
|
||||
"Subnets": [{"Ref": "mysubnet"}],
|
||||
},
|
||||
},
|
||||
"mytargetgroup1": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
|
||||
"Properties": {"Name": "mytargetgroup1",},
|
||||
},
|
||||
"mytargetgroup2": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
|
||||
"Properties": {"Name": "mytargetgroup2",},
|
||||
},
|
||||
"listener": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::Listener",
|
||||
"Properties": {
|
||||
"DefaultActions": [
|
||||
{"Type": "forward", "TargetGroupArn": {"Ref": "mytargetgroup1"}}
|
||||
],
|
||||
"LoadBalancerArn": {"Ref": "alb"},
|
||||
"Port": "80",
|
||||
"Protocol": "HTTP",
|
||||
},
|
||||
},
|
||||
"rule": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::ListenerRule",
|
||||
"Properties": {
|
||||
"Actions": [
|
||||
{
|
||||
"Type": "forward2",
|
||||
"TargetGroupArn": {"Ref": "mytargetgroup2"},
|
||||
}
|
||||
],
|
||||
"Conditions": [{"field": "path-pattern", "values": ["/*"]}],
|
||||
"ListenerArn": {"Ref": "listener"},
|
||||
"Priority": 2,
|
||||
},
|
||||
},
|
||||
"myvpc": {
|
||||
"Type": "AWS::EC2::VPC",
|
||||
"Properties": {"CidrBlock": "10.0.0.0/16"},
|
||||
},
|
||||
"mysubnet": {
|
||||
"Type": "AWS::EC2::Subnet",
|
||||
"Properties": {"CidrBlock": "10.0.0.0/27", "VpcId": {"Ref": "myvpc"}},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
listener_template_json = json.dumps(invalid_listener_template)
|
||||
|
||||
cfn_conn = boto3.client("cloudformation", "us-west-1")
|
||||
cfn_conn.create_stack.when.called_with(
|
||||
StackName="listener_stack", TemplateBody=listener_template_json
|
||||
).should.throw(ClientError)
|
||||
|
||||
|
||||
@mock_ec2
|
||||
@mock_elbv2
|
||||
@mock_cloudformation
|
||||
|
|
@ -2234,6 +2303,17 @@ def test_stack_elbv2_resources_integration():
|
|||
"Protocol": "HTTP",
|
||||
},
|
||||
},
|
||||
"rule": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::ListenerRule",
|
||||
"Properties": {
|
||||
"Actions": [
|
||||
{"Type": "forward", "TargetGroupArn": {"Ref": "mytargetgroup2"}}
|
||||
],
|
||||
"Conditions": [{"field": "path-pattern", "values": ["/*"]}],
|
||||
"ListenerArn": {"Ref": "listener"},
|
||||
"Priority": 2,
|
||||
},
|
||||
},
|
||||
"myvpc": {
|
||||
"Type": "AWS::EC2::VPC",
|
||||
"Properties": {"CidrBlock": "10.0.0.0/16"},
|
||||
|
|
@ -2312,6 +2392,18 @@ def test_stack_elbv2_resources_integration():
|
|||
[{"Type": "forward", "TargetGroupArn": target_groups[0]["TargetGroupArn"]}]
|
||||
)
|
||||
|
||||
listener_rule = elbv2_conn.describe_rules(ListenerArn=listeners[0]["ListenerArn"])[
|
||||
"Rules"
|
||||
]
|
||||
len(listener_rule).should.equal(2)
|
||||
listener_rule[0]["Priority"].should.equal("2")
|
||||
listener_rule[0]["Actions"].should.equal(
|
||||
[{"Type": "forward", "TargetGroupArn": target_groups[1]["TargetGroupArn"]}]
|
||||
)
|
||||
listener_rule[0]["Conditions"].should.equal(
|
||||
[{"Field": "path-pattern", "Values": ["/*"]}]
|
||||
)
|
||||
|
||||
# test outputs
|
||||
stacks = cfn_conn.describe_stacks(StackName="elb_stack")["Stacks"]
|
||||
len(stacks).should.equal(1)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue