AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 654042
Accepted
mc0e
mc0e
Asked: 2014-12-22 08:03:36 +0800 CST2014-12-22 08:03:36 +0800 CST 2014-12-22 08:03:36 +0800 CST

如何测试 puppet 中的日期以实施临时规则?

  • 772

为了实施临时更改,在 puppet 中测试当前日期/时间的好方法是什么?

例如,我们刚刚遇到了 NTP 的安全问题,Debian 花了一段时间才发布更新。将 ntp 关闭一段时间似乎是最简单的。

service { 'ntp':
  # remember to re-enable this after ntp is secured.  CVE-XXXXXXXXXX
  ensure => "stopped",
  ...
}

所以这需要记住回来并改变它。我想做的是使ensure属性的值依赖于在运行时测试日期的选择器。

谁能提出一个很好的方法来做到这一点?

我可以想象通过 puppet 解析器提供一个函数来执行此操作,如果有人已经编写过它会很高兴,但如果您有办法在没有额外模块的情况下执行此操作,则可以加分。

service { 'ntp':
  ensure => date_is_after("23 Dec 2014"): {
     true => "running",
     false => "stopped"
  }
  ...
}

我还想到,基于 ntp 包的当前版本的测试会非常优雅,但我也不确定你会如何在 puppet 中做到这一点。

puppet
  • 3 3 个回答
  • 2181 Views

3 个回答

  • Voted
  1. bodgit
    2014-12-22T10:21:42+08:002014-12-22T10:21:42+08:00

    为了能够获得 NTP 包的当前版本,您需要编写一个自定义事实,pluginsync通过查询本地包管理器将其推送到每个托管主机并识别值。有关编写自定义事实的信息,请参阅https://docs.puppetlabs.com/facter/2.3/custom_facts.html。

    然后,您可以使用versioncmp()清单中的功能,使用该事实的值有条件地启用或禁用 NTP 守护程序,并将其与包含您的修复程序的已知良好版本的 NTP 进行比较。

    • 2
  2. Best Answer
    Felix Frank
    2014-12-24T02:19:53+08:002014-12-24T02:19:53+08:00

    要在 master 上使用日期,您可以编写一个简单的 shell 包装器,并使用generate 函数date从清单中调用它。

    $ echo -e '#!/bin/bash\n/bin/date -I\n' >/tmp/dater
    $ chmod 755 /tmp/dater
    $ bundle exec puppet apply -e 'notice(generate("/tmp/dater"))'
    Notice: Scope(Class[main]): 2014-12-23
    

    您可以将结果获取到变量中并发疯。

    $now = generate("/tmp/dater")
    

    由于 Puppet 不会使用<and >likebash或awkdo 来比较字符串,因此您可能想要使用date +%s它,以便您可以将时间戳与您定义的任何目标日期进行数字比较。

    顺便说一句,我个人会避免实施这种事情。它有很大的风险摔倒在你的脚上。考虑改为定义一个全局 Hiera 键,您可以在日历提醒您这样做后手动翻转它。不要在 Puppet 中建立友好的惊喜。

    • 1
  3. Michaël Witrant
    2016-05-07T11:39:07+08:002016-05-07T11:39:07+08:00

    你可以这样写一个外部事实:

    #!/bin/bash
    echo "date=$(date '+%Y-%m-%d')"
    

    要分发它,您可以将它放入一个新模块中(例如modules/date/facts.d/date)。

    然后你可以做

    if $::date > "2016-05-15" {
      ...
    }
    
    • 0

相关问题

  • 如何修复 Puppet 完全限定的参数路径错误?

  • puppet:修改配置文件后强制重启服务

  • 木偶模块资源

  • 傀儡主机名问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve