rubix 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/rubix/connection.rb +2 -2
- data/lib/rubix/models/application.rb +27 -30
- data/lib/rubix/models/host.rb +49 -41
- data/lib/rubix/models/host_group.rb +20 -19
- data/lib/rubix/models/item.rb +23 -29
- data/lib/rubix/models/model.rb +150 -41
- data/lib/rubix/models/template.rb +23 -30
- data/lib/rubix/models/user_macro.rb +39 -18
- data/spec/requests/application_request_spec.rb +25 -21
- data/spec/requests/host_group_request_spec.rb +18 -10
- data/spec/requests/host_request_spec.rb +33 -40
- data/spec/requests/item_request_spec.rb +37 -40
- data/spec/requests/template_request_spec.rb +24 -24
- data/spec/requests/user_macro_request_spec.rb +20 -13
- data/spec/support/integration_helper.rb +37 -0
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.8
|
data/lib/rubix/connection.rb
CHANGED
@@ -10,7 +10,7 @@ module Rubix
|
|
10
10
|
|
11
11
|
include Logs
|
12
12
|
|
13
|
-
attr_reader :uri, :server, :auth, :request_id, :username, :password
|
13
|
+
attr_reader :uri, :server, :auth, :request_id, :username, :password, :last_response
|
14
14
|
|
15
15
|
def initialize uri_or_string, username=nil, password=nil
|
16
16
|
self.uri = uri_or_string
|
@@ -62,7 +62,7 @@ module Rubix
|
|
62
62
|
when response.code.to_i >= 500
|
63
63
|
raise ConnectionError.new("Too many consecutive failed requests (#{max_attempts}) to the Zabbix API at (#{uri}).")
|
64
64
|
else
|
65
|
-
Response.new(response)
|
65
|
+
@last_response = Response.new(response)
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
@@ -16,13 +16,37 @@ module Rubix
|
|
16
16
|
|
17
17
|
attr_accessor :name
|
18
18
|
|
19
|
-
|
20
|
-
|
19
|
+
#
|
20
|
+
# == Associations ==
|
21
|
+
#
|
22
|
+
|
23
|
+
include Associations::BelongsToHost
|
24
|
+
|
25
|
+
#
|
26
|
+
# == Requests ==
|
27
|
+
#
|
28
|
+
|
29
|
+
def create_params
|
30
|
+
{:name => name, :hostid => host_id}
|
21
31
|
end
|
22
32
|
|
33
|
+
def update_params
|
34
|
+
{ id_field => id, :name => name, :hosts => {:hostid => host_id}}
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.find_params options={}
|
38
|
+
super().merge({
|
39
|
+
:hostids => [options[:host_id]],
|
40
|
+
:filter => {
|
41
|
+
:name => options[:name],
|
42
|
+
id_field => options[:id]
|
43
|
+
}
|
44
|
+
})
|
45
|
+
end
|
46
|
+
|
23
47
|
def self.build app
|
24
48
|
params = {
|
25
|
-
:id => app[
|
49
|
+
:id => app[id_field].to_i,
|
26
50
|
:name => app['name']
|
27
51
|
}
|
28
52
|
|
@@ -35,32 +59,5 @@ module Rubix
|
|
35
59
|
new(params)
|
36
60
|
end
|
37
61
|
|
38
|
-
def self.id_field
|
39
|
-
'applicationid'
|
40
|
-
end
|
41
|
-
|
42
|
-
|
43
|
-
#
|
44
|
-
# == Associations ==
|
45
|
-
#
|
46
|
-
|
47
|
-
include Associations::BelongsToHost
|
48
|
-
|
49
|
-
#
|
50
|
-
# == CRUD ==
|
51
|
-
#
|
52
|
-
|
53
|
-
def create_request
|
54
|
-
request('application.create', 'name' => name, 'hostid' => host_id)
|
55
|
-
end
|
56
|
-
|
57
|
-
def update_request
|
58
|
-
request('application.update', 'applicationid' => id, 'name' => name, 'hosts' => {'hostid' => host_id})
|
59
|
-
end
|
60
|
-
|
61
|
-
def destroy_request
|
62
|
-
request('application.delete', [id])
|
63
|
-
end
|
64
|
-
|
65
62
|
end
|
66
63
|
end
|
data/lib/rubix/models/host.rb
CHANGED
@@ -33,26 +33,6 @@ module Rubix
|
|
33
33
|
self.user_macros = properties[:user_macros]
|
34
34
|
end
|
35
35
|
|
36
|
-
def self.find_request options={}
|
37
|
-
request('host.get', 'filter' => {'host' => options[:name], 'hostid' => options[:id]}, 'select_groups' => 'refer', 'selectParentTemplates' => 'refer', 'select_profile' => 'refer', 'select_macros' => 'extend', 'output' => 'extend')
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.build host
|
41
|
-
new({
|
42
|
-
:id => host['hostid'].to_i,
|
43
|
-
:name => host['host'],
|
44
|
-
:host_group_ids => host['groups'].map { |group| group['groupid'].to_i },
|
45
|
-
:template_ids => host['parentTemplates'].map { |template| (template['templateid'] || template['hostid']).to_i },
|
46
|
-
:user_macros => host['macros'].map { |um| UserMacro.new(:host_id => um['hostid'].to_i, :id => um['hostmacroid'], :value => um['value'], :macro => um['macro']) },
|
47
|
-
:profile => host['profile'],
|
48
|
-
:port => host['port']
|
49
|
-
})
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.id_field
|
53
|
-
'hostid'
|
54
|
-
end
|
55
|
-
|
56
36
|
#
|
57
37
|
# == Associations ==
|
58
38
|
#
|
@@ -71,37 +51,40 @@ module Rubix
|
|
71
51
|
end
|
72
52
|
|
73
53
|
#
|
74
|
-
# ==
|
54
|
+
# == Requests ==
|
75
55
|
#
|
76
56
|
|
77
|
-
def
|
78
|
-
{
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
57
|
+
def create_params
|
58
|
+
{
|
59
|
+
:host => name,
|
60
|
+
:groups => host_group_params,
|
61
|
+
:templates => template_params,
|
62
|
+
:macros => user_macro_params
|
63
|
+
}.tap do |hp|
|
64
|
+
hp[:profile] = profile if profile
|
65
|
+
hp[:status] = status if status
|
83
66
|
|
84
67
|
if ip
|
85
|
-
hp[
|
86
|
-
hp[
|
87
|
-
hp[
|
68
|
+
hp[:ip] = ip
|
69
|
+
hp[:useip] = true
|
70
|
+
hp[:port] = port || self.class::DEFAULT_PORT
|
88
71
|
else
|
89
|
-
hp[
|
72
|
+
hp[:ip] = self.class::BLANK_IP
|
90
73
|
end
|
91
|
-
|
92
74
|
end
|
93
75
|
end
|
94
76
|
|
95
|
-
def
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
77
|
+
def update_params
|
78
|
+
create_params.tap do |cp|
|
79
|
+
cp.delete(:groups)
|
80
|
+
cp.delete(:templates)
|
81
|
+
cp.delete(:macros)
|
82
|
+
cp[id_field] = id
|
83
|
+
end
|
101
84
|
end
|
102
85
|
|
103
86
|
def before_update
|
104
|
-
response = request('host.massUpdate', {
|
87
|
+
response = request('host.massUpdate', { :groups => host_group_params, :templates => template_params, :macros => user_macro_params, :hosts => [{id_field => id}]})
|
105
88
|
if response.has_data?
|
106
89
|
true
|
107
90
|
else
|
@@ -110,8 +93,33 @@ module Rubix
|
|
110
93
|
end
|
111
94
|
end
|
112
95
|
|
113
|
-
def
|
114
|
-
|
96
|
+
def destroy_params
|
97
|
+
[{id_field => id}]
|
98
|
+
end
|
99
|
+
|
100
|
+
def before_destroy
|
101
|
+
return true if user_macros.nil? || user_macros.empty?
|
102
|
+
user_macros.map { |um| um.destroy }.all?
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.build host
|
106
|
+
new({
|
107
|
+
:id => host[id_field].to_i,
|
108
|
+
:name => host['host'],
|
109
|
+
:host_group_ids => host['groups'].map { |group| group['groupid'].to_i },
|
110
|
+
:template_ids => host['parentTemplates'].map { |template| (template['templateid'] || template[id_field]).to_i },
|
111
|
+
:user_macros => host['macros'].map { |um| UserMacro.new(:host_id => um[id_field].to_i, :id => um['hostmacroid'], :value => um['value'], :macro => um['macro']) },
|
112
|
+
:profile => host['profile'],
|
113
|
+
:port => host['port']
|
114
|
+
})
|
115
|
+
end
|
116
|
+
|
117
|
+
def self.get_params
|
118
|
+
super().merge({:select_groups => :refer, :selectParentTemplates => :refer, :select_profile => :refer, :select_macros => :extend})
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.find_params options={}
|
122
|
+
get_params.merge(:filter => {:host => options[:name], id_field => options[:id]})
|
115
123
|
end
|
116
124
|
|
117
125
|
end
|
@@ -16,17 +16,6 @@ module Rubix
|
|
16
16
|
|
17
17
|
attr_accessor :name
|
18
18
|
|
19
|
-
def self.find_request options={}
|
20
|
-
request('hostgroup.get', 'filter' => {'groupid' => options[:id], 'name' => options[:name]}, 'select_hosts' => 'refer', 'output' => 'extend')
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.build host_group
|
24
|
-
new({
|
25
|
-
:id => host_group['groupid'].to_i,
|
26
|
-
:name => host_group['name'],
|
27
|
-
:host_ids => host_group['hosts'].map { |host_info| host_info['hostid'].to_i }
|
28
|
-
})
|
29
|
-
end
|
30
19
|
|
31
20
|
def self.id_field
|
32
21
|
'groupid'
|
@@ -39,20 +28,32 @@ module Rubix
|
|
39
28
|
include Associations::HasManyHosts
|
40
29
|
|
41
30
|
#
|
42
|
-
# ==
|
31
|
+
# == Requests ==
|
43
32
|
#
|
44
|
-
|
45
|
-
def
|
46
|
-
|
33
|
+
|
34
|
+
def create_params
|
35
|
+
{:name => name}
|
47
36
|
end
|
48
37
|
|
49
|
-
def
|
50
|
-
|
38
|
+
def destroy_params
|
39
|
+
[{id_field => id}]
|
51
40
|
end
|
52
41
|
|
53
|
-
def
|
54
|
-
|
42
|
+
def self.get_params
|
43
|
+
super().merge(:select_hosts => :refer)
|
55
44
|
end
|
56
45
|
|
46
|
+
def self.find_params options={}
|
47
|
+
get_params.merge(:filter => {id_field => options[:id], :name => options[:name]})
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.build host_group
|
51
|
+
new({
|
52
|
+
:id => host_group[id_field].to_i,
|
53
|
+
:name => host_group['name'],
|
54
|
+
:host_ids => host_group['hosts'].map { |host_info| host_info['hostid'].to_i }
|
55
|
+
})
|
56
|
+
end
|
57
|
+
|
57
58
|
end
|
58
59
|
end
|
data/lib/rubix/models/item.rb
CHANGED
@@ -66,25 +66,6 @@ module Rubix
|
|
66
66
|
def resource_name
|
67
67
|
"#{self.class.resource_name} #{self.key || self.id}"
|
68
68
|
end
|
69
|
-
|
70
|
-
def self.find_request options={}
|
71
|
-
request('item.get', 'hostids' => [options[:host_id]], 'filter' => {'key_' => options[:key], 'id' => options[:id]}, "select_applications" => "refer", "output" => "extend")
|
72
|
-
end
|
73
|
-
|
74
|
-
def self.build item
|
75
|
-
new({
|
76
|
-
:id => item['itemid'].to_i,
|
77
|
-
:host_id => item['hostid'].to_i,
|
78
|
-
:description => item['description'],
|
79
|
-
:value_type => item['value_type'] ? self::VALUE_NAMES[item['value_type'].to_i] : :character,
|
80
|
-
:application_ids => (item['applications'] || []).map { |app| app['applicationid'].to_i },
|
81
|
-
:key => item['key_']
|
82
|
-
})
|
83
|
-
end
|
84
|
-
|
85
|
-
def self.id_field
|
86
|
-
'itemid'
|
87
|
-
end
|
88
69
|
|
89
70
|
def value_type= vt
|
90
71
|
if vt.nil? || vt.to_s.empty? || !self.class::VALUE_CODES.include?(vt.to_sym)
|
@@ -102,10 +83,10 @@ module Rubix
|
|
102
83
|
include Associations::HasManyApplications
|
103
84
|
|
104
85
|
#
|
105
|
-
# ==
|
86
|
+
# == Requests ==
|
106
87
|
#
|
107
88
|
|
108
|
-
def
|
89
|
+
def create_params
|
109
90
|
{
|
110
91
|
:hostid => host_id,
|
111
92
|
:description => (description || 'Unknown'),
|
@@ -116,17 +97,30 @@ module Rubix
|
|
116
97
|
p[:applications] = application_ids if application_ids
|
117
98
|
end
|
118
99
|
end
|
119
|
-
|
120
|
-
def create_request
|
121
|
-
request('item.create', params)
|
122
|
-
end
|
123
100
|
|
124
|
-
def
|
125
|
-
|
101
|
+
def self.get_params
|
102
|
+
super().merge(:select_applications => :refer)
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.find_params options={}
|
106
|
+
super().merge({
|
107
|
+
:hostids => [options[:host_id]],
|
108
|
+
:filter => {
|
109
|
+
:key_ => options[:key],
|
110
|
+
:id => options[:id]
|
111
|
+
}
|
112
|
+
})
|
126
113
|
end
|
127
114
|
|
128
|
-
def
|
129
|
-
|
115
|
+
def self.build item
|
116
|
+
new({
|
117
|
+
:id => item[id_field].to_i,
|
118
|
+
:host_id => item['hostid'].to_i,
|
119
|
+
:description => item['description'],
|
120
|
+
:value_type => item['value_type'] ? self::VALUE_NAMES[item['value_type'].to_i] : :character,
|
121
|
+
:application_ids => (item['applications'] || []).map { |app| app['applicationid'].to_i },
|
122
|
+
:key => item['key_']
|
123
|
+
})
|
130
124
|
end
|
131
125
|
|
132
126
|
end
|
data/lib/rubix/models/model.rb
CHANGED
@@ -9,22 +9,46 @@ module Rubix
|
|
9
9
|
extend Logs
|
10
10
|
include Logs
|
11
11
|
|
12
|
+
#
|
13
|
+
# == Identifiers ==
|
14
|
+
#
|
15
|
+
|
16
|
+
# This is the name of the resource as used inside Rubix -- Host,
|
17
|
+
# HostGroup, UserMacro, &c.
|
12
18
|
def self.resource_name
|
13
19
|
self.to_s.split('::').last
|
14
20
|
end
|
15
21
|
|
22
|
+
# This is the name of *this* resource instance, using this
|
23
|
+
# object's 'name' property if possible.
|
16
24
|
def resource_name
|
17
25
|
"#{self.class.resource_name} #{respond_to?(:name) ? self.name : self.id}"
|
18
26
|
end
|
27
|
+
|
28
|
+
# This is the name of the resource as used by Zabbix -- host,
|
29
|
+
# hostgroup, usermacro, &c.
|
30
|
+
def self.zabbix_name
|
31
|
+
resource_name.downcase
|
32
|
+
end
|
33
|
+
|
34
|
+
# This is the name of the id field returned in Zabbix responses --
|
35
|
+
# hostid, groupid, hostmacroid, &c.
|
36
|
+
def self.id_field
|
37
|
+
"#{zabbix_name}id"
|
38
|
+
end
|
39
|
+
|
40
|
+
def id_field
|
41
|
+
self.class.id_field
|
42
|
+
end
|
43
|
+
|
44
|
+
#
|
45
|
+
# == Initialization ==
|
46
|
+
#
|
19
47
|
|
20
48
|
def initialize properties={}
|
21
49
|
@properties = properties
|
22
50
|
@id = properties[:id]
|
23
51
|
end
|
24
|
-
|
25
|
-
def new_record?
|
26
|
-
@id.nil?
|
27
|
-
end
|
28
52
|
|
29
53
|
def request method, params
|
30
54
|
self.class.request(method, params)
|
@@ -34,77 +58,84 @@ module Rubix
|
|
34
58
|
Rubix.connection && Rubix.connection.request(method, params)
|
35
59
|
end
|
36
60
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
# a successful but empty response means it wasn't found
|
44
|
-
else
|
45
|
-
error("Error finding #{resource_name} using #{options.inspect}: #{response.error_message}")
|
46
|
-
nil
|
47
|
-
end
|
61
|
+
#
|
62
|
+
# == CRUD ==
|
63
|
+
#
|
64
|
+
|
65
|
+
def new_record?
|
66
|
+
@id.nil?
|
48
67
|
end
|
49
68
|
|
50
|
-
def
|
51
|
-
|
52
|
-
case
|
53
|
-
when response.has_data?
|
54
|
-
build(response.result.first)
|
55
|
-
when response.success?
|
56
|
-
# doesn't exist
|
57
|
-
obj = new(options)
|
58
|
-
if obj.save
|
59
|
-
obj
|
60
|
-
else
|
61
|
-
false
|
62
|
-
end
|
63
|
-
else
|
64
|
-
error("Error creating #{resource_name} using #{options.inspect}: #{response.error_message}")
|
65
|
-
false
|
66
|
-
end
|
69
|
+
def save
|
70
|
+
new_record? ? create : update
|
67
71
|
end
|
68
|
-
|
72
|
+
|
69
73
|
def validate
|
70
74
|
true
|
71
75
|
end
|
72
|
-
|
76
|
+
|
77
|
+
def create_params
|
78
|
+
{}
|
79
|
+
end
|
80
|
+
|
81
|
+
def create_request
|
82
|
+
request("#{self.class.zabbix_name}.create", create_params)
|
83
|
+
end
|
84
|
+
|
73
85
|
def create
|
74
86
|
return false unless validate
|
75
87
|
response = create_request
|
76
88
|
if response.has_data?
|
77
|
-
@id = response.result[
|
89
|
+
@id = response.result[id_field + 's'].first.to_i
|
78
90
|
info("Created #{resource_name}")
|
91
|
+
true
|
79
92
|
else
|
80
93
|
error("Error creating #{resource_name}: #{response.error_message}")
|
81
94
|
return false
|
82
95
|
end
|
83
96
|
end
|
84
97
|
|
98
|
+
def update_params
|
99
|
+
create_params.merge({id_field => id})
|
100
|
+
end
|
101
|
+
|
102
|
+
def update_request
|
103
|
+
request("#{self.class.zabbix_name}.update", update_params)
|
104
|
+
end
|
105
|
+
|
85
106
|
def update
|
86
107
|
return false unless validate
|
87
108
|
return create if new_record?
|
88
109
|
return false unless before_update
|
89
110
|
response = update_request
|
90
|
-
|
111
|
+
case
|
112
|
+
when response.has_data? && response.result.values.first.map(&:to_i).include?(id)
|
91
113
|
info("Updated #{resource_name}")
|
114
|
+
true
|
115
|
+
when response.has_data?
|
116
|
+
error("No error, but failed to update #{resource_name}")
|
117
|
+
false
|
92
118
|
else
|
93
119
|
error("Error updating #{resource_name}: #{response.error_message}")
|
94
|
-
|
120
|
+
false
|
95
121
|
end
|
96
122
|
end
|
97
123
|
|
98
124
|
def before_update
|
99
125
|
true
|
100
126
|
end
|
101
|
-
|
102
|
-
def
|
103
|
-
|
127
|
+
|
128
|
+
def destroy_params
|
129
|
+
[id]
|
104
130
|
end
|
105
131
|
|
132
|
+
def destroy_request
|
133
|
+
request("#{self.class.zabbix_name}.delete", destroy_params)
|
134
|
+
end
|
135
|
+
|
106
136
|
def destroy
|
107
|
-
return
|
137
|
+
return true if new_record?
|
138
|
+
return false unless before_destroy
|
108
139
|
response = destroy_request
|
109
140
|
case
|
110
141
|
when response.has_data? && response.result.values.first.first.to_i == id
|
@@ -119,5 +150,83 @@ module Rubix
|
|
119
150
|
end
|
120
151
|
end
|
121
152
|
|
153
|
+
def before_destroy
|
154
|
+
true
|
155
|
+
end
|
156
|
+
|
157
|
+
#
|
158
|
+
# == Index ==
|
159
|
+
#
|
160
|
+
|
161
|
+
def self.get_params
|
162
|
+
{ :output => :extend }
|
163
|
+
end
|
164
|
+
|
165
|
+
def self.all_params options={}
|
166
|
+
get_params.merge(options)
|
167
|
+
end
|
168
|
+
|
169
|
+
def self.all_request options={}
|
170
|
+
request("#{zabbix_name}.get", all_params(options))
|
171
|
+
end
|
172
|
+
|
173
|
+
def self.all options={}
|
174
|
+
response = all_request(options)
|
175
|
+
if response.has_data?
|
176
|
+
response.result.map { |obj_data| build(obj_data) }
|
177
|
+
else
|
178
|
+
error("Error listing all #{resource_name}s: #{response.error_message}") unless response.success?
|
179
|
+
[]
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
def self.each &block
|
184
|
+
all.each(&block)
|
185
|
+
end
|
186
|
+
|
187
|
+
#
|
188
|
+
# == Show ==
|
189
|
+
#
|
190
|
+
|
191
|
+
def self.find_params options={}
|
192
|
+
get_params.merge(options)
|
193
|
+
end
|
194
|
+
|
195
|
+
def self.find_request options={}
|
196
|
+
request("#{zabbix_name}.get", find_params(options))
|
197
|
+
end
|
198
|
+
|
199
|
+
def self.find options={}
|
200
|
+
response = find_request(options)
|
201
|
+
case
|
202
|
+
when response.has_data?
|
203
|
+
build(response.result.first)
|
204
|
+
when response.success?
|
205
|
+
# a successful but empty response means it wasn't found
|
206
|
+
else
|
207
|
+
error("Error finding #{resource_name} using #{options.inspect}: #{response.error_message}")
|
208
|
+
nil
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
def self.find_or_create options={}
|
213
|
+
response = find_request(options)
|
214
|
+
case
|
215
|
+
when response.has_data?
|
216
|
+
build(response.result.first)
|
217
|
+
when response.success?
|
218
|
+
# doesn't exist
|
219
|
+
obj = new(options)
|
220
|
+
if obj.save
|
221
|
+
obj
|
222
|
+
else
|
223
|
+
false
|
224
|
+
end
|
225
|
+
else
|
226
|
+
error("Error creating #{resource_name} using #{options.inspect}: #{response.error_message}")
|
227
|
+
false
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
122
231
|
end
|
123
232
|
end
|
@@ -19,30 +19,6 @@ module Rubix
|
|
19
19
|
self.host_groups = properties[:host_groups]
|
20
20
|
end
|
21
21
|
|
22
|
-
def self.find_request options={}
|
23
|
-
params = {'select_groups' => 'refer', 'select_hosts' => 'refer', 'output' => 'extend'}
|
24
|
-
case
|
25
|
-
when options[:id]
|
26
|
-
params['templateids'] = [options[:id]]
|
27
|
-
when options[:name]
|
28
|
-
params['filter'] = { 'host' => options[:name] }
|
29
|
-
end
|
30
|
-
request('template.get', params)
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.build template
|
34
|
-
new({
|
35
|
-
:id => (template['templateid'] || template['hostid']).to_i,
|
36
|
-
:name => template['host'],
|
37
|
-
:host_ids => template['hosts'].map { |host_info| host_info['hostid'].to_i },
|
38
|
-
:host_group_ids => template['groups'].map { |group| group['groupid'].to_i }
|
39
|
-
})
|
40
|
-
end
|
41
|
-
|
42
|
-
def self.id_field
|
43
|
-
'templateid'
|
44
|
-
end
|
45
|
-
|
46
22
|
#
|
47
23
|
# == Validation ==
|
48
24
|
#
|
@@ -63,16 +39,33 @@ module Rubix
|
|
63
39
|
# == CRUD ==
|
64
40
|
#
|
65
41
|
|
66
|
-
def
|
67
|
-
|
42
|
+
def create_params
|
43
|
+
{:host => name, :groups => host_group_params}
|
68
44
|
end
|
69
45
|
|
70
|
-
def
|
71
|
-
|
46
|
+
def update_params
|
47
|
+
[create_params.merge(id_field => id)]
|
72
48
|
end
|
73
49
|
|
74
|
-
def
|
75
|
-
|
50
|
+
def destroy_params
|
51
|
+
[{id_field => id}]
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.get_params
|
55
|
+
super().merge(:select_groups => :refer, :select_hosts => :refer)
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.find_params options={}
|
59
|
+
get_params.merge(:filter => {:host => options[:name], :hostid => options[:id]})
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.build template
|
63
|
+
new({
|
64
|
+
:id => (template[id_field] || template['hostid']).to_i,
|
65
|
+
:name => template['host'],
|
66
|
+
:host_ids => template['hosts'].map { |host_info| host_info['hostid'].to_i },
|
67
|
+
:host_group_ids => template['groups'].map { |group| group['groupid'].to_i }
|
68
|
+
})
|
76
69
|
end
|
77
70
|
|
78
71
|
end
|
@@ -6,30 +6,24 @@ module Rubix
|
|
6
6
|
# == Properties & Finding ==
|
7
7
|
#
|
8
8
|
|
9
|
-
attr_accessor :
|
10
|
-
|
9
|
+
attr_accessor :value
|
10
|
+
|
11
11
|
def initialize properties={}
|
12
12
|
super(properties)
|
13
|
-
|
13
|
+
self.name = properties[:name] || self.class.unmacro_name(properties[:macro])
|
14
14
|
@value = properties[:value]
|
15
15
|
|
16
16
|
self.host = properties[:host]
|
17
17
|
self.host_id = properties[:host_id]
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
20
|
+
attr_reader :name
|
21
|
+
def name= n
|
22
|
+
return if n.nil? || n.empty?
|
23
|
+
raise ValidationError.new("Cannot change the name of a UserMacro once it's created.") if @name && (!new_record?)
|
24
|
+
@name = n
|
22
25
|
end
|
23
26
|
|
24
|
-
def self.build macro
|
25
|
-
new({
|
26
|
-
:id => macro['hostmacroid'].to_i,
|
27
|
-
:name => unmacro_name(macro['macro']),
|
28
|
-
:value => macro['value'],
|
29
|
-
:host_id => macro['hostid']
|
30
|
-
})
|
31
|
-
end
|
32
|
-
|
33
27
|
def self.unmacro_name name
|
34
28
|
(name || '').gsub(/^\{\$/, '').gsub(/\}$/, '').upcase
|
35
29
|
end
|
@@ -46,6 +40,10 @@ module Rubix
|
|
46
40
|
'hostmacroid'
|
47
41
|
end
|
48
42
|
|
43
|
+
def resource_name
|
44
|
+
"#{self.class.resource_name} #{self.name || self.id}"
|
45
|
+
end
|
46
|
+
|
49
47
|
#
|
50
48
|
# == Associations ==
|
51
49
|
#
|
@@ -55,25 +53,48 @@ module Rubix
|
|
55
53
|
#
|
56
54
|
# == Validation ==
|
57
55
|
#
|
56
|
+
|
58
57
|
def validate
|
59
58
|
raise ValidationError.new("A user macro must have both a 'name' and a 'value'") if name.nil? || name.strip.empty? || value.nil? || value.strip.empty?
|
60
59
|
true
|
61
60
|
end
|
62
61
|
|
63
62
|
#
|
64
|
-
# ==
|
63
|
+
# == Requests ==
|
65
64
|
#
|
65
|
+
|
66
|
+
def mass_add_params
|
67
|
+
{ :macros => [{:macro => macro_name, :value => value}], :hosts => [{:hostid => host_id}] }
|
68
|
+
end
|
66
69
|
|
67
70
|
def create_request
|
68
|
-
request('usermacro.massAdd',
|
71
|
+
request('usermacro.massAdd', mass_add_params)
|
69
72
|
end
|
70
73
|
|
71
74
|
def update_request
|
72
|
-
request('usermacro.massUpdate',
|
75
|
+
request('usermacro.massUpdate', mass_add_params)
|
73
76
|
end
|
74
77
|
|
75
78
|
def destroy_request
|
76
|
-
request('usermacro.massRemove',
|
79
|
+
request('usermacro.massRemove', :hostids => [host_id], :macros => [macro_name])
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.find_params options={}
|
83
|
+
super().merge({
|
84
|
+
:hostids => [options[:host_id]],
|
85
|
+
:filter => {
|
86
|
+
:macro => macro_name(options[:name])
|
87
|
+
}
|
88
|
+
})
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.build macro
|
92
|
+
new({
|
93
|
+
:id => macro[id_field].to_i,
|
94
|
+
:name => unmacro_name(macro['macro']),
|
95
|
+
:value => macro['value'],
|
96
|
+
:host_id => macro['hostid']
|
97
|
+
})
|
77
98
|
end
|
78
99
|
|
79
100
|
end
|
@@ -4,19 +4,17 @@ describe "CRUD for hosts" do
|
|
4
4
|
|
5
5
|
before do
|
6
6
|
@hg = Rubix::HostGroup.new(:name => 'rubix_spec_host_group_1')
|
7
|
-
@hg
|
7
|
+
ensure_save(@hg)
|
8
8
|
|
9
9
|
@h1 = Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@hg])
|
10
|
-
@h1
|
10
|
+
ensure_save(@h1)
|
11
11
|
|
12
12
|
@h2 = Rubix::Host.new(:name => 'rubix_spec_host_2', :host_groups => [@hg])
|
13
|
-
@h2
|
13
|
+
ensure_save(@h2)
|
14
14
|
end
|
15
15
|
|
16
16
|
after do
|
17
|
-
@h1
|
18
|
-
@h2.destroy
|
19
|
-
@hg.destroy
|
17
|
+
ensure_destroy(@h1, @h2, @hg)
|
20
18
|
end
|
21
19
|
|
22
20
|
it "should be able to create, update, and destroy a host" do
|
@@ -24,22 +22,28 @@ describe "CRUD for hosts" do
|
|
24
22
|
|
25
23
|
Rubix::Application.find(:name => 'rubix_spec_app_1', :host_id => @h1.id).should be_nil
|
26
24
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
new_a.should_not be_nil
|
31
|
-
new_a.id.should == app.id
|
32
|
-
new_a.host_id.should == @h1.id
|
33
|
-
id = app.id
|
25
|
+
app1 = Rubix::Application.new(:name => 'rubix_spec_app_1', :host_id => @h1.id)
|
26
|
+
app1.save.should be_true
|
27
|
+
id = app1.id
|
34
28
|
id.should_not be_nil
|
35
|
-
|
36
|
-
app.name = 'rubix_spec_app_2'
|
37
|
-
app.update
|
38
|
-
new_a = Rubix::Application.find(:id => id, :name => 'rubix_spec_app_2', :host_id => @h1.id)
|
39
|
-
new_a.should_not be_nil
|
40
|
-
new_a.name.should == 'rubix_spec_app_2'
|
41
29
|
|
42
|
-
|
43
|
-
|
30
|
+
ensure_destroy(app1) do
|
31
|
+
|
32
|
+
app2 = Rubix::Application.find(:name => 'rubix_spec_app_1', :host_id => @h1.id)
|
33
|
+
app2.should_not be_nil
|
34
|
+
app2.id.should == app1.id
|
35
|
+
app2.host_id.should == @h1.id
|
36
|
+
|
37
|
+
app1.name = 'rubix_spec_app_2'
|
38
|
+
app1.save.should be_true
|
39
|
+
|
40
|
+
app2 = Rubix::Application.find(:id => id, :name => 'rubix_spec_app_2', :host_id => @h1.id)
|
41
|
+
app2.should_not be_nil
|
42
|
+
app2.name.should == 'rubix_spec_app_2'
|
43
|
+
|
44
|
+
app1.destroy.should be_true
|
45
|
+
Rubix::Application.find(:id => id, :host_id => @h1.id).should be_nil
|
46
|
+
Rubix::Application.find(:id => id, :host_id => @h2.id).should be_nil
|
47
|
+
end
|
44
48
|
end
|
45
49
|
end
|
@@ -7,17 +7,25 @@ describe "CRUD for host groups" do
|
|
7
7
|
|
8
8
|
Rubix::HostGroup.find(:name => 'rubix_spec_host_group_1').should be_nil
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
id = hg.id
|
10
|
+
hg1 = Rubix::HostGroup.new(:name => 'rubix_spec_host_group_1')
|
11
|
+
hg1.save.should be_true
|
12
|
+
id = hg1.id
|
14
13
|
id.should_not be_nil
|
15
14
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
ensure_destroy(hg1) do
|
16
|
+
hg2 = Rubix::HostGroup.find(:name => 'rubix_spec_host_group_1')
|
17
|
+
hg2.should_not be_nil
|
18
|
+
hg2.name.should == 'rubix_spec_host_group_1'
|
19
|
+
|
20
|
+
hg1.name = 'rubix_spec_host_group_2'
|
21
|
+
hg1.save.should be_true
|
22
|
+
|
23
|
+
hg2 = Rubix::HostGroup.find(:name => 'rubix_spec_host_group_2')
|
24
|
+
hg2.should_not be_nil
|
25
|
+
hg2.name.should == 'rubix_spec_host_group_2'
|
26
|
+
|
27
|
+
hg1.destroy
|
28
|
+
Rubix::HostGroup.find(:id => id).should be_nil
|
29
|
+
end
|
22
30
|
end
|
23
31
|
end
|
@@ -4,27 +4,23 @@ describe "CRUD for hosts" do
|
|
4
4
|
|
5
5
|
before do
|
6
6
|
@hg1 = Rubix::HostGroup.new(:name => 'rubix_spec_host_group_1')
|
7
|
-
@hg1
|
7
|
+
ensure_save(@hg1)
|
8
8
|
|
9
9
|
@hg2 = Rubix::HostGroup.new(:name => 'rubix_spec_host_group_2')
|
10
|
-
@hg2
|
10
|
+
ensure_save(@hg2)
|
11
11
|
|
12
12
|
@t1 = Rubix::Template.new(:name => 'rubix_spec_template_1', :host_groups => [@hg1])
|
13
|
-
@t1
|
13
|
+
ensure_save(@t1)
|
14
14
|
|
15
15
|
@t2 = Rubix::Template.new(:name => 'rubix_spec_template_2', :host_groups => [@hg2])
|
16
|
-
@t2
|
16
|
+
ensure_save(@t2)
|
17
17
|
|
18
18
|
@um1 = Rubix::UserMacro.new(:name => 'rubix_spec_macro_1', :value => 'rubix_spec_value_1')
|
19
|
-
@um2 = Rubix::UserMacro.new(:name => 'rubix_spec_macro_2', :value => 'rubix_spec_value_2')
|
20
19
|
|
21
20
|
end
|
22
21
|
|
23
22
|
after do
|
24
|
-
@t1
|
25
|
-
@t2.destroy
|
26
|
-
@hg1.destroy
|
27
|
-
@hg2.destroy
|
23
|
+
ensure_destroy(@um1, @t1, @t2, @hg1, @hg2)
|
28
24
|
end
|
29
25
|
|
30
26
|
it "should be able to create, update, and destroy a host" do
|
@@ -32,39 +28,36 @@ describe "CRUD for hosts" do
|
|
32
28
|
|
33
29
|
Rubix::Host.find(:name => 'rubix_spec_host_1').should be_nil
|
34
30
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
31
|
+
h1 = Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@hg1], :templates => [@t1], :user_macros => [@um1])
|
32
|
+
h1.save.should be_true
|
33
|
+
id = h1.id
|
34
|
+
id.should_not be_nil
|
35
|
+
|
36
|
+
ensure_destroy(h1) do
|
37
|
+
h2 = Rubix::Host.find(:name => 'rubix_spec_host_1')
|
38
|
+
h2.should_not be_nil
|
39
|
+
h2.template_ids.should include(@t1.id)
|
40
|
+
h2.host_group_ids.should include(@hg1.id)
|
41
|
+
h2.user_macros.size.should == 1
|
42
|
+
h2.user_macros.first.name.should == 'RUBIX_SPEC_MACRO_1'
|
43
|
+
h2.user_macros.first.value.should == 'rubix_spec_value_1'
|
48
44
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
h.update
|
45
|
+
h1.name = 'rubix_spec_host_2'
|
46
|
+
h1.host_groups = [@hg2]
|
47
|
+
h1.templates = [@t2]
|
48
|
+
h1.save.should be_true
|
54
49
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
ensure
|
66
|
-
h.destroy
|
50
|
+
h2 = Rubix::Host.find(:name => 'rubix_spec_host_2')
|
51
|
+
h2.should_not be_nil
|
52
|
+
h2.template_ids.should include(@t2.id)
|
53
|
+
h2.host_group_ids.should include(@hg2.id)
|
54
|
+
h2.user_macros.size.should == 1
|
55
|
+
h2.user_macros.first.name.should == 'RUBIX_SPEC_MACRO_1'
|
56
|
+
h2.user_macros.first.value.should == 'rubix_spec_value_1'
|
57
|
+
|
58
|
+
h1.destroy
|
59
|
+
Rubix::Host.find(:id => id).should be_nil
|
67
60
|
end
|
68
|
-
|
61
|
+
|
69
62
|
end
|
70
63
|
end
|
@@ -4,28 +4,23 @@ describe "CRUD for items" do
|
|
4
4
|
|
5
5
|
before do
|
6
6
|
@hg1 = Rubix::HostGroup.new(:name => 'rubix_spec_host_group_1')
|
7
|
-
@hg1
|
7
|
+
ensure_save(@hg1)
|
8
8
|
|
9
9
|
@h1 = Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@hg1])
|
10
|
-
@h1
|
10
|
+
ensure_save(@h1)
|
11
11
|
|
12
12
|
@h2 = Rubix::Host.new(:name => 'rubix_spec_host_2', :host_groups => [@hg1])
|
13
|
-
@h2
|
13
|
+
ensure_save(@h2)
|
14
14
|
|
15
15
|
@a1 = Rubix::Application.new(:name => 'rubix_spec_app_1', :host_id => @h1.id)
|
16
|
-
@a1
|
16
|
+
ensure_save(@a1)
|
17
17
|
|
18
18
|
@a2 = Rubix::Application.new(:name => 'rubix_spec_app_1', :host_id => @h2.id)
|
19
|
-
@a2
|
20
|
-
|
19
|
+
ensure_save(@a2)
|
21
20
|
end
|
22
21
|
|
23
22
|
after do
|
24
|
-
@a1
|
25
|
-
@a2.destroy
|
26
|
-
@h1.destroy
|
27
|
-
@h2.destroy
|
28
|
-
@hg1.destroy
|
23
|
+
ensure_destroy(@a1, @a2, @h1, @h2, @hg1)
|
29
24
|
end
|
30
25
|
|
31
26
|
it "should be able to create, update, and destroy an item" do
|
@@ -33,36 +28,38 @@ describe "CRUD for items" do
|
|
33
28
|
|
34
29
|
Rubix::Item.find(:key => 'rubix.spec1', :host_id => @h1.id).should be_nil
|
35
30
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
new_i = Rubix::Item.find(:key => 'rubix.spec1', :host_id => @h1.id)
|
40
|
-
new_i.should_not be_nil
|
41
|
-
new_i.host.name.should == @h1.name
|
42
|
-
new_i.key.should == 'rubix.spec1'
|
43
|
-
new_i.description.should == 'rubix item description 1'
|
44
|
-
new_i.value_type.should == :character
|
45
|
-
new_i.application_ids.should include(@a1.id)
|
46
|
-
|
47
|
-
id = item.id
|
31
|
+
item1 = Rubix::Item.new(:key => 'rubix.spec1', :description => 'rubix item description 1', :host_id => @h1.id, :value_type => :character, :applications => [@a1])
|
32
|
+
item1.save.should be_true
|
33
|
+
id = item1.id
|
48
34
|
id.should_not be_nil
|
49
|
-
|
50
|
-
item.key = 'rubix.spec2'
|
51
|
-
item.description = 'rubix item description 2'
|
52
|
-
item.value_type = :unsigned_int
|
53
|
-
item.host_id = @h2.id
|
54
|
-
item.applications = [@a2]
|
55
|
-
item.update
|
56
|
-
|
57
|
-
new_i = Rubix::Item.find(:key => 'rubix.spec2', :host_id => @h2.id)
|
58
|
-
new_i.should_not be_nil
|
59
|
-
new_i.host.name.should == @h2.name
|
60
|
-
new_i.key.should == 'rubix.spec2'
|
61
|
-
new_i.description.should == 'rubix item description 2'
|
62
|
-
new_i.value_type.should == :unsigned_int
|
63
|
-
new_i.application_ids.should include(@a2.id)
|
64
35
|
|
65
|
-
|
66
|
-
|
36
|
+
ensure_destroy(item1) do
|
37
|
+
item2 = Rubix::Item.find(:key => 'rubix.spec1', :host_id => @h1.id)
|
38
|
+
item2.should_not be_nil
|
39
|
+
item2.host.name.should == @h1.name
|
40
|
+
item2.key.should == 'rubix.spec1'
|
41
|
+
item2.description.should == 'rubix item description 1'
|
42
|
+
item2.value_type.should == :character
|
43
|
+
item2.application_ids.should include(@a1.id)
|
44
|
+
|
45
|
+
item1.key = 'rubix.spec2'
|
46
|
+
item1.description = 'rubix item description 2'
|
47
|
+
item1.value_type = :unsigned_int
|
48
|
+
item1.host_id = @h2.id
|
49
|
+
item1.applications = [@a2]
|
50
|
+
item1.save.should be_true
|
51
|
+
|
52
|
+
item2 = Rubix::Item.find(:key => 'rubix.spec2', :host_id => @h2.id)
|
53
|
+
item2.should_not be_nil
|
54
|
+
item2.host.name.should == @h2.name
|
55
|
+
item2.key.should == 'rubix.spec2'
|
56
|
+
item2.description.should == 'rubix item description 2'
|
57
|
+
item2.value_type.should == :unsigned_int
|
58
|
+
item2.application_ids.should include(@a2.id)
|
59
|
+
|
60
|
+
item1.destroy
|
61
|
+
Rubix::Item.find(:id => id, :host_id => @h1.id).should be_nil
|
62
|
+
Rubix::Item.find(:id => id, :host_id => @h2.id).should be_nil
|
63
|
+
end
|
67
64
|
end
|
68
65
|
end
|
@@ -4,16 +4,14 @@ describe "CRUD for templates" do
|
|
4
4
|
|
5
5
|
before do
|
6
6
|
@hg1 = Rubix::HostGroup.new(:name => 'rubix_spec_host_group_1')
|
7
|
-
@hg1
|
7
|
+
ensure_save(@hg1)
|
8
8
|
|
9
9
|
@hg2 = Rubix::HostGroup.new(:name => 'rubix_spec_host_group_2')
|
10
|
-
@hg2
|
11
|
-
|
10
|
+
ensure_save(@hg2)
|
12
11
|
end
|
13
12
|
|
14
13
|
after do
|
15
|
-
@hg1
|
16
|
-
@hg2.destroy
|
14
|
+
ensure_destroy(@hg1, @hg2)
|
17
15
|
end
|
18
16
|
|
19
17
|
it "should be able to create, update, and destroy a template" do
|
@@ -21,27 +19,29 @@ describe "CRUD for templates" do
|
|
21
19
|
|
22
20
|
Rubix::Template.find(:name => 'rubix_spec_template_1').should be_nil
|
23
21
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
new_t = Rubix::Template.find(:name => 'rubix_spec_template_1')
|
28
|
-
new_t.should_not be_nil
|
29
|
-
new_t.id.should == t.id
|
30
|
-
new_t.host_group_ids.should include(@hg1.id)
|
31
|
-
id = t.id
|
22
|
+
t1 = Rubix::Template.new(:name => 'rubix_spec_template_1', :host_groups => [@hg1])
|
23
|
+
t1.save.should be_true
|
24
|
+
id = t1.id
|
32
25
|
id.should_not be_nil
|
33
26
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
27
|
+
ensure_destroy(t1) do
|
28
|
+
t2 = Rubix::Template.find(:name => 'rubix_spec_template_1')
|
29
|
+
t2.should_not be_nil
|
30
|
+
t2.id.should == id
|
31
|
+
t2.host_group_ids.should include(@hg1.id)
|
32
|
+
|
33
|
+
t1.name = 'rubix_spec_template_2'
|
34
|
+
t1.host_groups = [@hg2]
|
35
|
+
t1.save.should be_true
|
36
|
+
|
37
|
+
t2 = Rubix::Template.find(:id => id)
|
38
|
+
t2.name.should == 'rubix_spec_template_2'
|
39
|
+
t2.host_group_ids.should_not include(@hg1.id)
|
40
|
+
t2.host_group_ids.should include(@hg2.id)
|
41
|
+
|
42
|
+
t1.destroy
|
43
|
+
Rubix::Template.find(:id => id).should be_nil
|
44
|
+
end
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should be able to import and export a template" do
|
@@ -4,15 +4,14 @@ describe "CRUD for user macros" do
|
|
4
4
|
|
5
5
|
before do
|
6
6
|
@hg1 = Rubix::HostGroup.new(:name => 'rubix_spec_host_group_1')
|
7
|
-
@hg1
|
7
|
+
ensure_save(@hg1)
|
8
8
|
|
9
9
|
@h1 = Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@hg1])
|
10
|
-
@h1
|
10
|
+
ensure_save(@h1)
|
11
11
|
end
|
12
12
|
|
13
13
|
after do
|
14
|
-
@h1
|
15
|
-
@hg1.destroy
|
14
|
+
ensure_destroy(@h1, @hg1)
|
16
15
|
end
|
17
16
|
|
18
17
|
it "should be able to create, update, and destroy a host" do
|
@@ -20,17 +19,25 @@ describe "CRUD for user macros" do
|
|
20
19
|
|
21
20
|
Rubix::UserMacro.find(:name => 'rubix_spec_macro_1', :host_id => @h1.id).should be_nil
|
22
21
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
id =
|
22
|
+
um1 = Rubix::UserMacro.new(:name => 'rubix_spec_macro_1', :value => 'rubix_spec_value_1', :host_id => @h1.id)
|
23
|
+
um1.save.should be_true
|
24
|
+
|
25
|
+
id = um1.id
|
27
26
|
id.should_not be_nil
|
28
27
|
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
ensure_destroy(um1) do
|
29
|
+
um2 = Rubix::UserMacro.find(:name => 'rubix_spec_macro_1', :host_id => @h1.id)
|
30
|
+
um2.should_not be_nil
|
31
|
+
|
32
|
+
um1.value = 'rubix_spec_value_2'
|
33
|
+
um1.save.should be_true
|
34
|
+
|
35
|
+
um2 = Rubix::UserMacro.find(:name => 'rubix_spec_macro_1', :host_id => @h1.id)
|
36
|
+
um2.should_not be_nil
|
37
|
+
um2.value.should == 'rubix_spec_value_2'
|
32
38
|
|
33
|
-
|
34
|
-
|
39
|
+
um1.destroy
|
40
|
+
Rubix::UserMacro.find(:name => 'rubix_spec_macro_1', :host_id => @h1.id).should be_nil
|
41
|
+
end
|
35
42
|
end
|
36
43
|
end
|
@@ -4,6 +4,43 @@ module Rubix
|
|
4
4
|
def integration_test
|
5
5
|
pending("A live Zabbix API to test against") unless $RUBIX_INTEGRATION_TEST
|
6
6
|
end
|
7
|
+
|
8
|
+
def ensure_save(obj)
|
9
|
+
begin
|
10
|
+
raise Rubix::Error.new(Rubix.connection.last_response.error_message) unless obj.save
|
11
|
+
rescue => e
|
12
|
+
puts "#{e.class} -- #{e.message}"
|
13
|
+
puts e.backtrace
|
14
|
+
raise e
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def ensure_destroy *objs, &block
|
19
|
+
begin
|
20
|
+
if block_given?
|
21
|
+
yield
|
22
|
+
else
|
23
|
+
errors = []
|
24
|
+
objs.each do |obj|
|
25
|
+
errors << Rubix.connection.last_response.error_message unless obj.destroy
|
26
|
+
end
|
27
|
+
raise Rubix::Error.new(errors.join("\n")) if errors.size > 0
|
28
|
+
end
|
29
|
+
rescue => e
|
30
|
+
puts "#{e.class} -- #{e.message}"
|
31
|
+
puts e.backtrace
|
32
|
+
objs.each do |obj|
|
33
|
+
begin
|
34
|
+
puts "COULD NOT DESTROY #{obj.resource_name}" unless obj.destroy
|
35
|
+
rescue => f
|
36
|
+
puts "COULD NOT DESTROY #{obj.resource_name}"
|
37
|
+
puts "#{e.class} -- #{e.message}"
|
38
|
+
puts e.backtrace
|
39
|
+
end
|
40
|
+
end
|
41
|
+
raise e
|
42
|
+
end
|
43
|
+
end
|
7
44
|
|
8
45
|
end
|
9
46
|
end
|
metadata
CHANGED