🢂Ansible ‑ Cheatsheet (ściąga)
Ansible to narzędzie do automatyzacji IT, które umożliwia zarządzanie konfiguracją, wdrażanie aplikacji oraz orkiestrację zadań na wielu systemach lub urządzeniach.
Co to jest Ansible
Ansible to narzędzie do automatyzacji IT, które umożliwia zarządzanie konfiguracją, wdrażanie aplikacji oraz orkiestrację zadań na wielu systemach lub urządzeniach. Wykorzystuje prosty język oznaczony YAML, zwany playbookami, do definiowania zadań automatyzacji. Dzięki swojej prostocie i elastyczności, Ansible stał się popularnym wyborem wśród administratorów systemów, deweloperów i inżynierów DevOps do automatyzacji rutynowych zadań, takich jak instalacja oprogramowania, konfiguracja systemów czy zarządzanie zmianami w infrastrukturze. Nie wymaga instalacji agentów na zarządzanych systemach, co znacznie upraszcza zarządzanie. Ansible komunikuje się z zarządzanymi urządzeniami za pomocą SSH (dla systemów Unix/Linux) lub WinRM (dla systemów Windows), co czyni go łatwym do wdrożenia i używania w różnorodnych środowiskach.
Analiza SWOT Ansible
Silne strony:
- Prostota: Ansible jest łatwy do nauczenia i użycia, nawet dla użytkowników bez dużego doświadczenia w administrowaniu systemami.
- Efektywność: Ansible działa bez agentów, co oznacza, że nie wymaga instalowania dodatkowego oprogramowania na zarządzanych serwerach.
- Skalowalność: Ansible może zarządzać tysiącami serwerów z jednego centralnego miejsca.
- Wszechstronność: Ansible może być używany do różnych zadań, takich jak konfiguracja serwerów, wdrażanie aplikacji i zarządzanie infrastrukturą.
- Społeczność: Ansible posiada dużą i aktywną społeczność użytkowników i programistów, którzy zapewniają wsparcie i tworzą nowe moduły.
Słabe strony:
- Ograniczona funkcjonalność: Ansible nie posiada wszystkich funkcji dostępnych w innych narzędziach do zarządzania konfiguracją, takich jak Puppet czy Chef.
- Brak kontroli dostępu: Ansible nie posiada domyślnie mechanizmów kontroli dostępu, co może stanowić zagrożenie bezpieczeństwa.
- Zależność od SSH: Ansible opiera się na SSH do komunikacji z zarządzanymi serwerami, co może stanowić problem w środowiskach z ograniczonym dostępem.
Szanse:
- Rozwój technologii: Wraz z rozwojem technologii Ansible może zostać ulepszony o nowe funkcje i ułatwiony w użyciu.
- Wzrost popularności: Rosnąca popularność chmury obliczeniowej może zwiększyć zapotrzebowanie na narzędzia do zarządzania konfiguracją, takie jak Ansible.
- Integracja z innymi narzędziami: Ansible może zostać zintegrowany z innymi narzędziami, takimi jak systemy kontroli wersji i narzędzia do monitorowania, co zwiększy jego funkcjonalność.
Zagrożenia:
- Pojawienie się konkurencji: Mogą pojawić się nowe narzędzia do zarządzania konfiguracją, które oferują więcej funkcji i łatwiejszą obsługę niż Ansible.
- Zmiany w systemach operacyjnych: Zmiany w systemach operacyjnych mogą utrudnić działanie Ansible.
- Zagrożenia bezpieczeństwa: Nowe zagrożenia bezpieczeństwa mogą uczynić Ansible podatnym na ataki.
Cheatsheet Ansible
- Instalacja pakietu na serwerach Linux:
ansible all -m apt -a "name=nginx state=present" -become
- Instaluje pakiet nginx na wszystkich serwerach.
- Aktualizacja systemu na serwerach Linux:
ansible all -m apt -a "upgrade=dist" -become
- Aktualizuje wszystkie pakiety do najnowszej dostępnej wersji.
- Kopiowanie pliku na serwery:
ansible all -m copy -a "src=/src/path/file.txt dest=/dest/path/file.txt"
- Kopiuje plik z lokalnej ścieżki na serwery.
- Tworzenie użytkownika na serwerach:
ansible all -m user -a "name=example_user state=present" -become
- Tworzy użytkownikaexample_user
na wszystkich serwerach.
- Uruchomienie skryptu na serwerach:
ansible all -m script -a "/path/to/script.sh"
- Uruchamia skryptscript.sh
na wszystkich serwerach.
- Zarządzanie usługami:
ansible all -m service -a "name=httpd state=started" -become
- Uruchamia usługę httpd na wszystkich serwerach.
- Zabezpieczanie połączenia SSH:
ansible all -m lineinfile -a "dest=/etc/ssh/sshd_config line='PermitRootLogin no'" -become
- Wyłącza logowanie roota przez SSH.
- Synchronizacja katalogów:
ansible all -m synchronize -a "src=/src/dir dest=/dest/dir rsync_opts='-avz'"
- Synchronizuje katalogi między lokalnym a zdalnym serwerem.
- Zmiana uprawnień pliku:
ansible all -m file -a "path=/path/to/file mode=600" -become
- Zmienia uprawnienia pliku na 600.
- Sprawdzanie stanu serwera:
ansible all -m ping
- Sprawdza, czy serwery są dostępne i odpowiadają.
- Wykonanie polecenia na serwerach:
ansible all -m command -a "/usr/bin/uptime"
- Wykonuje polecenieuptime
na wszystkich serwerach.
- Zarządzanie pakietami w systemie Red Hat:
ansible all -m yum -a "name=httpd state=present" -become
- Instaluje pakiet httpd na serwerach z systemem Red Hat.
- Dodawanie repozytorium:
ansible all -m apt_repository -a "repo='ppa:ansible/ansible' state=present" -become
- Dodaje repozytorium Ansible na serwerach Ubuntu.
- Zarządzanie plikami konfiguracyjnymi za pomocą szablonu:
ansible all -m template -a "src=/templates/src.conf.j2 dest=/etc/src.conf"
- Kopiuje szablon konfiguracyjny do określonej ścieżki na serwerach.
- Zbieranie faktów o serwerach:
ansible all -m setup
- Zbiera szczegółowe informacje o serwerach, takie jak system operacyjny, adresy IP, dostępna pamięć, itp.
Każdy z tych przykładów można dostosować do specyficznych potrzeb, zmieniając parametry i opcje.
Przykłady playbooków Ansible dla PHP, Java, JavaScript/TypeScript oraz .NET
Poniżej znajdują się cztery przykłady playbooków Ansible dla różnych środowisk programistycznych: PHP, Java, JavaScript/TypeScript oraz .NET
PHP
- name: Konfiguracja środowiska PHP na serwerach
hosts: php_servers
become: yes
tasks:
- name: Instalacja Apache
apt:
name: apache2
state: present
- name: Instalacja PHP
apt:
name: php
state: present
- name: Kopiowanie pliku konfiguracyjnego PHP
copy:
src: /src/path/php.ini
dest: /etc/php/7.4/apache2/php.ini
- name: Restart Apache, aby zastosować konfigurację
service:
name: apache2
state: restarted
JAVA
---
- name: Konfiguracja środowiska Java na serwerach
hosts: java_servers
become: yes
tasks:
- name: Instalacja OpenJDK 11
apt:
name: openjdk-11-jdk
state: present
- name: Ustawienie zmiennej środowiskowej JAVA_HOME
lineinfile:
path: /etc/environment
line: JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
create: yes
- name: Weryfikacja wersji Java
command: java -version
register: java_version
- debug:
var: java_version.stdout
JavaScript/TypeScript z Node.js
---
- name: Konfiguracja środowiska Node.js dla aplikacji JavaScript/TypeScript
hosts: js_servers
become: yes
tasks:
- name: Instalacja Node.js
apt:
name: nodejs
state: present
update_cache: yes
- name: Instalacja npm
apt:
name: npm
state: present
- name: Instalacja zależności projektu
npm:
path: /path/to/your/project
.NET
---
- name: Konfiguracja środowiska .NET na serwerach
hosts: dotnet_servers
become: yes
tasks:
- name: Dodanie repozytorium Microsoft
apt_repository:
repo: 'deb [arch=amd64,arm64,armhf] https://packages.microsoft.com/repos/microsoft-ubuntu-{{ ansible_distribution_release }}-prod {{ ansible_distribution_release }} main'
state: present
- name: Instalacja .NET SDK
apt:
name: dotnet-sdk-3.1
state: present
update_cache: yes
- name: Instalacja środowiska uruchomieniowego .NET
apt:
name: aspnetcore-runtime-3.1
state: present
W każdym z tych playbooków należy dostosować ścieżki, wersje oraz inne parametry do swoich potrzeb. Playbooki te służą jako punkt wyjścia do konfiguracji środowisk programistycznych na zdalnych serwerach za pomocą Ansible.
Cheatsheet Ansible do zarządzania hostami
Oto cheatsheet Ansible do zarządzania hostami, zawierający scenariusze i przykłady wraz z krótkimi opisami:
1. Pobieranie i instalacja Ansible:
sudo apt install ansible
2. Tworzenie pliku inwentarza:
[webservers]
192.168.1.10
192.168.1.11
[all:vars]
ansible_ssh_user=root
ansible_ssh_password=password
3. Uruchamianie poleceń na zdalnych hostach:
ansible all -m ping
ansible webservers -m shell -a "df -h"
4. Zarządzanie pakietami:
ansible all -m apt -a "name=nginx state=present"
- Cel: To polecenie obejmuje wszystkie hosty w Twoim inwentarzu, używając słowa kluczowego
all
. - Moduł: Flaga
m apt
określa modułapt
, który działa z systemami opartymi na Debianie, takimi jak Ubuntu, aby zarządzać pakietami za pomocą menedżera pakietówapt
. - Argumenty: Flaga
a
przekazuje argumenty do modułuapt
:
ansible webservers -m yum -a "name=httpd state=installed"
- Cel: To polecenie obejmuje tylko hosty należące do grupy
webservers
w Twoim inwentarzu. - Moduł: Flaga
m yum
określa modułyum
, który działa z systemami opartymi na Red Hat, takimi jak CentOS lub Fedora, aby zarządzać pakietami za pomocą menedżera pakietówyum
. - Argumenty: Podobnie jak w poprzednim poleceniu, flaga
a
przekazuje argumenty do modułuyum
:name=httpd
: Określa nazwę pakietu, którym chcesz zarządzać, w tym przypadkuhttpd
(serwer Apache).state=installed
: Zapewnia, że pakiethttpd
jest zainstalowany na serwerach WWW docelowych. Jeśli nie jest obecny, Ansible go zainstaluje. Jeśli jest już zainstalowany, Ansible nie podejmie dalszych działań.
5. Uruchamianie skryptów:
ansible all -m script -a "script=./my_script.sh"
ansible webservers -m script -a "script=./deploy_app.sh"
6. Używanie modułów Ansible:
ansible all -m user -a "name=john state=present"
Polecenie to używa narzędzia ansible
do zarządzania kontami użytkowników na wszystkich hostach zdefiniowanych w pliku inwentarza (domyślnie hosts
). Oto szczegółowe wyjaśnienie:
ansible
: Główne polecenie Ansible do uruchamiania modułów i zadań.all
: Określa wszystkie hosty wymienione w inwentarzu, co oznacza, że polecenie zostanie zastosowane do każdego hosta w Twoim inwentarzu.m user
: Określa używany moduł, którym w tym przypadku jestuser
. Modułuser
służy do zarządzania kontami użytkowników na zdalnych hostach.a "name=john state=present"
: Argumenty przekazane do modułuuser
:name=john
: Ustawia nazwę użytkownika najohn
.state=present
: Zapewnia, że konto użytkownika o nazwiejohn
istnieje na hostach docelowych. Jeśli nie istnieje, Ansible je utworzy. Jeśli już istnieje, Ansible nie podejmie żadnych dalszych działań.
Podsumowując, to polecenie tworzy użytkownika o nazwie john
na wszystkich hostach w Twoim inwentarzu lub zapewnia, że taki użytkownik istnieje, jeśli jest już obecny.
ansible webservers -m group -a "name=webadmins state=present"
Polecenie to tworzy grupę o nazwie webadmins
na wszystkich hostach należących do grupy webservers
w Twoim inwentarzu. Oto szczegółowe wyjaśnienie:
ansible webservers
: Określa grupę docelową, którą w tym przypadku jestwebservers
. Oznacza to, że polecenie zostanie zastosowane tylko do hostów wymienionych pod grupąwebservers
w Twoim inwentarzu.m group
: Określa używany moduł, którym w tym przypadku jestgroup
. Modułgroup
służy do zarządzania grupami na zdalnych hostach.a "name=webadmins state=present"
: Argumenty przekazane do moduługroup
:
Podsumowując, to polecenie tworzy grupę o nazwie webadmins
na wszystkich hostach, które należą do grupy webservers
w Twoim inwentarzu lub zapewnia, że taka grupa istnieje, jeśli jest już obecna.
6. Wykonanie polecenia na hostach
- name: Wykonanie polecenia na hostach
hosts: all
tasks:
- name: Sprawdzenie wolnego miejsca na dysku
command: df -h
register: disk_space
- debug: var=disk_space.stdout_lines
Oto szczegółowe wyjaśnienie jego działania:
- name: Wykonanie polecenia na hostach: Jest to nazwa całego playbooka, która służy jako opis tego, co playbook ma robić. W tym przypadku nazwa jest ogólna i może być dowolnie zmieniona, aby lepiej opisywała cel playbooka.
- hosts: all: Określa, na których hostach mają być wykonane zadania zawarte w playbooku. Wartość
all
oznacza, że zadania będą wykonane na wszystkich hostach zdefiniowanych w aktywnym pliku inwentarzowym. - tasks: Sekcja zawierająca listę zadań do wykonania. Zadania są wykonywane sekwencyjnie na każdym hoście.
- name: Sprawdzenie wolnego miejsca na dysku: Każde zadanie w Ansible może mieć własną nazwę, która opisuje, co zadanie robi. W tym przypadku zadanie ma na celu sprawdzenie wolnego miejsca na dysku na hostach.
- command: df -h: Moduł
command
pozwala na wykonanie dowolnego polecenia w shellu na zdalnym hoście. Tutaj poleceniedf -h
jest użyte do wyświetlenia informacji o wykorzystaniu przestrzeni dyskowej w formacie czytelnym dla człowieka (human-readable). - register: disk_space: Słowo kluczowe
register
pozwala na zapisanie wyniku wykonania polecenia do zmiennej, tutaj nazwanejdisk_space
. Zawartość tej zmiennej może być następnie użyta w kolejnych zadaniach playbooka. - debug: var=disk_space.stdout_lines: Zadanie używające modułu
debug
do wyświetlenia wartości zmiennejdisk_space.stdout_lines
. Wartość.stdout_lines
jest listą linii tekstu wyjściowego z poleceniadf -h
, co pozwala na łatwe przeczytanie wyniku polecenia w formacie linii po linii. Dzięki temu można łatwo przeanalizować, ile miejsca zostało na dyskach każdego z hostów.
8. Uruchamianie playbooków:
ansible-playbook playbook.yml
9. Dodatkowe opcje:
i
: Określenie pliku inwentarzau
: Określenie użytkownika SSHk
: Określenie hasła SSHm
: Określenie modułu Ansiblea
: Określenie argumentów modułuv
: Włączenie trybu szczegółowego
10. Zarządzanie usługami:
- name: Zarządzanie usługą nginx
hosts: web_servers
become: yes
tasks:
- name: Start nginx
service:
name: nginx
state: started
11. Zmiana uprawnień pliku:
- name: Ustawienie uprawnień pliku
hosts: all
tasks:
- name: Zmiana uprawnień /tmp/example.txt
file:
path: /tmp/example.txt
mode: '0644'
12. Tworzenie playbooków:
---
- hosts: all
tasks:
- name: Ping hosts
ping:
- hosts: webservers
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
- name: Start Nginx
service:
name: nginx
state: started
Najpopularniejsze parametry konfiguracji Ansible:
1. hosts
:
- Określa listę hostów, do których Ansible ma się połączyć.
- Może zawierać adresy IP, nazwy hostów lub FQDN.
- Możesz również definiować grupy hostów dla ułatwienia zarządzania.
2. become
:
- Określa, czy Ansible ma użyć sudo lub su do uzyskania uprawnień roota na hoście docelowym.
- Zalecane dla większości zadań, aby zapewnić dostęp do niezbędnych uprawnień.
3. become_user
:
- Określa użytkownika, na którego Ansible ma się przełączyć po uzyskaniu uprawnień roota.
- Domyślnie jest to
root
, ale możesz zmienić to na innego użytkownika z odpowiednimi uprawnieniami.
4. become_method
:
- Określa metodę używaną do uzyskania uprawnień roota, np.
sudo
lubsu
. - Domyślnie jest to
sudo
, ale możesz to zmienić, jeśli na hoście docelowym jest używana inna metoda.
5. ansible_ssh_user
:
- Określa użytkownika SSH, którego Ansible ma użyć do połączenia z hostami.
- Domyślnie jest to użytkownik, z którego uruchamiasz Ansible, ale możesz to zmienić, jeśli jest to konieczne.
6. ansible_ssh_port
:
- Określa port SSH, na którym Ansible ma się połączyć z hostami.
- Domyślnie jest to port 22, ale możesz to zmienić, jeśli na hoście docelowym jest używany inny port.
7. ansible_ssh_private_key_file
:
- Określa ścieżkę do pliku klucza prywatnego SSH, którego Ansible ma użyć do uwierzytelnienia na hostach.
- Jest to wymagane, jeśli używasz uwierzytelniania opartego na kluczu SSH.
8. inventory_file
:
- Określa ścieżkę do pliku inwentarza Ansible, który zawiera listę hostów i definicje grup.
- Domyślnie jest to
hosts
w bieżącym katalogu, ale możesz to zmienić.
9. module_defaults
:
- Definiuje domyślne wartości dla parametrów modułów Ansible.
- Używane do uproszczenia konfiguracji i uniknięcia powtarzania.
10. tasks
:
- Lista zadań, które Ansible ma wykonać na hoście docelowym.
- Zadania mogą obejmować instalowanie pakietów, tworzenie plików, uruchamianie poleceń i wiele innych.
11. tasks
:
- Definiuje listę zadań, które Ansible ma wykonać na hostach docelowych.
- Zadania mogą obejmować instalowanie pakietów, tworzenie plików, uruchamianie poleceń i wiele innych.
12. handlers
:
- Definiuje listę zadań, które Ansible ma wykonać po zakończeniu wszystkich zadań w sekcji
tasks
. - Typowe zastosowania obejmują wysyłanie powiadomień e-mail lub uruchamianie skryptów czyszczenia.
13. roles
:
- Definiuje zestawy zadań, które można ponownie wykorzystać w różnych playbookach.
- Umożliwiają modułowość i ponowne wykorzystanie kodu w konfiguracji Ansible.
14. variables
:
- Definiuje zmienne, które mogą być używane w zadaniach i playbookach.
- Umożliwiają dynamiczne generowanie konfiguracji i przekazywanie parametrów do zadań.
15. tags
:
- Oznaczają zadania i playbooki, co pozwala na ich filtrowanie i selektywne uruchamianie.
- Używane do organizowania konfiguracji Ansible i ułatwiania zarządzania nią.
16. verbosity
:
- Określa poziom szczegółowości informacji wyświetlanych podczas uruchamiania Ansible.
- Dostępne opcje to
0
(brak informacji),1
(podstawowe informacje),2
(szczegółowe informacje) i3
(pełne debugowanie).
Dodatkowe parametry konfiguracji:
inventory
: Określa ścieżkę do pliku inwentarza Ansible.forks
: Określa liczbę równoległych połączeń, które Ansible ma nawiązywać z hostami docelowymi.connection
: Określa protokół używany do łączenia się z hostami docelowymi (np. ssh, local).timeout
: Określa czas oczekiwania na połączenie z hostami docelowymi.
Pamiętaj, że to tylko najpopularniejsze parametry konfiguracji Ansible. Istnieje wiele innych dostępnych parametrów, które możesz wykorzystać do dostosowania konfiguracji do swoich potrzeb. Dokumentacja Ansible zawiera szczegółowe informacje o wszystkich dostępnych parametrach konfiguracji.
Parametry state
w konfiguracji Ansible:
Parametr state
w konfiguracji Ansible określa żądany stan obiektu, którym zarządza moduł. Dostępne wartości to:
1. present
:
- Zapewnia, że obiekt (np. plik, pakiet, usługa) istnieje na hoście docelowym.
- Używane do instalowania pakietów, tworzenia plików, uruchamiania usług itp.
2. absent
:
- Gwarantuje, że obiekt nie istnieje na hoście docelowym.
- Używane do usuwania pakietów, usuwania plików, zatrzymywania usług itp.
3. started
:
- Upewnij się, że usługa jest uruchomiona i działa na hoście docelowym.
- Używane do uruchamiania usług.
4. stopped
:
- Gwarantuje, że usługa jest zatrzymana na hoście docelowym.
- Używane do zatrzymywania usług.
5. enabled
:
- Zapewnia, że usługa jest włączona i uruchomi się automatycznie po starcie systemu na hoście docelowym.
- Używane do włączania automatycznego uruchamiania usług.
6. disabled
:
- Gwarantuje, że usługa jest wyłączona i nie uruchomi się automatycznie po starcie systemu na hoście docelowym.
- Używane do wyłączania automatycznego uruchamiania usług.
Dodatkowe parametry:
force
: Wymuś zmianę stanu, nawet jeśli może to spowodować konflikty.check_mode
: Sprawdź, czy zmiana stanu jest konieczna, ale nie wprowadzaj jej.
Pamiętaj, że dostępne parametry state
mogą się różnić w zależności od używanego modułu. Dokumentacja modułów Ansible zawiera szczegółowe informacje o dostępnych parametrach state
.
Przydatne linki:
- Dokumentacja Ansible: https://docs.ansible.com/ansible/latest/
- Ansible Galaxy: https://galaxy.ansible.com/
- Przyklady playbooków: https://github.com/ansible/ansible-examples
Uwaga: Powyższy cheatsheet jest tylko krótkim wprowadzeniem do Ansible. Więcej informacji można znaleźć w dokumentacji Ansible.