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.