From 5624865f86c532fc078fac5e197f767ded75fb1f Mon Sep 17 00:00:00 2001 From: Mark Troyer Date: Tue, 3 Jul 2018 18:41:11 -0700 Subject: [PATCH 1/3] Fix issue with redismod.hmset method redis.StrictRedis.hmset expects a dict as its second arg. hmset(self, name, mapping) method of redis.client.StrictRedis instance Set key to value within hash ``name`` for each corresponding key and value from the ``mapping`` dict --- salt/modules/redismod.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/modules/redismod.py b/salt/modules/redismod.py index 40ebbdc3a1ad..0544feb8e158 100644 --- a/salt/modules/redismod.py +++ b/salt/modules/redismod.py @@ -395,7 +395,7 @@ def hmset(key, **fieldsvals): database = fieldsvals.pop('db', None) password = fieldsvals.pop('password', None) server = _connect(host, port, database, password) - return server.hmset(key, **fieldsvals) + return server.hmset(key, fieldsvals) def hset(key, field, value, host=None, port=None, db=None, password=None): From f7fa7f57c68e1048a365a1720b9f3339b5e56737 Mon Sep 17 00:00:00 2001 From: Mark Troyer Date: Thu, 5 Jul 2018 11:43:46 -0700 Subject: [PATCH 2/3] Found another issue with redismod.hmset When run with salt.function in an orchestration, several private key/value pairs are passed in addition to the requested pairs: 127.0.0.1:6379> hkeys testing 1) "__pub_arg" 2) "field1" 3) "__pub_jid" 4) "__pub_fun" 5) "field2" 6) "field3" 7) "__pub_tgt" 8) "__pub_ret" 9) "__pub_user" 10) "__pub_master_id" 11) "__pub_tgt_type" Updated to filter them. --- salt/modules/redismod.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/salt/modules/redismod.py b/salt/modules/redismod.py index 0544feb8e158..e32eb5519f2b 100644 --- a/salt/modules/redismod.py +++ b/salt/modules/redismod.py @@ -395,7 +395,14 @@ def hmset(key, **fieldsvals): database = fieldsvals.pop('db', None) password = fieldsvals.pop('password', None) server = _connect(host, port, database, password) - return server.hmset(key, fieldsvals) + # orchestration passes several private key/var pairs in that we don't want + # to set in redis. + redispairs = {} + for field, value in fieldsvals.iteritems(): + if not field.startswith('__'): + redispairs[field] = value + + return server.hmset(key, redispairs) def hset(key, field, value, host=None, port=None, db=None, password=None): From 65817ac74dd80d8d2813e82a5f64f2945c61d218 Mon Sep 17 00:00:00 2001 From: Mark Troyer Date: Thu, 5 Jul 2018 13:56:02 -0700 Subject: [PATCH 3/3] Use clean_kwargs method instead --- salt/modules/redismod.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/salt/modules/redismod.py b/salt/modules/redismod.py index e32eb5519f2b..286fb7b1cbe7 100644 --- a/salt/modules/redismod.py +++ b/salt/modules/redismod.py @@ -19,6 +19,7 @@ from __future__ import absolute_import from salt.ext.six.moves import zip from salt.ext import six +from salt.utils import clean_kwargs from datetime import datetime # Import third party libs @@ -395,14 +396,7 @@ def hmset(key, **fieldsvals): database = fieldsvals.pop('db', None) password = fieldsvals.pop('password', None) server = _connect(host, port, database, password) - # orchestration passes several private key/var pairs in that we don't want - # to set in redis. - redispairs = {} - for field, value in fieldsvals.iteritems(): - if not field.startswith('__'): - redispairs[field] = value - - return server.hmset(key, redispairs) + return server.hmset(key, clean_kwargs(**fieldsvals)) def hset(key, field, value, host=None, port=None, db=None, password=None):