Объединить строки в ресурсе file_line - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь объединить строку в манифесте марионетки следующим образом:

file_line {'Append to /etc/hosts':
  ensure => present,
  line =>  "${networking['ip'] + '\t'}${networking['fqdn'] + '\t'}${networking['hostname']}",
  match => "${'^#?'+ networking['ip'] + '\s+' + networking['fqdn'] + '\s+' + networking['hostname']}",
  path =>  '/etc/hosts'
}

Я получаю синтаксические ошибки или в приведенном выше случае:

Значение ''не может быть преобразовано в Numeric

Что, я предполагаю, означает, что ему не нравится оператор плюс.Итак, как мне интерполировать строки в атрибутах match и line?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

я знаю, что вы уже получили свой ответ, но вы можете сделать жизнь проще, используя host для управления /etc/hosts:

host {
    "localhost": ip => "127.0.0.1";

    "$::puppet_server":
        ip           => "1.2.3.4",
        host_aliases => [ "puppetserver" ],
    ;

    "dns-01.tld":
        ip           => "1.2.3.5",
        host_aliases => [ "dns-01" ],
    ;

    "dns-02.tld":
        ip           => "1.2.3.6",
        host_aliases => [ "dns-02" ],
    ;
}
0 голосов
/ 26 февраля 2019

Проблема здесь в том, что оператор + ограничен только Numeric типами ( документация ).Его нельзя использовать с типами String.Тем не менее, пробел и регулярные выражения могут по-прежнему использоваться как обычно без попытки объединения строк.Они просто должны быть размещены вне интерполяции переменных.Поэтому:

file_line { 'Append to /etc/hosts':
  ensure => present,
  line   => "${networking['ip']}\t${networking['fqdn']}\t${networking['hostname']}",
  match  => "^#?${networking['ip']}\s+${networking['fqdn']}\s+${networking['hostname']}",
  path   => '/etc/hosts'
}

должен решить ваши проблемы с несовпадением типов и оператором +.

...