ngine_io.exoscale_compute
Ansible Role : Exoscale Compute
:warning: OBSOLETE: Exoscale ne supportera plus l'API Cloudstack après le 1er mai 2024.
Voir l'annonce.
Gère les ressources de calcul sur Exoscale Cloud.
Variables du rôle
# API à utiliser
exoscale__api_key:
exoscale__api_secret:
exoscale__api_endpoint: https://api.exoscale.ch/v1
# Zone à utiliser
exoscale__zone: ch-dk-2
# Groupes de sécurité à créer
exoscale__security_groups:
- name: default
rules:
- protocol: tcp
type: ingress
cidr: 0.0.0.0/0
start_port: 22
end_port: 22
# Groupes d'affinité à créer (par défaut [])
exoscale__affinity_groups:
- name: my cluster group
# Réseaux à créer (par défaut [])
exoscale__networks:
- name: private-network
start_ip: 10.23.12.100
end_ip: 10.23.12.150
netmask: 255.255.255.0
# Clés SSH à télécharger
exoscale__ssh_key_default_name: "{{ lookup('env', 'USER') }}@{{ lookup('pipe', 'hostname') }}"
exoscale__ssh_key_default_pubkey: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
exoscale__ssh_keys:
- name: "{{ exoscale__ssh_key_default_name }}"
pubkey: "{{ exoscale__ssh_key_default_pubkey }}"
# Instance de serveur
exoscale__server_name: "{{ inventory_hostname_short }}"
exoscale__server_template: "Rocky Linux 8 (Green Obsidian) 64-bit"
exoscale__server_service_offering: Small
exoscale__server_root_disk_size: 10
exoscale__server_networks: "{{ omit }}"
exoscale__server_ip_to_networks: "{{ omit }}"
exoscale__server_security_groups:
- default
exoscale__server_affinity_groups: []
exoscale__server_ssh_key: "{{ exoscale__ssh_key_default_name }}"
exoscale__server_user_data: |
#cloud-config
manage_etc_hosts: false
fqdn: "{{ inventory_hostname }}"
exoscale__server_state: present
exoscale__server_allow_reboot: false
Dépendances
Voir requirements.txt
pour les dépendances des bibliothèques python.
Exemples
Playbook
Un playbook typique pourrait ressembler à cela.
---
- name: Provisionner des serveurs Cloud
hosts: all
serial: 5
gather_facts: false
roles:
- role: ngine_io.exoscale_compute
delegate_to: localhost
post_tasks:
- name: Attendre l'accès SSH
delegate_to: localhost
wait_for:
host: "{{ ansible_host }}"
port: 22
timeout: 60
- name: Attendre la fin de cloud-init
wait_for:
host: "{{ ansible_host }}"
path: /var/lib/cloud/instance/boot-finished
timeout: 600
Configurations courantes
Configurations courantes typiques dans un fichier de groupe de niveau supérieur (par exemple group_vars/all.yml
) pour des groupes de sécurité et règles supplémentaires, groupes d'affinité et réseaux :
# fichier : group_vars/all.yml
# API : identifiants
exoscale__api_key: EXO...
exoscale__api_secret: ...$
# Zone : ch-dk-2 par défaut
exoscale__zone: ch-gva-2
# Modèle : selon les modèles utilisés, un utilisateur par défaut est créé avec une clé SSH publique
ansible_user: rockylinux
exoscale__server_template: "Rocky Linux 8 (Green Obsidian) 64-bit 2021-08-25-13bb54"
# Activer IPv6
exoscale__server_ipv6_enabled: true
# Groupes de sécurité : créer ces groupes de sécurité.
# REMARQUE : Les groupes de sécurité existants avec des noms différents ne seront pas touchés.
# REMARQUE : Les règles existantes supplémentaires dans les groupes ci-dessous ne seront pas touchées.
exoscale__security_groups:
- name: proxy
rules:
- protocol: tcp
type: ingress
cidr: 0.0.0.0/0
port: 443
- protocol: tcp
type: ingress
cidr: 0.0.0.0/0
port: 80
- protocol: tcp
type: ingress
cidr: 1.2.3.4/32
start_port: 8000
end_port: 8999
- name: mqtt
rules:
- port: 1883
- port: 8883
# Groupes d'affinité : créer ces groupes.
exoscale__affinity_groups:
- name: cassandra
- name: proxy
# Créer un réseau privé pour l'accès backend.
exoscale__networks:
- name: my private net
start_ip: 10.23.12.100
end_ip: 10.23.12.150
netmask: 255.255.255.0
Configuration des instances via Group / Host Vars
Supposons un inventaire similaire à ce qui suit :
[proxy]
proxy1.example.com
proxy2.example.com
[cassandra]
cassandra1.example.com
cassandra2.example.com
cassandra3.example.com
Assurez-vous que toutes les instances proxy utilisent une offre différente et le groupe de sécurité supplémentaire proxy :
#fichier : group_vars/proxy.yml
# Offre grande (par défaut Small)
exoscale__server_service_offering: Medium
# Assigner des groupes de sécurité aux instances (par défaut : [default])
exoscale__server_security_groups:
- default
- proxy
# Attacher un réseau privé
exoscale__server_networks:
- my private net
Assurez-vous que toutes les instances cassandra se trouvent sur différents hôtes matériels :
#fichier : group_vars/cassandra.yml
# Assigner le groupe d'affinité à toutes les instances
exoscale__server_affinity_groups: cassandra
# Utiliser du matériel lié à l'UC
exoscale__server_service_offering: CPU-extra-large
# Attacher un réseau privé
exoscale__server_networks:
- my private net
:information_source: CONSEIL : obtenir une liste de toutes les offres
cs listServiceOfferings | jq --raw-output '.serviceoffering[].name'
.
Voir https://github.com/exoscale/cs/ comment utiliser la bibliothèque utilisée en arrière-plan en CLI.
Licence
MIT
Informations sur l'auteur
René Moser (@resmo)