squall 1.0.2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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