Pecの最近のバージョンアップ事情

どもー。
年末になり一層イケメンに磨きがかかってきました山下です。
今回は僕が開発し、メンテナンスしているOpenStackのインスタンス作成ラッパーのPecの最近のバージョンアップについてまとめてみました。

記事を書いた時点の最新バージョンは0.8.1です。

各コマンドに指定できるホスト名が動的に

例えばこれまでは、各コマンドに渡せるホスト名は一つでFQDNでした。

$ pec status example.foo.jp
Current machine status:
 example.foo.jp ACTIVE  muumuu m1.small nova comp-node.local  10.10.10.1

これが複数渡せるようになったり、

$ pec status example.foo.jp example.bar.jp
Current machine status:
 example.foo.jp ACTIVE  muumuu m1.small nova comp-node.local  10.10.10.1
 example.bar.jp ACTIVE  muumuu m1.small nova comp-node.local  20.20.20.1

ワイルドカードが利用できるようになっています。

$ pec status example*
Current machine status:
 example.foo.jp ACTIVE  muumuu m1.small nova comp-node.local  10.10.10.1
 example.bar.jp ACTIVE  muumuu m1.small nova comp-node.local  20.20.20.1

statusコマンドの高速化

こちらはキャッシュ周りのチューニングを行っていて、フェッチ回数を減らすことでこれまでと比べて爆速で表示できるようになっています。

インスタンス作成失敗時のポートリカバリ

これまではインスタンスの作成に失敗した時、既にポートが作成済みであった場合、作成されたポートはそのまま在庫として残ってしまっていましたが、リカバリで削除するように修正されています。

make start pyama-test001.test.com
image is centos-7.1_chef-12.3_puppet-3.7
flavor is m1.small
availability_zone is nova
port create start : eth0
assgin ip : 10.10.10.10
keypair is example001
create error
recovery start pyama-test001.test.com ⇐
start port recovery
port delete id:1
complete port recovery

ERBテンプレートに対応

これが最近の最大のアップデートです。
もともとyamlマージ記法に対応していたので、デフォルト値を定義すれば同じようなVMはほぼコピペで定義できました。
– Pec.yaml

_default_: &def
  os_type: centos
  tenant: your_tenant
  image: centos-7.1_chef-12.3_puppet-3.7
  flavor: m1.small
  availability_zone: nova
  networks:
    eth0:
      bootproto: static
      allowed_address_pairs:
      - 10.1.1.5/24
      ip_address: 10.1.1.0/24
      gateway: 10.1.1.254
      dns1: 8.8.8.8
# vm config
pyama-test001:
  <<: *def
pyama-test002:
  <<: *def

今回ERBテンプレートにしたことで内部にRubyのコードを埋め込むことが可能になり、こういった定義が可能になりました。
– Pec.yaml.erb

_default_: &amp;def
  os_type: centos
  tenant: your_tenant
  image: centos-7.1_chef-12.3_puppet-3.7
  flavor: m1.small
  availability_zone: nova
  networks:
    eth0:
      bootproto: static
      allowed_address_pairs:
      - 10.1.1.5/24
      ip_address: 10.1.1.0/24
      gateway: 10.1.1.254
      dns1: 8.8.8.8
# vm config
<% ["pyama-test001:", "pyama-test002:"].each do |name| %>
<%= name %>
  <<: *def
<% end %>

ERBを利用することで数100台のホスト定義も工夫すれば数行で定義できるようになったので定義の可読性も上がり、管理がしやすくなりました。
ERB化するにあたり、configコマンドで全定義の出力を差分比較することで、移行ミスを防げることが出来ると思うのでご活用下さい。

$ pec config

今後のアップデート予定

やりたいなぁと思っているのは設定ファイル内のパスワードとかを暗号化する仕組みを何か考えたい。
sshとかプロビジョニングは他のツールに任せて、Pecはいかにインスタンスを楽に作り、管理するかというところに注力していきたいと思っている。