どもー。
年末になり一層イケメンに磨きがかかってきました山下です。
今回は僕が開発し、メンテナンスしている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_: &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はいかにインスタンスを楽に作り、管理するかというところに注力していきたいと思っている。