背景
VagrantでCloudn Compute Flatは操作できるけど、VPC(OpenNW)が操作できないと周りで聞いたので解決できるかやってみた。
環境
最初に使った環境は以下のとおり
% vagrant -v Vagrant 1.7.0
手順
vagrant-cloudstack pluginの導入
まず何にも用意がないのでまずはvagrant-cloudstackのプラグインを入れる。
% vagrant plugin install vagrant-cloudstack
無事に入ったことを確認
% vagrant plugin list vagrant-cloudstack (0.10.0) vagrant-share (1.1.3, system)
Vagrant用のテンプレートの作成 ~ Vagrantfileの作成
CloudnとVagrantを組み合わせて使う方法 を参考にさせてもらう。
が、何故か手元だとCloudmonkeyが動いてくれないので頑張って動かす。
MacでCloudmonkeyが動かなかったのでなんとかしてみた
動いたと思ったら、Cloudmonkeyの設定ファイルが変わっていたので設定の変更。
[core] profile = server ... [server] apikey = your_apikey secretkey = your_secretkey url = https://vpcopennw-api.jp-e1.cloudn-service.com/client/api expires = 600 timeout = 3600 verifysslcert = true
VagrantからCloudStackの操作に必要な情報をCloudmonkeyで拾ってくる。
> list templates templatefilter=self template: id = xxxx name = vagrant > list vpcs vpc: name = xxx id = xxxx > list zones zone: name = jp-e1a id = 80827400-840e-4e14-a0f3-54a998abff82 > list securitygroups securitygroup: id = xxxx > list serviceofferings serviceoffering: name = m1.small id = c6b72b0d-8541-474f-b617-e0051a9b6325
Vagrantfileを作成
Vagrant.configure(2) do |config| config.vm.box = "dummy" config.ssh.private_key_path = "~/.vagrant.d/insecure_private_key" config.vm.provider :cloudstack do |cloudstack, override| cloudstack.host = 'vpcopennw-api.jp-e1.cloudn-service.com' cloudstack.path = '/client/api' cloudstack.port = 443 cloudstack.scheme = 'https' cloudstack.api_key = 'xxxxx' cloudstack.secret_key = 'xxxxx' cloudstack.template_id = 'xxxx' cloudstack.service_offering_id = 'c6b72b0d-8541-474f-b617-e0051a9b6325' cloudstack.zone_id = '80827400-840e-4e14-a0f3-54a998abff82' cloudstack.security_group_ids = ['xxxx'] cloudstack.name = 'cloudn-openNW-instance' # ネットワークの種類と名前を指定 cloudstack.network_type = 'Advanced' cloudstack.network_id = 'xxxx' cloudstack.instance_ready_timeout = 300 end end
Vagrantの実行
準備はできたのでいざゆかん!
% vagrant up --provider=cloudstack ... ==> default: Waiting for instance to become "ready"... ==> default: Waiting for SSH to become available...
SSHがつながらなくてここから進まない・・・。 しかしながらWebコンソール上では元気に動いているように見えるので原因を考える。
・・・そうかVPCだから踏み台経由しないとインターネット越しだとつながらないのか。
というわけで、さっき起動したVMにVPCの静的NATをかましてそこを踏み台に。
踏み台サーバにVagrantを導入
まずsshでアクセス
% -i ~/.vagrant.d/insecure_private_key vagrant@xxx.xxx.xxx.xx
めんどくさいのでrootに上がっておく。
% sudo su -
Vagrantを落としてくるためにwgetを導入してからVagrantを入手してインストール。
もちろんvagrant-cloudstack
もインストールするのだがgccがないとvagrant-cloudstack
がインストールできなくて困るのでgccも入れておく。
# yum install -y wget gcc # wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.1_x86_64.rpm # rpm -ihv vagrant_1.7.1_x86_64.rpm # vagrant plugin install vagrant-cloudstack
これでVagrantが動く環境ができたので、あとはVagrantfileの用意をしなおす。
# mkdir cloudn-opennw # cd cloudn-opennw # vagrant init # vi Vagrantfile
Vagrant.configure(2) do |config| config.vm.box = "dummy" config.ssh.private_key_path = "~/.vagrant.d/insecure_private_key" config.vm.provider :cloudstack do |cloudstack, override| cloudstack.host = 'vpcopennw-api.jp-e1.cloudn-service.com' cloudstack.path = '/client/api' cloudstack.port = 443 cloudstack.scheme = 'https' cloudstack.api_key = 'xxxxx' cloudstack.secret_key = 'xxxxx' cloudstack.template_id = 'xxxx' cloudstack.service_offering_id = 'c6b72b0d-8541-474f-b617-e0051a9b6325' cloudstack.zone_id = '80827400-840e-4e14-a0f3-54a998abff82' cloudstack.security_group_ids = ['xxxx'] cloudstack.name = 'cloudn-openNW-instance01' # 名前は上記のものと違うのを指定すること # ネットワークの種類と名前を指定 cloudstack.network_type = 'Advanced' cloudstack.network_id = 'xxxx' cloudstack.instance_ready_timeout = 300 end end
再挑戦
# vagrant up --provider=cloudstack ... ==> default: Waiting for instance to become "ready"... ==> default: Waiting for SSH to become available... default: default: Vagrant insecure key detected. Vagrant will automatically replace default: this with a newly generated keypair for better security. default: default: Inserting generated public key within guest... default: Removing insecure key from the guest if its present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Machine is booted and ready for use! ==> default: Rsyncing folder: /root/ => /vagrant
無事に起動できたので接続確認
# vagrant ssh Thanks for using Official Template (CentOS). ==================================================== * Time Zone * Default TimeZone is UTC. You can change this with #sh /root/tzconfigurator.sh * Stack (Application Set) * Default install apps is following. - ntp - acpiphp - password-agent - openssh-clients - wget - telnet - rsync You can update those apps to latest version with #yum update If you want to install some stack, you can install that with #sh /root/package_installer.sh * To Change this message * please edit “/etc/motd”. ==================================================== [vagrant@cloudn-openNW-instance01 ~]$
無事にCloudnのOpenNW上に接続できるインスタンスをVagrantから建てられた。
結論
- VagrantからCloudnのOpenNWにインスタンスを建てることはできる。
- インターネット越しだと起動までしかできない。
- VPC内からであれば起動からアクセスまで可能
- FlatタイプとOpenNWで多少のVagrantfileの変更が必要
- OpenNWはNWタイプをAdvancedにしてNWのIDが必要
- アクセス先のURLの変更が必要
おまけ
vagrant-cloudstackのソースコードを眺めたけど、VPCを作る機能はなさそうだった。 というわけで、Vagrantを使う際は予めVPCとサブネットを作り、静的NATをしたインスタンスを用意した上でそのインスタンスからやってください。