VMを作っては壊すPecというコマンドを作った。

どうも!
イケメンの申し子P山です。

現在ペパボではOpenStackを用いてプライベートクラウドを絶賛構築中でして、
その中でVMををガンガン作ってガンガン壊してニヤニヤするためにコマンド作ってみました。

インストール

$ gem install specific_install
$ gem specific_install 'git@github.com:fog/fog.git'
$ gem install pec

specific_installを利用する理由はfogというgemを使用していて、
PRがmasterに取り込まれはしているのですが、
月に一回くらいのリリースのようなので、とりあえず今はgitからmasterブランチをインストールしてます。
(今時点でgem installされるfogだとSecurity Groupが適用されない)

追記
specific_installするとうまく動かないケースがあるので、その場合は抜いてください。

使い方

サンプル設定ファイルの作成と接続先の設定

pec initコマンドを実行すると対話式で接続先のAPIの設定を行ったり、
サンプルファイルが作成されます。

$ pec init
Start Configure by OpenStack
openstack auth_uri: http://your-api-url:35357/v2.0/tokens
openstack username: pyama
openstack api_key: your_password
openstack tenant: your_tenant
Configure Complete!
create directry user_datas
create configure file Pec.yaml

設定ファイルの編集

$ cat Pec.yaml
pyama-test001.cloud.local:
  tenant: pepabo
  image: centos-7.1
  flavor: m1.small
  networks:
    eth0:
      bootproto: static
      ip_address: 10.10.10.0/24
      gateway: 10.10.10.254
      dns1: 8.8.8.8
      dns2: 8.8.8.8
  security_group:
    - default
    - ssh_from_office
  templates:
    - users/default
  user_data:
    hostname: pyama-test001
    fqdn: pyama-test001.cloud.local

設定ファイルはyaml形式で、詳細なフォーマットはこちらに記載してます。
特徴はnetworksに設定を行うと、NeutronAPIとcloud-initのcloud-configを用いて、ifcfg-ethXXXファイルを自動で作成し、かつbootprotostatic を設定して、ip_addressにネットワークアドレスを指定すると
DHCPがない環境でも空きポートからIPアドレスを自動で採番します。
bootprotodhcpを設定した場合でも必要な設定が作成され、いずれの場合でも例えばonboot: noとか任意の項目を書いておくと設定ファイルに項目が追加されます。

またcloud-initに渡すuser-dataのtemplate管理が可能でtemplatesディレクティブに、users/defaultと定義しており、このファイルの中身はこんな感じです。

$ cat user_datas/users/default.yaml
users:
  - name: centos
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    ssh-authorized-keys:
      - ssh-rsa koukaikagidayooolfkjfsaldkjfaldkfjlasdjfa2398320fdskajf pyama

VM個別に書きたい内容があればuser_dataディレクティブに記載すればこちらももちろん適用されます。

仮想マシンの操作

起動

pec upコマンドで定義ファイルに記載されたファイルをまとめて起動する事ができます。

$ pec up
pyama-test001.cloud.local: assingn ip 10.10.10.1
success create for server_name:pyama-test001.cloud.local
pyama-test002.cloud.local: assingn ip 10.1.10.2
success create for server_name:pyama-test002.cloud.local

こんな感じでホスト名を指定すると、指定したホストのみの操作も可能です。

$ pec up pyama-test001.cloud.local
pyama-test001.cloud.local: assingn ip 10.10.10.1
success create for server_name:pyama-test001.cloud.local

状態確認

VMの起動状態や、各種状態を確認可能です。
割り当てられたポートのIPも見れる。

$ pec status
Current machine stasus:
 pyama-test001.cloud.local         ACTIVE     pepabo     m1.small   comp-node0001.u01.cloud.local     10.10.10.1
 pyama-test002.cloud.local         uncreated

VMの削除

VMをまとめて根こそぎ削除します。
一応Yes/No確認しますが-fを引数に渡すと有無を言わさず削除も可能です。

$ pec destroy
pyama-test001.cloud.local: Are you sure you want to destroy the 'pyama-test001.cloud.local' VM? [y/N] y
server_name:pyama-test001.cloud.local is deleted!
pyama-test002.cloud.local: Are you sure you want to destroy the 'pyama-test002.cloud.local' VM? [y/N] y
server_name:pyama-test002.cloud.local is not fond!
can't destroy server:pyama-test002.cloud.local

もう、起動削除が楽しすぎて一人で423回くらい作っては壊してを繰り返してしまいました。

今後の野望

でもとりあえずテスト書きたい。