@@ -73,6 +73,16 @@ def read_from_tarball(tarball, filename):
7373
7474 return data
7575
76+ def parse_kvp_string (data ):
77+ rec = {}
78+ lines = data .split ('\n ' )
79+ for line in lines :
80+ if not line :
81+ continue
82+ k , v = line .split ('=' )
83+ rec [k ] = v .strip ("'" )
84+ return rec
85+
7686class Host (object ):
7787
7888 client = None
@@ -106,6 +116,17 @@ def get_dmidecode_data(self):
106116 def get_cpuinfo_data (self ):
107117 return self .exec_command (['cat /proc/cpuinfo' ])
108118
119+ def get_os_data (self ):
120+ return self .exec_command (['cat' , '/etc/xensource-inventory' ])
121+
122+ def get_os_info (self ):
123+ rec = {}
124+ os_rec = parse_kvp_string (self .get_os_data ())
125+ rec ['os' ] = os_rec ['PRODUCT_BRAND' ]
126+ rec ['version' ] = os_rec ['PRODUCT_VERSION' ]
127+ rec ['build' ] = os_rec ['BUILD_NUMBER' ]
128+ return rec
129+
109130 def get_pci_devices (self ):
110131 data = self .get_lspci_data ()
111132 parser = LspciNNMMParser (data )
@@ -116,6 +137,14 @@ def get_info(self):
116137 data = self .get_dmidecode_data ()
117138 parser = dmidecode .DmidecodeParser (data )
118139 rec = parser .parse ()
140+ try :
141+ os_rec = self .get_os_info ()
142+ for k , v in os_rec .iteritems ():
143+ rec [k ] = v
144+ except :
145+ #Ignore failures. Only supports XS right now.
146+ pass
147+
119148 return rec
120149
121150 def get_cpu_info (self ):
@@ -175,6 +204,9 @@ def get_dmidecode_data(self):
175204 def get_cpuinfo_data (self ):
176205 return self ._load_from_file ('cpuinfo' )
177206
207+ def get_os_data (self ):
208+ return self ._load_from_file ('xensource-inventory' )
209+
178210 def get_pci_devices (self ):
179211 try :
180212 devs = super (HostFromLogs , self ).get_pci_devices ()
0 commit comments