简体   繁体   中英

Is there any analogy in Ansible to AWS intrinsic function Fn::Cidr?

I can obtain a list of VPC subnets using Ansible playbook:

  tasks:
    - name: Gathering VPC info ...
      amazon.aws.ec2_vpc_subnet_info:
        region: "eu-east-1"
        filters:
          vpc-id: vpc-433434432aad778ad
      register: output
  
    - name: Register new var
      ansible.builtin.set_fact:
        cidr_list: "{{ cidr_list|default([]) + [item.cidr_block] }}"
      loop: "{{ output.subnets }}"
      
    - name: Debugger...
      ansible.builtin.debug:
        msg: "{{ cidr_list }}"

What I want now is to calculate all IPv4 addresses by giving a size of each subnet and the initial VPC CIDR (this is actually successfully can be done using AWS Fn::Cidr):

"Fn::Cidr" : ["10.0.0.0/16", 15, 29 ]

Which will create a list of 15 subnets where each has a mask of /29. Then my goal is to compare two lists, and if not used IPv4 found from Fn::Cidr list, then use that one.

However I was wondering is there such an Ansible module to accomplish same task as would Fn::Cidr do?

The | ipsubnet | ipsubnet filter will do what you want, but it may require some {% for %} loops because I don't think it is designed (ootb) to do 15 subnets at a time

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM