Deployer vos instances avec Ansible
Description
Nous allons voir comment déployer rapidement des instance(s) Cloud IKOULA One via l'outils Ansible
Tout d'abord vous devrez installer Ansible puis le module "cs_instance" permettant d'utiliser l'API de Cloud Ikoula One, si ce n'est pas déjà fait et disposer d'un compte Cloud IKOULA One.
Ansible est disponible pour la plupart des distribution GNU/Linux, MacOS mais est aussi utilisable via Cygwin par exemple sous Microsoft Windows.
Vous trouverez plus d'informations sur l'installation de Ansible au lien suivant : https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
Déploiement d'une instance en une commande avec Ansible
Vous devrez tout d'abord créer et renseigner/adapter le fichier de configuration ".cloudstack.ini" du module "cs_instance" de Ansible :
[CloudIkoulaOne] endpoint = https://cloudstack.ikoula.com/client/api key = <clé API de votre utilisateur/compte Cloud IKOULA One> secret = <clé privée de votre utilisateur/compte Cloud IKOULA One> timeout = 30
Ensuite il suffit de lancer cette commande en adaptant les valeurs des paramètres (nom de votre instance, nom du réseau, etc.) et les paramètres en eux-mêmes (si vous avez/voulez utliser ou non une paire de clé SSH par exemple) :
ansible -i "localhost," -c local all -m cs_instance -a "name=<Nom de la VM> display_name=<Nom de la VM> state=present template=<ID du template voulu> api_region=CloudIkoulaOne zone=<Nom de la zone voulu> service_offering=<ID de l’offre de calcul voulu > networks=<Nom du réseau existant voulu> ssh_key=<Nom de la paire de clés ssh CIO existante>"
Voici un exemple ainsi que le retour de son exécution :
$ ansible -i "localhost," -c local all -m cs_instance -a "name=Debian9advz1 display_name=Debian9adv1 state=present template=8d54645f-3173-4780-af7b-544c100f18d5 api_region=CloudIkoulaOne zone=EU-FR-IKDC1-Z1-ADV service_offering=efe74f9c-f59f-4e25-965b-e4644935da49 networks=My-Network-Z1 ssh_key=MY_SSHKEY"
localhost | SUCCESS => {
"account": "ikoula",
"affinity_groups": [],
"changed": true,
"created": "2018-09-12T10:05:00+0200",
"default_ip": "10.1.1.176",
"display_name": "Debian9adv1",
"domain": "ROOT",
"hypervisor": "XenServer",
"id": "3c60acc9-1480-48bc-ab78-934f0e607d6c",
"instance_name": "i-1079-67026-VM",
"name": "Debian9advz1",
"password": "KYqrT3h28qOs",
"password_enabled": true,
"security_groups": [],
"service_offering": "t1.micro",
"ssh_key": "MY_SSHKEY",
"state": "Running",
"tags": [],
"template": "Debian 9 - Minimal - 64bits",
"user_data": "",
"zone": "EU-FR-IKDC1-Z1-ADV"
}
Dans cet exemple, nous déployons une instance Debian 9 en zone avancée (EU-FR-IKDC1-Z1-ADV), utilisant l'offre de calcul "t1.micro" dans notre réseau nommé "My-Network-Z1" avec notre paire de clés SSH nommée "MY_SSHKEY"
Pour voir l'ensemble des paramètres utilisables et d'autres exemples, vous pouvez utiliser le ansible-doc du module "cs_instance" :
$ ansible-doc cs_instance
> CS_INSTANCE (/usr/lib/python2.7/site-packages/ansible/modules/cloud/cloudstack/cs_instance.py)
Deploy, start, update, scale, restart, restore, stop and destroy instances.
Options (= is mandatory):
- account
Account the instance is related to.
[Default: None]
- affinity_groups
Affinity groups names to be applied to the new instance.
[Default: []]
- api_http_method
HTTP method used.
(Choices: get, post)[Default: get]
- api_key
API key of the CloudStack API.
[Default: None]
- api_region
Name of the ini section in the `cloustack.ini' file.
[Default: cloudstack]
- api_secret
Secret key of the CloudStack API.
[Default: None]
- api_timeout
HTTP timeout.
[Default: 10]
- api_url
URL of the CloudStack API e.g. https://cloud.example.com/client/api.
[Default: None]
- cpu
The number of CPUs to allocate to the instance, used with custom service offerings
[Default: None]
- cpu_speed
The clock speed/shares allocated to the instance, used with custom service offerings
[Default: None]
- disk_offering
Name of the disk offering to be used.
[Default: None]
- disk_size
Disk size in GByte required if deploying instance from ISO.
[Default: None]
...
Note : la sortie de la commande est volontairement tronquée du fait de sa longueur.
Déploiement d'une instance avec un playbook Ansible
De la même façon que ci-dessus vous devez tout d'abord créer et renseigner/adapter le fichier de configuration ".cloudstack.ini" du module "cs_instance" de Ansible :
[CloudIkoulaOne] endpoint = https://cloudstack.ikoula.com/client/api key = <clé API de votre utilisateur/compte Cloud IKOULA One> secret = <clé privée de votre utilisateur/compte Cloud IKOULA One> timeout = 30
Ensuite il suffit de créer un fichier de playbook (extension yml / format YAML), comme ci-dessous, en adaptant les valeurs des paramètres (nom de votre instance, nom du réseau, etc.) et les paramètres en eux-mêmes (si vous avez/voulez utliser ou non une paire de clé SSH par exemple) :
$ cat deploy_instance_adv.yml
---
- hosts: all
connection: local
user: root
tasks:
- name: 'Create Debian instance in Cloud IKOULA One with Ansible Playbook'
cs_instance:
name: "<Nom de la VM>"
state: present
display_name: "<Nom de la VM>"
template: "<ID du template CIO voulu>"
api_region: "CloudIkoulaOne"
zone: "<Nom de la zone voulu>"
service_offering: "<ID de l’offre de calcul voulu >"
networks: "<Nom du réseau existant voulu>"
ssh_key: "<Nom de la paire de clés ssh CIO existante>"
...
Une fois les paramètres et leurs valeurs adapté(e)s, voici un exemple d'exécution du playbook (adaptez le nom de votre fichier playbook au besoin):
$ ansible-playbook -i "localhost," -c local deploy_instance_adv.yml PLAY [all] ******************************************************************************************************************************************************************************************************************************************************************** TASK [Gathering Facts] ******************************************************************************************************************************************************************************************************************************************************** ok: [localhost] TASK [Create Debian instance in Cloud IKOULA One with Ansible Playbook] ******************************************************************************************************************************************************************************************************************************** changed: [localhost] PLAY RECAP ******************************************************************************************************************************************************************************************************************************************************************** localhost : ok=2 changed=1 unreachable=0 failed=0