Назад | Перейти на главную страницу

Определение жестких ссылок в марионетке

Есть ли способ определить жесткие ссылки в манифесте марионетки?

Кажется, что тип файла может определять только символические ссылки, но мне нужно, чтобы это были жесткие ссылки, чтобы заставить работать некоторые из моих 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";                                                                                                           
    }                                                                                                                                                        
}

Конечно, они не идеальны, но они делают свою работу, и это все, что мне нужно.

Спасибо за помощь!

Вы также можете использовать оператор exec, если не можете найти другого способа.

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

Также довольно тривиально просто передать один и тот же файл в несколько мест с помощью Puppet, например:

  file { [ "/etc/named.conf", "/var/named/chroot/etc/named.conf" ]:
    mode    => 640,
    owner   => root,
    group   => named,
    ensure  => present,
    require => [ Package['bind'], Package['bind-chroot'], ],
    source  => "puppet:///modules/named/named.conf",
  }

работает для меня идеально это ..

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