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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c8ec55eea899018a9da753f534037fbd7ccec64d
4
+ data.tar.gz: 8c42327a3c29996bc27f2b4dc3825254e6bdc7d7
5
+ SHA512:
6
+ metadata.gz: 736b5dd04c0de34fe64583503df1ea0c4dfddab3b9e3a253a271e8131fdd7cc5c1f8bef0d92d0445f4c094e0da5df95878be6f68db6d35ed5d833fc50450f0e7
7
+ data.tar.gz: 1bfd63dc9f1e3049f068af76805ad4786777f9fa6f531bc082364f4c2240f8aa70b4349b06374f15689a047f7e73c6a14c642fabfa2ef293e64a8df8b95fe147
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ *.vagrant*
2
+ vagrant\:\:*
3
+ *pkg*
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ vagrant_abiquo
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.3.3
data/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ Changelog
2
+ =========
3
+
4
+ 0.0.1
5
+ -----
6
+ - Working to make this work
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :development do
4
+ gem 'vagrant', git: 'https://github.com/mitchellh/vagrant.git'
5
+ gem 'abiquo-api', '~> 0.1.1'
6
+ gem 'rake'
7
+ gem 'pry'
8
+ gem 'pry-byebug'
9
+ end
10
+
11
+ group :plugins do
12
+ gem "vagrant_abiquo", path: "."
13
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,149 @@
1
+ GIT
2
+ remote: https://github.com/mitchellh/vagrant.git
3
+ revision: 96368d8a1f778761e74433b83502f119610a6647
4
+ specs:
5
+ vagrant (1.9.2.dev)
6
+ childprocess (~> 0.5.0)
7
+ erubis (~> 2.7.0)
8
+ hashicorp-checkpoint (~> 0.1.1)
9
+ i18n (>= 0.6.0, <= 0.8.0)
10
+ listen (~> 3.1.5)
11
+ log4r (~> 1.1.9, < 1.1.11)
12
+ net-scp (~> 1.1.0)
13
+ net-sftp (~> 2.1)
14
+ net-ssh (~> 3.0.1)
15
+ nokogiri (= 1.6.7.1)
16
+ rb-kqueue (~> 0.2.0)
17
+ rest-client (>= 1.6.0, < 3.0)
18
+ ruby_dep (<= 1.3.1)
19
+ wdm (~> 0.1.0)
20
+ winrm (~> 2.1)
21
+ winrm-elevated (~> 1.1)
22
+ winrm-fs (~> 1.0)
23
+
24
+ PATH
25
+ remote: .
26
+ specs:
27
+ vagrant_abiquo (0.0.2)
28
+ abiquo-api (~> 0.1.1)
29
+ log4r
30
+
31
+ GEM
32
+ remote: https://rubygems.org/
33
+ specs:
34
+ abiquo-api (0.1.1)
35
+ addressable (~> 2.4.0, >= 2.4.0)
36
+ excon (~> 0.43, >= 0.43.0)
37
+ faraday (~> 0.9.2, >= 0.9.2)
38
+ faraday_middleware (~> 0.10.0, >= 0.10.0)
39
+ formatador (~> 0.2, >= 0.2.5)
40
+ json (~> 2.0, >= 2.0.2)
41
+ simple_oauth (~> 0.3.1, >= 0.3.1)
42
+ addressable (2.4.0)
43
+ builder (3.2.3)
44
+ byebug (9.0.6)
45
+ childprocess (0.5.9)
46
+ ffi (~> 1.0, >= 1.0.11)
47
+ coderay (1.1.1)
48
+ domain_name (0.5.20161129)
49
+ unf (>= 0.0.5, < 1.0.0)
50
+ erubis (2.7.0)
51
+ excon (0.55.0)
52
+ faraday (0.9.2)
53
+ multipart-post (>= 1.2, < 3)
54
+ faraday_middleware (0.10.1)
55
+ faraday (>= 0.7.4, < 1.0)
56
+ ffi (1.9.17)
57
+ formatador (0.2.5)
58
+ gssapi (1.2.0)
59
+ ffi (>= 1.0.1)
60
+ gyoku (1.3.1)
61
+ builder (>= 2.1.2)
62
+ hashicorp-checkpoint (0.1.4)
63
+ http-cookie (1.0.3)
64
+ domain_name (~> 0.5)
65
+ httpclient (2.8.3)
66
+ i18n (0.8.0)
67
+ json (2.0.3)
68
+ listen (3.1.5)
69
+ rb-fsevent (~> 0.9, >= 0.9.4)
70
+ rb-inotify (~> 0.9, >= 0.9.7)
71
+ ruby_dep (~> 1.2)
72
+ little-plugger (1.1.4)
73
+ log4r (1.1.10)
74
+ logging (2.1.0)
75
+ little-plugger (~> 1.1)
76
+ multi_json (~> 1.10)
77
+ method_source (0.8.2)
78
+ mime-types (3.1)
79
+ mime-types-data (~> 3.2015)
80
+ mime-types-data (3.2016.0521)
81
+ mini_portile2 (2.0.0)
82
+ multi_json (1.12.1)
83
+ multipart-post (2.0.0)
84
+ net-scp (1.1.2)
85
+ net-ssh (>= 2.6.5)
86
+ net-sftp (2.1.2)
87
+ net-ssh (>= 2.6.5)
88
+ net-ssh (3.0.2)
89
+ netrc (0.11.0)
90
+ nokogiri (1.6.7.1)
91
+ mini_portile2 (~> 2.0.0.rc2)
92
+ nori (2.6.0)
93
+ pry (0.10.4)
94
+ coderay (~> 1.1.0)
95
+ method_source (~> 0.8.1)
96
+ slop (~> 3.4)
97
+ pry-byebug (3.4.2)
98
+ byebug (~> 9.0)
99
+ pry (~> 0.10)
100
+ rake (12.0.0)
101
+ rb-fsevent (0.9.8)
102
+ rb-inotify (0.9.8)
103
+ ffi (>= 0.5.0)
104
+ rb-kqueue (0.2.4)
105
+ ffi (>= 0.5.0)
106
+ rest-client (2.0.0)
107
+ http-cookie (>= 1.0.2, < 2.0)
108
+ mime-types (>= 1.16, < 4.0)
109
+ netrc (~> 0.8)
110
+ ruby_dep (1.3.1)
111
+ rubyntlm (0.6.1)
112
+ rubyzip (1.2.1)
113
+ simple_oauth (0.3.1)
114
+ slop (3.6.0)
115
+ unf (0.1.4)
116
+ unf_ext
117
+ unf_ext (0.0.7.2)
118
+ wdm (0.1.1)
119
+ winrm (2.1.2)
120
+ builder (>= 2.1.2)
121
+ erubis (~> 2.7)
122
+ gssapi (~> 1.2)
123
+ gyoku (~> 1.0)
124
+ httpclient (~> 2.2, >= 2.2.0.2)
125
+ logging (>= 1.6.1, < 3.0)
126
+ nori (~> 2.0)
127
+ rubyntlm (~> 0.6.0, >= 0.6.1)
128
+ winrm-elevated (1.1.0)
129
+ winrm (~> 2.0)
130
+ winrm-fs (~> 1.0)
131
+ winrm-fs (1.0.1)
132
+ erubis (~> 2.7)
133
+ logging (>= 1.6.1, < 3.0)
134
+ rubyzip (~> 1.1)
135
+ winrm (~> 2.0)
136
+
137
+ PLATFORMS
138
+ ruby
139
+
140
+ DEPENDENCIES
141
+ abiquo-api (~> 0.1.1)
142
+ pry
143
+ pry-byebug
144
+ rake
145
+ vagrant!
146
+ vagrant_abiquo!
147
+
148
+ BUNDLED WITH
149
+ 1.14.5
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Daniel Beneyto
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,100 @@
1
+ Abiquo Vagrant Provider
2
+ ==============================
3
+ `vagrant_abiquo` is a provider plugin for Vagrant that supports the
4
+ management of [Abiquo](https://www.abiquo.com/) virtual machines
5
+
6
+ Current features include:
7
+ - create and destroy virtualmachines
8
+ - power on and off virtualmachines
9
+ - provision
10
+ - ssh
11
+
12
+ Install
13
+ -------
14
+ Installation of the provider requires two steps:
15
+
16
+ 1. Install the provider plugin using the Vagrant command-line interface:
17
+
18
+ ```
19
+ $ vagrant plugin install vagrant_abiquo
20
+ ```
21
+
22
+ Configure
23
+ ---------
24
+ Once the provider has been installed, you will need to configure your project
25
+ to use it. The most basic `Vagrantfile` to create a virtual machine in Abiquo
26
+ is shown below:
27
+
28
+ ```ruby
29
+ VAGRANTFILE_API_VERSION = "2"
30
+
31
+ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
32
+ config.vm.define 'abiquovm'
33
+
34
+ config.vm.provider :abiquo do |provider, override|
35
+ override.vm.box = 'abiquo'
36
+ override.vm.box_url = "https://github.com/abiquo/vagrant_abiquo/raw/master/box/abiquo.box"
37
+
38
+ provider.abiquo_connection_data = {
39
+ abiquo_api_url: 'http://mothership.bcn.abiquo.com/api',
40
+ abiquo_username: 'mcirauqui',
41
+ abiquo_password: 'xxxx'
42
+ }
43
+ provider.virtualdatacenter = 'Support Lab - Marc'
44
+ provider.virtualappliance = 'Tests'
45
+ provider.template = 'centos 7 v2'
46
+ end
47
+ end
48
+ ```
49
+
50
+ Please note the following:
51
+ - You *must* specify the `provider.abiquo_connection_data` hash to connect to
52
+ Abiquo API.
53
+
54
+ **Supported Configuration Attributes**
55
+
56
+ The following attributes are available to further configure the provider:
57
+ - `provider.virtualdatacenter` - A string representing the Virtual Data Center
58
+ where the VM will be deployed to. The available VDC can be check in the
59
+ `Virtual Datacenter` section.
60
+ - `provider.virtualappliance` - A string representing the vApp where to deploy
61
+ the VM into. It will be created if it does not exist already.
62
+ - `provider.template` - A string representing the name of an availabe virtual
63
+ machine template in the VDC. The available templates can be check in the
64
+ `Apps Library` section.
65
+ - `provider.cpu_cores` - The number of CPU cores to assign to the virtual machine. If
66
+ missing, the required CPU from the template will be used.
67
+ - `provider.ram_mb` - The amount of RAM in MB that will be assigned to the VM. If
68
+ missing, the required RAM from the template will be used.
69
+ - `provider.network` - A hash of network and IP pairs. Each key will be a network
70
+ name in Abiquo, and the value can be a specific IP to attach, or `nil` to
71
+ autoselect an IP from the network.
72
+ - `user_data` - An optional user data script to be passed on to the VM. If not
73
+ specified, the plugin adds a simple provision script to ensure SSH keys are
74
+ injected to the VM.
75
+
76
+ Run
77
+ ---
78
+ After creating your project's `Vagrantfile` with the required configuration
79
+ attributes described above, you may create a new virtual machine with the
80
+ following command:
81
+
82
+ $ vagrant up --provider=abiquo
83
+
84
+ This command will create a new virtual machine in the specified VDC using
85
+ the specified template.
86
+
87
+ **Supported Commands**
88
+
89
+ The provider supports the following Vagrant sub-commands:
90
+ - `vagrant destroy` - Deletes the virtual machine.
91
+ - `vagrant ssh` - Logs into the virtual machine using SSH[1].
92
+ - `vagrant halt` - Powers off the virtual machine.
93
+ - `vagrant provision` - Runs the configured provisioners and rsyncs any
94
+ specified `config.vm.synced_folder`.
95
+ - `vagrant reload` - Resets the virtual machine.
96
+ - `vagrant status` - Outputs the status (as displayed in Abiquo UI) for the
97
+ virtual machine.
98
+
99
+ [1] For SSH to work, you need to either make sure your SSH keys are available
100
+ in the virtual machine or override SSH username and password.
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ require 'bundler/gem_helper'
2
+
3
+ namespace :gem do
4
+ Bundler::GemHelper.install_tasks
5
+ end
6
+
7
+ task :test do
8
+ result = sh 'bash -ex test/test.sh'
9
+
10
+ if result
11
+ puts 'Success!'
12
+ else
13
+ puts 'Failure!'
14
+ exit 1
15
+ end
16
+ end
17
+
18
+ def env
19
+ ['ABIQUO_API_USER', 'ABIQUO_API_PASSWORD', 'VAGRANT_LOG'].inject('') do |acc, key|
20
+ acc += "#{key}=#{ENV[key] || 'error'} "
21
+ end
22
+ end
data/Vagrantfile ADDED
@@ -0,0 +1,39 @@
1
+ VAGRANTFILE_API_VERSION = "2"
2
+
3
+ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
4
+ config.vm.synced_folder ".", "/vagrant", type: "rsync"
5
+
6
+ (1..5).each do |index|
7
+ config.vm.define "abiquotesting#{index}" do |t|
8
+ t.vm.hostname = "abiquotesting#{index}"
9
+ end
10
+ end
11
+
12
+ config.vm.provider :abiquo do |provider, override|
13
+ override.vm.box = 'abiquo'
14
+ override.vm.box_url = "https://github.com/abiquo/vagrant_abiquo/raw/master/box/abiquo.box"
15
+ override.vm.hostname = 'abiquotesting'
16
+
17
+ provider.abiquo_connection_data = {
18
+ abiquo_api_url: 'https://chirauki40.bcn.abiquo.com/api',
19
+ abiquo_username: 'admin',
20
+ abiquo_password: 'xabiquo',
21
+ connection_options: {
22
+ ssl: {
23
+ verify: false
24
+ }
25
+ }
26
+ }
27
+ provider.cpu_cores = 2
28
+ provider.ram_mb = 2048
29
+ provider.virtualdatacenter = 'ESX_VDC'
30
+ provider.virtualappliance = 'Vagrant Tests'
31
+ provider.template = 'Centos 7 x86_64'
32
+
33
+ provider.network = {
34
+ 'private_dnsmasq' => nil
35
+ }
36
+ override.ssh.private_key_path = '~/.ssh/id_rsa'
37
+ override.ssh.username = 'centos'
38
+ end
39
+ end
data/box/abiquo.box ADDED
Binary file
data/box/metadata.json ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "provider": "abiquo"
3
+ }
@@ -0,0 +1,18 @@
1
+ require 'pathname'
2
+ require 'vagrant_abiquo/plugin'
3
+ require 'vagrant_abiquo/helpers/client'
4
+
5
+ module VagrantPlugins
6
+ module Abiquo
7
+ lib_path = Pathname.new(File.expand_path("../vagrant_abiquo", __FILE__))
8
+ autoload :Actions, lib_path.join("actions")
9
+ autoload :Errors, lib_path.join("errors")
10
+
11
+ def self.source_root
12
+ @source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
13
+ end
14
+
15
+ I18n.load_path << File.expand_path('locales/en.yml', source_root)
16
+ I18n.reload!
17
+ end
18
+ end
@@ -0,0 +1,133 @@
1
+ require 'vagrant_abiquo/actions/check_state'
2
+ require 'vagrant_abiquo/actions/create'
3
+ require 'vagrant_abiquo/actions/destroy'
4
+ require 'vagrant_abiquo/actions/power_off'
5
+ require 'vagrant_abiquo/actions/power_on'
6
+ require 'vagrant_abiquo/actions/reset'
7
+
8
+ module VagrantPlugins
9
+ module Abiquo
10
+ module Actions
11
+ include Vagrant::Action::Builtin
12
+
13
+ def self.destroy
14
+ return Vagrant::Action::Builder.new.tap do |builder|
15
+ builder.use ConfigValidate
16
+ builder.use Call, CheckState do |env, b|
17
+ case env[:machine_state]
18
+ when :not_created
19
+ env[:ui].info I18n.t('vagrant_abiquo.info.not_created')
20
+ else
21
+ b.use Call, DestroyConfirm do |env2, b2|
22
+ if env2[:result]
23
+ b2.use Destroy
24
+ b2.use ProvisionerCleanup if defined?(ProvisionerCleanup)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ def self.up
33
+ return Vagrant::Action::Builder.new.tap do |builder|
34
+ builder.use ConfigValidate
35
+ builder.use Call, CheckState do |env, b|
36
+ case env[:machine_state]
37
+ when :ON
38
+ env[:ui].info I18n.t('vagrant_abiquo.info.already_active')
39
+ when :OFF
40
+ b.use PowerOn
41
+ b.use Provision
42
+ b.use SyncedFolders
43
+ when :not_created
44
+ b.use Create
45
+ b.use Provision
46
+ b.use SyncedFolders
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ def self.reload
53
+ return Vagrant::Action::Builder.new.tap do |builder|
54
+ builder.use ConfigValidate
55
+ builder.use Call, CheckState do |env, b|
56
+ case env[:machine_state]
57
+ when :not_created
58
+ env[:ui].info I18n.t('vagrant_abiquo.info.not_created')
59
+ else
60
+ b.use Reset
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+ def self.halt
67
+ return Vagrant::Action::Builder.new.tap do |builder|
68
+ builder.use ConfigValidate
69
+ builder.use Call, CheckState do |env, b|
70
+ case env[:machine_state]
71
+ when :ON
72
+ b.use PowerOff
73
+ when :OFF
74
+ env[:ui].info I18n.t('vagrant_abiquo.info.already_off')
75
+ when :not_created
76
+ env[:ui].info I18n.t('vagrant_abiquo.info.not_created')
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ def self.ssh
83
+ return Vagrant::Action::Builder.new.tap do |builder|
84
+ builder.use ConfigValidate
85
+ builder.use Call, CheckState do |env, b|
86
+ case env[:machine_state]
87
+ when :ON
88
+ b.use SSHExec
89
+ when :OFF
90
+ env[:ui].info I18n.t('vagrant_abiquo.info.off')
91
+ when :not_created
92
+ env[:ui].info I18n.t('vagrant_abiquo.info.not_created')
93
+ end
94
+ end
95
+ end
96
+ end
97
+
98
+ def self.ssh_run
99
+ return Vagrant::Action::Builder.new.tap do |builder|
100
+ builder.use ConfigValidate
101
+ builder.use Call, CheckState do |env, b|
102
+ case env[:machine_state]
103
+ when :ON
104
+ b.use SSHRun
105
+ when :OFF
106
+ env[:ui].info I18n.t('vagrant_abiquo.info.off')
107
+ when :not_created
108
+ env[:ui].info I18n.t('vagrant_abiquo.info.not_created')
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+ def self.provision
115
+ return Vagrant::Action::Builder.new.tap do |builder|
116
+ builder.use ConfigValidate
117
+ builder.use Call, CheckState do |env, b|
118
+ case env[:machine_state]
119
+ when :ON
120
+ b.use Provision
121
+ b.use SyncedFolders
122
+ when :OFF
123
+ env[:ui].info I18n.t('vagrant_abiquo.info.off')
124
+ when :not_created
125
+ env[:ui].info I18n.t('vagrant_abiquo.info.not_created')
126
+ end
127
+ end
128
+ end
129
+ end
130
+
131
+ end
132
+ end
133
+ end