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

Puppet:如何在模块中共享公共资源/变量,puppet,Puppet,我正在尝试使用puppet引导一个新的VPS。我将运行多个站点,目前我正计划在单独的用户帐户中运行它们。我想为所有这些用户提供一个通用的授权密钥。我用的是木偶4.10 我遇到的问题是,我想将ssh密钥添加到所有这些用户的授权密钥中,但我似乎无法解决如何拥有公共资源的问题。我试着在类中添加它,然后包括它,但它是重复的。我尝试向类传递一个变量,但还是重复了 基本上我有一个这样的模块 class wibble_somesite { user { 'someuser': ensure

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

我遇到的问题是,我想将ssh密钥添加到所有这些用户的授权密钥中,但我似乎无法解决如何拥有公共资源的问题。我试着在类中添加它,然后包括它,但它是重复的。我尝试向类传递一个变量,但还是重复了

基本上我有一个这样的模块

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'
  }
}
然后我将其包含在我的清单/site.pp中。但是,我希望在其他站点上有多个此类wibble\u,并且我希望集中管理ssh\u authorized\u key节中的some\u shared\u key

任何帮助都将不胜感激。我已经试着按照这些文件做了,但是我什么也做不到


我可以复制所有ssh\u authorized\u key调用,但这显然很可怕。

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

你的例子可以是:

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”,并允许共享密钥连接


这就是你想要的吗?

你从傀儡的角度描述问题,给出了你已经决定的路线,这让你不清楚你想要实现什么。你能从木偶不可知论的角度描述一下你想要实现的目标吗?然后我们可以描述如何通过木偶最佳实践来实现这一点。嗨,马特,很抱歉反应太慢。我正在尝试创建用户,同时使用共享的公共密钥填充他们的.ssh/authorized_密钥。这正是我想要的。谢谢!我尝试了一个define,但语法不正确,我得再读一遍。我仍然有点困惑,标题是如何进入那里的,它不是一个命名参数。无论如何,非常感谢-它工作得很好!每个木偶资源都有一个标题。您通常将其作为第一个参数传递。当您编写wibble_somesite{'patrick':}时,您将创建一个名为patrick的资源wibble_somesite。看见