Crie um arquivo somente se o diretório existir?

4

Eu estou tentando escrever o módulo onde ele cria o arquivo se o diretório existir ou então ele não deve fazer nada.

class puppetmodule{
  exec { 'chk_dir_exists':
    command => 'test -d /usr/dir1',
    path    =>  ["/usr/bin","/usr/sbin", "/bin"],
  } ->

  file {'usr/dir1/test.txt':
    ensure => 'file',
    owner  => 'root',
    group  => 'root',
    mode   => '0750',
  }
}

Abaixo está o erro que está jogando. Por favor, me aconselhe sobre isso.

Error: test -d /usr/dir1 returned 1 instead of one of [0]

    
por joe 06.05.2016 / 08:16

2 respostas

3

Algo parecido com isso funcionará:

  $dir = "/usr/dir1"

  exec { "chk_${dir}_exist":
    command => "true",
    path    =>  ["/usr/bin","/usr/sbin", "/bin"],
    onlyif  => "test -d ${dir}"
  }

  file {"${dir}/test.txt":
    ensure => file,
    owner  => 'root',
    group  => 'root',
    mode   => '0750',
    require => Exec["chk_${dir}_exist"],
  }

Explicação:

onlyif => "test -d ${dir}"

significa que o recurso Exec só é criado se a saída de test -d for verdadeira.

require => Exec["chk_${dir}_exist"]

significa que o recurso Arquivo é criado apenas se o recurso Exec existir.

Se o diretório não existir, a execução do fantoche gerará um erro indicando que ele não pode criar o recurso Arquivo porque o recurso Exec não existe. Isso é esperado e pode ser ignorado com segurança, pois o restante do catálogo de fantoches ainda é aplicado.

Se o diretório existir, o recurso Arquivo será criado e aplicado.

    
por 10.05.2016 / 21:53
0

O fantoche é sobre o estado final. Você pode garantir que exista um arquivo com o estado especificado ou ausente. Se você precisar fazer alguma lógica de ramificação ( if ), o Puppet também suporta isso. Veja condicionais na documentação - link

$directory_exists = <insert logic here> 

if $directory_exists {
  file {'usr/dir1/test.txt':
    ensure => 'file',
    owner  => 'root',
    group  => 'root',
    mode   => '0750',
  }
}
    
por 06.05.2016 / 18:39