Différences entre versions de « Deployer vos instances avec Ansible »

De Ikoula Wiki
Jump to navigation Jump to search
(Page créée avec « == 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 Ans... »)
 
Ligne 1 : Ligne 1 :
 
== Description ==
 
== Description ==
  
Nous allons voir comment déployer rapidement une ou plusieurs instance(s) Cloud IKOULA One via l'outils Ansible
+
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.
 
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.

Version du 12 septembre 2018 à 11:13

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