2015-11-12 1 views
0

У меня есть следующий код в кукольной, и когда я запускаю его, игнорируется awk фильтр Но если я использую cut -d ' ' -f8, он работает!кукольный inline_template игнорируя awk

$hugepage=inline_template("<%= `grep Hugepagesize /proc/meminfo | awk '{print $2}'` %>") 
notify {"Variable testing, hugepage size is ${hugepage}":} 

Результат следующий:

Notice: /Stage[main]/Sysctl::Pgsql/Notify[Variable testing, hugepage size is Hugepagesize:  2048 kB 

Почему печатает Hugepagesize: 2048 kB? выглядеть AWK не работает :(

На irb обстреливать свою работу.

irb(main):002:0> `grep Hugepagesize /proc/meminfo | awk '{print $2}'` 
=> "2048\n" 

UPDATE

Я попытался также следующие, но тот же результат :(

$hugepage = generate("/bin/sh","-c", "/bin/grep Hugepagesize /proc/meminfo | /bin/awk '{print $2}'") 

ответ

1

Вы передаете цитату -маркированная строка с inline_template() или до generate(). Кукольный будет интерполировать ссылки на переменные, которые он находит внутри, в частности, он будет nterpolate значение переменной $2. Предполагая, что эта переменная не определена, пустая строка будет интерполирована. Затем результат идентичен

$hugepage=inline_template("<%= `grep Hugepagesize /proc/meminfo | awk '{print }'` %>") 

Это именно то, что вы наблюдаете. Чтобы этого избежать, вы можете избежать $, или вы можете изменить внешние цитаты на апострофы (требуя от вас что-то сделать во внутренних апострофах). Я бы, вероятно, выбрал бывшее:

$hugepage=inline_template("<%= `grep Hugepagesize /proc/meminfo | awk '{print \$2}'` %>") 
+0

святое дерьмо !!! я не заметил, что .. я думал, что 'inline_template' работает так же, как и внутри ./ templete/foo.erb' Но вы очистили мое сомнение ... Спасибо человеку! – Satish

+1

Речь идет не о 'inline_template()' или 'generate()' конкретно; это о аргументе строки, который вы передаете этим функциям. Интерполяция выполняется Puppet, когда она оценивает строку, прежде чем любая из этих функций когда-либо будет вызвана. –

Смежные вопросы