vagrant-linode 0.1.0
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 +15 -0
- data/.gitignore +19 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +11 -0
- data/LICENSE.txt +23 -0
- data/README.md +201 -0
- data/Rakefile +22 -0
- data/box/README.md +13 -0
- data/box/linode.box +0 -0
- data/box/metadata.json +3 -0
- data/lib/vagrant-linode/actions/check_state.rb +19 -0
- data/lib/vagrant-linode/actions/create.rb +191 -0
- data/lib/vagrant-linode/actions/destroy.rb +30 -0
- data/lib/vagrant-linode/actions/modify_provision_path.rb +38 -0
- data/lib/vagrant-linode/actions/power_off.rb +32 -0
- data/lib/vagrant-linode/actions/power_on.rb +32 -0
- data/lib/vagrant-linode/actions/rebuild.rb +53 -0
- data/lib/vagrant-linode/actions/reload.rb +28 -0
- data/lib/vagrant-linode/actions/setup_key.rb +52 -0
- data/lib/vagrant-linode/actions/setup_sudo.rb +41 -0
- data/lib/vagrant-linode/actions/setup_user.rb +62 -0
- data/lib/vagrant-linode/actions/sync_folders.rb +80 -0
- data/lib/vagrant-linode/actions.rb +160 -0
- data/lib/vagrant-linode/commands/rebuild.rb +23 -0
- data/lib/vagrant-linode/config.rb +65 -0
- data/lib/vagrant-linode/errors.rb +49 -0
- data/lib/vagrant-linode/helpers/client.rb +114 -0
- data/lib/vagrant-linode/helpers/result.rb +38 -0
- data/lib/vagrant-linode/plugin.rb +26 -0
- data/lib/vagrant-linode/provider.rb +117 -0
- data/lib/vagrant-linode/version.rb +5 -0
- data/lib/vagrant-linode.rb +20 -0
- data/locales/en.yml +96 -0
- data/test/Vagrantfile +60 -0
- data/test/cookbooks/test/recipes/default.rb +1 -0
- data/test/scripts/provision.sh +3 -0
- data/test/test.sh +14 -0
- data/test/test_id_rsa +27 -0
- data/test/test_id_rsa.pub +1 -0
- data/vagrant-linode.gemspec +21 -0
- metadata +132 -0
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'vagrant-linode/helpers/result'
|
2
|
+
require 'linode'
|
3
|
+
require 'json'
|
4
|
+
require 'vagrant/util/retryable'
|
5
|
+
|
6
|
+
module VagrantPlugins
|
7
|
+
module Linode
|
8
|
+
module Helpers
|
9
|
+
module Client
|
10
|
+
def client
|
11
|
+
def wait_for_event(env, id)
|
12
|
+
retryable(tries: 120, sleep: 10) do
|
13
|
+
# stop waiting if interrupted
|
14
|
+
next if env[:interrupted]
|
15
|
+
# check action status
|
16
|
+
result = @client.linode.job.list(jobid: id, linodeid: env[:machine].id)
|
17
|
+
result = result[0] if result.is_a?(Array)
|
18
|
+
|
19
|
+
yield result if block_given?
|
20
|
+
fail 'not ready' if result['host_finish_dt'] > ''
|
21
|
+
end
|
22
|
+
end
|
23
|
+
linodeapi = ::Linode.new(api_key: @machine.provider_config.token,
|
24
|
+
api_url: @machine.provider_config.api_url || nil)
|
25
|
+
# linodeapi.wait_for_event = wait_for_event
|
26
|
+
# linodeapi.extend wait_for_event
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class ApiClient
|
31
|
+
include Vagrant::Util::Retryable
|
32
|
+
|
33
|
+
def initialize(machine)
|
34
|
+
@logger = Log4r::Logger.new('vagrant::linode::apiclient')
|
35
|
+
@config = machine.provider_config
|
36
|
+
@client = ::Linode.new(api_key: @config.token)
|
37
|
+
end
|
38
|
+
|
39
|
+
attr_reader :client
|
40
|
+
|
41
|
+
def delete(path, params = {}, _method = :delete)
|
42
|
+
@client.request :url_encoded
|
43
|
+
request(path, params, :delete)
|
44
|
+
end
|
45
|
+
|
46
|
+
def post(path, params = {}, _method = :post)
|
47
|
+
@client.headers['Content-Type'] = 'application/json'
|
48
|
+
request(path, params, :post)
|
49
|
+
end
|
50
|
+
|
51
|
+
def request(path, params = {}, method = :get)
|
52
|
+
begin
|
53
|
+
@logger.info "Request: #{path}"
|
54
|
+
result = @client.send(method) do |req|
|
55
|
+
req.url path, params
|
56
|
+
req.headers['Authorization'] = "Bearer #{@config.token}"
|
57
|
+
end
|
58
|
+
rescue Faraday::Error::ConnectionFailed => e
|
59
|
+
# TODO this is suspect but because farady wraps the exception
|
60
|
+
# in something generic there doesn't appear to be another
|
61
|
+
# way to distinguish different connection errors :(
|
62
|
+
if e.message =~ /certificate verify failed/
|
63
|
+
raise Errors::CertificateError
|
64
|
+
end
|
65
|
+
|
66
|
+
raise e
|
67
|
+
end
|
68
|
+
|
69
|
+
unless method == :delete
|
70
|
+
begin
|
71
|
+
body = JSON.parse(result.body)
|
72
|
+
@logger.info "Response: #{body}"
|
73
|
+
next_page = body['links']['pages']['next'] rescue nil
|
74
|
+
unless next_page.nil?
|
75
|
+
uri = URI.parse(next_page)
|
76
|
+
new_path = path.split('?')[0]
|
77
|
+
next_result = request("#{new_path}?#{uri.query}")
|
78
|
+
req_target = new_path.split('/')[-1]
|
79
|
+
body["#{req_target}"].concat(next_result["#{req_target}"])
|
80
|
+
end
|
81
|
+
rescue JSON::ParserError => e
|
82
|
+
raise(Errors::JSONError, message: e.message,
|
83
|
+
path: path,
|
84
|
+
params: params,
|
85
|
+
response: result.body)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
unless /^2\d\d$/ =~ result.status.to_s
|
90
|
+
fail(Errors::APIStatusError, path: path,
|
91
|
+
params: params,
|
92
|
+
status: result.status,
|
93
|
+
response: body.inspect)
|
94
|
+
end
|
95
|
+
|
96
|
+
Result.new(body)
|
97
|
+
end
|
98
|
+
|
99
|
+
def wait_for_event(env, id)
|
100
|
+
retryable(tries: 120, sleep: 10) do
|
101
|
+
# stop waiting if interrupted
|
102
|
+
next if env[:interrupted]
|
103
|
+
|
104
|
+
# check action status
|
105
|
+
result = @client.linode.job.list(jobid: id, linodeid: env[:machine].id)
|
106
|
+
|
107
|
+
yield result if block_given?
|
108
|
+
fail 'not ready' if result['host_finish_dt'] > ''
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Linode
|
3
|
+
module Helpers
|
4
|
+
class Result
|
5
|
+
def initialize(body)
|
6
|
+
@result = body
|
7
|
+
end
|
8
|
+
|
9
|
+
def [](key)
|
10
|
+
@result[key.to_s]
|
11
|
+
end
|
12
|
+
|
13
|
+
def find_id(sub_obj, search) #:ssh_keys, {:name => 'ijin (vagrant)'}
|
14
|
+
find(sub_obj, search)['id']
|
15
|
+
end
|
16
|
+
|
17
|
+
def find(sub_obj, search)
|
18
|
+
key = search.keys.first #:slug
|
19
|
+
value = search[key].to_s # sfo1
|
20
|
+
key = key.to_s # slug
|
21
|
+
|
22
|
+
result = @result[sub_obj.to_s].reduce(nil) do |result, obj|
|
23
|
+
obj[key] == value ? obj : result
|
24
|
+
end
|
25
|
+
|
26
|
+
result || error(sub_obj, key, value)
|
27
|
+
end
|
28
|
+
|
29
|
+
def error(sub_obj, key, value)
|
30
|
+
fail(Errors::ResultMatchErro r, key: key,
|
31
|
+
value: value,
|
32
|
+
collection_name: sub_obj.to_s,
|
33
|
+
sub_obj: @result[sub_obj.to_s])
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Linode
|
3
|
+
class Plugin < Vagrant.plugin('2')
|
4
|
+
name 'Linode'
|
5
|
+
description <<-DESC
|
6
|
+
This plugin installs a provider that allows Vagrant to manage
|
7
|
+
machines using Linode's API.
|
8
|
+
DESC
|
9
|
+
|
10
|
+
config(:linode, :provider) do
|
11
|
+
require_relative 'config'
|
12
|
+
Config
|
13
|
+
end
|
14
|
+
|
15
|
+
provider(:linode, parallel: true) do
|
16
|
+
require_relative 'provider'
|
17
|
+
Provider
|
18
|
+
end
|
19
|
+
|
20
|
+
command(:rebuild) do
|
21
|
+
require_relative 'commands/rebuild'
|
22
|
+
Commands::Rebuild
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require 'vagrant-linode/actions'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Linode
|
5
|
+
class Provider < Vagrant.plugin('2', :provider)
|
6
|
+
# This class method caches status for all linodes within
|
7
|
+
# the Linode account. A specific linode's status
|
8
|
+
# may be refreshed by passing :refresh => true as an option.
|
9
|
+
def self.linode(machine, opts = {})
|
10
|
+
client = Helpers::ApiClient.new(machine).client
|
11
|
+
|
12
|
+
# load status of linodes if it has not been done before
|
13
|
+
unless @linodes
|
14
|
+
@linodes = client.linode.list.each { |l| l.network = client.linode.ip.list linodeid: l.linodeid }
|
15
|
+
end
|
16
|
+
|
17
|
+
if opts[:refresh] && machine.id
|
18
|
+
# refresh the linode status for the given machine
|
19
|
+
@linodes.delete_if { |d| d['linodeid'].to_s == machine.id }
|
20
|
+
linode = client.linode.list(linodeid: machine.id).first
|
21
|
+
linode.network = client.linode.ip.list linodeid: linode['linodeid']
|
22
|
+
@linodes << linode
|
23
|
+
else
|
24
|
+
# lookup linode status for the given machine
|
25
|
+
linode = @linodes.find { |d| d['linodeid'].to_s == machine.id }
|
26
|
+
end
|
27
|
+
|
28
|
+
# if lookup by id failed, check for a linode with a matching name
|
29
|
+
# and set the id to ensure vagrant stores locally
|
30
|
+
# TODO allow the user to configure this behavior
|
31
|
+
unless linode
|
32
|
+
name = machine.config.vm.hostname || machine.name
|
33
|
+
linode = @linodes.find { |d| d['label'] == name.to_s }
|
34
|
+
machine.id = linode['linodeid'].to_s if linode
|
35
|
+
end
|
36
|
+
|
37
|
+
linode ||= { status: :not_created }
|
38
|
+
end
|
39
|
+
|
40
|
+
def initialize(machine)
|
41
|
+
@machine = machine
|
42
|
+
end
|
43
|
+
|
44
|
+
# Attempt to get the action method from the Action class if it
|
45
|
+
# exists, otherwise return nil to show that we don't support the
|
46
|
+
# given action.
|
47
|
+
def action(name)
|
48
|
+
return Actions.send(name) if Actions.respond_to?(name)
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
# This method is called if the underying machine ID changes. Providers
|
53
|
+
# can use this method to load in new data for the actual backing
|
54
|
+
# machine or to realize that the machine is now gone (the ID can
|
55
|
+
# become `nil`). No parameters are given, since the underlying machine
|
56
|
+
# is simply the machine instance given to this object. And no
|
57
|
+
# return value is necessary.
|
58
|
+
def machine_id_changed
|
59
|
+
end
|
60
|
+
|
61
|
+
# This should return a hash of information that explains how to
|
62
|
+
# SSH into the machine. If the machine is not at a point where
|
63
|
+
# SSH is even possible, then `nil` should be returned.
|
64
|
+
#
|
65
|
+
# The general structure of this returned hash should be the
|
66
|
+
# following:
|
67
|
+
#
|
68
|
+
# {
|
69
|
+
# :host => "1.2.3.4",
|
70
|
+
# :port => "22",
|
71
|
+
# :username => "mitchellh",
|
72
|
+
# :private_key_path => "/path/to/my/key"
|
73
|
+
# }
|
74
|
+
#
|
75
|
+
# **Note:** Vagrant only supports private key based authenticatonion,
|
76
|
+
# mainly for the reason that there is no easy way to exec into an
|
77
|
+
# `ssh` prompt with a password, whereas we can pass a private key
|
78
|
+
# via commandline.
|
79
|
+
def ssh_info
|
80
|
+
linode = Provider.linode(@machine, refresh: true)
|
81
|
+
|
82
|
+
return nil if self.state.id != :active
|
83
|
+
|
84
|
+
public_network = linode.network.find { |network| network['ispublic'] == 1 }
|
85
|
+
|
86
|
+
{
|
87
|
+
host: public_network['ipaddress'],
|
88
|
+
port: '22',
|
89
|
+
username: 'root',
|
90
|
+
private_key_path: @machine.config.ssh.private_key_path
|
91
|
+
}
|
92
|
+
end
|
93
|
+
|
94
|
+
# This should return the state of the machine within this provider.
|
95
|
+
# The state must be an instance of {MachineState}. Please read the
|
96
|
+
# documentation of that class for more information.
|
97
|
+
def state
|
98
|
+
status = Provider.linode(@machine)['status']
|
99
|
+
states = {
|
100
|
+
"" => :not_created,
|
101
|
+
'-2' => :boot_failed,
|
102
|
+
'-1' => :being_created,
|
103
|
+
'0' => :brand_new, # brand new
|
104
|
+
'1' => :active, # running
|
105
|
+
'2' => :off, # powered off
|
106
|
+
'3' => :shutting_down
|
107
|
+
}
|
108
|
+
id = long = short = states[status.to_s]
|
109
|
+
Vagrant::MachineState.new(id, short, long)
|
110
|
+
end
|
111
|
+
|
112
|
+
def to_s
|
113
|
+
"Linode"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'vagrant-linode/version'
|
2
|
+
require 'vagrant-linode/plugin'
|
3
|
+
require 'vagrant-linode/errors'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module Linode
|
7
|
+
def self.source_root
|
8
|
+
@source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.public_key(private_key_path)
|
12
|
+
File.read("#{private_key_path}.pub")
|
13
|
+
rescue
|
14
|
+
raise Errors::PublicKeyError, path: "#{private_key_path}.pub"
|
15
|
+
end
|
16
|
+
|
17
|
+
I18n.load_path << File.expand_path('locales/en.yml', source_root)
|
18
|
+
I18n.reload!
|
19
|
+
end
|
20
|
+
end
|
data/locales/en.yml
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
en:
|
2
|
+
vagrant_linode:
|
3
|
+
info:
|
4
|
+
off: "Linode is off"
|
5
|
+
not_created: "Linode has not been created"
|
6
|
+
already_active: "Linode is already active"
|
7
|
+
already_off: "Linode is already off"
|
8
|
+
creating: "Creating a new linode..."
|
9
|
+
created: "Created a new linode... %{linodeid}"
|
10
|
+
booting: "Booting Linode %{linodeid} ..."
|
11
|
+
linode_ip: "Assigned IP address: %{ip}"
|
12
|
+
linode_private_ip: "Private IP address: %{ip}"
|
13
|
+
destroying: "Destroying the linode..."
|
14
|
+
powering_off: "Powering off the linode..."
|
15
|
+
powering_on: "Powering on the linode..."
|
16
|
+
rebuilding: "Rebuilding the linode..."
|
17
|
+
reloading: "Rebooting the linode..."
|
18
|
+
creating_user: "Creating user account: %{user}..."
|
19
|
+
modifying_sudo: "Modifying sudoers file to remove tty requirement..."
|
20
|
+
using_key: "Using existing SSH key: %{name}"
|
21
|
+
creating_key: "Creating new SSH key: %{name}..."
|
22
|
+
trying_rsync_install: "Rsync not found, attempting to install with yum..."
|
23
|
+
rsyncing: "Rsyncing folder: %{hostpath} => %{guestpath}..."
|
24
|
+
rsync_missing: "The rsync executable was not found in the current path."
|
25
|
+
config:
|
26
|
+
token: "Token is required"
|
27
|
+
private_key: "SSH private key path is required"
|
28
|
+
public_key: "SSH public key not found: %{key}"
|
29
|
+
disk_too_large: "Disk Images use more drive space than plan allocates"
|
30
|
+
errors:
|
31
|
+
public_key: |-
|
32
|
+
There was an issue reading the public key at:
|
33
|
+
|
34
|
+
Path: %{path}
|
35
|
+
|
36
|
+
Please check the file's permissions.
|
37
|
+
api_status: |-
|
38
|
+
There was an issue with the request made to the Linode
|
39
|
+
API at:
|
40
|
+
|
41
|
+
Path: %{path}
|
42
|
+
URI Params: %{params}
|
43
|
+
|
44
|
+
The response status from the API was:
|
45
|
+
|
46
|
+
Status: %{status}
|
47
|
+
Response: %{response}
|
48
|
+
rsync: |-
|
49
|
+
There was an error when attemping to rsync a share folder.
|
50
|
+
Please inspect the error message below for more info.
|
51
|
+
|
52
|
+
Host path: %{hostpath}
|
53
|
+
Guest path: %{guestpath}
|
54
|
+
Error: %{stderr}
|
55
|
+
json: |-
|
56
|
+
There was an issue with the JSON response from the Linode
|
57
|
+
API at:
|
58
|
+
|
59
|
+
Path: %{path}
|
60
|
+
URI Params: %{params}
|
61
|
+
|
62
|
+
The response JSON from the API was:
|
63
|
+
|
64
|
+
Response: %{response}
|
65
|
+
result_match: |-
|
66
|
+
The result collection for %{collection_name}:
|
67
|
+
|
68
|
+
%{sub_obj}
|
69
|
+
|
70
|
+
Contained no object with the value "%{value}" for the the
|
71
|
+
key "%{key}".
|
72
|
+
|
73
|
+
Please ensure that the configured value exists in the collection.
|
74
|
+
certificate: |-
|
75
|
+
The secure connection to the Linode API has failed. Please
|
76
|
+
ensure that your local certificates directory is defined in the
|
77
|
+
provider config.
|
78
|
+
|
79
|
+
config.vm.provider :linode do |vm|
|
80
|
+
vm.ca_path = "/path/to/ssl/ca/cert.crt"
|
81
|
+
end
|
82
|
+
|
83
|
+
This is generally caused by the OpenSSL configuration associated
|
84
|
+
with the Ruby install being unaware of the system specific ca
|
85
|
+
certs.
|
86
|
+
local_ip: |-
|
87
|
+
The Linode provider was unable to determine the host's IP.
|
88
|
+
distro_match: !-
|
89
|
+
The provider does not support your configurations chosen Distribution %{distro}.
|
90
|
+
Supported distributions can be found at the following url - https://www.linode.com/distributions
|
91
|
+
disk_size: !-
|
92
|
+
The space which you have specified for your Disk Images is too large for your
|
93
|
+
plans allocations. Current = %{current}MB, Max = %{max}
|
94
|
+
plan_id: !-
|
95
|
+
The plan which you have specified ( %{plan} ) is not available at this time,
|
96
|
+
for more information regarding plans review the following url - https://www.linode.com/pricing
|
data/test/Vagrantfile
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
# vi: set ft=ruby :
|
3
|
+
|
4
|
+
Vagrant.require_plugin('vagrant-linode')
|
5
|
+
Vagrant.require_plugin('vagrant-omnibus')
|
6
|
+
|
7
|
+
Vagrant.configure('2') do |config|
|
8
|
+
config.omnibus.chef_version = :latest
|
9
|
+
|
10
|
+
config.ssh.username = 'tester'
|
11
|
+
config.ssh.private_key_path = './test_id_rsa'
|
12
|
+
|
13
|
+
config.vm.synced_folder '.', '/vagrant', disabled: true
|
14
|
+
|
15
|
+
config.vm.provider :linode do |provider, override|
|
16
|
+
override.vm.box = 'linode'
|
17
|
+
override.vm.box_url = 'https://github.com/displague/vagrant-linode/raw/master/box/linode.box'
|
18
|
+
provider.token = ENV['LINODE_TOKEN']
|
19
|
+
provider.ssh_key_name = 'Test Key'
|
20
|
+
provider.distribution = 'Ubuntu 14.04 LTS'
|
21
|
+
provider.datacenter = 'newark'
|
22
|
+
provider.plan = '1024'
|
23
|
+
|
24
|
+
# Disk Image Sizes (Optional configuration)
|
25
|
+
|
26
|
+
# Main Disk Image Size
|
27
|
+
# [str] ( Full Allocation - Swap ) if nil
|
28
|
+
provider.xvda_size = '1024'
|
29
|
+
|
30
|
+
# Swap Image Size
|
31
|
+
# [str] 256 if nil
|
32
|
+
provider.swap_size = '256'
|
33
|
+
|
34
|
+
# Networking (Optional Configuration)
|
35
|
+
|
36
|
+
# Enable private networking
|
37
|
+
# [boolean] disabled if nil
|
38
|
+
#provider.private_networking = true
|
39
|
+
end
|
40
|
+
|
41
|
+
config.vm.provision :shell, path: 'scripts/provision.sh'
|
42
|
+
|
43
|
+
config.vm.provision :chef_solo do |chef|
|
44
|
+
chef.cookbooks_path = 'cookbooks'
|
45
|
+
chef.add_recipe 'test'
|
46
|
+
end
|
47
|
+
|
48
|
+
# Linode Specific Configurations
|
49
|
+
config.vm.define :ubuntu do |ubuntu|
|
50
|
+
ubuntu.vm.provider :linode do |provider|
|
51
|
+
provider.distribution = 'Ubuntu 14.04 LTS'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
config.vm.define :centos do |centos|
|
56
|
+
centos.vm.provider :linode do |provider|
|
57
|
+
provider.distribution = 'CentOS 7'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
log 'Testing 1 2 3!'
|
data/test/test.sh
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# if ! bundle exec vagrant box list | grep linode 1>/dev/null; then
|
2
|
+
# bundle exec vagrant box add linode box/linode.box
|
3
|
+
# fi
|
4
|
+
|
5
|
+
cd test
|
6
|
+
|
7
|
+
bundle exec vagrant up --provider=linode
|
8
|
+
bundle exec vagrant up
|
9
|
+
bundle exec vagrant provision
|
10
|
+
bundle exec vagrant rebuild
|
11
|
+
bundle exec vagrant halt
|
12
|
+
bundle exec vagrant destroy
|
13
|
+
|
14
|
+
cd ..
|
data/test/test_id_rsa
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEpAIBAAKCAQEAzbDbxYaq3ANDCzU+c+BCpiPNeSCwj9PS6IgUNdP5tZzaL3M5
|
3
|
+
l+iy5rS0lsjw4229AdF5oO1TOGzefvIkqHd/3feizsUFzvvSM+ytPCadMkPA+bHi
|
4
|
+
hWGJPyjLDLWCF5kHo9gdNxCDc72cPmGWJqm4YdwWA8Pgk2X8gSx3klutOWg+vWrk
|
5
|
+
bX/LENaG8r5uk/tIGvDHV/CZQFZEUDo6ECJ4Din4mLlBbLGaE0swQSthEePlro/k
|
6
|
+
s2eJ2TceOo9qcTkQnIaIb6WUETfylDkl1z/PiDt+7QwmALmEttWjzrOvUoJ6FA7H
|
7
|
+
3Hi41des6wKUYjtCN2R+bvR9b9SNj9BXj+ljmwIDAQABAoIBAA0ObOTc53uPuXG8
|
8
|
+
r3orgg+JtkE6EfsPNxQLjzzbd75PdooMhlteKfz6+3uWxbOqA5VZ9p6Acgfi4Tyt
|
9
|
+
oiYPb85nKa52UygQVAd3vodS7CeEpXs0D2zoBA4+SKVF4DwfOpzr2u7j3XQ7VO+g
|
10
|
+
wicyHsIXdk5G4Lp6fsy0ReLEbvp1xknODE6y7mXfnFjV0SfbrB9vBYfljjD3aDmT
|
11
|
+
nrAK1EMx1OLqh9p0fnHYS2d7q8kw6XE8DRVS/XCQEfqAmNr6ZPizVWrUWe9AN+dA
|
12
|
+
31atcA+UE+mOTnN/AL2BGE0Dndi8+ZUONxKkBKOdY2tIRPUbap8BANyXDJstFdFH
|
13
|
+
ZTQlPgECgYEA+YF0NKbQ2/+TOPyLa988pJRiq6tCw1kYf98pwtyUbqVYCeldkCGc
|
14
|
+
yNGSePvN0bhJrC5knI/05ia31VjQ7gtKZAz8RjnvfMCJyyYR8Dg00KvbUHm6NEWS
|
15
|
+
Xw+5pz9Uhblaee9QmJ+oQ6VBZPZb98g+tBTTJDEucW61y1LCGp+BVUUCgYEA0wtz
|
16
|
+
W0yjTBBmnTIgrDP0jDItT27zXl0M9KCU4VCB9NqpENq3lWrQVM4bWML1+WOm3NCR
|
17
|
+
yQnX4n53QFqxerOEVrVt0hOiGwgttrltsjPrErydA0XkKMIzr7bAD2JUpeJWInro
|
18
|
+
wuCQAoEzYv3HFtryuc0s7hTq5Xeph0MihBsWM18CgYBSC/bZpY2C+r0//RQf6e34
|
19
|
+
NO9pgkzXDkJXMlx6Pqz04Zxczge9cMAs7XWcITmiYFahrzPYpCIlWNAU8TrrPH0+
|
20
|
+
/2Ip+b0+KdZmHmPBucnsYMci5JSNwd8LMZGcZN/3hWcyN7cqKT5c2Efz2muNxKSR
|
21
|
+
9VMlUKL0HDLd5J39wTv3fQKBgQDGrQDr8jnIYag4U/huJHsTgCknnkt9ihuoL4P4
|
22
|
+
mNG+sBp4w24QO33kWCNmbCMjo6xyM+cKWzng/y1EaBysZlMvTZ0VJ2Z0DD78xZN/
|
23
|
+
L2EdQnKNoj4oIKqHwIMN+IO3pltwGkUFMGJh+T9m8YF7AqN+RqkFeKupWf0+WPUl
|
24
|
+
aFp+AQKBgQDhTM46yr+6TGanepYon6XlTjFCtXEzdfVIP9GLoGQakKukX1XAJgX3
|
25
|
+
QYzjsQp4Ig26dXTjTd8y+0Wwf8tuSeQzBE1ZJK/EjFgP/je7NEMMfRgB06Tcnzhs
|
26
|
+
s5hIxs8t9OB/Um6DtWGMA0myQsNt4jcLcINvsEQhNR3bk2iBIPwofA==
|
27
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1 @@
|
|
1
|
+
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNsNvFhqrcA0MLNT5z4EKmI815ILCP09LoiBQ10/m1nNovczmX6LLmtLSWyPDjbb0B0Xmg7VM4bN5+8iSod3/d96LOxQXO+9Iz7K08Jp0yQ8D5seKFYYk/KMsMtYIXmQej2B03EINzvZw+YZYmqbhh3BYDw+CTZfyBLHeSW605aD69auRtf8sQ1obyvm6T+0ga8MdX8JlAVkRQOjoQIngOKfiYuUFssZoTSzBBK2ER4+Wuj+SzZ4nZNx46j2pxORCchohvpZQRN/KUOSXXP8+IO37tDCYAuYS21aPOs69SgnoUDsfceLjV16zrApRiO0I3ZH5u9H1v1I2P0FeP6WOb test@vagrant-linode
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'vagrant-linode/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = 'vagrant-linode'
|
8
|
+
gem.version = VagrantPlugins::Linode::VERSION
|
9
|
+
gem.authors = ['Marques Johansson', 'Jonathan Leal']
|
10
|
+
gem.email = ['marques@linode.com', 'jleal@linode.com']
|
11
|
+
gem.description = 'Enables Vagrant to manage Linode linodes'
|
12
|
+
gem.summary = gem.description
|
13
|
+
|
14
|
+
gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
15
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
16
|
+
gem.require_paths = ['lib']
|
17
|
+
|
18
|
+
gem.add_dependency 'linode'
|
19
|
+
gem.add_dependency 'json'
|
20
|
+
gem.add_dependency 'log4r'
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vagrant-linode
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Marques Johansson
|
8
|
+
- Jonathan Leal
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-09-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: linode
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ! '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ! '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: json
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ! '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: log4r
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
description: Enables Vagrant to manage Linode linodes
|
57
|
+
email:
|
58
|
+
- marques@linode.com
|
59
|
+
- jleal@linode.com
|
60
|
+
executables: []
|
61
|
+
extensions: []
|
62
|
+
extra_rdoc_files: []
|
63
|
+
files:
|
64
|
+
- .gitignore
|
65
|
+
- CHANGELOG.md
|
66
|
+
- Gemfile
|
67
|
+
- LICENSE.txt
|
68
|
+
- README.md
|
69
|
+
- Rakefile
|
70
|
+
- box/README.md
|
71
|
+
- box/linode.box
|
72
|
+
- box/metadata.json
|
73
|
+
- lib/vagrant-linode.rb
|
74
|
+
- lib/vagrant-linode/actions.rb
|
75
|
+
- lib/vagrant-linode/actions/check_state.rb
|
76
|
+
- lib/vagrant-linode/actions/create.rb
|
77
|
+
- lib/vagrant-linode/actions/destroy.rb
|
78
|
+
- lib/vagrant-linode/actions/modify_provision_path.rb
|
79
|
+
- lib/vagrant-linode/actions/power_off.rb
|
80
|
+
- lib/vagrant-linode/actions/power_on.rb
|
81
|
+
- lib/vagrant-linode/actions/rebuild.rb
|
82
|
+
- lib/vagrant-linode/actions/reload.rb
|
83
|
+
- lib/vagrant-linode/actions/setup_key.rb
|
84
|
+
- lib/vagrant-linode/actions/setup_sudo.rb
|
85
|
+
- lib/vagrant-linode/actions/setup_user.rb
|
86
|
+
- lib/vagrant-linode/actions/sync_folders.rb
|
87
|
+
- lib/vagrant-linode/commands/rebuild.rb
|
88
|
+
- lib/vagrant-linode/config.rb
|
89
|
+
- lib/vagrant-linode/errors.rb
|
90
|
+
- lib/vagrant-linode/helpers/client.rb
|
91
|
+
- lib/vagrant-linode/helpers/result.rb
|
92
|
+
- lib/vagrant-linode/plugin.rb
|
93
|
+
- lib/vagrant-linode/provider.rb
|
94
|
+
- lib/vagrant-linode/version.rb
|
95
|
+
- locales/en.yml
|
96
|
+
- test/Vagrantfile
|
97
|
+
- test/cookbooks/test/recipes/default.rb
|
98
|
+
- test/scripts/provision.sh
|
99
|
+
- test/test.sh
|
100
|
+
- test/test_id_rsa
|
101
|
+
- test/test_id_rsa.pub
|
102
|
+
- vagrant-linode.gemspec
|
103
|
+
homepage:
|
104
|
+
licenses: []
|
105
|
+
metadata: {}
|
106
|
+
post_install_message:
|
107
|
+
rdoc_options: []
|
108
|
+
require_paths:
|
109
|
+
- lib
|
110
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ! '>='
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
requirements: []
|
121
|
+
rubyforge_project:
|
122
|
+
rubygems_version: 2.4.1
|
123
|
+
signing_key:
|
124
|
+
specification_version: 4
|
125
|
+
summary: Enables Vagrant to manage Linode linodes
|
126
|
+
test_files:
|
127
|
+
- test/Vagrantfile
|
128
|
+
- test/cookbooks/test/recipes/default.rb
|
129
|
+
- test/scripts/provision.sh
|
130
|
+
- test/test.sh
|
131
|
+
- test/test_id_rsa
|
132
|
+
- test/test_id_rsa.pub
|