I want to create symbolic link only if its not present
I have written below recipe
link '/home/user1/veera' do
to '/usr/local/veera-10.0'
only_if {test -L /home/user1/veera}
end
I tried below condition in recipe
only_if {test -L /home/user1/veera}
But it updates the symlink next time when chef runs next time(if it its changed).But i don't want that.
I want to skip this if symlink exist and create only when symlink it doesn't exists.
Also tried this
link '/home/user1/veera' do
to '/usr/local/veera-10.0'
not_if { File.symlink?('/home/user1/veera') }
end
But its still updating the symlink when changed on next chef run
The link resource is idempotent in nature, and shouldn't change if the link is already present.
However, for some reason if you want to skip the step, we can use
symlink?
method from Ruby's File class. This method returnstrue/false
based on whether the target path is a link or not.Like:
Another potential issue that I noticed, and corrected in the below example is your source path -
usr/local/veera-10.0
will most likely be relative to your current working directory. To be sure, use/usr/local/veera-10.0
.So in recipe:
Update
As @lamont suggested in his comment, try using the
File.exist?
test as you want to skip the step if this path exists (whether its a file, dir, or symlink).