Skip to content

Commit 94c17e6

Browse files
author
DEFERME Bert
committed
Zabbix usergroup provider
1 parent ce54130 commit 94c17e6

File tree

2 files changed

+160
-0
lines changed

2 files changed

+160
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../zabbix'
4+
Puppet::Type.type(:zabbix_usergroup).provide(:ruby, parent: Puppet::Provider::Zabbix) do
5+
confine feature: :zabbixapi
6+
7+
def initialize(value = {})
8+
super(value)
9+
@property_flush = {}
10+
end
11+
12+
def get_usrgrp_by_name(grpname)
13+
api_usrgrp = zbx.usergroups.get(name: grpname)
14+
if api_usrgrp.empty?
15+
nil
16+
else
17+
{
18+
id: api_usrgrp[0]['id'],
19+
name: api_usrgrp[0]['name'],
20+
gui_access: api_usrgrp[0]['gui_access'],
21+
debug_mode: api_usrgrp[0]['debug_mode'] ? 1 : 0,
22+
users_status: api_usrgrp[0]['users_status'],
23+
}
24+
end
25+
end
26+
27+
def usergroup
28+
@usergroup ||= get_usrgrp_by_name(resource[:name])
29+
@usergroup
30+
end
31+
32+
attr_writer :usergroup
33+
34+
def gui_access
35+
usergroup[:gui_access]
36+
end
37+
38+
def gui_access=(int)
39+
@property_flush[:gui_access] = int
40+
end
41+
42+
def debug_mode
43+
usergroup[:debug_mode]
44+
end
45+
46+
def debug_mode=(int)
47+
@property_flush[:debug_mode] = int
48+
end
49+
50+
def users_status
51+
usergroup[:users_status]
52+
end
53+
54+
def users_status=(int)
55+
@property_flush[:users_status] = int
56+
end
57+
58+
def flush
59+
if @property_flush[:ensure] == :absent
60+
delete_usrgrp
61+
return
62+
end
63+
64+
return if @property_flush.empty?
65+
66+
update_usrgrp
67+
end
68+
69+
def update_usrgrp
70+
zbx.query(
71+
method: 'usergroup.update',
72+
params: {
73+
usrgrpid: zbx.usergroups.get_id(name: @resource[:name]),
74+
}.merge(@property_flush)
75+
)
76+
end
77+
78+
def delete_usrgrp
79+
zbx.usergroups.delete(zbx.usergroups.get_id(name: @resource[:name]))
80+
end
81+
82+
def create
83+
params = {}
84+
params[:name] = @resource[:name]
85+
params[:gui_access] = @resource[:gui_access] unless @resource[:gui_access].nil?
86+
params[:debug_mode] = @resource[:debug_mode] unless @resource[:debug_mode].nil?
87+
params[:users_status] = @resource[:users_status] unless @resource[:users_status].nil?
88+
89+
zbx.usergroups.create(params)
90+
end
91+
92+
def exists?
93+
usergroup
94+
end
95+
96+
def destroy
97+
@property_flush[:ensure] = :absent
98+
end
99+
end

lib/puppet/type/zabbix_usergroup.rb

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# frozen_string_literal: true
2+
3+
Puppet::Type.newtype(:zabbix_usergroup) do
4+
@doc = %q("Manage zabbix usergroups
5+
6+
zabbix_usergroup{ 'group1':
7+
ensure => present,
8+
gui_access => 2,
9+
debug_mode => true,
10+
users_status => true,
11+
}")
12+
13+
ensurable do
14+
defaultvalues
15+
defaultto :present
16+
end
17+
18+
newparam(:name, namevar: true) do
19+
desc 'usergroup name'
20+
end
21+
22+
newproperty(:gui_access) do
23+
desc 'The type of access for this group.'
24+
newvalues('default', 'internal', 'LDAP', 'none')
25+
defaultto 'default'
26+
27+
gui_values = {
28+
'default' => 0,
29+
'internal' => 1,
30+
'LDAP' => 2,
31+
'none' => 3
32+
}
33+
34+
munge do |value|
35+
gui_values[value]
36+
end
37+
end
38+
39+
newproperty(:debug_mode, boolean: true) do
40+
desc 'Whether debug mode is enabled or disabled.'
41+
newvalues(true, false)
42+
defaultto false
43+
44+
munge do |value|
45+
value ? 1 : 0
46+
end
47+
end
48+
49+
newproperty(:users_status, boolean: true) do
50+
desc 'Whether the user group is enabled or disabled.'
51+
newvalues(true, false)
52+
defaultto true
53+
54+
munge do |value|
55+
# 0 = enabled in zabbix api...
56+
value ? 0 : 1
57+
end
58+
end
59+
60+
autorequire(:file) { '/etc/zabbix/api.conf' }
61+
end

0 commit comments

Comments
 (0)