SpecinfraでリモートホストのOS情報を知る
使ってみようと思ったきっかけ
とある事情で社内で使用している数多のサーバーのOS情報をまとめたりしたくなったのでSpecinfraについて調べました。
使い方を調べる
検索しても参考になりそうな記事は少なく、この記事を参考にして書き始めました。
が、追記に内容が古いと書かれているとおり、このままでは動作しませんでした。
なんとか動かすことができた
Specinfraのコードを読みつつ、サンプルコードを読みつつ修正をしていたら、参考にしていた記事とは全く別物になりましたが、なんとか動かすことができました。
モジュール名がSpecInfraからSpecinfraに変わっていることに気づかなかったのが最大のハマりポイントだった気がします。
参考にしたコードの一部
specinfra/multiple_backends.rb at master · mizzy/specinfra · GitHub
specinfra/specinfra.rb at master · mizzy/specinfra · GitHub
specinfra/base.rb at master · mizzy/specinfra · GitHub
specinfra/ssh.rb at master · mizzy/specinfra · GitHub
サンプルコード
Vagrantっぽい接続情報になっていますが、ホストなどは適宜書き換えていただければリモートホストでも動作すると思います。
SSHの接続情報まわりはNet::SSHで使えるものが、そのまま使えるようです。
require 'specinfra' ssh_options = { host_name: 'localhost', user: 'vagrant', port: 2222, keys: ['~/.ssh/id_rsa'], } backend = Specinfra::Backend::Ssh.new( host: ssh_options[:host_name], ssh_options: ssh_options, disable_sudo: true, ) p backend.os_info
実行してみる
Bundlerを使ったので bundle exec
で実行します。
$ bundle exec ruby os_info.rb {:family=>"ubuntu", :release=>"14.04", :arch=>"x86_64"}
感想
諸事情によりサーバーの環境がバラバラだったりするので、こういった方法で自動的にサーバーの情報を集めることができれば、辛い台帳管理などしなくてもよくなりそうだなと思って試してみました。
思ったほどハマらずに動作確認できたので、さっそく実践投入するつもりです。