Browse Source

Merge branch 'feature/apilistener_defined_type' into develop

refs#7231: https://dev.icinga.org/issues/7231
Nick Chappell 9 years ago
parent
commit
a4d023167f
3 changed files with 128 additions and 0 deletions
  1. 17 0
      README.md
  2. 73 0
      manifests/object/apilistener.pp
  3. 38 0
      templates/object_apilistener.conf.erb

+ 17 - 0
README.md

@@ -392,6 +392,7 @@ icinga2::object::apply_dependency { 'usermail_dep_on_icinga2mail':
 
 Object types:
 
+* [icinga2::object::apilistener](#icinga2objectapilistener)
 * [icinga2::object::applyservicetohost](#icinga2objectapplyservicetohost)
 * [icinga2::object::applynotificationtohost](#icinga2objectapplynotificationtohost)
 * [icinga2::object::applynotificationtoservice](#icinga2objectapplynotificationtoservice)
@@ -420,6 +421,22 @@ Object types:
 * [icinga2::object::user](#icinga2objectuser)
 * [icinga2::object::usergroup](#icinga2objectusergroup)
 
+####[`icinga2::object::apilistener`](id:icinga2objectapilistener)
+
+The `apilistener` defined type can create `ApiLister` objects that set the bind address and port for Icinga 2's API listener, as well as the locations of the machine's Icinga 2 cert, key and Icinga 2 CA key:
+
+<pre>
+#Create an API listener object:
+icinga2::object::apilistener { 'master-api':
+  bind_host => $ipaddress_eth1,
+  accept_commands => true,
+}
+</pre>
+
+The `accept_config` and `accept_commands` parameters default to **false**.
+
+See the Icinga 2 documention for more info: [http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/configuring-icinga2#objecttype-apilistener](http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/configuring-icinga2#objecttype-apilistener)
+
 ####[`icinga2::object::apply_service_to_host`](id:object_apply_service_to_host)
 
 The `apply_service_to_host` defined type can create `apply` objects to apply services to hosts:

+ 73 - 0
manifests/object/apilistener.pp

@@ -0,0 +1,73 @@
+# == Defined type: icinga2::object::apilistener
+#
+# This is a defined type for Icinga 2 apply objects that create apilistener objects.
+# See the following Icinga 2 doc page for more info:
+# http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/configuring-icinga2#objecttype-apilistener
+#
+# === Parameters
+#
+# See the inline comments.
+#
+
+define icinga2::object::apilistener (
+  $ensure                  = 'file',
+  $object_name             = $name,
+  $cert_path               = 'SysconfDir + "/icinga2/pki/" + NodeName + ".crt"',
+  $key_path                = 'SysconfDir + "/icinga2/pki/" + NodeName + ".key"',
+  $ca_path                 = 'SysconfDir + "/icinga2/pki/ca.crt"',
+  $crl_path                = undef,
+  $bind_host               = '0.0.0.0',
+  $bind_port               = 5665,
+  $accept_config           = false,
+  $accept_commands         = false,  
+  $target_dir              = '/etc/icinga2/objects/apilisteners',
+  $target_file_name        = "${name}.conf",
+  $target_file_owner       = 'root',
+  $target_file_group       = 'root',
+  $target_file_mode        = '0644',
+  $refresh_icinga2_service = true,
+) {
+
+  validate_string($cert_path)
+  validate_string($key_path)
+  validate_string($ca_path)
+  if $crl_path { validate_string($crl_path) }
+  if $bind_host { validate_string($bind_host) }
+  if $bind_port { validate_re($bind_port, '^\d{1,5}$') }
+  if $accept_config { validate_bool($accept_config) }
+  if $accept_commands { validate_bool($accept_commands) }
+  validate_string($target_dir)
+  validate_string($target_file_name)
+  validate_string($target_file_owner)
+  validate_string($target_file_group)
+  validate_re($target_file_mode, '^\d{4}$')
+  validate_bool($refresh_icinga2_service)
+
+  #If the refresh_icinga2_service parameter is set to true...
+  if $refresh_icinga2_service == true {
+
+    file { "${target_dir}/${target_file_name}":
+      ensure  => $target_file_ensure,
+      owner   => $target_file_owner,
+      group   => $target_file_group,
+      mode    => $target_file_mode,
+      content => template('icinga2/object_apilistener.conf.erb'),
+      #...notify the Icinga 2 daemon so it can restart and pick up changes made to this config file...
+      notify  => Service['icinga2'],
+    }
+
+  }
+  #...otherwise, use the same file resource but without a notify => parameter: 
+  else {
+  
+    file { "${target_dir}/${target_file_name}":
+      ensure  => $target_file_ensure,
+      owner   => $target_file_owner,
+      group   => $target_file_group,
+      mode    => $target_file_mode,
+      content => template('icinga2/object_apilistener.conf.erb'),
+    }
+  
+  }
+
+}

+ 38 - 0
templates/object_apilistener.conf.erb

@@ -0,0 +1,38 @@
+/**
+* WARNING: This ApiListener object definition is automatically generated by Puppet.
+* ANY MANUAL CHANGES TO IT WILL GET OVERWRITTEN!
+*/
+
+/**
+* An ApiListener definition. You can create your own configuration files
+* in the conf.d directory (e.g. one per commnand). By default all *.conf
+* files in this directory are included.
+*
+*/
+
+object ApiListener "<%= @object_name %>" {
+  <%- if @cert_path -%>
+  cert_path = <%= @cert_path %>
+  <%- end -%>
+  <%- if @key_path -%>
+  key_path = <%= @key_path %>
+  <%- end -%>
+  <%- if @ca_path -%>
+  ca_path = <%= @ca_path %>
+  <%- end -%>
+  <%- if @crl_path -%>
+  crl_path = <%= @crl_path %>
+  <%- end -%>
+  <%- if @bind_host -%>
+  bind_host = "<%= @bind_host %>"
+  <%- end -%>
+  <%- if @bind_port -%>
+  bind_port = <%= @bind_port %>
+  <%- end -%>
+  <%- if @accept_config -%>
+  accept_config = <%= @accept_config %>
+  <%- end -%>
+  <%- if @accept_commands -%>
+  accept_commands = <%= @accept_commands %>
+  <%- end -%>
+}