Ryan Lane has submitted this change and it was merged.

Change subject: Allow grains to be set with a single value
......................................................................


Allow grains to be set with a single value

Some grains should be set explicitly with a single value, rather
than a hash/array of values.

Change-Id: I9e24551c26bf659059d29c2b0eee2f7636a0dd92
---
M modules/salt/files/grain-ensure.py
M modules/salt/manifests/grain.pp
2 files changed, 31 insertions(+), 9 deletions(-)

Approvals:
  Ori.livneh: Looks good to me, but someone else must approve
  Ryan Lane: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/modules/salt/files/grain-ensure.py 
b/modules/salt/files/grain-ensure.py
index 4db7eff..f89e892 100644
--- a/modules/salt/files/grain-ensure.py
+++ b/modules/salt/files/grain-ensure.py
@@ -59,6 +59,11 @@
     return False
 
 
+def setval(grain, value):
+    caller.function('grains.setval', grain, value)
+    return True
+
+
 def contains(grain, value):
     return value in get(grain)
 
@@ -72,7 +77,7 @@
     return False
 
 
-actions = {'add': add, 'remove': remove, 'contains': contains}
+actions = {'add': add, 'remove': remove, 'contains': contains, 'set': setval}
 
 ap = argparse.ArgumentParser()
 ap.add_argument('action', choices=actions)
diff --git a/modules/salt/manifests/grain.pp b/modules/salt/manifests/grain.pp
index 2577174..415f61a 100644
--- a/modules/salt/manifests/grain.pp
+++ b/modules/salt/manifests/grain.pp
@@ -15,26 +15,43 @@
 #   If 'present', adds value to grain. If 'absent', removes it.
 #   Defaults to 'present'.
 #
+# [*replace*]
+#   If true, replaces the value in the grain. If false, it adds the value.
+#   Defaults to true.
+#
 # === Examples
 #
 #  salt::grain { 'deployment_target':
 #    value => 'parsoid',
 #  }
 #
+#  salt::grain { 'cluster':
+#    value => 'eqiad_text_cache',
+#    replace => true,
+#  }
+#
 define salt::grain(
   $value,
   $grain  = $title,
   $ensure = present,
+  $replace = false,
 ) {
-  if $ensure == 'absent' {
-    exec { "/usr/local/sbin/grain-ensure remove ${grain} ${value}":
-      onlyif  => "/usr/local/sbin/grain-ensure contains ${grain} ${value}",
-      require => File['/usr/local/sbin/grain-ensure'],
+  $command = $replace ? {
+    true => 'set',
+    default => 'add',
+  }
+  case $ensure {
+    'absent': {
+        exec { "/usr/local/sbin/grain-ensure remove ${grain} ${value}":
+          onlyif  => "/usr/local/sbin/grain-ensure contains ${grain} ${value}",
+          require => File['/usr/local/sbin/grain-ensure'],
+        }
     }
-  } else {
-    exec { "/usr/local/sbin/grain-ensure add ${grain} ${value}":
-      unless  => "/usr/local/sbin/grain-ensure contains ${grain} ${value}",
-      require => File['/usr/local/sbin/grain-ensure'],
+    'present': {
+        exec { "/usr/local/sbin/grain-ensure ${command} ${grain} ${value}":
+          unless  => "/usr/local/sbin/grain-ensure contains ${grain} ${value}",
+          require => File['/usr/local/sbin/grain-ensure'],
+        }
     }
   }
 }

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I9e24551c26bf659059d29c2b0eee2f7636a0dd92
Gerrit-PatchSet: 2
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Ryan Lane <[email protected]>
Gerrit-Reviewer: Ori.livneh <[email protected]>
Gerrit-Reviewer: Ryan Lane <[email protected]>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to