Ansible conditions and logics

Hello,

I’m trying migrate out my infrastructure under ansible control, but stopped on simple things realization with ansible.

I would be very grateful if some one can explain, best way for moving on this simple shell script under ansible.
May be simplest way is running external shell, and not try to push it all under ansible logic ?

`
pushd /
for i in
/etc/ipsec*
/home
/root
do
[[ -r $i ]] || continue
[[ -L $i ]] && continue
dst_dir=$(readlink -m /protected$(dirname $i))
dst_name=“${dst_dir}/$(basename $i)”
mkdir -p $dst_dir
rsync -a $i $dst_dir && rm -rf $i && ln -s $dst_name $i
ls -ld $i
done
popd

`

Thank you

If I understand correctly, you’re copying the contents of several directories to a central location, removing the old path, and then creating a symlink to the new location? To do that with ansible you’d just need to call the synchronize module to copy the files (or use command/shell to do the rsync), and then use the file module to create the symlink.

Hello,

Yes, you understand correctly. How can I synchronize files on remote node (not from local host to remote) ?

Thank you.

Hello,

I’m tried make it over ansible, but in final, i think much easiest way is using script module.

If someone interesting, when i tried it, i’m used this construction for getting files attributes and states:

`

  • name: Getting files stats
    stat: path={{ item }}
    register: st
    with_items:

  • /etc/asterisk

  • /etc/bind

  • /etc/GeoIP.conf

  • /etc/iptables

  • /etc/jabber

  • /etc/monit

  • /etc/mysql

  • /etc/nginx

  • /etc/postfix

  • /etc/ppp

  • /etc/snmp

  • /etc/sphinx

  • /etc/xl2tpd

  • name: Moving on
    debug: msg=“doing something with {{ item.item }}”
    when:

  • item.stat.exists == true

  • item.stat.islnk != true
    with_items: st.results

`

Thank you

Hi,

I think that you have to find best way which works for you.

For example I have to setup quite a lot munin symlinks for checks which depends of server role.

  1. Running this via ansible was really slow and caused quite complicated solution in terms of map links to roles.

  2. So I decided to write SHell template - which allow much easier setup conditions and control what must be run when server belong to some goup, and then in role have following tasks.

  • Copy shell script from template (during copy - ansible genertes everything what is requried in terms of symlinks for munin).
  • Run shell script.

This solution is fast for ansible now and all what I have to do is update template if some sym links must be adjusted (added /removed).

Hope that will help you as well.

Best regards,
Marcin Praczko

I’ve never seen this syntax used with when:

  • name: Moving on
    debug: msg=“doing something with {{ item.item }}”
    when:
  • item.stat.exists == true
  • item.stat.islnk != true
    with_items: st.results

Is that a valid conditional? Is it equivalent to ‘and’ ?

Yes, this is valid syntax and this conditions working as AND. And it working for me :wink:
You can create simple playbook for verifying it.

Correct.