3° Hangout OpenStack Brasil
Olá
Nesse artigo vou falar sobre CLI e REST API no OpenStack.
O objetivo é dar um “start” nesse assunto e mostrar o caminho das pedras para quem quiser fazer mais testes e estudar mais sobre o assunto.
O ambiente que utilizei foi o seguinte:
2 máquinas virtuais no Virtual Box, ambas com Ubuntu 14.04 LTS. Em uma delas fiz um deploy com Devstack, vamos chama-la de “nuvem” e na outra vamos instalar o client do OpenStack, vamos chama-la de “cliente”.
A instalação do cliente será feita através do PIP que é um script Python que já instala todas as dependências e a versão mais atualizada.
Mãos a obra
INSTALANDO DEPENDÊNCIAS PARA INSTALAR CLI EM UBUNTU 14.04 LTS
#apt-get update
#apt-get install -y python-pip
#apt-get install -y build-essential
#apt-get install -y python-dev libxslt1-dev libxml2-dev
INSTALANDO OPENSTACK CLI
#pip install python-openstackclient
Nesse momento o cliente OpenStack já está instalado, porém, para iniciarmos a interação com a plataforma através do CLI precisamos passar nossas credenciais e para isso podemos logar (odeio essa expressão) pelo Horizon, clicar na aba projetos -> acesso e segurança -> API -> Baixar arquivo RC.
Abra o arquivo, copie o conteúdo, crie um arquivo na sua máquina cliente:
#vim openstackrc.sh
Salve o arquivo e execute o seguinte comando:
#source openstackrc.sh
Agora nossas variáveis foram criadas com as credenciais necessárias para acessar nossa nuvem OpenStack, então vamos executar alguns comandos para verificar o ambiente.
Lista as instancias criadas
#nova list
Lista imagens disponíveis
#glance image-list
Lista grupos de segurança
#nova secgroup-list
Lista regras do grupo de segurança default
#nova secgroup-list-rules default
Lista pares de chaves
#nova keypair-list
Lista flavors
#nova flavor-list
Lista redes configuradas
#nova network-list
Mostra detalhes da rede de nome private
#nova network-show private
Agora vamos começar a criar os componentes para vincular à instância que vamos lançar mais adiante.
Os comandos abaixo criam um grupo de segurança com o nome secgroup1 e define para ele uma regra que permite acesso SSH de qualquer IP e outra que permite protocolo icmp de todos os tipos também de qualquer IP.
#nova secgroup-create secgroup1 “secgroup1″
#nova secgroup-add-rule secgroup1 tcp 22 22 0.0.0.0/0
#nova secgroup-add-rule secgroup1 icmp -1 -1 0.0.0.0/0
Agora podemos listar as regras do grupo de segurança secgroup1
#nova secgroup-list-rules secgroup1
Vamos criar um flavor de nome “flavor1”, vamos definir o ID 6, 64MB de memória, 1GB de disco e 1 CPU. Para isso executamos o comando abaixo:
#nova flavor-create flavor1 6 64 1 1
Podemos agora fazer o download de uma imagem do Cirros e criar essa imagem na nossa nuvem.
#wget http://download.cirros-cloud.net/0.3.1/cirros-0.3.1-x86_64-disk.img
#glance image-create –name=cirros_hangout –is-public=true –container-format=bare \
–disk-format=qcow2 –file cirros-0.3.1-x86_64-disk.img
#glance image-show cirros_criado
#glance image-delete cirros_criado
Agora o par de chaves
#ssh-keygen -t rsa -f chave.key
#nova keypair-add –pub-key chave.key.pub chave
Finalmente vamos lançar uma instância usando todos os componentes que criamos anteriormente, para isso executamos o comando:
#nova boot –flavor flavor1 –image cirros_hangout –security-groups secgroup1 –key-name chave instancia-cirros
#nova list
#nova show instancia-cirros
Nossa instância já foi criada, porém no ultimo comando podemos perceber que ela está vinculada apenas à nossa rede privada, isso não permite que nossa instância tenha acesso à rede externa, Internet e nem que possamos acessá-la de outro computador. Para resolvermos isso precisamos atribuir um floating IP à nossa instância.
#nova floating-ip-create
#nova add-floating-ip instancia-cirros <IP_CRIADO>
Agora, finalmente podemos conectar por SSH na nossa instância.
REST API
Agora vou mostrar alguns exemplos de comandos que podemos executar através da API REST do OpenStack.
Para exemplificar essa interação, utilizei um plugin do Google Chrome chamado Advanced REST Client.
LISTAR AS VERSÕES DE API
url: http://192.168.1.46:5000/
método: GET
cabeçalhos:
AUTENTICANDO
url: http://192.168.1.46:5000/v3/auth/tokens
método: POST
cabeçalhos: Content-type : application/json
body:
{
“auth”: {
“identity”: {
“methods”: [
“password”
],
“password”: {
“user”: {
“name”: “admin”,
“password”: “password”,
“domain”: {
“name”:”Default”
}
}
}
}
}
}
Nesse caso você substitui o “admin” e “password” pelo seu usuário e senha, o mesmo que utiliza para logar no Horizon.
VALIDANDO O TOKEN
url: http://192.168.1.46:5000/v3/auth/tokens
método: GET
cabeçalhos: X-Auth-Token: “token de serviço” (aqui vai o token de serviço)
X-Subject-Token: a70f063b60184a1fbd10eaa55d933705 – (aquio token retornado no commando aterior)
Obs: O token de serviço pode ser encontrado no arquivo /etc/keystone/keystone.conf no host onde está instalada a sua nuvem ou no arquivo local.conf que você criou ao fazer a implementação do Devstack.
CHECAR O TOKEN CRIADO
url: http://192.168.1.46:5000/v3/auth/tokens
método: HEAD
cabeçalhos: X-Auth-Token: “token de serviço”
X-Subject-Token: a70f063b60184a1fbd10eaa55d933705
LISTAR PROJETOS
url: http://192.168.1.46:5000/v3/projects
método: GET
cabeçalhos: X-Auth-Token: “token de serviço”
CRIAR NOVO PROJETO
url: http://192.168.1.46:5000/v3/projects
método: POST
cabeçalhos: X-Auth-Token: “token de serviço”
Content-type : application/json
Body:
{
“project”: {
“description”: “description1″,
“domain_id”: “default”,
“enabled”: true,
“name”: “MeuProjeto1″
}
}
CURL
Os mesmos comandos que executamos através do plugin do Google Chrome podem ser executados pelo console de uma estação Linux pelo comando “curl”.
LISTA VERSÕES DE APIS
#curl -i http://192.168.1.46:5000/ ; echo
AUTENTICA
#curl -i -H “Content-Type: application/json” -d ‘
{ “auth”: {
“identity”: {
“methods”: [“password”],
“password”: {
“user”: {
“name”: “admin”,
“domain”: { “id”: “default” },
“password”: “initd”
}
}
}
}
}’ \
LISTA PROJETOS
#curl -i -H “X-Auth-Token: token-de-serviço” http://192.168.1.46:5000/v3/projects ; echo
DOCUMENTAÇÃO
API Quick Start
Cloud Administrator Guide
Command line reference
API Complete Reference
Agradeço o Sandro do Conacloud que cedeu a matéria e estamos nesta empreitada difundindo a ferramenta. E a nossa parceria como sempre.
Em breve estaremos com uma solução pronta de backup com Openstack.
Último vídeo
Novidades via inbox
Fique por dentro no meu Boletim digital toda semana um conteúdo novo