Solved it via running the command as "fire and forget" with async and pool, 
using a bash command in the background. Then modifying the ansible_ssh_host 
to the new IP address, and waiting for it port 22 to come up on that host.

    - name: Grab the network interface that the old IP is using and store 
it.
      shell: "ifconfig | grep -B1 {{ old_address_start }}| grep -E 
'^(\\w+)[[:space:]]' | sed 's/\\s.*$//'"
      args:
        executable: /bin/bash
      register: network_interface

    - name: Pushout new /etc/network/interface to hosts
      template:
        src: files/linux_network_interfaces.j2
        dest: /etc/network/interfaces
        owner: root
        group: root
        mode: '0644'
      become: true
      when: item.key == inventory_hostname
      with_dict: "{{ new_addresses }}"

    - name: Reload the hosts' network interface
      shell: "(sleep 1; ifdown {{ network_interface.stdout }} && ifup {{ 
network_interface.stdout }}) &"
      args:
        executable: /bin/bash
      become: true
      async: 100
      poll: 0
    
    - name: Change ansible's ip address for each host
      set_fact:
        ansible_ssh_host: "{{ item.value.address }}"
      when: item.key == inventory_hostname
      with_dict: "{{ new_addresses }}"

    - name: Wait for the hosts' network interface to come back up
      local_action:
        module: wait_for
        host: "{{ ansible_ssh_host }}"
        port: 22
        delay: 10
        state: started
      register: wait_result

    - name: Modify all of the route53 records for ip changes that succeeded
      local_action:
        module: route53
        command: create
        zone: xxxxx
        record: "{{ item.key }}"
        type: A
        value: "{{ item.value.address }}"
        overwrite: true 
      when: item.key == inventory_hostname and wait_result|succeeded
      with_dict: "{{ new_addresses }}"

On Friday, December 30, 2016 at 1:37:26 PM UTC-8, Gerald Spencer wrote:
>
> Okay, we've ran out of ip addresses, and got a larger subnet from our ip. 
> I am currently in the process of switching them over, and decided it would 
> be nice to do this with ansible, but I have ran into a little snag. 
>
> Currently I have:
>
>     - shell: "ifconfig | grep -B1 {{ old_address }}| grep -E 
> '^(\\w+)[[:space:]]' | sed 's/\\s.*$//'"
>       args:
>         executable: /bin/bash
>       register: network_interface
>
>     - template:
>         src: files/linux_network_interfaces.j2
>         dest: /etc/network/interfaces
>         owner: root
>         group: root
>         mode: '0644'
>       become: true
>       when: item.key == inventory_hostname
>       with_dict: "{{ new_addresses }}"
>
>     - shell: "ifdown {{ network_interface.stdout }} && ifup {{ 
> network_interface.stdout }}"
>       args:
>         executable: /bin/bash
>       become: true
>
> But it hangs in the last shell task... since the IP address was changed. 
>
> Is there a way I can tell this task to just run, then use set_fact to 
> modify each host to its new IP to ping and make sure it worked, then I'll 
> move forward and modify our DNS records to match the new hosts..
>

-- 
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/f2097c85-f557-4f57-ad10-b003d6252966%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to