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

3

Eu regularmente mas aleatoriamente recebo a seguinte mensagem de erro quando eu executo o cliente de marionetes em máquinas (não-daemonized):

err: Could not create : Parameter path failed: File paths must be fully qualified
warning: Not using cache on failed catalog
warning: Configuration could not be instantiated: Parameter path failed: File paths must be fully qualified

Parece moderadamente claro o que significa - que não tenho um caminho totalmente qualificado em um parâmetro. No entanto, ele não me diz onde eu posso encontrar isso para consertá-lo, 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 ... Seria bom se livrar disso para uso de produção, ainda)

Observação: não consigo fazer isso acontecer de forma consistente : /

    
por David Gardner 16.07.2009 / 15:15

4 respostas

2

[Respondendo a própria pergunta depois de dar uma cutucada na configuração por algum tempo]

Eu 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],
   }
}

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

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

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

    
por 11.08.2009 / 16:54
1

Quando você testa sua configuração de fantoches, pode fazê-lo executando

puppetd --test

, que lhe dará uma saída muito mais detalhada, e deverá mostrar onde ela falha. Se você está realmente desesperado, pode adicionar --debug para obter ainda mais resultados.

Se você quiser procurar nos arquivos .pp , pesquise

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

que tem um / ausente (isto é, deve-se ler /path/to/file )

    
por 18.07.2009 / 14:58
0

Você pode colocar o caminho real para a propriedade path e, em seguida, 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'],
   }
}
    
por 28.11.2013 / 19:58
0

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

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, verifique se ela está definida. Se estiver em uma classe diferente, use a sintaxe $class::variable padrão. Para mais informações, execute puppet com o parâmetro -vd (verbose + debug).

    
por 03.04.2015 / 00:55