【问题标题】:How to store state in Puppet?如何在 Puppet 中存储状态?
【发布时间】:2017-07-09 17:05:02
【问题描述】:

我最近开始使用 Puppet,我正在努力解决的问题之一是保存“状态”。也许以下示例任务会有所帮助:

  1. 使用 Puppet 安装一些软件(Apache httpd 或数据库)
  2. 使用 Puppet 创建一些服务(比如数据库或 httpd 实例)
  3. 使用 Puppet 启动服务(比如说启动数据库实例)
  4. 使用 Puppet 请求 SSL 证书并在准备好后导入它们 (Apache)
  5. 将有关服务器详细信息的信息复制到某个数据库中
  6. 还有更多...

在所有这些中,我想保存状态。说一旦 SSL 任务完成,保存状态,这样当 Puppet 下次运行时,它知道 SSL 已生成,并一起跳过此任务。我目前正在以“俗气”的方式执行此操作,即我正在创建“文件”以指示任务已完成,并在下一次运行中检查文件是否存在以允许我做出决定。
有没有更优雅的方法来实现这一点?也许是一个习惯事实?我真的很想知道其他人如何使用 Puppet 来存储和检索他们的任务状态。

EDIT:为 Alex 添加更多详细信息 其中一项任务是使用详细信息更新内部公司数据库,例如服务器名称、创建的数据库实例的名称等。此任务只需完成一次,而不是每 30 分钟完成一次(30 分钟是 Puppet 代理运行的频率)。

【问题讨论】:

  • 人们为此使用来自(例如)Vagrant box 或 Docker 镜像的可移植实例。使用 Puppet 配置这些将自动执行您想要的操作。
  • @user,如果您提供您正在使用的实际代码,我可以就更简洁的实现给出我的想法。目前,我不完全确定您要解决的问题是什么。

标签: puppet


【解决方案1】:

如果我对问题的理解正确,我认为您想从上面的列表中检查的所有“状态”都可以通过onlyifunless 轻松检查

示例:来自上述列表 nr1。您已经安装了 apache,您想下次检查它是否已安装。

exec { 'install_apache':
command     => '/usr/bin/apt-get install apache2 apache2-doc apache2-utils',
refreshonly => true,
path        => ['/usr/bin', '/bin', '/sbin'],
unless   => 'apt-cache search apache2', }

所以在这种情况下你会用unless检查apache是​​否已经安装,即如果命令apt-cache的退出状态返回0(true),命令将不会被执行。

这可以用来检查是否创建了SSL,甚至可以查询数据库。

【讨论】:

    猜你喜欢
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2021-02-22
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多