Puppet中的目录管理

Puppet中的目录管理,puppet,Puppet,我有war,它的内容(一些文件)需要在应用到客户端之前进行更改。所以我所做的就是将解压后的文件复制到客户端,更改我想要的文件,然后在客户端上再次压缩该目录。一切正常,但在这些操作之后,我想清理(删除未压缩文件的临时目录)。因为首先我声明资源如下: file { 'temp-dir' path => 'temp', ensure => directory, ... } 傀儡不允许我在清单末尾这样做: File ['temp-dir'] { ensure =>

我有war,它的内容(一些文件)需要在应用到客户端之前进行更改。所以我所做的就是将解压后的文件复制到客户端,更改我想要的文件,然后在客户端上再次压缩该目录。一切正常,但在这些操作之后,我想清理(删除未压缩文件的临时目录)。因为首先我声明资源如下:

file { 'temp-dir'
 path => 'temp',
 ensure => directory, 
 ...
} 
傀儡不允许我在清单末尾这样做:

 File ['temp-dir'] {
     ensure => absent, 
     ...
    }
file { '/tmp/mytemp':
  ensure => directory,
}
-> 
exec { 'do something': }
->
file { '/tmp/mytemp':
  ensure => absent,
}

那么,我是做错了什么,还是puppet不可能?在puppet DSL中,使用文件资源是不可能的,但是仍然有一些方法可以做您想做的事情

如果您在舱单中填写:

 File ['temp-dir'] {
     ensure => absent, 
     ...
    }
file { '/tmp/mytemp':
  ensure => directory,
}
-> 
exec { 'do something': }
->
file { '/tmp/mytemp':
  ensure => absent,
}
Puppet将这两个文件资源解释为两个不同的、不兼容的结束状态的声明,并抛出一个错误

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

你有几个选择

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

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

另一个选择是用Ruby编写自己的程序来处理特定的安装

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

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

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

如果您在舱单中填写:

 File ['temp-dir'] {
     ensure => absent, 
     ...
    }
file { '/tmp/mytemp':
  ensure => directory,
}
-> 
exec { 'do something': }
->
file { '/tmp/mytemp':
  ensure => absent,
}
Puppet将这两个文件资源解释为两个不同的、不兼容的结束状态的声明,并抛出一个错误

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

你有几个选择

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

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

另一个选择是用Ruby编写自己的程序来处理特定的安装

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

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

虽然这绕过了他选择的路径转发中的多个声明,但完全避免此问题的另一个路径转发是使用
模板
函数或在使用单个
文件
资源应用更改的文件之前自己编写一个函数。不幸的是,我们在这个问题上没有足够的信息来建议这条路线。虽然这绕过了他选择的前进道路上的多重声明,完全避免此问题的另一种方法是使用
模板
函数,或者在使用单个
文件
资源应用更改的文件之前自己编写函数。不幸的是,我们在这一问题上没有足够的信息就这条路线提供建议。