Thanks for looking Michael,

I was looking for an intuitive way for expressing nested variables in this 
use case.

In my group vars, I specify 3 ec2 region/ami specs:
ec2_specs:
  - { region: "us-east-1", ami: "ami-b66ed3de", count: 1, type: "t2.micro" }
  - { region: "us-west-1", ami: "ami-b56e64f0", count: 2, type: "t2.micro" }
  - { region: "sa-east-1", ami: "ami-9337828e", count: 1, type: "t2.micro" }

I want to spin up *count* instances of each ami. In *each* of them I want 
to setup N separate processes that run on different ports:
process_ports:
  - { name: "Process_A", hostport: "1443" }
  - { name: "Process_B", hostport: "2974" }
  - { name: "Process_C", hostport: "3555" }

To make sure these ports are accessible from the outside world I need to 
set up ec2 security groups for these instances. *How can I express this by 
using my group vars rather than hard coding them as I have done below?*

- name: Setup AWS EC2 Security group
  ec2_group:
    name: microserver_security_group
    description: "Security group for microservices"
    region: "{{ item.region }}"
    rules:
      - proto: tcp
        from_port: 22
        to_port: 22
        cidr_ip: 0.0.0.0/0
      - proto: tcp


*        from_port: 1443        to_port: 1443*        cidr_ip: 0.0.0.0/0
      - proto: tcp


*        from_port: 2754        to_port: 2754*        cidr_ip: 0.0.0.0/0
      - proto: tcp


*        from_port: 3555        to_port: 3555*        cidr_ip: 0.0.0.0/0
    rules_egress:
      - proto: all
        cidr_ip: 0.0.0.0/0
  with_items: *ec2_specs*

Using nesting variables trivially doesn't work:

- name: Setup AWS EC2 Security group
  ec2_group:
    name: microserver_security_group
    description: "Security group for microservices"
    region: "{{ item[0].region }}"
    rules:
      - proto: tcp
        from_port: 22
        to_port: 22
        cidr_ip: 0.0.0.0/0
      - proto: tcp

*        from_port: "{{ item[1].hostport }}"        to_port: *
*"{{ item[1].hostport }}"*        cidr_ip: 0.0.0.0/0
    rules_egress:
      - proto: all
        cidr_ip: 0.0.0.0/0
  with_nested:
*    - ec2_specs*
*    - process_ports*

This simply causes 3 separate runs of the same ec2_group command and I end 
up with a single security group in each region where only the last hostport 
is exposed (each run overwriting the previous run).

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/a799ca42-1fc0-433e-affa-2df73a14f9fd%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to