Linux puppet删除目录并用链接替换它

Linux puppet删除目录并用链接替换它,linux,puppet,Linux,Puppet,我正在使用木偶清单,在我支持的设备中配置路由器。路由器运行的是非常普通的Debian 8或9 问题在于路由器上SSD的分区方式。我无法更改分区,因此必须解决根文件系统很小的问题。我已经找到了一个解决方案,我正试图在Puppet中实现,但我的第一次尝试对我来说并不合适,所以我想我会询问社区 我一直在读木偶文件,现在也在读。不幸的是,我今天没有路由器,所以我无法测试我当前的解决方案 我的问题是,通过df-H根文件系统的容量达到了95%,而puppet无法抱怨没有足够的空间。由于其他人很久以前做出了奇

我正在使用木偶清单,在我支持的设备中配置路由器。路由器运行的是非常普通的Debian 8或9

问题在于路由器上SSD的分区方式。我无法更改分区,因此必须解决根文件系统很小的问题。我已经找到了一个解决方案,我正试图在Puppet中实现,但我的第一次尝试对我来说并不合适,所以我想我会询问社区

我一直在读木偶文件,现在也在读。不幸的是,我今天没有路由器,所以我无法测试我当前的解决方案

我的问题是,通过
df-H
根文件系统的容量达到了95%,而puppet无法抱怨没有足够的空间。由于其他人很久以前做出了奇怪的决定,/opt/文件系统的大小是/的5倍,使用率为10%

因此,手动测试的解决方案是将
/var/cache/apt/archives/
移动到
/opt/apt archives
,然后使用以下方法创建符号链接:

ln-s/opt/apt archives/var/cache/apt/archives

这可以工作,并允许puppet运行在没有错误的情况下完成

我的挑战是在木偶类中实现这个操作

class bh::profiles::move_files {
  $source_dir = '/var/cache/apt/archives'
  $target_dir = '/opt/apt-cache'
  file { $targetDir :
    ensure => 'directory',
    source => "file://${source_dir}",
    recurse => true,
    before => File[$source_dir]
  }
  file { $source_dir :
    ensure => 'absent',
    purge => true,
    resurse => true,
    force => true,
    ensure => link,
    target => "file://${target_dir}"
  }
}
在一个文件资源中重复确保是不对的。根据我对在puppet中创建链接的理解,删除归档目录的文件资源和创建链接的文件资源需要相同的名称

我缺少什么?

使用exec:

exec{'Link/var/cache/apt/archives':
命令=>'mv/var/cache/apt/archives/opt/apt archives
ln-s/opt/apt archives/var/cache/apt/archives',
路径=>'/bin',
除非=>'test-L/var/cache/apt/archives',
}
请注意,Puppet并不是专门为解决像这样的自动化问题而设计的,尽管使用Exec可以完成大多数事情


您的解决方案听起来像是一种变通方法,因此使用Exec实现变通方法完全可以。我会说,只要确保你添加一些注释来解释为什么你必须这样做。

我开始写一个关于
文件
如何工作的长答案,但最终,它将归结为“按照Alex的建议,使用
执行器
完成工作。”所以我决定不麻烦了。谢谢你的回答和支持性评论。我会尽快试试这个。