【问题标题】:Copy file from Puppet master to agent unless software is installed除非安装了软件,否则将文件从 Puppet Master 复制到代理
【发布时间】:2013-09-13 22:32:32
【问题描述】:

exec 或包类型的执行由 puppet master 可控

在 linux 上安装包 X,除非 X 已经安装:

package { "X": }

&&

在 Windows 上安装可执行文件 Y,除非 Y 已经安装:

exec { "packageYInstalled":
    command => "packageY /S",
    require => "C:\\temp\\packageY",
    unless => "packageYinstalled";
}

puppet master 无法控制文件类型的执行,因为除非 puppet 文件类型中不允许有属性

puppet file attributes

file { "packageYCopiedToTempFolder": }
    path => "C:\\temp\\packageY",
    source => "puppet:///files/packageY";
}

从共享 (samba) 文件夹执行安装程序而不是先将其复制到代理系统不能解决问题

  • Puppet 在多个外部系统上运行
  • 在每次 puppet 运行期间将可执行文件、zip 和/或 tar.gz 包复制到远程系统,而这些文件在安装和软件安装后已被删除

【问题讨论】:

    标签: ruby puppet


    【解决方案1】:

    我解决这个问题的方式,可能有更好的方法来做到这一点:

    1. 创建用于安装产品的模块
    2. 在该模块中,编写自定义事实以发现安装的版本
    3. 在安装程序类中,将所有内容包装在“if”中

    class productx::install (
      $version,
      $installer_path,
    ) {
      # productx_version is a fact
      if ! $::productx_version {
        do the install
      }
    }
    

    然后,您可以做其他巧妙的事情,例如审核您环境中的软件

    【讨论】:

    • 谢谢。我目前正忙于完成这项工作并让您知道结果。
    • 我在 /modules/X/lib/facter/Y.rb 中创建了一个自定义事实,并将我用作unless 属性的命令写入exec 类型,用ruby 编写。如果 if 结果不是 true,则安装将完成。谢谢你的解决方案。 puppet 运行将更快地完成,因为检查只执行一次,而不是由 unless 属性执行多次。我会接受答案,我也想投票给答案,但声望 15 是必需的,我只有 3。
    猜你喜欢
    • 1970-01-01
    • 2021-02-23
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2017-05-16
    • 2012-12-05
    相关资源
    最近更新 更多