Como corrigir erro de caminho de parâmetro totalmente qualificado do Puppet?

Como corrigir erro de caminho de parâmetro totalmente qualificado do Puppet?

Recebo regularmente, mas aleatoriamente, a seguinte mensagem de erro quando executo o cliente fantoche em máquinas (não daemonizadas):

err: Não foi possível criar: Falha no caminho do parâmetro: Os caminhos dos arquivos devem ser totalmente qualificados
aviso: não usando cache no catálogo com falha
aviso: A configuração não pôde ser instanciada: Falha no caminho do parâmetro: Os caminhos dos arquivos devem ser totalmente qualificados

Parece moderadamente claro o que isso significa: não tenho um caminho totalmente qualificado em um parâmetro. No entanto, isso não me dizondePosso encontrar isso para consertar, ou até mesmo qual parâmetro está errado :(

(Se eu usar a opção de depuração, ela funciona consistentemente, então parece um problema com o cache dos manifestos... Ainda seria bom me livrar disso para uso em produção)

Nota: não posso fazer isso acontecer de forma consistente :/

Responder1

[Respondendo à própria pergunta depois de mexer na configuração por um tempo]

Consegui rastrear isso em um dos módulos que escrevi (é claro), mas foi devido ao uso de uma variável que não funcionou como eu esperava.

O que aconteceu foi:

$variable_dir = "/etc/puppet/bar"

class foo {
  file { $variable_dir:
    ensure => directory
  }
}

define some-define() {
   # Trimmed for brevity
   exec { "some-$name":
     # command, creates, timeout etc here
     require => File[$variable_dir],
   }
}

..o que basicamente causou alguma confusão com o File[] usando uma variável. Eu os substituí pelo valor explícito da variável por enquanto e tudo funciona bem, mas foi uma surpresa! Estou assumindo que meu entendimento do escopo e de quando variáveis ​​podem ser definidas/usadas está um pouco fora de sintonia com o Puppet, então vou aprender que ummuitomelhorar...

Parece ter causado o mesmo comportamento do uso de caminhos não totalmente qualificados em strings de arquivos, ao não conseguir encontrar a variável ou ao não obter o valor? Muito estranho, de qualquer maneira.

Editar: é bem possível que a variável não tenha sido encontrada no escopo e, portanto, estivesse vazia e definitivamente não fosse um caminho totalmente qualificado. Não explica por que isso não foi consistente, no entanto ...

Responder2

Ao testar a configuração do seu fantoche, você pode fazer isso executando

puppetd --test

o que fornecerá uma saída muito mais detalhada e deverá mostrar onde ela falha. Se você estiver realmente desesperado, poderá prosseguir --debugpara obter ainda mais resultados.

Se você quiser procurar em seus .pparquivos, você deve procurar por um

file { "path/to/file":
    ...
}

que está faltando /(ou seja, deveria ler /path/to/fileem vez disso)

Responder3

Você pode colocar o caminho real na propriedade path e então funciona. Isso funciona para mim:

$variable_dir = "/etc/puppet/bar"

class foo {
  file { 'variable_dir':
    path => ${variable_dir},
    ensure => directory
  }
}

define some-define() {
   # Trimmed for brevity
   exec { "some-$name":
     # command, creates, timeout etc here
     require => File['variable_dir'],
   }
}

Responder4

O caminho completo deve ser colocado no nome da chave, a menos que você esteja usando pathum parâmetro.

Por exemplo:

file { '/full/path':
  ensure => directory,
  recurse => true,
}

ou:

file { 'my name':
  path => "/full/path",
  ensure => directory,
  recurse => true,
}

Se você estiver usando variável, certifique-se de que esteja definida. Se estiver em uma classe diferente, use $class::variablea sintaxe padrão. Para mais informações, execute o puppet com -vdo parâmetro (verbose+debug).

informação relacionada