Introduction to DevOps with Ansible
Introduction toDevOps with
Ansible
Matteo Magnihttp://bit.ly/devops-ansible
In informatica DevOps (dalla contrazione inglese didevelopment, "sviluppo", e operations, qui simile a
"messa in produzione" o "deployment") è unametodologia di sviluppo del software che punta allacomunicazione, collaborazione e integrazione tra
sviluppatori e addetti alle operations dell'informationtechnology (IT)
[wikipedia]
Con il termine “Metodologie Agili” ci si riferisce aduna serie di metodologie di sviluppo softwareispirate dal “Manifesto Agile”, impiegate per
superare i limiti emersi dal modello tradizionale “acascata” (waterfall).
[wikipedia]
Tra le pratiche Agili una è quella di avere frequentirilasci di nuove versioni del software:
An Agile team frequently releases its product intothe hands of end users, listening to feedback,
whether critical or appreciative..
[wikipedia]
Rilasci
RilasciIn molte aziende però i rilasci applicativi sono eventi ad alto impatto e
rischio, coinvolgendo più gruppi di lavoro.
RilasciIn molte aziende però i rilasci applicativi sono eventi ad alto impatto e
rischio, coinvolgendo più gruppi di lavoro.L’obiettivo è mettere in produzione nuove feature o correzioni di bug il
più velocemente possibile e con il minor numero di rischi è moltodifficile
I dev spingono per mettere subito online le nuove feature
I dev spingono per mettere subito online le nuove featurei QA inoltrano
I dev spingono per mettere subito online le nuove featurei QA inoltrano
gli operation sono molto prudenti perché sanno che toccarel’infrastruttura potrebbe creare problemi.
Come possiamo fare?
Sviluppare e testare in ambienti simili a quelli di produzione
Sviluppare e testare in ambienti simili a quelli di produzioneDistribuire con processi automatici, ripetibili e affidabili
Sviluppare e testare in ambienti simili a quelli di produzioneDistribuire con processi automatici, ripetibili e affidabili
Monitorare e convalidare la qualità operativa
Sviluppare e testare in ambienti simili a quelli di produzioneDistribuire con processi automatici, ripetibili e affidabili
Monitorare e convalidare la qualità operativaAmplificare e accelerare il ritorno di feedback da parte degli utenti
Continuous integration etesting
Continuous delivery edeployment
Continuous operations
Continuous assessment
L’utilizzo di pratiche DevOps spesso parte dalbisogno di poter creare, gestire, condividere ereplicare configurazioni di ambienti complessi
Se pensiamo ad una infrastruttura web comead esempio lo stack LAMP in una soluzione
dove abbiamo più ambienti
Se pensiamo ad una infrastruttura web comead esempio lo stack LAMP in una soluzione
dove abbiamo più ambienti
Development
Se pensiamo ad una infrastruttura web comead esempio lo stack LAMP in una soluzione
dove abbiamo più ambienti
DevelopmentTesting
Se pensiamo ad una infrastruttura web comead esempio lo stack LAMP in una soluzione
dove abbiamo più ambienti
DevelopmentTestingStaging
Se pensiamo ad una infrastruttura web comead esempio lo stack LAMP in una soluzione
dove abbiamo più ambienti
DevelopmentTestingStaging
Production
Quando devo aggiungere una nuova dipendenza di infrastruttura?
Quando devo aggiungere una nuova dipendenza di infrastruttura?Un nuovo pacchetto?
Quando devo aggiungere una nuova dipendenza di infrastruttura?Un nuovo pacchetto?Un nuovo servizio?
developer
La metodologia DevOps aiuta le aziendenella gestione dei rilasci, standardizzando gli
ambienti di sviluppo.
Le aziende con problemi di automazione deirilasci solitamente hanno già un processoautomatico in essere ma lo vorrebbero più
flessibile e controllabile.
Idealmente tale automazione potrebbeessere utilizzata anche da risorse non
operative (non appartenenti all'ITOperations) su ambienti non di produzione.
In questo modo gli sviluppatori hanno adisposizione un maggiore controllo degli
ambienti, dando all'infrastruttura una visionepiù incentrata sull'applicazione.[wikipedia]
Come sviluppatori siamo abituati a gestirediverse dipendenze tra componenti software
(classi, package e librerie)
Ma anche le infrastrutture hanno delledipendenze!
Come sviluppatori siamo abituati a gestirediverse dipendenze tra componenti software
(classi, package e librerie)
Ma anche le infrastrutture hanno delledipendenze!
File e Directory
Come sviluppatori siamo abituati a gestirediverse dipendenze tra componenti software
(classi, package e librerie)
Ma anche le infrastrutture hanno delledipendenze!
File e DirectoryUtenti
Come sviluppatori siamo abituati a gestirediverse dipendenze tra componenti software
(classi, package e librerie)
Ma anche le infrastrutture hanno delledipendenze!
File e DirectoryUtenti
Software e loro configurazione
Possiamo usare un software per il controllodi versione e sfruttarne tutte le potenzialità.
Git, Mercurial, Svn
serve qualcuno che esegua le operazioni ripetitive
serve qualcuno che esegua le operazioni ripetitive
Ansiblehttps://www.ansible.com
"Deploy apps. Manage systems. Crush complexity.Ansible helps you build a strong foundation for DevOps."
The name "Ansible" references a fictional instantaneous hyperspacecommunication system (as featured in Orson Scott Card's Ender'sGame (1985), and originally invented by Ursula K. Le Guin for her
novel Rocannon's World (1966)).
debian
$ deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main$ deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main$ sudo apt-get update$ sudo apt-get update$ sudo apt-get install ansible$ sudo apt-get install ansible
fedora
$ sudo dnf -y install ansible$ sudo dnf -y install ansible
Pip
$ pip install ansible$ pip install ansible
Dipendenze
Python
Dipendenze
Pythonssh
Ansible works by connecting to your nodes and pushing out smallprograms, called "Ansible modules" to them. These programs arewritten to be resource models of the desired state of the system.Ansible then executes these modules (over SSH by default), and
removes them when finished.
YAML
YAML: YAML Ain't Markup LanguageWhat It Is: YAML is a human friendly data serialization standard for all
programming languages.yaml.org
galaxy_info:galaxy_info:author: Matteo Magniauthor: Matteo Magnidescription: just another geekdescription: just another geeklicense: license Apache 2.0license: license Apache 2.0platforms:platforms: - name: Debian - name: Debian versions: versions: - jessie - jessiecategories:categories: - system - systemdependencies: []dependencies: []
Ansible glossary
Ansible glossaryInventory
Ansible glossaryInventory
Tasks
Ansible glossaryInventory
TasksVariables
Ansible glossaryInventory
TasksVariables
Roles
Ansible glossaryInventory
TasksVariables
RolesHandlers
Ansible glossaryInventory
TasksVariables
RolesHandlersPlaybook
Inventory[databases][databases]stp.ilbonzo.net ansible_ssh_user=scottstp.ilbonzo.net ansible_ssh_user=scott
[webservers][webservers]aic.ilbonzo.net ansible_ssh_user=layneaic.ilbonzo.net ansible_ssh_user=layne
Tasks- name: add group devel- name: add group devel group: name=devel state=present group: name=devel state=present- name: Apache | install apache- name: Apache | install apache apt: name=apache2 state=latest apt: name=apache2 state=latest
Variablesuser: vagrantuser: vagrantgroup: www-datagroup: www-datadocument_root: /var/www/officina-linux.itdocument_root: /var/www/officina-linux.it
Handlers- name: restart postgresql- name: restart postgresql service: name=postgresql state=restarted service: name=postgresql state=restarted- name: stop postgresql- name: stop postgresql service: name=postgresql state=stopped service: name=postgresql state=stopped- name: start postgresql- name: start postgresql service: name=postgresql state=started service: name=postgresql state=started
Roles╰╰──➤➤ ls -l database ls -l database total 0 total 0 drwxr-xr-x 10 bonzo staff 340 Dec 6 10:45 files drwxr-xr-x 10 bonzo staff 340 Dec 6 10:45 files drwxr-xr-x 10 bonzo staff 340 Dec 6 10:45 handlers drwxr-xr-x 10 bonzo staff 340 Dec 6 10:45 handlers drwxr-xr-x 10 bonzo staff 340 Dec 6 10:45 tasks drwxr-xr-x 10 bonzo staff 340 Dec 6 10:45 tasks drwxr-xr-x 5 bonzo staff 170 Dec 6 10:45 templates drwxr-xr-x 5 bonzo staff 170 Dec 6 10:45 templates
Playbook- hosts: all- hosts: all sudo: true sudo: true handlers: handlers: - include: handlers/main.yml - include: handlers/main.yml pre_tasks: pre_tasks: - name: update apt cache - name: update apt cache shell: apt-get update shell: apt-get update - name: upgrade apt - name: upgrade apt shell: apt-get upgrade -y shell: apt-get upgrade -y roles: roles: - webserver - webserver - database - database- include: nfs.yml- include: nfs.yml
Ansible Galaxy
Virtualizzare può essere d'aiuto per sperimentare enon solo
Ci serve qualcuno che ci metta a disposizione semplicemente delleVirtual Machine.
Ci serve qualcuno che ci metta a disposizione semplicemente delleVirtual Machine.
Potrebbe essere un qualsiasi sistema di cloud.
Ci serve qualcuno che ci metta a disposizione semplicemente delleVirtual Machine.
Potrebbe essere un qualsiasi sistema di cloud.In sviluppo possiamo usare Vagrant
Vagrant"Create and configure lightweight, reproducible, and portable
development environments."vagrantup.com
ProviderVirtualbox
ProviderVirtualbox
VMware
ProviderVirtualbox
VMware
Hyper-V
ProviderVirtualbox
VMware
Hyper-V
Docker
Playbackisn'tsupportedonthisdevice.
AnsibleMinecraft
0:00/2:30
https://youtu.be/ICAlhy4EI44
fonti
ansible.comdevops.comgithub.com
fonti
ansible.comdevops.comgithub.com
devopsreactions.tumblr.com
fonti
ansible.comdevops.comgithub.com
devopsreactions.tumblr.comlosviluppatore.it
fonti
ansible.comdevops.comgithub.com
devopsreactions.tumblr.comlosviluppatore.it
buildings.it
Questions?
Thanks toofficina-linux.it