Project

General

Profile

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

Added by Emmanuel GARETTE 6 months ago. Updated 5 months ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Start date:
02/11/2020
Due date:
% Done:

100%

Remaining (hours):
0.0

History

#1 Updated by Emmanuel GARETTE 6 months ago

  • Status changed from Nouveau to En cours

#2 Updated by Emmanuel GARETTE 6 months ago

  • Assigned To set to Emmanuel GARETTE

#3 Updated by Emmanuel GARETTE 6 months ago

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 Updated by Emmanuel GARETTE 6 months ago

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 Updated by Emmanuel GARETTE 6 months ago

  • Status changed from En cours to Résolu
  • % Done changed from 0 to 100

#6 Updated by Joël Cuissinat 5 months ago

  • Status changed from Résolu to Fermé
  • Remaining (hours) set to 0.0

Also available in: Atom PDF