标签: puppet

有没有办法在 puppet 实施更改之前运行命令?

我想让 puppet 在执行任何类型的更改之前运行特定的命令。我知道prerun_command主 puppet.conf中的选项,但这不是我要找的。我希望命令仅在某些事情即将发生变化时运行,而不是在每次木偶运行时运行。

这是场景。假设我在负载均衡器后面有一堆 Web 服务器。然后我希望 puppet 更新网站文件。但是为了防止出现某些文件已更新而其他文件未更新以及混合版本导致问题的问题,我想将服务器从负载平衡器池中取出。
我可以编写一个脚本,运行时会告诉负载平衡器从池中删除该框。然后人偶可以进行更改,并postrun_command在完成后用于将盒子放回池中。但是我需要一种方法来运行该脚本以从池中删除服务器。


我能想到的唯一解决方案是在盒子上保留 2 个文件副本。一个临时副本,当 puppet 更新它时,使用通知操作触发删除脚本,然后从临时位置复制到实时位置。但我希望有一些更通用的东西可以处理正在执行的任何更改(升级包,重新启动服务,创建用户,任何事情)。

linux puppet

2
推荐指数
1
解决办法
2986
查看次数

Puppet 运行时出现“无法将 nil 转换为字符串”错误

当尝试使用复制到 Puppet 模块目录中的模块时,我的 Puppet 客户端返回“无法从远程服务器检索目录:服务器上的错误 400:连接到 Puppet 主服务器时无法在字符串中转换 nil”错误。

[root@puppetmaster modules]# rpm -qa *puppet*
puppet-2.7.18-1.el6.noarch
puppet-server-2.7.18-1.el6.noarch

[root@puppetmaster modules]# uname -sr
Linux 2.6.32-279.el6.x86_64
Run Code Online (Sandbox Code Playgroud)

代码全部签出且有效。SELinux 已开启。

selinux puppet

2
推荐指数
1
解决办法
1121
查看次数

Puppet Enterprise 与开源

我有兴趣学习使用 Puppet。我反复看到的一个例子是用户管理。根据Puppet 网站,“配置管理 - 用户帐户”是一项仅存在于 Puppet Enterprise 上的功能。然而,我看到的例子没有提到需要企业版。

FAQ状态,部分:

我们只有一个开源版本的 Puppet。

那么,如果希望同时管理 10 个以上节点上的用户,是否需要为 Puppet Enterprise 付费?我猜那里的模型可能类似于 Red Hat?像 Ubuntu 这样的发行版中的软件包实际上是 Puppet Enterprise 的发行版吗?

linux configuration-management puppet open-source

2
推荐指数
1
解决办法
4297
查看次数

如何使用 puppet 提供默认配置文件,但允许服务器管理员更新它

我想使用 puppet(例如 my.cnf)向节点服务器提供“默认示例”配置文件,但我希望允许服务器管理员根据需要更新它。(基本上,我向 IT 研究人员提供“基础”虚拟机,他们自己进行调整)

我尝试使用 puppet 函数“文件”,但是当我尝试更改它时它注意到了......

有解决办法吗?

linux puppet ubuntu-12.04

2
推荐指数
1
解决办法
2329
查看次数

傀儡和清单循环

如何访问人偶清单中数组的元素,即创建 for/while 循环?假设我在我的 nodes.pp 中有

Name [ 'testserver', 'floor1', 'floor3' ],
Run Code Online (Sandbox Code Playgroud)

如何迭代它,以便在定义文件资源时可以迭代每个并确保每个元素都存在正确的文件资源?

谢谢丹

puppet

2
推荐指数
1
解决办法
1万
查看次数

傀儡事实:我们应该使用 lsbdistid 还是操作系统?

在当前版本的 Puppet 和 Facter 中,我得到了相同的信息lsbdistidoperatingsystem事实——我不看,osfamily因为在 Gentoo Linux 上它报告一个通用的“Linux”字符串。

在 Puppet 模块中使用该信息时(例如,用于选择要安装的软件包名称)是否有任何技术原因或已建立的共识来使用lsbdistidoperatingsystem

puppet facter

2
推荐指数
1
解决办法
2454
查看次数

防火墙后面的傀儡大师

我正在尝试在公司防火墙外的某些服务器上运行 puppet,而 puppetmaster 则在防火墙内。说服公司 IT 为我打开端口 8140 将是极其困难的——如果不是不可能的话——那么我有什么选择来让它工作?

puppet puppetmaster

2
推荐指数
1
解决办法
8930
查看次数

服务器之间 crontab 条目的随机化分钟

我有一套用于我们的服务器的通用木偶配方。木偶管理的文件之一是/etc/crontab包含原始cron.daily,cron.weeklycron.monthly条目。

/etc/crontab这里的公共文件的问题是所有的 cronjobs 在我们所有的服务器中都在完全相同的时间运行。例如,每日备份消耗了我们所有的备份服务器资源,因为所有服务器都在同时提供它。

在服务器之间随机化每天/每周/每月运行的确切分钟数的首选方法是什么,同时仍然保持所有服务器之间的木偶配方通用?

我一直在考虑几种不同的选择:

  • 运行sleep$RANDOM实际工作之前。这样,crontab每个主机中的时间都会相似,但运行每日/每周作业的确切时间会有所不同。即使在同一服务器内部也会有变化(例如,每天的运行间隔可能在 23-25 小时之间变化)。
  • 从主机名计算一个整数值,并以at+“基于主机名的整数”分钟运行所有作业。有点hacky,但可能会工作......
  • 其他一些方法,但什么?

linux puppet cron

2
推荐指数
1
解决办法
9410
查看次数

使用 hiera 访问另一个节点的事实

我们要做的是为 iptables 生成防火墙规则(puppetlabs/firewall)。我们的节点在概念上是这样分组的:

-- site1
---- shared1
------ specific1
------ specific2
---- shared2
------ specific3
------ specific4
Run Code Online (Sandbox Code Playgroud)

节点“specific4”将始终需要访问“shared2”上的端口 8080 和“site1”上的端口 10000。“specific1”同样需要访问“shared1”上的8080。每个节点的规则总是相同的,但它们将取决于它们属于哪个组。

我正在努力寻找一种方法来在 hiera 中不重复地表示这一点。是否可以从完全独立的节点获取事实?

我想我希望能够做这样的事情(简化):

--
hosts:
  host specific4:
    rules:
      rule:
        port: 8080
        ip: get_ip(get_my_shared())
Run Code Online (Sandbox Code Playgroud)

但显然,您不能从yaml文件中调用函数。最好的方法是使用自定义事实吗?我还没有真正使用过 hiera - 所以我不确定最佳实践和什么不是。任何朝着正确方向的温和推动将不胜感激。

编辑:

这是我采用的解决方案,但如果我可以使用导出的资源,我可以消除对 puppetdb-query 的依赖。

# helper for creating rules from an array
define firewall_rules($port, $service_type) {
    $source = $name
    firewall { "$port $service_type $source":
        proto       => 'tcp',
        dport       => $port,
        state       => 'NEW',
        source      => "$source",
        action      => 'accept' …
Run Code Online (Sandbox Code Playgroud)

puppet hiera

2
推荐指数
1
解决办法
6903
查看次数

Puppet 客户端未连接到主服务器 - SSL 连接错误

我在同一台机器上安装了 puppet master 和 agent。当客户端启动时,我收到以下错误消息。

puppet agent --server=agent.com --no-daemonize --debug



err: Could not retrieve catalog from remote server: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed.  This is often because the time is out of sync on the server or client
Run Code Online (Sandbox Code Playgroud)

linux puppet ssl-certificate puppetmaster

2
推荐指数
1
解决办法
3141
查看次数