Jak przetestować obsługę administracyjną i konfigurację w konfiguracji Ansible?

33

Patrząc na próbę zbudowania pewnej odporności w naszej konfiguracji Ansible, która zajmuje się obsługą administracyjną i konfiguracją.

Rozumiem kilka metod testowania po stronie konfiguracji rzeczy, ale zastanawiam się, jak najlepiej wdrożyć testowanie po stronie udostępniania rzeczy i czy istnieją jakieś narzędzia, które mogą pomóc w tego typu implementacji.

Obecnie wiele naszych testów przeprowadzanych jest szeregowo podczas podręcznika, co ma sens dla takich rzeczy, jak: „pojawiła się usługa; jest dostępny vip; czy to zadanie asynchroniczne zostało zakończone”, ale to, co naprawdę mnie martwi, to nasza zdolność do zarządzania dryfowaniem konfiguracja zarówno w warstwie aplikacji, jak i na poziomie udostępniania (np. konfiguracja maszyny wirtualnej). Wiem, że Ansible nie jest najlepszym narzędziem do pracy ze zmianami konfiguracji, ale ciekawi mnie twoje własne opinie.

Jeśli masz coś, aby w pełni zautomatyzować proces jeszcze lepiej. (mamy kilka brzydkich skryptów, które codziennie zgłaszają się luzem).

Uwaga : w tej chwili mamy kilka warunków, w których może wystąpić poprawka (np. Przebudowa z kopii zapasowej, problem z krytycznymi systemami), ale zazwyczaj po prostu wykonuje ona pętle przez niektóre zadania konfiguracyjne i już o tym nie myśli.

Nafta
źródło
2
serverpec.org
Matt Schuchard
Czy Ansible działa tylko raz po zainicjowaniu? Jeśli nie, to na jakiej częstotliwości? Próbuję zrozumieć problem przed zaoferowaniem rozwiązania.
Woodland Hunter
Cześć @Naphta. Żadna z odpowiedzi nie rozwiązała Twojego pytania. Rozważ je , klikając znacznik wyboru. Wskazuje to szerszej społeczności, że znalazłeś rozwiązanie i daje pewną reputację zarówno użytkownikowi, jak i odbiorcy. Nie ma takiego obowiązku.
Richard Slater,
I'm aware Ansible isn't the best tool for working with configuration drift Proszę wytłumacz.
030

Odpowiedzi:

19

Niektóre opcje tam ..

Narzędzia testowe: Posortowane według gwiazd github

  • Serverspec - Ruby, najpopularniejsze narzędzie na rynku, oparte na rspec Rubiego
  • Goss - YAML, prosty, samodzielny plik binarny <10 MB, niezwykle szybki, może generować testy ze stanu systemu
  • Inspec - Ruby, pomyśl o tym jak o ulepszonej specyfikacji serwera, prawie takiej samej składni, stworzonej przez szefów kuchni. Zbudowany w celu łatwiejszego rozszerzenia niż serwery
  • Testinfra - Python, ma fajną funkcję korzystania z ekwipunku / zmiennych Ansible

Główne różnice między nimi:

Ostatecznie proponuję spędzić dzień na eksperymentowaniu z nimi wszystkimi, aby poczuć ich przed podjęciem decyzji.

  • Z wyjątkiem Gossa wszystkie frameworki mogą działać na zdalnej maszynie (np. Przez ssh). Goss działa tylko lokalnie lub w oknie dokowanym z / dgoss.
  • Wszystkie frameworki mogą być uruchamiane lokalnie na serwerze, ale wymagają zainstalowania lub osadzenia języka Python lub Ruby. Inspec zapewnia niezależny pakiet <150 MB z osadzoną wersją ruby. Goss to pojedynczy plik binarny <10 MB bez zewnętrznych zależności.
  • Goss ma wbudowaną obsługę wyjścia nagios / sensu, co pozwala na łatwiejszą integrację z narzędziami monitorującymi.
  • Testy Gossa są zwykle prostsze, ale mniej elastyczne, ponieważ są oparte na YAML. Inne frameworki pozwalają wykorzystać pełną moc języka Python / Ruby w języku bazowym do pisania testów lub rozszerzania funkcjonalności narzędzia. (prostota vs. elastyczność)
  • Goss umożliwia generowanie testów na podstawie bieżącego stanu systemu
  • Według mojej wiedzy Testinfra jest jedynym, który ma wbudowane wsparcie dla ansible zapasu i zmiennych
  • Inspec jest wspierany przez szefa kuchni

Testy ciągłe / rozbieżności:

  • Zgodność szefa kuchni - współpracuje z inspec w celu stałego testowania serwerów, płatnego produktu
  • Plotka - Można ją łatwo podłączyć do Nagios lub Sensu. Obsługuje także ujawnianie testów serwera jako punkt końcowy http.

Testowanie uprzęży dla rozwoju:

  • kuchnia - Narzędzie testowania wiązki przewodów, uruchamia instancję, uruchamia kod zarządzania konfiguracją, uruchamia pakiet testowy. Wykonane przez szefów kuchni
  • Cząsteczka - podobna do testowanej kuchni, ale napisana specjalnie dla ansible

Pełne ujawnienie: Jestem autorem plotek

AKTUALIZACJA: InSpec 4.x lub nowsza używa mieszanej licencji komercyjnej / open source - patrz komentarze.

Ahmed Elsabbahy
źródło
4
Rozumiem, że jesteś trochę stronniczy, ale inspec nie potrzebuje Zgodności do okresowego uruchamiania. I nie ma żadnych zależności do zarządzania, wszystkie niezbędne biblioteki i framework (ruby) są zawarte w pakiecie, który można zainstalować lokalnie na każdym węźle, podczas uruchamiania przez ssh / winrm, inspec umieścił się na swoim miejscu. Wskazujesz na wyłącznie zewnętrzne polecenie, które nie jest prawdą, wiele testów jest wykonywanych przez wewnętrzny kod ruby. (Myślę, że warto to zauważyć)
Tensibai
Zaktualizowałem odpowiedź, aby poprawić polecenie zewnętrzne, i dodałem pakiet ruby ​​do inspec. Czy możesz wyjaśnić lub wysłać mi link wyjaśniający, w jaki sposób inspec może być wykorzystywany do wykrywania / zgłaszania dryfu?
Ahmed Elsabbahy
Cóż, część dotycząca raportowania będzie do Twojej dyspozycji, w rzeczywistości celem zapewnienia zgodności jest reprezentacja. Ale możesz uruchomić inspec w pliku crontab i polegać na poczcie crontab, gdy test nie ostrzega (na przykład).
Tensibai
Podsumowując, czekamy na edycję, która brzmi jak uczciwa prezentacja twojego narzędzia i innych. Obawiam się, że może się to szybko zdezaktualizować, ale i tak +1 dla wpisu i wskaźników.
Tensibai
Ach, tak .. wszystkie narzędzia można wykorzystać w ten sposób. Próbowałem zapewnić narzędzia (lub integrację z narzędziami), które zapewniają lepsze raportowanie. Według mojej wiedzy istnieje zgodność lub owijanie narzędzi w sposób, który czyni je nagios / sensu / some-other-monitoring-tool-friendly. Np .: slideshare.net/m_richardson/... Przeprosiny, jeśli początkowo były stronnicze, nie były przeznaczone.
Ahmed Elsabbahy
13

Dwa narzędzia, które widziałem w tym celu, to InSpec i ServerSpec . Serverspec to oparte na Ruby narzędzie oparte na RSpec . InSpec jest inspirowany RSpec i ServerSpec.

Użyłem ServerSpec. Jest fajny, ale może nie w 100% stabilny. Mam problemy z testowaniem określonych wersji oprogramowania na Ubuntu.

Przeczytałem dokumenty InSpec, ale nie sięgnąłem głęboko. Robi to zasadniczo to samo, co Serverspec.

Sądząc po zobowiązaniach Github, wygląda na to, że praca na ServerSpec nieco się skończyła, podczas gdy InSpec dopiero się rozwija.

AKTUALIZACJA: InSpec 4.x lub nowsza używa mieszanej licencji komercyjnej / open source - patrz komentarze.

Dave Swersky
źródło
1
„Miałem problemy z testowaniem określonych wersji oprogramowania na Ubuntu.” Naprawiłem to po zauważeniu pytania na ten temat na SO: stackoverflow.com/questions/42417864/...
Matt Schuchard
Aby nieco wyjaśnić, InSpec emuluje RSpec, ale nie opiera się na nim.
coderanger
1
@MattSchuchard Dzięki za odniesienie!
Dave Swersky
dobrze „nie w 100% stabilny” jak na narzędzie testowe nie brzmi dobrze
2017
InSpec jest bardzo dobry jako narzędzie testowe i ułatwia instalację niczego na serwerze, podczas gdy ServerSpec może to zrobić tylko przy dodatkowej pracy. Potrzebne byłyby jednak pewne prace, aby InSpec używał zasobów reklamowych Ansible - prawdopodobnie łatwiej, jeśli zasoby reklamowe są w formacie YAML (Ansible 2.4+).
RichVel
10

Podczas korzystania z narzędzi do zarządzania konfiguracją, takich jak Ansible, samo narzędzie będzie odpowiedzialne za zapobieganie przesunięciom konfiguracji. Gdy użyjesz Ansible do ustawienia określonej konfiguracji, powtarzalne wykonanie Ansible zapewni, że konfiguracja będzie taka, jak ją zdefiniowałeś. Wymaga to również napisania kodu Ansible w sposób idempotentny.

Biorąc pod uwagę powyższe, testowanie można wykonać, wykonując podręczniki Ansible w pętli z jakiegoś serwera. Na przykład zadanie crona lub Jenkins może wykonywać podręczniki co 30 minut i zgłaszać wszelkie awarie. Brak awarii oznacza, że ​​konfiguracja jest sprawdzana, awarie oznaczają, że wystąpił problem z doprowadzeniem serwerów do pożądanego stanu .

W przypadku, gdy nie można ufać, że kod zostanie napisany jako idempotent, a tym samym nie można tak naprawdę wykonać Ansible powtarzalnie w pętli z automatycznego serwera, istnieje obejście. Możesz zrobić to samo, co powyżej (uruchomić Ansible w pętli), ale użyć trybu suchego uruchamiania . Za każdym razem, gdy Ansible zgłasza, że ​​zmiany są wymagane, zadanie Jenkins (lub zadanie cron) może powiadomić cię, że skonfigurowana konfiguracja została zmieniona i serwery nie są w pożądanym stanie .

Aby upewnić się, że Twój kod Ansible faktycznie robi to, co Twoim zdaniem powinno robić, obowiązują rozwiązania wymienione przez Dave'a Swersky'ego. Zarówno InSpec, jak i Serverspec to narzędzia, które w inny sposób weryfikują, czy twoje poradniki rzeczywiście robią to, co masz na myśli. Świetnym sposobem na wykonanie tego rodzaju narzędzi w środowiskach testowych (nawet kontenerów dokerów) jest użycie kitchen.ci, który obsługuje cały klej między różnymi narzędziami do testowania w podczerwieni oraz wykonywanie podręczników / modułów / książek kucharskich.

Kitchen.ci był pierwotnie używany do testowania książek kucharskich Chef, ale istnieją również wtyczki do Ansible i innych narzędzi CM.

Jewgienij
źródło
5

Test Kitchen ma wtyczkę Provider-ansible Provider do testowania kodu Ansible. Nie jest tak głęboka jak integracja szefa kuchni, ale w większości przypadków wykonuje zadanie. Istnieje również najnowszy projekt Molecule, który jest dedykowanym systemem testowania Ansible.

koderanger
źródło
0

Możesz śledzić rozbieżności w konfiguracji / infrastrukturze / dryf za pomocą Outthentic , łatwo jest stworzyć zestaw testowy, aby „naprawić” pożądany stan i uruchomić go ponownie za każdym razem, gdy potrzebujesz śledzić niepożądane zmiany.

Aleksiej Melezhik
źródło
1
Witamy w DevOps.se Alexey. Chociaż twoje narzędzie może w tym przypadku pomóc użytkownikowi, aby była to odpowiedź tutaj, powinno być trochę więcej, aby przekazać, w jaki sposób ma to związek z pytaniem. W przeciwnym razie wygląda jak reklama tylko z łączem.
pisklęta
Cześć! Jasne, właśnie podałem więcej szczegółów.
Alexey Melezhik
Z mojego punktu widzenia nie robi to nic więcej niż to, co może zrobić robota i jest poza zakresem tego pytania. Zwłaszcza, że ​​odpowiedź nie wyjaśnia, w jaki sposób może rozwiązać audyt tysiąca serwerów i zostać powiadomionym o dryfcie lub przedstawić audytorowi czytelny dla człowieka raport, podając pewne analizowalne wyniki. Z tego, co właśnie przeczytałem, nie robi nic więcej niż inspec może (na przykład) i daje mniej użyteczną moc wyjściową w skali, jednocześnie wymagając wielu zewnętrznych narzędzi do wykonania zadania, a zatem jest mniej przenośny.
Tensibai,
„jak może rozwiązać problem z audytem tysiąca serwerów” - w pytaniu mogłem znaleźć coś na temat tysięcy serwerów
Alexey Melezhik
„i być powiadamianym o znoszeniu lub przedstawić audytorowi czytelny dla człowieka raport, podając jakiś analizowalny wynik”. nie znalazłem tego w pytaniu. Oczywistym alarmowaniem o dryfowaniu jest fakt, że testy zaczynają się nie powieść ...
Alexey Melezhik