LINUX.ORG.RU
решено ФорумAdmin

Puppet и возвращаемые значения из функций

 


0

1

Привет, ЛОРчик!

Подскажи, что я делаю не так, пожалуйста. Написал функцию, которая должна на ноде чекать содержимое файла и возвращать результат в зависимости от.

Puppet::Functions.create_function(:'check') do
  dispatch :isin do
    param 'String', :path_string
    param 'String', :check_string
    return_type 'Boolean'
  end 

  def isin(path_string, check_string)
    if File.readlines("/etc/default/grub").each do | line |
      return true if line.include?("ipv6")
    end 
      return false
    end 
  end 
end

Функция работает и действительно возвращает верный результат в зависимости от того, есть ли что нибудь про ipv6 в файле или нет.

Затем в модуле описываю логику так

class m_grub {
  include stdlib
  $grub_path="/etc/default/grub"

  $res = Deferred("check",['/etc/default/grub','ipv6']) 
  notify { 'TEST RES':
    message => Deferred(
                 'sprintf',
                 ['Result is : %s', $res]
               ),
  }  
   
  if $res == 'true' {
    notify { 'TRUE': }
  } elsif $res == 'false' {
    notify { 'FALSE': }
  }
}

Проблема в том, что возвращается true, а ни одна нотифайка не выполняется. Причем, если вручную назначать $res = ‘true’ или ‘false’, то всё работает, как положено.

Подскажи, лорчик, гдле ошибка?

Заранее высылаю бандероль с квантами успеха.

Перемещено hobbit из general

★★

Последнее исправление: SpaceRanger (всего исправлений: 1)

Ответ на: комментарий от router

Уже как только не пробовал. Вот так тоже не работает - всегда выполняется notify {‘FALSE’: }

  if $res == true {
    notify { 'TRUE': }
  } else {
    notify { 'FALSE': }
  }
}

a вот так

  if $res {
    notify { 'TRUE': }
  } else {
    notify { 'FALSE': }
  }
}

всегда выполняется notify {‘TRUE’:}

SpaceRanger ★★
() автор топика
Последнее исправление: SpaceRanger (всего исправлений: 4)

Господа, проблема решена.

Дело в том, что модуль и его логика разрешается на мастере в момент конпеляции. А в это время deferred переменные не известны. Отсюда и косяки. Выход - custom_facts.

P.S. Какой же кал этот папет

SpaceRanger ★★
() автор топика
Ответ на: комментарий от Eshkin_kot

It depends, но да, у меня он не прижился, мы сейчас на работе во всю осваиваем Salt. Puppet тоже рассматривали, но отпугнуло то что писать кастомные модули(а их придется писать, кто бы что не говорил) в случае чего придется на Ruby. А я Ruby накушался уже в OpenNebula и oxidized, спасибо, мне хватило.

В Salt/Ansible хотя бы +/- понятный Python.

Pinkbyte ★★★★★
()

Миши плакали, кололись, но продолжали использовать псевдодекларативные системы управления конфигурацией вместо того, чтобы использовать по-настоящему декларативный и конгруентный NixOS

Tsukasa
()
Последнее исправление: Tsukasa (всего исправлений: 1)