2015-03-13 77 views
2

我想用puppet来管理一些服务器。即使阅读了数十个文档页面,我也不清楚如何使用模块以及如何使用hiera。作为第一个实验,我想用户“admin”的被一个节点上创建的,发现这个模块 - >https://github.com/camptocamp/puppet-accounts傀儡hiera模块的基本用法

我/etc/puppet/hiera.yaml看起来这

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

简单我的/等/傀儡/ hieradata /节点/ 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)中都有数据。一些帮助将会很棒..

回答

2

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

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

您的傀儡会首先生病为一个名为sites.pp的文件(通常是在您的主$ confdir (puppet.conf变量。我不会说这是为以后的环境。)

ê路径是的/ etc /傀儡这个目录里面,你有一个目录表现。还有就是地方你sites.pp

通常一个sites.pp结构是:

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

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

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

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

树的样子:

/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

+0

我不同意。在Puppet 3.7.x及更高版本中,用户应该从一开始就使用环境。将自己限制在“生产”上是完全正确的,但忽略环境意味着P​​uppet设置必须在稍后的时间点进行更改,这总是很痛苦。 – 2015-03-17 09:26:35

+0

你说得对。这是我的错误。这是你如何使用木偶基本树的例子。 @FelixFrank是对的! – 2015-03-17 12:44:28

1

请注意,来自README的示例

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

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

include accounts 

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

0

这整件事对我来说仍然没有意义。既然我已经把

accounts::account 
{ 
    'admin': 
} 

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