символическая ссылка не работает с рецептом от шеф-повара

Я хочу создать символическую ссылку, только если ее нет

Я написал ниже рецепт

      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
Другие вопросы по тегам