Как проверить, существует ли каталог в рецепте Chef NOT_IF?

В рецепте Chef у меня есть ресурс bash, который в основном загружает и устанавливает программное обеспечение под названием Revolution R. Я должен сказать, что я действительно новичок в Ruby.

Это мой ресурс:

bash 'download_revolutionr' do
    code <<-EOH
    mkdir -p /tmp/RRO-#{rro_version}
    wget https://mran.revolutionanalytics.com/install/RRO-#{rro_version}-#{rro_os_platform}-#{rro_os_version}.x86_64.deb -P /tmp/RRO-#{rro_version}
    wget https://mran.revolutionanalytics.com/install/RevoMath-#{rro_version}.tar.gz -P /tmp/RRO-#{rro_version}
    tar -xzf /tmp/RRO-#{rro_version}/RevoMath-#{rro_version}.tar.gz -C /tmp/RRO-#{rro_version}
    EOH
  not_if { ::Dir.exists?("/tmp/RR0-" + rro_version) }
end

Моя идея состоит в том, чтобы не загружать программное обеспечение, если оно уже есть на диске внутри каталога /tmp/RRO-version. Итак, я добавил условие not_if с Dir.exists. Но ресурс все равно исполняется (и скачивается новая бесполезная копия ПО).

Есть идеи, что с этим не так?


person Gabriele B    schedule 09.10.2015    source источник
comment
Не уверен, что правильно понимаю, но имя папки RRO, кажется, пишется с нулем в конце как RR0 в операторе защиты ::Dir.exists?(/tmp/RR0- + rro_version)   -  person display name    schedule 10.10.2015
comment
Просто используйте интерполяцию, как и в остальной части кода: ::Dir.exists?("/tmp/RR0-#{rro_version}") в дополнение к комментарию @IsabelHM выше.   -  person Tensibai    schedule 12.10.2015
comment
извините за опечатку. Но ошибка была на самом деле только здесь, а не в реальном коде. Однако мне удалось найти ошибку: это была очень глупая проблема с разрешением.   -  person Gabriele B    schedule 12.10.2015


Ответы (1)


Я бы посоветовал ознакомиться с поваренной книгой ark для работы с удаленными архивными пакетами.

include_recipe "ark"

ark 'RevoMath' do
  url 'https://mran.revolutionanalytics.com/install/RevoMath-1.0.1.tar.gz'
end

Это установит содержимое пакета tar в каталог /usr/local/RevoMath-1.0.1. Эти значения по умолчанию можно переопределить.

person Mark O'Connor    schedule 09.10.2015
comment
Спасибо! это определенно более идиоматичное решение, чем мое. - person Gabriele B; 12.10.2015