puppet 删除目录并将其替换为 link

puppet delete a directory and replace it with a link

我正在处理一个 Puppet 清单,它在我支持的设备中配置了一个路由器。路由器运行非常普通的 Debian 8 或 9。

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

我一直在阅读 Puppet 文档。不幸的是,我今天没有路由器可以玩,所以我无法测试我当前的解决方案。

我的问题是,到 df -H 时,根文件系统的容量已达到 95%,而 puppet 失败并抱怨容量不足 space。由于其他人很久以前做出的古怪决定,/opt/ 文件系统的大小是 / 的 5 倍,使用率为 10%。

所以我的解决方案,手动测试,是将 /var/cache/apt/archives/ 移动到 /opt/apt-archives,然后使用以下方法创建一个 symlink:

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

有效并允许人偶 运行 无误地完成。

我的挑战是在 Puppet 中实现这个操作 class

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 中创建 link 的理解,我需要为删除存档目录的文件资源和创建 link.

的文件资源使用相同的名称

我错过了什么?

使用执行:

exec { 'Link /var/cache/apt/archives':
  command => 'mv /var/cache/apt/archives /opt/apt-archives
              ln -s /opt/apt-archives /var/cache/apt/archives',
  path    => '/bin',
  unless  => 'test -L /var/cache/apt/archives',
}

请注意,Puppet 并不是真正为解决此类自动化问题而设计的,尽管使用 Exec 无论如何都可以完成大多数事情。

您的解决方案听起来像是一种变通方法,因此完全可以使用 Exec 实施变通方法。我想说的是,请确保您添加了一些评论来解释为什么您必须这样做。