0

I have inventory file as below,

[routers]
iLAB-SR-12-R2 ansible_host=192.168.82.211
iLAB-SR-12-R3 ansible_host=192.168.82.212
iLAB-SR-12-R4 ansible_host=192.168.82.213

And I have shell script for comparing multiple files with master file,

#!/bin/bash
config_location="/etc/ansible/test"
master="/etc/ansible/test-master"
cd $config_location
file=`ls -l | grep "^-" | awk '{print $NF}'`
echo "Hostname      IpAddress      Comments" > /etc/ansible/output.csv
for i in $file
do
  if diff -c $i $master > "/etc/ansible/test-difference/diff_$i" ;then
    echo "$i                    NoChange"
  else
    echo "$i                    SomeChange"
  fi
done >> /etc/ansible/output.csv

The question is if it was ansible i would use {{remote_host}} to get the ipaddress for my output.csv file. In script how could i call variable {{ansible_host}} to get ipaddress or is there any way.

Below is my sample output.csv file but the ipaddress is empty now,

Hostname   Ipaddress   Comments
Test1                   Somechanges
Test2                   Nochanges

Anyone help me how to get the ipaddress from the inventory file. Thanks in advance.

  • 1
    The way you are assigning your file-variable will fail you sooner or later. You should not parse ls , and I suggest naming the variable something other than "file", because file is a command name. You should quote your variables, too. File names can have spaces in them... – markgraf Oct 8 at 11:27
  • You are echoing a files name, not its contents. So there can't be any IP-Adresses, unless you happen to have files named like IP-Adresses. – markgraf Oct 8 at 11:30
  • 1
    Why are you using ansible as a data source and then reinventing its functionality? Do that logic in ansible and you can just interpolate variables. Im nort sure i understand what you're actually trying to accomplish though. – Daniel Farrell Oct 8 at 11:30
  • Seconded. ansible -i inventoryfile all -m setup -a 'filter=ansible_all_ipv4_addresses' will get you your ip-adresses. – markgraf Oct 8 at 11:38
1

Can you modify your script ?

If you can, at the start of the script get the two parameters you need like:

remote_host="$1"
ansible_host="$2"

Then in your playbook, you can call your script this way:

myscript {{remote_host}} {{ansible_host}}

It's been a long time since I played with ansible. Make sure the syntax is right :)

  • 1
    Julien, Let me try and let you know. Thanks. – riswan66 Oct 9 at 7:27
  • @riswan66 sure :) Don't hesitate to edit my post in case I made a syntax error :) – Julien B. Oct 9 at 12:13
  • Julien, If we call the variable as you mentioned means its getting the variable name but if we use with echo it doesnot print all the ipaddress instead print the 1 ipaddress repeated times. See below example, ``` ansible_host="$1" echo "Hostname IpAddress Comments" > /etc/ansible/output.csv for i in $file do if diff -c $i $master > "/etc/ansible/test-difference/diff_$i" ;then echo "$i $ansible_host NoChange" else echo "$i $ansible_host SomeChange" fi done >> /etc/ansible/output.csv ``` – riswan66 Oct 11 at 2:10
  • The output we want is, Hostname Ipaddress Comments iLAB-SR-12-R2 192.168.82.211 NoChange iLAB-SR-12-R3 192.168.82.212 SomeChange But the output we get is, Hostname Ipaddress Comments iLAB-SR-12-R2 192.168.82.211 NoChange iLAB-SR-12-R3 192.168.82.211 SomeChange Means it reading the variables but cannot all the values. Script Execution: ./test.sh {{ansible_host}} – riswan66 Oct 11 at 2:14
  • @riswan66 Hum... from your comment, expected == actual; probably a copy paste issue, can you check that ?^^ – Julien B. Oct 11 at 8:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.