vagrant-sakura 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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