Cloud Stack API
Transcrição
Cloud Stack API
Gerenciamento de recursos da Internuvem através de API Como utilizar a API do CloudStack e o aplicativo CloudMonkey no gerenciamento de recursos e automatização de ações na Internuvem Stênio Firmino – USP/STI/Internuvem – [email protected] Agenda CloudStack API CloudMonkey • • • • • • • • • • • • Requisitos básicos Guia de referência da API Chamadas API Interpretando as respostas Paginação de respostas Comandos assíncronos Funcionalidades Instalação/Configuração Uso Formato dos resultados Perfis Tarefas assíncronas CloudStack API Informações básicas de como utilizar a API CloudStack em atividades básicas e avançadas oferecidas pela Internuvem Requisitos básicos • Para utilizar a API CloudStack na Internuvem é necessário: – – – – – A URL utilizada para enviar as chamadas de API Uma API key e uma secret que irão identificar a conta Familiaridade com consultas HTTP GET/POST Conhecimento de XML/JSON Conhecimento de linguagens de programação capazes de gerar requisições HTTP. Ex: PHP, Java, Python… – http://docs.cloudstack.apache.org/ • Permissões de acesso – Root Admin – Domain Admin – User Recuperando a API key e Secret 2 3 1 4 Recuperando a API key e Secret Clicar para gerar chaves Clicar para trocar chaves Guia de referência da API • • • • Documentação online com todos comandos da API Comandos marcados com (A) são assíncronos Request Parameters e Response Tags http://cloudstack.apache.org/api.html ROOT ADMIN DOMAIN ADMIN USER Chamada API https://internuvem.usp.br/client/api?apiKey=ifNzuw 2bOYDcf1MEhmu38ufkUxIpYKc5ybRQANNF3eiOJ8CwlubHxsQtv7cptahHKArZ2NVOXdlBq8Q7CZcow&command=l istUsers&listall=true&response=json&signature=tRNl S%2FocWMnhRGk7jy3V49h4%2Bkw%3D HTTP GET/POST API request Cliente Internuvem API response 1 2 Chamada API 1. https://internuvem.usp.br/client/api? 2. apiKey=ifNzuw2bOYDcf1MEhmu38ufkUxIpYKc5ybR QANNF3eiOJ8CwlubHxsQtv7cptahHKArZ2NVOXdlBq8Q7CZcow 3. &command=listUsers 4. &listall=true 5. &response=json 6. &signature=tRNlS%2FocWMnhRGk7jy3V49h4%2Bkw %3D 1. URL base / api path 2. API key 3. Comando 4. Parâmetro(s) do comando 5. Formato resposta 6. Assinatura Como assinar uma chamada API • Hash em SHA-1 (HMAC-SHA1) – Formatado em Base64 – URL encoded • Secret key • Parâmetros da API – URL encoded – Caracteres minúsculos – Ordenados alfabeticamente • Incorporar o hash como parâmetro (signature) da URL Como assinar uma chamada API • URL Base – https://internuvem.usp.br/client/api • API Key – ifNzuw2bOYDcf1MEhmu38ufkUxIpYKc5ybR • Comando – listUsers • Parâmetro – listall=True • Formato resposta – json Como assinar uma chamada API • Gerar a URL da chamada API command=listUsers&listall=True&apikey=ifNzuw2bOYDcf1MEhmu38ufkUxIpYKc5ybR&response=json • Converter em minúsculas command=listusers&listall=true&apikey=ifnzuw2boydcf1mehmu38ufkuxipykc5ybr&response=json • Ordernar os parâmetros da URL apikey=ifnzuw2boydcf1mehmu38ufkuxipykc5ybr&command=listusers&listall=true&response=json • Gerar o hash da URL HMAC-SHA1 Base64 URL encoded t8ma4%2Bbx0q3bUnIUUJhSmalEuFo%3D • Acrescentar na URL https://internuvem.usp.br/client/api?command=listUsers&listall=True&apikey=ifNzuw2bOYDcf1MEh mu38ufkUxIpYKc5ybR&response=json&signature=t8ma4%2Bbx0q3bUnIUUJhSmalEuFo%3D 6 Interpretando as respostas JSON XML 3 4 Dicas de segurança • Replay attacks – Utilizar HTTPS sempre – Utilizar o parâmetro ”expire” para limitar o tempo de validade da chamada • DOS attacks – Limitar o API request rate – Paginar as respostas (máximo de registros por página) Paginando as respostas • Repostas com 500 registros (máximo). • Consultas com mais registros terão respostas paginadas • Ex: Uma consulta de listagem de máquinas virtuais com 720 registros. A resposta será retornada em 2 páginas (500 + 220) • Parâmetros da consulta – listVirtualMachines – pagesize=500 – page=2 5 Comandos assíncronos • • • • Comandos potencialmente demorados para completar a tarefa Evita bloquear a sessão enquanto se espera o termino da tarefa Identificados com (A) no documento de chamadas de API Imediatamente retorna o ID do job para acompanhamento do estado da execução da tarefa (queryAsyncJobResult) • Estado da tarefa – 0 : Tarefa em execução – 1 : Tarefa terminada com sucesso – 2 : Tarefa terminada com FALHA na execução (jobresultcode) SF2 Slide 16 SF2 Criar um script para mostrar a execução com sucesso de um job assincrono e uma FALHA. Lembrar do job result Stenio Firmino; 22/02/2016 Não sei programar, mas... Gostaria de poder usar API sem precisar aprender uma linguagem de programação. Queria automatizar algumas tarefas rotineiras sem precisar criar um programa para isso Queira trabalhar com uma quantidade grande de VMs sem precisar programar Calma, ainda há alguma chance, desde que... • Saiba o básico de shell script como bash ou powershell • Tenha familiaridade com linhas de comando • Consiga trabalhar com processadores de texto como sed, awk, cut, grep e comandos semelhantes no powershell CloudMonkey Aplicativo em Python para gerenciamento de recursos da Internuvem por linhas de comando Funcionalidades • • • • • • • • • Ferramenta CLI escrita em Python Utilizável como comando CLI ou shell interativo Múltiplos perfis CLI auto complete Busca reversa Teclas de atalho EMACS Uso de ”pipes” entre comandos Suporta API assíncrona permitindo ou não o bloqueio do terminal Formato de resposta em tabela, json, csv, xml Instalação e configuração • Requisitos – Python 2.6 – readline, requests, Pygments, prettytable, argcomplete • Instalação pip install cloudmonkey pip install --upgrade cloudmonkey • Arquivos de configuração ~/.cloudmonkey/config ~/.cloudmonkey/history ~/.cloudmonkey/log Configuração inicial • Por padrão, o perfil local é criado ao executar o cloudmonkey # cloudmonkey (local) > set url https://internuvem.usp.br (local) > set apikey dhabsu73-38373... (local) > set secret uehfb4y47373j3... (local) > sync 512 APIs discovered and cached Uso Autocomplete Help > <tab><tab> > list <tab><tab> > list users <tab><tab> > > > > > > help list help list users ?list ?list users list users --help list users -h Gerenciamento de perfil set profile <nome> [<nome>] url = http://localhost:8080/client/api username = admin password = password apikey = secretkey = timeout = 3600 expires = 600 Formato dos resultados • Formato padrão > set display default > list users filter=username,email count = 1 user: email = [email protected] username = api-admin Formato dos resultados • Formato tabela > set display table > list users filter=username,email count = 1 user: +-----------+-------------------+ | username | email | +-----------+-------------------+ | api-admin | [email protected] | +-----------+-------------------+ Formato dos resultados • Formato json > set display json > list users filter=username,email { "count": 1, "user": [ { "email": "[email protected]", "username": "api-admin” } ] } Formato dos resultados • Formato xml > set display xml > list users filter=username,email <?xml version="1.0" ?> <CloudStack-geinfo-admin> <count>1</count> <user> <item> <username>api-admin</username> <email>[email protected]</email> </item> </user> </CloudStack-geinfo-admin> Formato dos resultados • Formato csv > set display csv > list users filter=username,email username,email api-admin,[email protected] Tarefas assíncronas • No CloudMonkey, chamadas de API assíncronas, por padrão, bloqueia o terminal set asyncblock false query asyncjobresult jobid=<job-id> ! Demonstração Atividades avançadas que podem ser executadas utilizando API CloudStack Demonstração - Atividades avançadas • Criação e destruição de múltiplas VMs ! • Troca de template básico de VMs 8 • Adição e remoção de VMs no balanceamento de carga 9 • Adição e remoção de discos em múltiplas VMs 7