Foreman 中的“运行 Puppet”功能运行不一致

Foreman 中的“运行 Puppet”功能运行不一致

首先,快速概述一下我们的设置:

  1. 我们有一个正常运行的 Foreman 实例,我们称之为 foreman。
  2. 这个傀儡大师做得很好,我们就叫它傀儡大师吧。
  3. 有两个主机可从 foreman 和 puppetmaster 连接,并且中间没有防火墙,我们将它们称为 host-a 和 host-b。
  4. 所有主机均运行 3.x

我们已经开始扩大 Foreman 的使用范围,并希望启用“运行 Puppet”按钮。我遵循了维基百科并在初始测试中使其正常工作。然而,在进一步测试中,该按钮产生了一些非常不一致的结果。我似乎记得读到过,触发运行时默认有 2 分钟的延迟,但这不是问题所在。有时,当我按下按钮时,主机会立即跳转并开始运行。然而大多数时候,它永远不会触发运行。

Foreman 在 sudoers 配置中有以下内容:

Defaults:foreman-proxy !requiretty
foreman-proxy   ALL = NOPASSWD: /usr/bin/puppet kick *

主机在 auth.conf 中有以下内容,一个空白的 namespaceauth.conf 和 puppet.conf 中的 listen = true。

# allow foreman to start puppet runs
path /run
auth any
method save
allow foreman.domain.lan

当尝试通过 Foreman 触发 Puppet 运行时,这会出现在生产日志中。

Started GET "/hosts/host-a.domain.lan/puppetrun" for 192.168.8.48 at 2014-07-15 21:44:59 +0000
Processing by HostsController#puppetrun as HTML
  Parameters: {"id"=>"host-a.domain.lan"}
Redirected to http://foreman.domain.lan/hosts/host-a.domain.lan
Completed 302 Found in 48ms (ActiveRecord: 1.3ms)


Started GET "/hosts/host-a.domain.lan" for 192.168.8.48 at 2014-07-15 21:44:59 +0000
Processing by HostsController#show as HTML
  Parameters: {"id"=>"host-a.domain.lan"}
  Rendered hosts/_overview.html.erb (16.2ms)
  Rendered hosts/_metrics.html.erb (0.3ms)
  Rendered hosts/show.html.erb within layouts/application (734.1ms)
  Rendered home/_user_dropdown.html.erb (2.0ms)
Read fragment views/tabs_and_title_records-2 (0.2ms)
  Rendered home/_topbar.html.erb (3.8ms)
  Rendered layouts/base.html.erb (5.9ms)
Completed 200 OK in 781ms (Views: 652.3ms | ActiveRecord: 108.6ms)

就是这样,Puppet 运行偶尔会在主机上触发,但并非总是如此。有什么想法吗?

编辑:我应该补充一点,当运行触发器不成功时,运行 puppet agent --no-daemonize --debug 时主机端不会出现任何消​​息

更多编辑:在 puppetmaster 和 foreman 上运行 Foreman v1.5.1 加 Puppet 3.6.2,在主机上运行 v3.3.1。

答案1

我尝试了多种方法让 kick 可靠地运行,但都失败了,而且它已经被弃用了,所以我转向了 puppetssh。这需要配置 smart-proxy 的 SSH 密钥、foreman-proxy 用户及其 sudo 权限。关于这种 puppet 运行方法的文档并不多,而且 foreman-proxy 中的 DEBUG 日志不包含任何命令输出,因此很难判断哪里/如何出现了故障。

默认情况下,foreman-proxy 用户没有 shell(在 RHEL 上),无法运行 /usr/bin/ssh。简单的 usermod -s /bin/bash 就可以解决问题,但对我来说这似乎是一个安全风险。最重要的是,运行它需要不同的 sudo 权限,所以我不得不更改foreman-proxy ALL = NOPASSWD: /usr/bin/puppet kickforeman-proxy ALL = NOPASSWD:/usr/bin/ssh. 之后只需配置 ssh 命令即可。

在我的例子中,我们部署了一个用户帐户和 SSH 密钥,用于在客户端计算机上使用 sudo 运行 Puppet 命令。我将私钥复制到 foreman-proxy 可以使用的地方(例如:/etc/foreman-proxy/puppetssh/id_rsa),并在 /etc/foreman-proxy/settings.yml 中配置 puppetssh 参数,如下所示:

:puppetssh_command: /usr/bin/sudo /usr/bin/puppet agent -t --no-usecacheonfailure
:puppetssh_user: puppetssh
:puppetssh_keyfile: /etc/foreman-proxy/puppetssh/id_rsa

答案2

它对我有用我选择了 puppetssh 源http://theforeman.org/manuals/1.11/index.html#4.3.6Puppet

按照上述链接中内容 puppetssh 下的一条指令,现在在文件中编辑以下行。

/etc/foreman-proxy/settings.d/puppet.

:puppetssh_command: /usr/bin/puppet agent --onetime --no-usecacheonfailure

将其转换为

:puppetssh_command: /usr/bin/puppet agent --test

现在它会像魔法一样工作,如果它不工作,请随时回复,欢呼

相关内容