Module: Icinga2::Users

Included in:
Client
Defined in:
lib/icinga2/users.rb

Instance Method Summary collapse

Instance Method Details

#addUser(params = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/icinga2/users.rb', line 6

def addUser( params = {} )

  name          = params.dig(:name)
  displayName   = params.dig(:display_name)
  email         = params.dig(:email)
  pager         = params.dig(:pager)
  notifications = params.dig(:enable_notifications) || false
  groups        = params.dig(:groups) || []

  if( name == nil )

    return {
      :status  => 404,
      :message => 'missing user name'
    }
  end

  if( !groups.is_a?( Array ) )

    return {
      :status  => 404,
      :message => 'groups must be an array',
      :data    => params
    }
  end

  payload = {
    "attrs" => {
      "display_name"         => displayName,
      "email"                => email,
      "pager"                => pager,
      "enable_notifications" => notifications
    }
  }

  if( ! groups.empty? )
    payload['attrs']['groups'] = groups
  end

  groupValidate = Array.new()

  groups.each do |g|

    if( self.existsUsergroup?( g ) == false )
      groupValidate << g
    end

  end

  if( groupValidate.count != 0 )

    groups = groupValidate.join(', ')

    return {

      :status  => 404,
      :message => "these groups are not exists: #{groups}",
      :data    => params
    }

  end

  result = Network.put( {
    :host    => name,
    :url     => sprintf( '%s/v1/objects/users/%s', @icingaApiUrlBase, name ),
    :headers => @headers,
    :options => @options,
    :payload => payload
  } )

  return JSON.pretty_generate( result )

end

#deleteUser(params = {}) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/icinga2/users.rb', line 81

def deleteUser( params = {} )

  name = params.dig(:name)

  if( name == nil )

    return {
      :status  => 404,
      :message => 'missing user name'
    }
  end

  result = Network.delete( {
    :host    => name,
    :url     => sprintf( '%s/v1/objects/users/%s?cascade=1', @icingaApiUrlBase, name ),
    :headers => @headers,
    :options => @options
  } )

  return JSON.pretty_generate( result )

end

#existsUser?(name) ⇒ Boolean

Returns:

  • (Boolean)


121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/icinga2/users.rb', line 121

def existsUser?( name )

  result = self.listUsers( { :name => name } )

  if( result.is_a?( String ) )
    result = JSON.parse( result )
  end

  status = result.dig('status')

  if( status != nil && status == 200 )
    return true
  end

  return false

end

#listUsers(params = {}) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/icinga2/users.rb', line 105

def listUsers( params = {} )

  name = params.dig(:name)

  result = Network.get( {
    :host     => name,
    :url      => sprintf( '%s/v1/objects/users/%s', @icingaApiUrlBase, name ),
    :headers  => @headers,
    :options  => @options
  } )

  return JSON.pretty_generate( result )

end