Ansible w praktyce

Book description

Automatyzacja zarządzania konfiguracją i proste instalowanie systemów
Zarządzanie konfiguracją oprogramowania w systemach sieciowych jest niebanalnym zadaniem. Nawet zwykła aktualizacja czy wdrożenie nowego oprogramowania mogą się skończyć katastrofą, zwłaszcza w przypadku serwerów pracujących pod kontrolą systemów Linux czy Unix. Konieczność pilnowania ustawień w wielu różnych plikach konfiguracyjnych, z których każdy służy innemu elementowi, sprawia, że problemy mogą sprawiać nawet zasadniczo nieskomplikowane czynności - chyba że konfiguracja i wdrażanie oprogramowania w systemie zostaną zautomatyzowane za pomocą odpowiedniego narzędzia, na przykład Ansible.

Istnieje wiele narzędzi do zarządzania konfiguracją oprogramowania. Spośród nich Ansible wyróżnia się szczególnymi zaletami: ma minimalne rozmiary, nie wymaga instalowania czegokolwiek na serwerach i jest proste w użyciu. Dzięki tej książce szybko nauczysz się korzystać z najnowszej wersji Ansible do instalowania nowego kodu aplikacji w środowisku produkcyjnym czy też do lepszego i prostszego zarządzania rozbudowanymi systemami. Zapoznasz się między innymi z oprogramowaniem Ansible Tower, a także dowiesz się, jak skutecznie zarządzać komputerami z systemem Windows i sprzętem sieciowym. Ten niezwykle praktyczny podręcznik powinien stale być pod ręką każdego administratora systemu, wdrożeniowca i programisty!

W tej książce między innymi:

Ansible a inne narzędzia do zarządzania konfiguracją systemów
Scenariusze w języku YAML
Testowanie i skalowanie scenariuszy
Techniki wdrażania aplikacji w systemie
Automatyzacja konfigurowania urządzeń sieciowych
Wdrażanie aplikacji w chmurze
Ansible: skuteczne narzędzie najlepszych adminów!

Table of contents

  1. Opinie o książce Ansible w praktyce
  2. Przedmowa
  3. Wstęp do drugiego wydania
    1. Uwaga do stylu
    2. Podziękowania
      1. Od Lorina
      2. Od René
  4. Wstęp do pierwszego wydania
    1. Dlaczego napisałem tę książkę?
    2. Dla kogo jest ta książka?
    3. Układ książki
    4. Konwencje typograficzne
    5. Materiały w internecie
  5. Rozdział 1. Wprowadzenie
    1. Uwaga do wersji
    2. Do czego nadaje się Ansible?
    3. Jak działa Ansible?
    4. Na czym polega wielkość Ansible?
      1. Czytelna składnia
      2. Nic nie trzeba instalować
      3. Wysyłanie informacji
      4. Skalowalność w dół
      5. Wbudowane moduły
      6. Bardzo cienka warstwa abstrakcji
    5. Czy Ansible nie jest zbyt proste?
    6. Co muszę wiedzieć?
    7. Czego tu nie znajdziesz?
    8. Instalacja Ansible
    9. Konfiguracja serwera testowego
      1. Konfiguracja serwera testowego za pomocą narzędzia Vagrant
      2. Wprowadzanie do Ansible informacji o serwerze
      3. Ułatwienia dzięki plikowi ansible.cfg
    10. Co dalej?
  6. Rozdział 2. Scenariusze: pierwsze kroki
    1. Wstępne wymagania
    2. Bardzo prosty scenariusz
      1. Tworzenie pliku konfiguracyjnego Nginx
      2. Tworzenie własnej strony WWW
      3. Definiowanie grupy serwerów WWW
    3. Uruchomienie scenariusza
    4. Scenariusz to plik YAML
      1. Początek pliku
      2. Komentarze
      3. Ciągi znaków
      4. Wartości logiczne
      5. Listy
      6. Słowniki
      7. Dzielenie wierszy
    5. Anatomia scenariusza
      1. Akcje
      2. Zadania
      3. Moduły
      4. Wszystko razem
    6. Czy coś się zmieniło? Śledzenie stanu serwera
    7. Coś ciekawszego: szyfrowanie TLS
      1. Tworzenie certyfikatu TLS
      2. Zmienne
      3. Tworzenie szablonu konfiguracyjnego Nginx
      4. Procedury
        1. Kilka cech procedur, o których należy pamiętać
      5. Uruchomienie scenariusza
  7. Rozdział 3. Ewidencja: opisywanie serwerów
    1. Plik ewidencyjny
    2. Wstępne wymagania: kilka maszyn Vagrant
    3. Funkcjonalne parametry ewidencji
      1. ansible_connection
      2. ansible_shell_type
      3. ansible_python_interpreter
      4. ansible_*_interpreter
      5. Zmienianie domyślnych wartości parametrów funkcjonalnych
    4. Grupy, grupy i jeszcze raz grupy
      1. Przykład: instalacja aplikacji Django
      2. Aliasy i porty
      3. Grupy grup
      4. Serwery numerowane (zwierzaki kontra stado)
    5. Zmienne serwerowe i grupowe w pliku ewidencyjnym
    6. Zmienne serwerowe i grupowe w osobnych plikach
    7. Dynamiczna ewidencja
      1. Interfejs skryptu dynamicznej ewidencji
        1. Wyświetlanie szczegółowych informacji o serwerze
        2. Wyświetlanie grup
      2. Tworzenie skryptu dynamicznej ewidencji
      3. Istniejące skrypty ewidencyjne
    8. Podział ewidencji na kilka plików
    9. Dodawanie wpisów w trakcie działania scenariusza za pomocą modułów add_host i group_by
      1. Moduł add_host
      2. Moduł group_by
  8. Rozdział 4. Zmienne i fakty
    1. Definiowanie zmiennych w scenariuszu
    2. Wyświetlanie wartości zmiennych
    3. Rejestrowanie zmiennych
    4. Fakty
      1. Wyświetlanie wszystkich faktów skojarzonych z serwerem
      2. Wyświetlanie podzbioru faktów
      3. Fakty może zwracać każdy moduł
      4. Fakty lokalne
    5. Definiowanie nowej zmiennej za pomocą modułu set_fact
    6. Wbudowane zmienne
      1. hostvars
      2. inventory_hostname
      3. groups
    7. Definiowanie zmiennych w wierszu poleceń
    8. Priorytety
  9. Rozdział 5. Mezzanine: nasza testowa aplikacja
    1. Dlaczego wdrażanie aplikacji produkcyjnych jest skomplikowane?
      1. Baza danych: PostgreSQL
      2. Serwer aplikacyjny: Gunicorn
      3. Serwer WWW: Nginx
      4. Menedżer procesów: Supervisor
  10. Rozdział 6. Instalacja Mezzanine za pomocą Ansible
    1. Wyświetlanie zadań scenariusza
    2. Układ zainstalowanych plików
    3. Zmienne jawne i poufne
    4. Instalowanie wielu pakietów za pomocą pętli (with_items)
    5. Instrukcja become w zadaniu
    6. Aktualizacja rejestru apt
    7. Sprawdzenie projektu za pomocą modułu git
    8. Instalacja Mezzanine i innych pakietów w środowisku wirtualnym
    9. Krótka dygresja: skomplikowane argumenty w zadaniach
    10. Konfiguracja bazy danych
    11. Tworzenie pliku local_settings.py na podstawie szablonu
    12. Polecenia django-manage
    13. Uruchamianie własnych skryptów Pythona w kontekście aplikacji
    14. Utworzenie plików konfiguracyjnych usług
    15. Aktywacja konfiguracji serwera Nginx
    16. Instalacja certyfikatów TLS
    17. Instalacja zadania Twitter w harmonogramie cron
    18. Cały scenariusz
    19. Uruchomienie scenariusza na maszynie wirtualnej Vagrant
    20. Diagnostyka
      1. Brak dostępu do repozytorium GitHub
      2. Brak dostępu do adresu 192.168.33.10.xip.io
      3. Komunikat Bad Request (400)
    21. Instalacja Mezzanine na wielu serwerach
  11. Rozdział 7. Skalowanie scenariuszy: role
    1. Podstawowa struktura roli
    2. Przykład: role database i mezzanine
    3. Stosowanie ról w scenariuszach
    4. Zadania wstępne i końcowe
    5. Rola database instalująca bazę danych
    6. Rola mezzanine instalująca aplikację Mezzanine
    7. Tworzenie plików i katalogów ról za pomocą narzędzia ansible-galaxy
    8. Role zależne
    9. Repozytorium Ansible Galaxy
      1. Interfejs WWW
      2. Interfejs wiersza poleceń
        1. Instalacja roli
        2. Wyświetlanie zainstalowanych ról
        3. Dezinstalacja roli
      3. Udostępnianie własnej roli
  12. Rozdział 8. Zaawansowane scenariusze
    1. Obsługa błędnie działających poleceń: instrukcje changed_when i failed_when
    2. Filtry
      1. Filtr default
      2. Filtry zarejestrowanych zmiennych
      3. Filtry ścieżek plików
      4. Tworzenie własnych filtrów
    3. Wyszukiwarki
      1. file
      2. pipe
      3. env
      4. password
      5. template
      6. csvfile
      7. dnstxt
      8. redis_kv
      9. etcd
      10. Utworzenie własnej wyszukiwarki
    4. Zaawansowane pętle
      1. with_lines
      2. with_fileglob
      3. with_dict
      4. Wyszukiwarki jako pętle
    5. Sterowanie pętlami
      1. Określanie nazwy zmiennej iteracyjnej
      2. Umieszczanie etykiet w wynikach
    6. Dołączanie plików
      1. Dynamiczne dołączanie plików
      2. Dołączanie ról
    7. Bloki
    8. Obsługa błędów za pomocą bloków
    9. Szyfrowanie poufnych danych
  13. Rozdział 9. Dostosowywanie serwerów, przebiegów i procedur
    1. Wzorce specyfikowania serwerów
    2. Określanie grupy serwerów
    3. Wykonywanie zadania na komputerze sterującym
    4. Wykonywanie zadania na innym komputerze niż serwer
    5. Wykonywanie zadania na kolejnych serwerach
    6. Wykonywanie zadania w grupie serwerów
    7. Jednokrotne wykonanie zadania
    8. Strategie przebiegów
      1. Strategia linear
      2. Strategia free
    9. Zaawansowane procedury
      1. Procedury w zadaniach wstępnych i końcowych
      2. Procedury natychmiastowe
      3. Procedury nasłuchujące
        1. Procedury nasłuchujące: konfiguracja certyfikatów SSL
    10. Jawne gromadzenie faktów
    11. Odczytywanie adresu IP serwera
  14. Rozdział 10. Wtyczki zwrotne
    1. Wtyczki stdout
      1. actionable
      2. debug
      3. dense
      4. json
      5. minimal
      6. oneline
      7. selective
      8. skippy
    2. Inne wtyczki
      1. foreman
      2. hipchat
      3. jabber
      4. junit
      5. log_plays
      6. logentries
      7. logstash
      8. mail
      9. osx_say
      10. profile_tasks
      11. slack
      12. timer
  15. Rozdział 11. Przyspieszanie Ansible
    1. Zwielokrotnienie sesji SSH (opcja ControlPersist)
      1. Ręczne włączenie zwielokrotnienia sesji SSH
      2. Opcje zwielokrotniania sesji SSH
    2. Potokowanie
      1. Włączenie potokowania
      2. Konfigurowanie potokowania na serwerze
    3. Zapamiętywanie faktów
      1. Zapamiętywanie faktów w plikach JSON
      2. Zapamiętywanie faktów w bazie Redis
      3. Zapamiętywanie faktów w bazie Memcached
    4. Równoległe połączenia
    5. Równoległe wykonywanie zadań za pomocą instrukcji async
  16. Rozdział 12. Własne moduły
    1. Przykład: sprawdzenie, czy zewnętrzny serwer jest dostępny
    2. Użycie modułu script zamiast tworzenia własnego modułu
    3. Skrypt can_reach jako moduł
    4. Gdzie umieszczać własne moduły?
    5. Jak Ansible uruchamia moduły?
      1. Utworzenie niezależnego skryptu Pythona z argumentami (tylko Python)
      2. Skopiowanie modułu do serwera
      3. Utworzenie pliku argumentów na serwerze (inne języki)
      4. Wywołanie modułu
    6. Oczekiwane wyniki
      1. Zmienne wynikowe oczekiwane przez Ansible
        1. changed
        2. failed
        3. msg
    7. Tworzenie modułów w języku Python
      1. Analiza argumentów
      2. Odczytywanie argumentów
      3. Import klasy pomocniczej AnsibleModule
      4. Opcje argumentów
        1. required
        2. default
        3. choices
        4. aliases
        5. type
      5. Parametry konstruktora klasy AnsibleModule
        1. argument_spec
        2. no_log
        3. check_invalid_arguments
        4. mutually_exclusive
        5. required_one_of
        6. add_file_common_args
        7. bypass_checks
      6. Zwracanie informacji o pomyślnym lub niepomyślnym wykonaniu modułu
      7. Wywoływanie zewnętrznych programów
      8. Tryb weryfikacji (suchy przebieg)
    8. Dokumentowanie modułu
    9. Diagnozowanie modułu
    10. Implementowanie modułu jako skryptu Bash
    11. Określanie alternatywnego położenia powłoki Bash
    12. Przykładowe moduły
  17. Rozdział 13. Vagrant
    1. Przydatne opcje konfiguracyjne środowiska Vagrant
      1. Przekazywanie portów i prywatne adresy IP
      2. Włączanie przekazywania agentów
    2. Prowizjoner Ansible
    3. Kiedy jest uruchamiany prowizjoner?
    4. Plik ewidencyjny tworzony przez środowisko Vagrant
    5. Równoległe prowizjonowanie maszyn
    6. Definiowanie grup maszyn wirtualnych
    7. Lokalny prowizjoner Ansible
  18. Rozdział 14. Amazon EC2
    1. Terminologia
      1. Instancja
      2. Obraz maszyny
      3. Tagi
    2. Poświadczenia
      1. Zmienne środowiskowe
      2. Pliki konfiguracyjne
    3. Warunek: instancja biblioteki Python Boto
    4. Dynamiczna ewidencja
      1. Zapamiętywanie ewidencji
      2. Inne opcje konfiguracyjne
      3. Automatycznie tworzone grupy instancji
    5. Definiowanie dynamicznych grup instancji na podstawie tagów
      1. Przypisywanie tagów do istniejących zasobów
      2. Bardziej czytelne nazwy grup
    6. Chmury EC2-VPC i EC2-Classic
    7. Przygotowanie pliku ansible.cfg do korzystania z chmury EC2
    8. Uruchamianie nowych instancji
    9. Pary kluczy EC2
      1. Tworzenie nowej pary kluczy
      2. Ładowanie istniejącego klucza
    10. Grupy bezpieczeństwa
      1. Dozwolone adresy IP
      2. Porty TCP grupy bezpieczeństwa
    11. Uzyskiwanie najnowszego obrazu AMI
    12. Dodanie nowej instancji do grupy
    13. Oczekiwanie na uruchomienie instancji
    14. Idempotentne tworzenie instancji
    15. Wszystko razem
    16. Definiowanie chmury VPC
      1. Dynamiczna ewidencja i chmura VPC
    17. Tworzenie obrazów AMI
      1. Moduł ec2_ami
      2. Narzędzie Packer
        1. Prowizjoner Ansible Remote
        2. Prowizjoner Ansible Local
    18. Inne moduły
  19. Rozdział 15. Docker
    1. Przykład użycia programów Docker i Ansible
    2. Czas życia aplikacji Docker
    3. Przykładowa aplikacja: Ghost
    4. Nawiązywanie połączenia z demonem Dockera
    5. Uruchomienie kontenera na lokalnym komputerze
    6. Tworzenie obrazu za pomocą pliku Dockerfile
    7. Orkiestracja kilku kontenerów na lokalnym komputerze
    8. Wysyłanie obrazów do rejestru Dockera
    9. Odczytywanie informacji o lokalnych obrazach
    10. Instalowanie aplikacji zawartych w obrazach
      1. Baza danych PostgreSQL
      2. Front aplikacji
        1. Konfiguracja aplikacji Ghost
        2. Konfiguracja usługi Nginx
      3. Usuwanie kontenerów
      4. Bezpośrednia komunikacja z kontenerami
    11. Ansible Container
      1. Kontener Conductor
      2. Tworzenie obrazów Dockera
        1. Tworzenie początkowych plików
        2. Tworzenie ról
        3. Modyfikacja pliku container.yml
        4. Tworzenie kontenerów
        5. Diagnozowanie problemów
      3. Lokalne uruchamianie kontenerów
      4. Umieszczanie obrazów w rejestrach
        1. Uwierzytelnianie w rejestrze
        2. Kilka rejestrów
      5. Wdrażanie kontenerów w środowisku produkcyjnym
  20. Rozdział 16. Diagnozowanie scenariuszy
    1. Czytelne komunikaty o błędach
    2. Diagnozowanie połączenia SSH
    3. Moduł debug
    4. Debuger scenariuszy
    5. Moduł assert
    6. Sprawdzenie scenariusza przed uruchomieniem
      1. Sprawdzenie składni
      2. Wyświetlenie listy serwerów
      3. Wyświetlenie listy zadań
      4. Tryb weryfikacji
      5. Różnice (wyświetlenie zmian w plikach)
    7. Wybieranie zadań do wykonania
      1. Argument --step
      2. Argument --start-at-task
      3. Tagi
  21. Rozdział 17. Zarządzanie serwerami Windows
    1. Połączenie z systemem Windows
    2. PowerShell
    3. Moduły Windows
    4. Nasz pierwszy scenariusz
    5. Aktualizacja systemu Windows
    6. Tworzenie lokalnych kont użytkowników
    7. Podsumowanie
  22. Rozdział 18. Ansible i urządzenia sieciowe
    1. Obecny stan modułów sieciowych
    2. Lista obsługiwanych urządzeń
    3. Przygotowanie urządzenia sieciowego
      1. Włączenie protokołu SSH
    4. Jak funkcjonują moduły?
    5. Pierwszy scenariusz
    6. Ewidencja i zmienne w modułach sieciowych
      1. Połączenie lokalne
      2. Parametry połączenia
      3. Zmienne uwierzytelniające
      4. Zapisanie konfiguracji
    7. Korzystanie z plików konfiguracyjnych
    8. Szablony, szablony, szablony
    9. Gromadzenie faktów
    10. Podsumowanie
  23. Rozdział 19. Ansible Tower: wersja dla firm
    1. Modele subskrypcji
      1. Wypróbuj Ansible Tower
    2. Jakie problemy rozwiązuje Ansible Tower?
      1. Kontrola dostępu
      2. Projekty
      3. Ewidencjonowanie serwerów
      4. Uruchamianie zadań za pomocą szablonów
    3. Interfejs REST API
    4. Interfejs CLI
      1. Instalacja
      2. Utworzenie konta użytkownika
      3. Uruchomienie zadania
    5. Co dalej?
  24. Dodatek A Protokół SSH
    1. Natywny klient SSH
    2. Agent SSH
    3. Uruchomienie agenta SSH
      1. macOS
      2. Linux
    4. Przekazywanie agenta
      1. Polecenie sudo i przekazywanie agenta
    5. Klucze hosta
  25. Dodatek B Role IAM i poświadczenia EC2
    1. Konsola AWS Management Console
    2. Wiersz poleceń
  26. Słowniczek
  27. Bibliografia
    1. O autorach
    2. Kolofon

Product information

  • Title: Ansible w praktyce
  • Author(s): Lorin Hochstein, Rene Moser
  • Release date: April 2018
  • Publisher(s): Helion
  • ISBN: 9781098125141