vagrant-1cloud 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,21 @@
1
+ module VagrantPlugins
2
+ module OneCloud
3
+ class Plugin < Vagrant.plugin('2')
4
+ name 'OneCloud'
5
+ description <<-DESC
6
+ This plugin installs a provider that allows Vagrant to manage
7
+ machines using 1cloud's API.
8
+ DESC
9
+
10
+ config(:1cloud, :provider) do
11
+ require_relative 'config'
12
+ Config
13
+ end
14
+
15
+ provider(:1cloud, parallel: false, defaultable: false) do
16
+ require_relative 'provider'
17
+ Provider
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,67 @@
1
+ require 'vagrant-1cloud/actions'
2
+
3
+ module VagrantPlugins
4
+ module OneCloud
5
+ class Provider < Vagrant.plugin('2', :provider)
6
+
7
+ # This class method caches status for all droplets within
8
+ # the 1cloud account. A specific droplet's status
9
+ # may be refreshed by passing :refresh => true as an option.
10
+ def self.droplet(machine, opts = {})
11
+ client = Helpers::ApiClient.new(machine)
12
+
13
+ # load status of droplets if it has not been done before
14
+ if !@droplets
15
+ @droplets = client.request('/server')
16
+ end
17
+
18
+ if opts[:refresh] && machine.id
19
+ # refresh the droplet status for the given machine
20
+ @droplets.delete_if { |d| d['id'].to_s == machine.id }
21
+ @droplets << droplet = client.request("/server/#{machine.id}")
22
+ else
23
+ # lookup droplet status for the given machine
24
+ droplet = @droplets.find { |d| d['id'].to_s == machine.id }
25
+ end
26
+
27
+ # if lookup by id failed, check for a droplet with a matching name
28
+ # and set the id to ensure vagrant stores locally
29
+ # TODO allow the user to configure this behavior
30
+ if !droplet
31
+ name = machine.config.vm.hostname || machine.name
32
+ droplet = @droplets.find { |d| d['name'] == name.to_s }
33
+ machine.id = droplet['id'].to_s if droplet
34
+ end
35
+
36
+ droplet ||= {'state' => 'not_created'}
37
+ end
38
+
39
+ def initialize(machine)
40
+ @machine = machine
41
+ end
42
+
43
+ def action(name)
44
+ return Actions.send(name) if Actions.respond_to?(name)
45
+ nil
46
+ end
47
+
48
+ # This method is called if the underlying machine ID changes. Providers
49
+ # can use this method to load in new data for the actual backing
50
+ # machine or to realize that the machine is now gone (the ID can
51
+ # become `nil`). No parameters are given, since the underlying machine
52
+ # is simply the machine instance given to this object. And no
53
+ # return value is necessary.
54
+ def machine_id_changed
55
+ end
56
+
57
+ # This should return the state of the machine within this provider.
58
+ # The state must be an instance of {MachineState}. Please read the
59
+ # documentation of that class for more information.
60
+ def state
61
+ state = Provider.droplet(@machine)['state'].to_sym
62
+ long = short = state.to_s
63
+ Vagrant::MachineState.new(state, short, long)
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,5 @@
1
+ module VagrantPlugins
2
+ module OneCloud
3
+ VERSION = '0.0.1'
4
+ end
5
+ end
data/locales/en.yml ADDED
@@ -0,0 +1,67 @@
1
+ en:
2
+ vagrant_1cloud:
3
+ info:
4
+ off: "Droplet is off"
5
+ not_created: "Droplet has not been created"
6
+ already_active: "Droplet is already active"
7
+ already_off: "Droplet is already off"
8
+ creating: "Creating a new droplet..."
9
+ destroying: "Destroying the droplet..."
10
+ shutting_down: "Shutting down the droplet..."
11
+ powering_off: "Powering off the droplet..."
12
+ powering_on: "Powering on the droplet..."
13
+ reloading: "Rebooting the droplet..."
14
+ config:
15
+ token: "Token is required"
16
+ errors:
17
+ api_status: |-
18
+ There was an issue with the request made to the 1cloud
19
+ API at:
20
+
21
+ Path: %{path}
22
+ URI Params: %{params}
23
+
24
+ The response status from the API was:
25
+
26
+ Status: %{status}
27
+ Response: %{response}
28
+ rsync: |-
29
+ There was an error when attemping to rsync a share folder.
30
+ Please inspect the error message below for more info.
31
+
32
+ Host path: %{hostpath}
33
+ Guest path: %{guestpath}
34
+ Error: %{stderr}
35
+ json: |-
36
+ There was an issue with the JSON response from the 1cloud
37
+ API at:
38
+
39
+ Path: %{path}
40
+ URI Params: %{params}
41
+
42
+ The response JSON from the API was:
43
+
44
+ Response: %{response}
45
+ result_match: |-
46
+ The result collection for %{collection_name}:
47
+
48
+ %{sub_obj}
49
+
50
+ Contained no object with the value "%{value}" for the the
51
+ key "%{key}".
52
+
53
+ Please ensure that the configured value exists in the collection.
54
+ certificate: |-
55
+ The secure connection to the 1cloud API has failed. Please
56
+ ensure that your local certificates directory is defined in the
57
+ provider config.
58
+
59
+ config.vm.provider :1cloud do |vm|
60
+ vm.ca_path = "/path/to/ssl/ca/cert.crt"
61
+ end
62
+
63
+ This is generally caused by the OpenSSL configuration associated
64
+ with the Ruby install being unaware of the system specific ca
65
+ certs.
66
+ local_ip: |-
67
+ The 1cloud provider was unable to determine the host's IP.
data/test/Vagrantfile ADDED
@@ -0,0 +1,16 @@
1
+ Vagrant.require_plugin('vagrant-1cloud')
2
+
3
+ Vagrant.configure('2') do |config|
4
+
5
+ config.vm.provider :1cloud do |provider|
6
+ provider.token = ENV['DO_TOKEN']
7
+ end
8
+
9
+ config.vm.define "test" do |t|
10
+ t.ssh.insert_key = false
11
+ t.ssh.private_key_path = '~/.ssh/id_rsa'
12
+ t.vm.box = '1cloud'
13
+ t.vm.hostname = 'test'
14
+ t.vm.provision :shell, :path => 'scripts/provision.sh'
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ echo 'Testing 1 2 3!'
data/test/test.sh ADDED
@@ -0,0 +1,9 @@
1
+ cd test
2
+
3
+ bundle exec vagrant up --provider=1cloud
4
+ bundle exec vagrant up
5
+ bundle exec vagrant provision
6
+ bundle exec vagrant halt
7
+ bundle exec vagrant destroy
8
+
9
+ cd ..
@@ -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-1cloud/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "vagrant-1cloud"
8
+ gem.version = VagrantPlugins::OneCloud::VERSION
9
+ gem.authors = ["Bulat Yusupov"]
10
+ gem.email = ["usbulat@gmail.com"]
11
+ gem.description = %q{Enables Vagrant to manage 1cloud droplets. Based on https://github.com/devopsgroup-io/vagrant-digitalocean.}
12
+ gem.summary = gem.description
13
+
14
+ gem.files = `git ls-files`.split($/)
15
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
16
+ gem.require_paths = ["lib"]
17
+
18
+ gem.add_dependency "faraday", ">= 0.8.6"
19
+ gem.add_dependency "json"
20
+ gem.add_dependency "log4r"
21
+ end
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vagrant-1cloud
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Bulat Yusupov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-03-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.8.6
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.8.6
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: log4r
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Enables Vagrant to manage 1cloud droplets. Based on https://github.com/devopsgroup-io/vagrant-digitalocean.
56
+ email:
57
+ - usbulat@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - LICENSE
65
+ - Rakefile
66
+ - lib/vagrant-1cloud.rb
67
+ - lib/vagrant-1cloud/actions.rb
68
+ - lib/vagrant-1cloud/actions/check_state.rb
69
+ - lib/vagrant-1cloud/actions/create.rb
70
+ - lib/vagrant-1cloud/actions/destroy.rb
71
+ - lib/vagrant-1cloud/actions/power_off.rb
72
+ - lib/vagrant-1cloud/actions/power_on.rb
73
+ - lib/vagrant-1cloud/actions/reload.rb
74
+ - lib/vagrant-1cloud/actions/shut_down.rb
75
+ - lib/vagrant-1cloud/config.rb
76
+ - lib/vagrant-1cloud/errors.rb
77
+ - lib/vagrant-1cloud/helpers/client.rb
78
+ - lib/vagrant-1cloud/helpers/result.rb
79
+ - lib/vagrant-1cloud/plugin.rb
80
+ - lib/vagrant-1cloud/provider.rb
81
+ - lib/vagrant-1cloud/version.rb
82
+ - locales/en.yml
83
+ - test/Vagrantfile
84
+ - test/scripts/provision.sh
85
+ - test/test.sh
86
+ - vagrant-1cloud.gemspec
87
+ homepage:
88
+ licenses: []
89
+ metadata: {}
90
+ post_install_message:
91
+ rdoc_options: []
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirements: []
105
+ rubyforge_project:
106
+ rubygems_version: 2.6.8
107
+ signing_key:
108
+ specification_version: 4
109
+ summary: Enables Vagrant to manage 1cloud droplets. Based on https://github.com/devopsgroup-io/vagrant-digitalocean.
110
+ test_files:
111
+ - test/Vagrantfile
112
+ - test/scripts/provision.sh
113
+ - test/test.sh