例えばCentOSだと/etc/redhat-release→/etc/centos-releaseを見ればわかるのだが、世の中的にはどうしているのかなと思ってAnsibleのコードとか読んでみたけど、やっぱり/etc/redhat-release見ているだけだった。
ansibleはplatform.dist()[1]を取得していて、platform.dist()は/etcからリリースファイルにマッチするファイルを読み込んで、ファイルの内容に対してさらに正規表現でバージョンなどを取得している。リリースファイルの正規表現やリリース情報の正規表現は以下。
_release_filename = re.compile(r'(\w+)[-_](release|version)') _lsb_release_version = re.compile(r'(.+)' ' release ' '([\d.]+)' '[^(]*(?:\((.+)\))?') _release_version = re.compile(r'([^0-9]+)' '(?: release )?' '([\d.]+)' '[^(]*(?:\((.+)\))?')
結構泥臭い。あと、platform.distは3.5でdeprecatedになっていて3.7で削除されるらしいので、Ansible側のコードは書き直しが必要になってくるのかな。