A quick summary of OpenStack release tags

I wanted a quick summary of OpenStack git release tags for a talk I am working on, and it turned out to be way more complicated than I expected. I ended up having to compile a table, and then turn that into a code snippet. In case its useful to anyone else, here it is:

ReleaseRelease dateFinal release tag
AustinOctober 20102010.1
BexarFebruary 20112011.1
CactusApril 20112011.2
DiabloSeptember 20112011.3
EssexApril 20122012.1.3
FolsomSeptember 20122012.2.4
GrizzlyApril 20132013.1.5
HavanaOctober 20132013.2.4
IcehouseApril 20142014.1.5
JunoOctober 20142014.2.4
KiloApril 20152015.1.4
LibertyOctober 2015Glance: 11.0.2
Keystone: 8.1.2
Neutron: 7.2.0
Nova: 12.0.6
MitakaApril 2016Glance: 12.0.0
Keystone: 9.3.0
Neutron: 8.4.0
Nova: 13.1.4
NewtonOctober 2016Glance: 13.0.0
Keystone: 10.0.3
Neutron: 9.4.1
Nova: 14.1.0
OcataFebruary 2017Glance: 14.0.1
Keystone: 11.0.4
Neutron: 10.0.7
Nova: 15.1.5
PikeAugust 2017Glance: 15.0.2
Keystone: 12.0.3
Neutron: 11.0.8
Nova: 16.1.8
QueensFebruary 2018Glance: 16.0.1
Keystone: 13.0.4
Neutron: 12.1.1
Nova: 17.0.13
RockyAugust 2018Glance: 17.0.1
Keystone: 14.2.0
Neutron: 13.0.7
Nova: 18.3.0
SteinApril 2019Glance: 18.0.1
Keystone: 15.0.1
Neutron: 14.4.2
Nova: 19.3.2
TrainOctober 2019Glance: 19.0.4
Keystone: 16.0.1
Neutron: 15.3.0
Nova: 20.4.1
UssuriMay 2020Glance: 20.0.1
Keystone: 17.0.0
Neutron: 16.2.0
Nova: 21.1.1
VictoriaOctober 2020Glance: 21.0.0
Keystone: 18.0.0
Neutron: 17.0.0
Nova: 22.0.1

Or in python form for those so inclined:

    'austin': {'all': '2010.1'},
    'bexar': {'all': '2011.1'},
    'cactus': {'all': '2011.2'},
    'diablo': {'all': '2011.3'},
    'essex': {'all': '2012.1.3'},
    'folsom': {'all': '2012.2.4'},
    'grizzly': {'all': '2013.1.5'},
    'havana': {'all': '2013.2.4'},
    'icehouse': {'all': '2014.1.5'},
    'juno': {'all': '2014.2.4'},
    'kilo': {'all': '2015.1.4'},
    'liberty': {
        'glance': '11.0.2',
        'keystone': '8.1.2',
        'neutron': '7.2.0',
        'nova': '12.0.6'
    'mitaka': {
        'glance': '12.0.0',
        'keystone': '9.3.0',
        'neutron': '8.4.0',
        'nova': '13.1.4'
    'newton': {
        'glance': '13.0.0',
        'keystone': '10.0.3',
        'neutron': '9.4.1',
        'nova': '14.1.0'
    'ocata': {
        'glance': '14.0.1',
        'keystone': '11.0.4',
        'neutron': '10.0.7',
        'nova': '15.1.5'
    'pike': {
        'glance': '15.0.2',
        'keystone': '12.0.3',
        'neutron': '11.0.8',
        'nova': '16.1.8'
    'queens': {
        'glance': '16.0.1',
        'keystone': '13.0.4',
        'neutron': '12.1.1',
        'nova': '17.0.13'
    'rocky': {
        'glance': '17.0.1',
        'keystone': '14.2.0',
        'neutron': '13.0.7',
        'nova': '18.3.0'
    'stein': {
        'glance': '18.0.1',
        'keystone': '15.0.1',
        'neutron': '14.4.2',
        'nova': '19.3.2'
    'train': {
        'glance': '19.0.4',
        'keystone': '16.0.1',
        'neutron': '15.3.0',
        'nova': '20.4.1'
    'ussuri': {
        'glance': '20.0.1',
        'keystone': '17.0.0',
        'neutron': '16.2.0',
        'nova': '21.1.1'
    'victoria': {
        'glance': '21.0.0',
        'keystone': '18.0.0',
        'neutron': '17.0.0',
        'nova': '22.0.1'

MythNetTV release 7

This release is smaller than the last one, but has some bug fixes which folk might find handy. New things in this release:

    Better testing:

  • r232: Simple script to create the unit testing database
    New features:

  • r210: Allow users to override the default bittorrent upload rate
  • r212: Provide more sync information when running in verbose mode
  • r216: Add the markunread command
  • r218: Make only one download attempt for a given show per 24 hour period
  • r220: Change download interval to one hour, update last attempt time more frequently
  • r222: Add –oldestfirst and –newestfirst flags, which alter NextDownloads behavior
  • r224: Add flag which forces downloads to run, even if they’ve failed recently
  • r226: Don’t mark a bittorrent download as complete just because the torrent file has been completely downloaded
  • r234: Use reasonable defaults for mysql configuration if no config file can be found
  • r236: Use reasonable defaults for mysql configuration if no config file can be found
  • r238: Use reasonable defaults for mysql configuration if no config file can be found
    Bug fixes:

  • r206: Make the output of “video.py length” more friendly
  • r208: Release man pages as well
  • r214: Fix a bug introduced in r210 which broke bittorrent downloads
  • r228: Fix a typo in the recordings_tool help text
  • r230: Fix a typo in the recordings_tool help text
  • r240: Reduce size of proxy name in the usage table to deal with key length limitations in MySQL
  • r242: The schema for the channel table changed in MythTV 0.21
  • r244: Fix typo
  • r246: Suppress repeated warnings of DB default use
  • r248: Bug fixes for linux.conf.au 2009 talk
  • r250: Include test runner script in release, prepare ChangeLog for release

Please grab your copy here.

PNGtools 0.4

Wow, this is a blast from the past. When I wrote the pngchunks command in 2003, I had never seen a 64 bit machine, and knew enough to check that an int was the right size, but not enough to just use the guaranteed-to-be-32-bit version from day 1. I’d pretty much forgotten about this code until I got pinged about this Debian bug. The bug reporter is entirely right, this was lame.

PNGtools 0.4 should be 64 bit safe. The pngchunks command works on my 64 bit machines at least.

A historical note from November 2020: this code is quite old, but still actively used. I have therefore converted the old subversion repository to git and it is hosted at https://github.com/mikalstill/pngtools. I will monitor there for issues and patches and try my best to remember what I was thinking 20 years ago…

MythNetTV release 6

New things in this release:

    Better testing:

  • r114: Unit tests for video.py
  • r148: Updated unit test now that we create more tables
  • r151: Start work on syndication unit tests
  • r153: Unit test for bad syndication dates, as well as more flexibility in
    db connections needed for this unit test

  • r157: Nicer unit test failure output, and refactor GetVideoDir() into the
    utility module

  • r181: Slightly improve syndication unit tests
  • r183: Add flag parsing to unit tests, and fix some more flag name changes
    Better documentation:

  • r117: Added a man page for video.py — I’m not 100% happy with its name
    Bug fixes:

  • r114: Fixed a bug where the new filename for video transcode could be the
    same as the input filename, resulting in video corruption. This was found
    with one of the new video.py unit tests

  • r116: The logic for the –prompt flag was the wrong way around. Fixed.
  • r119: Nicer download status messages
  • r121: Handle 404s in feed updates better
  • r129: Slight tweak to SVN submit script
  • r131: More accurate tracking of proxy usage (update during download,
    instead of just at the end)

  • r137: Proxy budget being exceeded doesn’t count as a failed download

  • r143: Subscribe now renables inactive subscriptions
  • r146: Add support to decimals to utility byte printer, fix a bug in the
    check for video directories

  • r155: Have users send problems to the mailing list, instead of me

  • r161: Don’t throw exceptions for the videodir command line
  • r167, 169: Display friendly sizes in records_tool output
  • r171: Move verbose update arg into a flag
  • r173: Add “-vo null” to mplayer invocation per Ryan Lutz. This improves
    support on machines without X, and speeds up the identify operation

  • r175: Import patch from Thomas Mashos which fixes subscription removal,
    started work on syndication unit test improvements

  • r177: Fix character escaping bug in show subtitles during import
  • r179: Renamed –datadirdefault to –datadir. If set this will now change
    your data directory, regardless of if there was a previous value set.

  • r190: Recording_tool now prompts for deletes
  • r192: Improved explainvideodir output
  • r194: Don’t crash in explainvideodir if there is no video directory
  • r197: Order results by subtitle in recordings_tool output
    New features:

  • r115: Upgraded schema to version 15 to support http_proxies for
    subscriptions. Added http_proxy command line, which allows you to use HTTP
    proxies for specified URLs. Moved HTTP accesses to use the proxy code.

  • r127: Bump schema to v17, and add proxy use tracking including the
    “proxyusage” command

  • r133: Allow daily budgets for proxy usage
  • r115: Provide a user agent for HTTP requests, instead of just

  • r117: Users will now be prompted to subscribe to an announcements video
    feed. This will happen exactly once. This behavior may be disabled with
    the –nopromptforannounce command line flag.

  • r125: Add a full info dump command to video.py’s command line interface
  • r139: Bump schema to 19, and implement categories with the “category”

  • r141: Implement recording group support, and clarify category support
  • r151: Implement a helper (recordings_tool) for handling the MythTV
    recordings table, this is useful for testing.

  • r159: Add videodir and explainvideodir debugging commands, and update man

  • r163: Add title list feature to recordings_tool
  • r165: Include recording count in title list
  • r185: Add the resetattempts command
    Development changes:

  • r123: Added a submit script to automate putting the revision number into
    the ChangeLog

  • r135: Tweak to new ChangeLog auto logging formatting

Release 6 continues the tradition of better testing, improves the documentation (a little, there is more work to be done there), fixes a bunch of bugs, and implements some new features which will hopefully be useful to others. Please grab your copy here.

MythNetTV release 5

New things in this release:

  • There is now a users mailing list at

  • Moved to a public SVN server at

  • Added the ‘justone’ syntax to the download command
  • Another try at using gflags. This means that all the command lines have
    changed slightly.

  • Moved the core of MythTV out of the user interface file.
  • Started writing unit tests
  • Changed user output code so that it doesn’t insist on writing to stdout.
    You can now write to other file descriptors, which makes things like unit
    tests much easier to write.

  • Added video/msvideo to the enclosure whitelist
  • Added HTTP download progress information
  • Added a flag which turns off the prompts for markread (–noprompt)
  • Patches from Thomas Mashos
    • Search ~/.mythtv/mysql.txt, /usr/share/mythtv/mysql.txt and
      /etc/mythtv/mysql.txt in that order for MySQL connection information

    • A manpage
    • setup.py
  • video.py now has a simple command line interface to let you query it
  • Fix update of inactive programs bug per

  • Better DB error handling
  • Included a COPYING file with the right version of the GPL (it was missing

  • Fixed a bug where programs would be downloaded more than once (found with
    a unit test!)

  • Started raising exceptions instead of just sys.exit(1). This should make
    life easier for user interfaces in the future

  • Default to using storage groups for storing recordings before falling back
    to the RecordFilePrefix. This makes the behaviour: use a storage group
    named “MythNetTV” if it exists; use the default storage group if it
    exists; use the value of RecordFilePrefix.

  • Transcode avc1 videos, because some need it
  • Force ASCII encoding of title, subtitle, and all fields in the database
    to get around feeds which use unicode which python / MySQL can’t store

  • If there is only one attachment to an item, and its not in our whitelist
    of video formats, then warn the user that you’re assuming its a video file
    and then add it to the todo list

  • Slight tweak to the signature of video.MythNetTvVideo.Transcode()
  • Fix buf in RepairMissingDates which caused it to consistently crash
  • Fix typo in date warning code
  • Better handling of videos where the length of the video cannot be
    determined by mplayer

Release 5 is by far the best tested release of MythNetTV yet, with both unit tests and several users working quite closely with me to resolve problems found in the wild. You can grab your copy here.

MythNetTV release 4

New things in this release:

  • Removed gflags because people found it hard to find
  • Bug fix patch from David Linville applied
    • Fixed broken imports caused by refactoring
    • Transcode not needed for avc1 and m4v
  • Another bug fix patch from David Linville applied
    • Store filesize in the db
  • Removed some namespace imports I am not a fan of
  • Made verbosity optional for –update
  • Small code cleanups
  • Let the user know of repeated attempts to download a program
  • Documented the need for bittornado for bittorrent to work
  • Abandon downloading after 3 failed attempts (you can configure the number)
  • Detect stuck bittorrent downloads

Release 3 had a few bugs folks reported, this release should fix those problems. Let me know if you still see any. You can grab your copy here.

MythNetTV release 3

New things in this release:

  • Started work on an RSS exporter for MythTV recordings
  • DX50 doesn’t need transcode
  • Tweaked supported video mime types so “Tikibar TV” and “Ask a ninja” work
  • First cut of Bittorrent support
  • Schema upgrades
  • Archive recordings as well as importing them
  • Improved –list output
  • Subtitle restrictions on download as well
  • Make subscriptions inactive instead of deleting them (for unsubscribe)
  • Better filename safening
  • More markread options
  • Refactored code to be more sane
  • Don’t archive things imported from the archive location
  • Bulk import (–importmanylocal)

This version was a long time coming. Sorry about that. You can grab your copy here.

MythNetTV release 2

This release has bug fixes (including code from “nickca” for FLV support), and some new minor features. Enjoy!

  • Started working harder to ensure video filenames are unique once imported into MythTV, I now prepend video files with epoch seconds at time of import
  • DIVX (not divx) doesn’t need transcode, added. Check for the existence of the video directory, and return an error if it needs creating.
  • Handle storage groups, check for the existence of the data directory
  • Updated docs
  • Complained about the poor state of SWF support
  • WMV support
  • FLV support

Get it here if you care: http://www.stillhq.com/mythtv/mythnettv/

MythNetTV release 1

I figured it was time for another release of MythNetTV, especially since I’ve fixed some bugs recently and rolled in code generously provided by George Nassas. New things in this release:

  • Initial work on transcoding smaller files to something else
  • Better error checking for MySQL configuration and accessibility
  • Fixed bug where MythNetTV was unhappy if there were no channels configured in the MySQL database
  • Found, and hopefully fixed, a bug where program dates were not always being tracked correctly. Also added a check to make sure this doesn’t happen again
  • Added –markread, which lets you mark old shows as already downloaded

The code has seen a fair bit of use now, so it should be fairly stable. Let me know if you find any problems…

    $ ./mythnettv --statistics
    Programs tracked: 735
      Google EngEdu: 350
      Scoble Show: 85
      linux.conf.au 2007: 74
      Mobuzz TV: 82
      dl.tv: 32
      Net Cafe: 2
      Foo: 1
      ABC News: 2
      Australia: 1
      Play School: 1
      Diggnation: 72
    Programs still to download: 50
      Google EngEdu: 49
      Diggnation: 1
    Data transferred: 103 gb (111017264341 bytes)

Get it here if you care: http://www.stillhq.com/mythtv/mythnettv/

MythNetTV beta 4

As it says in the email:

To: Discussion about mythtv <mythtv-users@mythtv.org>
Subject: MythNetTV beta 4

Hi again.

MythNetTv is my video downloader / aggregator / importer thingie for MythTV.

I've spent a little longer testing this beta, and I think it's getting
kinda ready for a real release number or something. New things in this
version (from the change log):

  - Made --update more terse
  - Made --update more liberal about what it considers to be a video,
    specifically added video/quick time and text/html (to work around the
    rather broken http://www.mobuzztv.com/uk/rss/quicktime
  - Added a filter option to --download to constrain it to only
    downloading shows with a specific title
  - Added transcoding for mov and wmv2 files
  - If there is a straggling import, and it causes as error, just skip
    it and mark it as imported
  - Don't reset transferred data statistic when we start downloading a
    show again
  - Started implementing moniker support for downloads
  - Unsupported monikers will result in an attempt to download the URL
    using mplayer (which works for RTSP and MMS at the least)

Yes, that's right. You can now download only shows with a specific
title, and you can also download any protocol which mplayer supports --
specifically, RTSP and MMS are now supported.

Now, if only there was a non-sucky way to work out what streams
abc.net.au were offering at any given time...

Get it here if you care: http://www.stillhq.com/mythtv/mythnettv/