2 votes

Créer plusieurs invités VMware avec le module vsphere_guest

J'ai le playbook Ansible suivant pour créer (cloner) des machines virtuelles VMware (VM) à partir d'un modèle :

- name: Create VMware guest
  hosts: localhost
  connection: local
  gather_facts: False

  vars_prompt:
    - name: "vcenter"
      prompt: "vCenter hostname?"
      default: "vcenter01.example.com"
    - name: "user"
      prompt: "Enter username"
      private: no
    - name: "pass"
      prompt: "Enter password"
      private: yes
    - name: "template"
      prompt: "Template?"
      default: "linux-template.example.com_deb8"
    - name: "cluster"
      prompt: "Cluster?"
      default: "cl03"
    - name: "resource_pool"
      prompt: "Resource pool?"
      default: "/Resources/IT/IT Department/Linux Systems Team"

  tasks:
  - name: Make sure we have pip
    become: true
    apt: pkg=python-pip state=latest
  - name: Install Python modules
    become: true
    pip: name={{ item }} state=latest
    with_items:
      - pysphere
      - pyvmomi
  - name: Deploy guest from template
    vsphere_guest:
      vcenter_hostname: "{{ vcenter }}"
      username: "{{ user }}"
      password: "{{ pass }}"
      guest: "{{ guest }}"
      from_template: yes
      template_src: "{{ template }}"
      cluster: "{{ cluster }}"
      resource_pool: "{{ resource_pool }}"

Je l'invoque comme ceci :

ansible-playbook createvm.yml --ask-become-pass -e guest=<guest-name>

Comment puis-je créer plusieurs VMs sans exécuter le playbook plusieurs fois, c'est-à-dire en répondant à toutes les questions de l'invite ? La seule variable qui est modifiée est le nom de la VM ( guest ). J'aimerais quelque chose comme ça :

ansible-playbook createvm.yml --ask-become-pass -e guest=server1,server3,server3

3voto

Henrik Pingel Points 8426

Vous pouvez écrire un with_items boucle pour le paramètre invité également. Comme ceci :

- name: Deploy guest from template
  vsphere_guest:
    vcenter_hostname: "{{ vcenter }}"
    username: "{{ user }}"
    password: "{{ pass }}"
    guest: "{{ item }}"
    from_template: yes
    template_src: "{{ template }}"
    cluster: "{{ cluster }}"
    resource_pool: "{{ resource_pool }}"
   with_items: "{{ serverlist }}"

Si vous ne voulez pas coder en dur les variables dans le jeu (ce qui n'est pas une mauvaise idée), vous pouvez stocker la liste dans une variable et la placer sous la rubrique host_vars/hostname comme ça :

---
serverlist:
  - server1
  - server2

Ansible a vault inclus pour le stockage des mots de passe et des informations sensibles. Jetez un coup d'œil à la documentation pour plus d'informations.

Vous pouvez créer un fichier variable crypté avec vault et l'inclure dans votre jeu avec

- include_vars: vault.yml

0 votes

Comment puis-je fournir les variables pour le with_items (serveur1, serveur2, serveur3) ? Je ne veux pas qu'ils soient codés en dur dans le playbook.

2voto

jreisinger Points 215

J'ai trouvé une solution qui semble fonctionner correctement : l'utilisation de variables d'environnement. J'ai remplacé le vars_prompt du livre de jeu avec :

  vars:
    vcenter: "{{ lookup('env','ANS_VCENTER') }}"
    cluster: "{{ lookup('env','ANS_CLUSTER') }}"
    template: "{{ lookup('env','ANS_TEMPLATE') }}"
    resource_pool: "{{ lookup('env','ANS_RESOURCE_POOL') }}"
    user: "{{ lookup('env','ANS_USER') }}"
    password: "{{ lookup('env','ANS_PASS') }}"

Je définis les variables d'environnement avant de lancer le playbook, comme suit

export ANS_VCENTER="vcenter01.example.com"

(J'étais un peu inquiet de stocker le mot de passe dans une variable d'environnement mais cela semble être le cas). suffisamment sécurisé ).

Ensuite, je peux créer plusieurs invités en utilisant un Shell Shell.

for g in server1 server2 server3; do echo "--> Create $g"; ansible-playbook createvm.yml -e guest=$g; done

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X