символическая ссылка не работает с рецептом от шеф-повара
Я хочу создать символическую ссылку, только если ее нет
Я написал ниже рецепт
link '/home/user1/veera' do
to '/usr/local/veera-10.0'
only_if {test -L /home/user1/veera}
end
Я пробовал условия ниже в рецепте
only_if {test -L /home/user1/veera}
Но он обновит символическую ссылку в следующий раз, когда Chef запустится в следующий раз (если он изменился). Но я этого не хочу.
Я хочу пропустить это, если символическая ссылка существует, и создавать только тогда, когда символическая ссылка не существует.
Также пробовал это
link '/home/user1/veera' do
to '/usr/local/veera-10.0'
not_if { File.symlink?('/home/user1/veera') }
end
Но он все еще обновляет символическую ссылку при изменении при следующем запуске шеф-повара.
1 ответ
Ресурс ссылки идемпотентен в природе, и не должен меняться , если ссылка уже присутствует.
Однако по какой-то причине, если вы хотите пропустить этот шаг, мы можем использовать
symlink?
из Ruby классаFile . Этот метод возвращает
true/false
в зависимости от того, является ли целевой путь ссылкой или нет.
Нравиться:
File.symlink?('/home/user1/veera')
Еще одна потенциальная проблема, которую я заметил и исправил в приведенном ниже примере, - это ваш исходный путь -
usr/local/veera-10.0
скорее всего, будет относиться к вашему текущему рабочему каталогу. Чтобы быть уверенным, используйте
/usr/local/veera-10.0
.
Итак в рецепте:
link '/home/user1/veera' do
to '/usr/local/veera-10.0'
not_if { File.symlink?('/home/user1/veera') }
end