Implementarea instanțelor cu Ansible

De la Ro Ikoula wiki
Jump to navigation Jump to search

fr:Deployer vos instances avec Ansible
Acest articol este rezultatul unei traduceri automate efectuate de către software-ul. Puteți vizualiza sursa articol aici.

ru:Развертывание ваших экземпляров с помощью Ansible pl:Wdrażaj instancje za pomocą Ansible ja:Ansibleによるインスタンスのデプロイ zh:用Ansible部署你的实例 de:Stellen Sie Ihre Instanzen mit Ansible bereit nl:Implementeer uw instanties met Ansible it:Distribuire le tue istanze con Ansible pt:Implante as suas instâncias com Ansible es:Despliegue de sus instancias con Ansible en:Deploy your instances with Ansible

Descriere

Vom vedea cum să implementăm rapid instanțele IKOULA One Cloud prin intermediul instrumentului Ansible.

Mai întâi va trebui să instalați Ansible (https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html) apoi modulul "cs_instance" (poate fi instalat prin "pip install cs" cf. https://docs.ansible.com/ansible/2.6/modules/cs_instance_module.html) permițându-vă să folosiți API-ul Cloud Ikoula One, dacă nu ați făcut-o deja și dacă aveți un cont Cloud IKOULA One.

Ansible este disponibil pentru majoritatea distribuțiilor GNU/Linux, MacOS, dar poate fi utilizat și prin Cygwin, de exemplu, în Microsoft Windows.


Implementarea unei instanțe printr-o singură comandă cu Ansible

Mai întâi va trebui să creați și să completați/adaptați fișierul de configurare ".cloudstack.ini" al modulului "cs_instance" din 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

Apoi, trebuie doar să executați această comandă, adaptând valorile parametrilor (numele instanței, numele rețelei etc.) și parametrii în sine (de exemplu, dacă aveți/voiați să utilizați o pereche de chei SSH sau nu):

ansible -i "localhost," -c local all -m cs_instance -a "name=<Nom de la VM> display_name=<Nom de la VM>  state=present template=< Nom entre simples quotes ou ID du template voulu> api_region=CloudIkoulaOne zone=<Nom de la zone voulu> service_offering=< Nom 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>"

unde "<Nom de l’offre de calcul voulu >" este alegerea lui :

"t1.pico" (1/2 Core CPU with 512MB RAM and 100Mbps NIC)
"t1.micro" (1 Core CPU with 1GB RAM and 100Mbps NIC)
"m1.small" (1 Core CPU with 1.7GB RAM and 100Mbps NIC)
"m1.medium" (2 Cores CPU with 3.8GB RAM and 100Mbps NIC)
"m1.large" (4 Cores CPU with 7.6GB RAM and 100Mbps NIC)
"m1.extralarge" (8 Cores CPU with 15.3GB RAM and 100Mbps NIC)

Iată un exemplu și rezultatul execuției acestuia:

$ ansible -i "localhost," -c local all -m cs_instance -a "name=Debian9advz1 display_name=Debian9adv1 state=present template='Debian 9 - Minimal - 64bits' api_region=CloudIkoulaOne zone=EU-FR-IKDC1-Z1-ADV service_offering=t1.micro 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"
}

În acest exemplu, implementăm o instanță Debian 9 în zona avansată (EU-FR-IKDC1-Z1-ADV), utilizând oferta de calcul "t1.micro" în rețeaua noastră numită "My-Network-Z1" cu perechea noastră de chei SSH numită "MY_SSHKEY".

Pentru a vedea toți parametrii utilizabili și alte exemple, puteți utiliza ansible-doc al modulului "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]
...

Notă: rezultatul comenzii este trunchiat în mod deliberat din cauza lungimii sale.

Implementarea unei instanțe cu un playbook Ansible

În același mod ca mai sus, trebuie mai întâi să creați și să completați/adaptați fișierul de configurare ".cloudstack.ini" al modulului "cs_instance" din 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

Apoi, trebuie doar să creați un fișier playbook (extensie yml / format YAML), ca mai jos, adaptând valorile parametrilor (numele instanței, numele rețelei etc.) și parametrii în sine (dacă aveți/voiați să utilizați o pereche de chei SSH sau nu, de exemplu) :

Exemplu de carte de redare pentru implementarea unei instanțe într-o zonă avansată:

$ 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: "<Nom entre simples quotes ou ID du template CIO voulu>"
      api_region: "CloudIkoulaOne"
      zone: "<Nom de la zone voulu>"
      service_offering: "<Nom 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>"
...

Exemplu de playbook pentru implementarea unei instanțe într-o zonă de bază (în care înlocuim pur și simplu parametrul de rețea cu parametrul grupurilor de securitate și adăugăm returnarea post-deployment a adresei ip publice atribuite vm-ului):

$ cat deploy_instance_basic.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: "<Nom entre simples quotes ou ID du template CIO voulu>"
      api_region: "CloudIkoulaOne"
      zone: "<Nom de la zone voulu>"
      service_offering: "<Nom de l’offre de calcul voulu >"
      security_groups: "<Nom du groupe de sécurité existant voulu>"
      ssh_key: "<Nom de la paire de clés ssh CIO existante>"

  - name: "VM ip address:"
    debug:
      var: vminfo.default_ip
...


După ce parametrii și valorile acestora au fost adaptate, iată un exemplu de rulare a playbook-ului (adaptați numele fișierului playbook-ului dumneavoastră, dacă este necesar):

$ 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

Catégorie :Cloud public Catégorie:API Catégorie :Cloud</Nom>