2015-05-05 3 views
0

Как я могу получить следующий код Ruby для возврата nil, если regvalue не существует?Как получить этот код Ruby для возврата nil?

Сейчас он работает хорошо, когда есть что-то, чтобы вернуться, но когда не он выплевывает эту ошибку:

Could not retrieve fact='notepadpp', resolution='': The system cannot find the file specified.

Я бы ожидать, что она просто не выводить ничего, если запись не существовать.

Facter.add(:notepadpp) do 
    # restricts module to windows 
    confine :kernel => :windows 
    setcode do 
     require 'facter/util/registry' 

     notepadpp = nil 
     regvalue = Facter::Util::Registry.hklm_read('SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Notepad++', 'Display') 
     notepadpp = regvalue if regvalue && !regvalue.empty? 

     # if regvalue and not regvalue.empty? 
     # notepadpp = regvalue 
     # else nil end 
    end 
end 
+0

Желаемое поведение сильно зависит от того, что ожидает «Facter # add». Не могли бы вы связать какую-либо документацию? – mudasobwa

+0

Это лучший/только [документация] (https://docs.puppetlabs.com/facter/2.4/custom_facts.html) У меня есть. – tek0011

ответ

1

Я сделал чистый код и все вдруг получил работая:

Facter.add(:notepadpp) do 
    confine :kernel => :windows # restricts module to windows 
    setcode do 
     require 'facter/util/registry' 
     Facter::Util::Registry.hklm_read('...\Notepad++', 'Display') rescue nil 
    end 
end 

#⇒ #<Facter::Util::Fact:0xb907a44 ...> 

Функция не достаточно умен, чтобы вернуть nil когда раздел реестра не найден, вероятно, бросает исключение, так мы должны справиться с этим.

UPD Если вы не хотите, то следует добавить, если ключ реестра не существует:

require 'facter/util/registry' 
reg_value = Facter::Util::Registry.hklm_read('...\Notepad++', 'Display') rescue nil 
Facter.add(:notepadpp) do 
    confine :kernel => :windows # restricts module to windows 
    setcode do 
     regvalue 
    end 
end if regvalue 
+0

Спасибо, но он по-прежнему не работает с 'Не удалось получить fact = 'notepadpp', resolution = '': Система не может найти указанный файл.' – tek0011

+0

Это терпит неудачу в другом месте. Пожалуйста, покажите код вокруг строки, которую вы видите в этом сообщении об ошибке. – mudasobwa

+0

Код за вами выше. Проблема в том, что если ключ реестра не существует, он завершит поток кода. Таким образом, мне нужен способ обработки переменной реестра, если раздел реестра не существует. – tek0011

2

Спасибо! Вы указали мне в правильном направлении. Дайте мне знать, если это реальное решение, и я заметил, что это ответ. Я взял ваш код и добавил спасение.

Facter.add(:notepadpp) do 
    confine :kernel => :windows # restricts module to windows 
    setcode do 
     require 'facter/util/registry' 
     begin 
     Facter::Util::Registry.hklm_read('SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Notepad++', 'DisplayVersion') 
     rescue 
     nil 
     end 
    end 
end 
Смежные вопросы