ansible
Utiliser Ansible avec OpenStack
Recherche…
Introduction
OpenStack est une plate-forme logicielle open source pour le cloud computing. Les instances Linux peuvent être lancées / arrêtées manuellement à l'aide de l'interface Web graphique ou automatisées grâce au module cloud openstack d'ansible.
La configuration d'ansible peut être délicate, mais une fois bien configurée, son utilisation est vraiment simple et efficace pour les tests et l'environnement d'intégration continue.
Paramètres
paramètres | commentaires |
---|---|
hôtes: localhost | Les commandes OpenStack sont lancées depuis notre localhost |
gather_facts: Faux | Nous n'avons pas besoin de rassembler des informations sur notre localhost |
auth_url: https://openstack-identity.mycompany.com/v2.0 | utiliser l'URL V2.0 |
état: présent | 'present' / 'absent' pour créer / supprimer l'instance |
validate_certs: Faux | utile si https utilise des certificats auto-signés |
réseau: "{{NetworkName}}" | (optionnel) |
auto_ip: oui | (optionnel) |
Remarques
- Nous mettons l'URL d'authentification directement dans le playbook, pas dans une variable. L'URL utilisée dans vars doit être échappée.
- Attention, avec la version d’authentification URL, utilisez V2.0 au lieu de V3 dans https://openstack-identity.mycompany.com/v2.0 .
- Dans les fichiers yml, soyez très prudent lorsque vous copiez / collez du navigateur. Vérifiez deux fois les espaces pris en compte.
- Plus de détails sur: http://docs.ansible.com/ansible/list_of_cloud_modules.html#openstack
Vérifiez votre version d'Ansible
Vérifiez que les versions correctes du logiciel sont installées:
- ansible> = 2.0
- python> = 2.6
- module d'ombre pour python
$ansible --version
ansible 2.2.0.0
$python --version
Python 2.7.5
Installez 'shade' le composant python utilisé pour piloter openstack.
$pip install shade
Remarque: si vous utilisez un proxy d'entreprise, il est toujours utile de connaître le bon synt syntax
$pip install --proxy proxy_ip:proxy_port shade
Rassembler des informations à partir de l'interface graphique OpenStack pour configurer Ansible
Notre client OpenStack est déjà configuré:
- un réseau virtuel donne des instances IP privées
- un routeur virtuel mappe l'adresse IP publique en IP privée
- une clé de sécurité a été générée
- nous avons une configuration de pare-feu par défaut pour ssh et le port 80
- nous sommes en mesure de lancer une instance grâce à l'interface Web OpenStack
Laissez rassembler toutes les informations nécessaires à partir de cette interface Web.
Les informations d'authentification peuvent être trouvées dans le fichier openstack.rc. Ce fichier peut être téléchargé à l'aide de l'interface Web OpenStack dans [access and security / API Access].
$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
Nous obtenons OS_AUTH_URL, OS_TENANT_NAME, OS_USERNAME.
Version de l'API d'authentification: OS_AUTH_URL
Attention à la version de l'API d'authentification. Par défaut, v3 est activé, mais ansible a besoin de la v2.0. Nous obtenons l'URL et définissons V2.0 au lieu de V3: https://openstack-identity.mycompany.com/v2.0
Informations sur la VM
Créez une instance à l'aide de l'interface Web OpenStack et obtenez le nom de l'image, de la saveur, de la clé, du réseau et du groupe de sécurité.
Créez un fichier ./group_vars/all avec toutes les informations nécessaires.
$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
Écrivez le playbook Ansible pour créer l'instance
Soit la commande 'os_server' du module 'Cloud' [ http://docs.ansible.com/ansible/os_server_module.html] . Les variables sont définies dans ./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
Rassembler des informations sur notre nouvelle instance
Utilisez la commande 'os_server_facts' du module 'Cloud' [ http://docs.ansible.com/ansible/os_server_module.html] . Les variables sont définies dans ./group_vars/all et le nom de l'instance est dans le serveur: "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
C'est très verbeux. Beaucoup d'informations sont affichées. Habituellement, seule l'adresse IP est nécessaire pour accéder à la nouvelle instance via SSH.
Obtenez votre nouvelle adresse IP publique
Au lieu d'imprimer toutes les informations, nous imprimons uniquement l'adresse IP de la première instance dont le nom est "MyOwnPersonalInstance". C'est généralement tout ce dont nous avons besoin.
$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
Supprimer notre instance
Pour supprimer notre instance, réutilisez la commande os_server avec toutes les informations d'authentification et remplacez simplement 'state: present' par 'state: absent'.
$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