2017-09-27 73 views
1

中的每个新的次级私用IP,我试图将多个弹性IP分配给多个不同的私有IP地址。Ansible:将多个EIP分配给ENI

注意:IP地址是假的,我已经这样写过,以便让您明白我想要做什么。

这是我迄今取得:

Server 1 

    Elastic Network Interface 
    Private IP 172.x.x.1 (public IP: 55.x.x.1) 
    Secondary Private IP 
     172.x.x.2 (public IP: NONE SET) 
     172.x.x.3 (public IP: NONE SET) 

Server 2 

    Elastic Network Interface 
    Private IP 174.x.x.1 (public IP: 57.x.x.1) 
    Secondary Private IP 
     174.x.x.2 (public IP: NONE SET) 
     174.x.x.3 (public IP: NONE SET) 

这就是我想实现:

Server 1 

    Elastic Network Interface 
    Private IP 172.x.x.1 (public IP: 55.x.x.1) 
    Secondary Private IP 
     172.x.x.2 (public IP: 55.x.x.2) 
     172.x.x.3 (public IP: 55.x.x.3) 

Server 2 

    Elastic Network Interface 
    Private IP 174.x.x.1 (public IP: 57.x.x.1) 
    Secondary Private IP 
     174.x.x.2 (public IP: 57.x.x.2) 
     174.x.x.3 (public IP: 57.x.x.3) 

这里的Ansible剧本我写到目前为止:

{{ platform }}是通过CLI传递的额外的变量。

- name: Provision a set of Edge instances 
    ec2: 
    key_name: ec2user 
    group: "launch-wizard-1" 
    instance_type: "m4.2xlarge" 
    image: "ami-xxxxxxx" 
    region: "eu-west-1" 
    wait: true 
    exact_count: 2 
    count_tag: 
     PlatformName: "{{ platform }}" 
     Role: Edge 
    instance_tags: 
     Name: "{{ platform }}::Edge" 
     PlatformName: "{{ platform }}" 
     Role: Edge 
     LongName: "Edge server for {{ platform }}'s platform" 
     Groups: common,server,rabbitmq,memcache,stats,cache-manager,media,content,icecast 
    register: edge_ec2 

- name: Find ENIs created for Edge instances 
    ec2_eni_facts: 
    region: "eu-west-1" 
    filters: 
     attachment.instance-id: "{{ item }}" 
    with_items: "{{ edge_ec2.instance_ids }}" 
    register: edge_enis 

- name: Adds an additional private IP to the Edge ENIs 
    ec2_eni: 
    region: "eu-west-1" 
    eni_id: "{{ item.interfaces[0].id }}" 
    subnet_id: "{{ item.interfaces[0].subnet_id }}" 
    state: present 
    secondary_private_ip_address_count: 2 
    register: created_ips 
    with_items: "{{ edge_enis.results }}" 

- name: Adds additional elastic IPs to the Edge ENIs 
    ec2_eip: 
    device_id: "{{ item.0.interface.attachment.instance_id }}" 
    region: "eu-west-1" 
    private_ip_address: "{{ item.1.private_ip_address }}" 
    in_vpc: true 
    register: eips 
    with_subelements: 
    - "{{ created_ips.results }}" 
    - interface.private_ip_addresses 

为什么不ansible分配新分配的IP弹性与次级私有IP地址,但仅限于主之一,即使我明确告诉它分配给次级私有地址?

+0

在您的帖子中找不到任何问题。 – ceving

+0

增加了这个问题,对此感到遗憾 – GiamPy

回答

0

我不知道为什么Ansible ec2_eip模块无法创建新的弹性IP并将其分配给指定的辅助私有IP地址,但我确实发现了一种解决方法。

我遇到了同样的问题 - 在我看来,private_ip_address选项被忽略。下面是我的代码片段没有工作:

- name: try to create an EIP and associate it in one pass 
    ec2_eip: 
    device_id: "{{ item.network_interfaces[0].network_interface_id }}" 
    private_ip_address: "{{ item.network_interfaces[0].private_ip_addresses[1].private_ip_address }}" 
    region: ap-southeast-2 
    in_vpc: true 
    with_items: "{{ servers.results[0].instances }}" 

我的解决方法是预先创建的弹性IP地址,然后将它们与一个单独的任务私有IP地址相关联。

- name: "allocate a new elastic IP for each server without associating it with anything" 
    ec2_eip: 
    state: 'present' 
    region: ap-southeast-2 
    register: eip2 
    with_items: "{{ servers.results[0].instances }}" 

- name: Associate elastic IPs with the first interface attached to each instance 
    ec2_eip: 
    public_ip: "{{ eip2.results[item.0].public_ip }}" 
    device_id: "{{ item.1.network_interfaces[0].network_interface_id }}" 
    private_ip_address: "{{ item.1.network_interfaces[0].private_ip_addresses[1].private_ip_address }}" 
    region: ap-southeast-2 
    in_vpc: true 
    with_indexed_items: "{{ servers.results[0].instances }}" 

我的主要发现是,如果你提供public_ip那么private_ip_address选项开始被认可。