2013-06-05 11 views

Odpowiedz

72

Jak widzę, każdy przepis powinien być w stanie działać na pustej maszynie. Więc jeśli jakaś receptura A zależy od receptury B przed nią, zawsze używam include_recipe.

Na przykład: 2 książki kucharskie, tomcat i java. Tomcat wymaga języka Java.

  1. Kiedy jakiś użytkownik chce zainstalować tomcat, może nie mieć pojęcia, że ​​faktycznie potrzebuje innej książki kucharskiej, aby go zainstalować. On uruchamia przepis tomcat i albo zawiedzie z jakąś zupełnie niepomyślną informacją o błędzie, taką jak "No java found", albo jeszcze gorzej - to się uda, ale oczywiście użytkownik nie może uruchomić tomcat, ponieważ nie ma zainstalowanej javy.

  2. Ale gdy istnieje linia include_recipe 'java' w tomcat książki kucharskiej, która wymaga również linię depends 'java' w metadanych, gdy użytkownik próbuje zainstalować Tomcat, ujrzy zrozumiały komunikat o błędzie: „java cookbook nie znaleziono”. W ten sposób użytkownik może pobierać zależności samodzielnie (lub nawet za pomocą automatycznego narzędzia) bez uruchamiania receptur, ale odczytywanie metadanych.

+7

Jak inteligentny jest szef kuchni w kwestii unikania powtarzania przepisów? Więc jeśli twoja książka kucharska zależy od 'rodzica', to' include_recipe parent' i jakaś nieświadoma dusza dodaje 'rodzica' do listy wyników, czy' parent :: default.rb' jest uruchamiana dwukrotnie? Jeśli "rodzic" został [prawidłowo stworzony] (http://docs.opscode.com/chef_why.html#idempotence), nic złego się nie stanie z maszyną, ale ile czasu zmarnuje, gdy zaczniesz ładować/konwergować nowy węzeł? Jeśli Chef nie jest automagiczny w unikaniu duplikacji, czy istnieje zalecany sposób uniknięcia tego ręcznie? –

+6

Nie ładuje tej samej receptury kilka razy. Pomija to, jeśli już to widział. –

+0

Przypuszczam, że jest to korzyść z idempotencji: jeśli masz gwarancję tego samego wyniku, niezależnie od tego, ile razy go uruchomisz, wiesz, że możesz go pominąć, jeśli jest już uruchomiony! Dzięki, Draco. –

1

Cała logika powinna być kontrolowana za pomocą list biegowych. Książki kucharskie, próbuj jak mogą, nie są tak samo przydatne jak ludzie chcieliby myśleć. Wszystko, co robi include_recipe, to dodanie kolejnego miejsca, w którym użytkownicy muszą się zastanowić, co ma zamiar zrobić lista uruchamiania, i wyraź je i umieść na liście uruchamiania.

+1

Zakładam, że należy użyć 'include_recipe', aby uzależnić jawnie. – user1071847

Powiązane problemy