具有hiera的木偶模块的基本用法

时间:2015-03-13 11:36:45

标签: module puppet hiera

我想用puppet管理一些服务器。即使在阅读了几十个文档页面之后,我也不清楚如何使用模块以及如何将它们与hiera一起使用。作为第一个实验,我希望在一个节点上创建用户“admin”并找到该模块 - > 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(admin)中都有数据。一些帮助会很棒..

3 个答案:

答案 0 :(得分:2)

要了解hiera是什么,你应该简单地认为Hiera是一个用于木偶的数据库,一个变量/值的数据库,仅此而已。

对于初学者,我建议关注系统的其他部分,比如如何创建模块!以及如何管理您的需求(没有复杂性)然后慢慢构建" smart"食谱或可重复使用的食谱......

你的木偶首先会因为一个名为sites.pp的文件而生病(通常在你的主$ confdir(puppet.conf变量)上。我不打算提及以后的环境。)

路径 / etc / puppet 在该目录中,您有一个目录 manifeststs 。你的sites.pp有一个地方

通常是sites.pp结构:

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

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

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

模块(module,module2和module3)存储在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 通常我从木偶实验室解释的是:https://docs.puppetlabs.com/puppet/latest/reference/dirs_manifest.html

答案 1 :(得分:1)

请注意README

中的示例
class { 'accounts':
  ssh_keys   => hiera_hash('accounts::ssh_keys', {}),
  users      => hiera_hash('accounts::users', {}),
  usergroups => hiera_hash('accounts::usergroups', {}),
}

适用于3.x之前没有automatic parameter lookup的Puppet版本的用户。使用最新版本,您应该使用此清单:

include accounts

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

答案 2 :(得分:0)

这一切对我来说仍然没有意义。因为我必须把

accounts::account
{
    'admin':
}

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