abiquo-etk 0.5.8 → 0.5.9
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.
- data/VERSION +1 -1
- data/lib/abicli/commands/remote-services-settings.rb +0 -2
- data/lib/abicli/commands/server-settings.rb +0 -2
- data/lib/abicli/commands/set.rb +0 -2
- data/lib/abicli/commands/set18.ext +0 -1
- data/lib/abicli/commands/upload-template.rb +2 -2
- metadata +100 -82
- data/vendor/api_ruby_client/Gemfile +0 -10
- data/vendor/api_ruby_client/LICENSE +0 -20
- data/vendor/api_ruby_client/README +0 -39
- data/vendor/api_ruby_client/Rakefile +0 -89
- data/vendor/api_ruby_client/abiquo.gemspec +0 -43
- data/vendor/api_ruby_client/examples/create_dc_and_hv.rb +0 -38
- data/vendor/api_ruby_client/examples/hypervisor_resource.rb +0 -16
- data/vendor/api_ruby_client/examples/rack_resource.rb +0 -38
- data/vendor/api_ruby_client/lib/abiquo.rb +0 -201
- data/vendor/api_ruby_client/lib/core_ext.rb +0 -28
- data/vendor/api_ruby_client/lib/to_xml.rb +0 -22
- data/vendor/api_ruby_client/spec/acceptance/create_resource_spec.rb +0 -43
- data/vendor/api_ruby_client/spec/acceptance/delete_resource_spec.rb +0 -27
- data/vendor/api_ruby_client/spec/acceptance/fetch_resource_collections_spec.rb +0 -55
- data/vendor/api_ruby_client/spec/acceptance/fetch_single_resources_spec.rb +0 -47
- data/vendor/api_ruby_client/spec/acceptance/from_xml_spec.rb +0 -15
- data/vendor/api_ruby_client/spec/acceptance/navigate_linked_resources_spec.rb +0 -61
- data/vendor/api_ruby_client/spec/acceptance/update_resource_spec.rb +0 -26
- data/vendor/api_ruby_client/spec/spec_helper.rb +0 -32
- data/vendor/api_ruby_client/spec/unit/to_xml_spec.rb +0 -56
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.5.
|
|
1
|
+
0.5.9
|
|
@@ -11,8 +11,6 @@ if ARGV[0] == 'remote-services-settings'
|
|
|
11
11
|
load File.dirname(__FILE__) + "/remote-services-settings16.ext"
|
|
12
12
|
elsif rel_info =~ /Version: 1\.8/
|
|
13
13
|
load File.dirname(__FILE__) + "/remote-services-settings18.ext"
|
|
14
|
-
elsif rel_info =~ /Version: 2\.0/
|
|
15
|
-
load File.dirname(__FILE__) + "/remote-services-settings18.ext"
|
|
16
14
|
else
|
|
17
15
|
$stderr.puts "Abiquo release version not found. Unsupported installation."
|
|
18
16
|
exit
|
|
@@ -11,8 +11,6 @@ if ARGV[0] == 'server-settings'
|
|
|
11
11
|
load File.dirname(__FILE__) + "/server-settings168.ext"
|
|
12
12
|
elsif rel_info =~ /Version: 1\.8/
|
|
13
13
|
load File.dirname(__FILE__) + "/server-settings18.ext"
|
|
14
|
-
elsif rel_info =~ /Version: 2\.0/
|
|
15
|
-
load File.dirname(__FILE__) + "/server-settings18.ext"
|
|
16
14
|
else
|
|
17
15
|
$stderr.puts "Abiquo release version not found. Unsupported installation."
|
|
18
16
|
exit
|
data/lib/abicli/commands/set.rb
CHANGED
|
@@ -12,8 +12,6 @@ if ARGV[0] == 'set'
|
|
|
12
12
|
load File.dirname(__FILE__) + "/set168.ext"
|
|
13
13
|
elsif rel_info =~ /Version: 1\.8/
|
|
14
14
|
load File.dirname(__FILE__) + "/set18.ext"
|
|
15
|
-
elsif rel_info =~ /Version: 2\.0/
|
|
16
|
-
load File.dirname(__FILE__) + "/set18.ext"
|
|
17
15
|
else
|
|
18
16
|
$stderr.puts "Abiquo release version not found. Unsupported installation."
|
|
19
17
|
exit
|
|
@@ -73,7 +73,6 @@ def set_nfs_repository(val)
|
|
|
73
73
|
config.save('/opt/abiquo/config/abiquo.properties.bak')
|
|
74
74
|
config['remote-services']['abiquo.appliancemanager.repositoryLocation'] = val
|
|
75
75
|
config['remote-services']['abiquo.virtualfactory.xenserver.repositoryLocation'] = val
|
|
76
|
-
config['remote-services']['abiquo.virtualfactory.vmware.repositoryLocation'] = val
|
|
77
76
|
config.save('/opt/abiquo/config/abiquo.properties')
|
|
78
77
|
end
|
|
79
78
|
|
|
@@ -281,14 +281,14 @@ json = """{'ovfPackageInstanceDto':{
|
|
|
281
281
|
json.gsub!("'",'"')
|
|
282
282
|
$stdout.sync = true
|
|
283
283
|
line_reset = "\r\e[0K"
|
|
284
|
-
rsurl = "#{cli.config[:rs_url]}/am/erepos/#{cli.config[:enterprise_id]}/
|
|
284
|
+
rsurl = "#{cli.config[:rs_url]}/am/erepos/#{cli.config[:enterprise_id]}/templates"
|
|
285
285
|
if cli.config[:debug]
|
|
286
286
|
puts "Upload URL: #{rsurl}"
|
|
287
287
|
puts "JSON sent:\n#{json}"
|
|
288
288
|
end
|
|
289
289
|
StreamingUploader.post(
|
|
290
290
|
rsurl,
|
|
291
|
-
{ :
|
|
291
|
+
{ :aovfpackageinstance => json, :diskFile => fo }
|
|
292
292
|
) do |size|
|
|
293
293
|
count += size
|
|
294
294
|
per = (100*count)/fsize
|
metadata
CHANGED
|
@@ -1,84 +1,112 @@
|
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: abiquo-etk
|
|
3
|
-
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
hash: 25
|
|
5
5
|
prerelease:
|
|
6
|
+
segments:
|
|
7
|
+
- 0
|
|
8
|
+
- 5
|
|
9
|
+
- 9
|
|
10
|
+
version: 0.5.9
|
|
6
11
|
platform: ruby
|
|
7
|
-
authors:
|
|
12
|
+
authors:
|
|
8
13
|
- Sergio Rubio
|
|
9
14
|
autorequire:
|
|
10
15
|
bindir: bin
|
|
11
16
|
cert_chain: []
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
|
|
18
|
+
date: 2012-04-10 00:00:00 Z
|
|
19
|
+
dependencies:
|
|
20
|
+
- !ruby/object:Gem::Dependency
|
|
15
21
|
name: nokogiri
|
|
16
|
-
|
|
22
|
+
prerelease: false
|
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
17
24
|
none: false
|
|
18
|
-
requirements:
|
|
19
|
-
- -
|
|
20
|
-
- !ruby/object:Gem::Version
|
|
21
|
-
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
hash: 9
|
|
29
|
+
segments:
|
|
30
|
+
- 1
|
|
31
|
+
- 3
|
|
32
|
+
version: "1.3"
|
|
22
33
|
type: :runtime
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
- !ruby/object:Gem::Dependency
|
|
34
|
+
version_requirements: *id001
|
|
35
|
+
- !ruby/object:Gem::Dependency
|
|
26
36
|
name: rpm-utils
|
|
27
|
-
|
|
37
|
+
prerelease: false
|
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
|
28
39
|
none: false
|
|
29
|
-
requirements:
|
|
30
|
-
- -
|
|
31
|
-
- !ruby/object:Gem::Version
|
|
32
|
-
|
|
40
|
+
requirements:
|
|
41
|
+
- - ">="
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
hash: 9
|
|
44
|
+
segments:
|
|
45
|
+
- 0
|
|
46
|
+
- 1
|
|
47
|
+
version: "0.1"
|
|
33
48
|
type: :runtime
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
- !ruby/object:Gem::Dependency
|
|
49
|
+
version_requirements: *id002
|
|
50
|
+
- !ruby/object:Gem::Dependency
|
|
37
51
|
name: term-ansicolor
|
|
38
|
-
|
|
52
|
+
prerelease: false
|
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
|
39
54
|
none: false
|
|
40
|
-
requirements:
|
|
41
|
-
- -
|
|
42
|
-
- !ruby/object:Gem::Version
|
|
43
|
-
|
|
55
|
+
requirements:
|
|
56
|
+
- - ">="
|
|
57
|
+
- !ruby/object:Gem::Version
|
|
58
|
+
hash: 15
|
|
59
|
+
segments:
|
|
60
|
+
- 1
|
|
61
|
+
- 0
|
|
62
|
+
version: "1.0"
|
|
44
63
|
type: :runtime
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- !ruby/object:Gem::Dependency
|
|
64
|
+
version_requirements: *id003
|
|
65
|
+
- !ruby/object:Gem::Dependency
|
|
48
66
|
name: mixlib-cli
|
|
49
|
-
|
|
67
|
+
prerelease: false
|
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
|
50
69
|
none: false
|
|
51
|
-
requirements:
|
|
52
|
-
- -
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
|
|
70
|
+
requirements:
|
|
71
|
+
- - ">="
|
|
72
|
+
- !ruby/object:Gem::Version
|
|
73
|
+
hash: 11
|
|
74
|
+
segments:
|
|
75
|
+
- 1
|
|
76
|
+
- 2
|
|
77
|
+
version: "1.2"
|
|
55
78
|
type: :runtime
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
- !ruby/object:Gem::Dependency
|
|
79
|
+
version_requirements: *id004
|
|
80
|
+
- !ruby/object:Gem::Dependency
|
|
59
81
|
name: iniparse
|
|
60
|
-
|
|
82
|
+
prerelease: false
|
|
83
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
|
61
84
|
none: false
|
|
62
|
-
requirements:
|
|
63
|
-
- -
|
|
64
|
-
- !ruby/object:Gem::Version
|
|
85
|
+
requirements:
|
|
86
|
+
- - ">="
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
hash: 27
|
|
89
|
+
segments:
|
|
90
|
+
- 1
|
|
91
|
+
- 1
|
|
92
|
+
- 4
|
|
65
93
|
version: 1.1.4
|
|
66
94
|
type: :runtime
|
|
67
|
-
|
|
68
|
-
version_requirements: *17247160
|
|
95
|
+
version_requirements: *id005
|
|
69
96
|
description: Tools to troubleshoot and manage your Abiquo installation
|
|
70
97
|
email: srubio@abiquo.com
|
|
71
|
-
executables:
|
|
72
|
-
- abicli
|
|
73
|
-
- abiquo-check-16-install
|
|
98
|
+
executables:
|
|
74
99
|
- abiquo-check-install
|
|
100
|
+
- abicli
|
|
75
101
|
- ciab-setup
|
|
102
|
+
- abiquo-check-16-install
|
|
76
103
|
extensions: []
|
|
77
|
-
|
|
104
|
+
|
|
105
|
+
extra_rdoc_files:
|
|
78
106
|
- LICENSE
|
|
79
107
|
- README.rdoc
|
|
80
108
|
- TODO
|
|
81
|
-
files:
|
|
109
|
+
files:
|
|
82
110
|
- .document
|
|
83
111
|
- LICENSE
|
|
84
112
|
- README.rdoc
|
|
@@ -538,26 +566,6 @@ files:
|
|
|
538
566
|
- vendor/addressable-2.2.1/tasks/spec.rake
|
|
539
567
|
- vendor/addressable-2.2.1/tasks/yard.rake
|
|
540
568
|
- vendor/addressable-2.2.1/website/index.html
|
|
541
|
-
- vendor/api_ruby_client/Gemfile
|
|
542
|
-
- vendor/api_ruby_client/LICENSE
|
|
543
|
-
- vendor/api_ruby_client/README
|
|
544
|
-
- vendor/api_ruby_client/Rakefile
|
|
545
|
-
- vendor/api_ruby_client/abiquo.gemspec
|
|
546
|
-
- vendor/api_ruby_client/examples/create_dc_and_hv.rb
|
|
547
|
-
- vendor/api_ruby_client/examples/hypervisor_resource.rb
|
|
548
|
-
- vendor/api_ruby_client/examples/rack_resource.rb
|
|
549
|
-
- vendor/api_ruby_client/lib/abiquo.rb
|
|
550
|
-
- vendor/api_ruby_client/lib/core_ext.rb
|
|
551
|
-
- vendor/api_ruby_client/lib/to_xml.rb
|
|
552
|
-
- vendor/api_ruby_client/spec/acceptance/create_resource_spec.rb
|
|
553
|
-
- vendor/api_ruby_client/spec/acceptance/delete_resource_spec.rb
|
|
554
|
-
- vendor/api_ruby_client/spec/acceptance/fetch_resource_collections_spec.rb
|
|
555
|
-
- vendor/api_ruby_client/spec/acceptance/fetch_single_resources_spec.rb
|
|
556
|
-
- vendor/api_ruby_client/spec/acceptance/from_xml_spec.rb
|
|
557
|
-
- vendor/api_ruby_client/spec/acceptance/navigate_linked_resources_spec.rb
|
|
558
|
-
- vendor/api_ruby_client/spec/acceptance/update_resource_spec.rb
|
|
559
|
-
- vendor/api_ruby_client/spec/spec_helper.rb
|
|
560
|
-
- vendor/api_ruby_client/spec/unit/to_xml_spec.rb
|
|
561
569
|
- vendor/fattr-2.1.0/README
|
|
562
570
|
- vendor/fattr-2.1.0/README.erb
|
|
563
571
|
- vendor/fattr-2.1.0/Rakefile
|
|
@@ -639,26 +647,36 @@ files:
|
|
|
639
647
|
- vendor/resourceful-1.0.1/spec/spec_helper.rb
|
|
640
648
|
homepage: http://github.com/abiquo/abiquo-etk
|
|
641
649
|
licenses: []
|
|
650
|
+
|
|
642
651
|
post_install_message:
|
|
643
652
|
rdoc_options: []
|
|
644
|
-
|
|
653
|
+
|
|
654
|
+
require_paths:
|
|
645
655
|
- lib
|
|
646
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
|
656
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
647
657
|
none: false
|
|
648
|
-
requirements:
|
|
649
|
-
- -
|
|
650
|
-
- !ruby/object:Gem::Version
|
|
651
|
-
|
|
652
|
-
|
|
658
|
+
requirements:
|
|
659
|
+
- - ">="
|
|
660
|
+
- !ruby/object:Gem::Version
|
|
661
|
+
hash: 3
|
|
662
|
+
segments:
|
|
663
|
+
- 0
|
|
664
|
+
version: "0"
|
|
665
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
653
666
|
none: false
|
|
654
|
-
requirements:
|
|
655
|
-
- -
|
|
656
|
-
- !ruby/object:Gem::Version
|
|
657
|
-
|
|
667
|
+
requirements:
|
|
668
|
+
- - ">="
|
|
669
|
+
- !ruby/object:Gem::Version
|
|
670
|
+
hash: 3
|
|
671
|
+
segments:
|
|
672
|
+
- 0
|
|
673
|
+
version: "0"
|
|
658
674
|
requirements: []
|
|
675
|
+
|
|
659
676
|
rubyforge_project:
|
|
660
|
-
rubygems_version: 1.8.
|
|
677
|
+
rubygems_version: 1.8.17
|
|
661
678
|
signing_key:
|
|
662
679
|
specification_version: 3
|
|
663
680
|
summary: Abiquo Elite Toolkit
|
|
664
681
|
test_files: []
|
|
682
|
+
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
Copyright (c) 2010 Abiquo Holdings
|
|
2
|
-
|
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
-
a copy of this software and associated documentation files (the
|
|
5
|
-
"Software"), to deal in the Software without restriction, including
|
|
6
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
-
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
-
the following conditions:
|
|
10
|
-
|
|
11
|
-
The above copyright notice and this permission notice shall be
|
|
12
|
-
included in all copies or substantial portions of the Software.
|
|
13
|
-
|
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
=Abiquo API Ruby client
|
|
2
|
-
|
|
3
|
-
Rest client to work with the Abiquo's API.
|
|
4
|
-
|
|
5
|
-
==Installation
|
|
6
|
-
|
|
7
|
-
gem install abiquo
|
|
8
|
-
|
|
9
|
-
==Usage
|
|
10
|
-
|
|
11
|
-
The first version of the api just uses basic authentication, so we need to create an instance with our credentials:
|
|
12
|
-
|
|
13
|
-
auth = Abiquo::BasicAuth.new('Abiquo', 'username', 'password')
|
|
14
|
-
|
|
15
|
-
The entry point for the Abiquo's API is an atom document service:
|
|
16
|
-
|
|
17
|
-
api = Abiquo::Resource('http://abiquo.example.com/api', auth)
|
|
18
|
-
|
|
19
|
-
from this point we can access to every resource exposed by the api calling nested methods:
|
|
20
|
-
|
|
21
|
-
datacenters = api.datacenters
|
|
22
|
-
racks = api.datacenters.first.racks
|
|
23
|
-
|
|
24
|
-
or get the values of their elements:
|
|
25
|
-
|
|
26
|
-
datacenter = api.datacenters.first
|
|
27
|
-
datacenter.name # => The name of the datacenter
|
|
28
|
-
|
|
29
|
-
You can find further example into the specs:
|
|
30
|
-
|
|
31
|
-
http://github.com/abiquo/api_ruby_client/tree/master/spec/acceptance
|
|
32
|
-
|
|
33
|
-
Further documentation of the API can be found in our wiki:
|
|
34
|
-
|
|
35
|
-
http://abicloud.org/display/ABI16/Abiquo's+API
|
|
36
|
-
|
|
37
|
-
==Copyright
|
|
38
|
-
|
|
39
|
-
Copyright (c) 2010 Abiquo Holdings. See LICENSE for details.
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
require "rubygems"
|
|
2
|
-
require "rake/gempackagetask"
|
|
3
|
-
require "rake/rdoctask"
|
|
4
|
-
|
|
5
|
-
require "spec"
|
|
6
|
-
require "spec/rake/spectask"
|
|
7
|
-
|
|
8
|
-
desc "Run acceptance specs"
|
|
9
|
-
Spec::Rake::SpecTask.new("spec:acceptance") do |t|
|
|
10
|
-
t.spec_opts = "--format specdoc --colour".split
|
|
11
|
-
t.spec_files = ["spec/acceptance"]
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
desc "Run unit specs"
|
|
15
|
-
Spec::Rake::SpecTask.new("spec:unit") do |t|
|
|
16
|
-
t.spec_files = ["spec/unit"]
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
desc "Run all specs"
|
|
20
|
-
task :spec => ["spec:unit", "spec:acceptance"]
|
|
21
|
-
|
|
22
|
-
task :default => ["spec"]
|
|
23
|
-
|
|
24
|
-
# This builds the actual gem. For details of what all these options
|
|
25
|
-
# mean, and other ones you can add, check the documentation here:
|
|
26
|
-
#
|
|
27
|
-
# http://rubygems.org/read/chapter/20
|
|
28
|
-
#
|
|
29
|
-
spec = Gem::Specification.new do |s|
|
|
30
|
-
|
|
31
|
-
# Change these as appropriate
|
|
32
|
-
s.name = "abiquo"
|
|
33
|
-
s.version = "0.1.0"
|
|
34
|
-
s.summary = "Abiquo API client"
|
|
35
|
-
s.author = "Abiquo"
|
|
36
|
-
s.email = "support@abiquo.com"
|
|
37
|
-
s.homepage = "http://github.com/abiquo/api_ruby_client"
|
|
38
|
-
|
|
39
|
-
s.has_rdoc = true
|
|
40
|
-
# You should probably have a README of some kind. Change the filename
|
|
41
|
-
# as appropriate
|
|
42
|
-
s.extra_rdoc_files = %w(README)
|
|
43
|
-
s.rdoc_options = %w(--main README)
|
|
44
|
-
|
|
45
|
-
# Add any extra files to include in the gem (like your README)
|
|
46
|
-
s.files = %w() + Dir.glob("{lib/**/*}")
|
|
47
|
-
s.require_paths = ["lib"]
|
|
48
|
-
|
|
49
|
-
# If you want to depend on other gems, add them here, along with any
|
|
50
|
-
# relevant versions
|
|
51
|
-
s.add_dependency("resourceful")
|
|
52
|
-
s.add_dependency("nokogiri")
|
|
53
|
-
s.add_dependency("activesupport") # for to_xml, singularize, delegate, & try, should we implement them?
|
|
54
|
-
|
|
55
|
-
# If your tests use any gems, include them here
|
|
56
|
-
s.add_development_dependency("steak")
|
|
57
|
-
s.add_development_dependency("webmock")
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
# This task actually builds the gem. We also regenerate a static
|
|
61
|
-
# .gemspec file, which is useful if something (i.e. GitHub) will
|
|
62
|
-
# be automatically building a gem for this project. If you're not
|
|
63
|
-
# using GitHub, edit as appropriate.
|
|
64
|
-
#
|
|
65
|
-
# To publish your gem online, install the 'gemcutter' gem; Read more
|
|
66
|
-
# about that here: http://gemcutter.org/pages/gem_docs
|
|
67
|
-
Rake::GemPackageTask.new(spec) do |pkg|
|
|
68
|
-
pkg.gem_spec = spec
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
desc "Build the gemspec file #{spec.name}.gemspec"
|
|
72
|
-
task :gemspec do
|
|
73
|
-
file = File.dirname(__FILE__) + "/#{spec.name}.gemspec"
|
|
74
|
-
File.open(file, "w") {|f| f << spec.to_ruby }
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
task :package => :gemspec
|
|
78
|
-
|
|
79
|
-
# Generate documentation
|
|
80
|
-
Rake::RDocTask.new do |rd|
|
|
81
|
-
|
|
82
|
-
rd.rdoc_files.include("lib/**/*.rb", "README.rdoc")
|
|
83
|
-
rd.rdoc_dir = "rdoc"
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
desc 'Clear out RDoc and generated packages'
|
|
87
|
-
task :clean => [:clobber_rdoc, :clobber_package] do
|
|
88
|
-
rm "#{spec.name}.gemspec"
|
|
89
|
-
end
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
Gem::Specification.new do |s|
|
|
4
|
-
s.name = %q{abiquo}
|
|
5
|
-
s.version = "0.1.0"
|
|
6
|
-
|
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
8
|
-
s.authors = ["Abiquo"]
|
|
9
|
-
s.date = %q{2010-07-28}
|
|
10
|
-
s.email = %q{support@abiquo.com}
|
|
11
|
-
s.extra_rdoc_files = ["README.rdoc"]
|
|
12
|
-
s.files = ["lib/to_xml.rb", "lib/core_ext.rb", "lib/abiquo.rb", "README.rdoc"]
|
|
13
|
-
s.homepage = %q{http://wiki.github.com/abiquo/abiquo/}
|
|
14
|
-
s.rdoc_options = ["--main", "README.rdoc"]
|
|
15
|
-
s.require_paths = ["lib"]
|
|
16
|
-
s.rubygems_version = %q{1.3.6}
|
|
17
|
-
s.summary = %q{Abiquo API client}
|
|
18
|
-
|
|
19
|
-
if s.respond_to? :specification_version then
|
|
20
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
|
21
|
-
s.specification_version = 3
|
|
22
|
-
|
|
23
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
|
24
|
-
s.add_runtime_dependency(%q<resourceful>, [">= 0"])
|
|
25
|
-
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
|
26
|
-
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
|
27
|
-
s.add_development_dependency(%q<steak>, [">= 0"])
|
|
28
|
-
s.add_development_dependency(%q<webmock>, [">= 0"])
|
|
29
|
-
else
|
|
30
|
-
s.add_dependency(%q<resourceful>, [">= 0"])
|
|
31
|
-
s.add_dependency(%q<nokogiri>, [">= 0"])
|
|
32
|
-
s.add_dependency(%q<activesupport>, [">= 0"])
|
|
33
|
-
s.add_dependency(%q<steak>, [">= 0"])
|
|
34
|
-
s.add_dependency(%q<webmock>, [">= 0"])
|
|
35
|
-
end
|
|
36
|
-
else
|
|
37
|
-
s.add_dependency(%q<resourceful>, [">= 0"])
|
|
38
|
-
s.add_dependency(%q<nokogiri>, [">= 0"])
|
|
39
|
-
s.add_dependency(%q<activesupport>, [">= 0"])
|
|
40
|
-
s.add_dependency(%q<steak>, [">= 0"])
|
|
41
|
-
s.add_dependency(%q<webmock>, [">= 0"])
|
|
42
|
-
end
|
|
43
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
require 'rubygems'
|
|
2
|
-
require 'abiquo'
|
|
3
|
-
require 'pp'
|
|
4
|
-
|
|
5
|
-
auth = Abiquo::BasicAuth.new('Abiquo', 'admin', 'xabiquo')
|
|
6
|
-
api = Abiquo::Resource('http://abiquo-server-ip:8080/api', auth)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
#
|
|
10
|
-
# Create a DataCenter
|
|
11
|
-
#
|
|
12
|
-
#puts "Creating DC1 in BCN..."
|
|
13
|
-
api.datacenters.create :name => 'DC1', :location => 'BCN'
|
|
14
|
-
|
|
15
|
-
#
|
|
16
|
-
# Create Remote Services
|
|
17
|
-
#
|
|
18
|
-
api.datacenters.first.remoteServices.create :type => 'VIRTUAL_FACTORY', :uri => 'http://localhost:8080/virtualfactory'
|
|
19
|
-
api.datacenters.first.remoteServices.create :type => 'STORAGE_SYSTEM_MONITOR', :uri => 'http://localhost:8080/ssm'
|
|
20
|
-
api.datacenters.first.remoteServices.create :type => 'VIRTUAL_SYSTEM_MONITOR', :uri => 'http://localhost:8080/vsm'
|
|
21
|
-
api.datacenters.first.remoteServices.create :type => 'NODE_COLLECTOR', :uri => 'http://localhost:8080/nodecollector'
|
|
22
|
-
api.datacenters.first.remoteServices.create :type => 'APPLIANCE_MANAGER', :uri => 'http://localhost:8080/am'
|
|
23
|
-
api.datacenters.first.remoteServices.create :type => 'DHCP_SERVICE', :uri => 'http://localhost:7911'
|
|
24
|
-
api.datacenters.first.remoteServices.create :type => 'BPM_SERVICE', :uri => 'http://localhost:7911'
|
|
25
|
-
|
|
26
|
-
#
|
|
27
|
-
# Create a new Rack
|
|
28
|
-
#
|
|
29
|
-
puts "Creating rack 'myrack01'..."
|
|
30
|
-
api.datacenters.first.racks.create :name => 'myrack01'
|
|
31
|
-
|
|
32
|
-
#
|
|
33
|
-
# Iterate over all the racks and print the rack name
|
|
34
|
-
#
|
|
35
|
-
puts "Listing racks.."
|
|
36
|
-
api.datacenters.first.racks.each do |rack|
|
|
37
|
-
pp rack.name
|
|
38
|
-
end
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
require 'rubygems'
|
|
2
|
-
require 'abiquo'
|
|
3
|
-
require 'pp'
|
|
4
|
-
|
|
5
|
-
auth = Abiquo::BasicAuth.new('Abiquo', 'admin', 'admin')
|
|
6
|
-
api = Abiquo::Resource('http://as-testing.bcn.abiquo.com:8080/api', auth)
|
|
7
|
-
|
|
8
|
-
#
|
|
9
|
-
# Iterate over all the racks and print the rack name and the hypervisors underneath
|
|
10
|
-
#
|
|
11
|
-
api.datacenters.first.racks.each do |rack|
|
|
12
|
-
puts "- RACK [#{rack.name}]"
|
|
13
|
-
rack.machines.each do |m|
|
|
14
|
-
puts "---" + m.name
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
require 'rubygems'
|
|
2
|
-
require 'abiquo'
|
|
3
|
-
require 'pp'
|
|
4
|
-
|
|
5
|
-
auth = Abiquo::BasicAuth.new('Abiquo', 'admin', 'admin')
|
|
6
|
-
api = Abiquo::Resource('http://as-testing.bcn.abiquo.com:8080/api', auth)
|
|
7
|
-
|
|
8
|
-
#
|
|
9
|
-
# Create a new Rack
|
|
10
|
-
#
|
|
11
|
-
puts "Creating rack 'myrack01'..."
|
|
12
|
-
api.datacenters.first.racks.create :name => 'myrack01'
|
|
13
|
-
|
|
14
|
-
#
|
|
15
|
-
# Iterate over all the racks and print the rack name
|
|
16
|
-
#
|
|
17
|
-
puts "Listing racks.."
|
|
18
|
-
api.datacenters.first.racks.each do |rack|
|
|
19
|
-
pp rack.name
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
#
|
|
23
|
-
# Iterate over all the racks and print the rack name
|
|
24
|
-
#
|
|
25
|
-
puts "Listing racks..."
|
|
26
|
-
api.datacenters.first.racks.each do |rack|
|
|
27
|
-
pp rack.name
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
#
|
|
31
|
-
# Delete the rack myrack01
|
|
32
|
-
#
|
|
33
|
-
# NOT SUPPORTED IN ABIQUO1.6
|
|
34
|
-
#
|
|
35
|
-
#puts "Deleting rack 'myrack01'..."
|
|
36
|
-
#api.datacenters.first.racks.each do |r|
|
|
37
|
-
# r.delete if r.name == 'myrack01'
|
|
38
|
-
#end
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
require 'resourceful'
|
|
2
|
-
require 'nokogiri'
|
|
3
|
-
#gem 'activesupport', '2.3.8'
|
|
4
|
-
require 'active_support'
|
|
5
|
-
require File.expand_path('../core_ext', __FILE__)
|
|
6
|
-
require File.expand_path('../to_xml', __FILE__)
|
|
7
|
-
require 'uri'
|
|
8
|
-
|
|
9
|
-
module Abiquo
|
|
10
|
-
|
|
11
|
-
class NotAllowed < RuntimeError
|
|
12
|
-
def initialize(method, url)
|
|
13
|
-
@method = method
|
|
14
|
-
@url = url
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def message
|
|
18
|
-
"Method #{@method} not allowed for #{@url}"
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
class BasicAuth < Resourceful::BasicAuthenticator
|
|
23
|
-
def can_handle?(request); true; end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
module HttpAccessor
|
|
27
|
-
|
|
28
|
-
def xml
|
|
29
|
-
@xml ||= begin
|
|
30
|
-
response = http.resource(url_with_params).get
|
|
31
|
-
Nokogiri.parse(response.body).root
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
private
|
|
36
|
-
|
|
37
|
-
def url_with_params
|
|
38
|
-
@options[:expand] = @options[:expand].join(",") if @options[:expand].is_a?(Array)
|
|
39
|
-
params = @options.map { |k, v| "#{k}=#{v}" }.join("&")
|
|
40
|
-
params = "?#{params}" unless params.empty?
|
|
41
|
-
@url + params
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def http
|
|
45
|
-
Resourceful::HttpAccessor.new(:authenticator => @auth)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def rest_options
|
|
49
|
-
@rest_options ||= begin
|
|
50
|
-
response = http.resource(@url).options
|
|
51
|
-
response.header['Allow'].map {|m| m.to_sym }
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
class SingleResource
|
|
58
|
-
|
|
59
|
-
include HttpAccessor
|
|
60
|
-
|
|
61
|
-
undef id
|
|
62
|
-
|
|
63
|
-
def initialize(url, auth, xml = nil, options = {})
|
|
64
|
-
@url = url
|
|
65
|
-
@auth = auth
|
|
66
|
-
@xml = xml
|
|
67
|
-
@options = options
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def update(attrs = {})
|
|
71
|
-
raise Abiquo::NotAllowed.new(:PUT, url) unless rest_options.include?(:PUT)
|
|
72
|
-
response = http.resource(url).put(attrs.to_xml(:root => object_type), :content_type => "application/xml")
|
|
73
|
-
@xml = Nokogiri.parse(response.body).root
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def delete
|
|
77
|
-
raise Abiquo::NotAllowed.new(:DELETE, url) unless rest_options.include?(:DELETE)
|
|
78
|
-
http.resource(url).delete
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def url
|
|
82
|
-
@url ||= xml.at_xpath("./link[@rel='edit']").try(:[], "href")
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
delegate :to_xml, :to => :xml
|
|
86
|
-
alias_method :inspect, :to_xml
|
|
87
|
-
|
|
88
|
-
private
|
|
89
|
-
|
|
90
|
-
def object_type
|
|
91
|
-
@object_type ||= URI.parse(url).path.split("/")[-2].singularize
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def method_missing(meth, *args, &blk)
|
|
95
|
-
attribute = xml.at_xpath("./*[name()='#{meth}' or name()='#{attribute_name(meth)}']")
|
|
96
|
-
return node_text(attribute) if attribute
|
|
97
|
-
|
|
98
|
-
link = xml.at_xpath("./link[@rel='#{meth}' or @rel='#{attribute_name(meth)}']")
|
|
99
|
-
return Resource.new(link["href"], @auth, link.at_xpath("./*"), *args) if link
|
|
100
|
-
|
|
101
|
-
if xml.namespaces.has_key?('xmlns:ns2')
|
|
102
|
-
@xml = Nokogiri.parse(xml.to_s.downcase).root
|
|
103
|
-
link = xml.at_xpath("//ns2:collection/xmlns:title[. = '#{meth}']").try(:parent)
|
|
104
|
-
return Resource.new(link['href'], @auth, nil, *args) if link
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
super
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def node_text(node)
|
|
111
|
-
node.text
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
def attribute_name(attribute)
|
|
115
|
-
attribute.to_s.gsub('_', '-')
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
class ResourceCollection
|
|
121
|
-
|
|
122
|
-
include HttpAccessor
|
|
123
|
-
|
|
124
|
-
delegate :inspect, :to => :resources
|
|
125
|
-
|
|
126
|
-
def initialize(url, auth, xml = nil, options = {})
|
|
127
|
-
@url = url
|
|
128
|
-
@auth = auth
|
|
129
|
-
@xml = xml if options.empty?
|
|
130
|
-
@options = options
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
def create(attrs = {})
|
|
134
|
-
raise Abiquo::NotAllowed.new(:POST, url) unless rest_options.include?(:POST)
|
|
135
|
-
response = http.resource(url_with_params).post(attrs.to_xml(:root => object_type, :convert_links => true), :content_type => "application/xml")
|
|
136
|
-
Resource.new(nil, @auth, Nokogiri.parse(response.body).root)
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
private
|
|
140
|
-
|
|
141
|
-
def object_type
|
|
142
|
-
@object_type ||= URI.parse(@url).path.split("/").last.singularize
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
def resources
|
|
146
|
-
@resources ||= xml.xpath("./*").map { |subnode| Resource.new(subnode.at_xpath("./link[@rel='edit']").try(:[], "href"), @auth, subnode, @options) }
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
def method_missing(meth, *args, &blk)
|
|
150
|
-
resources.send(meth, *args, &blk)
|
|
151
|
-
end
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
class Resource
|
|
155
|
-
|
|
156
|
-
include HttpAccessor
|
|
157
|
-
|
|
158
|
-
undef id
|
|
159
|
-
undef type
|
|
160
|
-
|
|
161
|
-
delegate :inspect, :to => :get!
|
|
162
|
-
|
|
163
|
-
def self.from_xml(xml, auth = nil)
|
|
164
|
-
new(nil, auth, Nokogiri.parse(xml).root)
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
def initialize(url, auth, xml = nil, options = {})
|
|
168
|
-
@url = url
|
|
169
|
-
@auth = auth
|
|
170
|
-
@xml = xml
|
|
171
|
-
@options = options
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
def method_missing(meth, *args, &blk)
|
|
175
|
-
@resource_object ||= resource_class(meth).new(@url, @auth, @xml, @options)
|
|
176
|
-
@resource_object.send(meth, *args, &blk)
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
def resource_class(meth)
|
|
180
|
-
@resource_class ||= if (Array.instance_methods + ["create"] - ["delete", "id"]).include?(meth.to_s)
|
|
181
|
-
ResourceCollection
|
|
182
|
-
else
|
|
183
|
-
SingleResource
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
def get!
|
|
188
|
-
klass = SingleResource
|
|
189
|
-
if (!xml.children.empty? && xml.name.singularize == xml.children.first.name)
|
|
190
|
-
klass = ResourceCollection
|
|
191
|
-
end
|
|
192
|
-
@resource_object = klass.new(@url, @auth, @xml, @options)
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
def self.Resource(url, auth, params = {})
|
|
198
|
-
Resource.new(url, auth, nil, params)
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
end
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
require 'net/http'
|
|
2
|
-
|
|
3
|
-
module Resourceful
|
|
4
|
-
class Resource
|
|
5
|
-
def options(header = {})
|
|
6
|
-
request(:options, nil, header)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def host_with_port
|
|
10
|
-
add = Addressable::URI.parse(uri)
|
|
11
|
-
!add.port.blank? && add.port != 80 ? [add.host, add.port].join(':') : add.host
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
alias_method_chain :host, :port
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
class NetHttpAdapter
|
|
18
|
-
def net_http_request_class_with_options(method)
|
|
19
|
-
if method == :options
|
|
20
|
-
Net::HTTP::Options
|
|
21
|
-
else
|
|
22
|
-
net_http_request_class_without_options(method)
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
alias_method_chain :net_http_request_class, :options
|
|
27
|
-
end
|
|
28
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
module Abiquo
|
|
2
|
-
|
|
3
|
-
module ToXml
|
|
4
|
-
|
|
5
|
-
def to_xml_with_links(options = {})
|
|
6
|
-
if options[:convert_links] && options[:builder]
|
|
7
|
-
options[:builder].tag!(:link, :rel => options[:root]) do
|
|
8
|
-
to_xml_without_links(options)
|
|
9
|
-
end
|
|
10
|
-
else
|
|
11
|
-
to_xml_without_links(options)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
class Array
|
|
20
|
-
include Abiquo::ToXml
|
|
21
|
-
alias_method_chain :to_xml, :links
|
|
22
|
-
end
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
feature "Creating new resources" do
|
|
4
|
-
|
|
5
|
-
scenario "Creating a resource in a collection" do
|
|
6
|
-
|
|
7
|
-
datacenters = Abiquo::Resource("http://abiquo.example.com/api/admin/datacenters", auth)
|
|
8
|
-
|
|
9
|
-
stub_auth_request(:options, "http://admin:admin@abiquo.example.com/api/admin/datacenters").
|
|
10
|
-
to_return(:headers => {'Allow' => 'GET, POST, OPTIONS'})
|
|
11
|
-
|
|
12
|
-
stub_auth_request(:post, "http://admin:admin@abiquo.example.com/api/admin/datacenters").with do |req|
|
|
13
|
-
# we parse because comparing strings is too fragile because of order changing, different indentations, etc.
|
|
14
|
-
# we're expecting something very close to this:
|
|
15
|
-
# <datacenter>
|
|
16
|
-
# <name>Wadus</name>
|
|
17
|
-
# </datacenter>
|
|
18
|
-
Nokogiri.parse(req.body).at_xpath("/datacenter/name").text == "Wadus"
|
|
19
|
-
end.to_return(:body => %q{
|
|
20
|
-
<datacenter>
|
|
21
|
-
<name>Wadus</name>
|
|
22
|
-
<link rel="edit" href="http://abiquo.example.com/api/admin/datacenters/1"/>
|
|
23
|
-
</datacenter>
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
datacenter = datacenters.create(:name => "Wadus")
|
|
27
|
-
|
|
28
|
-
datacenter.should be_a(Abiquo::Resource)
|
|
29
|
-
datacenter.name.should == "Wadus"
|
|
30
|
-
|
|
31
|
-
stub_auth_request(:options, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1").
|
|
32
|
-
to_return(:headers => {'Allow' => 'GET, PUT, OPTIONS'})
|
|
33
|
-
|
|
34
|
-
stub_auth_request(:get, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1").to_return(:body => %q{
|
|
35
|
-
<datacenter>
|
|
36
|
-
<name>Wadus</name>
|
|
37
|
-
<link rel="edit" href="http://abiquo.example.com/api/admin/datacenters/1"/>
|
|
38
|
-
</datacenter>
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
datacenter.name == Abiquo::Resource(datacenter.url, auth).name
|
|
42
|
-
end
|
|
43
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
feature "Deleting resources" do
|
|
4
|
-
|
|
5
|
-
scenario "return status 200 when delete is allowed" do
|
|
6
|
-
datacenter = Abiquo::Resource("http://abiquo.example.com/api/admin/datacenters/1", auth)
|
|
7
|
-
|
|
8
|
-
stub_auth_request(:options, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1").
|
|
9
|
-
to_return(:status => 200, :headers => {'Allow' => 'GET, PUT, OPTIONS, HEAD, DELETE'})
|
|
10
|
-
|
|
11
|
-
stub_auth_request(:delete, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1").to_return(:status => 200)
|
|
12
|
-
|
|
13
|
-
datacenter.delete
|
|
14
|
-
|
|
15
|
-
auth_request(:delete, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1").should have_been_made.once
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
scenario "raise Abiquo::NotAllowed when delete is not allowed" do
|
|
19
|
-
datacenter = Abiquo::Resource("http://abiquo.example.com/api/admin/datacenters/1", auth)
|
|
20
|
-
|
|
21
|
-
stub_auth_request(:options, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1").
|
|
22
|
-
to_return(:status => 200, :headers => {'Allow' => 'GET, PUT, OPTIONS, HEAD'})
|
|
23
|
-
|
|
24
|
-
lambda { datacenter.delete }.should raise_error(Abiquo::NotAllowed)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
end
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
feature "Fetching resource collections" do
|
|
4
|
-
|
|
5
|
-
scenario "Fetch collection" do
|
|
6
|
-
stub_auth_request(:get, "http://admin:admin@abiquo.example.com/api/admin/datacenters").to_return(:body => <<-XML)
|
|
7
|
-
<datacenters>
|
|
8
|
-
<datacenter>
|
|
9
|
-
<link rel='edit' href='http://abiquo.example.com/api/admin/datacenters/1'/>
|
|
10
|
-
<name>Resource 1</name>
|
|
11
|
-
</datacenter>
|
|
12
|
-
<datacenter>
|
|
13
|
-
<link rel='edit' href='http://abiquo.example.com/api/admin/datacenters/2'/>
|
|
14
|
-
<name>Resource 2</name>
|
|
15
|
-
</datacenter>
|
|
16
|
-
</datacenters>
|
|
17
|
-
XML
|
|
18
|
-
|
|
19
|
-
resources = Abiquo::Resource("http://abiquo.example.com/api/admin/datacenters", auth)
|
|
20
|
-
|
|
21
|
-
resources.map(&:name).should == ["Resource 1", "Resource 2"]
|
|
22
|
-
resources.size.should == 2
|
|
23
|
-
resources.first.name.should == "Resource 1"
|
|
24
|
-
resources.last.name.should == "Resource 2"
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
scenario "Inspecting a collection" do
|
|
28
|
-
stub_auth_request(:get, "http://admin:admin@abiquo.example.com/api/admin/datacenters").to_return(:body => %q{
|
|
29
|
-
<datacenters><datacenter><name>Resource 1</name></datacenter></datacenters>
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
resources = Abiquo::Resource("http://abiquo.example.com/api/admin/datacenters", auth)
|
|
33
|
-
|
|
34
|
-
resources.inspect.should == "[#{resources.first.inspect}]"
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
scenario 'Fetch service document' do
|
|
38
|
-
stub_auth_request(:get, 'http://admin:admin@abiquo.example.com/api').to_return(:body => <<-XML)
|
|
39
|
-
<ns2:service xmlns="http://www.w3.org/2005/Atom" xmlns:ns2="http://www.w3.org/2007/app" xmlns:ns3="http://a9.com/-/spec/opensearch/1.1/" xmlns:ns4="http://www.w3.org/1999/xhtml">
|
|
40
|
-
<ns2:workspace>
|
|
41
|
-
<title>Abiquo administration workspace</title>
|
|
42
|
-
<ns2:collection href="http://localhost:8080/api/admin/datacenters">
|
|
43
|
-
<title>Datacenters</title>
|
|
44
|
-
<ns2:accept/>
|
|
45
|
-
</ns2:collection>
|
|
46
|
-
</ns2:workspace>
|
|
47
|
-
</ns2:service>
|
|
48
|
-
XML
|
|
49
|
-
|
|
50
|
-
resources = Abiquo::Resource('http://abiquo.example.com/api', auth)
|
|
51
|
-
|
|
52
|
-
lambda { resources.datacenters }.should_not raise_error
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
end
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
require "spec_helper"
|
|
2
|
-
|
|
3
|
-
feature "Fetching individual resources" do
|
|
4
|
-
|
|
5
|
-
scenario "Fetching untyped attributes" do
|
|
6
|
-
stub_auth_request(:get, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1").to_return(:body => <<-XML)
|
|
7
|
-
<datacenter>
|
|
8
|
-
<name>Resource Name</name>
|
|
9
|
-
<id>12345</id>
|
|
10
|
-
</datacenter>
|
|
11
|
-
XML
|
|
12
|
-
|
|
13
|
-
datacenter = Abiquo::Resource("http://abiquo.example.com/api/admin/datacenters/1", auth)
|
|
14
|
-
datacenter.name.should == "Resource Name"
|
|
15
|
-
datacenter.id.should == "12345"
|
|
16
|
-
|
|
17
|
-
expect { datacenter.wadus }.to raise_error(NoMethodError)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
scenario "Fetching typed attributes" do
|
|
21
|
-
stub_auth_request(:get, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1").to_return(:body => <<-XML)
|
|
22
|
-
<datacenter>
|
|
23
|
-
<id>12345</id>
|
|
24
|
-
<name>Resource Name</name>
|
|
25
|
-
</datacenter>
|
|
26
|
-
XML
|
|
27
|
-
|
|
28
|
-
datacenter = Abiquo::Resource("http://abiquo.example.com/api/admin/datacenters/1", auth)
|
|
29
|
-
|
|
30
|
-
datacenter.id.should == "12345"
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
scenario "Inspecting a resource" do
|
|
34
|
-
xml = %q{
|
|
35
|
-
<datacenter>
|
|
36
|
-
<id>12345</id>
|
|
37
|
-
<name>Resource Name</name>
|
|
38
|
-
</datacenter>
|
|
39
|
-
}
|
|
40
|
-
stub_auth_request(:get, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1").to_return(:body => xml)
|
|
41
|
-
|
|
42
|
-
datacenter = Abiquo::Resource("http://abiquo.example.com/api/admin/datacenters/1", auth)
|
|
43
|
-
|
|
44
|
-
Nokogiri.parse(datacenter.inspect).to_xml.should == Nokogiri.parse(xml).to_xml
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
require "spec_helper"
|
|
2
|
-
|
|
3
|
-
feature "Instantiate resources from xml" do
|
|
4
|
-
|
|
5
|
-
it "should instantiate the resource without HTTP calls" do
|
|
6
|
-
xml = %q{
|
|
7
|
-
<datacenter>
|
|
8
|
-
<name>Resource 1</name>
|
|
9
|
-
</datacenter>
|
|
10
|
-
}
|
|
11
|
-
datacenter = Abiquo::Resource.from_xml(xml)
|
|
12
|
-
|
|
13
|
-
datacenter.name.should == "Resource 1"
|
|
14
|
-
end
|
|
15
|
-
end
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
feature "Navigating linked resources" do
|
|
4
|
-
scenario "Link to a collection of resources" do
|
|
5
|
-
stub_auth_request(:get, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1").to_return(:body => <<-XML)
|
|
6
|
-
<datacenter>
|
|
7
|
-
<link rel="racks" href="http://abiquo.example.com/api/admin/datacenters/1/racks"/>
|
|
8
|
-
</datacenter>
|
|
9
|
-
XML
|
|
10
|
-
|
|
11
|
-
datacenter = Abiquo::Resource("http://abiquo.example.com/api/admin/datacenters/1", auth)
|
|
12
|
-
|
|
13
|
-
stub_auth_request(:get, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1/racks").to_return(:body => <<-XML)
|
|
14
|
-
<racks>
|
|
15
|
-
<rack>
|
|
16
|
-
<name>Rack 1</name>
|
|
17
|
-
</rack>
|
|
18
|
-
<rack>
|
|
19
|
-
<name>Rack 2</name>
|
|
20
|
-
</rack>
|
|
21
|
-
</racks>
|
|
22
|
-
XML
|
|
23
|
-
|
|
24
|
-
datacenter.racks.size.should == 2
|
|
25
|
-
datacenter.racks.first.name.should == 'Rack 1'
|
|
26
|
-
datacenter.racks.last.name.should == 'Rack 2'
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
scenario "Link to a collection of resources with params" do
|
|
30
|
-
stub_auth_request(:get, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1").to_return(:body => <<-XML)
|
|
31
|
-
<datacenter>
|
|
32
|
-
<link rel="racks" href="http://abiquo.example.com/api/admin/datacenters/1/racks"/>
|
|
33
|
-
</datacenter>
|
|
34
|
-
XML
|
|
35
|
-
|
|
36
|
-
datacenter = Abiquo::Resource("http://abiquo.example.com/api/admin/datacenters/1", auth)
|
|
37
|
-
|
|
38
|
-
stub_auth_request(:get, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1/racks").to_return(:body => <<-XML)
|
|
39
|
-
<racks>
|
|
40
|
-
<rack>
|
|
41
|
-
<name>Rack 1</name>
|
|
42
|
-
</rack>
|
|
43
|
-
</racks>
|
|
44
|
-
XML
|
|
45
|
-
|
|
46
|
-
datacenter.racks.size.should == 1
|
|
47
|
-
datacenter.racks.first.name.should == 'Rack 1'
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
scenario "Link to self" do
|
|
51
|
-
stub_auth_request(:get, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1").to_return(:body => <<-XML)
|
|
52
|
-
<datacenter>
|
|
53
|
-
<link rel="edit" href="http://abiquo.example.com/datacenters/1"/>
|
|
54
|
-
</datacenter>
|
|
55
|
-
XML
|
|
56
|
-
|
|
57
|
-
datacenter = Abiquo::Resource("http://abiquo.example.com/api/admin/datacenters/1", auth)
|
|
58
|
-
|
|
59
|
-
datacenter.url.should == "http://abiquo.example.com/api/admin/datacenters/1"
|
|
60
|
-
end
|
|
61
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
feature "Updating resources" do
|
|
4
|
-
|
|
5
|
-
scenario "Updating a resource" do
|
|
6
|
-
datacenter = Abiquo::Resource("http://abiquo.example.com/api/admin/datacenters/1", auth)
|
|
7
|
-
|
|
8
|
-
stub_auth_request(:options, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1").
|
|
9
|
-
to_return(:headers => {'Allow' => 'GET, PUT, OPTIONS'})
|
|
10
|
-
|
|
11
|
-
stub_auth_request(:put, "http://admin:admin@abiquo.example.com/api/admin/datacenters/1").with do |req|
|
|
12
|
-
req.body == {:name => "Wadus Wadus"}.to_xml(:root => "datacenter")
|
|
13
|
-
end.to_return(:body => <<-XML)
|
|
14
|
-
<datacenter>
|
|
15
|
-
<name>Wadus Wadus</name>
|
|
16
|
-
<link rel="edit" href="http://abiquo.example.com/api/admin/datacenters/1"/>
|
|
17
|
-
</datacenter>
|
|
18
|
-
XML
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
datacenter.update(:name => "Wadus Wadus")
|
|
22
|
-
|
|
23
|
-
datacenter.name.should == "Wadus Wadus"
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
end
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
require 'rubygems'
|
|
2
|
-
require 'steak'
|
|
3
|
-
require 'webmock/rspec'
|
|
4
|
-
require "abiquo"
|
|
5
|
-
|
|
6
|
-
module Helpers
|
|
7
|
-
|
|
8
|
-
def stub_auth_request(*args)
|
|
9
|
-
stub_request(*args)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def auth_request(*args)
|
|
13
|
-
request(*args)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def auth
|
|
17
|
-
Abiquo::BasicAuth.new("Abiquo", "admin", "admin")
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
Spec::Runner.configure do |config|
|
|
22
|
-
config.include Helpers
|
|
23
|
-
config.include WebMock
|
|
24
|
-
config.before(:each) do
|
|
25
|
-
stub_request(:any, //).with { |request| !request.headers.has_key?("Authorization") }.
|
|
26
|
-
to_return(
|
|
27
|
-
:status => 401, :headers => {
|
|
28
|
-
"WWW-Authenticate" => 'Basic realm="Abiquo"'
|
|
29
|
-
})
|
|
30
|
-
end
|
|
31
|
-
config.after(:each) { reset_webmock }
|
|
32
|
-
end
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Hash do
|
|
4
|
-
|
|
5
|
-
describe "to_xml" do
|
|
6
|
-
|
|
7
|
-
it "should convert the nested resources into 'link' tags if the :convert_links option is present" do
|
|
8
|
-
xml = Nokogiri.parse({"name" => "Almodovar", "tasks" => [{"name" => "Wadus"}]}.to_xml(:root => "project", :convert_links => true))
|
|
9
|
-
|
|
10
|
-
# <project>
|
|
11
|
-
# <name>Almodovar</name>
|
|
12
|
-
# <link rel="tasks">
|
|
13
|
-
# <tasks type="array">
|
|
14
|
-
# <task>
|
|
15
|
-
# <name>Wadus</name>
|
|
16
|
-
# </task>
|
|
17
|
-
# </tasks>
|
|
18
|
-
# </link>
|
|
19
|
-
# </project>
|
|
20
|
-
xml.at_xpath("/project/name").text.should == "Almodovar"
|
|
21
|
-
xml.at_xpath("/project/tasks").should be_nil
|
|
22
|
-
xml.at_xpath("/project/link[@rel='tasks']/tasks[@type='array']/task/name").text.should == "Wadus"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should not convert the nested resources into 'link' tags if the :convert_links option is not present" do
|
|
26
|
-
xml = Nokogiri.parse({"name" => "Almodovar", "tasks" => [{"name" => "Wadus"}]}.to_xml(:root => "project", :convert_links => false))
|
|
27
|
-
|
|
28
|
-
# <project>
|
|
29
|
-
# <name>Almodovar</name>
|
|
30
|
-
# <tasks type="array">
|
|
31
|
-
# <task>
|
|
32
|
-
# <name>Wadus</name>
|
|
33
|
-
# </task>
|
|
34
|
-
# </tasks>
|
|
35
|
-
# </project>
|
|
36
|
-
xml.at_xpath("/project/name").text.should == "Almodovar"
|
|
37
|
-
xml.at_xpath("//link").should be_nil
|
|
38
|
-
xml.at_xpath("/project/tasks[@type='array']/task/name").text.should == "Wadus"
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
describe Array do
|
|
47
|
-
|
|
48
|
-
describe "to_xml" do
|
|
49
|
-
|
|
50
|
-
it "should convert an array into xml" do
|
|
51
|
-
[].to_xml.should == "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<nil-classes type=\"array\"/>\n"
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
end
|