Итак, этот первый бит кода тестового манифеста работает и успешно проверяется с помощью «parser validate»:
$display = @("END")
Family ${facts['os']['name']}
Name ${facts['os']['family']}
Family ${facts['os']['name']}
Version ${facts['os']['release']['full']}
END
notify { $display : }
Однако этот следующий бит кода манифеста завершается ошибкой со следующей ошибкой:
Error: Could not parse for environment production: Syntax error at '['
(file: /home/vagrant/puppet/facts.pp, line: 4, column: 21)
Этот манифест не проверяется с вышеуказанной ошибкой:
$display = @("END")
Family ${facts['os']['name']}
Name ${facts['os']['family']}
Family ${facts['os']['family']}
Version ${facts['os']['release']['full']}
END
notify { $display : }
Насколько я могу судить, поскольку все это в переменной, если синтаксис фактов верен,не должно быть никаких проблем.Ни одна из строк «Family», «Version», «Name» не должна иметь значения.Я пробовал любое количество различных комбинаций этих линий и видел, что выглядит только как недетерминированное поведение.Как, например, я не могу понять, почему иногда он проверяет, а иногда нет.
Я просто очень озадачен тем, какая тайная логика проверки используется здесь.
Другой пример (этоработает и проверяет), единственным изменением было изменение каждого начала строки, чтобы проверить, части факта не были изменены.
$display = @("END")
Test ${facts['os']['name']}
Test ${facts['os']['family']}
Test ${facts['os']['family']}
Test ${facts['os']['release']['full']}
END
notify { $display : }
Если это имеет значение, это работает на Mac внутри VirtualBox vm (Centos 7).