
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 --debug
para obter ainda mais resultados.
Se você quiser procurar em seus .pp
arquivos, você deve procurar por um
file { "path/to/file":
...
}
que está faltando /
(ou seja, deveria ler /path/to/file
em 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 path
um 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::variable
a sintaxe padrão. Para mais informações, execute o puppet com -vd
o parâmetro (verbose+debug).