我们正在从包含所有configuration的庞大木偶存储库中迁移出来。 这个回购包含的东西实际上不应该在每个节点上,所以基于傀儡系统的系统似乎是适当隔离事物的最佳方式。
我遇到的问题是,当复制到本地节点和puppet apply /etc/puppet/manifests/site.pp运行相同的回购工作正常。 我们的安装运行非常干净。
当我把傀儡回购傀儡傀儡,并让代理人签字时,除了向傀儡大臣报告本地目录之外,没有其他任何事情要做。
有一段时间,我还没有能够重现这样做的configuration,我们的一个自build模块是抛出一个错误,提示它试图从本地机器的modules目录复制文件,而不是傀儡大师喜欢它应该。
这表明在构build本地使用的回购和通过puppetmaster时可能会有模块和清单的语法差异。
如果有什么区别,它们是什么,或者转换工作的主要起点是什么?
主/etc/puppet/puppet.conf上的/etc/puppet/puppet.conf文件:
[main] logdir=/var/log/puppet vardir=/var/lib/puppet ssldir=/var/lib/puppet/ssl rundir=/var/run/puppet factpath=$vardir/lib/facter pluginsync=true # Set up Environments ## Each environment has a dedicated 'modules' directory under /environments/ from ## which puppet will preferentially pull. Otherwise, it'll use the top level ## 'modules' directory. That is where common code goes. [master] manifest=$confdir/manifests/site.pp modulepath=$confdir/environments/$environment/modules:$confdir/modules ssl_client_header= SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY [production] manifest=$confdir/manifests/site_prod.pp [integration] manifest=$confdir/manifests/site_integ.pp [development] manifest=$confdir/manifests/site_dev.pp [operations] manifest=$confdir/manifests/site_ops.pp
目前, site_prod.pp文件和site_prod.pp是到site.pp符号链接。
site.pp文件中定义的类使用主机名。 正如我所提到的,当通过puppet apply运行puppet apply东西工作得很好。 如果情况变得更糟,我可以通过临时的NFS挂载来做我想做的事情,但是我宁愿不这样做。
site.pp为了您的享受:
filebucket { "main": server => $server; } File { backup => "main" } Exec { path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" } import "stages.pp" import "int_setup.pp" import "nodes.pp"
导入的.pp文件与site.pp相同。 nodes.pp是肉的地方,但也包含秘密酱油。 一些摘录:
node /clunod\-wk\d+\.sub\.example\.local/ { class { "int_setup": stage => "setup"; } include base include curl include custommodule [...] }
当通过puppet运行时,它可以匹配名为clunod-wk01234.sub.example.local节点。
[INT-setup.pp]
class int_setup { file { "/var/cluebat": ensure => directory, mode => "755", owner => "root", group => "root"; } group{"puppet": ensure => present } }
我知道的唯一技巧是file资源types。
replace文件的备份行为有所不同,默认情况下使用服务器的filebucket而不是本地filebucket。
更重要的是要注意的是source参数。
source => '/tmp/somepath/sshd_config',
使用原始文件path,它将始终尝试本地path。
source => 'puppet://puppetmaster1/modules/sshd/sshd_config',
使用puppet://server/ path,它将总是尝试远程path。
source => 'puppet:///modules/sshd/sshd_config',
用一个空的服务器规范,然后它变得有趣。
本地应用本地puppet模块path来查找文件。
向puppetmaster报告时,给它清单的服务器被视为服务器。
此外,如果您需要对文件来源进行创意,则可以给source参数一个列表:
source => [ '/tmp/somepath/sshd_config', 'puppet:///modules/sshd/sshd_config'],
第一个find东西的位置将被使用。
这个问题最终成为了如何select节点的区别。 原始nodes.pp文件中的代码:
node /clunod\-wk\d+\.sub\.example\.local/ { )
其中正确匹配名为clunod-wk01234.sub.example.local的节点。 当puppet apply针对当地傀儡清单运行时,这工作得很好。 但不是遥远的。
问题是如何在/etc/hosts定义localhost行。
非工作:
127.0.0.1 localhost clunod-wk01234 clunod-wk01234.sub.example.local
加工:
127.0.0.1 localhost clunod-wk01234.sub.example.local clunod-wk01234
第一种forms是向puppet报告节点名称“clunod-wk01234”,第二种forms是报告FQDN。 第二种forms满足node定义,其中第一种没有。 这是通过改变节点线,不包括FQDN破解,在这一点上一切正常工作。
带有远程傀儡的机器是一个更新的图像,与当地傀儡的机器有一些细微的差别。 其中一个变化就是声明/etc/hosts那一行。 现在我们知道了。
然后我发现两个文件调用是使用硬path编写的,其余的使用了正确的puppet:///语法。
“本地”和“远程”傀儡规则没有区别。
你可以发布你的site.pp,所以我们可以检查错误?
服务器和客户端是否使用相同的DNS服务器? 他们的/etc/resolv.conf文件在“search”或“域”行中有所不同吗?
你也可以使用--debug --verbose --no-daemonize选项运行木偶,并获得更多的输出。