Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Ansible 
Automatyzacja zadań IT 
Kamil Grabowski 
kamil.grabowski@gmail.com 
WRUG 10.12.2014 
@y3ti 
PKO Bank Polski 
Reba...
Potrzeba automatyzacji 
WRUG 10.12.2014
Potrzeba automatyzacji 
• Duża infrastruktura i problem skali 
WRUG 10.12.2014
Potrzeba automatyzacji 
• Duża infrastruktura i problem skali 
• Skomplikowany proces instalacji i konfiguracji 
środowisk...
Potrzeba automatyzacji 
• Duża infrastruktura i problem skali 
• Skomplikowany proces instalacji i konfiguracji 
środowisk...
Potrzeba automatyzacji 
• Duża infrastruktura i problem skali 
• Skomplikowany proces instalacji i konfiguracji 
środowisk...
Narzędzia do automatyzacji 
WRUG 10.12.2014
Narzędzia do automatyzacji 
WRUG 10.12.2014
Narzędzia do automatyzacji 
WRUG 10.12.2014
Narzędzia do automatyzacji 
WRUG 10.12.2014
Narzędzia do automatyzacji 
WRUG 10.12.2014
Narzędzia do automatyzacji 
WRUG 10.12.2014
Dlaczego Ansible? 
WRUG 10.12.2014
Dlaczego Ansible? 
• Dokumentacja 
WRUG 10.12.2014
Dlaczego Ansible? 
• Dokumentacja 
• Agentless 
WRUG 10.12.2014
Dlaczego Ansible? 
• Dokumentacja 
• Agentless 
• Minimum zależności: 
• management: python 2.6 
• node: python 2.4 
WRUG ...
Dlaczego Ansible? 
• Dokumentacja 
• Agentless 
• Minimum zależności: 
• management: python 2.6 
• node: python 2.4 
• Fil...
Dlaczego Ansible? 
• Dokumentacja 
• Agentless 
• Minimum zależności: 
• management: python 2.6 
• node: python 2.4 
• Fil...
Dlaczego Ansible? 
• Dokumentacja 
• Agentless 
• Minimum zależności: 
• management: python 2.6 
• node: python 2.4 
• Fil...
Warianty instalacji 
WRUG 10.12.2014
Warianty instalacji 
Instalacja poprzez apt-get 
WRUG 10.12.2014
Warianty instalacji 
Instalacja poprzez apt-get 
# apt-get install ansible 
WRUG 10.12.2014
Warianty instalacji 
Instalacja poprzez apt-get 
# apt-get install ansible 
Instalacja poprzez managera paczek pip 
WRUG 1...
Warianty instalacji 
Instalacja poprzez apt-get 
# apt-get install ansible 
Instalacja poprzez managera paczek pip 
# apt-...
Warianty instalacji 
Instalacja poprzez apt-get 
# apt-get install ansible 
Instalacja poprzez managera paczek pip 
# apt-...
Warianty instalacji 
Instalacja poprzez apt-get 
# apt-get install ansible 
Instalacja poprzez managera paczek pip 
# apt-...
Pierwszy krok - inventory 
$ cat hosts.ini 
[application] 
app01 ansible_ssh_host=10.0.0.11 
app02 ansible_ssh_host=10.0.0...
Przykład: test połączenia 
$ ansible -i hosts.ini -m ping all 
app02 | success >> { 
"changed": false, 
"ping": "pong" 
} ...
Przykład: test połączenia 
$ ansible -i hosts.ini -m ping all 
app02 | success >> { 
"changed": false, 
"ping": "pong" 
} ...
Przykład: test połączenia 
1 2 
$ ansible -i hosts.ini -m ping all 
app02 | success >> { 
"changed": false, 
"ping": "pong...
Przykład: test połączenia 
1 2 3 
$ ansible -i hosts.ini -m ping all 
app02 | success >> { 
"changed": false, 
"ping": "po...
Mnogość dostępnych opcji 
WRUG 10.12.2014
Mnogość dostępnych opcji 
Tylko jeden host lub grupa hostów 
WRUG 10.12.2014
Mnogość dostępnych opcji 
Tylko jeden host lub grupa hostów 
$ ansible -i hosts.ini -m ping app01 
$ ansible -i hosts.ini ...
Mnogość dostępnych opcji 
Tylko jeden host lub grupa hostów 
$ ansible -i hosts.ini -m ping app01 
$ ansible -i hosts.ini ...
Mnogość dostępnych opcji 
Tylko jeden host lub grupa hostów 
$ ansible -i hosts.ini -m ping app01 
$ ansible -i hosts.ini ...
Mnogość dostępnych opcji 
Tylko jeden host lub grupa hostów 
$ ansible -i hosts.ini -m ping app01 
$ ansible -i hosts.ini ...
Mnogość dostępnych opcji 
Tylko jeden host lub grupa hostów 
$ ansible -i hosts.ini -m ping app01 
$ ansible -i hosts.ini ...
Przykład: instalacja vim 
$ ansible -i hosts.ini -m apt -a "name=vim state=present" all -s 
app02 | success >> { 
"changed...
Przykład: instalacja vim 
1 
$ ansible -i hosts.ini -m apt -a "name=vim state=present" all -s 
app02 | success >> { 
"chan...
Przykład: instalacja vim 
1 2 
$ ansible -i hosts.ini -m apt -a "name=vim state=present" all -s 
app02 | success >> { 
"ch...
Przykład: instalacja vim 
1 2 3 
$ ansible -i hosts.ini -m apt -a "name=vim state=present" all -s 
app02 | success >> { 
"...
Przykład: instalacja vim 
1 2 3 
$ ansible -i hosts.ini -m apt -a "name=vim state=present" all -s 
app02 | success >> { 
"...
Przykładowe moduły 
WRUG 10.12.2014
Przykładowe moduły 
• commands: command, raw, script, shell 
WRUG 10.12.2014
Przykładowe moduły 
• commands: command, raw, script, shell 
• cloud: azure, digital_ocean, docker, ec2, rax 
WRUG 10.12.2...
Przykładowe moduły 
• commands: command, raw, script, shell 
• cloud: azure, digital_ocean, docker, ec2, rax 
• database: ...
Przykładowe moduły 
• commands: command, raw, script, shell 
• cloud: azure, digital_ocean, docker, ec2, rax 
• database: ...
Przykładowe moduły 
• commands: command, raw, script, shell 
• cloud: azure, digital_ocean, docker, ec2, rax 
• database: ...
Przykładowe moduły 
• commands: command, raw, script, shell 
• cloud: azure, digital_ocean, docker, ec2, rax 
• database: ...
Przykładowe moduły 
• commands: command, raw, script, shell 
• cloud: azure, digital_ocean, docker, ec2, rax 
• database: ...
Przykładowe moduły 
• commands: command, raw, script, shell 
• cloud: azure, digital_ocean, docker, ec2, rax 
• database: ...
Przykładowe moduły 
• commands: command, raw, script, shell 
• cloud: azure, digital_ocean, docker, ec2, rax 
• database: ...
Playbooks 
WRUG 10.12.2014
Playbooks 
• Struktura opisująca konfigurację oraz pożądany stan hostów, 
którymi zarządzamy 
WRUG 10.12.2014
Playbooks 
• Struktura opisująca konfigurację oraz pożądany stan hostów, 
którymi zarządzamy 
• Odpowiednik cookbook z che...
Playbooks 
• Struktura opisująca konfigurację oraz pożądany stan hostów, 
którymi zarządzamy 
• Odpowiednik cookbook z che...
Playbooks 
• Struktura opisująca konfigurację oraz pożądany stan hostów, 
którymi zarządzamy 
• Odpowiednik cookbook z che...
Playbooks 
• Struktura opisująca konfigurację oraz pożądany stan hostów, 
którymi zarządzamy 
• Odpowiednik cookbook z che...
Playbooks 
• Struktura opisująca konfigurację oraz pożądany stan hostów, 
którymi zarządzamy 
• Odpowiednik cookbook z che...
Przykład: prosty playbook 
$ cat application.yml 
--- 
- name: Deploy application servers 
hosts: application 
sudo: yes 
...
Przykład: prosty playbook 
$ ansible-playbook -i hosts.ini application.yml 
PLAY [Install some packages] *****************...
Przykład: prosty playbook 
$ ansible-playbook -i hosts.ini application.yml 
PLAY [Install some packages] *****************...
Przykład: prosty playbook 
1 2 
$ ansible-playbook -i hosts.ini application.yml 
PLAY [Install some packages] ************...
Przykład: prosty playbook 
1 2 
$ ansible-playbook -i hosts.ini application.yml 
PLAY [Install some packages] ************...
Przykład: prosty playbook 
1 2 
$ ansible-playbook -i hosts.ini application.yml 
PLAY [Install some packages] ************...
Przykład: prosty playbook 
1 2 
$ ansible-playbook -i hosts.ini application.yml 
PLAY [Install some packages] ************...
Playbook - directory layout 
production.ini - Nasze inventory dla środowiska produkcyjnego 
stage.ini oraz testowego (stag...
Playbook - directory layout 
production.ini 
stage.ini 
group_vars/ 
application 
database 
host_vars/ 
app01 
library/ 
m...
Przykład: playbook 
application.yml - wersja 2 
$ cat application.yml 
--- 
- name: Deploy application servers 
hosts: app...
O czym jeszcze warto 
wspomieć? 
WRUG 10.12.2014
O czym jeszcze warto 
wspomieć? 
• Variables, Loops, Conditionals, Jinja2 
WRUG 10.12.2014
O czym jeszcze warto 
wspomieć? 
• Variables, Loops, Conditionals, Jinja2 
• Tags 
WRUG 10.12.2014
O czym jeszcze warto 
wspomieć? 
• Variables, Loops, Conditionals, Jinja2 
• Tags 
• Facts Caching 
WRUG 10.12.2014
O czym jeszcze warto 
wspomieć? 
• Variables, Loops, Conditionals, Jinja2 
• Tags 
• Facts Caching 
• Ansible Vault 
WRUG ...
O czym jeszcze warto 
wspomieć? 
• Variables, Loops, Conditionals, Jinja2 
• Tags 
• Facts Caching 
• Ansible Vault 
• Asy...
O czym jeszcze warto 
wspomieć? 
• Variables, Loops, Conditionals, Jinja2 
• Tags 
• Facts Caching 
• Ansible Vault 
• Asy...
O czym jeszcze warto 
wspomieć? 
• Variables, Loops, Conditionals, Jinja2 
• Tags 
• Facts Caching 
• Ansible Vault 
• Asy...
O czym jeszcze warto 
wspomieć? 
• Variables, Loops, Conditionals, Jinja2 
• Tags 
• Facts Caching 
• Ansible Vault 
• Asy...
Czy macie jakieś 
pytania?
Dziękuję za uwagę 
Kamil Grabowski 
kamil.grabowski@gmail.com 
WRUG 10.12.2014 
@y3ti 
PKO Bank Polski 
Rebased 
Whitestre...
Upcoming SlideShare
Loading in …5
×

Ansible - Automatyzacja zadań IT

8,188 views

Published on

Wstęp do narzędzia ansible, dzięki któremu możemy automatyzować nasze zadania w IT.

Published in: Software

Ansible - Automatyzacja zadań IT

  1. 1. Ansible Automatyzacja zadań IT Kamil Grabowski kamil.grabowski@gmail.com WRUG 10.12.2014 @y3ti PKO Bank Polski Rebased Whitestream
  2. 2. Potrzeba automatyzacji WRUG 10.12.2014
  3. 3. Potrzeba automatyzacji • Duża infrastruktura i problem skali WRUG 10.12.2014
  4. 4. Potrzeba automatyzacji • Duża infrastruktura i problem skali • Skomplikowany proces instalacji i konfiguracji środowiska WRUG 10.12.2014
  5. 5. Potrzeba automatyzacji • Duża infrastruktura i problem skali • Skomplikowany proces instalacji i konfiguracji środowiska • Disaster recovery WRUG 10.12.2014
  6. 6. Potrzeba automatyzacji • Duża infrastruktura i problem skali • Skomplikowany proces instalacji i konfiguracji środowiska • Disaster recovery • Usługi w chmurze / OnDemand WRUG 10.12.2014
  7. 7. Narzędzia do automatyzacji WRUG 10.12.2014
  8. 8. Narzędzia do automatyzacji WRUG 10.12.2014
  9. 9. Narzędzia do automatyzacji WRUG 10.12.2014
  10. 10. Narzędzia do automatyzacji WRUG 10.12.2014
  11. 11. Narzędzia do automatyzacji WRUG 10.12.2014
  12. 12. Narzędzia do automatyzacji WRUG 10.12.2014
  13. 13. Dlaczego Ansible? WRUG 10.12.2014
  14. 14. Dlaczego Ansible? • Dokumentacja WRUG 10.12.2014
  15. 15. Dlaczego Ansible? • Dokumentacja • Agentless WRUG 10.12.2014
  16. 16. Dlaczego Ansible? • Dokumentacja • Agentless • Minimum zależności: • management: python 2.6 • node: python 2.4 WRUG 10.12.2014
  17. 17. Dlaczego Ansible? • Dokumentacja • Agentless • Minimum zależności: • management: python 2.6 • node: python 2.4 • Filozofia WRUG 10.12.2014
  18. 18. Dlaczego Ansible? • Dokumentacja • Agentless • Minimum zależności: • management: python 2.6 • node: python 2.4 • Filozofia • Bogate repozytorium modułów WRUG 10.12.2014
  19. 19. Dlaczego Ansible? • Dokumentacja • Agentless • Minimum zależności: • management: python 2.6 • node: python 2.4 • Filozofia • Bogate repozytorium modułów • Support WRUG 10.12.2014
  20. 20. Warianty instalacji WRUG 10.12.2014
  21. 21. Warianty instalacji Instalacja poprzez apt-get WRUG 10.12.2014
  22. 22. Warianty instalacji Instalacja poprzez apt-get # apt-get install ansible WRUG 10.12.2014
  23. 23. Warianty instalacji Instalacja poprzez apt-get # apt-get install ansible Instalacja poprzez managera paczek pip WRUG 10.12.2014
  24. 24. Warianty instalacji Instalacja poprzez apt-get # apt-get install ansible Instalacja poprzez managera paczek pip # apt-get install python-pip # pip install ansible WRUG 10.12.2014
  25. 25. Warianty instalacji Instalacja poprzez apt-get # apt-get install ansible Instalacja poprzez managera paczek pip # apt-get install python-pip # pip install ansible „Hacking directory tools” dostarczony z ansible WRUG 10.12.2014
  26. 26. Warianty instalacji Instalacja poprzez apt-get # apt-get install ansible Instalacja poprzez managera paczek pip # apt-get install python-pip # pip install ansible „Hacking directory tools” dostarczony z ansible # git clone https://github.com/ansible/ ansible.git # cd ansible; source hacking/env-set WRUG 10.12.2014
  27. 27. Pierwszy krok - inventory $ cat hosts.ini [application] app01 ansible_ssh_host=10.0.0.11 app02 ansible_ssh_host=10.0.0.12 [database] db01 ansible_ssh_host=10.0.0.21 [all:vars] ansible_ssh_user=ubuntu WRUG 10.12.2014
  28. 28. Przykład: test połączenia $ ansible -i hosts.ini -m ping all app02 | success >> { "changed": false, "ping": "pong" } app01 | success >> { "changed": false, "ping": "pong" } db01 | success >> { "changed": false, "ping": "pong" } WRUG 10.12.2014
  29. 29. Przykład: test połączenia $ ansible -i hosts.ini -m ping all app02 | success >> { "changed": false, "ping": "pong" } app01 | success >> { "changed": false, "ping": "pong" } db01 | success >> { "changed": false, "ping": "pong" } WRUG 10.12.2014 1
  30. 30. Przykład: test połączenia 1 2 $ ansible -i hosts.ini -m ping all app02 | success >> { "changed": false, "ping": "pong" } app01 | success >> { "changed": false, "ping": "pong" } db01 | success >> { "changed": false, "ping": "pong" } WRUG 10.12.2014
  31. 31. Przykład: test połączenia 1 2 3 $ ansible -i hosts.ini -m ping all app02 | success >> { "changed": false, "ping": "pong" } app01 | success >> { "changed": false, "ping": "pong" } db01 | success >> { "changed": false, "ping": "pong" } WRUG 10.12.2014
  32. 32. Mnogość dostępnych opcji WRUG 10.12.2014
  33. 33. Mnogość dostępnych opcji Tylko jeden host lub grupa hostów WRUG 10.12.2014
  34. 34. Mnogość dostępnych opcji Tylko jeden host lub grupa hostów $ ansible -i hosts.ini -m ping app01 $ ansible -i hosts.ini -m ping application WRUG 10.12.2014
  35. 35. Mnogość dostępnych opcji Tylko jeden host lub grupa hostów $ ansible -i hosts.ini -m ping app01 $ ansible -i hosts.ini -m ping application Gdy nie mamy dodanego klucza SSH na serwerze WRUG 10.12.2014
  36. 36. Mnogość dostępnych opcji Tylko jeden host lub grupa hostów $ ansible -i hosts.ini -m ping app01 $ ansible -i hosts.ini -m ping application Gdy nie mamy dodanego klucza SSH na serwerze $ ansible -i hosts.ini -m ping all -k WRUG 10.12.2014
  37. 37. Mnogość dostępnych opcji Tylko jeden host lub grupa hostów $ ansible -i hosts.ini -m ping app01 $ ansible -i hosts.ini -m ping application Gdy nie mamy dodanego klucza SSH na serwerze $ ansible -i hosts.ini -m ping all -k Customowy klucz SSH WRUG 10.12.2014
  38. 38. Mnogość dostępnych opcji Tylko jeden host lub grupa hostów $ ansible -i hosts.ini -m ping app01 $ ansible -i hosts.ini -m ping application Gdy nie mamy dodanego klucza SSH na serwerze $ ansible -i hosts.ini -m ping all -k Customowy klucz SSH $ ansible -i hosts.ini -m ping all --private-key ~/.vagrant.d/insecure_private_key WRUG 10.12.2014
  39. 39. Przykład: instalacja vim $ ansible -i hosts.ini -m apt -a "name=vim state=present" all -s app02 | success >> { "changed": true, "stderr": "", "stdout": "Reading package lists...nBuilding dependency [ciach]” } app01 | success >> { "changed": false } db01 | success >> { "changed": false } WRUG 10.12.2014
  40. 40. Przykład: instalacja vim 1 $ ansible -i hosts.ini -m apt -a "name=vim state=present" all -s app02 | success >> { "changed": true, "stderr": "", "stdout": "Reading package lists...nBuilding dependency [ciach]” } app01 | success >> { "changed": false } db01 | success >> { "changed": false } WRUG 10.12.2014
  41. 41. Przykład: instalacja vim 1 2 $ ansible -i hosts.ini -m apt -a "name=vim state=present" all -s app02 | success >> { "changed": true, "stderr": "", "stdout": "Reading package lists...nBuilding dependency [ciach]” } app01 | success >> { "changed": false } db01 | success >> { "changed": false } WRUG 10.12.2014
  42. 42. Przykład: instalacja vim 1 2 3 $ ansible -i hosts.ini -m apt -a "name=vim state=present" all -s app02 | success >> { "changed": true, "stderr": "", "stdout": "Reading package lists...nBuilding dependency [ciach]” } app01 | success >> { "changed": false } db01 | success >> { "changed": false } WRUG 10.12.2014
  43. 43. Przykład: instalacja vim 1 2 3 $ ansible -i hosts.ini -m apt -a "name=vim state=present" all -s app02 | success >> { "changed": true, "stderr": "", "stdout": "Reading package lists...nBuilding dependency [ciach]” } app01 | success >> { "changed": false } db01 | success >> { "changed": false } WRUG 10.12.2014 4
  44. 44. Przykładowe moduły WRUG 10.12.2014
  45. 45. Przykładowe moduły • commands: command, raw, script, shell WRUG 10.12.2014
  46. 46. Przykładowe moduły • commands: command, raw, script, shell • cloud: azure, digital_ocean, docker, ec2, rax WRUG 10.12.2014
  47. 47. Przykładowe moduły • commands: command, raw, script, shell • cloud: azure, digital_ocean, docker, ec2, rax • database: (mysql|postgres)_(db|user), redis WRUG 10.12.2014
  48. 48. Przykładowe moduły • commands: command, raw, script, shell • cloud: azure, digital_ocean, docker, ec2, rax • database: (mysql|postgres)_(db|user), redis • files: copy, fetch, file, lineinfile, template, unarchive WRUG 10.12.2014
  49. 49. Przykładowe moduły • commands: command, raw, script, shell • cloud: azure, digital_ocean, docker, ec2, rax • database: (mysql|postgres)_(db|user), redis • files: copy, fetch, file, lineinfile, template, unarchive • monitoring: nagios, monit, zabbix WRUG 10.12.2014
  50. 50. Przykładowe moduły • commands: command, raw, script, shell • cloud: azure, digital_ocean, docker, ec2, rax • database: (mysql|postgres)_(db|user), redis • files: copy, fetch, file, lineinfile, template, unarchive • monitoring: nagios, monit, zabbix • packaging: apt, gem, homebrew, macports, npm, pip, yum itd. WRUG 10.12.2014
  51. 51. Przykładowe moduły • commands: command, raw, script, shell • cloud: azure, digital_ocean, docker, ec2, rax • database: (mysql|postgres)_(db|user), redis • files: copy, fetch, file, lineinfile, template, unarchive • monitoring: nagios, monit, zabbix • packaging: apt, gem, homebrew, macports, npm, pip, yum itd. • source control: bzr, git, subversion WRUG 10.12.2014
  52. 52. Przykładowe moduły • commands: command, raw, script, shell • cloud: azure, digital_ocean, docker, ec2, rax • database: (mysql|postgres)_(db|user), redis • files: copy, fetch, file, lineinfile, template, unarchive • monitoring: nagios, monit, zabbix • packaging: apt, gem, homebrew, macports, npm, pip, yum itd. • source control: bzr, git, subversion • system: cron, filesystem, group, mount, service, user WRUG 10.12.2014
  53. 53. Przykładowe moduły • commands: command, raw, script, shell • cloud: azure, digital_ocean, docker, ec2, rax • database: (mysql|postgres)_(db|user), redis • files: copy, fetch, file, lineinfile, template, unarchive • monitoring: nagios, monit, zabbix • packaging: apt, gem, homebrew, macports, npm, pip, yum itd. • source control: bzr, git, subversion • system: cron, filesystem, group, mount, service, user • i wiele wiele innych, plus bardzo łatwo pisać swoje moduły WRUG 10.12.2014
  54. 54. Playbooks WRUG 10.12.2014
  55. 55. Playbooks • Struktura opisująca konfigurację oraz pożądany stan hostów, którymi zarządzamy WRUG 10.12.2014
  56. 56. Playbooks • Struktura opisująca konfigurację oraz pożądany stan hostów, którymi zarządzamy • Odpowiednik cookbook z chef WRUG 10.12.2014
  57. 57. Playbooks • Struktura opisująca konfigurację oraz pożądany stan hostów, którymi zarządzamy • Odpowiednik cookbook z chef • Pliki w formacie YAML, „human-readable” WRUG 10.12.2014
  58. 58. Playbooks • Struktura opisująca konfigurację oraz pożądany stan hostów, którymi zarządzamy • Odpowiednik cookbook z chef • Pliki w formacie YAML, „human-readable” • Możemy korzystać z pythonowego systemu szablonów Jinja2 WRUG 10.12.2014
  59. 59. Playbooks • Struktura opisująca konfigurację oraz pożądany stan hostów, którymi zarządzamy • Odpowiednik cookbook z chef • Pliki w formacie YAML, „human-readable” • Możemy korzystać z pythonowego systemu szablonów Jinja2 • Wiele sposobów na ich organizację, dzięki czemu służą w prostych oraz skomplikowanych środowiskach WRUG 10.12.2014
  60. 60. Playbooks • Struktura opisująca konfigurację oraz pożądany stan hostów, którymi zarządzamy • Odpowiednik cookbook z chef • Pliki w formacie YAML, „human-readable” • Możemy korzystać z pythonowego systemu szablonów Jinja2 • Wiele sposobów na ich organizację, dzięki czemu służą w prostych oraz skomplikowanych środowiskach • To właśnie tu możemy zobaczyć całe piękno i filozofię ansible! WRUG 10.12.2014
  61. 61. Przykład: prosty playbook $ cat application.yml --- - name: Deploy application servers hosts: application sudo: yes tasks: - name: Install some packages apt: name=„{{ item }}” state=present with_items: - build-essential - vim WRUG 10.12.2014
  62. 62. Przykład: prosty playbook $ ansible-playbook -i hosts.ini application.yml PLAY [Install some packages] ************************************************** GATHERING FACTS *************************************************************** ok: [app01] ok: [app02] TASK: [Install some packages] ************************************************* ok: [app01] => (item=build-essential,vim) changed: [app02] => (item=build-essential,vim) PLAY RECAP ******************************************************************** app01 : ok=2 changed=0 unreachable=0 failed=0 app02 : ok=2 changed=1 unreachable=0 failed=0 WRUG 10.12.2014
  63. 63. Przykład: prosty playbook $ ansible-playbook -i hosts.ini application.yml PLAY [Install some packages] ************************************************** GATHERING FACTS *************************************************************** ok: [app01] ok: [app02] TASK: [Install some packages] ************************************************* ok: [app01] => (item=build-essential,vim) changed: [app02] => (item=build-essential,vim) PLAY RECAP ******************************************************************** app01 : ok=2 changed=0 unreachable=0 failed=0 app02 : ok=2 changed=1 unreachable=0 failed=0 WRUG 10.12.2014 1
  64. 64. Przykład: prosty playbook 1 2 $ ansible-playbook -i hosts.ini application.yml PLAY [Install some packages] ************************************************** GATHERING FACTS *************************************************************** ok: [app01] ok: [app02] TASK: [Install some packages] ************************************************* ok: [app01] => (item=build-essential,vim) changed: [app02] => (item=build-essential,vim) PLAY RECAP ******************************************************************** app01 : ok=2 changed=0 unreachable=0 failed=0 app02 : ok=2 changed=1 unreachable=0 failed=0 WRUG 10.12.2014
  65. 65. Przykład: prosty playbook 1 2 $ ansible-playbook -i hosts.ini application.yml PLAY [Install some packages] ************************************************** GATHERING FACTS *************************************************************** ok: [app01] ok: [app02] TASK: [Install some packages] ************************************************* ok: [app01] => (item=build-essential,vim) changed: [app02] => (item=build-essential,vim) PLAY RECAP ******************************************************************** app01 : ok=2 changed=0 unreachable=0 failed=0 app02 : ok=2 changed=1 unreachable=0 failed=0 WRUG 10.12.2014 3
  66. 66. Przykład: prosty playbook 1 2 $ ansible-playbook -i hosts.ini application.yml PLAY [Install some packages] ************************************************** GATHERING FACTS *************************************************************** ok: [app01] ok: [app02] TASK: [Install some packages] ************************************************* ok: [app01] => (item=build-essential,vim) changed: [app02] => (item=build-essential,vim) PLAY RECAP ******************************************************************** app01 : ok=2 changed=0 unreachable=0 failed=0 app02 : ok=2 changed=1 unreachable=0 failed=0 WRUG 10.12.2014 3 4
  67. 67. Przykład: prosty playbook 1 2 $ ansible-playbook -i hosts.ini application.yml PLAY [Install some packages] ************************************************** GATHERING FACTS *************************************************************** ok: [app01] ok: [app02] TASK: [Install some packages] ************************************************* ok: [app01] => (item=build-essential,vim) changed: [app02] => (item=build-essential,vim) PLAY RECAP ******************************************************************** app01 : ok=2 changed=0 unreachable=0 failed=0 app02 : ok=2 changed=1 unreachable=0 failed=0 WRUG 10.12.2014 3 4 5
  68. 68. Playbook - directory layout production.ini - Nasze inventory dla środowiska produkcyjnego stage.ini oraz testowego (stage) group_vars/ - Zmienne dla całych grup hostów. W naszym application przypadku dla grup application oraz database database host_vars/ - Zmienne zdefiniowane tylko dla konkretnego app01 hosta library/ - Jeśli korzystamy z własnych modułów to jest my-module/ to idealny katalog na ich umieszczenie site.yml - Nasze playbooki application.yml database.yml roles/ - Katalog, w którym będziemy przechowywać nasze chruby/ wszystkie role. Poprzez rolę możemy tu rozumieć nginx/ funkcje jakie będzie posiadał nasz serwer. our-application/ Dla przykładu serwer może mieć funkcje bazy postgresql/ danych postgresql lub serwer www nginx. ruby-install/ WRUG 10.12.2014
  69. 69. Playbook - directory layout production.ini stage.ini group_vars/ application database host_vars/ app01 library/ my-module/ site.yml application.yml database.yml roles/ chruby/ nginx/ our-application/ postgresql/ ruby-install/ roles/ postgresql/ defaults/ main.yml files/ some_tools.tgz handlers/ main.yml library/ role-module/ meta/ main.yml tasks/ main.yml templates/ WRUG 10.12.2014 postgresql.conf.j2 vars/ main.yml
  70. 70. Przykład: playbook application.yml - wersja 2 $ cat application.yml --- - name: Deploy application servers hosts: application sudo: yes roles: - ruby-install - chruby - { role: nginx, server_name: example.com } - { role: our-application, sudo_user: ubuntu } WRUG 10.12.2014
  71. 71. O czym jeszcze warto wspomieć? WRUG 10.12.2014
  72. 72. O czym jeszcze warto wspomieć? • Variables, Loops, Conditionals, Jinja2 WRUG 10.12.2014
  73. 73. O czym jeszcze warto wspomieć? • Variables, Loops, Conditionals, Jinja2 • Tags WRUG 10.12.2014
  74. 74. O czym jeszcze warto wspomieć? • Variables, Loops, Conditionals, Jinja2 • Tags • Facts Caching WRUG 10.12.2014
  75. 75. O czym jeszcze warto wspomieć? • Variables, Loops, Conditionals, Jinja2 • Tags • Facts Caching • Ansible Vault WRUG 10.12.2014
  76. 76. O czym jeszcze warto wspomieć? • Variables, Loops, Conditionals, Jinja2 • Tags • Facts Caching • Ansible Vault • Asynchronous Actions and Polling WRUG 10.12.2014
  77. 77. O czym jeszcze warto wspomieć? • Variables, Loops, Conditionals, Jinja2 • Tags • Facts Caching • Ansible Vault • Asynchronous Actions and Polling • Rolling Update, Maximum Failure Percentage, Deletation, Run Once WRUG 10.12.2014
  78. 78. O czym jeszcze warto wspomieć? • Variables, Loops, Conditionals, Jinja2 • Tags • Facts Caching • Ansible Vault • Asynchronous Actions and Polling • Rolling Update, Maximum Failure Percentage, Deletation, Run Once • Var Promts WRUG 10.12.2014
  79. 79. O czym jeszcze warto wspomieć? • Variables, Loops, Conditionals, Jinja2 • Tags • Facts Caching • Ansible Vault • Asynchronous Actions and Polling • Rolling Update, Maximum Failure Percentage, Deletation, Run Once • Var Promts • Ansible Galaxy WRUG 10.12.2014
  80. 80. Czy macie jakieś pytania?
  81. 81. Dziękuję za uwagę Kamil Grabowski kamil.grabowski@gmail.com WRUG 10.12.2014 @y3ti PKO Bank Polski Rebased Whitestream

×