марионетка определила тип и создающий несколько шаблонов из 1 .erb файла

Я должен найти решение этой проблемы, с которой я столкнулся.

У меня есть хеш (он, как предполагается, переопределяется как умный параметр класса позже), что я выполняю итерации канавки в своем template.erb для генерации нескольких ресурсов Файла, что я определил использование массива. Я хочу, чтобы повторение остановилось после того, как это - канавка первый набор пар значения ключа, и затем начните писать в следующий файл.

Я покажу пример для создания вещей более ясными.

#### init.pp ####
class testing ( 
$nameid = ['alex','ben'],
$game_code = {
    alex_super_mario => {
            "type"     => "1",
            "characters" => {
                            "bowser" => "123",
                            "luigi" => "456",
                            "princess" => "789" }
    },
    ben_mega_man => {
            "type" => "2",
            "characters" => {
                            "something" => "111213",
                            "else" => "131415",
                            "lastone" => "161718" }
    },
 }
) {

define testing(
$base_path = '/var/tmp/testing',
){
file  {"${base_path}/${name}_file.xml":
  owner   => 'root',
  group   => 'root',
  ensure  => 'file',
  mode    => '0644',
  content => template("testing/template.xml.erb"),
 }
}
testing { [$nameid]: }
}
### обрабатывают файл по шаблону ### template.xml.erb
  <% @nameid.each do |username| %>
<UserName><%= username %></UserName>
<% end %>
<games>
<% @game_code.sort.map do |hero, value| %>
<% value.sort.map do |game,code| %>
         <% if game == "characters" %>
                <% code.each do |k, v| %>
    <game>
        <type><%= value['type'] %></type>
        <gameid><%= v %></gameid>
        <extcharacters>
            <char>/var/tmp/<%= k %></path>
        </extcharacters>
    </game>
            <% end %>
    <% end %>
 <% end %>
<% end %>
</games>
# это генерирует два файла от моего $nameid массива = ['alex', 'ben'] как ожидалось.
Notice: /Stage[main]/Testing/Testing::Testing[ben]/File[**/var/tmp/testing/ben_file.xml**]/ensure:     defined content as '{md5}21af03b1dd7427d17c2460bae323bc24'
Notice: /Stage[main]/Testing/Testing::Testing[alex]/File[**/var/tmp/testing/alex_file.xml**]/ensure:     defined content as '{md5}21af03b1dd7427d17c2460bae323bc24'
Notice: Finished catalog run in 0.34 seconds

Однако смотря в этих файлах я получаю два идентичных файла с выводом и для "alex_super_mario" и для "ben_mega_man" ключа от моего $game_code хеша:

Ожидаемый вывод, которого я хочу достигнуть, состоит в том, чтобы в основном иметь первый набор повторений, который сделан для "alex_super_mario" => {.... для вхождения в alex_file.xml вместе с alex именем пользователя.

и материал ben_mega_man входит в ben файл.

Действительно ли это возможно?

    <UserName>alex</UserName>  <--- ## this should go into the alex_file.xml

<UserName>ben</UserName> <--- ## this should go into the ben_file.xml ##

<games>




    <game>                       ## <-- this should go to the ben_file.xml
        <type>2</type>
        <gameid>111213</gameid>
        <extcharacters>
            <char>/var/tmp/something</path>
        </extcharacters>
    </game>

    <game>
        <type>2</type>
        <gameid>161718</gameid>
        <extcharacters>
            <char>/var/tmp/lastone</path>
        </extcharacters>
    </game>

    <game>
        <type>2</type>
        <gameid>131415</gameid>
        <extcharacters>
            <char>/var/tmp/else</path>
        </extcharacters>
    </game>




    <game>                  ### <------ these should go into the alex_file.xml
        <type>1</type>
        <gameid>123</gameid>
        <extcharacters>
            <char>/var/tmp/bowser</path>
        </extcharacters>
    </game>

    <game>
        <type>1</type>
        <gameid>789</gameid>
        <extcharacters>
            <char>/var/tmp/princess</path>
        </extcharacters>
    </game>

    <game>
        <type>1</type>
        <gameid>456</gameid>
        <extcharacters>
            <char>/var/tmp/luigi</path>
        </extcharacters>
    </game>






</games>
0
задан 22 February 2015 в 02:12
1 ответ

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

<UserName><%= @name %></UserName>
<games>
<% @game_code.sort.map do |hero, value|
if (somecondition)
value.sort.map do |game,code| 
         <if game == "characters" 
                 code.each do |k, v| %>
    <game>
        <type><%= value['type'] %></type>
        <gameid><%= v %></gameid>
        <extcharacters>
            <char>/var/tmp/<%= k %></path>
        </extcharacters>
    </game>
            <% end 
     end 
  end 
end
end %>
</games>

где "somecondition", однако вы хотите решить, совпадает ли текущий хэш 'value' с вашим текущим именем героя (трудно сказать, как вы хотите это сделать, учитывая, что их ключи в game_code не соответствуют строкам в nameid)

1
ответ дан 4 December 2019 в 17:02

Теги

Похожие вопросы