Discussion:
[ansible-project] Update inventory file
Edgardo Vega
2015-07-24 15:20:14 UTC
Permalink
I have a playbook with is creating vms and then i want to add the ip
address to the inventory file to when it comes time to provision i can just
call the updated inventory file. lineinfile will only add to the found
lines at the end of the file. replace will update all the matches. What is
the recommended way to do this?


===playbook===
---
- name: create instances
hosts: all
gather_facts: no
connection: local
sudo: no
tasks:
- name: "create instance and assign floating-ip (if available)"
os_server:
state: present
auth:
auth_url: http://10.10.81.227:5000/v2.0
username: "{{openstack_username | mandatory }}"
password: "{{openstack_password | mandatory }}"
project_name: cups
name: "{{ inventory_hostname | mandatory }}"
image: "{{ openstack_image | mandatory }}"
key_name: "{{ openstack_key_name | mandatory }}"
flavor: "{{ openstack_flavor | mandatory }}"
register: result

- debug: var=result

- debug: var=inventory_hostname


- lineinfile: backrefs=yes state=present dest="{{inventory_dir}}/test"
regexp='{{inventory_hostname}}\s' line='{{inventory_hostname}}
ansible_ssh_host={{result.openstack.accessIPv4}}'

===inventory file====
[tomcat]
tomcat

[jenkins]
jenkins

[downloads]
downloads

[project:children]
tomcat
jenkins
downloads

[cups:vars]
ansible_ssh_user=centos
--
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 ansible-project+***@googlegroups.com.
To post to this group, send email to ansible-***@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/dc0ffdd5-4ce6-4254-8284-058d7d6563cd%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
'rmullinnix' via Ansible Project
2015-07-24 22:21:19 UTC
Permalink
One way is to create a new file with the host name and the ip address, then
use this to update the hosts file as opposed to updating it in place. You
can use the post_tasks: to run the update at the end of the playbook.

You can do this with sed by creating a sed script file with lines of --
s/hostname/hostname ansible_ssh_host=ipaddress/g. You can use lineinfile -
which will add to the EOF. call it hosts.update

Then you would have a task that would update the hosts file
post_tasks:
- name: update hosts file with ip address
shell: sed -i -f hosts.update hosts

I'm sure there is probably a better way to do this
Post by Edgardo Vega
I have a playbook with is creating vms and then i want to add the ip
address to the inventory file to when it comes time to provision i can just
call the updated inventory file. lineinfile will only add to the found
lines at the end of the file. replace will update all the matches. What is
the recommended way to do this?
===playbook===
---
- name: create instances
hosts: all
gather_facts: no
connection: local
sudo: no
- name: "create instance and assign floating-ip (if available)"
state: present
auth_url: http://10.10.81.227:5000/v2.0
username: "{{openstack_username | mandatory }}"
password: "{{openstack_password | mandatory }}"
project_name: cups
name: "{{ inventory_hostname | mandatory }}"
image: "{{ openstack_image | mandatory }}"
key_name: "{{ openstack_key_name | mandatory }}"
flavor: "{{ openstack_flavor | mandatory }}"
register: result
- debug: var=result
- debug: var=inventory_hostname
- lineinfile: backrefs=yes state=present
dest="{{inventory_dir}}/test" regexp='{{inventory_hostname}}\s'
line='{{inventory_hostname}}
ansible_ssh_host={{result.openstack.accessIPv4}}'
===inventory file====
[tomcat]
tomcat
[jenkins]
jenkins
[downloads]
downloads
[project:children]
tomcat
jenkins
downloads
[cups:vars]
ansible_ssh_user=centos
--
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 ansible-project+***@googlegroups.com.
To post to this group, send email to ansible-***@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/7d7b1f23-3e30-4e80-8a5c-7eb14fa15c75%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Loading...