ocs 0.0.4 → 0.0.5
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 +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:
|