【问题标题】:puppet delete a directory and replace it with a linkpuppet 删除一个目录并用一个链接替换它
【发布时间】:2019-08-17 02:41:18
【问题描述】:

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

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

我一直在阅读 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 中创建链接的理解,我需要为删除档案目录的文件资源和创建链接的文件资源使用相同的名称。

我错过了什么?

【问题讨论】:

    标签: linux puppet


    【解决方案1】:

    使用执行:

    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 实现变通方法。我想说,只要确保你添加一些 cmets 来解释你为什么必须做这样的事情。

    【讨论】:

    • 我开始写一个关于File 工作原理的长答案,但最后,无论如何都会归结为“按照亚历克斯的建议使用Exec 完成工作”,所以我决定不打扰了。
    • 感谢您的回答和支持评论。我会尽快试试这个。
    猜你喜欢
    • 2016-08-21
    • 1970-01-01
    • 2015-07-17
    • 2011-04-10
    • 1970-01-01
    • 2018-09-18
    • 2021-05-05
    • 1970-01-01
    • 2015-06-21
    相关资源
    最近更新 更多