jak ustawić ścieżkę przy stosowaniu pojedynczego modułu marionetkowego?

12

Próbuję uruchomić pojedynczy moduł, taki jak ten:

puppet apply --verbose --modulepath=moduleshere --noop -e 'include myclass'

Jednak dostaję tego rodzaju błąd wskazujący, że ścieżka nie jest ustawiona

Parameter unless failed: '[ -e "${logfile}" ]' is not qualified and no path was specified. Please qualify the command or specify a path.

Nie chcę jawnie określać ścieżki w każdej takiej lokalizacji i działa dobrze, gdy jest uruchamiana jako część pełnego cyklu marionetkowego. Jak mogę określić ścieżkę podczas uruchamiania pojedynczego modułu?

Koza Hess
źródło
1
Czy możesz zaakceptować odpowiednią odpowiedź?
kenorb

Odpowiedzi:

15

Polecenia w Execzasobie albo muszą być w pełni kwalifikowane (tj. /usr/bin/testZamiast test), albo musi zostać ustawiony pathatrybut tego Execzasobu.

Jeśli możesz zmodyfikować manifest (y) Marionetek, możesz po prostu dodać następującą definicję ustawiania domyślnego pathatrybutu dla wszystkich Execzasobów /bin:

Exec { path => "/bin" }

Jako (mniej lub bardziej) nieprzyzwoite obejście można również po prostu ustawić domyślne pathdla dowolnego Execzasobu w wierszu poleceń:

$ puppet apply --verbose -e 'Exec { path => "/bin" }' your_manifest.pp

Wskaźniki dokumentacji:

joschi
źródło
2

To ... nie powinno działać w ramach pełnego biegu. Potrzebuje pełnej ścieżki do pliku wykonywalnego w unlesspoleceniu. Może masz ścieżkę ustawioną w pliku globalnym, który jest częścią twoich pełnych uruchomień?

unless => '/usr/bin/[ -e "${logfile}" ]'Zamiast tego spróbuj .

Shane Madden
źródło
1

Zgadzam się z Shane, że domyślna ścieżka jest prawdopodobnie ustawiona w manifeście o globalnym zasięgu. Możesz zrobić to samo, ale nie możesz przekazać go jako argumentu, więc użyj stdin:

$ puppet apply -v --modulepath=moduleshere --noop <<EOF
Exec { path => "/bin:/sbin:/usr/bin:/usr/sbin" }
include myclass
EOF

lub wstaw Exec i dołącz wiersze do, example.ppa następnie użyj puppet apply -v ... example.pp.

Dominic Cleal
źródło
1

Musisz użyć w pełni kwalifikowanej ścieżki.

Na przykład:

exec { "sample":
  command => "/usr/bin/test",
}

lub:

exec { "sample":
  path    => ['/usr/bin', '/usr/sbin', '/bin'],
  command => "test",
}
kenorb
źródło