Puppet:如何在模块中共享公共资源/变量

Puppet: how to share a common resource / variable in modules

我正在尝试使用 puppet bootstrap 一个新的 VPS。我将 运行 多个站点,目前我正计划 运行 在不同的用户帐户中使用它们。我想为所有这些用户提供一个通用的授权密钥。我正在使用木偶 4.10。

我遇到的问题是我想将我的 ssh key 添加到所有这些用户的 authorized_keys 中,但我似乎无法弄清楚如何拥有一个共同点资源。我试过将它添加到 class 中,然后将其包括在内,但它是重复的。我尝试将变量传递给 class,但还是重复了。

基本上我有这样一个模块

class wibble_somesite {
  user { 'someuser':
    ensure         => 'present',
    managehome     => true,
    purge_ssh_keys => true,
    home => '/home/someuser',
    shell          =>  '/bin/bash'
  }

  ssh_authorized_key { 'patrickmacbookair':
    ensure => present,
    user   => 'someuser',
    type   => 'ssh-rsa',
    key    => 'some_shared_key'
  }
}

然后我将其包含在我的 manifests/site.pp 中。但是,我想要这些 class wibble_someothersite 的倍数,并且我想集中管理 ssh_authorized_key 节中的 some_shared_key

如有任何帮助,我们将不胜感激。我已经尝试按照文档进行操作,但我一无所获。

我可以复制所有 ssh_authorized_key 调用,但这显然很糟糕。

一个 class 不能有多个实例。但是,您可以使用定义的类型。

你的例子可以是:

define wibble_somesite () {
  user { $title:
    ensure         => 'present',
    managehome     => true,
    purge_ssh_keys => true,
    home           => "/home/${title}",
    shell          =>  '/bin/bash'
  }

  ssh_authorized_key { "${title}_patrickmacbookair":
    ensure => present,
    user   => $title,
    type   => 'ssh-rsa',
    key    => 'some_shared_key'
  }
}

你可以这样使用它:

wibble_somesite{'patrick':}
wibble_somesite{'bob':}

它将创建用户 'patrick' 和 'bob',并允许共享密钥连接。

这是您要找的吗?