Ajustements Unicode et couleurs, version 16.03.11.
authorProgfou <jean-christophe.andre@auf.org>
Thu, 10 Mar 2016 22:49:43 +0000 (17:49 -0500)
committerProgfou <jean-christophe.andre@auf.org>
Thu, 10 Mar 2016 22:49:43 +0000 (17:49 -0500)
scripts/ansible-debian-versions

index 8c4a42a..e259a9b 100755 (executable)
@@ -8,11 +8,12 @@ Auteur : Progfou <jean-christophe.andre@auf.org>
 """
 import sys
 import ansible.runner
 """
 import sys
 import ansible.runner
+from os import getenv
 from time import strftime
 import re
 
 if len(sys.argv) != 2:
 from time import strftime
 import re
 
 if len(sys.argv) != 2:
-    print "Usage : %s <nom-d-ensemble-de-machines>" % sys.argv[0]
+    print (u"Usage : %s <nom-d-ensemble-de-machines>" % sys.argv[0]).encode('utf-8')
     sys.exit(1)
 subset = sys.argv[1]
 
     sys.exit(1)
 subset = sys.argv[1]
 
@@ -20,29 +21,41 @@ subset = sys.argv[1]
 
 URL = "http://git.auf.org/?p=ansible.git;a=blob;f=scripts/ansible-debian-versions"
 
 
 URL = "http://git.auf.org/?p=ansible.git;a=blob;f=scripts/ansible-debian-versions"
 
-VERSION = "16.03.10"
+VERSION = "16.03.11"
+
+RELEASE_NAME = {
+  u'Debian': {
+    u'8': 'jessie', u'7': 'wheezy', u'6': 'squeeze', u'5': 'lenny', u'4': 'etch', u'3': 'sarge',
+  },
+}
 
 RELEASE_COLOR = {
 
 RELEASE_COLOR = {
-  "8": "00ae00", "7": "e6ff00", "6": "ff950e", "5": "ff420e",
+  u'Debian': {
+    u"8": "00ae00", u"7": "e6ff00", u"6": "ff950e", u"5": "ff420e",
+  },
+  u'FreeBSD': {
+    u"10": "00ae00", u"9": "e6ff00", u"8": "ff950e", u"7": "ff420e",
+  },
 }
 DEFAULT_RELEASE_COLOR = "ff0000"
 UNKNOWN_RELEASE_COLOR = "f0f0f0"
 
 VIRTUAL_INDEX = {
 }
 DEFAULT_RELEASE_COLOR = "ff0000"
 UNKNOWN_RELEASE_COLOR = "f0f0f0"
 
 VIRTUAL_INDEX = {
-  "inconnu": 0,
-  "physique": 5,
-  "openvz / hôte": 10,
-  "openvz / invité": 15,
-  "kvm / hôte": 20,
-  "QEMU / invité": 23,
-  "kvm / invité": 25,
+  u"inconnu": 0,
+  u"physique": 5,
+  u"openvz / hôte": 10,
+  u"openvz / invité": 15,
+  u"kvm / hôte": 20,
+  u"QEMU / invité": 23,
+  u"kvm / invité": 25,
 }
 
 VIRTUAL_COLOR = {
 }
 
 VIRTUAL_COLOR = {
-  "kvm / hôte": "00ae00", "kvm / invité": "00ae00",
-  "openvz / invité": "e6ff00",
-  "openvz / hôte": "ff950e",
-  "physique": "ff420e",
+  u"kvm / hôte": "e0ffe0",
+  u"kvm / invité": "e0ffe0",
+  u"openvz / invité": "ffe0a0", #"e6ff00",
+  u"openvz / hôte": "ffc0c0", #"ff950e",
+  u"physique": "ffffa0", #"ff420e",
 }
 UNKNOWN_VIRTUAL_COLOR = "f0f0f0"
 
 }
 UNKNOWN_VIRTUAL_COLOR = "f0f0f0"
 
@@ -54,7 +67,7 @@ out = pm.run()
 # sauvegarde temporaire pour débogage
 
 import json
 # sauvegarde temporaire pour débogage
 
 import json
-file('/tmp/out.json', 'w').write(json.dumps(out, sort_keys=True, indent=4, separators=(',', ': ')))
+file('/tmp/out-%s.json' % getenv('USER'), 'w').write(json.dumps(out, sort_keys=True, indent=4, separators=(',', ': ')))
 
 # traitement des données
 
 
 # traitement des données
 
@@ -67,45 +80,55 @@ for server,data in out['contacted'].items():
     if 'ansible_os_family' in facts:
         data['os_family'] = facts['ansible_os_family']
     else:
     if 'ansible_os_family' in facts:
         data['os_family'] = facts['ansible_os_family']
     else:
-        data['os_family'] = 'inconnue'
+        data['os_family'] = u'inconnue'
     # distribution
     # distribution
-    if 'ansible_lsb' in facts:
-        lsb_data = facts['ansible_lsb']
-        data['description'] = lsb_data['description']
-        data['major_release'] = lsb_data['major_release']
-    elif 'ansible_distribution' in facts and 'ansible_distribution_release' in facts:
-        data['description'] = "%s %s" % (facts['ansible_distribution'],
-                                    facts['ansible_distribution_release'])
-        data['major_release'] = re.split(r'[^0-9]', facts['ansible_distribution_release'])[0]
-        if not data['major_release']:
-            data['major_release'] = '0'
+    if 'ansible_distribution' in facts:
+        major = re.findall(r'[0-9]+', facts['ansible_distribution_version'])
+        if len(major) > 0:
+            data['major_release'] = major[0]
+        else:
+            data['major_release'] = u'0'
+        version = re.findall(r'[0-9\.]+', facts['ansible_distribution_version'])
+        if len(version) > 0:
+            data['version'] = version[0]
+        else:
+            data['version'] = u'0'
+        data['description'] = u'%s %s' % (facts['ansible_distribution'],
+                                                            data['version'])
+        release = facts.get('ansible_distribution_release', u'NA')
+        if release == u'NA' and data['os_family'] in RELEASE_NAME:
+            os_release_name = RELEASE_NAME[data['os_family']]
+            if data['major_release'] in os_release_name:
+                release = os_release_name[data['major_release']]
+        if release != u'NA':
+            data['description'] += u' (%s)' % release
     else:
     else:
-        data['description'] = 'inconnue (information non disponible)'
-        data['major_release'] = '0'
+        data['major_release'] = u'0'
+        data['description'] = u'inconnue (information non disponible)'
     # virtualisation
     if 'ansible_virtualization_type' in facts and \
        'ansible_virtualization_role' in facts:
     # virtualisation
     if 'ansible_virtualization_type' in facts and \
        'ansible_virtualization_role' in facts:
-        if facts['ansible_virtualization_role'] == 'guest':
-            virtual_info = '%s / invité' % facts['ansible_virtualization_type']
-        elif facts['ansible_virtualization_role'] == 'host':
-            virtual_info = '%s / hôte' % facts['ansible_virtualization_type']
-        elif facts['ansible_virtualization_role'] == 'NA':
-            virtual_info = 'physique'
+        if facts['ansible_virtualization_role'] == u'guest':
+            virtual_info = u'%s / invité' % facts['ansible_virtualization_type']
+        elif facts['ansible_virtualization_role'] == u'host':
+            virtual_info = u'%s / hôte' % facts['ansible_virtualization_type']
+        elif facts['ansible_virtualization_role'] == u'NA':
+            virtual_info = u'physique'
         else:
         else:
-            virtual_info = "inconnu (%s / %s)" % (
+            virtual_info = u'inconnu (%s / %s)' % (
                 facts['ansible_virtualization_type'],
                 facts['ansible_virtualization_role'] )
         data['virtual_info'] = virtual_info
     elif 'ansible_processor' in facts and facts['ansible_processor'][0].startswith('QEMU'):
                 facts['ansible_virtualization_type'],
                 facts['ansible_virtualization_role'] )
         data['virtual_info'] = virtual_info
     elif 'ansible_processor' in facts and facts['ansible_processor'][0].startswith('QEMU'):
-        data['virtual_info'] = 'QEMU / invité'
+        data['virtual_info'] = u'QEMU / invité'
     else:
     else:
-        data['virtual_info'] = 'inconnu'
+        data['virtual_info'] = u'inconnu'
     # architecture
     if 'ansible_machine' in facts and 'ansible_userspace_bits' in facts:
     # architecture
     if 'ansible_machine' in facts and 'ansible_userspace_bits' in facts:
-        data['architecture'] = "%s bits / %s" % (
+        data['architecture'] = u'%s bits / %s' % (
             facts['ansible_userspace_bits'], facts['ansible_machine'] )
     else:
             facts['ansible_userspace_bits'], facts['ansible_machine'] )
     else:
-        data['architecture'] = 'inconnue'
+        data['architecture'] = u'inconnue'
     # ajout à la liste
     server_list.append({
         'name': data['name'],
     # ajout à la liste
     server_list.append({
         'name': data['name'],
@@ -120,34 +143,38 @@ for server,data in out['dark'].items():
     # ajout à la liste
     server_list.append({
         'name': server,
     # ajout à la liste
     server_list.append({
         'name': server,
-        'os_family': 'inconnue',
-        'description': 'inconnue (échec de connexion)',
-        'major_release': '0',
-        'architecture': 'inconnu',
-        'virtual_info': 'inconnu',
+        'os_family': u'inconnue',
+        'description': u'inconnue (échec de connexion)',
+        'major_release': u'0',
+        'architecture': u'inconnu',
+        'virtual_info': u'inconnu',
     })
 
 # tri de la liste des serveurs par version de distribution croissante
 
 def sort_key(x):
     })
 
 # tri de la liste des serveurs par version de distribution croissante
 
 def sort_key(x):
-    os_family = '0' if x['os_family'] == 'inconnue' else x['os_family']
+    os_family = u'0' if x['os_family'] == u'inconnue' else x['os_family']
     virtual_index = VIRTUAL_INDEX.get(x['virtual_info'], 1)
     reversed_name = '.'.join(reversed(x['name'].split('.')))
     virtual_index = VIRTUAL_INDEX.get(x['virtual_info'], 1)
     reversed_name = '.'.join(reversed(x['name'].split('.')))
-    return '%s-%03d-%02d-%s' % ( os_family, int(x['major_release']),
+    return u'%s-%03d-%02d-%s' % ( os_family, int(x['major_release']),
         virtual_index, reversed_name )
 
 server_list.sort(key=sort_key)
 
 # affichage du code wiki MoinMoin correspondant
 
         virtual_index, reversed_name )
 
 server_list.sort(key=sort_key)
 
 # affichage du code wiki MoinMoin correspondant
 
-print "||<rowstyle=\"background-color: #cccccc;\">'''Serveur'''||'''Version du système au %s'''||'''Architecture'''||'''Virtualisation'''||" % strftime('%Y-%m-%d')
+print u"||<rowstyle=\"background-color: #cccccc;\">'''Serveur'''||'''Version du système'''||'''Architecture'''||'''Virtualisation'''||".encode('utf-8')
 
 for server in server_list:
     # couleur pour la version
 
 for server in server_list:
     # couleur pour la version
-    if server['major_release'] == '0':
+    if server['major_release'] == u'0':
         server['release_color'] = UNKNOWN_RELEASE_COLOR
         server['release_color'] = UNKNOWN_RELEASE_COLOR
-    elif server['major_release'] in RELEASE_COLOR:
-        server['release_color'] = RELEASE_COLOR[server['major_release']]
+    elif server['os_family'] in RELEASE_COLOR:
+        os_release_color = RELEASE_COLOR[server['os_family']]
+        if server['major_release'] in os_release_color:
+            server['release_color'] = os_release_color[server['major_release']]
+        else:
+            server['release_color'] = DEFAULT_RELEASE_COLOR
     else:
         server['release_color'] = DEFAULT_RELEASE_COLOR
     # couleur pour la virtualisation
     else:
         server['release_color'] = DEFAULT_RELEASE_COLOR
     # couleur pour la virtualisation
@@ -155,9 +182,12 @@ for server in server_list:
         server['virtual_color'] = VIRTUAL_COLOR[server['virtual_info']]
     else:
         server['virtual_color'] = UNKNOWN_VIRTUAL_COLOR
         server['virtual_color'] = VIRTUAL_COLOR[server['virtual_info']]
     else:
         server['virtual_color'] = UNKNOWN_VIRTUAL_COLOR
-    if 'invité' not in server['virtual_info']:
-        server['virtual_info'] = "'''%s'''" % server['virtual_info']
+    if u'invité' not in server['virtual_info']:
+        server['virtual_info'] = u"'''%s'''" % server['virtual_info']
     # affichage
     # affichage
-    print "||<)>%(name)s||<#%(release_color)s>%(description)s||%(architecture)s||<#%(virtual_color)s>%(virtual_info)s||" % server
+    print ( (u"||<)>%(name)s||<#%(release_color)s>%(description)s||" +
+        u"%(architecture)s||<#%(virtual_color)s>%(virtual_info)s||") % \
+        server ).encode('utf-8')
 
 
-print "(tableau généré via le script [[%s|ansible-debian-versions]] version %s)" % (URL, VERSION)
+print ( u"(tableau généré le %s à %s avec [[%s|ansible-debian-versions]] %s)" % \
+    (strftime('%Y-%m-%d'), strftime('%H:%M:%S UTC'), URL, VERSION) ).encode('utf-8')