2

我想用 puppet 来管理一些服务器。即使在阅读了几十页文档之后,我也不清楚如何使用模块以及如何将它们与 hiera 一起使用。作为第一个实验,我希望在一个节点上创建一个用户“管理员”并找到这个模块 - > https://github.com/camptocamp/puppet-accounts

我的 /etc/puppet/hiera.yaml 看起来就这么简单

---
:backends:
  - yaml
:hierarchy:
  - node/%{::fqdn}
  - common
:yaml:
  :datadir: /etc/puppet/hieradata

我的 /etc/puppet/hieradata/node/node1.example.com.yaml 包含这个

---
accounts::users:
  admin:
    uid: 1010
    comment: admin
accounts::ssh_keys:
  admin:
    comment: ad
    type: ssh-rsa
    public: AAAAAAAAAAAAAA

这在我把它放在我的 /etc/puppet/manifests/site.pp 之后起作用了

hiera_include('classes')

class
{
    'accounts':
    ssh_keys   => hiera_hash('accounts::ssh_keys', {}),
    users      => hiera_hash('accounts::users', {}),
    usergroups => hiera_hash('accounts::usergroups', {}),
}

accounts::account
{
    'admin':
}

这是好习惯吗?对我来说,将这些东西放入 site.pp 感觉不对,因为当我以后使用更多模块时它会变得混乱。但是还有什么地方可以放呢?我也不明白这是如何将数据与逻辑分开的,因为我在 node1.example.com.yaml 和 site.pp(管理员)中都有数据。一些帮助会很棒..

4

3 回答 3

2

要了解 hiera 是什么,您应该简单地认为 Hiera 是 puppet 的数据库、变量/值的数据库,仅此而已。

对于初学者,我建议关注系统的其他部分,比如如何创建模块!以及如何管理您的需求(不复杂),然后慢慢构建“智能”配方或可重复使用的配方......

您的 puppet 将首先为一个名为 sites.pp 的文件感到不适(通常位于您的主要 $confdir (puppet.conf 变量。我不会在后面提及它的环境。)

e 路径是该目录内的/etc/puppet,您有一个目录manifests。有你的sites.pp的地方

通常一个sites.pp结构是:

node default {
  include *module*
  include *module2*
}

node /server\.fqdn\.local/ {
  include *module2*
  include *module3*
}

这意味着您有一个默认节点(如果节点名称不适合任何其他节点,将使用默认值,否则在这种情况下将使用节点 FQDN的正则表达式匹配server.fqdn.local

模块(模块、模块 2 和模块 3)存储在 puppet.conf 中设置的 $modulespath 中。在我们的例子中,我将使用:/etc/puppet/modules

树看起来像:

/etc/puppet/modules/
/etc/puppet/modules/module/
/etc/puppet/modules/module/manifests/
/etc/puppet/modules/module/manifests/init.pp
/etc/puppet/modules/module2/
/etc/puppet/modules/module2/manifests/
/etc/puppet/modules/module2/manifests/init.pp
/etc/puppet/modules/module3/
/etc/puppet/modules/module3/manifests/
/etc/puppet/modules/module3/manifests/init.pp

关于课程:https ://docs.puppetlabs.com/puppet/latest/reference/lang_classes.html 通常是我解释的,但来自 puppet 实验室:https ://docs.puppetlabs.com/puppet/latest/reference/dirs_manifest.html

于 2015-03-13T18:00:03.463 回答
1

请注意,自述文件中的示例

class { 'accounts':
  ssh_keys   => hiera_hash('accounts::ssh_keys', {}),
  users      => hiera_hash('accounts::users', {}),
  usergroups => hiera_hash('accounts::usergroups', {}),
}

迎合之前3.x没有自动参数查找的 Puppet 版本的用户。对于最新版本,您应该只使用此清单:

include accounts

由于 Hiera 键具有适当的名称,因此 Puppet 将隐式查找它们。

于 2015-03-17T09:36:37.523 回答
0

这整件事对我来说仍然毫无意义。因为我必须把

accounts::account
{
    'admin':
}

在创建该用户的清单文件中,在这种情况下 hiera 有什么用?它不会将数据与逻辑分开。我在 .yaml 文件(ssh 密钥、其他帐户数据)和清单文件(上面的代码片段)中都有数据。通过使用 hiera,我希望能够在 /etc/puppet/hieradata/node/node1.example.com.yaml 中创建该用户,但事实并非如此。这样做的正确方法是什么?这个模块的示例 hiera 文件有什么用?在site.pp中以旧式方式创建帐户不是更容易吗?

于 2015-03-26T16:40:53.563 回答