Назад | Перейти на главную страницу

Puppet - передать переменную с помощью команды создания файла

Мне нужен способ передать заданную переменную - скажем, thearch - в несколько разных файлов в данном классе. Мне нужно указать содержимое этой переменной для каждого файла отдельно.

Я пробовал следующее:

file { "xxx":
  thearch => "i386",
  path    => "/xxx/yyyy",
  owner   => root,
  group   => root,
  mode    => 644,
  content => template("module/test.erb"),
}

Это не передает эту переменную, поэтому я могу использовать ее с оператором <% = thearch%> в файле erb, как я ожидал.

Что я здесь делаю не так?

Вам нужно будет заключить файл в определение, которое принимает этот параметр, чтобы он был доступен при вызове шаблона, а затем вызвать это определение. Если многие параметры обычно одинаковы, установите их как значения по умолчанию, пока вы это делаете, просто чтобы код был чистым.

define thearch_file($thearch, $path, $owner = root, $group = root, $mode = 0644, $template = '/module/test.erb') {
  file { $name:
    path    => $path,
    owner   => $owner,
    group   => $group,
    mode    => $mode,
    content => template($template),
  }
}

thearch_file {
  "xxx":
    thearch => 'i386',
    path    => "/xxx/yyy";
  "yyy":
    thearch => 'x86_64',
    path    => "/xxx/zzz";
}

Вы не можете определять произвольные мета-параметры для файлового ресурса, такого как thearch. Доступны только мета-параметры Вот. Вы можете использовать существующий факт об архитектуре узлов, который может дать вам желаемую функциональность.

<%= architecture %>

или возможно

<% if architecture == 'i386' then -%>
  do some stuff
<% end-%>

Вы не можете этого сделать. Аргументы ресурса не являются произвольными значениями. Однако вы могли бы сделать это:

thearch = "i386"
file { "xxx":
  path    => "/xxx/yyyy",
  owner   => root,
  group   => root,
  mode    => 644,
  content => template("module/test.erb"),
}