Giuseppe Lavagetto has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/345158 )

Change subject: service::node: abstract config for scap3, allow use of confd in 
configuration
......................................................................

service::node: abstract config for scap3, allow use of confd in configuration

Change-Id: I119339458b599ee254695c7f3c95815d4f1eca02
---
M modules/service/manifests/node.pp
A modules/service/manifests/node/deploy_config.pp
M modules/service/templates/node/apply-config.sh.erb
M modules/service/templates/node/config-vars.yaml.erb
4 files changed, 92 insertions(+), 29 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/58/345158/1

diff --git a/modules/service/manifests/node.pp 
b/modules/service/manifests/node.pp
index fb466fc..69d9d4b 100644
--- a/modules/service/manifests/node.pp
+++ b/modules/service/manifests/node.pp
@@ -278,35 +278,19 @@
             onlyif  => "/usr/bin/test -O ${chown_target}",
             require => [User[$deployment_user], Group[$deployment_user]]
         }
-        file { "/etc/${title}/config-vars.yaml":
-            ensure  => present,
-            content => template('service/node/config-vars.yaml.erb'),
-            owner   => $deployment_user,
-            group   => $deployment_user,
-            mode    => '0444',
-            tag     => "${title}::config",
+        service::node::deploy_config { $title:
+            port            => $port,
+            no_workers      => $no_workers,
+            heap_limit      => $heap_limit,
+            heartbeat_to    => $heartbeat_to,
+            repo            => $repo,
+            starter_module  => $starter_module,
+            entrypoint      => $entrypoint,
+            logging_name    => $logging_name,
+            statsd_prefix   => $statsd_prefix,
+            auto_refresh    => $auto_refresh,
+            deployment_vars => $deployment_vars,
         }
-
-        # We need to ensure that the full config gets deployed when we change 
the
-        # puppet controlled part. If auto_refresh is true, this will also 
restart
-        # the service.
-        file { "/usr/local/bin/apply-config-${title}":
-            ensure  => present,
-            content => template('service/node/apply-config.sh.erb'),
-            owner   => 'root',
-            group   => 'root',
-            mode    => '0755',
-            before  => Exec["${title} config deploy"],
-        }
-
-        exec { "${title} config deploy":
-                command     => "/usr/local/bin/apply-config-${title}",
-                user        => $deployment_user,
-                group       => $deployment_user,
-                refreshonly => true,
-                subscribe   => File["/etc/${title}/config-vars.yaml"],
-        }
-
     } else {
         file { "/etc/${title}/config.yaml":
             ensure  => present,
diff --git a/modules/service/manifests/node/deploy_config.pp 
b/modules/service/manifests/node/deploy_config.pp
new file mode 100644
index 0000000..370afd1
--- /dev/null
+++ b/modules/service/manifests/node/deploy_config.pp
@@ -0,0 +1,70 @@
+# === define service::node::deploy_config
+#
+# Used to deploy a configuration for a service that uses service::node.
+#
+# == Parameters
+#
+# Most parameters have the same meaning as in service::node, to the 
documentation of which you
+# should refer for those.
+#
+# [*discovery*] If set, it will make the config-vars file managed by confd and 
use discovery
+#               based records to change the data in config-vars.yaml and then 
reload the config.
+#
+# [*confd_template*] Confd template fragment to include at the end of the 
config file so that it
+#                    can be delegated to confd.
+#
+# [*max_splay*] For services controlled via confd, enable a splay to delay 
execution of the service restarts.
+#
+define service::node::deploy_config (
+    $port,
+    $no_workers      = 'ncpu',
+    $heap_limit      = 300,
+    $heartbeat_to    = 7500,
+    $repo            = "${title}/deploy",
+    $starter_module  = './src/app.js',
+    $entrypoint      = '',
+    $logging_name    = $title,
+    $statsd_prefix   = $title,
+    $auto_refresh    = true,
+    $deployment_user = 'deploy-service',
+    $deployment_vars = {},
+    $discovery=undef,
+    $confd_template=undef,
+    $max_splay=120,
+){
+    # We need to ensure that the full config gets deployed when we change the
+    # puppet controlled part. If auto_refresh is true, this will also restart
+    # the service.
+    file { "/usr/local/bin/apply-config-${title}":
+        ensure  => present,
+        content => template('service/node/apply-config.sh.erb'),
+        owner   => 'root',
+        group   => 'root',
+        mode    => '0755',
+        before  => Exec["${title} config deploy"],
+    }
+
+    if $discovery {
+        confd::file { "/etc/${title}/config-vars.yaml":
+            ensure     => present,
+            watch_keys => "/discovery/${discovery}",
+            reload     => "nohup /usr/local/apply-config-${title} &"
+        }
+    } else {
+        file { "/etc/${title}/config-vars.yaml":
+            ensure  => present,
+            content => template('service/node/config-vars.yaml.erb'),
+            owner   => $deployment_user,
+            group   => $deployment_user,
+            mode    => '0444',
+            tag     => "${title}::config",
+        }
+        exec { "${title} config deploy":
+            command     => "/usr/local/bin/apply-config-${title}",
+            user        => $deployment_user,
+            group       => $deployment_user,
+            refreshonly => true,
+            subscribe   => File["/etc/${title}/config-vars.yaml"],
+        }
+    }
+}
diff --git a/modules/service/templates/node/apply-config.sh.erb 
b/modules/service/templates/node/apply-config.sh.erb
index 5ae72d9..a0c98d5 100755
--- a/modules/service/templates/node/apply-config.sh.erb
+++ b/modules/service/templates/node/apply-config.sh.erb
@@ -4,4 +4,10 @@
 
 set -e
 /usr/bin/scap deploy-local -D 'log_json:False' --repo <%= @repo %> --force 
config_deploy;
-<%- if @auto_refresh %>/usr/bin/scap deploy-local -D 'log_json:False' --repo 
<%= @repo %> --force restart_service;<%- end -%>
+<%- if @auto_refresh -%>
+<%- if @discovery -%>
+# Sleep a random time between 0 and <%= @max_splay %> seconds to avoid herd 
effects
+sleep $[ $RANDOM % <%= @max_splay %> ]
+<%- end -%>
+/usr/bin/scap deploy-local -D 'log_json:False' --repo <%= @repo %> --force 
restart_service;
+<%- end -%>
diff --git a/modules/service/templates/node/config-vars.yaml.erb 
b/modules/service/templates/node/config-vars.yaml.erb
index c10b6bf..e93a6e2 100644
--- a/modules/service/templates/node/config-vars.yaml.erb
+++ b/modules/service/templates/node/config-vars.yaml.erb
@@ -40,3 +40,6 @@
 # deployment variables
 <%= scope.function_ordered_yaml([@deployment_vars]) %>
 <% end -%>
+<%- unless @confd_template.empty? -%>
+<%= @confd_template %>
+<%- end -%>

-- 
To view, visit https://gerrit.wikimedia.org/r/345158
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I119339458b599ee254695c7f3c95815d4f1eca02
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Giuseppe Lavagetto <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to