# Revision history [back]

Not that easy. You can, in principle, run a heterogeneous cloud consisting of Rocky Nova, Queens Cinder etc. This is even supported during an upgrade: You upgrade one physical node after the other, while the cloud is running, and during the process you have a mix of version x and version x+1.

But of course, you don't want to mix versions in a production cloud, except for the short upgrade window.

You use nova-manage, cinder-manage etc to get the versions of each service, but these commands access the database and print the database version rather than making an API.

The best bet IMO is to retrieve the API version. Those services that support microversions will also provide the most recent microversion, from which you can derive the OpenStack version. For example Nova:

\$ curl http://192.168.1.200/compute | python -m json.tool
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
100   381  100   381    0     0  27846      0 --:--:-- --:--:-- --:--:-- 29307
{
"versions": [
{
"id": "v2.0",
{
"href": "http://192.168.1.200/compute/v2/",
"rel": "self"
}
],
"min_version": "",
"status": "SUPPORTED",
"updated": "2011-01-21T11:33:21Z",
"version": ""
},
{
"id": "v2.1",
{
"href": "http://192.168.1.200/compute/v2.1/",
"rel": "self"
}
],
"min_version": "2.1",
"status": "CURRENT",
"updated": "2013-07-23T11:33:21Z",
"version": "2.65"
}
]
}


The very last line, "version": "2.65", shows that this is Rocky.