squall 1.0.2 → 1.1.0
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/.gitignore +3 -0
- data/.rbenv-version +1 -0
- data/.rspec +1 -1
- data/.rvmrc +41 -1
- data/.travis.yml +13 -3
- data/README.md +122 -27
- data/Rakefile +5 -34
- data/lib/squall/data_store_zone.rb +58 -0
- data/lib/squall/firewall_rule.rb +66 -0
- data/lib/squall/hypervisor.rb +63 -11
- data/lib/squall/hypervisor_zone.rb +135 -0
- data/lib/squall/ip_address.rb +50 -3
- data/lib/squall/ip_address_join.rb +46 -0
- data/lib/squall/network.rb +21 -4
- data/lib/squall/network_zone.rb +73 -0
- data/lib/squall/payment.rb +59 -0
- data/lib/squall/role.rb +28 -11
- data/lib/squall/statistic.rb +3 -3
- data/lib/squall/{base.rb → support/base.rb} +8 -4
- data/lib/squall/{config.rb → support/config.rb} +4 -0
- data/lib/squall/{exception.rb → support/exception.rb} +0 -0
- data/lib/squall/{params.rb → support/params.rb} +0 -0
- data/lib/squall/support/version.rb +3 -0
- data/lib/squall/support/yaml.rb +5 -0
- data/lib/squall/template.rb +4 -0
- data/lib/squall/transaction.rb +4 -0
- data/lib/squall/user.rb +126 -30
- data/lib/squall/user_group.rb +56 -0
- data/lib/squall/virtual_machine.rb +176 -52
- data/lib/squall/whitelist.rb +74 -0
- data/lib/squall.rb +21 -12
- data/spec/spec_helper.rb +21 -16
- data/spec/squall/data_store_zone_spec.rb +97 -0
- data/spec/squall/firewall_rule_spec.rb +112 -0
- data/spec/squall/hypervisor_spec.rb +101 -48
- data/spec/squall/hypervisor_zone_spec.rb +190 -0
- data/spec/squall/ip_address_join_spec.rb +67 -0
- data/spec/squall/ip_address_spec.rb +68 -6
- data/spec/squall/network_spec.rb +0 -1
- data/spec/squall/network_zone_spec.rb +147 -0
- data/spec/squall/payment_spec.rb +98 -0
- data/spec/squall/role_spec.rb +31 -46
- data/spec/squall/statistic_spec.rb +7 -9
- data/spec/squall/{base_spec.rb → support/base_spec.rb} +5 -7
- data/spec/squall/{config_spec.rb → support/config_spec.rb} +0 -0
- data/spec/{params_spec.rb → squall/support/params_spec.rb} +0 -0
- data/spec/squall/template_spec.rb +0 -1
- data/spec/squall/transaction_spec.rb +0 -1
- data/spec/squall/user_group_spec.rb +74 -0
- data/spec/squall/user_spec.rb +142 -59
- data/spec/squall/virtual_machine_spec.rb +179 -67
- data/spec/squall/whitelist_spec.rb +113 -0
- data/spec/squall_spec.rb +4 -8
- data/spec/vcr_cassettes/data_store_zone/create.yml +40 -0
- data/spec/vcr_cassettes/data_store_zone/delete.yml +77 -0
- data/spec/vcr_cassettes/data_store_zone/edit.yml +77 -0
- data/spec/vcr_cassettes/data_store_zone/list.yml +40 -0
- data/spec/vcr_cassettes/data_store_zone/show.yml +77 -0
- data/spec/vcr_cassettes/firewall_rule/create.yml +75 -0
- data/spec/vcr_cassettes/firewall_rule/delete.yml +75 -0
- data/spec/vcr_cassettes/firewall_rule/edit.yml +75 -0
- data/spec/vcr_cassettes/firewall_rule/list.yml +40 -0
- data/spec/vcr_cassettes/hypervisor/add_data_store_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor/add_network_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor/create.yml +7 -44
- data/spec/vcr_cassettes/hypervisor/data_store_joins.yml +40 -0
- data/spec/vcr_cassettes/hypervisor/delete.yml +11 -11
- data/spec/vcr_cassettes/hypervisor/edit.yml +7 -46
- data/spec/vcr_cassettes/hypervisor/list.yml +7 -7
- data/spec/vcr_cassettes/hypervisor/network_joins.yml +40 -0
- data/spec/vcr_cassettes/hypervisor/reboot.yml +13 -13
- data/spec/vcr_cassettes/hypervisor/remove_data_store_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor/remove_network_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor/show.yml +13 -13
- data/spec/vcr_cassettes/hypervisor_zones/add_data_store_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/add_network_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/create.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/data_store_joins.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/delete.yml +77 -0
- data/spec/vcr_cassettes/hypervisor_zones/edit.yml +77 -0
- data/spec/vcr_cassettes/hypervisor_zones/hypervisors.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/list.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/network_joins.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/remove_data_store_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/remove_network_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/show.yml +77 -0
- data/spec/vcr_cassettes/ipaddress/create.yml +40 -0
- data/spec/vcr_cassettes/ipaddress/delete.yml +40 -0
- data/spec/vcr_cassettes/ipaddress/edit.yml +40 -0
- data/spec/vcr_cassettes/ipaddress/list.yml +17 -17
- data/spec/vcr_cassettes/ipaddress_join/assign.yml +77 -0
- data/spec/vcr_cassettes/ipaddress_join/delete.yml +77 -0
- data/spec/vcr_cassettes/ipaddress_join/list.yml +77 -0
- data/spec/vcr_cassettes/network/create.yml +15 -15
- data/spec/vcr_cassettes/network/delete.yml +6 -6
- data/spec/vcr_cassettes/network/edit.yml +18 -18
- data/spec/vcr_cassettes/network/list.yml +3 -3
- data/spec/vcr_cassettes/network_zones/attach.yml +114 -0
- data/spec/vcr_cassettes/network_zones/create.yml +40 -0
- data/spec/vcr_cassettes/network_zones/delete.yml +77 -0
- data/spec/vcr_cassettes/network_zones/detach.yml +114 -0
- data/spec/vcr_cassettes/network_zones/edit.yml +77 -0
- data/spec/vcr_cassettes/network_zones/list.yml +40 -0
- data/spec/vcr_cassettes/network_zones/show.yml +77 -0
- data/spec/vcr_cassettes/payment/create.yml +78 -0
- data/spec/vcr_cassettes/payment/delete.yml +77 -0
- data/spec/vcr_cassettes/payment/edit.yml +77 -0
- data/spec/vcr_cassettes/payment/list.yml +41 -0
- data/spec/vcr_cassettes/role/create.yml +7 -44
- data/spec/vcr_cassettes/role/delete.yml +6 -6
- data/spec/vcr_cassettes/role/edit.yml +13 -75
- data/spec/vcr_cassettes/role/list.yml +7 -7
- data/spec/vcr_cassettes/role/permissions.yml +7 -7
- data/spec/vcr_cassettes/role/show.yml +13 -13
- data/spec/vcr_cassettes/statistic/usage_statistics.yml +7 -7
- data/spec/vcr_cassettes/template/list.yml +3 -3
- data/spec/vcr_cassettes/template/make_public.yml +6 -6
- data/spec/vcr_cassettes/transaction/list.yml +3 -3
- data/spec/vcr_cassettes/transaction/show.yml +6 -6
- data/spec/vcr_cassettes/user/activate.yml +7 -7
- data/spec/vcr_cassettes/user/create.yml +7 -83
- data/spec/vcr_cassettes/user/data_store_zones.yml +79 -0
- data/spec/vcr_cassettes/user/delete.yml +11 -11
- data/spec/vcr_cassettes/user/edit.yml +40 -0
- data/spec/vcr_cassettes/user/edit_role.yml +9 -9
- data/spec/vcr_cassettes/user/generate_api_key.yml +7 -7
- data/spec/vcr_cassettes/user/hypervisors.yml +77 -0
- data/spec/vcr_cassettes/user/limits.yml +77 -0
- data/spec/vcr_cassettes/user/list.yml +8 -8
- data/spec/vcr_cassettes/user/monthly_bills.yml +40 -0
- data/spec/vcr_cassettes/user/network_zones.yml +79 -0
- data/spec/vcr_cassettes/user/show.yml +29 -29
- data/spec/vcr_cassettes/user/stats.yml +6 -6
- data/spec/vcr_cassettes/user/suspend.yml +7 -7
- data/spec/vcr_cassettes/user/virtual_machines.yml +18 -20
- data/spec/vcr_cassettes/user_group/create.yml +40 -0
- data/spec/vcr_cassettes/user_group/delete.yml +77 -0
- data/spec/vcr_cassettes/user_group/edit.yml +77 -0
- data/spec/vcr_cassettes/user_group/list.yml +40 -0
- data/spec/vcr_cassettes/virtual_machine/build.yml +7 -7
- data/spec/vcr_cassettes/virtual_machine/change_owner.yml +8 -8
- data/spec/vcr_cassettes/virtual_machine/change_password.yml +13 -13
- data/spec/vcr_cassettes/virtual_machine/console.yml +63 -0
- data/spec/vcr_cassettes/virtual_machine/create.yml +9 -11
- data/spec/vcr_cassettes/virtual_machine/delete.yml +11 -11
- data/spec/vcr_cassettes/virtual_machine/edit.yml +16 -18
- data/spec/vcr_cassettes/virtual_machine/list.yml +3 -3
- data/spec/vcr_cassettes/virtual_machine/migrate.yml +22 -24
- data/spec/vcr_cassettes/virtual_machine/reboot.yml +22 -22
- data/spec/vcr_cassettes/virtual_machine/resize.yml +13 -13
- data/spec/vcr_cassettes/virtual_machine/segregate.yml +114 -0
- data/spec/vcr_cassettes/virtual_machine/set_ssh_keys.yml +77 -0
- data/spec/vcr_cassettes/virtual_machine/set_vip.yml +77 -0
- data/spec/vcr_cassettes/virtual_machine/show.yml +6 -6
- data/spec/vcr_cassettes/virtual_machine/shutdown.yml +6 -6
- data/spec/vcr_cassettes/virtual_machine/startup.yml +6 -6
- data/spec/vcr_cassettes/virtual_machine/stats.yml +63 -0
- data/spec/vcr_cassettes/virtual_machine/stop.yml +22 -22
- data/spec/vcr_cassettes/virtual_machine/suspend.yml +13 -13
- data/spec/vcr_cassettes/virtual_machine/unlock.yml +13 -13
- data/spec/vcr_cassettes/virtual_machine/unsuspend.yml +6 -6
- data/spec/vcr_cassettes/whitelist/create.yml +77 -0
- data/spec/vcr_cassettes/whitelist/delete.yml +77 -0
- data/spec/vcr_cassettes/whitelist/edit.yml +77 -0
- data/spec/vcr_cassettes/whitelist/list.yml +40 -0
- data/spec/vcr_cassettes/whitelist/show.yml +77 -0
- data/squall.gemspec +3 -2
- metadata +247 -131
- data/Gemfile.lock +0 -100
- data/lib/squall/version.rb +0 -3
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
module Squall
|
|
2
|
+
# OnApp HypervisorZone
|
|
3
|
+
class HypervisorZone < Base
|
|
4
|
+
# Returns a list of hypervisor zones
|
|
5
|
+
def list
|
|
6
|
+
response = request(:get, "/settings/hypervisor_zones.json")
|
|
7
|
+
response.collect { |i| i['hypervisor_group'] }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Get the details for a hypervisor zone
|
|
11
|
+
#
|
|
12
|
+
# ==== Params
|
|
13
|
+
#
|
|
14
|
+
# * +id*+ - ID of the hypervisor zone
|
|
15
|
+
def show(id)
|
|
16
|
+
response = request(:get, "/settings/hypervisor_zones/#{id}.json")
|
|
17
|
+
response['hypervisor_group']
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Updates an existing hypervisor zone
|
|
21
|
+
#
|
|
22
|
+
# ==== Params
|
|
23
|
+
#
|
|
24
|
+
# * +id*+ - ID of the hypervisor zone
|
|
25
|
+
# * +options+ - Params for updating the hypervisor zone
|
|
26
|
+
#
|
|
27
|
+
# ==== Options
|
|
28
|
+
#
|
|
29
|
+
# See #create
|
|
30
|
+
def edit(id, options = {})
|
|
31
|
+
params.required(:label).validate!(options)
|
|
32
|
+
response = request(:put, "/settings/hypervisor_zones/#{id}.json", :query => {:pack => options})
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Creates a new hypervisor zone
|
|
36
|
+
#
|
|
37
|
+
# ==== Params
|
|
38
|
+
#
|
|
39
|
+
# * +options+ - Params for updating the hypervisor zone
|
|
40
|
+
#
|
|
41
|
+
# ==== Options
|
|
42
|
+
#
|
|
43
|
+
# * +label*+ - Label for the hypervisor zone
|
|
44
|
+
def create(options = {})
|
|
45
|
+
params.required(:label).validate!(options)
|
|
46
|
+
response = request(:post, "/settings/hypervisor_zones.json", :query => {:pack => options})
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Deletes an existing hypervisor zone
|
|
50
|
+
#
|
|
51
|
+
# ==== Params
|
|
52
|
+
#
|
|
53
|
+
# * +id*+ - ID of the hypervisor zone
|
|
54
|
+
def delete(id)
|
|
55
|
+
request(:delete, "/settings/hypervisor_zones/#{id}.json")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Get the list of hypervisors attached to a zone
|
|
59
|
+
#
|
|
60
|
+
# ==== Params
|
|
61
|
+
#
|
|
62
|
+
# * +id*+ - ID of the hypervisor zone
|
|
63
|
+
def hypervisors(id)
|
|
64
|
+
response = request(:get, "/settings/hypervisor_zones/#{id}/hypervisors.json")
|
|
65
|
+
response.collect { |hv| hv['hypervisor'] }
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Get the list of data store joins attached to a hypervisor zone
|
|
69
|
+
#
|
|
70
|
+
# ==== Params
|
|
71
|
+
#
|
|
72
|
+
# * +id*+ - ID of the hypervisor zone
|
|
73
|
+
def data_store_joins(id)
|
|
74
|
+
response = request(:get, "/settings/hypervisor_zones/#{id}/data_store_joins.json")
|
|
75
|
+
response.collect { |i| i['data_store_join'] }
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Add a data store to a hypervisor zone
|
|
79
|
+
#
|
|
80
|
+
# ==== Params
|
|
81
|
+
#
|
|
82
|
+
# * +id*+ - ID of the hypervisor zone
|
|
83
|
+
# * +data_store_id*+ - ID of the data store
|
|
84
|
+
def add_data_store_join(id, data_store_id)
|
|
85
|
+
request(:post, "/settings/hypervisor_zones/#{id}/data_store_joins.json", :query => {:data_store_id => data_store_id})
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Remove a data store from a hypervisor zone
|
|
89
|
+
#
|
|
90
|
+
# ==== Params
|
|
91
|
+
#
|
|
92
|
+
# * +id*+ - ID of the hypervisor zone
|
|
93
|
+
# * +data_store_join_id*+ - ID of the join record
|
|
94
|
+
def remove_data_store_join(id, data_store_join_id)
|
|
95
|
+
request(:delete, "/settings/hypervisor_zones/#{id}/data_store_joins/#{data_store_join_id}.json")
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Get the list of networks attached to a hypervisor zone
|
|
99
|
+
#
|
|
100
|
+
# ==== Params
|
|
101
|
+
#
|
|
102
|
+
# * +id*+ - ID of the hypervisor zone
|
|
103
|
+
def network_joins(id)
|
|
104
|
+
response = request(:get, "/settings/hypervisor_zones/#{id}/network_joins.json")
|
|
105
|
+
response.collect { |i| i['network_join'] }
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Add a network to a hypervisor zone
|
|
109
|
+
#
|
|
110
|
+
# ==== Params
|
|
111
|
+
#
|
|
112
|
+
# * +id*+ - ID of the hypervisor zone
|
|
113
|
+
# * +options+ - Params for updating the hypervisor zone
|
|
114
|
+
#
|
|
115
|
+
# ==== Options
|
|
116
|
+
#
|
|
117
|
+
# * +network_id*+ - The ID of the network to add to the hypervisor zone
|
|
118
|
+
# * +interface*+ - The name of the appropriate network interface
|
|
119
|
+
def add_network_join(id, options={})
|
|
120
|
+
params.required(:network_id, :interface).validate!(options)
|
|
121
|
+
request(:post, "/settings/hypervisor_zones/#{id}/network_joins.json", :query => {:network_join => options})
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Remove a network from a hypervisor zone
|
|
125
|
+
#
|
|
126
|
+
# ==== Params
|
|
127
|
+
#
|
|
128
|
+
# * +id*+ - ID of the hypervisor zone
|
|
129
|
+
# * +network_join_id*+ - ID of the join record
|
|
130
|
+
def remove_network_join(id, network_join_id)
|
|
131
|
+
request(:delete, "/settings/hypervisor_zones/#{id}/network_joins/#{network_join_id}.json")
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
end
|
|
135
|
+
end
|
data/lib/squall/ip_address.rb
CHANGED
|
@@ -1,13 +1,60 @@
|
|
|
1
1
|
module Squall
|
|
2
2
|
# OnApp IpAddress
|
|
3
3
|
class IpAddress < Base
|
|
4
|
-
# Returns a list of
|
|
4
|
+
# Returns a list of ip addresses for a network
|
|
5
5
|
#
|
|
6
|
-
# ====
|
|
7
|
-
#
|
|
6
|
+
# ==== Params
|
|
7
|
+
#
|
|
8
|
+
# * +network_id+ - ID of the network
|
|
8
9
|
def list(network_id)
|
|
9
10
|
response = request(:get, "/settings/networks/#{network_id}/ip_addresses.json")
|
|
10
11
|
response.collect { |ip| ip['ip_address'] }
|
|
11
12
|
end
|
|
13
|
+
|
|
14
|
+
# Updates an existing ip address
|
|
15
|
+
#
|
|
16
|
+
# ==== Params
|
|
17
|
+
#
|
|
18
|
+
# * +network_id+ - ID of the network
|
|
19
|
+
# * +id+ - ID of the ip address
|
|
20
|
+
# * +options+ - Params for updating the ip address
|
|
21
|
+
#
|
|
22
|
+
# ==== Options
|
|
23
|
+
#
|
|
24
|
+
# See #create
|
|
25
|
+
def edit(network_id, id, options = {})
|
|
26
|
+
params.accepts(:address, :netmask, :broadcast, :network_address, :gateway, :disallowed_primary).validate!(options)
|
|
27
|
+
response = request(:put, "/settings/networks/#{network_id}/ip_addresses/#{id}.json", default_params(options))
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Creates a new IpAddress
|
|
31
|
+
#
|
|
32
|
+
# ==== Params
|
|
33
|
+
#
|
|
34
|
+
# * +network_id+ - ID of the network
|
|
35
|
+
# * +options+ - Params for the new ip address
|
|
36
|
+
#
|
|
37
|
+
# ==== Options
|
|
38
|
+
#
|
|
39
|
+
# * +address*+ - IP address
|
|
40
|
+
# * +netmask*+ - Network mask
|
|
41
|
+
# * +broadcast*+ - A logical address at which all devices connected to a multiple-access communications network are enabled to receive datagrams
|
|
42
|
+
# * +network_address*+ - IP address of network
|
|
43
|
+
# * +gateway*+ - Gateway address
|
|
44
|
+
# * +disallowed_primary+ - Set to '1' to prevent this address being used as primary
|
|
45
|
+
def create(network_id, options = {})
|
|
46
|
+
params.required(:address, :netmask, :broadcast, :network_address, :gateway).accepts(:disallowed_primary).validate!(options)
|
|
47
|
+
response = request(:post, "/settings/networks/#{network_id}/ip_addresses.json", default_params(options))
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Deletes an existing ip address
|
|
51
|
+
#
|
|
52
|
+
# ==== Params
|
|
53
|
+
#
|
|
54
|
+
# * +network_id+ - ID of the network
|
|
55
|
+
# * +id+ - ID of the ip address
|
|
56
|
+
def delete(network_id, id)
|
|
57
|
+
request(:delete, "/settings/networks/#{network_id}/ip_addresses/#{id}.json")
|
|
58
|
+
end
|
|
12
59
|
end
|
|
13
60
|
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module Squall
|
|
2
|
+
# Handles IP assignments for virtual machines
|
|
3
|
+
class IpAddressJoin < Base
|
|
4
|
+
|
|
5
|
+
# Get the list of IP address assignments for a particular virtual machine
|
|
6
|
+
#
|
|
7
|
+
# ==== Params
|
|
8
|
+
#
|
|
9
|
+
# * +virtual_machine_id*+ - Virtual machine ID to lookup
|
|
10
|
+
def list(virtual_machine_id)
|
|
11
|
+
response = request(:get, "/virtual_machines/#{virtual_machine_id}/ip_addresses.json")
|
|
12
|
+
response.collect { |ip| ip['ip_address_join'] }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Assigns an IP address to a VM
|
|
16
|
+
#
|
|
17
|
+
# ==== Params
|
|
18
|
+
#
|
|
19
|
+
# * +virtual_machine_id*+ - Virtual machine ID to assign IP to
|
|
20
|
+
# * +options+ - Params for IP assignment
|
|
21
|
+
#
|
|
22
|
+
# ==== Options
|
|
23
|
+
#
|
|
24
|
+
# * +ip_address_id*+ - ID of the IP address
|
|
25
|
+
# * +network_interface_id*+ - ID of the network interface id
|
|
26
|
+
def assign(virtual_machine_id, options = {})
|
|
27
|
+
params.required(:ip_address_id, :network_interface_id).validate!(options)
|
|
28
|
+
response = request(:post, "/virtual_machines/#{virtual_machine_id}/ip_addresses.json", default_params(options))
|
|
29
|
+
response['ip_address_join']
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Deletes an IP address assignment from a VM
|
|
33
|
+
#
|
|
34
|
+
# ==== Params
|
|
35
|
+
#
|
|
36
|
+
# * +virtual_machine_id+ - Virtual machine ID to remove IP join from
|
|
37
|
+
# * +ip_address_id+ - IP Address ID to remove
|
|
38
|
+
#
|
|
39
|
+
# ==== Options
|
|
40
|
+
#
|
|
41
|
+
# See #assign
|
|
42
|
+
def delete(virtual_machine_id, ip_address_id)
|
|
43
|
+
request(:delete, "/virtual_machines/#{virtual_machine_id}/ip_addresses/#{ip_address_id}.json")
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
data/lib/squall/network.rb
CHANGED
|
@@ -9,12 +9,18 @@ module Squall
|
|
|
9
9
|
|
|
10
10
|
# Edit a Network
|
|
11
11
|
#
|
|
12
|
-
# ====
|
|
12
|
+
# ==== Params
|
|
13
13
|
#
|
|
14
|
+
# * +id*+ - ID of the network
|
|
14
15
|
# * +options+ - Params for editing the Network
|
|
16
|
+
#
|
|
17
|
+
# ==== Options
|
|
18
|
+
#
|
|
19
|
+
# See #create
|
|
20
|
+
#
|
|
15
21
|
# ==== Example
|
|
16
22
|
#
|
|
17
|
-
# edit :label => 'mynetwork', :network_group_id => 1, :vlan => 2, :identifier => 'something'
|
|
23
|
+
# edit 1, :label => 'mynetwork', :network_group_id => 1, :vlan => 2, :identifier => 'something'
|
|
18
24
|
def edit(id, options = {})
|
|
19
25
|
params.accepts(:label, :network_group_id, :vlan, :identifier).validate!(options)
|
|
20
26
|
response = request(:put, "/settings/networks/#{id}.json", default_params(options))
|
|
@@ -22,19 +28,30 @@ module Squall
|
|
|
22
28
|
|
|
23
29
|
# Create a Network
|
|
24
30
|
#
|
|
25
|
-
# ====
|
|
31
|
+
# ==== Params
|
|
26
32
|
#
|
|
27
33
|
# * +options+ - Params for creating the Network
|
|
34
|
+
#
|
|
35
|
+
# ==== Options
|
|
36
|
+
#
|
|
37
|
+
# * +label*+
|
|
38
|
+
# * +vlan+
|
|
39
|
+
# * +identifier+
|
|
40
|
+
#
|
|
28
41
|
# ==== Example
|
|
29
42
|
#
|
|
30
43
|
# create :label => 'mynetwork', :network_group_id => 1, :vlan => 2, :identifier => 'something'
|
|
31
44
|
def create(options = {})
|
|
32
|
-
params.accepts(:
|
|
45
|
+
params.accepts(:vlan, :identifier).required(:label).validate!(options)
|
|
33
46
|
response = request(:post, '/settings/networks.json', default_params(options))
|
|
34
47
|
response.first[1]
|
|
35
48
|
end
|
|
36
49
|
|
|
37
50
|
# Delete a network
|
|
51
|
+
#
|
|
52
|
+
# ==== Params
|
|
53
|
+
#
|
|
54
|
+
# * +id*+ - ID of the network
|
|
38
55
|
def delete(id)
|
|
39
56
|
request(:delete, "/settings/networks/#{id}.json")
|
|
40
57
|
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module Squall
|
|
2
|
+
# OnApp NetworkZone
|
|
3
|
+
class NetworkZone < Base
|
|
4
|
+
# Returns a list of network zones
|
|
5
|
+
def list
|
|
6
|
+
response = request(:get, "/network_zones.json")
|
|
7
|
+
response.collect { |i| i['network_group'] }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Get the details for a network zone
|
|
11
|
+
#
|
|
12
|
+
# ==== Params
|
|
13
|
+
#
|
|
14
|
+
# * +id*+ - ID of the network zone
|
|
15
|
+
def show(id)
|
|
16
|
+
response = request(:get, "/network_zones/#{id}.json")
|
|
17
|
+
response['network_group']
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Updates an existing network zone
|
|
21
|
+
#
|
|
22
|
+
# ==== Params
|
|
23
|
+
#
|
|
24
|
+
# * +id*+ - ID of the network zone
|
|
25
|
+
#
|
|
26
|
+
# ==== Options
|
|
27
|
+
#
|
|
28
|
+
# See #create
|
|
29
|
+
def edit(id, options = {})
|
|
30
|
+
params.required(:label).validate!(options)
|
|
31
|
+
response = request(:put, "/network_zones/#{id}.json", :query => {:pack => options})
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Creates a new network zone
|
|
35
|
+
#
|
|
36
|
+
# ==== Options
|
|
37
|
+
#
|
|
38
|
+
# * +label*+ - Label for the network zone
|
|
39
|
+
def create(options = {})
|
|
40
|
+
params.required(:label).validate!(options)
|
|
41
|
+
response = request(:post, "/network_zones.json", :query => {:pack => options})
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Deletes an existing network zone
|
|
45
|
+
#
|
|
46
|
+
# ==== Params
|
|
47
|
+
#
|
|
48
|
+
# * +id*+ - ID of the network zone
|
|
49
|
+
def delete(id)
|
|
50
|
+
request(:delete, "/network_zones/#{id}.json")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Attach a network to a network zone
|
|
54
|
+
#
|
|
55
|
+
# ==== Params
|
|
56
|
+
#
|
|
57
|
+
# * +id*+ - ID of the network zone
|
|
58
|
+
# * +network_id+ - ID of the network
|
|
59
|
+
def attach(id, network_id)
|
|
60
|
+
request(:post, "/network_zones/#{id}/networks/#{network_id}/attach.json")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Detach a network from a network zone
|
|
64
|
+
#
|
|
65
|
+
# ==== Params
|
|
66
|
+
#
|
|
67
|
+
# * +id*+ - ID of the network zone
|
|
68
|
+
# * +network_id+ - ID of the network
|
|
69
|
+
def detach(id, network_id)
|
|
70
|
+
request(:post, "/network_zones/#{id}/networks/#{network_id}/detach.json")
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module Squall
|
|
2
|
+
# OnApp Payment
|
|
3
|
+
class Payment < Base
|
|
4
|
+
|
|
5
|
+
# Return a list of all payments
|
|
6
|
+
def list(user_id)
|
|
7
|
+
response = request(:get, "/users/#{user_id}/payments.json")
|
|
8
|
+
response.collect { |user| user['payment'] }
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Create a payment for a user
|
|
12
|
+
#
|
|
13
|
+
# ==== Params
|
|
14
|
+
#
|
|
15
|
+
# * +user_id*+ - ID of the user
|
|
16
|
+
# * +options+ - Params for creating the User
|
|
17
|
+
#
|
|
18
|
+
# ==== Options
|
|
19
|
+
#
|
|
20
|
+
# * +amount*+ - Amount of the payment
|
|
21
|
+
# * +invoice_number+ - Number of the invoice
|
|
22
|
+
#
|
|
23
|
+
# ==== Example
|
|
24
|
+
#
|
|
25
|
+
# create :amount => 500,
|
|
26
|
+
# :invoice_number => "01234",
|
|
27
|
+
def create(user_id, options={})
|
|
28
|
+
params.required(:amount).accepts(:invoice_number).validate!(options)
|
|
29
|
+
request(:post, "/users/#{user_id}/payments.json", default_params(options))
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Edit a payment
|
|
33
|
+
#
|
|
34
|
+
# ==== Params
|
|
35
|
+
#
|
|
36
|
+
# * +user_id*+ - ID of the user
|
|
37
|
+
# * +id*+ - ID of the payment
|
|
38
|
+
# * +options+ - Params for editing the payment
|
|
39
|
+
#
|
|
40
|
+
# ==== Options
|
|
41
|
+
#
|
|
42
|
+
# See #create
|
|
43
|
+
def edit(user_id, id, options={})
|
|
44
|
+
params.accepts(:amount, :invoice_number).validate!(options)
|
|
45
|
+
request(:put, "/users/#{user_id}/payments/#{id}.json", default_params(options))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Delete a payment
|
|
49
|
+
#
|
|
50
|
+
# ==== Params
|
|
51
|
+
#
|
|
52
|
+
# * +user_id*+ - ID of the user
|
|
53
|
+
# * +id*+ - ID of the payment
|
|
54
|
+
def delete(user_id, id)
|
|
55
|
+
request(:delete, "/users/#{user_id}/payments/#{id}.json")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
end
|
data/lib/squall/role.rb
CHANGED
|
@@ -1,33 +1,46 @@
|
|
|
1
1
|
module Squall
|
|
2
2
|
# OnApp Role
|
|
3
3
|
class Role < Base
|
|
4
|
-
# Return a list of
|
|
4
|
+
# Return a list of roles
|
|
5
5
|
def list
|
|
6
6
|
response = request(:get, '/roles.json')
|
|
7
7
|
response.collect { |role| role['role']}
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
# Returns a Hash of the given
|
|
10
|
+
# Returns a Hash of the given roles
|
|
11
|
+
#
|
|
12
|
+
# ==== Params
|
|
13
|
+
#
|
|
14
|
+
# * +id*+ - ID of the role
|
|
11
15
|
def show(id)
|
|
12
16
|
response = request(:get, "/roles/#{id}.json")
|
|
13
|
-
response
|
|
17
|
+
response["role"]
|
|
14
18
|
end
|
|
15
19
|
|
|
16
20
|
# Edit a Role
|
|
17
21
|
#
|
|
22
|
+
# ==== Params
|
|
23
|
+
#
|
|
24
|
+
# * +id*+ - ID of the role
|
|
25
|
+
# * +options+ - Params for editing the roles
|
|
26
|
+
#
|
|
18
27
|
# ==== Options
|
|
19
28
|
#
|
|
20
|
-
#
|
|
29
|
+
# See #create
|
|
30
|
+
#
|
|
21
31
|
# ==== Example
|
|
22
32
|
#
|
|
23
|
-
# edit :label => 'myrole', :
|
|
24
|
-
# edit :label => 'myrole', :permission => 1
|
|
33
|
+
# edit 1, :label => 'myrole', :permission_ids => [1,3]
|
|
25
34
|
def edit(id, options = {})
|
|
26
|
-
params.accepts(:label, :
|
|
35
|
+
params.accepts(:label, :permission_ids).validate!(options)
|
|
27
36
|
response = request(:put, "/roles/#{id}.json", default_params(options))
|
|
28
37
|
end
|
|
29
38
|
|
|
30
39
|
# Delete a Role
|
|
40
|
+
#
|
|
41
|
+
# ==== Params
|
|
42
|
+
#
|
|
43
|
+
# * +id*+ - ID of the role
|
|
31
44
|
def delete(id)
|
|
32
45
|
request(:delete, "/roles/#{id}.json")
|
|
33
46
|
end
|
|
@@ -40,17 +53,21 @@ module Squall
|
|
|
40
53
|
|
|
41
54
|
# Create a new Role
|
|
42
55
|
#
|
|
56
|
+
# ==== Params
|
|
57
|
+
#
|
|
58
|
+
# * +options+ - Params for creating the roles
|
|
59
|
+
#
|
|
43
60
|
# ==== Options
|
|
44
61
|
#
|
|
45
|
-
# * +
|
|
62
|
+
# * +label*+ - Label for the role
|
|
63
|
+
# * +permission_ids+ - An array of permission ids granted to the role.
|
|
46
64
|
#
|
|
47
65
|
# ==== Example
|
|
48
66
|
#
|
|
49
|
-
# create :label => '
|
|
67
|
+
# create :label => 'Admin'
|
|
50
68
|
def create(options = {})
|
|
51
|
-
params.required(:label
|
|
69
|
+
params.required(:label).accepts(:permission_ids).validate!(options)
|
|
52
70
|
response = request(:post, '/roles.json', default_params(options))
|
|
53
|
-
response.first[1]
|
|
54
71
|
end
|
|
55
72
|
end
|
|
56
73
|
end
|
data/lib/squall/statistic.rb
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
module Squall
|
|
2
2
|
# OnApp Statistic
|
|
3
3
|
class Statistic < Base
|
|
4
|
-
# Returns statitics for
|
|
5
|
-
def daily_stats
|
|
4
|
+
# Returns statitics for virtual machines
|
|
5
|
+
def daily_stats
|
|
6
6
|
response = request(:get, "/usage_statistics.json")
|
|
7
|
-
response.
|
|
7
|
+
response.collect {|s| s["vm_stat"]}
|
|
8
8
|
end
|
|
9
9
|
end
|
|
10
10
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module Squall
|
|
2
|
-
# All OnApp API classes subclass Base to get access to
|
|
2
|
+
# All OnApp API classes subclass Base to get access to
|
|
3
3
|
# HTTParty methods and other convenience methods
|
|
4
4
|
class Base
|
|
5
5
|
# Params instance
|
|
@@ -19,7 +19,11 @@ module Squall
|
|
|
19
19
|
self.class.basic_auth Squall::config[:username], Squall::config[:password]
|
|
20
20
|
self.class.format :json
|
|
21
21
|
self.class.headers 'Content-Type' => 'application/json'
|
|
22
|
-
|
|
22
|
+
if Squall::config[:debug]
|
|
23
|
+
self.class.debug_output
|
|
24
|
+
else
|
|
25
|
+
self.class.debug_output(nil)
|
|
26
|
+
end
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
# Returns a Params.new
|
|
@@ -83,8 +87,8 @@ module Squall
|
|
|
83
87
|
raise NoConfig, "Squall.config must be specified" if Squall.config.empty?
|
|
84
88
|
end
|
|
85
89
|
|
|
86
|
-
# Sets the default param container for request. It is derived from the
|
|
87
|
-
# class name. Given the class name *Sandwich* and a param *bread* the
|
|
90
|
+
# Sets the default param container for request. It is derived from the
|
|
91
|
+
# class name. Given the class name *Sandwich* and a param *bread* the
|
|
88
92
|
# resulting params would be 'bob[bread]=wheat'
|
|
89
93
|
def key_for_class
|
|
90
94
|
word = self.class.name.split("::").last.to_s.dup
|
|
File without changes
|
|
File without changes
|
data/lib/squall/template.rb
CHANGED
|
@@ -9,6 +9,10 @@ module Squall
|
|
|
9
9
|
|
|
10
10
|
# Make a Template public so that it can be downloaded
|
|
11
11
|
# via a HTTP url
|
|
12
|
+
#
|
|
13
|
+
# ==== Params
|
|
14
|
+
#
|
|
15
|
+
# * +id*+ - ID of template
|
|
12
16
|
def make_public(id)
|
|
13
17
|
response = request(:post, "/templates/#{id}/make_public.json")
|
|
14
18
|
response.first[1]
|
data/lib/squall/transaction.rb
CHANGED