From 2dcbb28a37918d7d5379a805e23cd2a725eb37f2 Mon Sep 17 00:00:00 2001 From: Andreas Zuber Date: Wed, 11 Oct 2017 15:55:08 +0200 Subject: [PATCH 1/5] optional service management for db2 instances --- manifests/init.pp | 6 +++++- manifests/instance.pp | 30 ++++++++++++++++++++++++++++++ templates/db2_instance.service.erb | 23 +++++++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 templates/db2_instance.service.erb diff --git a/manifests/init.pp b/manifests/init.pp index 7cf3c1a..063602b 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -14,7 +14,6 @@ $instances = {}, $workspace = '/var/puppet_db2', ) { - ensure_resource('file', $workspace, { 'ensure' => 'directory' }) create_resources('db2::install', $installations) @@ -22,5 +21,10 @@ Db2::Install<||> -> Db2::Instance<||> + exec{'db2_systemd_daemon_reload': + command => '/usr/bin/systemctl daemon-reload', + refreshonly => true, + } + } diff --git a/manifests/instance.pp b/manifests/instance.pp index 2588a24..a3dc3bb 100644 --- a/manifests/instance.pp +++ b/manifests/instance.pp @@ -8,6 +8,7 @@ $instance_user = $name, $manage_fence_user = true, $manage_instance_user = true, + $manage_service = false, $fence_user_uid = undef, $fence_user_gid = undef, $fence_user_home = undef, @@ -46,6 +47,35 @@ } } + if $manage_service { + if $instance_user_home == undef{ + fail('Please set instance_user_home in order to manage the db2 service instance') + } + + $instance_service = "db2_${name}.service" + + file{"/etc/systemd/system/${instance_service}": + ensure => present, + content => template('db2/db2_instance.service.erb'), + owner => 'root', + group => 'root', + mode => '0644', + notify => Exec['db2_systemd_daemon_reload'], + } + + service{$instance_service: + ensure => 'running', + enable => true, + subscribe => [ + Exec['db2_systemd_daemon_reload'], + Db2_instance[$instance_user], + Db2_catalog_node[keys($catalog_nodes)], + Db2_catalog_database[keys($catalog_databases)], + Db2_catalog_dcs[keys($catalog_dcs)], + ], + } + } + db2_instance { $instance_user: install_root => $installation_root, fence_user => $fence_user, diff --git a/templates/db2_instance.service.erb b/templates/db2_instance.service.erb new file mode 100644 index 0000000..43c6c80 --- /dev/null +++ b/templates/db2_instance.service.erb @@ -0,0 +1,23 @@ +[Unit] + Description=DB2 Database Instance <%= @name %> + After=network.target + +[Service] + Type=forking + User=<%= @instance_user_uid || @instance_user %> +<%- if @instance_user_gid -%> + Group=<%= @instance_user_gid %> +<%- end -%> + StandardOutput=syslog + StandardError=syslog + SyslogIdentifier=db2 + ExecStart=<%= File.join(@instance_user_home, 'sqllib/adm/db2start') %> + ExecStop=<%= File.join(@instance_user_home, 'sqllib/adm/db2stop') %> + Environment="DB2INSTANCE=<%= @name %>" + Environment="DB2LIB=<%= File.join(@instance_user_home, 'sqllib/lib') %>" + Environment="DB2_HOME=<%= File.join(@instance_user_home, 'sqllib') %>" + Restart=always + +[Install] + WantedBy=multi-user.target + From b2e4e78160b92edcc51a88df97e799acfa5d390a Mon Sep 17 00:00:00 2001 From: Andreas Zuber Date: Wed, 11 Oct 2017 16:03:09 +0200 Subject: [PATCH 2/5] add new param to readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 973bf8d..4fa5dd6 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ db2::install { '11.1': * `instance_user_uid`: UID of the instance user * `instance_user_gid`: GID of the instance user * `instance_user_home`: Home directory of the instance user +* `manage_service`: Whether or not to manage the service for the instance (default: false) * `type`: Type of product this instance is for (default: ese) * `auth`: Type of auth for this instance (default: server) * `users_forcelocal`: Force the creation of instance and fence users to be local, true or false. (default: undef) From a526f533dd152fb38e4186d3d3877b1c3e2d5d0a Mon Sep 17 00:00:00 2001 From: Andreas Zuber Date: Wed, 1 Nov 2017 11:33:16 +0100 Subject: [PATCH 3/5] change dependency for cataloging nodes/dcs/databases to a simple require --- manifests/instance.pp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/manifests/instance.pp b/manifests/instance.pp index a3dc3bb..58e7546 100644 --- a/manifests/instance.pp +++ b/manifests/instance.pp @@ -69,6 +69,8 @@ subscribe => [ Exec['db2_systemd_daemon_reload'], Db2_instance[$instance_user], + ], + require => [ Db2_catalog_node[keys($catalog_nodes)], Db2_catalog_database[keys($catalog_databases)], Db2_catalog_dcs[keys($catalog_dcs)], From 94cd5dc4488c34ccd383f465dd88c1d21ea40cbc Mon Sep 17 00:00:00 2001 From: Andreas Zuber Date: Wed, 1 Nov 2017 13:58:46 +0100 Subject: [PATCH 4/5] make it possible to overwrit the service enable and ensure parameters. --- manifests/instance.pp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/manifests/instance.pp b/manifests/instance.pp index 58e7546..6faa6c5 100644 --- a/manifests/instance.pp +++ b/manifests/instance.pp @@ -9,6 +9,8 @@ $manage_fence_user = true, $manage_instance_user = true, $manage_service = false, + $service_ensure = undef, + $service_enable = true, $fence_user_uid = undef, $fence_user_gid = undef, $fence_user_home = undef, @@ -64,13 +66,13 @@ } service{$instance_service: - ensure => 'running', - enable => true, + ensure => $service_ensure, + enable => $service_enable, subscribe => [ Exec['db2_systemd_daemon_reload'], Db2_instance[$instance_user], ], - require => [ + require => [ Db2_catalog_node[keys($catalog_nodes)], Db2_catalog_database[keys($catalog_databases)], Db2_catalog_dcs[keys($catalog_dcs)], From a230f58a2205538f9bb118ef4f0daba17d1f80c7 Mon Sep 17 00:00:00 2001 From: Andreas Zuber Date: Wed, 1 Nov 2017 13:59:13 +0100 Subject: [PATCH 5/5] add new parameters to readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4fa5dd6..58c8c3f 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,8 @@ db2::install { '11.1': * `instance_user_gid`: GID of the instance user * `instance_user_home`: Home directory of the instance user * `manage_service`: Whether or not to manage the service for the instance (default: false) +* `service_enable`: If the service is managed, whether or not it should be registered for startup on server start (default: true) +* `service_ensure`: If the service is managed, whether or not puppet should make sure it is running (default: undef) * `type`: Type of product this instance is for (default: ese) * `auth`: Type of auth for this instance (default: server) * `users_forcelocal`: Force the creation of instance and fence users to be local, true or false. (default: undef)