Пример #1
0
def test_select_and_split():
    parameters = {"AccountSubnetIDs": "id1,id2,id3"}
    mappings = {}
    conditions = {}
    function = {"Fn::Select": ["2", {"Fn::Split": [",", {"Ref": "AccountSubnetIDs"}]}]}

    assert resolve(function, parameters, mappings, conditions) == "id3"
Пример #2
0
def test_find_in_map_and_ref():
    parameters = {"AWS::Region": "us-east-1"}
    mappings = {"RegionMap": {"us-east-1": {"HVM64": "ami-0ff8a91507f77f867"}}}
    conditions = {}
    function = {"Fn::FindInMap": ["RegionMap", {"Ref": "AWS::Region"}, "HVM64"]}

    assert resolve(function, parameters, mappings, conditions) == "ami-0ff8a91507f77f867"
Пример #3
0
def test_find_in_map(function, expected_output):
    parameters = {}
    mappings = {"RegionMap": {"us-east-1": {"HVM64": "ami-0ff8a91507f77f867"}}}
    conditions = {}

    assert resolve(function, parameters, mappings,
                   conditions) == expected_output
Пример #4
0
def test_sub_and_ref():
    parameters = {"RootDomainName": "skyscanner.net"}
    mappings = {}
    conditions = {}
    function = {"Fn::Sub": ["www.${Domain}", {"Domain": {"Ref": "RootDomainName"}}]}

    assert resolve(function, parameters, mappings, conditions) == "www.skyscanner.net"
Пример #5
0
def test_select_and_ref():
    parameters = {"DbSubnetIpBlocks": ["10.0.48.0/24", "10.0.112.0/24", "10.0.176.0/24"]}
    mappings = {}
    conditions = {}
    function = {"Fn::Select": ["0", {"Ref": "DbSubnetIpBlocks"}]}

    assert resolve(function, parameters, mappings, conditions) == "10.0.48.0/24"
Пример #6
0
def test_join(function, expected_output):
    parameters = {}
    mappings = {}
    conditions = {}

    assert resolve(function, parameters, mappings,
                   conditions) == expected_output
Пример #7
0
def test_condition(function, expected_output):
    parameters = {}
    mappings = {}
    conditions = {"SomeOtherCondition": True}

    assert resolve(function, parameters, mappings,
                   conditions) == expected_output
Пример #8
0
def test_import_value(function, expected_output):
    parameters = {"abc": "ABC"}
    mappings = {}
    conditions = {}

    assert resolve(function, parameters, mappings,
                   conditions) == expected_output
Пример #9
0
def test_if(function, expected_output):
    parameters = {}
    mappings = {}
    conditions = {"A": True, "B": False}

    assert resolve(function, parameters, mappings,
                   conditions) == expected_output
Пример #10
0
def test_join_and_ref():
    parameters = {"Partition": "patata", "AWS::AccountId": "1234567890"}
    mappings = {}
    conditions = {}
    function = {
        "Fn::Join": ["", ["arn:", {"Ref": "Partition"}, ":s3:::elasticbeanstalk-*-", {"Ref": "AWS::AccountId"}]]
    }
    assert resolve(function, parameters, mappings, conditions) == "arn:patata:s3:::elasticbeanstalk-*-1234567890"
Пример #11
0
    def resolve(self, extra_params=None) -> "CFModel":
        """
        Resolve all intrinsic functions on the template.

        Arguments:
            extra_params: Values of parameters passed to the Cloudformation.

        Returns:
            A new CFModel.
        """
        extra_params = {} if extra_params is None else extra_params
        # default parameters
        params = {}
        for key, parameter in self.Parameters.items():
            passed_value = extra_params.pop(key, None)
            ref_value = parameter.get_ref_value(passed_value)
            if ref_value is not None:
                params[key] = ref_value

        extended_parameters = {
            **self.PSEUDO_PARAMETERS,
            **params,
            **extra_params
        }
        dict_value = self.dict()

        conditions = dict_value.pop("Conditions", {})
        resolved_conditions = {
            key: _extended_bool(
                resolve(value, extended_parameters, self.Mappings, {}))
            for key, value in conditions.items()
        }

        resources = dict_value.pop("Resources")
        resolved_resources = {
            key: resolve(value, extended_parameters, self.Mappings,
                         resolved_conditions)
            for key, value in resources.items()
            if value.get("Condition") is None or (
                value.get("Condition") is not None
                and resolved_conditions.get(value["Condition"], True))
        }
        return CFModel(**dict_value,
                       Conditions=resolved_conditions,
                       Resources=resolved_resources)
Пример #12
0
def test_statement_condition_with_resolver_works_fine():
    statement_condition_raw = {
        "StringLike": {
            "patata": {
                "Fn::Sub": "${ClusterId}*"
            }
        }
    }
    resolved_statement_condition_raw = resolve(statement_condition_raw,
                                               {"ClusterId": "test_cluster"},
                                               {}, {})
    resolved_statement_condition = StatementCondition.parse_obj(
        resolved_statement_condition_raw)
    assert resolved_statement_condition.eval({"patata": "test_cluster"
                                              }) is True