Manu

Ansible Cheat Sheet: Niezbędne Komendy dla Automatyzacji [Gotowa Ściągawka]

Ansible Cheat Sheet - Szybka Ściągawka
Ansible Cheat Sheet: CONDITIONALS
Opis Komenda / Przykład
Warunkowe uruchamianie zadania:
Wykonaj zadanie tylko, jeśli zmienna `y_file` jest różna od 'n'.
my file to n
Ansible Cheat Sheet: VARIABLES
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: >> https://10.123,1.0:8089, https://10.123.1.1:8089, etc etc

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: // super duper web server

Ansible Cheat Sheet: MODULES
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
Ansible Cheat Sheet: SERVER DIAGNOSTICS
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
Ansible Cheat Sheet: PACKAGES AND INSTALLATION
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:
ssh-keygen

Kopiuj klucz (podaj hasło do węzła):
ssh-copy-id <nazwa_węzła>

Konfiguracja pliku `Hosts` (`/etc/ansible/hosts`):

[production]
prod1.prod.local
prod2.prod.local
[dev]
devweb1.dev.local
devweb2.dev.local
Ansible Cheat Sheet: REMOTE CMD (Ad Hoc)
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
Ansible Cheat Sheet: GALAXY
Kategoria / Opis Komenda / Przykład
Instalacja Roli (Modułu) ansible-galaxy install geerlingguy.nginx
Ansible Cheat Sheet: PLAYBOOKS
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ąć: (--skip-tags tag1, tag2)

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.)

Ansible Cheat Sheet: USER AND GROUP MGMT
Kategoria / Opis Komenda / Przykład
Zmień hasło użytkownika Joe
(użytkownik Fred uruchamia komendę jako sudo na maszynie docelowej)

1. Zainstaluj `passlib`:
pip install 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
Ansible Cheat Sheet: FILES & DIRS
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
Ansible Cheat Sheet: FACTER
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:
ansible -i hosts mrx -m setup -a "filter=ansible_local"

Brak komentarzy:

Prześlij komentarz