Puppet 2D迭代

时间:2015-10-29 21:06:58

标签: multidimensional-array puppet

我有一组二维配置变量:

$environments = [
  {
    'name' => 'foo',
    'port' => '1234',
  },
  {
    'name' => 'bar',
    'port' => '4321',
  },
]

是否可以迭代数组并使用内部数组中的变量。例如。我想为每个名字创建一个用户帐户。

# How to get each name?
user { $environment:
  ensure => 'present'
}

2 个答案:

答案 0 :(得分:0)

我从来没有真正使用木偶迭代。

但要从hash创建多个资源(注意哈希而不是数组),您可以使用create_resources()功能。

documentation有一个很好的例子。

hash parameters不能包含resource不理解的port。在您的示例中,user无法使用int main(int argc, char **argv) { int i, j, nul = 0, mat[8][8], tmpi, tmpj, a=0, k=0, l=0; label3: for (i=0; i<8; i++){ for(j=0; j<8; j++){ mat[i][j] = 0; } } mat[k][l] = 1; int n=0; label1: while( n < 64 ){ if ( n== 0){ for (i=0; i<8; i++){ for(j=0; j<8; j++){ if ( mat[i][j] == 1 ){ tmpi=i; tmpj=j; break; } } } for (i=0; i<8; i++){ for(j=0; j<8; j++){ if ( j == tmpj && i != tmpi ){ mat[i][j] = 2; } if( i == tmpi && j != tmpj ){ mat[i][j] = 2; } if ( i + j == tmpi + tmpj && ( i != tmpi && j != tmpj) ){ mat[i][j] = 2; } if ( i - j == tmpi - tmpj && ( i != tmpi && j != tmpj) ){ mat[i][j] = 2; } } } n++; goto label1; } for (i=0; i<8; i++){ for(j=0; j<8; j++){ if ( mat[i][j] == 0){ mat[i][j] = 1; tmpi = i; tmpj = j; goto label2; } } } label2: for (i=0; i<8; i++){ for(j=0; j<8; j++){ if ( j == tmpj && i != tmpi ){ mat[i][j] = 2; } if( i == tmpi && j != tmpj ){ mat[i][j] = 2; } if ( i + j == tmpi + tmpj && ( i != tmpi && j != tmpj) ){ mat[i][j] = 2; } if ( i - j == tmpi - tmpj && ( i != tmpi && j != tmpj) ){ mat[i][j] = 2; } } } n++; } for (i=0; i<8; i++){ for(j=0; j<8; j++){ if ( mat[i][j] == 1){ a++; } } } if ( a!= 8 ){ k++; goto label3; } for (i=0; i<8; i++){ for(j=0; j<8; j++){ if ( mat[i][j] == 2){ printf("%3d", nul); }else printf("%3d", mat[i][j]); }printf("\n"); } system("pause"); return 0; } 资源,因为它无法理解该参数。

希望无论如何这有点帮助。

答案 1 :(得分:0)

Puppet 4提供了built-in functions来迭代聚合值,并提供类似Ruby的新语法。当未来的解析器启用时,这些也可用于最新版本的Puppet 3。如果您使用这样的Puppet,您可以像这样解决问题:

each($environments) |$e| {
  foo { $e['name']: port => $e['port'] }
}