Ansible roles: change file extension

Question:

In a Vagrant setup, I use Ansible to provision the virtual machine.

In one of the Ansible roles, I have a task that copies some files inside ~/bin/ folder:

~/bin/one.sh
~/bin/two.sh

I want to create symlinks of those files so the end result looks like:

~/bin/one.sh
~/bin/two.sh
~/bin/one (symlink to ~/bin/one.sh)
~/bin/two (symlink to ~/bin/two.sh)

How can I achieve that? So far I have tried this but it doesn’t work:

I need to put a regex inside dest=~/bin/ that takes the file name (like one.sh) and removes the extension (one.sh becomes one) but I’m not sure how to do it.

Update

I finally used this tasks:

Answer:

From other useful filters chapter:

To get the root and extension of a path or filename (new in version 2.0):

You need to reference the first element of the list, so:


Of course, the above task works given the provisions specified in the task which you later edited out of the question, because fileglob lookup is running locally on the control machine (and in the previous task you used to copy the same files, so this one assumes they exist on local machine).

If you want to run the task singlehandedly you’d have first to prepare a list of the files on the target node with the find module and then running the above looping over the results.

Leave a Reply