Stworzyłem książkę kucharską kucharza z atrybutami. Następnie próbowałem boostrap kodu do węzła i przekazać dodatkowe atrybuty w addidition i/lub przesłonić domyślne. Czy możliwe jest wydrukowanie drzewa atrybutów, aby zobaczyć, jakie atrybuty są załadowane, które są nadpisane?W jaki sposób atrybuty szefa druku lub debugowania?
Odpowiedz
Możesz użyć node.debug_value
, aby wyświetlić pojedynczy atrybut. Spowoduje to wydrukowanie wartości dla tego atrybutu na każdym poziomie. Jednak wykonanie tego na każdym poziomie dla każdego atrybutu jest trudniejsze (nie jestem pewien, jak to zrobić). Co więcej, z powodu ogromnej ilości atrybutów z Ohai, nie jestem pewien, czy chciałbyś to zrobić.
Jeśli Twój szef kuchni kończy poprawnie, możesz wykonać knife node show -l <nodename>
(to jest małe litery L). To pokazuje rzeczywistą wartość, ale zapewnia ogromną ilość danych i nie podaje wartości, które są domyślne, normalne, przesłonięcia itp.
Aby rozwinąć odpowiedź @ Tejay z pewnym przykładem - Dla 'węzeł ['minecraft'] ['properties'] ' użyj ' węzła.debug_value ('minecraft', 'properties') ' Zobacz więcej szczegółów - http://jtimberman.housepub.org/blog/2014/09/02/chef-node-dot-debug-value/ – keen
Aby uzyskać całe drzewo atrybutów (od wewnątrz konwergentnego szefa kuchni , w przeciwieństwie do serwera za pomocą noża od kuchni - który jest bezużyteczny, powiedzmy, w środowisku solo ...) w użytecznej formie:
szukasz node.to_hash
- patrz http://www.rubydoc.info/gems/chef/Chef%2FNode%3Ato_hash
kilka innych opcji tam też - http://www.rubydoc.info/gems/chef/Chef/Node
, aby uzyskać ładny wydrukowany dziennik, możesz użyć jso szefa kuchni n libs dość drukarek:
output="#{Chef::JSONCompat.to_json_pretty(node.to_hash)}"
log output
lub napisać plik lokalny do klienta:
output="#{Chef::JSONCompat.to_json_pretty(node.to_hash)}"
file '/tmp/node.json' do
content output
end
pamiętać, że ten węzeł konwergentnej, więc nie dostanie default/override/etc poziomów można można uzyskać z node.debug_value
- ale jeśli faktycznie nie znasz nazwy/ścieżki atrybutu, lub musisz zapętlić kilka atrybutów, może to być twój przyjaciel.
Dostaniesz ogromną wynik, który wygląda jak (bardzo trimed!)
{
"chef_type": "node",
"name": "node.example.com",
"chef_environment": "_default",
"build-essential": {
"compile_time": false
},
"homebrew": {
"owner": null,
"auto-update": true,
...
},
"recipe": [
"example"
],
"run_list": [
"recipe[example]"
]
}
Dzięki this answer dla ładnego wskaźnik drukarki
rozwidlone odpowiedź przez @keen ta produkuje bardziej ludzki czytelne wyjście w formacie YAML.
output = node.to_yaml
file '/var/node.yaml' do
content output
end
Czy czytanie dokumentów jest zbyt trudne? zacznij [tutaj] (https://learn.chef.io/fundamentals-series/) i spróbuj przeszukać [tutaj] (http://docs.chef.io) zanim zapytasz. Jeśli chcesz porozmawiać, zobacz kanał IRC#cheff na irc.freenode.net. W skrócie, pokaż, jak próbowałeś sam przed spamowaniem StasckOverflow – Tensibai
@Tensibai Pytanie jest sprawiedliwe, Cherry próbuje rozwiązać problem z bootstrapem szefa kuchni. Linki, które podajesz, są elementarne. Trudno byłoby znaleźć odpowiedź, gdybym był początkującym kucharzem. To nie jest nowy użytkownik SO, więc jeśli nie podoba ci się to pytanie, po prostu spróbuj. –
4 pytania na ten sam temat są spamem IMO – Tensibai