ansible
Usando Ansible con OpenStack
Buscar..
Introducción
OpenStack es una plataforma de software de código abierto para cloud computing. Las instancias de Linux se pueden iniciar / detener de forma manual mediante la interfaz web gráfica o automatizadas gracias al módulo de nube openstack de ansible.
La configuración de ansible puede ser complicada, pero una vez bien configurada, su uso es realmente fácil y potente para las pruebas y el entorno de integración continua.
Parámetros
parámetros | Comentarios |
---|---|
anfitriones: localhost | Los comandos de OpenStack se inician desde nuestro host local |
recopilación de datos: falso | No necesitamos recopilar información en nuestro localhost |
auth_url: https://openstack-identity.mycompany.com/v2.0 | usar la URL V2.0 |
estado: presente | 'presente' / 'ausente' para crear / eliminar la instancia |
validate_certs: False | útil si https usa certificados autofirmados |
red: "{{nombre de red}}" | (Opcional) |
auto_ip: si | (Opcional) |
Observaciones
- Ponemos la URL de autenticación directamente en el libro de jugadas, no en una variable. La URL usada en vars debe ser escapada.
- Tenga cuidado con la versión URL de autenticación, use V2.0 en lugar de V3 en https://openstack-identity.mycompany.com/v2.0 .
- En archivos yml, tenga mucho cuidado al copiar / pegar desde el navegador. Comprueba dos veces los espacios según se tengan en cuenta.
- Más detalles en: http://docs.ansible.com/ansible/list_of_cloud_modules.html#openstack
Revisa tu versión Ansible
Verifique que estén instaladas las versiones correctas de software:
- ansible> = 2.0
- python> = 2.6
- módulo de sombra para python
$ansible --version
ansible 2.2.0.0
$python --version
Python 2.7.5
Instale 'sombrear' el componente de Python usado para pilotar OpenStack.
$pip install shade
Nota: si utiliza un proxy de la empresa, siempre es útil conocer el pip synthax correcto.
$pip install --proxy proxy_ip:proxy_port shade
Recopile información de OpenStack GUI para configurar Ansible
Nuestro inquilino openstack ya está establecido:
- un lan virtual da instancias de IP privada
- un enrutador virtual mapea IP pública a IP privada
- Se ha generado una clave de seguridad.
- Tenemos configuración de firewall por defecto para ssh y el puerto 80
- Podemos iniciar una instancia gracias a la interfaz web de OpenStack.
Deje recopilar toda la información necesaria de esta interfaz web.
Las informaciones de autenticación se pueden encontrar en el archivo openstack.rc. este archivo se puede descargar utilizando la interfaz web de OpenStack en [acceso y seguridad / acceso a API].
$cat openstack.rc
#!/bin/bash
# To use an OpenStack cloud you need to authenticate against the Identity
# service named keystone, which returns a **Token** and **Service Catalog**.
# The catalog contains the endpoints for all services the user/tenant has
# access to - such as Compute, Image Service, Identity, Object Storage, Block
# Storage, and Networking (code-named nova, glance, keystone, swift,
# cinder, and neutron).
#
# *NOTE*: Using the 2.0 *Identity API* does not necessarily mean any other
# OpenStack API is version 2.0. For example, your cloud provider may implement
# Image API v1.1, Block Storage API v2, and Compute API v2.0. OS_AUTH_URL is
# only for the Identity API served through keystone.
export OS_AUTH_URL=https://openstack-identity.mycompany.com/v3
# With the addition of Keystone we have standardized on the term **tenant**
# as the entity that owns the resources.
export OS_TENANT_ID=1ac99fef77ee40148d7d5ba3e070caae
export OS_TENANT_NAME="TrainingIC"
export OS_PROJECT_NAME="TrainingIC"
# In addition to the owning entity (tenant), OpenStack stores the entity
# performing the action as the **user**.
export OS_USERNAME="UserTrainingIC"
# With Keystone you pass the keystone password.
echo "Please enter your OpenStack Password: "
read -sr OS_PASSWORD_INPUT
export OS_PASSWORD=$OS_PASSWORD_INPUT
# If your configuration has multiple regions, we set that information here.
# OS_REGION_NAME is optional and only valid in certain environments.
export OS_REGION_NAME="fr"
# Don't leave a blank variable, unset it if it was empty
if [ -z "$OS_REGION_NAME" ]; then unset OS_REGION_NAME; fi
Obtenemos OS_AUTH_URL, OS_TENANT_NAME, OS_USERNAME.
Versión de la API de autenticación: OS_AUTH_URL
Cuidado con la versión de la API de autenticación. Por defecto v3 está activado, pero ansible necesita la v2.0. Obtenemos la url y configuramos V2.0 en lugar de V3: https://openstack-identity.mycompany.com/v2.0
Informaciones de VM
Cree una instancia utilizando la interfaz web de OpenStack y obtenga el nombre de la imagen, el sabor, la clave, la red y el grupo de seguridad.
Cree un archivo ./group_vars/all con toda la información necesaria.
$vi ./group_vars/all
# Authentication
AuthUserName: UserTrainingIC
AuthPassword: PasswordTrainingIC
TenantName: TrainingIC
# VM infos
ImageName: CentOS-7-x86_64-GenericCloud-1607
FlavorName: m1.1cpu.1gb
InfraKey: KeyTrainingIC
NetworkName: NetPrivateTrainingIC
SecurityGroup: default
Escribe el libro de jugadas ansible para crear la instancia.
Deje usar el comando 'os_server' del módulo 'Cloud' [ http://docs.ansible.com/ansible/os_server_module.html] . Las variables se definen en ./group_vars/all.
$vi launch_compute.yml
- name: launch a compute instance
hosts: localhost
gather_facts: False
tasks:
- name: Create and launch the VM
os_server:
auth:
auth_url: https://openstack-identity.mycompany.com/v2.0
username: "{{ AuthUserName }}"
password: "{{ AuthPassword }}"
project_name: "{{ TenantName }}"
state: present
validate_certs: False
name: "MyOwnPersonalInstance"
image: "{{ ImageName }}"
key_name: "{{ InfraKey }}"
timeout: 200
flavor: "{{ FlavorName }}"
security_groups: "{{ SecurityGroup }}"
network: "{{ NetworkName }}"
auto_ip: yes
$ ansible-playbook -s launch_compute.yml
[WARNING]: provided hosts list is empty, only localhost is available
PLAY [launch a compute instance] ***********************************************
TASK [Create and launch the VM] ************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0
Recopila información sobre nuestra nueva instancia.
Utilice el comando 'os_server_facts' del módulo 'Cloud' [ http://docs.ansible.com/ansible/os_server_module.html] . Las variables se definen en ./group_vars/all y el nombre de la instancia está en el servidor: "MyOwnPersonalInstance".
$vi get_compute_info.yml
- name: Get and print instance IP
hosts: localhost
gather_facts: False
tasks:
- name: Get VM infos
os_server_facts:
auth:
auth_url: https://openstack-identity.mygroup/v2.0
username: "{{ AuthUserName }}"
password: "{{ AuthPassword }}"
project_name: "{{ TenantName }}"
validate_certs: False
server: "MyOwnPersonalInstance"
- name: Dump all
debug:
var: openstack_servers
$ansible-playbook -s get_compute_info.yml
[WARNING]: provided hosts list is empty, only localhost is available
PLAY [Get and print instance IP] ***********************************************
TASK [Get VM IP] ***************************************************************
ok: [localhost]
TASK [Affichage] ***************************************************************
ok: [localhost] => {
"openstack_servers": [
{
"OS-DCF:diskConfig": "MANUAL",
"OS-EXT-AZ:availability_zone": "fr",
"OS-EXT-STS:power_state": 1,
"OS-EXT-STS:task_state": null,
[...]
"volumes": []
}
]
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0
Esto es muy detallado. Se muestra mucha información. Por lo general, solo se necesita la dirección IP para acceder a la nueva instancia a través de SSH.
Obtenga su nueva instancia de IP pública
En lugar de imprimir toda la información, imprimimos solo la dirección IP de la primera instancia cuyo nombre es "MyOwnPersonalInstance". Usualmente es todo lo que necesitamos.
$vi get_compute_ip.yml
- name: Get and print instance IP
hosts: localhost
gather_facts: False
tasks:
- name: Get VM infos
os_server_facts:
auth:
auth_url: https://openstack-identity.mycompany.com/v2.0
username: "{{ AuthUserName }}"
password: "{{ AuthPassword }}"
project_name: "{{ TenantName }}"
validate_certs: False
server: "MyOwnPersonalInstance"
- name: Dump IP
debug:
var: openstack_servers[0].interface_ip
Borra nuestra instancia
Para eliminar nuestra instancia, reutilice el comando os_server con toda la información de autenticación y simplemente reemplace 'estado: presente' por 'estado: ausente'.
$vi stop_compute.yml
- name: launch a compute instance
hosts: localhost
gather_facts: False
tasks:
- name: Create and launch the VM
os_server:
auth:
auth_url: https://openstack-identity.mygroup/v2.0
username: "{{ AuthUserName }}"
password: "{{ AuthPassword }}"
project_name: "{{ ProjectName }}"
state: absent
validate_certs: False
name: "{{ TPUser }}"
timeout: 200