Google PlusFacebookTwitter

nova-novncproxy et Debian GNU/Linux Wheezy

By on Juin 4, 2013 in Linux, OpenStack | 4 comments

Share On GoogleShare On FacebookShare On Twitter

nova-novncproxy fait n' »import » quoi…

Encore un jeu de mot en carton… Le paquet novnc mis à disposition par GPLHost ne fonctionne pas une fois installé.

Si vous essayez de lancer la commande nova-novncproxy, l’erreur suivante sera affichée et vous passerez plusieurs heures à chercher pourquoi ça ne fonctionne pas, vous irez faire chauffer la Nespresso, manger un KitKat, etc… (je m’égare :mrgreen: ).

Traceback (most recent call last):
File "/usr/bin/nova-novncproxy", line 32, in <module>
from nova import flags
ImportError: cannot import name flags

C’est moche et pour les personnes qui comme moi ne maîtrise pas Python, cette erreur ne veut presque rien dire.

Un petit oubli de la part de GPLHost

En cherchant je suis tombé sur le sujet suivant : https://lists.launchpad.net/openstack/msg23774.html

Dans ce dernier on peut lire ceci :

flags.py was removed from Grizzly, you may want to update the code for nova
dns by using « from oslo.config import cfg » instead.

Le fait que flags ne soit plus utilisé nous aiguille mais ça ne règle pas le problème. En comparant avec les fichiers nova* déjà présents dans /usr/bin/, j’ai réussi à corriger le problème (j’en ai encore les larmes aux yeux).

Le patch

Je n’ai pas crée de paquet pour corriger le problème (GPLHost le fera bien assez tôt) mais je mets à disposition le patch ci-dessous qui s’applique très simplement. Encore une fois je ne suis pas développeur Python donc les puristes pourront améliorer le code et le partager.

--- /usr/bin/nova-novncproxy	2013-06-03 16:47:02.606589274 -0400
+++ nova-novncproxy	2013-06-03 16:46:48.614592760 -0400
@@ -26,12 +26,13 @@
 import socket
 import sys

+from oslo.config import cfg
+
 from novnc import wsproxy

 from nova import context
-from nova import flags
+from nova import config
 from nova import utils
-from nova.openstack.common import cfg
 from nova.openstack.common import rpc

@@ -64,13 +65,13 @@
                default=6080,
                help='Port on which to listen for incoming requests'),
     ]
-FLAGS = flags.FLAGS
-FLAGS.register_cli_opts(opts)
+CONF = cfg.CONF
+CONF.register_cli_opts(opts)

 # As of nova commit 0b11668e64450039dc071a4a123abd02206f865f we must
 # manually register the rpc library
 if hasattr(rpc, 'register_opts'):
-    rpc.register_opts(FLAGS)
+    rpc.register_opts(CONF)

 class NovaWebSocketProxy(wsproxy.WebSocketProxy):
@@ -128,23 +129,23 @@

 if __name__ == '__main__':
-    if FLAGS.ssl_only and not os.path.exists(FLAGS.cert):
-        parser.error("SSL only and %s not found" % FLAGS.cert)
+    if CONF.ssl_only and not os.path.exists(CONF.cert):
+        parser.error("SSL only and %s not found" % CONF.cert)

-    # Setup flags
-    flags.parse_args(sys.argv)
+    # Setup cfg
+    config.parse_args(sys.argv)

     # Create and start the NovaWebSockets proxy
-    server = NovaWebSocketProxy(listen_host=FLAGS.novncproxy_host,
-                                listen_port=FLAGS.novncproxy_port,
-                                source_is_ipv6=FLAGS.source_is_ipv6,
-                                verbose=FLAGS.verbose,
-                                cert=FLAGS.cert,
-                                key=FLAGS.key,
-                                ssl_only=FLAGS.ssl_only,
-                                daemon=FLAGS.daemon,
-                                record=FLAGS.record,
-                                web=FLAGS.web,
+    server = NovaWebSocketProxy(listen_host=CONF.novncproxy_host,
+                                listen_port=CONF.novncproxy_port,
+                                source_is_ipv6=CONF.source_is_ipv6,
+                                verbose=CONF.verbose,
+                                cert=CONF.cert,
+                                key=CONF.key,
+                                ssl_only=CONF.ssl_only,
+                                daemon=CONF.daemon,
+                                record=CONF.record,
+                                web=CONF.web,
                                 target_host='ignore',
                                 target_port='ignore',
                                 wrap_mode='exit',

Pour appliquer le patch il suffit de le télécharger puis d’utiliser la traditionnelle commande patch.

# patch /usr/bin/nova-novncproxy < nova-novncproxy.patch

Une fois le patch appliqué il ne reste plus qu’à démarrer le service /etc/init.d/novnc Gardez à l’esprit qu’à la prochaine mise à jour du paquet si GPLHost n’a pas corrigé le problème il faudra de nouveau appliquer le patch.

Édit du 04/06/2013

Le bug a été ouvert sur LaunchPad : https://bugs.launchpad.net/ubuntu/+source/novnc/+bug/1187613

The following two tabs change content below.

Gaëtan Trellu (goldyfruit)

Cloud Technical Advisor chez IBM
Autodidacte en informatique, depuis 2005 je parcours l’écosystème Unix à la recherche de nouvelles connaissances et de nouvelles rencontres.

Derniers articles parGaëtan Trellu (goldyfruit) (voir tous)

CC BY 4.0 nova-novncproxy et Debian GNU/Linux Wheezy par Gaëtan Trellu (goldyfruit) est sous Licence Creative Commons Internationale Attribution 4.0.