1

我正在尝试编写一个遍历数组以创建和维护应用程序用户的清单。用户列表通过以下方式从 init.pp 传递到清单:

$app_users = [ at1,et1,at2,et2 ]

users.pp 清单然后读取数组以创建用户:

 define appuser {
    user { $name:  
    ensure           => 'present',
    comment          => "Application User - $name",
    gid              => 'app',
    home             => "/apps/$app/$name",
    shell            => '/usr/bin/bash',
  }
 }

 appuser  { $app_users: }

该解决方案与我编写的另一个模块配合得很好,但在这种情况下,主目录路径包含一个变量,该变量取决于用户名。

在资源中添加以下 if 语句会引发错误:

if $name =~ /^(et|ep)/ {
 $app = "echos"
 notice('app is $app')
 }

Syntax error at 'if'; expected '}' at .../users.pp:9

我在某处读到您不能在资源中放置 if 语句...

在这种情况下,我有什么选择?我遇到了编码障碍...

我们使用的是 puppet master 版本 2.7.19 (Puppet Enterprise 2.7.0)。

4

2 回答 2

2

听起来这只是一个语法错误,你应该在定义中添加你的 if 语句,比如

define appuser {


    if $name =~ /^(et|ep)/ {
      $app = "echos"
      notice('app is $app')
    }

    user { $name:  
    ensure           => 'present',
    comment          => "Application User - $name",
    gid              => 'app',
    home             => "/apps/$app/$name",
    shell            => '/usr/bin/bash',
  }
 }
于 2013-04-04T16:15:11.280 回答
2

在这种情况下,我更喜欢caseif 语句,例如,

   define appuser {
        user { $name:  
        ensure           => 'present',
        comment          => "Application User - $name",
        gid              => 'app',
        home => $name ? { 
        '/^(et|ep)/' => "/apps/echos/$name",
         default => "/apps/$app/$name",},
        shell            => '/usr/bin/bash',
      }
   }
于 2013-04-04T17:00:13.437 回答