Definindo hard links no fantoche

3

Existe uma maneira de definir hardlinks dentro do manifesto de fantoches?

Parece que o tipo de arquivo só pode definir links simbólicos, mas eu preciso que sejam hard links para fazer com que alguns dos meus aplicativos chrooted funcionem. Por exemplo, preciso vincular

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

e assim por diante.

Qual pode ser a maneira mais simples de arquivar isso?

Atualização: obrigado, terminei com o seguinte define:

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";                                                                                                           
    }                                                                                                                                                        
}

Claro, eles não são perfeitos, mas fazem o trabalho e é tudo que eu preciso.

Obrigado pela sua ajuda!

    
por rvs 07.02.2012 / 13:26

3 respostas

6

Você também pode usar a declaração "exec" se não puder encontrar outra maneira.

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

funciona para mim perfeito isso ..

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

Também é bastante trivial apenas enviar o mesmo arquivo para vários locais com o Puppet, como exemplo:

  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",
  }
    
por 16.05.2013 / 23:13

Tags