Listas dinâmicas no fantoche?

1

Estou usando o fantoche (versão 4.x, onde 2 < = x < = 8) para configurar um sistema. Eu tenho um número de variáveis fornecidas por Hiera, cada uma contendo uma lista de grupos. Os dados de entrada são parecidos com:

project1_groups:
  - group1
  - group2

project2_groups:
  - group2
  - group3

project3_groups:
  - group2
  - group4

A partir disso, preciso criar uma única lista de grupos que eu possa passar para um recurso user . Conceitualmente, quero:

$groups = project1_groups + project2_groups + project3_groups
user { 'someuser':
  groups => $groups
}

Em outras palavras, a partir dos dados de entrada acima, eu quero obter uma lista de grupos que podem ser parecidos com:

[group1, group2, group2, group3, group2, group4]

Dupes estão bem, a lista não precisa ser exclusiva.

Mas há uma complicação! O truque é que eu não sei de antemão as variáveis project*_groups disponíveis. Eu tenho uma variável $projects que no exemplo acima conteria a lista [project1, project2, project3] .

Eu criei uma solução baseada em inline_template que funciona mas parece hacky; Eu estou querendo saber se existe uma maneira melhor de fazer isso:

include stdlib

# get the list of project names
$projects = hiera('projects')

# this is a list of default groups. It might be undefined.
$default_groups = undef

# create a comma-delimited list of groups
$groups_string = inline_template('<% @projects.each do |prj|
    -%><% scope.call_function("hiera",
        [prj + "_groups", []]).each do |grp|
    -%><%= grp %>,<% end -%><% end -%>')

# start with a (possibly nil) list of default groups
$_groups = any2array($default_groups)

# split comma-delimited string, concatenate it with default groups,
# and remove empty groups (which you get if $default_groups is nil).
$groups = concat($_groups, $groups_string.split(',')).filter |$grp| {$grp != ''}

Observação Atualizado para usar scope.call_function , pois você não pode chamar hiera as scope.function_hiera no fantoche 4.x.

    
por larsks 23.08.2017 / 16:00

0 respostas

Tags