Wprowadzenie

Playbooki Ansible s膮 pisane w YAML, prostym i czytelnym formacie. Nie musisz zna膰 programowania ani kodowania, aby zacz膮膰 korzysta膰 z Ansible. Istnieje jednak kilka zasad strukturalnych, kt贸re musisz przestrzega膰, i wyja艣ni臋 je krok po kroku.


1. Podstawy YAML i Wci臋cia

Ansible korzysta ze sk艂adni YAML do pisania playbook贸w, a YAML jest mocno zale偶ny od wci臋膰. W YAML wci臋cia organizuj膮 hierarchi臋 twoich zada艅 lub zmiennych, co oznacza, 偶e nie mo偶esz u偶ywa膰 tabulator贸w鈥攖ylko spacje. Najcz臋艣ciej stosowan膮 zasad膮 jest 2 spacje na poziom (czasami 4 spacje, ale kluczowa jest konsekwencja).

Przyk艂ad Wci臋cia

1
2
3
4
tasks:              # To jest klucz na najwy偶szym poziomie
  - name: Install package  # To jest wci臋te o 2 spacje
    apt:                   # Kolejne 2 spacje dla hierarchii
      name: nginx

Tutaj:

  • tasks: jest na najwy偶szym poziomie.
  • Ka偶de zadanie (zdefiniowane przez my艣lnik, -) jest wci臋te o 2 spacje pod tasks.
  • Nazwa modu艂u (np. apt:) jest wci臋ta o kolejne 2 spacje pod nazw膮 zadania.

Cz臋sty B艂膮d

Je艣li pomieszasz tabulatory i spacje lub pomylisz wci臋cia, Ansible zg艂osi b艂膮d. YAML oczekuje jednolitych wci臋膰, aby zrozumie膰 struktur臋.


2. Kluczowe Znaki w Playbookach Ansible

2.1 My艣lniki (-)

  • My艣lniki s艂u偶膮 do tworzenia list w YAML. Na przyk艂ad, w Ansible lista zada艅 jest definiowana za pomoc膮 my艣lnik贸w.
  • Ka偶de zadanie lub element listy jest poprzedzone my艣lnikiem.

Przyk艂ad

1
2
3
4
5
6
7
8
tasks:
  - name: Install nginx
    apt:
      name: nginx
  - name: Start nginx
    service:
      name: nginx
      state: started

W tym przyk艂adzie lista zawiera dwa zadania, oba zaczynaj膮 si臋 od my艣lnika.

2.2 Dwukropki (:)

  • Dwukropki s艂u偶膮 do oddzielania kluczy od warto艣ci.
  • Klucze w YAML s膮 jak nazwy zmiennych lub p贸l.
  • Warto艣ci to dane lub informacje zwi膮zane z kluczem.

Przyk艂ad

1
2
name: nginx
state: started

Tutaj:

  • name to klucz, a nginx to jego warto艣膰.
  • state to klucz, a started to jego warto艣膰.

2.3 Zmienne i Nawiasy Klamrowe ({{ }})

Playbooki Ansible obs艂uguj膮 zmienne, aby unikn膮膰 twardego kodowania warto艣ci. U偶ywasz nawias贸w klamrowych ({{ }}), aby odwo艂ywa膰 si臋 do zmiennych w playbooku.

Przyk艂ad Zmiennych

1
2
3
4
5
6
7
vars:
  package_name: nginx

tasks:
  - name: Install a package
    apt:
      name: "{{ package_name }}"

W tym przypadku:

  • Zmienna package_name jest zdefiniowana pod vars:.
  • W zadaniu odwo艂ujemy si臋 do tej zmiennej za pomoc膮 {{ package_name }}. Wi臋c kiedy playbook zostanie uruchomiony, zainstaluje nginx.

3. Zmienne i P臋tle

3.1 Zmienne Szczeg贸艂owo

Zmienne pozwalaj膮 na wielokrotne u偶ywanie warto艣ci i utrzymanie dynamiczno艣ci playbook贸w. Na przyk艂ad, je艣li chcesz zainstalowa膰 wiele pakiet贸w, mo偶esz zdefiniowa膰 je jako zmienne, zamiast powtarza膰 warto艣ci wiele razy.

Przyk艂ad

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
vars:
  packages:
    - nginx
    - curl
    - git

tasks:
  - name: Install multiple packages
    apt:
      name: "{{ item }}"
    loop: "{{ packages }}"

Tutaj:

  • vars: zawiera list臋 packages (nginx, curl i git).
  • Zadanie u偶ywa p臋tli z {{ item }}, aby instalowa膰 ka偶dy pakiet z listy jeden po drugim.

3.2 P臋tle Szczeg贸艂owo

P臋tle w Ansible pozwalaj膮 powtarza膰 to samo zadanie wiele razy z r贸偶nymi wej艣ciami. W powy偶szym przyk艂adzie loop: "{{ packages }}" m贸wi Ansible, aby uruchomi艂 zadanie dla ka偶dego pakietu z listy.


4. Przyk艂ad Prostego Playbooka

Zbudujmy kompletny przyk艂ad podstawowego playbooka, kt贸ry instaluje pakiety i upewnia si臋, 偶e us艂uga dzia艂a.

Przyk艂ad

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
---
- hosts: all          # Definiuje, 偶e ten playbook dzia艂a na wszystkich hostach
  become: yes         # Uruchamia zadania z uprawnieniami root (sudo)

  vars:
    package_name: nginx

  tasks:
    - name: Install nginx
      apt:
        name: "{{ package_name }}"
        state: present  # Zapewnia, 偶e nginx jest zainstalowany

    - name: Ensure nginx is running
      service:
        name: nginx
        state: started  # Uruchamia us艂ug臋 nginx, je艣li nie dzia艂a

Wyja艣nienie

  • hosts: all okre艣la, 偶e ten playbook zostanie uruchomiony na wszystkich docelowych hostach.
  • become: yes zapewnia, 偶e playbook jest uruchamiany z podwy偶szonymi uprawnieniami (np. za pomoc膮 sudo).
  • Sekcja vars: definiuje zmienn膮 package_name ustawion膮 na nginx.
  • Pierwsze zadanie instaluje nginx.
  • Drugie zadanie upewnia si臋, 偶e nginx dzia艂a.

5. Cz臋ste B艂臋dy i Debugowanie

Na pocz膮tku pracy z YAML i Ansible, jest kilka powszechnych b艂臋d贸w, na kt贸re warto zwr贸ci膰 uwag臋:

B艂臋dy Wci臋cia

YAML wymaga poprawnych wci臋膰. Proste przesuni臋cie mo偶e spowodowa膰 b艂臋dy.

Przyk艂ad Z艂ego Wci臋cia

1
2
3
4
tasks:
   - name: Install nginx  # 3 spacje zamiast 2 (powinno by膰 jednolite)
      apt:
        name: nginx

Brakuj膮ce Dwukropki

Pomini臋cie dwukropk贸w mi臋dzy kluczami a warto艣ciami mo偶e zepsu膰 playbook.

Przyk艂ad

1
name nginx   # To jest niepoprawne. Powinno by膰 `name: nginx`

Niezdefiniowane Zmienne

Je艣li u偶yjesz zmiennej bez jej zdefiniowania, pojawi si臋 b艂膮d. Zawsze sprawdzaj swoj膮 sekcj臋 vars: pod k膮tem brakuj膮cych zmiennych.


Podsumowanie

W tym poradniku om贸wili艣my podstawow膮 struktur臋 playbooka Ansible, w tym wci臋cia, zmienne, p臋tle i powszechne sk艂adnie, takie jak my艣lniki i dwukropki. Przestrzegaj膮c tych zasad, b臋dziesz w stanie pisa膰 czytelne i funkcjonalne playbooki.

Kluczowe Punkty:

  • Zawsze utrzymuj jednolite wci臋cia.
  • U偶ywaj zmiennych, aby utrzyma膰 elastyczno艣膰 swoich playbook贸w.
  • P臋tle pozwalaj膮 stosowa膰 zadania do wielu element贸w.
  • Zwracaj uwag臋 na powszechne b艂臋dy, takie jak b艂臋dy wci臋cia i brakuj膮ce dwukropki.

艢mia艂o eksperymentuj i tw贸rz swoje w艂asne playbooki! Ansible to pot臋偶ne narz臋dzie, gdy tylko poczujesz si臋 komfortowo z jego struktur膮.

Film instrukta偶owy