squall 1.3.0 → 1.3.1
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 +7 -0
- data/LICENSE +1 -1
- data/README.md +64 -41
- data/Rakefile +3 -9
- data/lib/squall/data_store_zone.rb +20 -26
- data/lib/squall/disk.rb +174 -0
- data/lib/squall/firewall_rule.rb +34 -41
- data/lib/squall/hypervisor.rb +40 -38
- data/lib/squall/hypervisor_zone.rb +51 -63
- data/lib/squall/ip_address.rb +32 -37
- data/lib/squall/ip_address_join.rb +13 -22
- data/lib/squall/network.rb +36 -33
- data/lib/squall/network_zone.rb +27 -29
- data/lib/squall/payment.rb +22 -32
- data/lib/squall/role.rb +30 -37
- data/lib/squall/statistic.rb +3 -1
- data/lib/squall/support/base.rb +35 -31
- data/lib/squall/support/config.rb +25 -1
- data/lib/squall/support/version.rb +1 -1
- data/lib/squall/template.rb +7 -5
- data/lib/squall/transaction.rb +6 -4
- data/lib/squall/user.rb +84 -83
- data/lib/squall/user_group.rb +17 -30
- data/lib/squall/virtual_machine.rb +154 -178
- data/lib/squall/whitelist.rb +29 -40
- data/lib/squall.rb +27 -25
- data/spec/spec_helper.rb +6 -11
- data/spec/squall/data_store_zone_spec.rb +2 -20
- data/spec/squall/disk_spec.rb +189 -0
- data/spec/squall/firewall_rule_spec.rb +2 -32
- data/spec/squall/hypervisor_spec.rb +3 -47
- data/spec/squall/hypervisor_zone_spec.rb +3 -28
- data/spec/squall/ip_address_join_spec.rb +1 -15
- data/spec/squall/ip_address_spec.rb +10 -35
- data/spec/squall/network_spec.rb +20 -31
- data/spec/squall/network_zone_spec.rb +2 -36
- data/spec/squall/payment_spec.rb +2 -21
- data/spec/squall/role_spec.rb +4 -16
- data/spec/squall/support/base_spec.rb +10 -16
- data/spec/squall/template_spec.rb +0 -4
- data/spec/squall/transaction_spec.rb +1 -3
- data/spec/squall/user_group_spec.rb +1 -17
- data/spec/squall/user_spec.rb +4 -92
- data/spec/squall/virtual_machine_spec.rb +8 -242
- data/spec/squall/whitelist_spec.rb +2 -40
- data/spec/squall_spec.rb +2 -2
- data/spec/vcr_cassettes/disk/add_schedule.yml +40 -0
- data/spec/vcr_cassettes/disk/auto_backup_off.yml +40 -0
- data/spec/vcr_cassettes/disk/auto_backup_on.yml +40 -0
- data/spec/vcr_cassettes/disk/backups.yml +40 -0
- data/spec/vcr_cassettes/disk/build.yml +40 -0
- data/spec/vcr_cassettes/disk/create.yml +40 -0
- data/spec/vcr_cassettes/disk/delete.yml +38 -0
- data/spec/vcr_cassettes/disk/edit.yml +40 -0
- data/spec/vcr_cassettes/disk/iops_usage.yml +40 -0
- data/spec/vcr_cassettes/disk/list.yml +40 -0
- data/spec/vcr_cassettes/disk/migrate.yml +38 -0
- data/spec/vcr_cassettes/disk/schedules.yml +40 -0
- data/spec/vcr_cassettes/disk/unlock.yml +40 -0
- data/spec/vcr_cassettes/disk/vm_disk_list.yml +40 -0
- data/spec/vcr_cassettes/network/rebuild.yml +41 -0
- metadata +217 -66
- data/.gitignore +0 -13
- data/.rspec +0 -2
- data/.rvmrc +0 -41
- data/.travis.yml +0 -17
- data/lib/squall/support/params.rb +0 -50
- data/lib/squall/support/yaml.rb +0 -5
- data/spec/squall/support/params_spec.rb +0 -195
- data/squall.gemspec +0 -32
data/lib/squall.rb
CHANGED
@@ -1,13 +1,12 @@
|
|
1
|
+
require 'yaml'
|
1
2
|
require 'faraday'
|
2
3
|
require 'faraday_middleware'
|
3
4
|
|
4
5
|
require 'squall/support/version'
|
5
6
|
require 'squall/support/exception'
|
6
|
-
require 'squall/support/yaml'
|
7
7
|
|
8
8
|
module Squall
|
9
9
|
# Support
|
10
|
-
autoload :Params, 'squall/support/params'
|
11
10
|
autoload :Config, 'squall/support/config'
|
12
11
|
autoload :Base, 'squall/support/base'
|
13
12
|
# Api
|
@@ -28,6 +27,7 @@ module Squall
|
|
28
27
|
autoload :DataStoreZone, 'squall/data_store_zone'
|
29
28
|
autoload :NetworkZone, 'squall/network_zone'
|
30
29
|
autoload :HypervisorZone, 'squall/hypervisor_zone'
|
30
|
+
autoload :Disk, 'squall/disk'
|
31
31
|
|
32
32
|
extend self
|
33
33
|
|
@@ -39,53 +39,55 @@ module Squall
|
|
39
39
|
|
40
40
|
self.configuration ||= Squall::Config.new
|
41
41
|
|
42
|
-
#
|
42
|
+
# Public: Configures Squall.
|
43
43
|
#
|
44
|
-
#
|
44
|
+
# Yields Squall.configuration if a block is given.
|
45
45
|
#
|
46
|
-
#
|
47
|
-
# * +username+ - API username
|
48
|
-
# * +password+ - API Password
|
49
|
-
# * +debug+ - Toggle debug mode to log HTTParty
|
46
|
+
# Example
|
50
47
|
#
|
51
|
-
#
|
48
|
+
# Squall.config do |c|
|
49
|
+
# c.base_uri 'http://onapp.myserver.com'
|
50
|
+
# c.username 'myuser'
|
51
|
+
# c.password 'mypass'
|
52
|
+
# c.debug true
|
53
|
+
# end
|
52
54
|
#
|
53
|
-
#
|
54
|
-
# c.base_uri 'http://onapp.myserver.com'
|
55
|
-
# c.username 'myuser'
|
56
|
-
# c.password 'mypass'
|
57
|
-
# end
|
55
|
+
# Returns a Hash.
|
58
56
|
def config
|
59
57
|
yield self.configuration if block_given?
|
60
58
|
self.configuration.config
|
61
59
|
end
|
62
60
|
|
63
|
-
# Load the config from a YAML file
|
61
|
+
# Public: Load the config from a YAML file.
|
64
62
|
#
|
65
|
-
#
|
63
|
+
# file - Path to the YAML file, defaults to `~/.squall.yml`
|
66
64
|
#
|
67
|
-
#
|
65
|
+
# Raises ArgumentError if the config file does not exist.
|
68
66
|
#
|
69
|
-
#
|
67
|
+
# Example
|
70
68
|
#
|
71
|
-
#
|
69
|
+
# # Load default config file at `~/.squall.yml`:
|
70
|
+
# Squall.config_file
|
72
71
|
#
|
73
|
-
#
|
72
|
+
# # Load custom config file:
|
73
|
+
# Squall.config_file '/path/to/squall.yml'
|
74
74
|
#
|
75
|
-
|
76
|
-
|
75
|
+
# Returns nothing.
|
76
|
+
def config_file(file = File.expand_path("~/.squall.yml"))
|
77
77
|
if File.exists?(file)
|
78
78
|
self.configuration_file = file
|
79
79
|
else
|
80
80
|
raise ArgumentError, "Config file doesn't exist '#{file}'"
|
81
81
|
end
|
82
|
-
|
82
|
+
|
83
83
|
config do |c|
|
84
|
-
|
84
|
+
YAML::load_file(file).each { |k, v| c.send(k, v) }
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
|
-
# Reset the config (aka, clear it)
|
88
|
+
# Public: Reset the config (aka, clear it)
|
89
|
+
#
|
90
|
+
# Returns an instance of Squall::Config.
|
89
91
|
def reset_config
|
90
92
|
self.configuration = Squall::Config.new
|
91
93
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'yaml'
|
2
1
|
require 'rspec'
|
3
2
|
require 'vcr'
|
4
3
|
require 'squall'
|
@@ -7,9 +6,9 @@ VCR.config do |c|
|
|
7
6
|
c.cassette_library_dir = 'spec/vcr_cassettes'
|
8
7
|
c.stub_with :fakeweb
|
9
8
|
if ENV['RERECORD']
|
10
|
-
c.default_cassette_options = {:
|
9
|
+
c.default_cassette_options = {record: :all}
|
11
10
|
else
|
12
|
-
c.default_cassette_options = {:
|
11
|
+
c.default_cassette_options = {record: :none}
|
13
12
|
end
|
14
13
|
c.filter_sensitive_data("Basic <REDACTED>") { |i| [i.request.headers['authorization']].flatten.first }
|
15
14
|
c.filter_sensitive_data("<REDACTED>") { |i| [i.response.headers['set-cookie']].flatten.first }
|
@@ -30,7 +29,7 @@ end
|
|
30
29
|
|
31
30
|
def configure_for_tests
|
32
31
|
if ENV['RERECORD']
|
33
|
-
Squall.config_file
|
32
|
+
Squall.config_file
|
34
33
|
else
|
35
34
|
Squall.config do |c|
|
36
35
|
c.username "test"
|
@@ -40,13 +39,9 @@ def configure_for_tests
|
|
40
39
|
end
|
41
40
|
end
|
42
41
|
|
43
|
-
def requires_attr(attr, &block)
|
44
|
-
expect { block.call }.to raise_error(ArgumentError, /Missing required params: #{attr}/i)
|
45
|
-
end
|
46
|
-
|
47
42
|
def mock_request(meth, path, options = {})
|
48
43
|
config = Squall.config
|
49
|
-
uri = URI.parse(
|
44
|
+
uri = URI.parse(config[:base_uri])
|
50
45
|
url = "#{uri.scheme}://#{config[:username]}:#{config[:password]}@#{uri.host}:#{uri.port}#{path}"
|
51
|
-
FakeWeb.register_uri(meth, url, {:
|
52
|
-
end
|
46
|
+
FakeWeb.register_uri(meth, url, {content_type: 'application/json'}.merge(options))
|
47
|
+
end
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe Squall::DataStoreZone do
|
4
4
|
before(:each) do
|
5
5
|
@data_store_zone = Squall::DataStoreZone.new
|
6
|
-
@valid = {:
|
6
|
+
@valid = {label: "My zone"}
|
7
7
|
end
|
8
8
|
|
9
9
|
describe "#list" do
|
@@ -22,9 +22,6 @@ describe Squall::DataStoreZone do
|
|
22
22
|
|
23
23
|
describe "#show" do
|
24
24
|
use_vcr_cassette "data_store_zone/show"
|
25
|
-
it "requires an id" do
|
26
|
-
expect { @data_store_zone.show }.to raise_error(ArgumentError)
|
27
|
-
end
|
28
25
|
|
29
26
|
it "returns a data store zone" do
|
30
27
|
data_store_zone = @data_store_zone.show(1)
|
@@ -34,14 +31,6 @@ describe Squall::DataStoreZone do
|
|
34
31
|
|
35
32
|
describe "#create" do
|
36
33
|
use_vcr_cassette "data_store_zone/create"
|
37
|
-
it "requires label" do
|
38
|
-
invalid = @valid.reject{|k,v| k == :label }
|
39
|
-
requires_attr(:label) { @data_store_zone.create(invalid) }
|
40
|
-
end
|
41
|
-
|
42
|
-
it "raises error on unknown params" do
|
43
|
-
expect { @data_store_zone.create(@valid.merge(:what => 'what')) }.to raise_error(ArgumentError, 'Unknown params: what')
|
44
|
-
end
|
45
34
|
|
46
35
|
it "creates a data store zone" do
|
47
36
|
@data_store_zone.create(@valid)
|
@@ -60,21 +49,14 @@ describe Squall::DataStoreZone do
|
|
60
49
|
end
|
61
50
|
end
|
62
51
|
|
63
|
-
it "raises error on unknown params" do
|
64
|
-
expect { @data_store_zone.edit(1, @valid.merge(:what => 'what')) }.to raise_error(ArgumentError, 'Unknown params: what')
|
65
|
-
end
|
66
|
-
|
67
52
|
it "edits a data store zone" do
|
68
|
-
@data_store_zone.edit(1, :
|
53
|
+
@data_store_zone.edit(1, label: "Updated zone")
|
69
54
|
@data_store_zone.success.should be_true
|
70
55
|
end
|
71
56
|
end
|
72
57
|
|
73
58
|
describe "#delete" do
|
74
59
|
use_vcr_cassette "data_store_zone/delete"
|
75
|
-
it "requires an id" do
|
76
|
-
expect { @data_store_zone.delete }.to raise_error(ArgumentError)
|
77
|
-
end
|
78
60
|
|
79
61
|
it "deletes a data store zone" do
|
80
62
|
@data_store_zone.delete(1)
|
@@ -0,0 +1,189 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Squall::Disk do
|
4
|
+
before(:each) do
|
5
|
+
@disk = Squall::Disk.new
|
6
|
+
@valid = { data_store_id: 1, disk_size: 2, is_swap: 0,
|
7
|
+
mount_point: '/disk2', add_to_linux_fstab: 0,
|
8
|
+
require_format_disk: 1 }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#list" do
|
12
|
+
use_vcr_cassette "disk/list"
|
13
|
+
|
14
|
+
it "returns all disk" do
|
15
|
+
disks = @disk.list
|
16
|
+
disks.should be_an(Array)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "contains the disk data" do
|
20
|
+
disks = @disk.list
|
21
|
+
disks.all? { |w| w.is_a?(Hash) }.should be_true
|
22
|
+
end
|
23
|
+
|
24
|
+
it "contains correct disk data" do
|
25
|
+
disks = @disk.list
|
26
|
+
disks.all? { |w| !w['disk_vm_number'].nil? }.should be_true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#vm_disk_list" do
|
31
|
+
use_vcr_cassette "disk/vm_disk_list"
|
32
|
+
|
33
|
+
it "returns all VM disk" do
|
34
|
+
disks = @disk.vm_disk_list(58)
|
35
|
+
disks.should be_an(Array)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "contains the disk data" do
|
39
|
+
disks = @disk.vm_disk_list(58)
|
40
|
+
disks.all? { |w| w.is_a?(Hash) }.should be_true
|
41
|
+
end
|
42
|
+
|
43
|
+
it "contains correct disk data" do
|
44
|
+
disks = @disk.vm_disk_list(58)
|
45
|
+
disks.all? { |w| !w['disk_vm_number'].nil? }.should be_true
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "#create" do
|
50
|
+
use_vcr_cassette "disk/create"
|
51
|
+
|
52
|
+
it "creates a disk" do
|
53
|
+
@disk.create(58, @valid)
|
54
|
+
@disk.success.should be_true
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "#edit" do
|
59
|
+
use_vcr_cassette "disk/edit"
|
60
|
+
|
61
|
+
it "accepts valid params" do
|
62
|
+
@disk.edit(78, disk_size: 3)
|
63
|
+
@disk.success.should be_true
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
describe "#migrate" do
|
69
|
+
use_vcr_cassette "disk/migrate"
|
70
|
+
|
71
|
+
it "should return association error" do
|
72
|
+
migrate = @disk.migrate(58, 78, data_store_id: 2)
|
73
|
+
@disk.success.should be_false
|
74
|
+
migrate['errors'].should include("Data store cannot be associated with this virtual machine.")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "#iops_usage" do
|
79
|
+
use_vcr_cassette "disk/iops_usage"
|
80
|
+
|
81
|
+
it "returns a disk IOPS usage" do
|
82
|
+
usage = @disk.iops_usage(77)
|
83
|
+
usage.should be_a(Array)
|
84
|
+
usage.all? { |w| w.is_a?(Hash) }.should be_true
|
85
|
+
usage.all? { |w| !w['stat_time'].nil? }.should be_true
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "#build" do
|
90
|
+
use_vcr_cassette "disk/build"
|
91
|
+
|
92
|
+
it "builds a disk" do
|
93
|
+
@disk.build(78)
|
94
|
+
@disk.success.should be_true
|
95
|
+
end
|
96
|
+
|
97
|
+
it "returns disk info" do
|
98
|
+
build = @disk.build(78)
|
99
|
+
build.should be_a(Hash)
|
100
|
+
build['id'].should eq 78
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe "#unlock" do
|
105
|
+
use_vcr_cassette "disk/unlock"
|
106
|
+
|
107
|
+
it "unlocks a disk" do
|
108
|
+
@disk.unlock(78)
|
109
|
+
@disk.success.should be_true
|
110
|
+
end
|
111
|
+
|
112
|
+
it "returns disk info" do
|
113
|
+
unlock = @disk.unlock(78)
|
114
|
+
unlock.should be_a(Hash)
|
115
|
+
unlock['id'].should eq 78
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe "#auto_backup_on" do
|
120
|
+
use_vcr_cassette "disk/auto_backup_on"
|
121
|
+
|
122
|
+
it "enable auto_backup for disk" do
|
123
|
+
@disk.auto_backup_on(78)
|
124
|
+
@disk.success.should be_true
|
125
|
+
end
|
126
|
+
|
127
|
+
it "returns disk info" do
|
128
|
+
backup = @disk.auto_backup_on(78)
|
129
|
+
backup.should be_a(Hash)
|
130
|
+
backup['id'].should eq 78
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe "#auto_backup_off" do
|
135
|
+
use_vcr_cassette "disk/auto_backup_off"
|
136
|
+
|
137
|
+
it "disable auto_backup for disk" do
|
138
|
+
@disk.auto_backup_off(78)
|
139
|
+
@disk.success.should be_true
|
140
|
+
end
|
141
|
+
|
142
|
+
it "returns disk info" do
|
143
|
+
backup = @disk.auto_backup_off(78)
|
144
|
+
backup.should be_a(Hash)
|
145
|
+
backup['id'].should eq 78
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe "#schedules" do
|
150
|
+
use_vcr_cassette "disk/schedules"
|
151
|
+
|
152
|
+
it "returns schedules for a disk" do
|
153
|
+
schedules = @disk.schedules(78)
|
154
|
+
schedules.should be_a(Array)
|
155
|
+
schedules.all? { |w| !w['target_id'].nil? }.should be_true
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe "#add_schedule" do
|
160
|
+
use_vcr_cassette "disk/add_schedule"
|
161
|
+
|
162
|
+
it "adds schedule for a disk" do
|
163
|
+
disk = @disk.add_schedule(78, action: 'autobackup', duration: 1, period: 'days')
|
164
|
+
@disk.success.should be_true
|
165
|
+
disk.should be_a(Array)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
describe "#backups" do
|
170
|
+
use_vcr_cassette "disk/backups"
|
171
|
+
|
172
|
+
it "lists backups for a disk" do
|
173
|
+
backups = @disk.backups(78)
|
174
|
+
@disk.success.should be_true
|
175
|
+
backups.should be_a(Array)
|
176
|
+
backups.all? { |w| !w['disk_id'].nil? }.should be_true
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
describe "#delete" do
|
181
|
+
use_vcr_cassette "disk/delete"
|
182
|
+
|
183
|
+
it "deletes a disk" do
|
184
|
+
@disk.delete(78)
|
185
|
+
@disk.success.should be_true
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
@@ -3,16 +3,12 @@ require 'spec_helper'
|
|
3
3
|
describe Squall::FirewallRule do
|
4
4
|
before(:each) do
|
5
5
|
@firewall_rule = Squall::FirewallRule.new
|
6
|
-
@valid = {:
|
6
|
+
@valid = {command: "DROP", protocol: "TCP", network_interface_id: 1}
|
7
7
|
end
|
8
8
|
|
9
9
|
describe "#list" do
|
10
10
|
use_vcr_cassette "firewall_rule/list"
|
11
11
|
|
12
|
-
it "requires vm id" do
|
13
|
-
expect { @firewall_rule.list }.to raise_error(ArgumentError)
|
14
|
-
end
|
15
|
-
|
16
12
|
it "returns a list of firewall rules for a vm" do
|
17
13
|
firewall_rules = @firewall_rule.list(1)
|
18
14
|
firewall_rules.should be_an(Array)
|
@@ -26,20 +22,6 @@ describe Squall::FirewallRule do
|
|
26
22
|
|
27
23
|
describe "#create" do
|
28
24
|
use_vcr_cassette "firewall_rule/create"
|
29
|
-
it "requires command" do
|
30
|
-
invalid = @valid.reject{|k,v| k == :command }
|
31
|
-
requires_attr(:command) { @firewall_rule.create(1, invalid) }
|
32
|
-
end
|
33
|
-
|
34
|
-
it "requires protocol" do
|
35
|
-
invalid = @valid.reject{|k,v| k == :protocol }
|
36
|
-
requires_attr(:protocol) { @firewall_rule.create(1, invalid) }
|
37
|
-
end
|
38
|
-
|
39
|
-
it "requires network_interface_id" do
|
40
|
-
invalid = @valid.reject{|k,v| k == :network_interface_id }
|
41
|
-
requires_attr(:network_interface_id) { @firewall_rule.create(1, invalid) }
|
42
|
-
end
|
43
25
|
|
44
26
|
it "allows all optional params" do
|
45
27
|
optional = [:network_interface_id, :address, :port]
|
@@ -49,10 +31,6 @@ describe Squall::FirewallRule do
|
|
49
31
|
end
|
50
32
|
end
|
51
33
|
|
52
|
-
it "raises error on unknown params" do
|
53
|
-
expect { @firewall_rule.create(1, @valid.merge(:what => 'what')) }.to raise_error(ArgumentError, 'Unknown params: what')
|
54
|
-
end
|
55
|
-
|
56
34
|
it "creates a firewall rule for a virtual machine" do
|
57
35
|
@firewall_rule.create(1, @valid)
|
58
36
|
@firewall_rule.success.should be_true
|
@@ -70,12 +48,8 @@ describe Squall::FirewallRule do
|
|
70
48
|
end
|
71
49
|
end
|
72
50
|
|
73
|
-
it "raises error on unknown params" do
|
74
|
-
expect { @firewall_rule.edit(1, 1, :what => 'what') }.to raise_error(ArgumentError, 'Unknown params: what')
|
75
|
-
end
|
76
|
-
|
77
51
|
it "edits a firewall rule" do
|
78
|
-
@firewall_rule.edit(1, 1, :
|
52
|
+
@firewall_rule.edit(1, 1, port: 1000)
|
79
53
|
@firewall_rule.success.should be_true
|
80
54
|
end
|
81
55
|
end
|
@@ -83,10 +57,6 @@ describe Squall::FirewallRule do
|
|
83
57
|
describe "#delete" do
|
84
58
|
use_vcr_cassette "firewall_rule/delete"
|
85
59
|
|
86
|
-
it "requires an id" do
|
87
|
-
expect { @firewall_rule.delete }.to raise_error(ArgumentError)
|
88
|
-
end
|
89
|
-
|
90
60
|
it "deletes a firewall rule" do
|
91
61
|
@firewall_rule.delete(1, 1)
|
92
62
|
@firewall_rule.success.should be_true
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe Squall::Hypervisor do
|
4
4
|
before(:each) do
|
5
5
|
@hv = Squall::Hypervisor.new
|
6
|
-
@valid = {:
|
6
|
+
@valid = {label: 'A new hypervisor', ip_address: '127.126.126.126', hypervisor_type: 'xen'}
|
7
7
|
end
|
8
8
|
|
9
9
|
describe "#list" do
|
@@ -23,9 +23,6 @@ describe Squall::Hypervisor do
|
|
23
23
|
|
24
24
|
describe "#show" do
|
25
25
|
use_vcr_cassette "hypervisor/show"
|
26
|
-
it "requires an id" do
|
27
|
-
expect { @hv.show }.to raise_error(ArgumentError)
|
28
|
-
end
|
29
26
|
|
30
27
|
it "returns a hv" do
|
31
28
|
@hv.show(1)
|
@@ -35,23 +32,6 @@ describe Squall::Hypervisor do
|
|
35
32
|
|
36
33
|
describe "#create" do
|
37
34
|
use_vcr_cassette "hypervisor/create"
|
38
|
-
it "requires label" do
|
39
|
-
invalid = @valid.reject{|k,v| k == :label }
|
40
|
-
requires_attr(:label) { @hv.create(invalid) }
|
41
|
-
@hv.success.should be_false
|
42
|
-
end
|
43
|
-
|
44
|
-
it "requires ip_address" do
|
45
|
-
invalid = @valid.reject{|k,v| k == :ip_address }
|
46
|
-
requires_attr(:ip_address) { @hv.create(invalid) }
|
47
|
-
@hv.success.should be_false
|
48
|
-
end
|
49
|
-
|
50
|
-
it "requires hypervisor_type" do
|
51
|
-
invalid = @valid.reject{|k,v| k == :hypervisor_type }
|
52
|
-
requires_attr(:hypervisor_type) { @hv.create(invalid) }
|
53
|
-
@hv.success.should be_false
|
54
|
-
end
|
55
35
|
|
56
36
|
it "creates a hypervisor" do
|
57
37
|
@hv.create(@valid)
|
@@ -61,28 +41,15 @@ describe Squall::Hypervisor do
|
|
61
41
|
|
62
42
|
describe "#edit" do
|
63
43
|
use_vcr_cassette 'hypervisor/edit'
|
64
|
-
it "requires an id" do
|
65
|
-
expect { @hv.edit }.to raise_error(ArgumentError)
|
66
|
-
@hv.success.should be_false
|
67
|
-
end
|
68
|
-
|
69
|
-
it "raises an error with unknown param " do
|
70
|
-
expect { @hv.edit(1, :blah => 1)}.to raise_error(ArgumentError)
|
71
|
-
@hv.success.should be_false
|
72
|
-
end
|
73
44
|
|
74
45
|
it "edits the hypervisor" do
|
75
|
-
edit = @hv.edit(1, :
|
46
|
+
edit = @hv.edit(1, label: 'A new label')
|
76
47
|
@hv.success.should be_true
|
77
48
|
end
|
78
49
|
end
|
79
50
|
|
80
51
|
describe "#reboot" do
|
81
52
|
use_vcr_cassette 'hypervisor/reboot'
|
82
|
-
it "requires an id" do
|
83
|
-
expect { @hv.reboot }.to raise_error(ArgumentError)
|
84
|
-
@hv.success.should be_false
|
85
|
-
end
|
86
53
|
|
87
54
|
it "reboots the hypervisor" do
|
88
55
|
reboot = @hv.reboot(1)
|
@@ -92,9 +59,6 @@ describe Squall::Hypervisor do
|
|
92
59
|
|
93
60
|
describe "#delete" do
|
94
61
|
use_vcr_cassette "hypervisor/delete"
|
95
|
-
it "requires an id" do
|
96
|
-
expect { @hv.delete }.to raise_error(ArgumentError)
|
97
|
-
end
|
98
62
|
|
99
63
|
it "returns a hv" do
|
100
64
|
@hv.delete(1)
|
@@ -155,16 +119,8 @@ describe Squall::Hypervisor do
|
|
155
119
|
describe "#add_network_join" do
|
156
120
|
use_vcr_cassette "hypervisor/add_network_join"
|
157
121
|
|
158
|
-
it "requires network id" do
|
159
|
-
requires_attr(:network_id) { @hv.add_network_join(1, :interface => "interface") }
|
160
|
-
end
|
161
|
-
|
162
|
-
it "requires interface" do
|
163
|
-
requires_attr(:interface) { @hv.add_network_join(1, :network_id => 1) }
|
164
|
-
end
|
165
|
-
|
166
122
|
it "adds the network to the hypervisor zone" do
|
167
|
-
@hv.add_network_join(1, :
|
123
|
+
@hv.add_network_join(1, network_id: 1, interface: "interface")
|
168
124
|
@hv.success.should be_true
|
169
125
|
end
|
170
126
|
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe Squall::HypervisorZone do
|
4
4
|
before(:each) do
|
5
5
|
@hypervisor_zone = Squall::HypervisorZone.new
|
6
|
-
@valid = {:
|
6
|
+
@valid = {label: "My zone"}
|
7
7
|
end
|
8
8
|
|
9
9
|
describe "#list" do
|
@@ -22,9 +22,6 @@ describe Squall::HypervisorZone do
|
|
22
22
|
|
23
23
|
describe "#show" do
|
24
24
|
use_vcr_cassette "hypervisor_zones/show"
|
25
|
-
it "requires an id" do
|
26
|
-
expect { @hypervisor_zone.show }.to raise_error(ArgumentError)
|
27
|
-
end
|
28
25
|
|
29
26
|
it "returns a hypervisor zone" do
|
30
27
|
hypervisor_zones = @hypervisor_zone.show(1)
|
@@ -34,14 +31,6 @@ describe Squall::HypervisorZone do
|
|
34
31
|
|
35
32
|
describe "#create" do
|
36
33
|
use_vcr_cassette "hypervisor_zones/create"
|
37
|
-
it "requires label" do
|
38
|
-
invalid = @valid.reject{|k,v| k == :label }
|
39
|
-
requires_attr(:label) { @hypervisor_zone.create(invalid) }
|
40
|
-
end
|
41
|
-
|
42
|
-
it "raises error on unknown params" do
|
43
|
-
expect { @hypervisor_zone.create(@valid.merge(:what => 'what')) }.to raise_error(ArgumentError, 'Unknown params: what')
|
44
|
-
end
|
45
34
|
|
46
35
|
it "creates a hypervisor zone" do
|
47
36
|
@hypervisor_zone.create(@valid)
|
@@ -60,12 +49,8 @@ describe Squall::HypervisorZone do
|
|
60
49
|
end
|
61
50
|
end
|
62
51
|
|
63
|
-
it "raises error on unknown params" do
|
64
|
-
expect { @hypervisor_zone.edit(1, @valid.merge(:what => 'what')) }.to raise_error(ArgumentError, 'Unknown params: what')
|
65
|
-
end
|
66
|
-
|
67
52
|
it "edits a hypervisor zone" do
|
68
|
-
@hypervisor_zone.edit(1, :
|
53
|
+
@hypervisor_zone.edit(1, label: "Updated zone")
|
69
54
|
@hypervisor_zone.success.should be_true
|
70
55
|
end
|
71
56
|
end
|
@@ -150,16 +135,8 @@ describe Squall::HypervisorZone do
|
|
150
135
|
describe "#add_network_join" do
|
151
136
|
use_vcr_cassette "hypervisor_zones/add_network_join"
|
152
137
|
|
153
|
-
it "requires network id" do
|
154
|
-
requires_attr(:network_id) { @hypervisor_zone.add_network_join(1, :interface => "interface") }
|
155
|
-
end
|
156
|
-
|
157
|
-
it "requires interface" do
|
158
|
-
requires_attr(:interface) { @hypervisor_zone.add_network_join(1, :network_id => 1) }
|
159
|
-
end
|
160
|
-
|
161
138
|
it "adds the network to the hypervisor zone" do
|
162
|
-
@hypervisor_zone.add_network_join(1, :
|
139
|
+
@hypervisor_zone.add_network_join(1, network_id: 1, interface: "interface")
|
163
140
|
@hypervisor_zone.success.should be_true
|
164
141
|
end
|
165
142
|
|
@@ -172,7 +149,5 @@ describe Squall::HypervisorZone do
|
|
172
149
|
@hypervisor_zone.remove_network_join(1, 1)
|
173
150
|
@hypervisor_zone.success.should be_true
|
174
151
|
end
|
175
|
-
|
176
152
|
end
|
177
|
-
|
178
153
|
end
|
@@ -8,10 +8,6 @@ describe Squall::IpAddressJoin do
|
|
8
8
|
describe "#list" do
|
9
9
|
use_vcr_cassette 'ipaddress_join/list'
|
10
10
|
|
11
|
-
it "requires virtual machine ID" do
|
12
|
-
expect { @join.list }.to raise_error(ArgumentError)
|
13
|
-
end
|
14
|
-
|
15
11
|
it "returns list of ip_addresses" do
|
16
12
|
ips = @join.list(1)
|
17
13
|
ips.should be_an(Array)
|
@@ -26,13 +22,8 @@ describe Squall::IpAddressJoin do
|
|
26
22
|
describe "#assign" do
|
27
23
|
use_vcr_cassette "ipaddress_join/assign"
|
28
24
|
|
29
|
-
it "raises ArgumentError without required arguments" do
|
30
|
-
expect { @join.assign }.to raise_error(ArgumentError)
|
31
|
-
expect { @join.assign(1) }.to raise_error(ArgumentError)
|
32
|
-
end
|
33
|
-
|
34
25
|
it "assigns the IP join" do
|
35
|
-
join = @join.assign(1, {:
|
26
|
+
join = @join.assign(1, {ip_address_id: 1, network_interface_id: 1})
|
36
27
|
@join.success.should be_true
|
37
28
|
end
|
38
29
|
end
|
@@ -40,11 +31,6 @@ describe Squall::IpAddressJoin do
|
|
40
31
|
describe "#delete" do
|
41
32
|
use_vcr_cassette "ipaddress_join/delete"
|
42
33
|
|
43
|
-
it "raises ArgumentError without required arguments" do
|
44
|
-
expect { @join.delete }.to raise_error(ArgumentError)
|
45
|
-
expect { @join.delete(1) }.to raise_error(ArgumentError)
|
46
|
-
end
|
47
|
-
|
48
34
|
it "deletes the IP join" do
|
49
35
|
@join.delete(1, 1)
|
50
36
|
@join.success.should be_true
|