vagrant_abiquo 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.
@@ -0,0 +1,15 @@
1
+ require 'abiquo-api'
2
+ require 'log4r'
3
+ include Log4r
4
+
5
+ module VagrantPlugins
6
+ module Abiquo
7
+ module Helpers
8
+ module Client
9
+ def client
10
+ @client ||= AbiquoAPI.new(@machine.provider_config.abiquo_connection_data)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,40 @@
1
+ module VagrantPlugins
2
+ module Abiquo
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)
14
+ find(sub_obj, search)["id"]
15
+ end
16
+
17
+ def find(sub_obj, search)
18
+ key = search.keys.first
19
+ value = search[key].to_s
20
+ key = key.to_s
21
+
22
+ result = @result[sub_obj.to_s].inject(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
+ raise(Errors::ResultMatchError, {
31
+ :key => key,
32
+ :value => value,
33
+ :collection_name => sub_obj.to_s,
34
+ :sub_obj => @result[sub_obj.to_s]
35
+ })
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,26 @@
1
+ module VagrantPlugins
2
+ module Abiquo
3
+ class Plugin < Vagrant.plugin('2')
4
+ name 'Abiquo'
5
+ description <<-DESC
6
+ This plugin installs a provider that allows Vagrant to manage
7
+ machines using Abiquo's API.
8
+ DESC
9
+
10
+ config(:abiquo, :provider) do
11
+ require_relative 'config'
12
+ Config
13
+ end
14
+
15
+ provider(:abiquo, parallel: true) do
16
+ require_relative 'provider'
17
+ Provider
18
+ end
19
+
20
+ action_hook(:create_vapp, :environment_load) do |hook|
21
+ require_relative 'actions/create_vapp.rb'
22
+ hook.prepend(Actions::CreatevApp)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,67 @@
1
+ require 'vagrant_abiquo/helpers/client'
2
+ require 'abiquo-api'
3
+
4
+ module VagrantPlugins
5
+ module Abiquo
6
+ class Provider < Vagrant.plugin('2', :provider)
7
+
8
+ def self.virtualmachine(machine, opts = {})
9
+ @client ||= AbiquoAPI.new(machine.provider_config.abiquo_connection_data)
10
+
11
+ vapp_name = machine.provider_config.virtualappliance.nil? ? File.basename(machine.env.cwd) : machine.provider_config.virtualappliance
12
+ # If machine ID is nil try to lookup by name
13
+ if machine.id.nil?
14
+ vms_lnk = AbiquoAPI::Link.new :href => 'cloud/virtualmachines',
15
+ :type => 'application/vnd.abiquo.virtualmachines+json',
16
+ :client => @client
17
+ @vm = vms_lnk.get.select {|v| v.label == machine.name.to_s and
18
+ v.link(:virtualappliance).title == vapp_name }.first
19
+ machine.id = @vm.url unless @vm.nil?
20
+ @vm
21
+ else
22
+ # ID is the URL of the VM
23
+ begin
24
+ vm_lnk = AbiquoAPI::Link.new :href => machine.id,
25
+ :type => 'application/vnd.abiquo.virtualmachine+json',
26
+ :client => @client
27
+ @vm = vm_lnk.get
28
+ rescue AbiquoAPIClient::NotFound
29
+ nil
30
+ end
31
+ end
32
+ end
33
+
34
+ def initialize(machine)
35
+ @machine = machine
36
+ end
37
+
38
+ def action(name)
39
+ return Actions.send(name) if Actions.respond_to?(name)
40
+ nil
41
+ end
42
+
43
+ def ssh_info
44
+ return nil if state.id != :ON
45
+
46
+ @vm ||= Provider.virtualmachine(@machine)
47
+ @ip ||= @vm.link(:nics).get.first.ip
48
+
49
+ template = @vm.link(:virtualmachinetemplate).get unless @username
50
+ @username = template.loginUser if template.respond_to? :loginUser
51
+
52
+ {
53
+ :host => @ip,
54
+ :port => 22,
55
+ :username => @username
56
+ }
57
+ end
58
+
59
+ def state
60
+ @vm ||= Provider.virtualmachine(@machine)
61
+ state = @vm.nil? ? :not_created : @vm.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 Abiquo
3
+ VERSION = '0.0.2'
4
+ end
5
+ end
data/locales/en.yml ADDED
@@ -0,0 +1,111 @@
1
+ en:
2
+ vagrant_abiquo:
3
+ info:
4
+ off: VM is off
5
+ not_created: VM has not been created
6
+ already_active: VM is already active
7
+ already_off: VM is already off
8
+ create: Creating VM...
9
+ deploy: Deploying VM...
10
+ deploycompleted: VM deploy completed successfully
11
+ deployfailed: VM deploy failed. Look to Abiquo events.
12
+ vm_ip: Virtual machine IP is %{ip}
13
+ vm_private_ip: Private IP address %{ip}
14
+ destroying: Destroying VM '%{vm}'...
15
+ deleted: VM '%{vm}' has been deleted.
16
+ deleted_vapp: vApp '%{vapp}' has been deleted since it was empty.
17
+ powering_off: Powering off the VM...
18
+ powering_on: Powering on the VM...
19
+ rebuilding: Rebuilding the VM...
20
+ reloading: Rebooting the VM...
21
+ creating_user: Creating user account %{user}...
22
+ modifying_sudo: Modifying sudoers file to remove tty requirement...
23
+ using_key: Using existing SSH key %{name}
24
+ creating_key: Creating new SSH key %{name}...
25
+ trying_rsync_install: Rsync not found, attempting to install with yum...
26
+ rsyncing: Rsyncing folder %{hostpath} => %{guestpath}...
27
+ rsync_missing: The rsync executable was not found in the current path.
28
+ config:
29
+ client_id: Client ID is required
30
+ api_key: API key is required"
31
+ private_key: SSH private key path is required
32
+ public_key: SSH public key not found %{key}
33
+ errors:
34
+ vdc_not_found: Virtual datacenter '%{vdc}' not found
35
+ template_not_found: Template %{template} not found in VDC '%{vdc}'
36
+ poweroff: Error powering off VM %{vm}. Current state is %{state}
37
+ network_error: |-
38
+ A network error has ocurred. The process of assigning the VM to the
39
+ designated networks has failed. Please review the network configuration.
40
+ public_key: |-
41
+ There was an issue reading the public key at:
42
+
43
+ Path: %{path}
44
+
45
+ Please check the file's permissions.
46
+ api_status: |-
47
+ There was an issue with the request made to Abiquo API
48
+ API at:
49
+
50
+ Path: %{path}
51
+ Headers: %{headers}
52
+ Data: %{data}
53
+
54
+ The response status from the API was:
55
+
56
+ Status: %{status}
57
+ Response: %{response}
58
+ apifind_error: |-
59
+ There was an issue when looking for:
60
+ Entity: %{entity}
61
+ Name: %{name}
62
+
63
+ Probably doesn't exist. Please check through Abiquo UI
64
+ restclient_error: |-
65
+ There was an issue with the request made to Abiquo API at:
66
+ Path: %{path}
67
+ Headers: %{headers}
68
+ Data: %{data}
69
+
70
+ The response status from the API was:
71
+ Response: %{response}
72
+ rsync: |-
73
+ There was an error when attemping to rsync a share folder.
74
+ Please inspect the error message below for more info.
75
+
76
+ Host path: %{hostpath}
77
+ Guest path: %{guestpath}
78
+ Error: %{stderr}
79
+ json: |-
80
+ There was an issue with the JSON response from the Digital Ocean
81
+ API at:
82
+
83
+ Path: %{path}
84
+ URI Params: %{params}
85
+
86
+ The response JSON from the API was:
87
+
88
+ Response: %{response}
89
+ result_match: |-
90
+ The result collection for %{collection_name}:
91
+
92
+ %{sub_obj}
93
+
94
+ Contained no object with the value "%{value}" for the the
95
+ key "%{key}".
96
+
97
+ Please ensure that the configured value exists in the collection.
98
+ certificate: |-
99
+ The secure connection to the Digital Ocean API has failed. Please
100
+ ensure that your local certificates directory is defined in the
101
+ provider config.
102
+
103
+ config.vm.provider :digital_ocean do |vm|
104
+ vm.ca_path = "/path/to/ssl/ca/cert.crt"
105
+ end
106
+
107
+ This is generally caused by the OpenSSL configuration associated
108
+ with the Ruby install being unaware of the system specific ca
109
+ certs.
110
+ local_ip: |-
111
+ The Digital Ocean provider was unable to determine the host's IP.
data/test/Vagrantfile ADDED
@@ -0,0 +1,25 @@
1
+ Vagrant.configure('2') do |config|
2
+ config.ssh.username = 'root'
3
+ config.ssh.password = 'Temporal1!'
4
+
5
+ config.vm.synced_folder ".", "/vagrant",type: "rsync"
6
+ config.vm.provider :abiquo do |provider, override|
7
+ override.vm.box = 'abiquo'
8
+ override.vm.box_url = "https://github.com/abiquo/vagrant-abiquo/raw/master/box/abiquo.box"
9
+ provider.abiquo_connection_data = {
10
+ abiquo_api_url: ENV['ABQ_URL'],
11
+ abiquo_username: ENV['ABQ_USER'],
12
+ abiquo_password: ENV['ABQ_PASS']
13
+ }
14
+ end
15
+
16
+ config.vm.provision :shell, :path => 'scripts/provision.sh'
17
+
18
+ config.vm.define :virtualmachine do |virtualmachine|
19
+ virtualmachine.vm.provider :abiquo do |provider|
20
+ provider.virtualdatacenter = ENV['ABQ_VDC']
21
+ provider.virtualappliance = ENV['ABQ_VAPP'] || 'testing'
22
+ provider.template = ENV['ABQ_TMPL'] || 'Core'
23
+ end
24
+ end
25
+ 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
+ vagrant up --provider=abiquo
4
+ vagrant provision
5
+ vagrant halt
6
+ vagrant up
7
+ vagrant destroy --force
8
+
9
+ cd ..
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'vagrant_abiquo/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "vagrant_abiquo"
8
+ gem.version = VagrantPlugins::Abiquo::VERSION
9
+ gem.authors = ["Daniel Beneyto", "Marc Cirauqui"]
10
+ gem.email = ["daniel.beneyto@abiquo.com", "marc.cirauqui@abiquo.com"]
11
+ gem.description = %q{Enables Vagrant to manage Abiquo instances}
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 "abiquo-api", "~> 0.1.1"
19
+ gem.add_dependency "log4r"
20
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vagrant_abiquo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Beneyto
8
+ - Marc Cirauqui
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2017-03-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: abiquo-api
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 0.1.1
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: 0.1.1
28
+ - !ruby/object:Gem::Dependency
29
+ name: log4r
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
+ description: Enables Vagrant to manage Abiquo instances
43
+ email:
44
+ - daniel.beneyto@abiquo.com
45
+ - marc.cirauqui@abiquo.com
46
+ executables: []
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - ".gitignore"
51
+ - ".ruby-gemset"
52
+ - ".ruby-version"
53
+ - CHANGELOG.md
54
+ - Gemfile
55
+ - Gemfile.lock
56
+ - LICENSE.txt
57
+ - README.md
58
+ - Rakefile
59
+ - Vagrantfile
60
+ - box/abiquo.box
61
+ - box/metadata.json
62
+ - lib/vagrant_abiquo.rb
63
+ - lib/vagrant_abiquo/actions.rb
64
+ - lib/vagrant_abiquo/actions/check_state.rb
65
+ - lib/vagrant_abiquo/actions/create.rb
66
+ - lib/vagrant_abiquo/actions/create_vapp.rb
67
+ - lib/vagrant_abiquo/actions/destroy.rb
68
+ - lib/vagrant_abiquo/actions/power_off.rb
69
+ - lib/vagrant_abiquo/actions/power_on.rb
70
+ - lib/vagrant_abiquo/actions/reset.rb
71
+ - lib/vagrant_abiquo/config.rb
72
+ - lib/vagrant_abiquo/errors.rb
73
+ - lib/vagrant_abiquo/helpers/abiquo.rb
74
+ - lib/vagrant_abiquo/helpers/client.rb
75
+ - lib/vagrant_abiquo/helpers/result.rb
76
+ - lib/vagrant_abiquo/plugin.rb
77
+ - lib/vagrant_abiquo/provider.rb
78
+ - lib/vagrant_abiquo/version.rb
79
+ - locales/en.yml
80
+ - test/Vagrantfile
81
+ - test/scripts/provision.sh
82
+ - test/test.sh
83
+ - vagrant_abiquo.gemspec
84
+ homepage:
85
+ licenses: []
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.6.8
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: Enables Vagrant to manage Abiquo instances
107
+ test_files:
108
+ - test/Vagrantfile
109
+ - test/scripts/provision.sh
110
+ - test/test.sh