【问题标题】:Managing directory in Puppet在 Puppet 中管理目录
【发布时间】:2017-08-04 09:17:45
【问题描述】:

我有战争,需要更改哪些内容(某些文件)才能应用于客户端。所以我所做的是将解压缩的文件复制到客户端,更改我想要的文件并在客户端上再次压缩该目录。一切正常,但在这些操作之后我想清理(删除未压缩文件的临时目录)。因为首先我这样声明资源:

file { 'temp-dir'
 path => 'temp',
 ensure => directory, 
 ...
} 

Puppet 不允许我在清单末尾执行此操作:

 File ['temp-dir'] {
     ensure => absent, 
     ...
    }

那是我做错了什么,还是木偶不可能?

【问题讨论】:

    标签: puppet


    【解决方案1】:

    在 Puppet DSL 中使用文件资源是不可能的,但仍有一些方法可以做你想做的事情。

    如果你写在你的清单中:

    file { '/tmp/mytemp':
      ensure => directory,
    }
    -> 
    exec { 'do something': }
    ->
    file { '/tmp/mytemp':
      ensure => absent,
    }
    

    Puppet 将这两个文件资源解释为两个不同的、不兼容的最终状态的声明并引发错误。

    Puppet 是一种声明性语言,而不是您指定一系列步骤的语言。

    你有几个选择。

    最好的方法可能是查看 puppet-archive 模块,因为它提供了一些专为您的特定用例设计的扩展,并支持清理。

    另一种选择是根本不清理临时文件。通常没有真正需要清理它们。

    另一个选择是在 Ruby 中编写您自己的 custom types and providers 来处理您的特定安装。

    最后,您可以使用 exec 来管理整个过程,例如

    exec { 'install war':
      command => 'wget ... -o /tmp/war.tmp ; ... ; rm -f /tmp/war.tmp',
      path    => '/bin',
    }
    

    【讨论】:

    • 虽然这绕过了他选择的前进路径中的多重声明,但完全避免此问题的不同前进路径是使用 template 函数或在应用更改的文件之前自己编写一个函数单个 file 资源。很遗憾,我们在问题中没有足够的信息来就该路线提供建议。
    猜你喜欢
    • 2016-04-05
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    相关资源
    最近更新 更多