| Opis | Komenda / Przykład |
|---|---|
| Warunkowe uruchamianie zadania: Wykonaj zadanie tylko, jeśli zmienna `y_file` jest różna od 'n'. |
my file to n |
| Kategoria / Opis | Komenda / Przykład |
|---|---|
| Globalne zmienne dla wszystkich Ról: Struktura katalogów i umiejscowienie `config.yaml`. |
splunk/ setup_splunk_playbook.yaml roles/base /tasks/main.yaml /tasks/install.yaml search_head /tasks/configure.yaml indexer /tasks/configure.yaml some_other_role /tasks/some_task.yaml hosts config.yaml |
| Definiowanie zmiennych w `config.yaml`: Umieść zmienne w pliku `config.yaml`. |
Przykład `splunk/config.yaml`: --- # global Splunk variables splunk_version: 7.0.0 |
| Włączanie Ról w playbooku: Jak załączyć zdefiniowane Role w Twoim playbooku. |
Przykład `setup_splunk_playbook.yaml`: - hosts: "search_heads"
become_user: root
become: true
gather_facts: true
roles:
- base
- search_head
|
| Włączanie zmiennych globalnych w Tasku: Jak załączyć zmienne z `config.yaml` w zadaniu Roli. |
Przykład `roles/base/tasks/main.yaml`: --- # install Splunk Base
- name: include vars
include_vars: "{{ playbook_dir }}/config.yaml"
- include: install.yaml
|
| Dostęp do zmiennych w Taskach: Zmienne są dostępne po ich załączeniu. |
Przykład `roles/base/tasks/install.yaml`: - name: echo version
debug: splunk version is {{ splunk_version }}
|
| Pętla po zmiennej typu Dict: Iteracja po elementach słownika w playbooku. |
Przykład struktury: cluster:
members:
splunk01: 10.123.1.0
splunk02: 10.123.1.1
splunk03: 10.123.1.2
W playbooku: - debug: msg="{{ cluster.members.values() | map('regex_replace', '(.*)', 'https://\\1:8089') | join(',') }}"
Output: |
| Używanie zmiennych z pliku Inventory: Dostęp do zmiennych z pliku `hosts`. |
Przykład `cat hosts`: [apache] nycweb01 W playbooku: debug: msg="IP: {{ hostvars[groups['apache'][0]]['ansible_default_ipv4']['address'] }}"
debug: msg="Hostname: {{ hostvars[groups['apache'][0]]['inventory_hostname'] }}"
|
| Rejestrowanie Listy/Tablicy do późniejszego użycia: Zapisywanie wyników komend do zmiennej typu lista. |
Przykład: - name: parse all hostnames in group WebServer and get their IPs, place them in a list
command: echo {{ hostvars[item]['ansible_ssh_host'] }}"
with_items: "{{ groups['webserver'] }}"
register: ip_list
- name: show the IPs
debug: msg="{{ ip_list.results | map(attribute='item') | list }}"
|
| Eksportowanie zmiennej środowiskowej: Ustawianie zmiennych środowiskowych dla modułów. |
Przykład: - name: yum install
yum: name=somepkg state=present
environment:
SOME_VAR: abc
|
| Zmienne w pliku Inventory Hosts: Definiowanie i używanie zmiennych specyficznych dla grup/hostów. |
Przykład `cat hosts`: [web] nycweb01.company.local [web:vars] role="super duper web server" Jak pobrać zmienną `role` w playbooku: - hosts: web
gather_facts: true
tasks:
- name: print Role var
debug: msg={{ role }}
Output: |
| Moduł | Przykład użycia |
|---|---|
| service | service: name=httpd state=[started, stopped, restarted, reloaded] enabled=[yes,no] |
| user | user: name=joe state=[present,absent] uid=1001 groups=wheel shell=/bin/bash |
| group | group: name=splunk gid=6600 state=[present,absent] system=[yes/no] |
| yum | yum: name=apache state=[present, latest, absent, removed] |
| file | file: path=/etc/file state=[file, link, directory, hard, touch, absent] group=x owner=x recurse=yes |
| Kategoria | Komenda / Przykład |
|---|---|
| Test Połączenia | ansible -i hosts all -m ping -u root |
| Diagnostyka Zarządzaj węzłami poprzez plik `/etc/ansible/hosts`. |
manage nodes via "/etc/ansible/hosts" file |
| Debugowanie (output playbooka) |
Debuguj zmienną z różnym poziomem szczegółowości: - debug: var=result verbosity=2 |
| Kategoria / Opis | Komenda / Przykład |
|---|---|
| Instalacja wielu pakietów |
Przykład: yum: name="{{ item }}" state=present
with_items:
- http
- htop
- myapp
|
| Konfiguracja SSH Skopiuj klucz publiczny Ansible Mastera do węzła zarządzanego. |
Generuj klucz publiczny: Kopiuj klucz (podaj hasło do węzła): Konfiguracja pliku `Hosts` (`/etc/ansible/hosts`): [production] prod1.prod.local prod2.prod.local [dev] devweb1.dev.local devweb2.dev.local |
| Komenda / Opis | Przykład |
|---|---|
| Ping konkretnego węzła | ansible -i hosts nycweb01.prod.local -m ping |
| Ping z wildcardem | ansible -i hosts "nycweb*" -m ping |
| Ping wszystkich węzłów z użytkownikiem SSH 'root' | ansible -i hosts all -m ping -u root |
| Uruchom komendę | ansible -i hosts dev -a 'uname -a' |
| Sprawdź pakiety Yum | ansible -i hosts dev -m yum |
| Sprawdź, czy Docker rpm jest zainstalowany | ansible -i hosts web01.nyc.local -m shell -a "rpm -qa | grep docker" |
| Pobierz fakty o maszynie | ansible -i hosts web01.nyc.local -m setup -a 'filter=facter_*' |
| Uruchom komendę z sudo | ansible -i hosts target-host -m shell -a "cat /etc/sudoers" --sudo |
| Ogranicz komendę do konkretnej grupy lub serwera | Dodaj --limit *.nyc |
| Kategoria / Opis | Komenda / Przykład |
|---|---|
| Instalacja Roli (Modułu) | ansible-galaxy install geerlingguy.nginx |
| Kategoria / Opis | Komenda / Przykład |
|---|---|
| Uruchom playbook z sudo | ansible-playbook -v config-users.yaml --sudo --sudo-user=joe --ask-sudo-pass |
| Użyj innego pliku Hosts | ansible-playbook -v -i /path/to/hosts |
| Uruchom playbook, ale tylko konkretne zadanie (tag) |
Uruchom tylko tag `rsync`: ansible-playbook playbooks/restore_bitbucket.yaml -i hosts --tags rsync
Aby pominąć: |
| Przechowaj wynik komendy jako zmienną |
Przykład: shell: cat /etc/network | grep eth0
register: address
debug: msg="address is {{ address.stdout }}"
|
| Skonfiguruj wiele elementów jednym zadaniem |
Przykład dodawania wielu użytkowników: - name: more complex items to add several users
user:
name: "{{ item.name }}"
uid: "{{ item.uid }}"
groups: "{{ item.groups }}"
state: present
with_items:
- { name: testuser1, uid: 1002, groups: "wheel, staff" }
- { name: testuser2, uid: 1003, groups: staff }
|
| Pobierz ścieżkę do bieżącego Playbooka (pwd) | {{ playbook_dir }} |
| Ustaw playbook jako verbose domyślnie |
Dodaj do playbooka: - hosts: blah strategy: debug |
| Uruchom playbook z verbose traceback | ansible-playbook -i hosts myPlaybook.yaml -vvv |
| Uruchom playbook na wielu grupach Hostów | - hosts: "search_head, deployer" |
| Uruchom playbook lokalnie na hoście |
Przykład: hosts: 127.0.0.1 connection: local |
| Pytaj o hasło podczas uruchamiania Playbooka |
Playbook do zmiany hasła użytkownika: # Playbook to change user password
- name: pw change
hosts: target
become: true
become_user: root
vars_prompt:
- name: username
prompt: "enter username for which to change the pw"
- name: password
prompt: "enter new password"
private: yes
tasks:
- name: change pw
user: "name={{ username }} password={{ password }} update_password=always"
|
| Uruchom playbook z "dry run" / NOOP / symulacja | ansible-playbook foo.yml --check |
| Uruchom zadanie na innym hoście (`delegate_to`) |
Przykład: - name: run something on some other server debug: msg="running stuff" delegate_to: someserver |
| Deleguj zadanie do grupy hostów |
Przykład restartu serwerów web: - name: restart web servers
service: name=memcached state=restarted
delegate_to: "{{ item }}"
with_items: "{{ groups['webservers'] }}"
|
| Pobierz IP lub fakt zdalnego hosta |
Przykład pobierania IP: - name: get IP
debug: msg="{{ hostvars['nycweb01']['ansible_default_ipv4']['address'] }}"
Lub: debug: msg="{{ hostvars[item]['ansible_ssh_host'] }}"
with_items: "{{ groups['webservers'] }}"
|
| Synchronizuj plik (kopiuj z hosta Ansible na target) |
Przykład: - synchronize:
src: "{{ playbook_dir }}/files/vscode.repo"
dest: /etc/yum.repos.d/
|
| Synchronizuj z serwera A na serwer B z wildcardem |
Przykład kopiowania aplikacji Splunk: - name: copy Splunk Apps
synchronize:
src: "/opt/splunk/etc/apps/{{ item }}" (server A)
dest: "/opt/splunk/etc/shcluster/apps/" (server B)
with_items:
- item1
- item2
delegate_to: server A
|
| Wget pliku do lokalizacji |
Przykład: - get_url:
url: 'https://dl.google.com/go/go1.10.linux-amd64.tar.gz'
dest: '/tmp'
force: no # nie pobieraj, jeśli plik już istnieje
(Uwaga: `untar tar.gz` zostało usunięte, ponieważ to nie jest komenda Ansible, tylko opis operacji.) |
| Kategoria / Opis | Komenda / Przykład |
|---|---|
| Zmień hasło użytkownika Joe (użytkownik Fred uruchamia komendę jako sudo na maszynie docelowej) |
1. Zainstaluj `passlib`: 2. Zaktualizuj hasło, używając hasha: ansible targethost -s -m user -a "name=joe update_password=always password={{ 'MyNewPassword' | password_hash('sha512') }}" -u fred --ask-sudo-pass
|
| Skopiuj publiczny klucz SSH do pliku `authorized_keys` na zdalnym hoście |
Przykład: - hosts: targetHost
tasks:
- name: update nessus SSH keys
become_user: root
become_method: sudo
become: true
authorized_key:
user: nessus
key: "{{ lookup('pipe','cat ../files/ssh_keys/nessus.pub') }}"
state: present
|
| Kategoria / Opis | Komenda / Przykład |
|---|---|
| Usuń wszystkie pliki i ukryte pliki w katalogu |
Przykład: vars:
app_home: /var/opt/application
tasks:
- name: clear home dir
- shell: "ls -la {{ app_home }}/"
register: files_to_delete
- file: path="{{ app_home }}/{{ item }}" state=absent
with_items: "{{ files_to_delete.stdout_lines }}"
|
| Pobierz pliki z węzła | ansible node1 -s -m fetch -a "src=/etc/hosts dest=/tmp" |
| Skopiuj plik do węzła | ansible node1 -m copy -a "src=/etc/hosts dest=/tmp/hosts" |
| Usuń wszystkie pliki pasujące do wildcarda |
Przykład: file: path={{ item }} state=absent
with_fileglob: /tmp/*.rpm
|
| Kategoria / Opis | Komenda / Przykład |
|---|---|
| Pobierz wszystkie fakty z węzła (ad hoc) | ansible -i hosts targetName -m setup -a "filter='facter_*'" |
| Użyj faktu w playbooku | include fact as {{ ansible_factname }} |
| Dodaj fakt do pliku Hosts |
Przykład: [group] host1 admin_user=jane host2 admin_user=jack host3 [group:vars] admin_user=john |
| Pobierz domyślny adres IPV4 | ansible_default_ipv4.address |
| Lokalne fakty Umieść plik `.fact` w `/etc/ansible/facts.d` na węźle docelowym. |
Przykład `vim /etc/ansible/facts.d/fruits.fact`: [fruits] sweet=banana, apple, grapes bitter=grapefruit Pobierz lokalne fakty: |
Brak komentarzy:
Prześlij komentarz