Comment mettre en place une nouvelle NON EOLE

Cette section couvre la configuration nécessaire pour l’ajout d’une image non EOLE. Pour la prise en compte de cette configuration par jenkins et la mise à disposition effective des images dans opennebula, se reporter à la section Comment mettre en place une nouvelle ISO EOLE.

Les étapes :

  1. déclarer dans (eole-ci-tests)/Clouds.yaml la nouvelle image
  2. commit et push dans le dépot
  3. sur https://dev-eole.ac-dijon.fr/jenkins, lancer ‘pipeline-update-jenkins’ (c’est un peu long !)
  4. Aller dans le ‘infra’, puis dans l’onglet ‘infra’ et lancer les nouveaux jobs

Pré requis

  • avoir créer Clouds.yaml

Récupération du dépot eole-ci-tests

1
2
cd (Dépots)
git clone https://dev-eole.ac-dijon.fr/git/eole-ci-tests.git

Créer une entrée dans le fichier ‘Clouds.yaml’

L’ajout d’une image de machine virtuelle non EOLE demande plusieurs étapes. L’enchaînement est iso, imageFreshInstall, imageIntermediaire, imageFinale. Les différentes variables se répondent dans les sections pour déterminer quelle image sert de base à une autre.

Récupérer une image ISO pour l’installation

Si la machine virtuelle est basé sur une image ISO qui n’est pas encore disponible dans opennebula, il faut ajouter une entrée dans la liste des images.

1
2
3
4
5
6
images:
- iso: debian-8.7.1-amd64-eole-ci-tests.iso
  url: http://cdimage.debian.org/debian-cd/8.7.1/amd64/iso-cd/debian-8.7.1-amd64-netinst.iso
  imageFreshInstall: debian-8.7.1-amd64-eole-ci-tests.fi
  architecture: amd64
  typeOs: debian

Déclarer une image intermédiaire

Pour chaque image finale (image instanciée pour créer une machine virtuelle répondant à un besoin fonctionnel), il est possible de créer des images intermédiaires pouvant servir de base pour d’autres images. Ces images intermédiaires peuvent également servir à instancier des machines virtuelles dans opennebula.

1
2
3
4
- imageFreshInstall: debian-8.7.1-amd64-eole-ci-tests.fi
  imageIntermediaire: debian-8.7.1-lxde-amd64.fi
  architecture: amd64
  typeOs: debian

Déclarer une image finale

L’image finale est typiquement l’image qui sera utilisée par les modèles de machine virtuelle. Dans l’exemple suivant, aucune image intermédiaire n’est utilisée. L’image intermédiaire fait référence à l’image générée par l’installation de l’ISO téléchargée.

1
2
3
4
5
- imageIntermediaire: debian-8.7.1-amd64-eole-ci-tests.fi
  imageFinale: rie-ldapma.vm
  architecture: amd64
  typeOs: debian
  suffixeVersion: debian

Déclarer les images dans le fichier ‘ModeleReseauTestEole.yaml’

Le fichier ‘ModeleReseauTestEole.yaml’ contient deux sections importantes pour la création d’une machine virtuelle.

Déclarer l’image de base dans le fichier ‘ModeleReseauTestEole.yaml’

Une image de base sert de lien entre les instances dans opennebula et les images générées déclarées dans le fichier Clouds.yaml.

La déclaration d’une image de base :

1
2
3
4
bases:
- base: rie-ldapma
  imageNebula: rie-ldapma.vm
  architecture: amd64

Déclarer un contexte d’instanciation d’une image

Une image de base peut servir à instancier plusieurs machines virtuelles dans opennebula. Une instance est déclarée dans un contexte particulier de la façon suivante :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
networks:
- etablissement: RIE
  noEtab: 0000001A
  machines:
  - machine: rieldapma
    base: rie-ldapma
    templates: []
    switchs:
    - sw: RIE
      host: 10

L’image de base est référencée à l’aide du champ base. Le contexte est défini par l’inclusion dans un établissement et par la précision du switch.

Créer les fonctions nécessaires dans le script ‘scripts/update-non-eole.sh’

Ajout d’une fonction pour compléter l’installation

Utilisation d’un script de provisioning

Dans la déclaration de l’image, utiliser l’attribut ‘buildCommand’ comme ci dessous.

1
2
3
4
5
6
- imageIntermediaire: debian-8.7.1-amd64-eole-ci-tests.fi
  imageFinale: rie-ldapma.vm
  architecture: amd64
  typeOs: debian
  suffixeVersion: debian
  buildCommand: update-rie.sh

Lorsque la machine sera démarré, la commande sera executée avec 2 arguments : - image source - image destination

Si le retour est ‘0’ alors l’image sera enregistrée, si différent alors l’image sera annulée et le build en erreur

Ajout d’un cas dans la fonction doUpdateForImage()

La fonction créée précédemment peut alors être appelée dans le corps du case de la fonction doUpdateForImage en lien avec le nom de base déclaré dans le fichier yaml.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
function doUpdateForImage()
{
case "$IMAGE_FINALE" in
      ...
      rie-ldap*)
          doRieLDAP
          ;;

      rie-banshee*)
          doRieBanshee
          ;;
      ...
}

Dans cet exemple, nous appellons une fonction ‘doRie...’ d’après le nom de l’image à créer (rie-ldap.vm ou rie-banshee.vm)

1
2
3
4
5
6
7
function doRieLDAP()
{
    export DEBIAN_FRONTEND=noninteractive
    export APT_OPTS="-y"
    doRie
    apt-get install "$APT_OPTS" -y slapd
}

Dans cet exemple, nous installons seulement le paquet ‘slapd’. L’image de départ est une debian, nous obtenons ainsi une image debian+slapd qui se nommera ‘rei-ldap.vm’.

Attention: - ces scripts ne doivent poser aucune question. - aucune configuration n’est appliquée ici. En général, ces images sont utilisée dans des contexts différents.