vagrant-iijgp 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.ja.md +106 -0
  5. data/README.md +109 -0
  6. data/Rakefile +1 -0
  7. data/dummy.box +0 -0
  8. data/example_box/README.md +10 -0
  9. data/example_box/Vagrantfile +9 -0
  10. data/example_box/metadata.json +1 -0
  11. data/lib/vagrant-iijgp/action/boot.rb +28 -0
  12. data/lib/vagrant-iijgp/action/check_running.rb +19 -0
  13. data/lib/vagrant-iijgp/action/create_vm.rb +59 -0
  14. data/lib/vagrant-iijgp/action/destroy.rb +27 -0
  15. data/lib/vagrant-iijgp/action/is_created.rb +16 -0
  16. data/lib/vagrant-iijgp/action/is_stopped.rb +16 -0
  17. data/lib/vagrant-iijgp/action/message_already_running.rb +16 -0
  18. data/lib/vagrant-iijgp/action/message_invalid_status.rb +16 -0
  19. data/lib/vagrant-iijgp/action/message_not_created.rb +16 -0
  20. data/lib/vagrant-iijgp/action/message_will_not_destroy.rb +17 -0
  21. data/lib/vagrant-iijgp/action/prepare_iijapi.rb +38 -0
  22. data/lib/vagrant-iijgp/action/read_ssh_info.rb +27 -0
  23. data/lib/vagrant-iijgp/action/read_state.rb +41 -0
  24. data/lib/vagrant-iijgp/action/set_label.rb +25 -0
  25. data/lib/vagrant-iijgp/action/stop_virtual_machine.rb +31 -0
  26. data/lib/vagrant-iijgp/action/sync_folders.rb +96 -0
  27. data/lib/vagrant-iijgp/action/vagrant_tweaks.rb +22 -0
  28. data/lib/vagrant-iijgp/action.rb +182 -0
  29. data/lib/vagrant-iijgp/config.rb +78 -0
  30. data/lib/vagrant-iijgp/errors.rb +19 -0
  31. data/lib/vagrant-iijgp/plugin.rb +53 -0
  32. data/lib/vagrant-iijgp/provider.rb +45 -0
  33. data/lib/vagrant-iijgp/version.rb +5 -0
  34. data/lib/vagrant-iijgp.rb +18 -0
  35. data/locales/en.yml +70 -0
  36. data/sample/Vagrantfile +38 -0
  37. data/vagrant-iijgp.gemspec +28 -0
  38. metadata +179 -0
@@ -0,0 +1,31 @@
1
+ module VagrantPlugins
2
+ module ProviderIijGp
3
+ module Action
4
+ class StopVirtualMachine
5
+ def initialize(app, env)
6
+ @app = app
7
+ @logger = Log4r::Logger.new("vagrant_iijgp::action::stop_virtual_machine")
8
+ end
9
+
10
+ def call(env)
11
+ @env = env
12
+
13
+ force = env[:force_halt] if env.has_key?(:force_halt)
14
+ env[:ui].info I18n.t("vagrant.actions.vm.halt.#{force ? "force" : "graceful"}")
15
+
16
+ config = env[:machine].provider_config
17
+ gp = config.gp_service_code
18
+ gc = env[:machine].id
19
+
20
+ vm = env[:iijapi].gp(gp).gc(gc)
21
+ vm.stop(force)
22
+
23
+ env[:ui].info I18n.t("vagrant_iijgp.wait_for_stop")
24
+ vm.wait_for_stop { env[:ui].info "-- current_status: #{vm.status}" }
25
+
26
+ @app.call(env)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,96 @@
1
+ require "vagrant/util/scoped_hash_override"
2
+ require "vagrant/util/subprocess"
3
+
4
+ module VagrantPlugins
5
+ module ProviderIijGp
6
+ module Action
7
+ class SyncFolders
8
+ include Vagrant::Util::ScopedHashOverride
9
+
10
+ def initialize(app, env)
11
+ @app = app
12
+ @logger = Log4r::Logger.new("vagrant_iijgp::action::sync_folders")
13
+ end
14
+
15
+ def call(env)
16
+ @env = env
17
+
18
+ prepare_folders
19
+
20
+ @app.call(env)
21
+
22
+ install_rsync_guest
23
+ rsync
24
+ end
25
+
26
+ def install_rsync_guest
27
+ @env[:ui].info I18n.t("vagrant_iijgp.install_rsync")
28
+ @env[:machine].communicate.execute("yum install -y rsync")
29
+ end
30
+
31
+ def rsync
32
+ ssh_info = @env[:machine].ssh_info
33
+
34
+ synced_folders.each do |id, data|
35
+ hostpath = File.expand_path(data[:hostpath], @env[:root_path])
36
+ guestpath = data[:guestpath]
37
+
38
+ # append tailing slash for rsync
39
+ hostpath = hostpath + '/' if hostpath !~ /\/$/
40
+ guestpath = guestpath + '/' if guestpath !~ /\/$/
41
+
42
+ @env[:machine].communicate.execute(%Q[mkdir -p "#{guestpath}" && chown "#{ssh_info[:username]}" "#{guestpath}"])
43
+
44
+ ssh_command = %Q[ssh -p #{ssh_info[:port]} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -i "#{ssh_info[:private_key_path]}"]
45
+ command = %w[rsync -avz --exclude .vagrant/ -e] +
46
+ [ssh_command, hostpath, "#{ssh_info[:username]}@#{ssh_info[:host]}:#{guestpath}"]
47
+
48
+ @logger.info ("-- rsync command: #{command.inspect}")
49
+ @env[:ui].info I18n.t("vagrant_iijgp.rsync_folder", :hostpath => hostpath, :guestpath => guestpath)
50
+ ret = Vagrant::Util::Subprocess.execute(*command)
51
+ if ret.exit_code != 0
52
+ raise Errors::RsyncError, :guestpath => guestpath, :hostpath => hostpath, :stderr => ret.stderr
53
+ end
54
+ end
55
+ end
56
+
57
+ # Returns an actual list of IIJGP shared folders
58
+ def synced_folders
59
+ {}.tap do |result|
60
+ @env[:machine].config.vm.synced_folders.each do |id, data|
61
+ data = scoped_hash_override(data, :iijgp)
62
+
63
+ # Ignore NFS shared folders
64
+ next if data[:nfs]
65
+
66
+ # Ignore disabled shared folders
67
+ next if data[:disabled]
68
+
69
+ result[id] = data.dup
70
+ end
71
+ end
72
+ end
73
+
74
+ # Prepares the synced folders by verifying they exist and creating them
75
+ # if they don't.
76
+ def prepare_folders
77
+ synced_folders.each do |id, options|
78
+ hostpath = Pathname.new(options[:hostpath]).expand_path(@env[:root_path])
79
+
80
+ if !hostpath.directory? && options[:create]
81
+ # Host path doesn't exist, so let's create it.
82
+ @logger.debug("Host path doesn't exist, creating: #{hostpath}")
83
+
84
+ begin
85
+ hostpath.mkpath
86
+ rescue Errno::EACCES
87
+ raise Vagrant::Errors::SharedFolderCreateFailed,
88
+ :path => hostpath.to_s
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,22 @@
1
+ module VagrantPlugins
2
+ module ProviderIijGp
3
+ module Action
4
+ class VagrantTweaks
5
+ def initialize(app, env)
6
+ @app = app
7
+ @logger = Log4r::Logger.new("vagrant_iijgp::action::vagrant_tweaks")
8
+ end
9
+
10
+ def call(env)
11
+ case env[:machine].provider_config.vagrant_tweaks
12
+ when :allow_root_notty_sudo
13
+ env[:machine].communicate.execute(%q[grep "^Defaults:root !requiretty$" /etc/sudoers ||] +
14
+ %q[(chmod 600 /etc/sudoers && sed -i.bak 's/^Defaults\s*requiretty/Defaults requiretty\nDefaults:root !requiretty/g' /etc/sudoers; chmod 400 /etc/sudoers)])
15
+ end
16
+
17
+ @app.call(env)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,182 @@
1
+ require "vagrant/action/builder"
2
+
3
+ module VagrantPlugins
4
+ module ProviderIijGp
5
+ module Action
6
+ include Vagrant::Action::Builtin
7
+
8
+ def self.action_boot
9
+ Vagrant::Action::Builder.new.tap do |b|
10
+ b.use Provision
11
+ b.use SyncFolders
12
+ b.use SetLabel
13
+ b.use Boot
14
+ b.use WaitForCommunicator, [:starting, :running]
15
+ end
16
+ end
17
+
18
+ def self.action_destroy
19
+ Vagrant::Action::Builder.new.tap do |b|
20
+ b.use Call, IsCreated do |env1, b1|
21
+ if !env1[:result]
22
+ b1.use MessageNotCreated
23
+ next
24
+ end
25
+
26
+ b1.use Call, DestroyConfirm do |env2, b2|
27
+ if env2[:result]
28
+ b2.use EnvSet, :force_halt => true
29
+ b2.use action_halt
30
+ b2.use Destroy
31
+ b2.use ProvisionerCleanup
32
+ else
33
+ b2.use MessageWillNotDestroy
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ def self.action_halt
41
+ Vagrant::Action::Builder.new.tap do |b|
42
+ b.use ConfigValidate
43
+ b.use PrepareIIJAPI
44
+ b.use Call, IsCreated do |env1, b1|
45
+ if env1[:result]
46
+ b1.use Call, IsStopped do |env2, b2|
47
+ if !env2[:result]
48
+ b2.use StopVirtualMachine
49
+ end
50
+ end
51
+ else
52
+ b1.use MessageNotCreated
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ def self.action_provision
59
+ Vagrant::Action::Builder.new.tap do |b|
60
+ b.use ConfigValidate
61
+ b.use PrepareIIJAPI
62
+ b.use Call, ReadState do |env1, b1|
63
+ case env1[:machine_state]
64
+ when :running
65
+ b1.use Provision
66
+ b1.use SyncFolders
67
+ b1.use VagrantTweaks
68
+ when :not_created, :initialized
69
+ b1.use MessageNotCreated
70
+ else
71
+ b1.use MessageInvalidStatus
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ def self.action_reload
78
+ Vagrant::Action::Builder.new.tap do |b|
79
+ b.use ConfigValidate
80
+ b.use PrepareIIJAPI
81
+ b.use Call, IsCreated do |env1, b1|
82
+ if !env1[:result]
83
+ b1.use MessageNotCreated
84
+ next
85
+ end
86
+
87
+ b1.use action_halt
88
+ b1.use action_up
89
+ end
90
+ end
91
+ end
92
+
93
+ def self.action_read_ssh_info
94
+ Vagrant::Action::Builder.new.tap do |b|
95
+ b.use ConfigValidate
96
+ b.use PrepareIIJAPI
97
+ b.use ReadSSHInfo
98
+ end
99
+ end
100
+
101
+ def self.action_read_state
102
+ Vagrant::Action::Builder.new.tap do |b|
103
+ b.use ConfigValidate
104
+ b.use PrepareIIJAPI
105
+ b.use ReadState
106
+ end
107
+ end
108
+
109
+ def self.action_ssh
110
+ Vagrant::Action::Builder.new.tap do |b|
111
+ b.use ConfigValidate
112
+ b.use PrepareIIJAPI
113
+ b.use CheckRunning
114
+ b.use SSHExec
115
+ end
116
+ end
117
+
118
+ def self.action_ssh_run
119
+ Vagrant::Action::Builder.new.tap do |b|
120
+ b.use ConfigValidate
121
+ b.use PrepareIIJAPI
122
+ b.use CheckRunning
123
+ b.use SSHRun
124
+ end
125
+ end
126
+
127
+ def self.action_start
128
+ Vagrant::Action::Builder.new.tap do |b|
129
+ b.use Call, IsStopped do |env1, b1|
130
+ if env1[:result]
131
+ b1.use action_boot
132
+ else
133
+ b1.use MessageAlreadyRunning
134
+ next
135
+ end
136
+ end
137
+ end
138
+ end
139
+
140
+ def self.action_up
141
+ Vagrant::Action::Builder.new.tap do |b|
142
+ b.use ConfigValidate
143
+ b.use PrepareIIJAPI
144
+ b.use Call, ReadState do |env1, b1|
145
+ case env1[:machine_state]
146
+ when :not_created, :initialized
147
+ b1.use CreateVM
148
+ b1.use action_start
149
+ b1.use VagrantTweaks
150
+ when :stopped
151
+ b1.use action_start
152
+ when :running
153
+ b1.use MessageAlreadyRunning
154
+ else
155
+ b1.use MessageInvalidStatus
156
+ end
157
+ end
158
+ end
159
+ end
160
+
161
+ action_root = Pathname.new(File.expand_path("../action", __FILE__))
162
+ autoload :Boot, action_root.join("boot")
163
+ autoload :CheckRunning, action_root.join("check_running")
164
+ autoload :CreateVM, action_root.join("create_vm")
165
+ autoload :Destroy, action_root.join("destroy")
166
+ autoload :IsCreated, action_root.join("is_created")
167
+ autoload :IsStopped, action_root.join("is_stopped")
168
+ autoload :MessageAlreadyRunning, action_root.join("message_already_running")
169
+ autoload :MessageInvalidStatus, action_root.join("message_invalid_status")
170
+ autoload :MessageNotCreated, action_root.join("message_not_created")
171
+ autoload :MessageWillNotDestroy, action_root.join("message_will_not_destroy")
172
+ autoload :PrepareIIJAPI, action_root.join("prepare_iijapi")
173
+ autoload :ReadSSHInfo, action_root.join("read_ssh_info")
174
+ autoload :ReadState, action_root.join("read_state")
175
+ autoload :SetLabel, action_root.join("set_label")
176
+ autoload :StopVirtualMachine, action_root.join("stop_virtual_machine")
177
+ autoload :SyncFolders, action_root.join("sync_folders")
178
+ autoload :VagrantTweaks, action_root.join("vagrant_tweaks")
179
+
180
+ end
181
+ end
182
+ end
@@ -0,0 +1,78 @@
1
+ module VagrantPlugins
2
+ module ProviderIijGp
3
+ class Config < Vagrant.plugin("2", :config)
4
+ attr_accessor :endpoint
5
+
6
+ attr_accessor :access_key
7
+ attr_accessor :secret_key
8
+
9
+ attr_accessor :gp_service_code
10
+ attr_accessor :gc_service_code
11
+
12
+ attr_accessor :virtual_machine_type
13
+ attr_accessor :os
14
+
15
+ attr_accessor :ssh_public_key
16
+
17
+ attr_accessor :label
18
+
19
+ attr_accessor :vagrant_tweaks
20
+
21
+ attr_accessor :api_max_retry_count
22
+ attr_accessor :api_retry_wait
23
+
24
+ def initialize
25
+ @endpoint = UNSET_VALUE
26
+ @access_key = UNSET_VALUE
27
+ @secret_key = UNSET_VALUE
28
+ @gp_service_code = UNSET_VALUE
29
+ @gc_service_code = UNSET_VALUE
30
+ @virtual_machine_type = UNSET_VALUE
31
+ @os = UNSET_VALUE
32
+ @ssh_public_key = UNSET_VALUE
33
+ @label = UNSET_VALUE
34
+ @vagrant_tweaks = UNSET_VALUE
35
+ @api_max_retry_count = UNSET_VALUE
36
+ @api_retry_wait = UNSET_VALUE
37
+ end
38
+
39
+ def finalize!
40
+ @endpoint = nil if @endpoint == UNSET_VALUE
41
+ @access_key = ENV['IIJAPI_ACCESS_KEY'] if @access_key == UNSET_VALUE
42
+ @secret_key = ENV['IIJAPI_SECRET_KEY'] if @secret_key == UNSET_VALUE
43
+
44
+ @gc_service_code = nil if @gc_service_code == UNSET_VALUE
45
+
46
+ @virtual_machine_type = 'V10' if @virtual_machine_type == UNSET_VALUE
47
+ @os = 'CentOS6_64_U' if @os == UNSET_VALUE
48
+ @ssh_public_key = nil if @ssh_public_key == UNSET_VALUE
49
+ @label = nil if @label == UNSET_VALUE
50
+ @vagrant_tweaks = :allow_root_notty_sudo if @vagrant_tweaks == UNSET_VALUE
51
+ @api_max_retry_count = 10 if @api_max_retry_count == UNSET_VALUE
52
+ @api_retry_wait = 60 if @api_retry_wait == UNSET_VALUE
53
+ end
54
+
55
+ def validate(machine)
56
+ errors = _detected_errors
57
+
58
+ unless @access_key
59
+ errors << I18n.t("vagrant_iijgp.config.access_key_is_required")
60
+ end
61
+
62
+ unless @secret_key
63
+ errors << I18n.t("vagrant_iijgp.config.secret_key_is_required")
64
+ end
65
+
66
+ unless @ssh_public_key
67
+ errors << I18n.t("vagrant_iijgp.config.ssh_public_key_is_required")
68
+ end
69
+
70
+ if @gp_service_code.nil? or @gp_service_code == UNSET_VALUE
71
+ errors << I18n.t("vagrant_iijgp.config.gp_service_code_is_required")
72
+ end
73
+
74
+ { "IIJ GP Provider" => errors }
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,19 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module ProviderIijGp
5
+ module Errors
6
+ class VagrantIijGpError < Vagrant::Errors::VagrantError
7
+ error_namespace("vagrant_iijgp.errors")
8
+ end
9
+
10
+ class RsyncError < VagrantIijGpError
11
+ error_key(:rsync_error)
12
+ end
13
+
14
+ class MismatchServiceCode < VagrantIijGpError
15
+ error_key(:mismatch_service_code)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,53 @@
1
+ require "vagrant"
2
+ require "log4r"
3
+
4
+ module VagrantPlugins
5
+ module ProviderIijGp
6
+ class Plugin < Vagrant.plugin("2")
7
+ name "IIJ GP provider"
8
+ description <<-EOF
9
+ The IIJ GP provider allows Vagrant to manage and control
10
+ virtual machine in IIJ GIO hosting package service.
11
+ EOF
12
+
13
+ config(:iijgp, :provider) do
14
+ require_relative "config"
15
+ Config
16
+ end
17
+
18
+ provider(:iijgp, :parallel => true) do
19
+ setup_logging
20
+ setup_i18n
21
+
22
+ require_relative "provider"
23
+ Provider
24
+ end
25
+
26
+ def self.setup_logging
27
+ require "log4r"
28
+
29
+ level = nil
30
+ begin
31
+ level = Log4r.const_get(ENV["VAGRANT_LOG"].upcase)
32
+ rescue NameError
33
+ end
34
+
35
+ level = nil unless level.is_a?(Integer)
36
+
37
+ # Set the logging level on all "vagrant_iijgp" namespaced
38
+ # logs as long as we have a valid level.
39
+ if level
40
+ logger = Log4r::Logger.new("vagrant_iijgp")
41
+ logger.outputters = Log4r::Outputter.stderr
42
+ logger.level = level
43
+ logger = nil
44
+ end
45
+ end
46
+
47
+ def self.setup_i18n
48
+ I18n.load_path << File.expand_path("locales/en.yml", ProviderIijGp.source_root)
49
+ I18n.reload!
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,45 @@
1
+ module VagrantPlugins
2
+ module ProviderIijGp
3
+ class Provider < Vagrant.plugin('2', :provider)
4
+ def initialize(machine)
5
+ @logger = Log4r::Logger.new("")
6
+ @machine = machine
7
+ end
8
+ attr_reader :machine
9
+
10
+ # @param [Symbol] name Name of the action.
11
+ # @return [Object] A callable action sequence object.
12
+ # +nil+ means that we don't support the given action.
13
+ def action(name)
14
+ method = "action_#{name}"
15
+ if Action.respond_to? method
16
+ Action.send(method)
17
+ else
18
+ # the specified action is not supported
19
+ nil
20
+ end
21
+ end
22
+
23
+ # @return [Hash] SSH information. For the structure of this hash
24
+ # read the accompanying documentation for this method.
25
+ def ssh_info
26
+ env = @machine.action('read_ssh_info')
27
+ env[:machine_ssh_info]
28
+ end
29
+
30
+ # @return [MachineState]
31
+ def state
32
+ env = @machine.action('read_state')
33
+
34
+ state = env[:machine_state]
35
+
36
+ # Translate into short/long descriptions
37
+ short = I18n.t("vagrant_iijgp.state.#{state}.short")
38
+ long = I18n.t("vagrant_iijgp.state.#{state}.long")
39
+
40
+ # Return the MachineState object
41
+ Vagrant::MachineState.new(state, short, long)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,5 @@
1
+ module VagrantPlugins
2
+ module ProviderIijGp
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,18 @@
1
+ require "pathname"
2
+
3
+ require "vagrant-iijgp/plugin"
4
+
5
+ module VagrantPlugins
6
+ module ProviderIijGp
7
+ lib_path = Pathname.new(File.expand_path("../vagrant-iijgp", __FILE__))
8
+ autoload :Action, lib_path.join("action")
9
+ autoload :Errors, lib_path.join("errors")
10
+
11
+ # This returns the path to the source of this plugin.
12
+ #
13
+ # @return [Pathname]
14
+ def self.source_root
15
+ @source_root ||= Pathname.new(File.expand_path("../../", __FILE__))
16
+ end
17
+ end
18
+ end
data/locales/en.yml ADDED
@@ -0,0 +1,70 @@
1
+ en:
2
+ vagrant_iijgp:
3
+ wait_for_configured: |-
4
+ Waiting for the import of the root SSH key to complete.
5
+ wait_for_start: |-
6
+ Waiting for start...
7
+ wait_for_stop: |-
8
+ Waiting for stop...
9
+ vm_already_running: |-
10
+ Virtual Machine already running.
11
+ vm_not_created: |-
12
+ Virtual Machine is not created.
13
+ invalid_status: |-
14
+ The action is not allowed in the current status (%{state}).
15
+ import_root_ssh_public_key: |-
16
+ Importing your SSH public key into the Virtual Machine.
17
+ install_rsync: |-
18
+ Installing rsync on the Virtual Machine.
19
+ rsync_folder: |-
20
+ Rsyncing folder: %{hostpath} => %{guestpath}
21
+
22
+ config:
23
+ access_key_is_required: |-
24
+ access_key is required
25
+ secret_key_is_required: |-
26
+ secret_key is required
27
+ gp_service_code_is_required: |-
28
+ gp_service_code is required
29
+ ssh_public_key_is_required: |-
30
+ ssh_public_key is required
31
+
32
+ state:
33
+ running:
34
+ short: |-
35
+ Running
36
+ long: |-
37
+ The virtual machine is running.
38
+
39
+ stopped:
40
+ short: |-
41
+ Stopped
42
+ long: |-
43
+ The virtual machine is stopped.
44
+
45
+ starting:
46
+ short: |-
47
+ Starting
48
+ long: |-
49
+ The virtual machine is starting.
50
+
51
+ stopping:
52
+ short: |-
53
+ Stopping
54
+ long: |-
55
+ The virtual machine is stopping.
56
+
57
+ initialized:
58
+ short: |-
59
+ Initialized
60
+ long: |-
61
+ The virtual machine is initialized.
62
+
63
+ errors:
64
+ rsync_error: |-
65
+ An error occured while attempting to rsync.
66
+ mismatch_service_code: |-
67
+ There is no match between the service code which is stored in vagrant (%{machine_id})
68
+ and the service code which is specified in the configuration file (%{provider_config}).
69
+ If you changed the service code in the setting file after `vagrant up`,
70
+ you should wipe out the setting in `.vagrant/machines/<name>/id`.
@@ -0,0 +1,38 @@
1
+ # -*- mode: ruby; coding: utf-8 -*-
2
+ # vi: set ft=ruby :
3
+
4
+ Vagrant.configure("2") do |config|
5
+ config.vm.box = "dummy"
6
+
7
+ config.vm.provider :iijgp do |iijgp, override|
8
+ iijgp.access_key = "YOUR ACCESS KEY"
9
+ iijgp.secret_key = "YOUR SECRET KEY"
10
+ iijgp.gp_service_code = "gpXXXXXXXX"
11
+ iijgp.ssh_public_key = File.read("#{ENV['HOME']}/.ssh/id_rsa.pub")
12
+
13
+ override.ssh.username = "root"
14
+ override.ssh.private_key_path = "#{ENV['HOME']}/.ssh/id_rsa"
15
+ end
16
+
17
+ config.vm.define "vm1" do |c|
18
+ c.vm.provider :iijgp do |iijgp|
19
+ iijgp.gc_service_code = "gcXXXXXXXX"
20
+ iijgp.label = "vagrant-iijgp test vm1"
21
+ end
22
+ end
23
+
24
+ config.vm.define "vm2" do |c|
25
+ c.vm.provider :iijgp do |iijgp|
26
+ iijgp.gc_service_code = "gcYYYYYYYY"
27
+ iijgp.label = "vagrant-iijgp test vm2"
28
+ end
29
+ end
30
+
31
+ config.vm.define "another_gp_vm3" do |c|
32
+ c.vm.provider :iijgp do |iijgp, override|
33
+ iijgp.gp_service_code = "gpZZZZZZZZ"
34
+ iijgp.gc_service_code = "gcZZZZZZZZ"
35
+ iijgp.label = "vagrant-iijgp test vm3"
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'vagrant-iijgp/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "vagrant-iijgp"
8
+ spec.version = VagrantPlugins::ProviderIijGp::VERSION
9
+ spec.authors = ["Takahiro HIMURA"]
10
+ spec.email = ["taka@himura.jp"]
11
+ spec.description = %q{Vagrant plugin for IIJ GIO Hosting Package service}
12
+ spec.summary = %q{Vagrant plugin for IIJ GIO Hosting Package service}
13
+ spec.homepage = "https://github.com/iij/vagrant-iijgp/"
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_runtime_dependency "iij-sakagura"
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "rspec-core"
26
+ spec.add_development_dependency "rspec-expectations"
27
+ spec.add_development_dependency "mocha"
28
+ end