Python 获取Jinja内的云形成条件值

Python 获取Jinja内的云形成条件值,python,jinja2,amazon-cloudformation,Python,Jinja2,Amazon Cloudformation,我正在尝试编写一个YAML模板,它使用Jinja创建任意数量(比如5个)的EMR集群,并在特定区域的可用性区域中共享它们。问题是一个区域中可能有1个、2个或3个AZ,并且模板是不可知的,除了我定义的CFN条件之外,还有超过1AZ和超过2AZ {% for clusternum in range(1, 4) %} Cluster{{clusternum}} Type: AWS::EMR::Cluster {% if clusternum >= 2 %} Condition: MoreThan

我正在尝试编写一个YAML模板,它使用Jinja创建任意数量(比如5个)的EMR集群,并在特定区域的可用性区域中共享它们。问题是一个区域中可能有1个、2个或3个AZ,并且模板是不可知的,除了我定义的CFN条件之外,还有超过1AZ和超过2AZ

{% for clusternum in range(1, 4) %}
Cluster{{clusternum}}
Type: AWS::EMR::Cluster
{% if clusternum >= 2 %}
Condition: MoreThan1AZ
{% endif %}
{% if clusternum >= 3 %}
Condition: MoreThan2AZs
{% endif %}
...
Properties:
  Ec2SubnetId: PrivateSubnet0{{clusternum}}
...
{% endfor %}
现在,如果我只对clusternum进行范围(1,4)的计算,这就行了,因为这将为每个AZ创建一个集群。如果它是一个只有1AZ的区域,它将只创建一个集群,依此类推

我的问题是,我如何改变它,使它能适用于5个集群,将它们均匀地分布在AZ上。如果在具有1AZ的区域中,则应在第一个AZ内创建所有5个。如果该区域有两个AZ,则应在一个区域中创建三个AZ,在另一个区域中创建两个AZ。如果它有三个AZ,它应该在两个AZ中创建两个簇,在其余的AZ中创建一个簇


我的假设是我需要某种方法让jinja阅读CFN条件,我不确定这是否可行。这是否太复杂而无法由Jinja完成?

这可以使用Cloudformation宏来完成。你试过宏吗?