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