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

时间:2017-06-02 03:57:10

标签: puppet

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

我遇到的问题是我想将ssh key添加到所有这些用户的authorized_keys中,但我似乎无法弄清楚如何拥有公共资源。我已经尝试在课堂上添加它然后包含它,但它是重复的。我尝试将一个变量传递给类,但是再次重复。

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

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的倍数,并希望集中管理some_shared_key节中的ssh_authorized_key

任何帮助将不胜感激。我已经尝试过关注文档,但我没有到达任何地方。

我可以复制所有ssh_authorized_key次来电,但这显然很糟糕。

1 个答案:

答案 0 :(得分:3)

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

你的例子可以是:

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

这是你在找什么?