本地“傀儡申请”和“傀儡代理”对傀儡大师的区别

sys*_*138 4 puppet puppetmaster

我们正在从包含所有配置的整体木偶存储库迁移。这个 repo 包含的东西不应该出现在每个节点上,因此基于 puppetmaster 的系统似乎是适当隔离事物的最佳方式。

我遇到的问题是,当复制到本地节点并puppet apply /etc/puppet/manifests/site.pp在其上运行时,相同的 repo 可以正常工作。我们的安装运行非常干净。

当我将 puppet repo 放在 puppetmaster 上并让代理签名时,除了将它的本地目录报告给 puppetmaster 之外,它似乎没有做任何事情。

有一段时间,我无法重现执行此操作的配置,我们的一个自建模块抛出了一个错误,表明它正在尝试从本地机器的modules目录中复制文件,而不是 puppetmaster应该喜欢。

这表明在为本地使用和通过 puppetmaster 构建存储库时,可能存在模块和清单语法差异。

如果有任何差异,它们是什么,或者转换工作的主要跳闸点是什么?


/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
Run Code Online (Sandbox Code Playgroud)

目前,site_prod.pp文件和同类是到site.pp.

site.pp 文件中定义的类不使用主机名。正如我所提到的,当通过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"
Run Code Online (Sandbox Code Playgroud)

导入的 .pp 文件与 site.pp 位于同一目录中。nodes.pp是肉在哪里,但也有秘制酱料。部分摘录:

node /clunod\-wk\d+\.sub\.example\.local/ {

  class { "int_setup": stage => "setup"; }
  include base
  include curl
  include custommodule
  [...]
}
Run Code Online (Sandbox Code Playgroud)

哪个可以并且确实匹配clunod-wk01234.sub.example.local通过 puppet apply 运行时命名的节点。

[int-setup.pp]

class int_setup {
  file { "/var/cluebat":
    ensure => directory,
    mode => "755",
    owner => "root",
    group => "root";
  }

  group{"puppet":
    ensure => present
  }

}
Run Code Online (Sandbox Code Playgroud)

Sha*_*den 5

我知道的唯一棘手之处在于file资源类型。

替换文件的备份行为不同,默认情况下使用服务器的文件桶而不是本地文件桶。

需要注意的更重要的事情是source参数。


source => '/tmp/somepath/sshd_config',
Run Code Online (Sandbox Code Playgroud)

使用原始文件路径,它将始终尝试本地路径。


source => 'puppet://puppetmaster1/modules/sshd/sshd_config',
Run Code Online (Sandbox Code Playgroud)

有了puppet://server/路径,它总是会尝试远程路径。


source => 'puppet:///modules/sshd/sshd_config',
Run Code Online (Sandbox Code Playgroud)

有了一个空的服务器规范,它就会变得有趣。

本地应用,本地puppet模块路径用于查找文件。

向傀儡主人报告时,向其提供清单的服务器被视为服务器。


此外,如果您需要对文件来源进行创意,您可以为source参数提供一个列表:

source => [ '/tmp/somepath/sshd_config', 'puppet:///modules/sshd/sshd_config'],
Run Code Online (Sandbox Code Playgroud)

将使用找到的第一个位置。