Skip to content

Latest commit

 

History

History
160 lines (127 loc) · 4.68 KB

devops-cli.md

File metadata and controls

160 lines (127 loc) · 4.68 KB

A ideia de trazer um tema onde no cenário de devops seja utilizado python para facilitar o dia a dia seja do desenvolvedor ou até mesmo dos responsáveis pelas entregas dos times de DevOps. E para isso Vamos criar uma ferramentas de linha de comando (CLI) em Python para facilitar tarefas comuns de DevOps.

Ferramentas de Linha de Comando (CLI) em Python

Criar ferramentas de linha de comando em Python pode ser extremamente útil para automatizar tarefas repetitivas e complexas no ambiente DevOps. Aqui estão alguns passos e exemplos para te ajudar a começar:

1. Escolha da Biblioteca

  • Click: Uma biblioteca popular para criar interfaces de linha de comando em Python. É conhecida por sua simplicidade e facilidade de uso.
  • Argparse: Uma biblioteca padrão do Python para criar interfaces de linha de comando. É mais flexível, mas pode ser um pouco mais complexa de usar.

Referência:

2. Instalação

  • Para instalar o Click, você pode usar o pip:
    pip install click

Exemplo de Projeto Completo

Vamos criar um projeto completo que inclui várias funcionalidades úteis para DevOps:

  1. Criação de Arquivos de Configuração
  2. Gerenciamento de Servidores
  3. Deploy de Aplicações
  4. Monitoramento de Logs

Estrutura do Projeto

devops-cli/
│
├── devops_cli/
│   ├── __init__.py
│   ├── config.py
│   ├── server.py
│   ├── deploy.py
│   └── logs.py
│
├── setup.py
├── requirements.txt
└── README.md

config.py

import click

@click.command()
@click.option('--config-file', default='config.yaml', help='Nome do arquivo de configuração')
@click.option('--key', prompt='Chave', help='Chave de configuração')
@click.option('--value', prompt='Valor', help='Valor de configuração')
def create_config(config_file, key, value):
    """Cria um arquivo de configuração com a chave e valor especificados."""
    config_content = f"{key}: {value}\n"
    with open(config_file, 'w') as file:
        file.write(config_content)
    click.echo(f"Arquivo de configuração '{config_file}' criado com sucesso!")

server.py

import click
import paramiko

@click.command()
@click.option('--host', prompt='Host', help='Endereço do servidor')
@click.option('--user', prompt='Usuário', help='Nome de usuário')
@click.option('--command', prompt='Comando', help='Comando a ser executado')
def manage_server(host, user, command):
    """Gerencia servidores remotos via SSH."""
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(host, username=user)
    stdin, stdout, stderr = ssh.exec_command(command)
    click.echo(stdout.read().decode())
    ssh.close()

deploy.py

import click
import subprocess

@click.command()
@click.option('--repo', prompt='Repositório', help='URL do repositório Git')
@click.option('--branch', default='main', help='Branch a ser deployada')
def deploy_app(repo, branch):
    """Deploy de aplicações a partir de um repositório Git."""
    subprocess.run(['git', 'clone', '-b', branch, repo])
    click.echo(f"Aplicação deployada a partir do branch '{branch}' do repositório '{repo}'")

logs.py

import click

@click.command()
@click.option('--log-file', default='app.log', help='Nome do arquivo de log')
def monitor_logs(log_file):
    """Monitora arquivos de log."""
    with open(log_file, 'r') as file:
        click.echo(file.read())

__init__.py

import click
from .config import create_config
from .server import manage_server
from .deploy import deploy_app
from .logs import monitor_logs

@click.group()
def cli():
    pass

cli.add_command(create_config)
cli.add_command(manage_server)
cli.add_command(deploy_app)
cli.add_command(monitor_logs)

setup.py

from setuptools import setup, find_packages

setup(
    name='devops-cli',
    version='0.1',
    packages=find_packages(),
    install_requires=[
        'click',
        'paramiko',
    ],
    entry_points='''
        [console_scripts]
        devops-cli=devops_cli:cli
    ''',
)

requirements.txt

click
paramiko

Este projeto abrange várias funcionalidades úteis para DevOps, desde a criação de arquivos de configuração até o gerenciamento de servidores e o deploy de aplicações. Você pode expandir este projeto adicionando mais comandos e funcionalidades conforme necessário. Acredito que isso ficará bem interessante, mostrando o progresso ao longo do curso ou dos cursos.