uma breve introdução

ansible

felipe f. rocha

  1. Introdução
    • Configurações
    • Automação
  2. Fundamentos
    • Shell
    • YAML
  3. Ansible
    • Componentes
    •  
  4. Na prática (config. imagem)

Introdução

Para automatizar basta repetir uma vez?

Gerenciamento de Configuração

  1. Gerenciamento:
    • Complexidade
      • Processos
    • Escalabilidade
      • nº de máquinas
  2. Dificuldades:
    • Consistência
      • Performace
    • Padronização
      • Replicável

Introdução

Gerenciamento de Configuração

Ciclo de Vida

  1. Fases
    • Construir
      • Automatização
      • Escalabilidade
    • Monitorar
      • Acompanhamento
      • Responsabilizar
    • Manter
      • Disponibilidade
      • Consistencia
    • Aposentar
      • Descomissionar
      • Reciclar
  1. Melhores práticas
    • Classificar
      • Grupos
      • Gerenciamento
    • Templates
      • Configurações
      • Centralizados
      • Atualizados
    • Automatizar
      • atualização - sistemas anomalos
      • Reciclar

Gerenciamento de Configuração

Asset:  Server Configuration Item:  Server
Make
Model
CPU
RAM
OS
Etc.
Technical:
Technical attributes that are similar to Asset     attributes
Ownership:
Responsible Person
Purchase Date
Warranty Info
Location
Relationship:
Details about how this CI contributes to the delivery of a service which ultimately brings value to the
business

Automação

  1. Continuídade
    • Simplicidade
  2. Qualidade
    • Acurácia¹
    • Repetibilidade
  3. Envolve
    • Pessoas
    • Processos
    • Plataformas / ferramentas

Escalabilidade, Agilidade e consistência

Automação

  1. Identifique seu inventário
    • Casos de oportunidade
  2. Gerencie a evolução
    • Multiplos casos

O caminho para

Automação

Pré DevOps

  • Equipes (silos)
    • Desenv. feature
    • QA
    • Ops
    • Sustentação
  • Jogo da Culpa
    • Contra Ágil

Era DevOps

Automação

  1. Ferramenta
    • Uso focal
    • Poucos casos
    • Declarativa vs Procedural
  2. Plataformas
    • Gerenciamento
    • Escalabilidade
    • Multiplos casos

Ferramentas vs Plataformas

Automação

  1. TEEP
    • Tempo disponível
  2. OOE
    • Tempo de operação regular
  3. OEE
    • Tempo de funcionamento

Paralelo Com Engenharia

Fundamentos

Necessários

SHELL

  1. Instalar...
  2. Executar...
  3. Compilar...
  4. Configurar...
  5. Testar...
  6. Automatizar...
  7. Validar...
  8. Gerenciar um programa.

Que dirá sistemas, redes...

Bash, CMD, PWSH etc

YAML

  1. Configuar
  2. Automatizar
  3. Descrever

CI / CD

Kubernetes (tudo)

docker (docker compose)

IaC (AWS)

 

Linguagem de serialização de dados

Engenheiro de Yaml

--- # Comecei um documento yaml
chave: valor
estrutura:
  doisEspacos:
    - lista
    - item
    - objeto:
      depende:
        doObjeto: vai se estruturar #string são validas
        # Comentarios entre linhas
      estrura:
        - pode: variar
        - numero: 1
        - datas: 2020-12-12
--- # proximo documento
versao: 5
.ponteiro: &ponteiro
  conteudo: repetido
  
recurso: *ponteiro
---
invoice: 34843
date   : 2001-01-23
bill-to: &id001
  given  : Chris
  family : Dumars
  address:
    lines: |
      458 Walkman Dr.
      Suite #292
    city  : Royal Oak
    state   : MI
    postal  : 48046
ship-to: *id001
product:
  - sku     : BL394D
    quantity  : 4
    description : Basketball
    price     : 450.00
  - sku     : BL4438H
    quantity  : 1
    description : Super Hoop
    price     : 2392.00
tax  : 251.42
total: 4443.52
comments:
  Late afternoon is best.
  Backup contact is Nancy
  Billsmer @ 338-4338.

Ansible

finalmente...

ferramenta

  1. Sem agente (python)
  2. Segurança (conexão ssh)
  3. Orientado a objetivo
  4. Procedural (+/-)
  5. Limitação: Agendamento
  6. Arquitetura:
    • Modulos (& utilitários)
    • Plugins
    • Invertários
    • Playbook

 

Desde 2012...

Componentes

  1. Repósitorio (Ansible Galaxy)
  2. Scripts
  3. SSH
  4. Remove ao terminar
  5. Customizável
  6. Reutilização

Modulos & Utilitários

Componentes

  1. Repósitorio (Ansible Galaxy)
  2. Scripts
  3. SSH
  4. Remove ao terminar
  5. Customizável
  6. Reutilização
  7. Executa no destino

Modulos & Utilitários

Componentes

  1. Core Ansible
  2. Logging
  3. Transformação de dados
  4. Conxão com inventário
  5. Customizável
  6. Reutilização
  7. Executa no Nó de controle

Plugins

Componentes

  1. Arquivo (INI, YAML)
  2. Grupos
  3. Ativos
  4. Variáveis
  5. Outras fontes

Inventário

---
[webservers]
www1.example.com
www2.example.com

[dbservers]
db0.example.com
db1.example.com
[casa]
1x7.7x.11x.42  

[develop:children]
casa

[develop:vars]
ansible_connection=ssh
ansible_ssh_private_key_file=/home/felipe/.ssh/id_rsa
ansible_user=felipe 

Componentes

  1. Orquestração
  2. Funções
  3. Detalhamento
  4. Simplicidade

Playbook

---
- hosts: webservers
serial: 5 # update 5 machines at a time
roles:
- common
- webapp

- hosts: dbservers
roles:
- common
- content
---
- hosts: casa
  become: yes
  become_method: sudo
  remote_user: "{{ remote_user }}"
  gather_facts: no
  
  pre_tasks:
    - name: Atualizando Repository
      raw: apt-get update -y && apt-get full-upgrade -y

    - name: Distribuicao linux
      shell: lsb_release -cs
      register: distribuicao_linux
    
    - name: Codename Distribuição
      shell: lsb_release -is
      register: code_name_linux

  tasks:
    - name: Instalando o Apache and common files
      apt: "{{ packages }}"
      vars:
        packages:
        - apache2
        - python3
        - python3-pip
        - apt-transport-https 
        - ca-certificates 
        - curl 
        - gnupg-agent 
        - software-properties-common

    - name: Adicionando Docker GPG key
      apt_key: url=https://download.docker.com/linux/ubuntu/gpg
  
    - name: Adicionando Docker APT repository
      apt_repository:
        repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ distribuicao_linux.stdout |lower }} {{ code_name_linux.stdout }} stable
    
    - name: Instalando Docker
      apt: "{{ packages}}"
      vars:
        packages:
        - docker-ce
        - docker-ce-cli
        - containerd.io

Em prática

configuração de 'servidor' web

GITlab ci

variables:
  DOCKER_TLS_CERTDIR: ''
  DOCKER_DRIVER: overlay2

cache:
  paths:
    - .m2/repository

stages:
  - test
  - build
  - deploy

.set_configs: &set_configs
  # Setup tools
  - apk add --no-cache maven curl jq

test:
  stage: test
  image: openjdk:8-jdk-alpine
  before_script:
    - apk add --no-cache maven
  script: |
    mvn clean package -Dmaven.test.skip=true
    mvn test

build:
  stage: build
  image: openjdk:8-jdk-alpine
  dependencies:
    - test
  artifacts:
    paths:
      - app.jar
  before_script: *set_configs
  script: |
    # Build jar with param
    mvn package \
      -Dmaven.test.skip=true
    cp target/*.jar app.jar
  only:
    - master

deploy:
  stage: deploy
  image: docker:19.03.0
  services:
    - name: docker:19.03.0-dind
  dependencies:
    - build
  before_script: *set_configs

  script:
    - docker info
    - docker --version
    - docker build --build-arg JAR_FILE=app.jar -t "felipefrocha89/springboot-api" .
    - docker tag "felipefrocha89/springboot-api:latest" "felipefrocha89/springboot-api:${CI_COMMIT_SHA:0:8}"
  after_script:
    - docker login -u felipefrocha89 -p $PASSWORD
    - docker push "felipefrocha89/springboot-api:${CI_COMMIT_SHA:0:8}"
    - docker push "felipefrocha89/springboot-api:latest"
  only:
    - master

www.gitlab.com

CircleCi

---
version: 2
jobs:
  test:
    docker:
      - image: circleci/openjdk:8u252-jdk
    working_directory: ~/sample-springboot-api
    steps:
      - checkout
      - restore_cache:
          keys:
          - sample-springboot-api-{{ checksum "pom.xml" }}

      - run: 
          name: Dependency check
          command: mvn dependency:go-offline

      - save_cache:
          paths:
            - ~/.m2
          key: sample-springboot-api-{{ checksum "pom.xml" }}
        
      # package into a jar
      - run:
          name: Test 
          command: | 
            mvn clean package -Dmaven.test.skip=true
            mvn test

  build_deploy:
    docker:
      - image: circleci/openjdk:8u252-jdk

    working_directory: ~/sample-springboot-api
    
    steps:
      # git pull
      - checkout

      - run:
          name: Login to DockerHub
          command: echo $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin

          # Download and cache dependencies
      - restore_cache:
          keys:
          - sample-springboot-api-{{ checksum "pom.xml" }}

      - run: mvn dependency:go-offline

      - save_cache:
          paths:
            - ~/.m2
          key: sample-springboot-api-{{ checksum "pom.xml" }}
        
      # package into a jar
      - run: 
          name: Build Skiping Test
          command: mvn clean package -Dmaven.test.skip=true

      # build and push docker image to docker hub
      - run:
          name: Maven Plugin Docker Image
          command:  mvn clean compile jib:build -Dimage=felipefrocha89/springboot-api:$CIRCLE_BUILD_NUM

      # store raw contents of src code
      - store_artifacts:
          path: target/classes
          destination: sample-springboot-api

workflows:
  version: 2
  test:
    jobs:
      - test:
          filters:
            branches:
              ignore:
                - master
  build_deploy:
    jobs:              
      - test
      - build_deploy:
          filters:
            branches:
              ignore:
                - /feature.*/
          requires:
            - test
          

www.circleci.com

REferências

Links uteis

Fontes

  1. https://microsoft.github.io/PartsUnlimited/pandp/200.1x-PandP-CICDQuickstartwithVSTS.html
  2. https://microsoft.github.io/PartsUnlimitedMRP/pandp/200.1x-PandP-LocustTest.html
  3. https://microsoft.github.io/PartsUnlimitedMRP/pandp/200.1x-PandP-PythonCI.html

  4. https://circleci.com/blog/tag/tutorials/

  5. https://docs.gitlab.com/ee/ci/

  6. https://martinfowler.com/articles/continuousIntegration.html

  7. https://martinfowler.com/bliki/ContinuousDelivery.html

  8. https://medium.com/faun/types-of-application-deployment-36772c0adf46

  9. https://opensource.com/article/17/5/colorful-deployments

  10. https://www.thoughtworks.com/continuous-integration

  11. https://www.thoughtworks.com/continuous-delivery

Links

Felipe F. Rocha

felipe.rocha@dtidigital.com

 

 

OBRIGADO!!!

Ansible, uma breve introdução

By Felipe Fonseca Rocha

Ansible, uma breve introdução

Este breve deck é sobre #Ansible, passando apenas os conceitos básicos e fluxo de utilização. O foco apenas habilitar os interessados a começarem a automatizar configurações de servidores e imagens.

  • 147