ocs 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ocs.rb +1 -0
- data/lib/ocs/resources/base.rb +2 -24
- data/lib/ocs/resources/dynamic_definers.rb +93 -66
- data/lib/ocs/resources/virtual_machine.rb +10 -1
- data/lib/ocs/response.rb +1 -1
- data/lib/ocs/version.rb +1 -1
- metadata +2 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c4206748407fad21d3dbacc44d8423e227f84f8
|
4
|
+
data.tar.gz: 38af688e8939ca50ee13c94ad9fbfdd04db2bee6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0aadd1303c2f8edb858d65e3ab034799b3b2def746a9133f0b57a31685eb94811b197dc49805f5bdce48f70187c4c001c2b10a44e3561d3872bcc6cb09ec74dc
|
7
|
+
data.tar.gz: 74b6f561ec1342187b3c69fb153f4ad8616687a473ba831260639be08bac2da06de9508526370ab5e732baa59743e5e5ed01ce702a607af1445086211840f969
|
data/lib/ocs.rb
CHANGED
data/lib/ocs/resources/base.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
module Ocs
|
2
2
|
module Resources
|
3
3
|
class Base
|
4
|
+
include DynamicDefiners
|
5
|
+
|
4
6
|
BOOLEAN = [TrueClass, FalseClass].freeze
|
5
7
|
|
6
8
|
class_attribute :delegations, instance_writer: false
|
7
9
|
self.delegations = {}
|
8
10
|
|
9
11
|
class << self
|
10
|
-
include DynamicDefiners
|
11
|
-
|
12
12
|
def all(client)
|
13
13
|
list(client)
|
14
14
|
end
|
@@ -85,28 +85,6 @@ module Ocs
|
|
85
85
|
|
86
86
|
private
|
87
87
|
|
88
|
-
def action_parameters(required_keys, optional_keys)
|
89
|
-
check_required_keys(required_keys)
|
90
|
-
parameters(required_keys + optional_keys)
|
91
|
-
end
|
92
|
-
|
93
|
-
def check_required_keys(required_keys)
|
94
|
-
required_keys.each do |key|
|
95
|
-
key = key[:attribute] if key.is_a?(Hash)
|
96
|
-
raise MissingKeyError.new("#{key} key is required") if public_send(key).nil?
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def parameters(keys)
|
101
|
-
keys.inject({}) do |params, key|
|
102
|
-
attribute_name = key.is_a?(Hash) ? key[:attribute] : key
|
103
|
-
request_key = key.is_a?(Hash) ? key[:as].to_s : key.to_s.delete("_")
|
104
|
-
value = public_send(attribute_name)
|
105
|
-
params[request_key] = value if value
|
106
|
-
params
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
88
|
def resource_class(class_name)
|
111
89
|
"ocs/resources/#{class_name}".camelize.constantize
|
112
90
|
end
|
@@ -1,93 +1,120 @@
|
|
1
1
|
module Ocs
|
2
2
|
module Resources
|
3
3
|
module DynamicDefiners
|
4
|
-
|
5
|
-
alias_method alias_name, original_name
|
6
|
-
alias_method :"#{alias_name}=", :"#{original_name}="
|
7
|
-
end
|
4
|
+
extend ActiveSupport::Concern
|
8
5
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
send_and_update(api, parameters)
|
6
|
+
module ClassMethods
|
7
|
+
def alias_attribute(alias_name, original_name)
|
8
|
+
alias_method alias_name, original_name
|
9
|
+
alias_method :"#{alias_name}=", :"#{original_name}="
|
14
10
|
end
|
15
11
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
def define_action(action_name, required: [], optional: [], api_name: nil)
|
13
|
+
define_method(action_name) do |special_parameters = {}|
|
14
|
+
api = api_name || "#{action_name}#{self.class.name}"
|
15
|
+
parameters = action_parameters(required, optional).merge(special_parameters)
|
16
|
+
send_and_update(api, parameters)
|
17
|
+
end
|
20
18
|
|
21
|
-
|
22
|
-
|
23
|
-
unless [*type].any? { |t| value.is_a?(t) }
|
24
|
-
fail AttributeTypeMismatch.new(
|
25
|
-
"#{attribute_name} needs to be a #{[*type].join(" or ")}"
|
26
|
-
)
|
19
|
+
define_method(:"#{action_name}!") do |special_parameters = {}|
|
20
|
+
send(action_name) || fail(@error)
|
27
21
|
end
|
28
|
-
instance_variable_set(:"@#{attribute_name}", value)
|
29
22
|
end
|
30
23
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
instance.public_send(:"#{as}=", value)
|
41
|
-
end
|
42
|
-
delegations[attribute_name] = writer_method_name
|
24
|
+
def define_attribute(attribute_name, type:)
|
25
|
+
define_method(:"#{attribute_name}=") do |value|
|
26
|
+
unless [*type].any? { |t| value.is_a?(t) }
|
27
|
+
fail AttributeTypeMismatch.new(
|
28
|
+
"#{attribute_name} needs to be a #{[*type].join(" or ")}"
|
29
|
+
)
|
30
|
+
end
|
31
|
+
instance_variable_set(:"@#{attribute_name}", value)
|
32
|
+
end
|
43
33
|
|
44
|
-
|
45
|
-
instance = public_send(to)
|
46
|
-
instance && instance.public_send(as)
|
34
|
+
attr_reader attribute_name
|
47
35
|
end
|
48
|
-
end
|
49
36
|
|
50
|
-
|
51
|
-
|
52
|
-
|
37
|
+
def delegate_attribute(attribute_name, to:, as:)
|
38
|
+
writer_method_name = :"#{to}_#{as}="
|
39
|
+
define_method(writer_method_name) do |value|
|
40
|
+
instance =
|
41
|
+
public_send(to) ||
|
42
|
+
public_send(:"#{to}=", resource_class(to).new(client))
|
43
|
+
instance.public_send(:"#{as}=", value)
|
44
|
+
end
|
45
|
+
delegations[attribute_name] = writer_method_name
|
53
46
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
unless value.instance_of?(klass)
|
58
|
-
fail AttributeClassMismatch.new(
|
59
|
-
"#{attribute_name} needs to be an instance of #{klass}"
|
60
|
-
)
|
47
|
+
define_method(:"#{to}_#{as}") do
|
48
|
+
instance = public_send(to)
|
49
|
+
instance && instance.public_send(as)
|
61
50
|
end
|
62
|
-
instance_variable_set(:"@#{attribute_name}", value)
|
63
51
|
end
|
64
52
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
def has_many(attribute_name)
|
69
|
-
define_method(:"#{attribute_name}=") do |values|
|
70
|
-
unless values.is_a?(Array)
|
71
|
-
fail AttributeTypeMismatch.new("#{attribute_name} needs to be an Array")
|
72
|
-
end
|
53
|
+
def delegate_attributes(attribute_name, to:)
|
54
|
+
delegations[attribute_name] = :"#{to}="
|
55
|
+
end
|
73
56
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
value
|
79
|
-
when Hash
|
80
|
-
klass.new(client, value)
|
81
|
-
else
|
57
|
+
def has_one(attribute_name)
|
58
|
+
define_method(:"#{attribute_name}=") do |value|
|
59
|
+
klass = resource_class(attribute_name)
|
60
|
+
unless value.instance_of?(klass)
|
82
61
|
fail AttributeClassMismatch.new(
|
83
|
-
"
|
62
|
+
"#{attribute_name} needs to be an instance of #{klass}"
|
84
63
|
)
|
85
64
|
end
|
65
|
+
instance_variable_set(:"@#{attribute_name}", value)
|
86
66
|
end
|
87
|
-
|
67
|
+
|
68
|
+
attr_reader attribute_name
|
69
|
+
end
|
70
|
+
|
71
|
+
def has_many(attribute_name)
|
72
|
+
define_method(:"#{attribute_name}=") do |values|
|
73
|
+
unless values.is_a?(Array)
|
74
|
+
fail AttributeTypeMismatch.new("#{attribute_name} needs to be an Array")
|
75
|
+
end
|
76
|
+
|
77
|
+
klass = resource_class(attribute_name.to_s.singularize)
|
78
|
+
instances = values.map do |value|
|
79
|
+
case value
|
80
|
+
when klass
|
81
|
+
value
|
82
|
+
when Hash
|
83
|
+
klass.new(client, value)
|
84
|
+
else
|
85
|
+
fail AttributeClassMismatch.new(
|
86
|
+
"Elements of #{attribute_name} need to be instances of #{klass} or Hash"
|
87
|
+
)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
instance_variable_set(:"@#{attribute_name}", instances)
|
91
|
+
end
|
92
|
+
|
93
|
+
attr_reader attribute_name
|
88
94
|
end
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
def action_parameters(required_keys, optional_keys)
|
100
|
+
check_required_keys(required_keys)
|
101
|
+
parameters(required_keys + optional_keys)
|
102
|
+
end
|
89
103
|
|
90
|
-
|
104
|
+
def check_required_keys(required_keys)
|
105
|
+
required_keys.each do |key|
|
106
|
+
key = key[:attribute] if key.is_a?(Hash)
|
107
|
+
raise MissingKeyError.new("#{key} key is required") if public_send(key).nil?
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def parameters(keys)
|
112
|
+
keys.each_with_object({}) do |key, params|
|
113
|
+
attribute_name = key.is_a?(Hash) ? key[:attribute] : key
|
114
|
+
request_key = key.is_a?(Hash) ? key[:as].to_s : key.to_s.delete("_")
|
115
|
+
value = public_send(attribute_name)
|
116
|
+
params[request_key] = value if value
|
117
|
+
end
|
91
118
|
end
|
92
119
|
end
|
93
120
|
end
|
@@ -47,6 +47,7 @@ module Ocs
|
|
47
47
|
define_attribute :rootdevicetype, type: String
|
48
48
|
#define_attribute :servicestate
|
49
49
|
define_attribute :state, type: String
|
50
|
+
define_attribute :userdata, type: String
|
50
51
|
#define_attribute :vgpu
|
51
52
|
|
52
53
|
delegate_attribute :account, to: :account, as: :name
|
@@ -85,7 +86,7 @@ module Ocs
|
|
85
86
|
|
86
87
|
define_action :deploy,
|
87
88
|
required: %i(service_offering_id template_id zone_id),
|
88
|
-
optional: %i(displayname name displayvm) + [
|
89
|
+
optional: %i(displayname name displayvm userdata) + [
|
89
90
|
{attribute: :group_name, as: :group},
|
90
91
|
{attribute: :ssh_key_pair_name, as: :keypair}
|
91
92
|
]
|
@@ -119,6 +120,14 @@ module Ocs
|
|
119
120
|
parameters = {nicid: nic.id, virtualmachineid: id}
|
120
121
|
send_and_update("removeNicFromVirtualMachine", parameters)
|
121
122
|
end
|
123
|
+
|
124
|
+
attr_reader :raw_userdata
|
125
|
+
|
126
|
+
def raw_userdata=(raw_userdata)
|
127
|
+
@raw_userdata = raw_userdata
|
128
|
+
raw_userdata << "\n" until raw_userdata.bytesize % 3 == 0
|
129
|
+
self.userdata = Base64.strict_encode64(raw_userdata)
|
130
|
+
end
|
122
131
|
end
|
123
132
|
end
|
124
133
|
end
|
data/lib/ocs/response.rb
CHANGED
data/lib/ocs/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ocs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nownabe
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -199,4 +199,3 @@ signing_key:
|
|
199
199
|
specification_version: 4
|
200
200
|
summary: Ocs is an objective CloudStack API client.
|
201
201
|
test_files: []
|
202
|
-
has_rdoc:
|