2011-12-05 11 views
25

Nie jestem pewien, czy rozumiem wykonanie warunkowe szefa kuchni.Zrozumienie szefa kuchni tylko_if not_if

Chciałbym zrobić kilka wykonanie warunkowego na podstawie tego, czy baza danych istnieje w PostgreSQL

Więc oto mój przykład

execute "add_db" do 
    cwd "/tmp" 
    user "dbuser" 
    command "createdb -T template_postgis mydb" 
    not_if 'psql --list|grep mydb' 
end 

Bieg psql --list|grep mydb powrócić czego można się spodziewać, jeśli db istnieje (wiersz z wpisem dbname) i nic w ogóle, jeśli nie robi.

Jak to się dzieje? Prawda czy fałsz? 1 lub 0? Czy wszystkie procesy zwracają 0, jeśli są skuteczne?

Wszelkie porady są mile widziane!

Odpowiedz

21

Właśnie wpadłem na ten problem. Mój problem polegał na tym, że polecenie not_if było uruchamiane jako "root", a nie "dbuser". Jeśli zmienisz go na

not_if 'psql --list|grep mydb', :user => 'dbuser' 

możesz uzyskać wyniki, których szukasz.

http://tickets.opscode.com/browse/CHEF-438

+5

Moja sytuacja była trochę różna, więc zostawię notatkę tutaj dla przyszłych użytkowników w podobnej sytuacji, którzy wylądowali tutaj. Powiedzmy, że masz atrybut 'node ['myattr'] = true', a następnie jeśli napiszesz' only_if node ['myattr'] ', szef będzie narzekał. Odkryłem, że należy dołączyć instrukcję w nawiasach klamrowych, tj. 'only_if {node ['myattr']}' – apatrick

19

Przeprowadź test samodzielnie, korzystając z wiersza poleceń, i spójrz na domyślną wartość zwracaną (a.k.a., "$?"). Powinieneś otrzymać coś takiego:

% psql --list|grep mydb 
    mydb-is-here 
    % echo $? 
    0 

Jeśli spróbujesz czegoś, co nie istnieje, należy uzyskać coś takiego:

% psql --list|grep mydb-not-here 
    % echo $? 
    1 

Co kucharz będzie patrząc na to wartość liczbowa, która zostałby wypchany do $ ?, tj. albo "0", albo "1". Innymi słowy, twój przykład pokazujący składnię "not_if" jest poprawny.

+0

Podobnie jak w jaki sposób dał im przykład jak to rozgryźć tam własne! –

+6

Zazwyczaj dodaje się znak -q do wywołania polecenia grep, umieszczając go w recepturze, aby wynik szefa kuchni nie był zapełniony żadnymi dopasowaniami produkowanymi przez grep. –

Powiązane problemy