отражение переменных erb

Я использую шаблон марионетки, который выполняет интерпретацию файла шаблона. Я хотел бы знать все доступные мне переменные, однако есть доступные переменные (например, fqdn), которые не перечислены ни одним из методов отражения, о которых я знаю, в частности, ни один из них:

<% Module.constants.each do |v| %># module constant: <%= v %>
<% end %>
<% Kernel.local_variables.each do |v| %># local variable: <%= v %>
<% end %>
<% Kernel.instance_variables.each do |v| %># instance variable: <%= v %>
<% end %>
<% Module.class_variables.each do |v| %># class variable: <%= v %>
<% end %>
<% Kernel.global_variables.each do |v| %># global variable: <%= v %>
<% end %>

Есть ли дополнительный метод отражения для erb, который покажет мне это?


person Stephen P. Schaefer    schedule 18.01.2011    source источник


Ответы (3)


"Просмотреть все клиентские переменные" должен делать то, что вы хотите.

person Foody    schedule 24.01.2011

На самом деле не знаю о шаблонах марионеток, но если fqdn является локальной переменной, то вызов local_variables (как в self.local_variables) должен отображать ее.

person Jakub Lédl    schedule 18.01.2011
comment
В то время как Kernel.local_variables возвращает (небольшой) список элементов, self.local_variables генерирует ошибку: Не удалось найти значение для «local_variables». - person Stephen P. Schaefer; 19.01.2011

Я не так много знаю о встроенных в erb средствах отражения, как хотелось бы, но с Puppet я думаю, что хеш, возвращаемый scope.to_hash, вероятно, то, что вам нужно. Из справочника по шаблонам:

<% scope.to_hash.keys.each do |k| -%>
<%= k %>
<% end -%>

В качестве альтернативы, если вы просто хотите один раз просмотреть переменные, предоставляемые узлом агента, вы можете запустить facter на узле; именно так Puppet получает всю эту информацию в первую очередь.

person nfagerlund    schedule 08.02.2011