Как да създадете един и същ ресурс два пъти в Puppet

Моето изискване е да правя някои повтарящи се неща за конфигуриране на файлове с помощта на цикъл, нещо като следното,

$no_of_managers = 2
$array = ['One','two','Three']


define loop() {

notice("Configuring The Manager Nodes!!")

if ($name == $no_of_managers+1) {
    notice("Loop Iteration Finished!!!")
  }
  else
  {
    notice("Iteration Number : $name \n")

    # Doing All Stuff Here 

resource {$array:}

    $next = $name + 1
    loop { $next: }
 }
 }

loop { "1":}

define resource () {
# Doing my other Stuff
notice ("The Parsed value Name : ${name}\n")

}

Сега, когато се изпълнява втората итерация, възниква следната грешка,

Error: Duplicate declaration: Resource[One] is already declared in file 

Как мога да преодолея това? Това, което правя, е настройка на клъстер. Има ли заобиколно решение за това, аз съм начинаещ за кукли, така че любезните ви насоки са високо оценени.

Случаят на използване:

Опитвам се да настроя клъстер, който има множество мениджърски/работни възли, така че с помощта на този скрипт потребителят има привилегията да избере от колко мениджърски възли има нужда. Така че първият цикъл е за копиране на необходимите файлове и създаване на необходимия брой възли.

Вторият цикъл е там, за да прокара всички .erb шаблони. Тъй като всеки възел има малко по-различни конфигурации, .erb файловете имат собствена логика вътре в тях.

Така че след всяка итерация искам да избутам .erb шаблоните към съответния възел.


person ycr    schedule 21.08.2014    source източник


Отговори (1)


В Puppet 3.x не можете да изградите цикъл по начина, който опитвате.

resource { $array: }

е цикъл върху съдържанието на $array, ако желаете.

Не е съвсем ясно какво се опитвате да разрешите. Ако можете да направите въпроса си малко по-конкретни, може да сме в състояние да предложим действително внедряване.

Актуализация

Ако наистина искате да тръгнете по този път, трябва да генерирате уникални имена за вашите извлечени ресурси.

$local_names = regsubst($array, '$', "-$name")

resource { $local_names: }

Във вашия дефиниран тип ще трябва да извлечете оригиналното значение, като премахнете суфикса.

define resource() {
    $orig_name = regsubst($name, '-[0-9]+$', '')
    # use $orig_name where you used $name before
}

Имайте предвид, че дори експортираните ресурси трябва да имат уникални имена. Така че може да се наложи трансформацията да се случи в манифеста на приемащия възел.

person Felix Frank    schedule 21.08.2014
comment
Здравейте, редактирах въпроса, цикълът работи перфектно. Имам Puppet 3.6.2. Да, вторият цикъл е над масива. - person ycr; 21.08.2014
comment
Виждам. Строго погледнато, вие току-що създадохте рекурсивна дефиниция;) Ще актуализирам отговора си. - person Felix Frank; 21.08.2014
comment
WoW, ти си наистина страхотен... Благодаря ти много... :) - person ycr; 21.08.2014