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
ファイルを自動で作成し、かつbootproto
にstatic
を設定して、ip_address
にネットワークアドレスを指定すると
DHCPがない環境でも空きポートからIPアドレスを自動で採番します。
bootproto
にdhcp
を設定した場合でも必要な設定が作成され、いずれの場合でも例えば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回くらい作っては壊してを繰り返してしまいました。
今後の野望
でもとりあえずテスト書きたい。