vagrant-joyent 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,19 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module Joyent
5
+ module Errors
6
+ class VagrantJoyentError < Vagrant::Errors::VagrantError
7
+ error_namespace("vagrant_joyent.errors")
8
+ end
9
+
10
+ class FogError < VagrantJoyentError
11
+ error_key(:fog_error)
12
+ end
13
+
14
+ class RsyncError < VagrantJoyentError
15
+ error_key(:rsync_error)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,73 @@
1
+ begin
2
+ require "vagrant"
3
+ rescue LoadError
4
+ raise "The Vagrant Joyent plugin must be run within Vagrant."
5
+ end
6
+
7
+ # This is a sanity check to make sure no one is attempting to install
8
+ # this into an early Vagrant version.
9
+ if Vagrant::VERSION < "1.1.0"
10
+ raise "The Vagrant Joyent plugin is only compatible with Vagrant 1.1+"
11
+ end
12
+
13
+ module VagrantPlugins
14
+ module Joyent
15
+ class Plugin < Vagrant.plugin("2")
16
+ name "Joyent"
17
+ description <<-DESC
18
+ This plugin installs a provider that allows Vagrant to manage
19
+ machines in Joyent (Public Cloud/ SmartDatacenter).
20
+ DESC
21
+
22
+ config(:joyent, :provider) do
23
+ require_relative "config"
24
+ Config
25
+ end
26
+
27
+ provider(:joyent) do
28
+ # Setup logging and i18n
29
+ setup_logging
30
+ setup_i18n
31
+
32
+ # Return the provider
33
+ require_relative "provider"
34
+ Provider
35
+ end
36
+
37
+ # This initializes the internationalization strings.
38
+ def self.setup_i18n
39
+ I18n.load_path << File.expand_path("locales/en.yml", Joyent.source_root)
40
+ I18n.reload!
41
+ end
42
+
43
+ # This sets up our log level to be whatever VAGRANT_LOG is.
44
+ def self.setup_logging
45
+ require "log4r"
46
+
47
+ level = nil
48
+ begin
49
+ level = Log4r.const_get(ENV["VAGRANT_LOG"].upcase)
50
+ rescue NameError
51
+ # This means that the logging constant wasn't found,
52
+ # which is fine. We just keep `level` as `nil`. But
53
+ # we tell the user.
54
+ level = nil
55
+ end
56
+
57
+ # Some constants, such as "true" resolve to booleans, so the
58
+ # above error checking doesn't catch it. This will check to make
59
+ # sure that the log level is an integer, as Log4r requires.
60
+ level = nil if !level.is_a?(Integer)
61
+
62
+ # Set the logging level on all "vagrant" namespaced
63
+ # logs as long as we have a valid level.
64
+ if level
65
+ logger = Log4r::Logger.new("vagrant_joyent")
66
+ logger.outputters = Log4r::Outputter.stderr
67
+ logger.level = level
68
+ logger = nil
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,50 @@
1
+ require "log4r"
2
+ require "vagrant"
3
+
4
+ module VagrantPlugins
5
+ module Joyent
6
+ class Provider < Vagrant.plugin("2", :provider)
7
+ def initialize(machine)
8
+ @machine = machine
9
+ end
10
+
11
+ def action(name)
12
+ # Attempt to get the action method from the Action class if it
13
+ # exists, otherwise return nil to show that we don't support the
14
+ # given action.
15
+ action_method = "action_#{name}"
16
+ return Action.send(action_method) if Action.respond_to?(action_method)
17
+ nil
18
+ end
19
+
20
+ def ssh_info
21
+ # Run a custom action called "read_ssh_info" which does what it
22
+ # says and puts the resulting SSH info into the `:machine_ssh_info`
23
+ # key in the environment.
24
+ env = @machine.action("read_ssh_info")
25
+ env[:machine_ssh_info]
26
+ end
27
+
28
+ def state
29
+ # Run a custom action we define called "read_state" which does
30
+ # what it says. It puts the state in the `:machine_state_id`
31
+ # key in the environment.
32
+ env = @machine.action("read_state")
33
+
34
+ state_id = env[:machine_state_id]
35
+
36
+ # Get the short and long description
37
+ short = I18n.t("vagrant_joyent.states.short_#{state_id}")
38
+ long = I18n.t("vagrant_joyent.states.long_#{state_id}")
39
+
40
+ # Return the MachineState object
41
+ Vagrant::MachineState.new(state_id, short, long)
42
+ end
43
+
44
+ def to_s
45
+ id = @machine.id.nil? ? "new" : @machine.id
46
+ "Joyent (#{id})"
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,17 @@
1
+ module VagrantPlugins
2
+ module Joyent
3
+ module Util
4
+ class Timer
5
+ # A basic utility method that times the execution of the given
6
+ # block and returns it.
7
+ def self.time
8
+ start_time = Time.now.to_f
9
+ yield
10
+ end_time = Time.now.to_f
11
+
12
+ end_time - start_time
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ module VagrantPlugins
2
+ module Joyent
3
+ VERSION = "0.3.0"
4
+ end
5
+ end
@@ -0,0 +1,61 @@
1
+ en:
2
+ vagrant_joyent:
3
+ already_created: |-
4
+ The machine is already created.
5
+ launching_instance: |-
6
+ Launching an instance with the following settings...
7
+ not_created: |-
8
+ Instance is not created. Please run `vagrant up` first.
9
+ ready: |-
10
+ Machine is booted and ready for use!
11
+ rsync_folder: |-
12
+ Rsyncing folder: %{hostpath} => %{guestpath}
13
+ terminating: |-
14
+ Terminating the instance...
15
+ waiting_for_ready: |-
16
+ Waiting for instance to become "ready"...
17
+ waiting_for_ssh: |-
18
+ Waiting for SSH to become available...
19
+ will_not_destroy: |-
20
+ The instance '%{name}' will not be destroyed, since the confirmation
21
+ was declined.
22
+
23
+ config:
24
+ username_required: |-
25
+ A Joyent Username must be specified via "joyent.username"
26
+ keyname_required: |-
27
+ A Joyent Keyname must be specified via "joyent.keyname"
28
+ api_url_required: |-
29
+ A Joyent Datacenter API endpoint must be specified via "joyent.api_url"
30
+ dataset_required: |-
31
+ A Joyent Dataset must be specified via "joyent.dataset"
32
+ node_name_required: |-
33
+ A Node Name must be specified via "joyent.node_name"
34
+ ssh_username_required: |-
35
+ An SSH username must be specified via "joyent.ssh_username"
36
+
37
+ errors:
38
+ fog_error: |-
39
+ There was an error talking to Joyent. The error message is shown
40
+ below:
41
+
42
+ %{message}
43
+ rsync_error: |-
44
+ There was an error when attemping to rsync a share folder.
45
+ Please inspect the error message below for more info.
46
+
47
+ Host path: %{hostpath}
48
+ Guest path: %{guestpath}
49
+ Error: %{stderr}
50
+
51
+ states:
52
+ short_not_created: |-
53
+ not created
54
+ long_not_created: |-
55
+ The Joyent instance is not created. Run `vagrant up` to create it.
56
+
57
+ short_running: |-
58
+ running
59
+ long_running: |-
60
+ The Joyent instance is running. To stop this machine, you can run
61
+ `vagrant halt`. To destroy the machine, you can run `vagrant destroy`.
@@ -0,0 +1,63 @@
1
+ $:.unshift File.expand_path("../lib", __FILE__)
2
+ require "vagrant-joyent/version"
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "vagrant-joyent"
6
+ s.version = VagrantPlugins::Joyent::VERSION
7
+ s.licenses = ['Apache-2.0']
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = "Sean OMeara"
10
+ s.email = "someara@opscode.com"
11
+ s.homepage = "http://www.vagrantup.com"
12
+ s.summary = "Enables Vagrant to manage machines in Joyent cloud and SDC"
13
+ s.description = <<-EOF
14
+ vagrant-joyent is a Vagrant provider for various Joyent services. It enables
15
+ Vagrant to manage machines in the Joyent cloud using standard commands like
16
+ 'up', 'provision', and 'halt'.
17
+ EOF
18
+
19
+ s.required_rubygems_version = ">= 1.3.6"
20
+ s.rubyforge_project = "vagrant-joyent"
21
+
22
+ s.add_runtime_dependency "fog", "~> 1.12"
23
+
24
+ s.add_development_dependency "rake", "~> 10.1"
25
+ s.add_development_dependency "rspec-core", "~> 2.12"
26
+ s.add_development_dependency "rspec-expectations", "~> 2.12"
27
+ s.add_development_dependency "rspec-mocks", "~> 2.12"
28
+
29
+ # The following block of code determines the files that should be included
30
+ # in the gem. It does this by reading all the files in the directory where
31
+ # this gemspec is, and parsing out the ignored files from the gitignore.
32
+ # Note that the entire gitignore(5) syntax is not supported, specifically
33
+ # the "!" syntax, but it should mostly work correctly.
34
+ root_path = File.dirname(__FILE__)
35
+ all_files = Dir.chdir(root_path) { Dir.glob("**/{*,.*}") }
36
+ all_files.reject! { |file| [".", ".."].include?(File.basename(file)) }
37
+ gitignore_path = File.join(root_path, ".gitignore")
38
+ gitignore = File.readlines(gitignore_path)
39
+ gitignore.map! { |line| line.chomp.strip }
40
+ gitignore.reject! { |line| line.empty? || line =~ /^(#|!)/ }
41
+
42
+ unignored_files = all_files.reject do |file|
43
+ # Ignore any directories, the gemspec only cares about files
44
+ next true if File.directory?(file)
45
+
46
+ # Ignore any paths that match anything in the gitignore. We do
47
+ # two tests here:
48
+ #
49
+ # - First, test to see if the entire path matches the gitignore.
50
+ # - Second, match if the basename does, this makes it so that things
51
+ # like '.DS_Store' will match sub-directories too (same behavior
52
+ # as git).
53
+ #
54
+ gitignore.any? do |ignore|
55
+ File.fnmatch(ignore, file, File::FNM_PATHNAME) ||
56
+ File.fnmatch(ignore, File.basename(file), File::FNM_PATHNAME)
57
+ end
58
+ end
59
+
60
+ s.files = unignored_files
61
+ s.executables = unignored_files.map { |f| f[/^bin\/(.*)/, 1] }.compact
62
+ s.require_path = 'lib'
63
+ end
metadata ADDED
@@ -0,0 +1,146 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vagrant-joyent
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Sean OMeara
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: fog
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.1'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec-core
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.12'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.12'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-expectations
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.12'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.12'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec-mocks
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.12'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.12'
83
+ description: |2
84
+ vagrant-joyent is a Vagrant provider for various Joyent services. It enables
85
+ Vagrant to manage machines in the Joyent cloud using standard commands like
86
+ 'up', 'provision', and 'halt'.
87
+ email: someara@opscode.com
88
+ executables: []
89
+ extensions: []
90
+ extra_rdoc_files: []
91
+ files:
92
+ - ".gitignore"
93
+ - Gemfile
94
+ - LICENSE.txt
95
+ - README.md
96
+ - Rakefile
97
+ - dummy.box
98
+ - example_box/README.md
99
+ - example_box/Vagrantfile
100
+ - example_box/metadata.json
101
+ - lib/vagrant-joyent.rb
102
+ - lib/vagrant-joyent/action.rb
103
+ - lib/vagrant-joyent/action/connect_joyent.rb
104
+ - lib/vagrant-joyent/action/is_created.rb
105
+ - lib/vagrant-joyent/action/message_already_created.rb
106
+ - lib/vagrant-joyent/action/message_not_created.rb
107
+ - lib/vagrant-joyent/action/message_will_not_destroy.rb
108
+ - lib/vagrant-joyent/action/read_ssh_info.rb
109
+ - lib/vagrant-joyent/action/read_state.rb
110
+ - lib/vagrant-joyent/action/run_instance.rb
111
+ - lib/vagrant-joyent/action/sync_folders.rb
112
+ - lib/vagrant-joyent/action/terminate_instance.rb
113
+ - lib/vagrant-joyent/action/warn_networks.rb
114
+ - lib/vagrant-joyent/config.rb
115
+ - lib/vagrant-joyent/errors.rb
116
+ - lib/vagrant-joyent/plugin.rb
117
+ - lib/vagrant-joyent/provider.rb
118
+ - lib/vagrant-joyent/util/timer.rb
119
+ - lib/vagrant-joyent/version.rb
120
+ - locales/en.yml
121
+ - vagrant-joyent.gemspec
122
+ homepage: http://www.vagrantup.com
123
+ licenses:
124
+ - Apache-2.0
125
+ metadata: {}
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: 1.3.6
140
+ requirements: []
141
+ rubyforge_project: vagrant-joyent
142
+ rubygems_version: 2.2.2
143
+ signing_key:
144
+ specification_version: 4
145
+ summary: Enables Vagrant to manage machines in Joyent cloud and SDC
146
+ test_files: []