際際滷

際際滷Share a Scribd company logo
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 kon鍖guracji
rodowiska
 Disaster recovery
 Usugi w chmurze / OnDemand
UW@IT 21.01.2015
Narzdzia do automatyzacji
UW@IT 21.01.2015
Dlaczego Ansible?
 Dokumentacja
 Agentless
 Minimum zale甜noci:
 management: python 2.6
 node: python 2.4
 Filozo鍖a
 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
Przykad: test poczenia
$ 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 dostpnych 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
Przykad: 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
Przykadowe moduy
 commands: command, raw, script, shell
 cloud: azure, digital_ocean, docker, ec2, rax
 database: (mysql|postgres)_(db|user), redis
 鍖les: copy, fetch, 鍖le, linein鍖le, template, unarchive
 monitoring: nagios, monit, zabbix
 packaging: apt, gem, homebrew, macports, npm, pip, yum itd.
 source control: bzr, git, subversion
 system: cron, 鍖lesystem, group, mount, service, user
 i wiele wiele innych, plus bardzo atwo pisa swoje moduy
UW@IT 21.01.2015
Playbooks
 Struktura opisujca kon鍖guracj oraz po甜dany stan host坦w,
kt坦rymi zarzdzamy
 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, dziki czemu su甜 w
prostych oraz skomplikowanych rodowiskach
 To wanie tu mo甜emy zobaczy cae pikno i 鍖lozo鍖 ansible!
UW@IT 21.01.2015
Przykad: 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
Przykad: 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/鍖les, 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 caych grup host坦w. W naszym 
application przypadku dla grup application oraz database
database
host_vars/ - Zmienne zdefiniowane tylko dla konkretnego
app01 hosta

library/ - Jeli korzystamy z wasnych 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 bdziemy przechowywa nasze
chruby/ wszystkie role. Poprzez rol mo甜emy tu rozumie
nginx/ funkcje jakie bdzie posiada nasz serwer.
our-application/ Dla przykadu 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
Przykad: 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
Przykad: 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
Przykad: 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-dev9.3
UW@IT 21.01.2015
Przykad: 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
Przykad: 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 !!!
Przykad: 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
Przykad: 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
Przykad: 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?
Dzikuj za uwag
Kamil Grabowski
kamil.grabowski@gmail.com
@y3ti
Rebased
Whitestream
UW@IT 21.01.2015

More Related Content

What's hot (20)

Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
Dawid Rusnak
Szybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic BeanstalkSzybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic Beanstalk
The Software House
Service workers - bd添 online, nawet kiedy jeste offline!
Service workers - bd添 online, nawet kiedy jeste offline!Service workers - bd添 online, nawet kiedy jeste offline!
Service workers - bd添 online, nawet kiedy jeste offline!
The Software House
Wprowadzenie do test坦w wydajnociowych w k6
Wprowadzenie do test坦w wydajnociowych w k6Wprowadzenie do test坦w wydajnociowych w k6
Wprowadzenie do test坦w wydajnociowych w k6
The Software House
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?
The Software House
Jak zosta mobile deweloperem w 1 dzie
Jak zosta mobile deweloperem w 1 dzieJak zosta mobile deweloperem w 1 dzie
Jak zosta mobile deweloperem w 1 dzie
Pawe Kondraciuk
Continuous Integration w konfiguracji urzdze sieciowych
Continuous Integration w konfiguracji urzdze sieciowychContinuous Integration w konfiguracji urzdze sieciowych
Continuous Integration w konfiguracji urzdze sieciowych
DreamLab
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
Dawid Rusnak
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zaplecza
GameDesire Academy
Rundeck & Ansible
Rundeck & AnsibleRundeck & Ansible
Rundeck & Ansible
Maciej Lasyk
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
Business Link Krakow
LXC - kontener pingwin坦w
LXC - kontener pingwin坦wLXC - kontener pingwin坦w
LXC - kontener pingwin坦w
gnosek
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
Marek Bdkowski
ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogo
Kamil 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'a
Laravel Poland MeetUp
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z Capistrano
Micha Szajbe
Kubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsKubernetes (Canary) Deployments
Kubernetes (Canary) Deployments
The Software House
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu Docker
Kamil Grabowski
Optymalizacyjna magia, czyli jak wyciga kr坦liki z kapelusza
Optymalizacyjna magia, czyli jak wyciga kr坦liki z kapelusza Optymalizacyjna magia, czyli jak wyciga kr坦liki z kapelusza
Optymalizacyjna magia, czyli jak wyciga kr坦liki z kapelusza
SzymonSadlo
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
Dawid Rusnak
Szybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic BeanstalkSzybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic Beanstalk
The Software House
Service workers - bd添 online, nawet kiedy jeste offline!
Service workers - bd添 online, nawet kiedy jeste offline!Service workers - bd添 online, nawet kiedy jeste offline!
Service workers - bd添 online, nawet kiedy jeste offline!
The Software House
Wprowadzenie do test坦w wydajnociowych w k6
Wprowadzenie do test坦w wydajnociowych w k6Wprowadzenie do test坦w wydajnociowych w k6
Wprowadzenie do test坦w wydajnociowych w k6
The Software House
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?
The Software House
Jak zosta mobile deweloperem w 1 dzie
Jak zosta mobile deweloperem w 1 dzieJak zosta mobile deweloperem w 1 dzie
Jak zosta mobile deweloperem w 1 dzie
Pawe Kondraciuk
Continuous Integration w konfiguracji urzdze sieciowych
Continuous Integration w konfiguracji urzdze sieciowychContinuous Integration w konfiguracji urzdze sieciowych
Continuous Integration w konfiguracji urzdze sieciowych
DreamLab
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
Dawid Rusnak
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zaplecza
GameDesire Academy
Rundeck & Ansible
Rundeck & AnsibleRundeck & Ansible
Rundeck & Ansible
Maciej Lasyk
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
Business Link Krakow
LXC - kontener pingwin坦w
LXC - kontener pingwin坦wLXC - kontener pingwin坦w
LXC - kontener pingwin坦w
gnosek
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
Marek Bdkowski
ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogo
Kamil 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'a
Laravel Poland MeetUp
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z Capistrano
Micha Szajbe
Kubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsKubernetes (Canary) Deployments
Kubernetes (Canary) Deployments
The Software House
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu Docker
Kamil Grabowski
Optymalizacyjna magia, czyli jak wyciga kr坦liki z kapelusza
Optymalizacyjna magia, czyli jak wyciga kr坦liki z kapelusza Optymalizacyjna magia, czyli jak wyciga kr坦liki z kapelusza
Optymalizacyjna magia, czyli jak wyciga kr坦liki z kapelusza
SzymonSadlo

Viewers also liked (7)

Warsztaty ansible
Warsztaty ansibleWarsztaty ansible
Warsztaty ansible
gnosek
Ansible
AnsibleAnsible
Ansible
gnosek
ANSIBLE W PRAKTYCE
ANSIBLE W PRAKTYCEANSIBLE W PRAKTYCE
ANSIBLE W PRAKTYCE
Bartosz Tkaczewski
Wprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetWprowadzenie do technologii Puppet
Wprowadzenie do technologii Puppet
Sages
A2-S4A: Hacemos un Sem叩foroA2-S4A: Hacemos un Sem叩foro
A2-S4A: Hacemos un Sem叩foro
Jos辿 Pujol P辿rez
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
John Lynch
E-Commerce Case Studies
E-Commerce Case StudiesE-Commerce Case Studies
E-Commerce Case Studies
Divante
Warsztaty ansible
Warsztaty ansibleWarsztaty ansible
Warsztaty ansible
gnosek
Ansible
AnsibleAnsible
Ansible
gnosek
Wprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetWprowadzenie do technologii Puppet
Wprowadzenie do technologii Puppet
Sages
A2-S4A: Hacemos un Sem叩foroA2-S4A: Hacemos un Sem叩foro
A2-S4A: Hacemos un Sem叩foro
Jos辿 Pujol P辿rez
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
John Lynch
E-Commerce Case Studies
E-Commerce Case StudiesE-Commerce Case Studies
E-Commerce Case Studies
Divante

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.
Wojciech Barczyski
Kubernetes i Docker Swarm - Tomasz Woszczynski
Kubernetes i Docker Swarm - Tomasz WoszczynskiKubernetes i Docker Swarm - Tomasz Woszczynski
Kubernetes i Docker Swarm - Tomasz Woszczynski
duchowe50k
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
Krzysztof 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 Source
Laravel Poland MeetUp
JavaScript, Moduy
JavaScript, ModuyJavaScript, Moduy
JavaScript, Moduy
Mariusz Nowak
Infrastruktura Hiperkonwergentna na przykadzie platformy Nutanix - Marcin Ka...
Infrastruktura Hiperkonwergentna na przykadzie platformy Nutanix - Marcin Ka...Infrastruktura Hiperkonwergentna na przykadzie platformy Nutanix - Marcin Ka...
Infrastruktura Hiperkonwergentna na przykadzie platformy Nutanix - Marcin Ka...
jzielinski_pl
PLNOG 22 - Krzysztof Zaski - Praktyczne zastosowanie narzdzi NetDevOps
PLNOG 22 - Krzysztof Zaski - Praktyczne zastosowanie narzdzi NetDevOpsPLNOG 22 - Krzysztof Zaski - Praktyczne zastosowanie narzdzi NetDevOps
PLNOG 22 - Krzysztof Zaski - Praktyczne zastosowanie narzdzi NetDevOps
PROIDEA
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
PROIDEA
PLNOG22 - Piotr Stolarek - Bezpieczestwo u甜ytkowania platform usugowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczestwo u甜ytkowania platform usugowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczestwo u甜ytkowania platform usugowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczestwo u甜ytkowania platform usugowych 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 tobak2005
Tomasz Bak
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe Microservices
Konrad Kr坦l
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2
Natalia Stanko
Jak zbudowac aplikacje z wykorzystaniem funkcjonalnosci windows server 2016...
Jak zbudowac aplikacje z wykorzystaniem funkcjonalnosci windows server 2016...Jak zbudowac aplikacje z wykorzystaniem funkcjonalnosci windows server 2016...
Jak zbudowac aplikacje z wykorzystaniem funkcjonalnosci windows server 2016...
Lukasz Kaluzny
Micha Dec - Quality in Clouds
Micha Dec - Quality in CloudsMicha Dec - Quality in Clouds
Micha Dec - Quality in Clouds
kraqa
Pocaunek mierci
Pocaunek mierciPocaunek mierci
Pocaunek mierci
Divante
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
Micha 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坦tka
Marcin Gajda
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw Sobiecki
Grzegorz Bartman
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 Barczyski
Kubernetes i Docker Swarm - Tomasz Woszczynski
Kubernetes i Docker Swarm - Tomasz WoszczynskiKubernetes i Docker Swarm - Tomasz Woszczynski
Kubernetes i Docker Swarm - Tomasz Woszczynski
duchowe50k
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
Krzysztof 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 Source
Laravel Poland MeetUp
JavaScript, Moduy
JavaScript, ModuyJavaScript, Moduy
JavaScript, Moduy
Mariusz Nowak
Infrastruktura Hiperkonwergentna na przykadzie platformy Nutanix - Marcin Ka...
Infrastruktura Hiperkonwergentna na przykadzie platformy Nutanix - Marcin Ka...Infrastruktura Hiperkonwergentna na przykadzie platformy Nutanix - Marcin Ka...
Infrastruktura Hiperkonwergentna na przykadzie platformy Nutanix - Marcin Ka...
jzielinski_pl
PLNOG 22 - Krzysztof Zaski - Praktyczne zastosowanie narzdzi NetDevOps
PLNOG 22 - Krzysztof Zaski - Praktyczne zastosowanie narzdzi NetDevOpsPLNOG 22 - Krzysztof Zaski - Praktyczne zastosowanie narzdzi NetDevOps
PLNOG 22 - Krzysztof Zaski - Praktyczne zastosowanie narzdzi NetDevOps
PROIDEA
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
PROIDEA
PLNOG22 - Piotr Stolarek - Bezpieczestwo u甜ytkowania platform usugowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczestwo u甜ytkowania platform usugowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczestwo u甜ytkowania platform usugowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczestwo u甜ytkowania platform usugowych 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 tobak2005
Tomasz Bak
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe Microservices
Konrad Kr坦l
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2
Natalia Stanko
Jak zbudowac aplikacje z wykorzystaniem funkcjonalnosci windows server 2016...
Jak zbudowac aplikacje z wykorzystaniem funkcjonalnosci windows server 2016...Jak zbudowac aplikacje z wykorzystaniem funkcjonalnosci windows server 2016...
Jak zbudowac aplikacje z wykorzystaniem funkcjonalnosci windows server 2016...
Lukasz Kaluzny
Micha Dec - Quality in Clouds
Micha Dec - Quality in CloudsMicha Dec - Quality in Clouds
Micha Dec - Quality in Clouds
kraqa
Pocaunek mierci
Pocaunek mierciPocaunek mierci
Pocaunek mierci
Divante
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
Micha 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坦tka
Marcin Gajda
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw Sobiecki
Grzegorz Bartman

More from Kamil Grabowski (7)

Jak wygra Igrzyska Chmury
Jak wygra Igrzyska ChmuryJak wygra Igrzyska Chmury
Jak wygra Igrzyska Chmury
Kamil Grabowski
Pora甜ka nie wchodzi w gr, czyli o niezawodnoci
Pora甜ka nie wchodzi w gr, czyli o niezawodnociPora甜ka nie wchodzi w gr, czyli o niezawodnoci
Pora甜ka nie wchodzi w gr, czyli o niezawodnoci
Kamil Grabowski
Docker
DockerDocker
Docker
Kamil Grabowski
RRDTool + RUBY DSL = RRD-FFI
RRDTool + RUBY DSL = RRD-FFIRRDTool + RUBY DSL = RRD-FFI
RRDTool + RUBY DSL = RRD-FFI
Kamil Grabowski
Jak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIXJak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIX
Kamil 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 ruchu
Kamil 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 Poland
Kamil Grabowski
Jak wygra Igrzyska Chmury
Jak wygra Igrzyska ChmuryJak wygra Igrzyska Chmury
Jak wygra Igrzyska Chmury
Kamil Grabowski
Pora甜ka nie wchodzi w gr, czyli o niezawodnoci
Pora甜ka nie wchodzi w gr, czyli o niezawodnociPora甜ka nie wchodzi w gr, czyli o niezawodnoci
Pora甜ka nie wchodzi w gr, czyli o niezawodnoci
Kamil Grabowski
RRDTool + RUBY DSL = RRD-FFI
RRDTool + RUBY DSL = RRD-FFIRRDTool + RUBY DSL = RRD-FFI
RRDTool + RUBY DSL = RRD-FFI
Kamil Grabowski
Jak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIXJak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIX
Kamil 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 ruchu
Kamil 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 Poland
Kamil Grabowski

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 kon鍖guracji rodowiska Disaster recovery Usugi w chmurze / OnDemand UW@IT 21.01.2015
  • 4. Dlaczego Ansible? Dokumentacja Agentless Minimum zale甜noci: management: python 2.6 node: python 2.4 Filozo鍖a 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. Przykad: test poczenia $ 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 dostpnych 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. Przykad: 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. Przykadowe moduy commands: command, raw, script, shell cloud: azure, digital_ocean, docker, ec2, rax database: (mysql|postgres)_(db|user), redis 鍖les: copy, fetch, 鍖le, linein鍖le, template, unarchive monitoring: nagios, monit, zabbix packaging: apt, gem, homebrew, macports, npm, pip, yum itd. source control: bzr, git, subversion system: cron, 鍖lesystem, group, mount, service, user i wiele wiele innych, plus bardzo atwo pisa swoje moduy UW@IT 21.01.2015
  • 11. Playbooks Struktura opisujca kon鍖guracj oraz po甜dany stan host坦w, kt坦rymi zarzdzamy 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, dziki czemu su甜 w prostych oraz skomplikowanych rodowiskach To wanie tu mo甜emy zobaczy cae pikno i 鍖lozo鍖 ansible! UW@IT 21.01.2015
  • 12. Przykad: 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. Przykad: 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/鍖les, 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 caych grup host坦w. W naszym application przypadku dla grup application oraz database database host_vars/ - Zmienne zdefiniowane tylko dla konkretnego app01 hosta library/ - Jeli korzystamy z wasnych 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 bdziemy przechowywa nasze chruby/ wszystkie role. Poprzez rol mo甜emy tu rozumie nginx/ funkcje jakie bdzie posiada nasz serwer. our-application/ Dla przykadu 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. Przykad: 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. Przykad: 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. Przykad: 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-dev9.3 UW@IT 21.01.2015
  • 20. Przykad: 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. Przykad: 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. Przykad: 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. Przykad: 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. Przykad: 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. Dzikuj za uwag Kamil Grabowski kamil.grabowski@gmail.com @y3ti Rebased Whitestream UW@IT 21.01.2015