vagrant-sakura 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 377e6c397d621d61e1d26700d65ff16974748ca8
4
- data.tar.gz: 292136e9093e73295475595801cb10b0bc3faf57
3
+ metadata.gz: fa036bfb2f34ad5a5927efc3a83b28322ddd64b3
4
+ data.tar.gz: e40636b2131472717a7a84fa2e588a120354160c
5
5
  SHA512:
6
- metadata.gz: ca7f44c45103ec2310ed62a1562266bb995cb546e025110c2701c6e9d6424f1ffa39224d0dde213cc558df3f036ea088aca1b1276f271c0631be73cc70abe4e3
7
- data.tar.gz: 457d62c6128fff7883166e234f9c07d07ed250ebe50b136f34f2c8546031da79212b1c13d3f9f81072e79faf385d8c452f27079a8c717f9f3f7d07498b2cecc2
6
+ metadata.gz: bfe40bc2ccd583e3806d1e98d12e04904f0997c0a921a9a32e37fa599dbdc4099a216d24b334071a4508c5e3d7889108e853370dd7b7854be72713f8f67294c5
7
+ data.tar.gz: 9271eaaafdbc25c4b60587985f43d709498048de14c20b80f0820054d12434ae919c79cef9b5f6ebab700290c5a73b57d03afcfd3ff1fb03bc6485435bb073b7
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
- # 0.1.0 (2013/10/07)
1
+ # 0.0.2 (2013/10/08)
2
+
3
+ - Add `vagrant sakura-list-id` command.
4
+ - Support `zone_id` configuration.
5
+
6
+ # 0.0.1 (2013/10/07)
2
7
 
3
8
  - Initial release.
data/README.md CHANGED
@@ -44,23 +44,35 @@ $ vagrant box add dummy https://github.com/tsahara/vagrant-sakura/raw/master/dum
44
44
  Vagrant.configure("2") do |config|
45
45
  config.vm.box = "dummy"
46
46
  config.ssh.username = "ubuntu"
47
+ config.ssh.private_key_path = File.expand_path "~/.ssh/id_rsa"
47
48
 
48
49
  config.vm.provider :sakura do |sakura|
49
50
  sakura.access_token = 'YOUR ACCESS TOKEN'
50
51
  sakura.access_token_secret = 'YOUR ACCESS TOKEN SECRET'
51
- #sakura.sshkey_id = '112500313986'
52
- #sakura.disk_source_archive = 112500182464
52
+ sakura.sshkey_id = 'YOUR PUBLIC KEY ID'
53
53
  end
54
54
  end
55
55
  ```
56
56
 
57
57
  そして ``vagrant up --provider=sakrua`` を実行してください。
58
58
 
59
+ サーバのディスクソースを ``sakura.disk_source_archive`` で指定しなかった
60
+ 場合のデフォルトは ``112500182464`` で Ubuntu 12.04.2LTS-server 64bit です。
61
+ このディスクソースのログインアカウントは ``root`` ではないため、
62
+ ``config.ssh.username`` で指定してやる必要があります。
63
+
59
64
  なお、さくらのクラウド API を利用するための API キー(ACCESS TOKEN)と
60
65
  シークレットトークン(ACCESS TOKEN SECRET)は環境変数
61
66
  ``SAKURA_ACCESS_TOKEN`` と ``SAKURA_ACCESS_TOKEN_SECRET``で指定することも
62
67
  できます。
63
68
 
69
+ ## コマンド
70
+ `sakura-list-id` コマンドを使って、`Vagrantfile` で指定するリソース ID
71
+ を調べることができます。
72
+ ```
73
+ $ vagrant sakuara-list-id
74
+ ...
75
+ ```
64
76
 
65
77
  ## 設定
66
78
 
@@ -73,7 +85,7 @@ end
73
85
  - ``server_name`` - サーバ名
74
86
  - ``server_plan`` - 作成するサーバのプラン ID
75
87
  - ``sshkey_id`` - サーバへのログインに利用する SSH 公開鍵のリソース ID
76
- - ``zone_id`` - は、まだゾーンが石狩第一しかないので指定できません :)
88
+ - ``zone_id`` - ゾーン ID (石狩第1=`is1a`, 石狩第2=`is1b`)
77
89
 
78
90
  ## ネットワーク
79
91
  ``vagrant-sakura`` は ``config.vm.network`` を利用したネットワークの構築を
@@ -1,4 +1,3 @@
1
- require "log4r"
2
1
  require 'vagrant-sakura/driver/api'
3
2
 
4
3
  module VagrantPlugins
@@ -6,14 +5,14 @@ module VagrantPlugins
6
5
  module Action
7
6
  class ConnectSakura
8
7
  def initialize(app, env)
9
- @app = app
10
- @logger = Log4r::Logger.new("vagrant_sakura::action::connect_sakura")
8
+ @app = app
11
9
  end
12
10
 
13
11
  def call(env)
14
12
  token = env[:machine].provider_config.access_token
15
13
  secret = env[:machine].provider_config.access_token_secret
16
- env[:sakura_api] = Driver::API.new(token, secret)
14
+ zone = env[:machine].provider_config.zone_id
15
+ env[:sakura_api] = Driver::API.new(token, secret, zone)
17
16
 
18
17
  @app.call(env)
19
18
  end
@@ -0,0 +1,38 @@
1
+ module VagrantPlugins
2
+ module Sakura
3
+ module Action
4
+ class ListId
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ api = env[:sakura_api]
11
+
12
+ puts "Zone: %s" % env[:machine].provider_config.zone_id
13
+ puts ""
14
+
15
+ puts "---- Archives ----"
16
+ puts "%-14s %s" % ["ID", "Name"]
17
+ r = api.get("/archive")
18
+ r["Archives"].sort { |a, b|
19
+ a["DisplayOrder"] <=> b["DisplayOrder"]
20
+ }.each { |archive|
21
+ puts "%-14u %s" % [archive["ID"], archive["Name"]]
22
+ }
23
+ puts ""
24
+
25
+ puts "---- Server Plans ----"
26
+ puts "%-7s %-70s" % ["ID", "Name"]
27
+ r = api.get("/product/server")
28
+ r["ServerPlans"].each { |plan|
29
+ puts "%-7u %s" % [plan["ID"], plan["Name"]]
30
+ }
31
+ puts ""
32
+
33
+ @app.call(env)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -33,7 +33,6 @@ module VagrantPlugins
33
33
  data = {
34
34
  "Disk" => {
35
35
  "Name" => server_name,
36
- "Zone" => { "ID" => 31001 }, # Ishikari only
37
36
  "Plan" => { "ID" => disk_plan },
38
37
  "Connection" => "virtio",
39
38
  "SourceArchive" => {
@@ -68,7 +67,6 @@ module VagrantPlugins
68
67
  data = {
69
68
  "Server" => {
70
69
  "Name" => server_name,
71
- "Zone" => { "ID" => 31001 }, # Ishikari
72
70
  "ServerPlan" => { "ID" => server_plan },
73
71
  "ConnectedSwitches" => [
74
72
  { "Scope" => "shared", "BandWidthMbps" => 100 }
@@ -35,6 +35,14 @@ module VagrantPlugins
35
35
  end
36
36
  end
37
37
 
38
+ def self.action_list_id
39
+ Vagrant::Action::Builder.new.tap do |b|
40
+ b.use ConfigValidate
41
+ b.use ConnectSakura
42
+ b.use ListId
43
+ end
44
+ end
45
+
38
46
  # def self.action_provision
39
47
  # Vagrant::Action::Builder.new.tap do |b|
40
48
  # b.use ConfigValidate
@@ -143,6 +151,7 @@ module VagrantPlugins
143
151
  autoload :DeleteServer, action_root.join("delete_server")
144
152
  autoload :IsCreated, action_root.join("is_created")
145
153
  autoload :Halt, action_root.join("halt")
154
+ autoload :ListId, action_root.join("list_id")
146
155
  autoload :MessageAlreadyCreated, action_root.join("message_already_created")
147
156
  autoload :MessageDown, action_root.join("message_down")
148
157
  autoload :MessageNotCreated, action_root.join("message_not_created")
@@ -2,8 +2,8 @@ module VagrantPlugins
2
2
  module Sakura
3
3
  class Command < Vagrant.plugin(2, :command)
4
4
  def execute
5
- with_target_vms do |vm|
6
- vm.action(:plans)
5
+ with_target_vms(nil, { :provider => "sakura" }) do |vm|
6
+ vm.action(:list_id)
7
7
  end
8
8
  0
9
9
  end
@@ -38,8 +38,8 @@ module VagrantPlugins
38
38
  # @return [String]
39
39
  attr_accessor :sshkey_id
40
40
 
41
- # No Zone ID config - there is only one zone available now :)
42
- #attr_accessor :zone_id
41
+ # The ID of the zone.
42
+ attr_accessor :zone_id
43
43
 
44
44
  def initialize
45
45
  @access_token = UNSET_VALUE
@@ -49,6 +49,7 @@ module VagrantPlugins
49
49
  @server_name = UNSET_VALUE
50
50
  @server_plan = UNSET_VALUE
51
51
  @sshkey_id = UNSET_VALUE
52
+ @zone_id = UNSET_VALUE
52
53
  end
53
54
 
54
55
  def finalize!
@@ -79,6 +80,10 @@ module VagrantPlugins
79
80
  if @sshkey_id == UNSET_VALUE
80
81
  @sshkey_id = nil
81
82
  end
83
+
84
+ if @zone_id == UNSET_VALUE
85
+ @zone_id = "is1a" # the first zone
86
+ end
82
87
  end
83
88
 
84
89
  def validate(machine)
@@ -1,3 +1,4 @@
1
+ require 'log4r'
1
2
  require 'net/https'
2
3
  require 'json'
3
4
 
@@ -5,15 +6,15 @@ module VagrantPlugins
5
6
  module Sakura
6
7
  module Driver
7
8
  APIHOST = "secure.sakura.ad.jp"
8
- APIPREFIX = "/cloud/api/cloud/1.0"
9
9
  CERTFILE = File.expand_path("../cert.pem", __FILE__)
10
10
 
11
11
  class API
12
- def initialize(access_token, access_token_secret)
12
+ def initialize(access_token, access_token_secret, zone_id)
13
13
  @logger = Log4r::Logger.new("vagrant::provider::sakura")
14
14
 
15
15
  @access_token = access_token
16
16
  @access_token_secret = access_token_secret
17
+ @prefix = "/cloud/zone/#{zone_id}/api/cloud/1.1"
17
18
 
18
19
  @https = Net::HTTP.new(APIHOST, 443)
19
20
  @https.use_ssl = true
@@ -23,25 +24,25 @@ module VagrantPlugins
23
24
  end
24
25
 
25
26
  def delete(resource, data = nil)
26
- request = Net::HTTP::Delete.new(APIPREFIX + resource)
27
+ request = Net::HTTP::Delete.new(@prefix + resource)
27
28
  request.body = data.to_json if data
28
29
  do_request request
29
30
  end
30
31
 
31
32
  def get(resource, data = nil)
32
- request = Net::HTTP::Get.new(APIPREFIX + resource)
33
+ request = Net::HTTP::Get.new(@prefix + resource)
33
34
  request.body = data.to_json if data
34
35
  do_request request
35
36
  end
36
37
 
37
38
  def post(resource, data)
38
- request = Net::HTTP::Post.new(APIPREFIX + resource)
39
+ request = Net::HTTP::Post.new(@prefix + resource)
39
40
  request.body = data.to_json
40
41
  do_request request
41
42
  end
42
43
 
43
44
  def put(resource, data = nil)
44
- request = Net::HTTP::Put.new(APIPREFIX + resource)
45
+ request = Net::HTTP::Put.new(@prefix + resource)
45
46
  request.body = if data then data.to_json else '' end
46
47
  do_request request
47
48
  end
@@ -56,6 +57,8 @@ module VagrantPlugins
56
57
  case response.code
57
58
  when /2../
58
59
  # Success
60
+ when "400"
61
+ raise BadRequestError, emsg
59
62
  when "404"
60
63
  raise NotFoundError, emsg
61
64
  when "409"
@@ -69,6 +72,7 @@ module VagrantPlugins
69
72
  private :do_request
70
73
  end
71
74
 
75
+ class BadRequestError < RuntimeError; end
72
76
  class ConflictError < RuntimeError; end
73
77
  class GenericError < RuntimeError; end
74
78
  class NotFoundError < RuntimeError; end
@@ -23,10 +23,10 @@ module VagrantPlugins
23
23
  Provider
24
24
  end
25
25
 
26
- # command(:'sakura-plans') do
27
- # require_relative "command"
28
- # Command
29
- # end
26
+ command(:'sakura-list-id') do
27
+ require_relative "command"
28
+ Command
29
+ end
30
30
 
31
31
  def self.setup_i18n
32
32
  I18n.load_path << File.expand_path("locales/en.yml", Sakura.source_root)
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module Sakura
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'vagrant-sakura/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "vagrant-sakura"
8
+ spec.version = VagrantPlugins::Sakura::VERSION
9
+ spec.authors = ["Tomoyuki Sahara"]
10
+ spec.email = ["sahara@surt.net"]
11
+ spec.description = %q{Enables Vagrant to manage machines in Sakura Cloud.}
12
+ spec.summary = %q{Enables Vagrant to manage machines in Sakura Cloud.}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-sakura
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomoyuki Sahara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-07 00:00:00.000000000 Z
11
+ date: 2013-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -60,6 +60,7 @@ files:
60
60
  - lib/vagrant-sakura/action/delete_server.rb
61
61
  - lib/vagrant-sakura/action/halt.rb
62
62
  - lib/vagrant-sakura/action/is_created.rb
63
+ - lib/vagrant-sakura/action/list_id.rb
63
64
  - lib/vagrant-sakura/action/message_already_created.rb
64
65
  - lib/vagrant-sakura/action/message_down.rb
65
66
  - lib/vagrant-sakura/action/message_not_created.rb
@@ -78,6 +79,7 @@ files:
78
79
  - lib/vagrant-sakura/provider.rb
79
80
  - lib/vagrant-sakura/version.rb
80
81
  - locales/en.yml
82
+ - vagrant-sakura.gemspec
81
83
  homepage: ''
82
84
  licenses:
83
85
  - MIT