Почему анализатор Puppet в некоторых случаях дает сбой, но работает для других, которые идентичны? - PullRequest
0 голосов
/ 21 сентября 2018

Итак, этот первый бит кода тестового манифеста работает и успешно проверяется с помощью «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).

1 Ответ

0 голосов
/ 24 сентября 2018

Я подтвердил, что это ошибка, и создал отчет об ошибке PUP-9163 .Больше информации в отчете об ошибке.

Предлагаемые обходные пути:

Кукольный 6

$display = @("END")
${getvar("facts.os.family")}
END

Кукольный 4, 5

$display = @("END")
${($facts['os']['family'])}
END

Спасибо ХенрикЛиндберг для обходных путей.

Исправление для этого было объединено в здесь , и оно должно появиться в следующем выпуске Puppet 5/6.

...