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