是否可以在Puppet中定义已定义资源的列表?

是否可以在Puppet中定义已定义资源的列表?,puppet,Puppet,比如说,我有3台服务器,这3台服务器安装了apache。 对于每一个,我都必须实例化几个apache::vhost定义的资源 有没有什么方法可以代替那样做 node 'srv1.example.com' inherit webserver { apache::vhost { 'toto1' : ... => ... , } apache::vhost { 'toto2' : ... => ... , }

比如说,我有3台服务器,这3台服务器安装了apache。 对于每一个,我都必须实例化几个apache::vhost定义的资源

有没有什么方法可以代替那样做

node 'srv1.example.com' inherit webserver {

   apache::vhost { 'toto1' :
           ... => ... ,
   }

   apache::vhost { 'toto2' :
           ... => ... ,
   }

   apache::vhost { 'toto3' :
           ... => ... ,
   }

}
您可以使用以下模式做一些事情(承认我定义的资源仅使用名称就可以做它需要做的事情)

当然,这要求所有内容都相同或基于名称(在apache::vhost define中作为
$name
提供)

如果您希望将apache::vhost保留为一个简单的定义,并且仍然要执行一些更复杂的操作来根据名称计算参数,那么您可以使用中间定义:

define blah::vhost {
  $wwwroot = "/var/www/html/blah/${name}"
  $wwwhostname = "${name}.example.com"
  if ! defined(File[$wwwroot]) {
    file { $wwwroot:
      ensure => directory,
      mode   => 0775,
    }
  }
  apache::vhost { $name:
     path     => $wwwroot,
     aliases  => [$name],
     hostname => $wwwhostname,
     require  => File[$wwwroot],
  }
}

blah::vhost { [$vhosts]: }

当然,这要求所有内容都相同或基于名称(在apache::vhost define中作为
$name
提供)

如果您希望将apache::vhost保留为一个简单的定义,并且仍然要执行一些更复杂的操作来根据名称计算参数,那么您可以使用中间定义:

define blah::vhost {
  $wwwroot = "/var/www/html/blah/${name}"
  $wwwhostname = "${name}.example.com"
  if ! defined(File[$wwwroot]) {
    file { $wwwroot:
      ensure => directory,
      mode   => 0775,
    }
  }
  apache::vhost { $name:
     path     => $wwwroot,
     aliases  => [$name],
     hostname => $wwwhostname,
     require  => File[$wwwroot],
  }
}

blah::vhost { [$vhosts]: }
define blah::vhost {
  $wwwroot = "/var/www/html/blah/${name}"
  $wwwhostname = "${name}.example.com"
  if ! defined(File[$wwwroot]) {
    file { $wwwroot:
      ensure => directory,
      mode   => 0775,
    }
  }
  apache::vhost { $name:
     path     => $wwwroot,
     aliases  => [$name],
     hostname => $wwwhostname,
     require  => File[$wwwroot],
  }
}

blah::vhost { [$vhosts]: }