Projet

Général

Profil

Tâche #29598

Scénario #29495: Etudier l'utilisation de 'cloud-init' sur un module Eole 2.8

Récupérer les valeurs des variables dans cloud-init

Ajouté par Emmanuel GARETTE il y a environ 4 ans. Mis à jour il y a environ 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Début:
11/02/2020
Echéance:
% réalisé:

100%

Restant à faire (heures):
0.0

Historique

#1 Mis à jour par Emmanuel GARETTE il y a environ 4 ans

  • Statut changé de Nouveau à En cours

#2 Mis à jour par Emmanuel GARETTE il y a environ 4 ans

  • Assigné à mis à Emmanuel GARETTE

#3 Mis à jour par Emmanuel GARETTE il y a environ 4 ans

Sur ma machine si je regarde les variables disponibles j'ai :

root@ip-192-168-0-110:~# cloud-init query --all
{
 "_beta_keys": [
  "subplatform" 
 ],
 "availability_zone": null,
 "base64_encoded_keys": [],
 "cloud_name": "opennebula",
 "ds": {
  "_doc": "EXPERIMENTAL: The structure and format of content scoped under the 'ds' key may change in subsequent releases of cloud-init.",
  "meta_data": {
   "CONTEXT": "true",
   "DISK_ID": "2",
   "ETH0_CONTEXT_FORCE_IPV4": "",
   "ETH0_DNS": "192.168.232.2",
   "ETH0_EXTERNAL": "",
   "ETH0_GATEWAY": "192.168.0.1",
   "ETH0_GATEWAY6": "",
   "ETH0_IP": "192.168.0.110",
   "ETH0_IP6": "",
   "ETH0_IP6_PREFIX_LENGTH": "",
   "ETH0_IP6_ULA": "",
   "ETH0_MAC": "02:00:c0:a8:00:6e",
   "ETH0_MASK": "255.255.255.0",
   "ETH0_MTU": "",
   "ETH0_NETWORK": "192.168.0.0",
   "ETH0_SEARCH_DOMAIN": "",
   "ETH0_VLAN_ID": "365",
   "ETH0_VROUTER_IP": "",
   "ETH0_VROUTER_IP6": "",
   "ETH0_VROUTER_MANAGEMENT": "",
   "IMAGE": "Contexte",
   "NETWORK": "YES",
   "TARGET": "hda",
   "VM_CONFIGURATION": "default",
   "VM_DAEMON": "once",
   "VM_HOSTNAME": "eolebase",
   "VM_ID": "323819",
   "VM_MACHINE": "aca.eolebase",
   "VM_MAJAUTO": "DEV",
   "VM_METHODE": "instance",
   "VM_NAME": "aca.eolebase-2.8.0a0-instance-default",
   "VM_ONE": "one",
   "VM_OWNER": "emmanuel",
   "VM_VERSION": "2.8.0a0",
   "VM_VERSIONMAJEUR": "2.8.0",
   "instance_id": "iid-dsopennebula",
   "local_hostname": "192.168.0.110" 
  }
 },
 "instance_id": "iid-dsopennebula",
 "local_hostname": "ip-192-168-0-110",
 "platform": "opennebula",
 "public_ssh_keys": [],
 "region": null,
 "sensitive_keys": [],
 "subplatform": "config-disk (/dev/sr0)",
 "userdata": "",
 "v1": {
  "_beta_keys": [
   "subplatform" 
  ],
  "availability_zone": null,
  "cloud_name": "opennebula",
  "instance_id": "iid-dsopennebula",
  "local_hostname": "ip-192-168-0-110",
  "platform": "opennebula",
  "public_ssh_keys": [],
  "region": null,
  "subplatform": "config-disk (/dev/sr0)" 
 },
 "vendordata": "" 
}

Une bonne partie des variables disponibles concernent l'environnement OpenNebula (je pense à l'IP, DNS, ...). Il n'est pas possible, de ce que je vois, d'avoir un code générique pour tous les hyperviseurs.

Les variables génériques sont :

root@ip-192-168-0-110:~# cloud-id --json
{
 "_beta_keys": [
  "subplatform" 
 ],
 "availability-zone": null,
 "availability_zone": null,
 "cloud-name": "opennebula",
 "cloud_id": "opennebula",
 "cloud_name": "opennebula",
 "instance-id": "iid-dsopennebula",
 "instance_id": "iid-dsopennebula",
 "local-hostname": "ip-192-168-0-110",
 "local_hostname": "ip-192-168-0-110",
 "platform": "opennebula",
 "public_ssh_keys": [],
 "region": null,
 "subplatform": "config-disk (/dev/sr0)" 
}

Seul le nom de domaine est une donnée intéressante et récupérable.

#4 Mis à jour par Emmanuel GARETTE il y a environ 4 ans

Comme on voit ci-dessus la variable hostname n'est pas la bonne.

Après analyse, il semble que la valeur ne sera jamais celle spécifié par l'utilisateur.
Il faut lancer un nombre paire de fois le script pour que cela tombe sur la bonne valeur :

root@ip-192-168-0-110:~# cloud-init clean; cloud-init init --local; cloud-id --json|grep local-hostname
 "local-hostname": "eolebase",
root@ip-192-168-0-110:~# cloud-init clean; cloud-init init --local; cloud-id --json|grep local-hostname
 "local-hostname": "ip-192-168-0-110",
root@ip-192-168-0-110:~# cloud-init clean; cloud-init init --local; cloud-id --json|grep local-hostname
 "local-hostname": "eolebase",
root@ip-192-168-0-110:~# cloud-init clean; cloud-init init --local; cloud-id --json|grep local-hostname
 "local-hostname": "ip-192-168-0-110",
root@ip-192-168-0-110:~# cloud-init clean; cloud-init init --local; cloud-id --json|grep local-hostname
 "local-hostname": "eolebase",
root@ip-192-168-0-110:~# cloud-init clean; cloud-init init --local; cloud-id --json|grep local-hostname
 "local-hostname": "ip-192-168-0-110",
root@ip-192-168-0-110:~# cloud-init clean; cloud-init init --local; cloud-id --json|grep local-hostname
 "local-hostname": "eolebase",
root@ip-192-168-0-110:~# cloud-init clean; cloud-init init --local; cloud-id --json|grep local-hostname
 "local-hostname": "ip-192-168-0-110",
[...]

Le problème c'est que la 1er fois c'est un nombre impaire, donc la valeur n'est pas bonne.

Le choix du nom de la variable HOSTNAME n'est pas une bonne idée puisque cette valeur existe déjà dans un shell standard.

Si dans /usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOpenNebula.py ligne 433 on change HOSTNAME par VM_HOSTNAME tout est ok.

La seule valeur exploitable via cloud-init est donc inexploitable.

#5 Mis à jour par Emmanuel GARETTE il y a environ 4 ans

  • Statut changé de En cours à Résolu
  • % réalisé changé de 0 à 100

#6 Mis à jour par Joël Cuissinat il y a environ 4 ans

  • Statut changé de Résolu à Fermé
  • Restant à faire (heures) mis à 0.0

Formats disponibles : Atom PDF