SlideShare a Scribd company logo
1 of 28
Download to read offline
UW@IT 21.01.2015
Ansible w praktyce
Kamil Grabowski
kamil.grabowski@gmail.com
@y3ti
Rebased
Whitestream
Potrzeba automatyzacji
• Duża infrastruktura i problem skali
• Skomplikowany proces instalacji i konfiguracji
środowiska
• Disaster recovery
• Usługi w chmurze / OnDemand
UW@IT 21.01.2015
Narzędzia do automatyzacji
UW@IT 21.01.2015
Dlaczego Ansible?
• Dokumentacja
• Agentless
• Minimum zależności:
• management: python 2.6
• node: python 2.4
• Filozofia
• Bogate repozytorium modułów
• Support
UW@IT 21.01.2015
Warianty instalacji
# apt-get install python-pip

# pip install ansible
Instalacja poprzez managera paczek pip
# apt-get install ansible
Instalacja poprzez apt-get
# git clone https://github.com/ansible/
ansible.git

# cd ansible; source hacking/env-set
„Hacking directory tools” dostarczony z ansible
UW@IT 21.01.2015
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
UW@IT 21.01.2015
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"

}
1 2 3
UW@IT 21.01.2015
Mnogość dostępnych opcji
$ ansible -i hosts.ini -m ping all -k
Gdy nie mamy dodanego klucza SSH na serwerze
$ ansible -i hosts.ini -m ping app01

$ ansible -i hosts.ini -m ping application
Tylko jeden host lub grupa hostów
$ ansible -i hosts.ini -m ping all --private-
key ~/.vagrant.d/insecure_private_key
Customowy klucz SSH
UW@IT 21.01.2015
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

}
1 2 3
4
UW@IT 21.01.2015
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
UW@IT 21.01.2015
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!
UW@IT 21.01.2015
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
UW@IT 21.01.2015
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
1 2
3
4
5
UW@IT 21.01.2015
Playbooks - keywords
• playbooks
• inventory (hostgroup, hostgroup variables)
• host_vars
• group_vars
• facts
• libraries
• roles (defaults/vars, templates/files, tasks, handlers, meta)
UW@IT 21.01.2015
Playbook - directory layout
production.ini - Nasze inventory dla środowiska produkcyjnego

staging.ini oraz testowego (staging)



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/
UW@IT 21.01.2015
Role - 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/

postgresql.conf.j2

vars/

main.yml
UW@IT 21.01.2015
Przykład: nowe inventory
$ cat production.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

stage=production
UW@IT 21.01.2015
Przykład: playbook
application.yml
$ cat application.yml



---

- name: Deploy application servers

hosts: application

sudo: yes



roles:

- setup

- memcached

- { role: nginx, server_name: example.com }

- { role: deploy, deploy_to: "/data" }
UW@IT 21.01.2015
Przykład: group_vars/
application
$ cat group_vars/application



deploy_git_repo: git@github.com:y3ti/app.git

deploy_git_branch: "{{ stage }}"



setup_apt_packages:

- build-essential

- git-core

- ntp

- postgresql-client-9.3

- postgresql-server-dev—9.3
UW@IT 21.01.2015
Przykład: group_vars/all
$ cat group_vars/all



postgresql_database: "myapp_{{ stage }}"

postgresql_username: myapp

postgresql_password: qwe135



setup_ntp_servers: 

- ntp.icm.edu.pl

- ntp.myserver.com
UW@IT 21.01.2015
Przykład: group_vars/all
$ cat group_vars/all



postgresql_database: "myapp_{{ stage }}"

postgresql_username: myapp

postgresql_password: qwe135



setup_ntp_servers: 

- ntp.icm.edu.pl

- ntp.myserver.com
UW@IT 21.01.2015
SECURITY !!!
Przykład: credentials/
production.yml
$ cat credentials/production.yml



deploy_private_key: |

-----BEGIN DSA PRIVATE KEY-----

...

...



postgresql_username: myapp

postgresql_password: qwe135



UW@IT 21.01.2015
Ansible Vault
$ ansible-vault encrypt credentials/
production.yml



Vault password: ********* 

Confirm Vault password: *********

Encryption successful



$ cat credentials/production.yml



$ANSIBLE_VAULT;1.1;AES256

373930656139623263396436356130633…

…

…
UW@IT 21.01.2015
Przykład: playbook
application.yml
$ cat application.yml



---

- name: Deploy application servers

hosts: application

sudo: yes



vars_files:

- "credentials/{{ stage }}.yml"



roles:

- setup

- memcached

- { role: nginx, server_name: example.com }

- { role: deploy, deploy_to: "/data" }
UW@IT 21.01.2015
Przykład: playbook
application.yml
$ ansible-playbook -i production.ini
application.yml --ask-vault-pass



Vault password: *******


UW@IT 21.01.2015
O czym jeszcze warto
wspomieć?
• Var Promts
• Variables, Loops, Conditionals, Jinja2
• Tags
• Facts Caching
• Asynchronous Actions and Polling
• Rolling Update, Maximum Failure Percentage, Delegation, Run
Once
• Ansible Galaxy
UW@IT 21.01.2015
Czy macie jakieś
pytania?
Dziękuję za uwagę
Kamil Grabowski
kamil.grabowski@gmail.com
@y3ti
Rebased
Whitestream
UW@IT 21.01.2015

More Related Content

What's hot

Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
Szybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic BeanstalkSzybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic BeanstalkThe Software House
 
Service workers - bądź online, nawet kiedy jesteś offline!
Service workers - bądź online, nawet kiedy jesteś offline!Service workers - bądź online, nawet kiedy jesteś offline!
Service workers - bądź online, nawet kiedy jesteś offline!The Software House
 
Wprowadzenie do testów wydajnościowych w k6
Wprowadzenie do testów wydajnościowych w k6Wprowadzenie do testów wydajnościowych w k6
Wprowadzenie do testów wydajnościowych w k6The Software House
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńPaweł Kondraciuk
 
Continuous Integration w konfiguracji urządzeń sieciowych
Continuous Integration w konfiguracji urządzeń sieciowychContinuous Integration w konfiguracji urządzeń sieciowych
Continuous Integration w konfiguracji urządzeń sieciowychDreamLab
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxDawid Rusnak
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaGameDesire Academy
 
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case Study
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case StudyJakub Mrowiec (Grand Parade Poland) - Monumentum Case Study
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case StudyBusiness Link Krakow
 
LXC - kontener pingwinów
LXC - kontener pingwinówLXC - kontener pingwinów
LXC - kontener pingwinówgnosek
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerMarek Będkowski
 
ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogoKamil Monticolo
 
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...HighSolutions Sp. z o.o.
 
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'a
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'aUruchomienie i praca z laravel w wirtualnym kontenerze docker'a
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'aLaravel Poland MeetUp
 
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z CapistranoMichał Szajbe
 
Kubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsKubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsThe Software House
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerKamil Grabowski
 
Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza
Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza
Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza SzymonSadlo
 

What's hot (20)

Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Szybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic BeanstalkSzybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic Beanstalk
 
Service workers - bądź online, nawet kiedy jesteś offline!
Service workers - bądź online, nawet kiedy jesteś offline!Service workers - bądź online, nawet kiedy jesteś offline!
Service workers - bądź online, nawet kiedy jesteś offline!
 
Wprowadzenie do testów wydajnościowych w k6
Wprowadzenie do testów wydajnościowych w k6Wprowadzenie do testów wydajnościowych w k6
Wprowadzenie do testów wydajnościowych w k6
 
Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzień
 
Continuous Integration w konfiguracji urządzeń sieciowych
Continuous Integration w konfiguracji urządzeń sieciowychContinuous Integration w konfiguracji urządzeń sieciowych
Continuous Integration w konfiguracji urządzeń sieciowych
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/Redux
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zaplecza
 
Rundeck & Ansible
Rundeck & AnsibleRundeck & Ansible
Rundeck & Ansible
 
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case Study
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case StudyJakub Mrowiec (Grand Parade Poland) - Monumentum Case Study
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case Study
 
LXC - kontener pingwinów
LXC - kontener pingwinówLXC - kontener pingwinów
LXC - kontener pingwinów
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
 
ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogo
 
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
 
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'a
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'aUruchomienie i praca z laravel w wirtualnym kontenerze docker'a
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'a
 
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z Capistrano
 
Kubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsKubernetes (Canary) Deployments
Kubernetes (Canary) Deployments
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu Docker
 
Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza
Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza
Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza
 

Viewers also liked

Warsztaty ansible
Warsztaty ansibleWarsztaty ansible
Warsztaty ansiblegnosek
 
Ansible
AnsibleAnsible
Ansiblegnosek
 
Wprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetWprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetSages
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentationJohn Lynch
 
E-Commerce Case Studies
E-Commerce Case StudiesE-Commerce Case Studies
E-Commerce Case StudiesDivante
 

Viewers also liked (7)

Warsztaty ansible
Warsztaty ansibleWarsztaty ansible
Warsztaty ansible
 
Ansible
AnsibleAnsible
Ansible
 
ANSIBLE W PRAKTYCE
ANSIBLE W PRAKTYCEANSIBLE W PRAKTYCE
ANSIBLE W PRAKTYCE
 
Wprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetWprowadzenie do technologii Puppet
Wprowadzenie do technologii Puppet
 
A2-S4A: Hacemos un Semáforo
A2-S4A: Hacemos un SemáforoA2-S4A: Hacemos un Semáforo
A2-S4A: Hacemos un Semáforo
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
E-Commerce Case Studies
E-Commerce Case StudiesE-Commerce Case Studies
E-Commerce Case Studies
 

Similar to Ansible w praktyce

Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wojciech Barczyński
 
Kubernetes i Docker Swarm - Tomasz Woszczynski
Kubernetes i Docker Swarm - Tomasz WoszczynskiKubernetes i Docker Swarm - Tomasz Woszczynski
Kubernetes i Docker Swarm - Tomasz Woszczynskiduchowe50k
 
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16Krzysztof Synak
 
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...HighSolutions Sp. z o.o.
 
EloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open SourceEloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open SourceLaravel Poland MeetUp
 
Infrastruktura Hiperkonwergentna na przykładzie platformy Nutanix - Marcin Ka...
Infrastruktura Hiperkonwergentna na przykładzie platformy Nutanix - Marcin Ka...Infrastruktura Hiperkonwergentna na przykładzie platformy Nutanix - Marcin Ka...
Infrastruktura Hiperkonwergentna na przykładzie platformy Nutanix - Marcin Ka...jzielinski_pl
 
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPROIDEA
 
PLNOG 13: Adam Heczko: Openstack, Ceph, SDN
PLNOG 13: Adam Heczko: Openstack, Ceph, SDNPLNOG 13: Adam Heczko: Openstack, Ceph, SDN
PLNOG 13: Adam Heczko: Openstack, Ceph, SDNPROIDEA
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PROIDEA
 
PLNOG 21: Alek Cesarz, Piotr Misiak - Petabajty_z_kosmosu_(serio)
PLNOG 21: Alek Cesarz, Piotr Misiak - Petabajty_z_kosmosu_(serio)PLNOG 21: Alek Cesarz, Piotr Misiak - Petabajty_z_kosmosu_(serio)
PLNOG 21: Alek Cesarz, Piotr Misiak - Petabajty_z_kosmosu_(serio)PROIDEA
 
Rails tobak2005
Rails tobak2005Rails tobak2005
Rails tobak2005Tomasz Bak
 
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe MicroservicesKonrad Król
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Natalia Stanko
 
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...Lukasz Kaluzny
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierciDivante
 
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Michał Kurzeja
 
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaWebpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaMarcin Gajda
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiGrzegorz Bartman
 

Similar to Ansible w praktyce (20)

Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
 
Kubernetes i Docker Swarm - Tomasz Woszczynski
Kubernetes i Docker Swarm - Tomasz WoszczynskiKubernetes i Docker Swarm - Tomasz Woszczynski
Kubernetes i Docker Swarm - Tomasz Woszczynski
 
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
 
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
 
EloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open SourceEloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open Source
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Infrastruktura Hiperkonwergentna na przykładzie platformy Nutanix - Marcin Ka...
Infrastruktura Hiperkonwergentna na przykładzie platformy Nutanix - Marcin Ka...Infrastruktura Hiperkonwergentna na przykładzie platformy Nutanix - Marcin Ka...
Infrastruktura Hiperkonwergentna na przykładzie platformy Nutanix - Marcin Ka...
 
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
 
PLNOG 13: Adam Heczko: Openstack, Ceph, SDN
PLNOG 13: Adam Heczko: Openstack, Ceph, SDNPLNOG 13: Adam Heczko: Openstack, Ceph, SDN
PLNOG 13: Adam Heczko: Openstack, Ceph, SDN
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
 
PLNOG 21: Alek Cesarz, Piotr Misiak - Petabajty_z_kosmosu_(serio)
PLNOG 21: Alek Cesarz, Piotr Misiak - Petabajty_z_kosmosu_(serio)PLNOG 21: Alek Cesarz, Piotr Misiak - Petabajty_z_kosmosu_(serio)
PLNOG 21: Alek Cesarz, Piotr Misiak - Petabajty_z_kosmosu_(serio)
 
Rails tobak2005
Rails tobak2005Rails tobak2005
Rails tobak2005
 
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe Microservices
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2
 
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierci
 
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
 
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaWebpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
 

More from Kamil Grabowski

Jak wygrać Igrzyska Chmury
Jak wygrać Igrzyska ChmuryJak wygrać Igrzyska Chmury
Jak wygrać Igrzyska ChmuryKamil Grabowski
 
Porażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościPorażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościKamil Grabowski
 
RRDTool + RUBY DSL = RRD-FFI
RRDTool + RUBY DSL = RRD-FFIRRDTool + RUBY DSL = RRD-FFI
RRDTool + RUBY DSL = RRD-FFIKamil Grabowski
 
Jak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIXJak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIXKamil Grabowski
 
Sprzetowe i programowe aspekty punktu wymiany ruchu
Sprzetowe i programowe aspekty punktu wymiany ruchuSprzetowe i programowe aspekty punktu wymiany ruchu
Sprzetowe i programowe aspekty punktu wymiany ruchuKamil Grabowski
 
How to create effective NOC in Poland
How to create effective NOC in PolandHow to create effective NOC in Poland
How to create effective NOC in PolandKamil Grabowski
 

More from Kamil Grabowski (7)

Jak wygrać Igrzyska Chmury
Jak wygrać Igrzyska ChmuryJak wygrać Igrzyska Chmury
Jak wygrać Igrzyska Chmury
 
Porażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościPorażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodności
 
Docker
DockerDocker
Docker
 
RRDTool + RUBY DSL = RRD-FFI
RRDTool + RUBY DSL = RRD-FFIRRDTool + RUBY DSL = RRD-FFI
RRDTool + RUBY DSL = RRD-FFI
 
Jak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIXJak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIX
 
Sprzetowe i programowe aspekty punktu wymiany ruchu
Sprzetowe i programowe aspekty punktu wymiany ruchuSprzetowe i programowe aspekty punktu wymiany ruchu
Sprzetowe i programowe aspekty punktu wymiany ruchu
 
How to create effective NOC in Poland
How to create effective NOC in PolandHow to create effective NOC in Poland
How to create effective NOC in Poland
 

Ansible w praktyce

  • 1. UW@IT 21.01.2015 Ansible w praktyce Kamil Grabowski kamil.grabowski@gmail.com @y3ti Rebased Whitestream
  • 2. Potrzeba automatyzacji • Duża infrastruktura i problem skali • Skomplikowany proces instalacji i konfiguracji środowiska • Disaster recovery • Usługi w chmurze / OnDemand UW@IT 21.01.2015
  • 4. Dlaczego Ansible? • Dokumentacja • Agentless • Minimum zależności: • management: python 2.6 • node: python 2.4 • Filozofia • Bogate repozytorium modułów • Support UW@IT 21.01.2015
  • 5. Warianty instalacji # apt-get install python-pip
 # pip install ansible Instalacja poprzez managera paczek pip # apt-get install ansible Instalacja poprzez apt-get # git clone https://github.com/ansible/ ansible.git
 # cd ansible; source hacking/env-set „Hacking directory tools” dostarczony z ansible UW@IT 21.01.2015
  • 6. 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 UW@IT 21.01.2015
  • 7. 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"
 } 1 2 3 UW@IT 21.01.2015
  • 8. Mnogość dostępnych opcji $ ansible -i hosts.ini -m ping all -k Gdy nie mamy dodanego klucza SSH na serwerze $ ansible -i hosts.ini -m ping app01
 $ ansible -i hosts.ini -m ping application Tylko jeden host lub grupa hostów $ ansible -i hosts.ini -m ping all --private- key ~/.vagrant.d/insecure_private_key Customowy klucz SSH UW@IT 21.01.2015
  • 9. 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
 } 1 2 3 4 UW@IT 21.01.2015
  • 10. 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 UW@IT 21.01.2015
  • 11. 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! UW@IT 21.01.2015
  • 12. 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 UW@IT 21.01.2015
  • 13. 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 1 2 3 4 5 UW@IT 21.01.2015
  • 14. Playbooks - keywords • playbooks • inventory (hostgroup, hostgroup variables) • host_vars • group_vars • facts • libraries • roles (defaults/vars, templates/files, tasks, handlers, meta) UW@IT 21.01.2015
  • 15. Playbook - directory layout production.ini - Nasze inventory dla środowiska produkcyjnego
 staging.ini oraz testowego (staging)
 
 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/ UW@IT 21.01.2015
  • 16. Role - 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/
 postgresql.conf.j2
 vars/
 main.yml UW@IT 21.01.2015
  • 17. Przykład: nowe inventory $ cat production.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
 stage=production UW@IT 21.01.2015
  • 18. Przykład: playbook application.yml $ cat application.yml
 
 ---
 - name: Deploy application servers
 hosts: application
 sudo: yes
 
 roles:
 - setup
 - memcached
 - { role: nginx, server_name: example.com }
 - { role: deploy, deploy_to: "/data" } UW@IT 21.01.2015
  • 19. Przykład: group_vars/ application $ cat group_vars/application
 
 deploy_git_repo: git@github.com:y3ti/app.git
 deploy_git_branch: "{{ stage }}"
 
 setup_apt_packages:
 - build-essential
 - git-core
 - ntp
 - postgresql-client-9.3
 - postgresql-server-dev—9.3 UW@IT 21.01.2015
  • 20. Przykład: group_vars/all $ cat group_vars/all
 
 postgresql_database: "myapp_{{ stage }}"
 postgresql_username: myapp
 postgresql_password: qwe135
 
 setup_ntp_servers: 
 - ntp.icm.edu.pl
 - ntp.myserver.com UW@IT 21.01.2015
  • 21. Przykład: group_vars/all $ cat group_vars/all
 
 postgresql_database: "myapp_{{ stage }}"
 postgresql_username: myapp
 postgresql_password: qwe135
 
 setup_ntp_servers: 
 - ntp.icm.edu.pl
 - ntp.myserver.com UW@IT 21.01.2015 SECURITY !!!
  • 22. Przykład: credentials/ production.yml $ cat credentials/production.yml
 
 deploy_private_key: |
 -----BEGIN DSA PRIVATE KEY-----
 ...
 ...
 
 postgresql_username: myapp
 postgresql_password: qwe135
 
 UW@IT 21.01.2015
  • 23. Ansible Vault $ ansible-vault encrypt credentials/ production.yml
 
 Vault password: ********* 
 Confirm Vault password: *********
 Encryption successful
 
 $ cat credentials/production.yml
 
 $ANSIBLE_VAULT;1.1;AES256
 373930656139623263396436356130633…
 …
 … UW@IT 21.01.2015
  • 24. Przykład: playbook application.yml $ cat application.yml
 
 ---
 - name: Deploy application servers
 hosts: application
 sudo: yes
 
 vars_files:
 - "credentials/{{ stage }}.yml"
 
 roles:
 - setup
 - memcached
 - { role: nginx, server_name: example.com }
 - { role: deploy, deploy_to: "/data" } UW@IT 21.01.2015
  • 25. Przykład: playbook application.yml $ ansible-playbook -i production.ini application.yml --ask-vault-pass
 
 Vault password: ******* 
 UW@IT 21.01.2015
  • 26. O czym jeszcze warto wspomieć? • Var Promts • Variables, Loops, Conditionals, Jinja2 • Tags • Facts Caching • Asynchronous Actions and Polling • Rolling Update, Maximum Failure Percentage, Delegation, Run Once • Ansible Galaxy UW@IT 21.01.2015
  • 28. Dziękuję za uwagę Kamil Grabowski kamil.grabowski@gmail.com @y3ti Rebased Whitestream UW@IT 21.01.2015