2014-12-12 8 views
9

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?

+0

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

+4

@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. –

+0

4 pytania na ten sam temat są spamem IMO – Tensibai

Odpowiedz

5

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.

+2

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

9

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

2

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