在 Puppet 中定义硬链接

在 Puppet 中定义硬链接

有没有办法在 Puppet 清单中定义硬链接?

似乎文件类型只能定义符号链接,但我需要它是硬链接,以便使我的一些 chrooted 应用程序正常工作。例如,我需要硬链接

/etc/hosts -> $chroot/etc/hosts
/etc/resolvf.com -> $chroot/etc/resolv.conf

等等。

归档该内容的最简单方法是什么?

更新:谢谢,我得到了以下定义:

define hardlinkdir(source=$name, target) {                                                                                                                   
    exec {                                                                                                                                                   
        "hardlinkdir-$name":                                                                                                                                 
            command => "cp -r --link $target $source",                                                                                                       
            path    => "/usr/bin:/bin",                                                                                                                      
            creates => $source;                                                                                                                              
    }                                                                                                                                                        
}                                                                                                                                                            

define hardlink(source=$name, target) {                                                                                                                      
    exec {                                                                                                                                                   
        "hardlink-$name":                                                                                                                                    
            command => "ln --force $target $source",                                                                                                         
            path    => "/usr/bin:/bin",                                                                                                                      
            unless  => "test $source -ef $target";                                                                                                           
    }                                                                                                                                                        
}

当然,它们并不完美,但它们能完成工作,而且满足我的一切需求。

感谢您的帮助!

答案1

如果找不到其他方法,您也可以使用语句“exec”。

exec { "hardlink1":
    command => "ln target source",
    path    => "/usr/local/bin:/bin",
    creates => "yourhardlink"
}

答案2

对我来说非常完美。

define hardlink($source=$name, $target) {                                                                                                                      
    exec {                                                                                                                                                   
        "hardlink-$name":                                                                                                                                    
            command => "ln -P --force $source $target",                                                                                                         
            path    => "/usr/bin:/bin",                                                                                                                      
            unless  => "test $source -ef $target";                                                                                                           
    }                                                                                                                                                        
}

答案3

使用 Puppet 将同一个文件通过管道传输到多个位置也相当简单,例如:

  文件 { [ “/etc/named.conf”, “/var/named/chroot/etc/named.conf” ]:
    模式 => 640,
    所有者 => 根,
    组 => 命名,
    确保 => 存在,
    需要 => [ 包['bind'], 包['bind-chroot'], ],
    源 => “puppet:///modules/named/named.conf”,
  }

相关内容