Deployer vos instances avec Ansible
Description
Nous allons voir comment déployer rapidement une ou plusieurs 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