×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Let’s automate stuff with Ansible symfony Live Berlin 2015 https://www.dropbox.com/s/wmsqf8xg74bevy6/53H.jpg @Sgoettschkes
Slide 2
Slide 2 text
It started with bare metal ...
Slide 3
Slide 3 text
… and then the cloud happened
Slide 4
Slide 4 text
“99 servers in the cloud, 99 servers Take one down, tear it apart, 98 servers in the cloud” Unknown
Slide 5
Slide 5 text
No content
Slide 6
Slide 6 text
Ansible
Slide 7
Slide 7 text
Ansible
Slide 8
Slide 8 text
Ansible
Slide 9
Slide 9 text
Installation pip, brew, apt or From source (It’s just Python!)
Slide 10
Slide 10 text
Inventory $ cat hosts [webservers] 127.0.0.101 ansible_ssh_port=2222 127.0.0.102 ansible_ssh_user=admin [dbservers] 127.0.0.103 ansible_sudo=true
Slide 11
Slide 11 text
Inventory $ cat hosts [webservers] 127.0.0.101 ansible_ssh_port=2222 127.0.0.102 ansible_ssh_user=admin [dbservers] 127.0.0.103 ansible_sudo=true
Slide 12
Slide 12 text
Ad-Hoc commands $ ansible all -m ping 127.0.0.101 | success >> { "changed": false, "ping": "pong" } 127.0.0.102 | success >> { "changed": false, "ping": "pong" }
Slide 13
Slide 13 text
Ad-Hoc commands $ ansible all -m copy -a "src=/etc/hosts dest=/tmp/hosts" $ # or $ ansible all -m command -a "echo $TERM"
Slide 14
Slide 14 text
Tasks
Slide 15
Slide 15 text
Tasks $ cat tasks.yml --- - name: update apt cache apt: update_cache=yes - name: install vim apt: pkg=vim state=latest - name: install composer shell: curl -sS https://getcomposer.org/installer | php chdir=/usr/local/src creates=/usr/local/src/composer.phar
Slide 16
Slide 16 text
Modules $ cat tasks.yml --- - name: update apt cache apt: update_cache=yes - name: install vim apt: pkg=vim state=latest - name: install composer shell: curl -sS https://getcomposer.org/installer | php chdir=/usr/local/src creates=/usr/local/src/composer.phar
Slide 17
Slide 17 text
Tasks $ cat tasks.yml --- - name: update apt cache apt: update_cache=yes - name: install vim apt: pkg=vim state=latest - name: install composer shell: curl -sS https://getcomposer.org/installer | php chdir=/usr/local/src creates=/usr/local/src/composer.phar
Slide 18
Slide 18 text
Tasks $ cat tasks.yml --- - name: update apt cache apt: update_cache=yes - name: install vim apt: pkg=vim state=latest - name: install composer shell: curl -sS https://getcomposer.org/installer | php chdir=/usr/local/src creates=/usr/local/src/composer.phar
Slide 19
Slide 19 text
Tasks $ cat tasks.yml --- - name: update apt cache apt: update_cache=yes - name: install vim apt: pkg=vim state=latest - name: install composer shell: curl -sS https://getcomposer.org/installer | php chdir=/usr/local/src creates=/usr/local/src/composer.phar
Slide 20
Slide 20 text
Tasks $ cat tasks.yml --- - name: update apt cache apt: update_cache=yes - name: install vim apt: pkg=vim state=latest - name: install composer shell: curl -sS https://getcomposer.org/installer | php chdir=/usr/local/src creates=/usr/local/src/composer.phar
Slide 21
Slide 21 text
Tasks $ cat tasks.yml --- - name: install packages apt: pkg={{ item }} state=latest with_items: - emacs - vim
Slide 22
Slide 22 text
Tasks $ cat tasks.yml --- - name: install packages apt: pkg={{ item }} state=latest with_items: - emacs - vim when: ansible_os_family == “Debian”
Slide 23
Slide 23 text
Modules - apt, homebrew, pacman, … - and pip, gem, npm, composer, … - copy, file, template, … - PostgreSQL, MySQL, MongoDB, redis, … - git, hg, bzr, subversion, ... - Monitoring, Network, Cloud, ...
Slide 24
Slide 24 text
Handlers $ cat handlers.yml - name: reload nginx service: name=nginx state=reloaded - name: restart nginx service: name=nginx state=restarted
Slide 25
Slide 25 text
Handlers $ cat handlers.yml - name: reload nginx service: name=nginx state=reloaded - name: restart nginx service: name=nginx state=restarted
Slide 26
Slide 26 text
Handlers $ cat tasks.yml --- - name: install nginx apt: pkg=nginx state=latest notify: restart nginx
Slide 27
Slide 27 text
Templates $ cat templates/nginx.conf.j2 user {{ nginx_user }}; worker_processes {{ nginx_worker_processes }}; pid /var/run/nginx.pid;
Slide 28
Slide 28 text
Variables $ cat templates/nginx.conf.j2 user {{ nginx_user }}; worker_processes {{ nginx_worker_processes }}; pid /var/run/nginx.pid;
Slide 29
Slide 29 text
Facts $ cat group_vars/webservers.yml nginx_user: www-data nginx_worker_processes: "{{ ansible_processor_cores * ansible_processor_count }}"
Slide 30
Slide 30 text
Roles ● Grouping tasks ● Separated ● e.g. nginx, python, nodejs, mongodb, ...
Slide 31
Slide 31 text
Putting it all together https://www.dropbox.com/s/en9t0dmeanbi2du/188H.jpg
Slide 32
Slide 32 text
Folder structure $ ls -a . . .. dbservers.yml environments .git .gitignore group_vars host_vars README.md requirements.yml roles site.yml webservers.yml
Slide 33
Slide 33 text
Inventory files $ ls -a . . .. dbservers.yml environments .git .gitignore group_vars host_vars README.md requirements.yml roles site.yml webservers.yml
Slide 34
Slide 34 text
Inventory files $ cat environments/staging/inventory 127.0.0.101 ansible_ssh_user=deploy ansible_sudo=true [webservers] 127.0.0.101 [dbservers] 127.0.0.101
Slide 35
Slide 35 text
Group vars $ cat environments/staging/group_vars/all.yml --- env: staging domain_www: staging.example.com domain_static: static.staging.example.com
Slide 36
Slide 36 text
Group vars $ ls -a . . .. dbservers.yml environments .git .gitignore group_vars host_vars README.md requirements.yml roles site.yml webservers.yml
Slide 37
Slide 37 text
Group vars $ cat group_vars/all.yml --- apt_packages: - acl - curl - git - tmux - vim
Slide 38
Slide 38 text
site.yml $ ls -a . . .. dbservers.yml environments .git .gitignore group_vars host_vars README.md requirements.yml roles site.yml webservers.yml
Slide 39
Slide 39 text
site.yml $ cat site.yml --- - hosts: all roles: - apt - iptables - locale - include: webservers.yml - include: dbservers.yml
Slide 40
Slide 40 text
webservers.yml $ ls -a . . .. dbservers.yml environments .git .gitignore group_vars host_vars README.md requirements.yml roles site.yml webservers.yml
Slide 41
Slide 41 text
webservers.yml $ cat webservers.yml --- - hosts: webservers roles: - nginx - php
Slide 42
Slide 42 text
roles $ ls -a . . .. dbservers.yml environments .git .gitignore group_vars host_vars README.md requirements.yml roles site.yml webservers.yml
Slide 43
Slide 43 text
roles $ ls -a . . .. dbservers.yml environments .git .gitignore group_vars host_vars README.md requirements.yml roles site.yml webservers.yml $ ls roles apt iptables locale nginx php
Slide 44
Slide 44 text
roles . .. dbservers.yml environments .git .gitignore group_vars host_vars README.md requirements.yml roles site.yml webservers.yml $ ls roles apt iptables locale nginx php $ ls roles/php/ defaults LICENSE meta README.md tasks templates
Slide 45
Slide 45 text
Roles $ ls roles apt iptables locale nginx php $ ls roles/php/ defaults LICENSE meta README.md tasks templates $ ls roles/php/tasks main.yml php.yml
Slide 46
Slide 46 text
Roles $ cat roles/php/tasks/main.yml --- - include: php.yml tags=php
Slide 47
Slide 47 text
Roles $ cat roles/php/tasks/php.yml --- - name: install php packages apt: default_release={{ php_default_release }} pkg={{ item }} state=latest with_items: - php5-cli - php5-common
Slide 48
Slide 48 text
Roles - name: configure cli php.ini ini_file: dest=/etc/php5/cli/php.ini option={{ item.key }} section={{ item.section }} value={{ item.value }} with_items: php_config_cli
Slide 49
Slide 49 text
Roles $ cat roles/php/defaults/main.yml --- php_default_release: stable php_config_cli: - { section: date, key: date.timezone, value: UTC } - { section: PHP, key: memory_limit, value: “{{ (ansible_memtotal_mb / 100) * 50}}M” }
Slide 50
Slide 50 text
Let’s go $ ansible-playbook -i environment/staging/inventory site.yml $ ansible-playbook -i environment/staging/inventory \ webservers.yml $ ansible-playbook -i environment/staging/inventory \ -t apt site.yml
Slide 51
Slide 51 text
Let’s go TASK: [apt | install nginx] ok: [127.0.0.101] TASK: [php | install php packages] changed: [127.0.0.101] => (item=php5-cli,php5-common) TASK: [locale | copy localtime template] skipped: [127.0.0.101]
Slide 52
Slide 52 text
There is more! http://publicdomainarchive.com/wp-content/uploads/2015/03/public-domain-images-free-stock-photos-autumn.jpg
Slide 53
Slide 53 text
Ansible 2.0 “Ansible 2 is coming, and it’s going to be awesome!” James Cammarata (Director of Ansible Core Engineering)
Slide 54
Slide 54 text
IT Automation https://www.dropbox.com/s/x8b4iqm82di9abr/186H.jpg
Slide 55
Slide 55 text
https://www.dropbox.com/s/6z5aiwa8l09g2pa/86H.jpg
Slide 56
Slide 56 text
https://www.dropbox.com/s/6z5aiwa8l09g2pa/86H.jpg Please rate this talk: https://joind.in/talk/view/15074