diff --git a/doc/puppet_classes/puppet_cd_3A_3Aparams.html b/doc/puppet_classes/puppet_cd_3A_3Aparams.html index 49a4de6..8d87298 100644 --- a/doc/puppet_classes/puppet_cd_3A_3Aparams.html +++ b/doc/puppet_classes/puppet_cd_3A_3Aparams.html @@ -1674,7 +1674,11 @@ 242 243 244 -245 +245 +246 +247 +248 +249
# File 'manifests/params.pp', line 88
@@ -1797,6 +1801,7 @@ class puppet_cd::params (
   $pt_puppetdb_var_dir              = '/opt/puppetlabs/server/data/puppetdb'
 ## r10k
   $pt_r10k_dir                      = "${pt_main_dir}/r10k"
+  $pt_r10k_webhook_dir              = '/etc/r10k-webhook'
 
 # files
 ## puppet
@@ -1826,12 +1831,15 @@ class puppet_cd::params (
   $pt_r10k_file                     = "${pt_r10k_dir}/r10k.yaml"
   $pt_r10k_erb                      = 'puppet_cd/r10k/r10k.yaml.erb'
   $pt_r10k_hook_file                = '/usr/local/bin/webhook'
+  $pt_r10k_hook_config_file         = "${pt_r10k_webhook_dir}/hooks.json"
+  $pt_r10k_hook_config_erb          = 'puppet_cd/r10k/hook_config.erb'
+  $pt_r10k_hook_service_file        = '/etc/systemd/system/webhook.service'
+  $pt_r10k_hook_service_erb         = 'puppet_cd/r10k/r10k_webhook_service.erb'
 
 # service
   $pt_server_service                = 'puppetserver'
   $pt_agent_service                 = 'puppet'
   $pt_db_service                    = 'puppetdb'
-  $pt_r10k_wb_service               = 'r10k-webhook'
 
 #
   # includes must be last
diff --git a/doc/puppet_classes/puppet_cd_3A_3Ar10k_3A_3Awebhook.html b/doc/puppet_classes/puppet_cd_3A_3Ar10k_3A_3Awebhook.html
index 3cff152..e1b680c 100644
--- a/doc/puppet_classes/puppet_cd_3A_3Ar10k_3A_3Awebhook.html
+++ b/doc/puppet_classes/puppet_cd_3A_3Ar10k_3A_3Awebhook.html
@@ -125,7 +125,43 @@
 27
 28
 29
-30
+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
# File 'manifests/r10k/webhook.pp', line 6
@@ -147,12 +183,48 @@ class puppet_cd::r10k::webhook (
       source   => 'puppet:///modules/puppet_cd/webhook',
     }
 
-#    # manage service
-#    service { 'r10k-webhook':
-#      ensure    => 'running',
-#      enable    => true,
-#      subscribe => File[$pt_r10k_wh_config_file],
-#    }
+    # create the webhook config dir
+    file { $pt_r10k_webhook_dir:
+      ensure   => directory,
+      owner    => 'root',
+      group    => 'root',
+      mode     => '0755',
+      selrange => s0,
+      selrole  => object_r,
+      seltype  => etc_t,
+      seluser  => system_u,
+    }
+
+    # create webhook config
+    file { $pt_r10k_hook_config_file:
+      owner    => 'root',
+      group    => 'root',
+      mode     => '0644',
+      selrange => s0,
+      selrole  => object_r,
+      seltype  => etc_t,
+      seluser  => system_u,
+      content  => template($pt_r10k_hook_config_erb),
+    }
+
+    # create service config
+    file { $pt_r10k_hook_config_file:
+      owner    => 'root',
+      group    => 'root',
+      mode     => '0644',
+      selrange => s0,
+      selrole  => object_r,
+      seltype  => systemd_unit_file_t,
+      seluser  => system_u,
+      content  => template($pt_r10k_hook_service_erb),
+    }
+
+    # manage service
+    service { 'r10k-webhook':
+      ensure    => 'running',
+      enable    => true,
+      subscribe => File[$pt_r10k_hook_config_file],
+    }
   }
 }
diff --git a/manifests/params.pp b/manifests/params.pp index 0254e41..cbca9e0 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -203,6 +203,7 @@ class puppet_cd::params ( $pt_puppetdb_var_dir = '/opt/puppetlabs/server/data/puppetdb' ## r10k $pt_r10k_dir = "${pt_main_dir}/r10k" + $pt_r10k_webhook_dir = '/etc/r10k-webhook' # files ## puppet @@ -232,12 +233,15 @@ class puppet_cd::params ( $pt_r10k_file = "${pt_r10k_dir}/r10k.yaml" $pt_r10k_erb = 'puppet_cd/r10k/r10k.yaml.erb' $pt_r10k_hook_file = '/usr/local/bin/webhook' + $pt_r10k_hook_config_file = "${pt_r10k_webhook_dir}/hooks.json" + $pt_r10k_hook_config_erb = 'puppet_cd/r10k/hook_config.erb' + $pt_r10k_hook_service_file = '/etc/systemd/system/webhook.service' + $pt_r10k_hook_service_erb = 'puppet_cd/r10k/r10k_webhook_service.erb' # service $pt_server_service = 'puppetserver' $pt_agent_service = 'puppet' $pt_db_service = 'puppetdb' - $pt_r10k_wb_service = 'r10k-webhook' # # includes must be last diff --git a/manifests/r10k/webhook.pp b/manifests/r10k/webhook.pp index a70a6e6..3c9c411 100644 --- a/manifests/r10k/webhook.pp +++ b/manifests/r10k/webhook.pp @@ -20,11 +20,47 @@ class puppet_cd::r10k::webhook ( source => 'puppet:///modules/puppet_cd/webhook', } -# # manage service -# service { 'r10k-webhook': -# ensure => 'running', -# enable => true, -# subscribe => File[$pt_r10k_wh_config_file], -# } + # create the webhook config dir + file { $pt_r10k_webhook_dir: + ensure => directory, + owner => 'root', + group => 'root', + mode => '0755', + selrange => s0, + selrole => object_r, + seltype => etc_t, + seluser => system_u, + } + + # create webhook config + file { $pt_r10k_hook_config_file: + owner => 'root', + group => 'root', + mode => '0644', + selrange => s0, + selrole => object_r, + seltype => etc_t, + seluser => system_u, + content => template($pt_r10k_hook_config_erb), + } + + # create service config + file { $pt_r10k_hook_config_file: + owner => 'root', + group => 'root', + mode => '0644', + selrange => s0, + selrole => object_r, + seltype => systemd_unit_file_t, + seluser => system_u, + content => template($pt_r10k_hook_service_erb), + } + + # manage service + service { 'r10k-webhook': + ensure => 'running', + enable => true, + subscribe => File[$pt_r10k_hook_config_file], + } } } diff --git a/templates/r10k/hook_config.erb b/templates/r10k/hook_config.erb new file mode 100644 index 0000000..228a093 --- /dev/null +++ b/templates/r10k/hook_config.erb @@ -0,0 +1,18 @@ +[ + { + "id": "r10k-deploy", + "execute-command": "/usr/local/bin/r10k", + "command-working-directory": "/etc/puppetlabs/code", + "pass-arguments-to-command": [ + { "source": "string", "name": "deploy" }, + { "source": "string", "name": "environment" }, + { "source": "string", "name": "-pv" } + ], + "trigger-rule": { + "match": { + "type": "payload-hash-sha1", + "secret": "your_webhook_secret" + } + } + } +] diff --git a/templates/r10k/r10k_webhook_service.erb b/templates/r10k/r10k_webhook_service.erb index 821f0de..5581408 100644 --- a/templates/r10k/r10k_webhook_service.erb +++ b/templates/r10k/r10k_webhook_service.erb @@ -1,19 +1,15 @@ [Unit] -Description=r10k Webhook Server -After=network.target haproxy.service +Description=Webhook Service for r10k Deployment +After=network.target [Service] -Type=simple +ExecStart=/usr/local/bin/webhook -hooks /etc/webhook/hooks.json -port 8088 +Restart=always User=puppet Group=puppet -WorkingDirectory=/opt/r10k-webhook -ExecStart=/usr/bin/python3 /opt/r10k-webhook/webhook_server.py -Restart=always -RestartSec=5 -Environment=R10K_WEBHOOK_SECRET=YOUR_SECRET_HERE -LimitNOFILE=65536 -StandardOutput=journal -StandardError=journal +WorkingDirectory=/etc/puppetlabs/code +StandardOutput=syslog +StandardError=syslog [Install] -WantedBy=multi-user.target \ No newline at end of file +WantedBy=multi-user.target