Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introdução ao Ansible - Meetup São Paulo
Search
Ricardson
October 13, 2015
Technology
0
720
Introdução ao Ansible - Meetup São Paulo
Apresentação no primeiro Meetup de Ansible em São Paulo
Ricardson
October 13, 2015
Tweet
Share
Other Decks in Technology
See All in Technology
Snowflake Summit 2025全体振り返り / Snowflake Summit 2025 Overall Review
mtpooh
2
440
KubeCon + CloudNativeCon Japan 2025 Recap by CA
ponkio_o
PRO
0
250
Model Mondays S2E03: SLMs & Reasoning
nitya
0
240
PHP開発者のためのSOLID原則再入門 #phpcon / PHP Conference Japan 2025
shogogg
4
930
asken AI勉強会(Android)
tadashi_sato
0
140
Delegating the chores of authenticating users to Keycloak
ahus1
0
130
Node-RED × MCP 勉強会 vol.1
1ftseabass
PRO
0
180
モバイル界のMCPを考える
naoto33
0
360
解析の定理証明実践@Lean 4
dec9ue
1
200
SpringBoot x TestContainerで実現するポータブル自動結合テスト
demaecan
0
120
rubygem開発で鍛える設計力
joker1007
2
270
Liquid Glass革新とSwiftUI/UIKit進化
fumiyasac0921
0
300
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
7
500
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
24k
Navigating Team Friction
lara
187
15k
Optimizing for Happiness
mojombo
379
70k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
GraphQLとの向き合い方2022年版
quramy
49
14k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
720
Statistics for Hackers
jakevdp
799
220k
Automating Front-end Workflow
addyosmani
1370
200k
Embracing the Ebb and Flow
colly
86
4.7k
Transcript
Introdução ao Ansible - Ansible Meetup São Paulo. © Ricardson
Williams 1
➜ ~ > whoami — SysAdmin por mais de 15
anos. — DevOps há 1 ano. — Instrutor Linux. /ricardson /ansible-Sao-Paulo © Ricardson Williams 2
Ansible foi criado por Michael Dehaan com a ideia principal
de ser simples e poderosa. © Ricardson Williams 3
© Ricardson Williams 4
➜ Podemos usar Ansible para..... — Gerenciamento Configuração — Provisionamento
— Deploy — Alternativa a Capistrano/Fabric — Quem usa??? © Ricardson Williams 5
➜ Simplicidade… — Sintax simples (YAML) — Segue uma ordenação
— Pode-se rodar a partir de uma desktop/servidor/laptop (Fácil de configurar) — Módulos — Utilizam JSON para se comunicar. — Podem ser desenvolvidos nas principais linguagens Ruby, Python, Shell, etc. — Playbook intuitivo. — Filosofia KISS1(é um princípio geral que valoriza a simplicidade) 1 KISS © Ricardson Williams 6
➜ Agentless — SSH para transporte: Seguro, Rápido e Simples.
— Não necessita “deploy” de agente. — Descentralização. © Ricardson Williams 7
➜ Seguro — Utiliza SSH. — Não necessita abertura de
portas. — Não necessita de codigo "extra" para administrar. — Não instala “daemons” vulneráveis nos Servidores/ Nodes © Ricardson Williams 8
➜ Idempotência… O comando/task(playbook) será aplicado apenas quando precisar ser
aplicado. © Ricardson Williams 9
Instalando Ansible — RHEL/CentOS/Fedora: ↪ $ sudo yum install ansible
— Python Pip: ↪ $ pip install ansible — Mac: ↪ $ brew install ansible — Deb/Ubuntu: ↪ sudo apt-add-repository ppa:ansible/ansible ↪ sudo apt-get update ↪ sudo apt-get install ansible © Ricardson Williams 10
➜ Inventário Simples INI (/etc/ansible/hosts) podemos utilizar o "-i" e
indicar outro arquivo de inventário2. [vagrant] 192.168.60.4 [production] www.myapp.com www2.myapp.com www3.myapp.com ansible_ssh_port=3522 [production:vars] http_port=80 ansible_ssh_user=ec2-user 2 Intro Inventory © Ricardson Williams 11
➜ Módulos Mais de 300 módulos3 embutidos. — apt/yum/portge/zypper (S.O)
=> Instalação de pacotes. — pip/npm/cpanm (Linguagens) => Instalação de Lib/pacotes. — command/shell => Execução de comandos shell/scripts. — copy => Copia de arquivos (origem/destino). — file => Criação de diretórios, link simbólico, troca de permissões. — service => Gerenciamento de Serviços (Liga/Desliga/Habilita). — docker/docker_image => Gerenciamento de imagens e containers docker. — git/subversion => Suporte as ferramentas SCM. 3 Modules by Category © Ricardson Williams 12
➜ Facts Informações sobre máquinas/nodes como nome/versão, ips, etc, podem
ser utilizadas em playbooks. $ ansible localhost -m setup localhost | success >> { "ansible_facts": { "ansible_all_ipv4_addresses": [ "10.0.2.15" ], "ansible_distribution": "CentOS", ”ansible_distribution_major_version": “7”, "ansible_distribution_release": "Core", "ansible_distribution_version": "7.1.1503", "ansible_domain": "localdomain", } } $ ansible localhost -m setup -a ‘filter=ansible_distribution’ localhost | success >> { "ansible_facts": { "ansible_distribution": "CentOS" }, "changed": false } © Ricardson Williams 13
➜ Ad-hoc4 — Esta funcionalidade o Michael "pegou emprestado" do
FUNC (Fedora Unified Network Controller). — O Ad-hoc nos permite executar comandos nas maquinas remotas sem a necessidade de se logar. $ ansible <host/group> -m MODULE-NAME -a MODULE-ARGS 4 AD-Hoc Intro © Ricardson Williams 14
//Ping da maquina local $ ansible localhost -m ping //Reinicia
todas as maquina de 10 em 10 $ ansible all -s -m command -a “/sbin/reboot” -f 10 //Instala pacote "ntp" $ ansible production -s -m yum -a “name=ntp state=present” //Inicia o serviço e ja habilitando o "start" $ ansible production -s -m service -a "name=ntpd state=started enabled=yes" //Remove pacote apache $ ansible production -s -m yum -a “name=httpd state=absent” //??? $ ansible app2 -s -m raw -a "pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/5.7/packages//amd64/python-2.7.9p0.tgz" © Ricardson Williams 15
Ad-hoc… $ ansible vagrant -s -m shell -a "uname -a"
192.168.60.4 | success | rc=0 >> Linux app1 3.10.0-229.4.2.el7.x86_64 #1 SMP Wed May 13 10:06:09 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 192.168.60.5 | success | rc=0 >> OpenBSD app2 5.7 GENERIC#825 amd64 $ ansible vagrant -s -m shell -a "ssh -V localhost" 192.168.60.4 | success | rc=0 >> OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013 192.168.60.5 | success | rc=0 >> OpenSSH_6.8, LibreSSL 2.1 © Ricardson Williams 16
Playbook5 — Playbook utiliza o formato YAML simplificado a ideia
é não se tornar linguagem de programação e sim uma sintaxe simples de configuração. — Playbook é composto por um ou mais “plays” 5 Playbooks Intro © Ricardson Williams 17
Exemplo de playbook 1 --- - hosts: vagrant gather_facts: yes
sudo: true vars: packages_base: - vim - telnet - git - epel-release tasks: - name: Install Packages yum: name={{ item }} state=latest with_items: - “{{ packages_base }}” when: ansible_os_family == ‘RedHat’ ##Facts - name: Upgrade all packages yum: name=* state=latest when: ansible_os_family == ‘RedHat’ ##Facts tags: pkg_upgrade © Ricardson Williams 18
Organizando melhor o playbook (roles) Para melhor organização dos nossos
playbooks criamos o que chamamos de roles6 que seria basicamente a estrutura abaixo. Por padrão o Ansible sempre executa/ procura o arquivo mail.yml. 6 Playbooks Roles | Ansible Roles © Ricardson Williams 19
site.yml (Playbook que vai chamar a "role" init) roles/ `--
init (Nome da minha “role”) |-- task (playbook) | `-- main.yml `-- vars (variável) `-- main.yml © Ricardson Williams 20
Criando site.yml --- - hosts: vagrant sudo: true roles: -
init © Ricardson Williams 21
roles/init/tasks/main.yml --- - name: Install Packages yum: name={{ item }}
state=latest with_items: - “{{ packages_base }}” when: ansible_os_family == ‘RedHat’ - name: Upgrade all packages yum: name=* state=latest when: ansible_os_family == ‘RedHat’ tags: pkg_upgrade © Ricardson Williams 22
roles/init/vars/main.yml --- packages_base: - vim - telnet - git -
epel-release © Ricardson Williams 23
Executando o playbook $ ansible-playbook site.yml PLAY [vagrant] **************************************************************** GATHERING
FACTS *************************************************************** ok: [192.168.60.4] TASK: [init | Install Packages] ********************************** changed: [192.168.60.4] => (item=vim,git,net-tools,trace route,mc,links,epel-release) TASK: [init | Upgrade all packages] ****************************** changed: [192.168.60.4] PLAY RECAP ******************************************************************** 192.168.60.4 : ok=3 changed=2 unreachable=0 failed=0 © Ricardson Williams 24
Executando o playbook (Idempotência) $ ansible-playbook site.yml PLAY [vagrant] ****************************************************************
GATHERING FACTS *************************************************************** ok: [192.168.60.4] TASK: [init | Install Packages] ********************************** ok: [192.168.60.4] => (item=vim,git,net-tools,trace route,mc,links,epel-release) TASK: [init | Upgrade all packages] ****************************** ok: [192.168.60.4] PLAY RECAP ******************************************************************** 192.168.60.4 : ok=3 changed=0 unreachable=0 failed=0 © Ricardson Williams 25
Playbook - Tags $ ansible-playbook site.yml --tags pkg_upgrade PLAY [vagrant]
**************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.60.4] TASK: [init | Upgrade all packages] ******************************************* changed: [192.168.60.4] PLAY RECAP ******************************************************************** 192.168.60.4 : ok=2 changed=1 unreachable=0 failed=0 © Ricardson Williams 26
Playbook - Tags (Idempotência) $ ansible-playbook site.yml --tags pkg_upgrade PLAY
[vagrant] **************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.60.4] TASK: [init | Upgrade all packages] ******************************************* ok: [192.168.60.4] PLAY RECAP ******************************************************************** 192.168.60.4 : ok=2 changed=0 unreachable=0 failed=0 © Ricardson Williams 27
Idempotência??? Quando criamos uma task temos que garantir que seja
repetível e que seja executado apenas se necessário, vejamos abaixo um exemplo de task não idempotente. --- - name: Copy .zshrc template command: cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc remote_user: ryan sudo: false TASK: [Copy .zshrc template] ************************************************** changed: [104.131.3.142] © Ricardson Williams 28
Idempotência Com a opção "creates" o comando só será executado
se o arquivo ".zshrc" não existir. --- - name: Copy .zshrc template command: creates="~/.zshrc" cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc remote_user: ryan sudo: false TASK: [Copy .zshrc template] ************************************************** skipping: [104.131.3.142] © Ricardson Williams 29
© Ricardson Williams 30