New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

grafana4_user.present and grafana4_org.present states not working in 2018.3.0 #46985

Closed
OrlandoArcapix opened this Issue Apr 10, 2018 · 8 comments

Comments

Projects
None yet
3 participants
@OrlandoArcapix
Contributor

OrlandoArcapix commented Apr 10, 2018

Description of Issue/Question

I'm testing 2018.3.0 and have run into an issue with the grafana4 states - I'm getting:

  {u'changes': {},
   u'comment': u"An exception occurred in this state: 'Changes' should be a dictionary.",
   u'name': u'later',
   u'result': False}

from the grafana4_user.present and grafana4_org.present states.

Setup

  1. Set up grafana4.
  2. Apply a state such as this:
test grafana org:
  grafana4_org.present:
    - name: 'Test'
    - users:
        admin: Admin

test grafana user:
  grafana4_user.present:
    - name: test
    - password: 'somepass'
    - is_admin: False
    - email: 'test@localhost'

Steps to Reproduce Issue

On the first run, the above state will create the Test org (even with test=true on the state.apply). On a subsequent run, it will return:

# salt-call state.apply grafana.test test=false
local:
The State execution failed to record the order in which all states were executed. The state return missing data is:
{u'changes': {},
 u'comment': u"An exception occurred in this state: 'Changes' should be a dictionary.",
 u'name': u'later',
 u'result': False}
The State execution failed to record the order in which all states were executed. The state return missing data is:
{u'changes': {},
 u'comment': u"An exception occurred in this state: 'Changes' should be a dictionary.",
 u'name': u'later',
 u'result': False}
----------
          ID: test grafana org
    Function: grafana4_org.present
        Name: Test
      Result: False
     Comment: An exception occurred in this state: 'Changes' should be a dictionary.
     Changes:
----------
          ID: test grafana user
    Function: grafana4_user.present
        Name: test
      Result: False
     Comment: An exception occurred in this state: 'Changes' should be a dictionary.
     Changes:

Summary for local
------------
Succeeded: 0
Failed:    2
------------
Total states run:     2
Total run time:   0.000 ms

Versions Report

# salt-call --versions-report
Salt Version:
           Salt: 2018.3.0

Dependency Versions:
           cffi: Not Installed
       cherrypy: Not Installed
       dateutil: 2.6.1
      docker-py: Not Installed
          gitdb: Not Installed
      gitpython: Not Installed
          ioflo: Not Installed
         Jinja2: 2.7.2
        libgit2: Not Installed
        libnacl: Not Installed
       M2Crypto: 0.21.1
           Mako: 1.0.7
   msgpack-pure: Not Installed
 msgpack-python: 0.5.1
   mysql-python: 1.2.5
      pycparser: Not Installed
       pycrypto: 2.6.1
   pycryptodome: 3.4.3
         pygit2: Not Installed
         Python: 2.7.5 (default, Aug  4 2017, 00:39:18)
   python-gnupg: Not Installed
         PyYAML: 3.11
          PyZMQ: 15.3.0
           RAET: Not Installed
          smmap: Not Installed
        timelib: Not Installed
        Tornado: 4.2.1
            ZMQ: 4.1.4

System Versions:
           dist: centos 7.4.1708 Core
         locale: UTF-8
        machine: x86_64
        release: 3.10.0-693.17.1.el7.x86_64
         system: Linux
        version: CentOS Linux 7.4.1708 Core
@OrlandoArcapix

This comment has been minimized.

Contributor

OrlandoArcapix commented Apr 10, 2018

What should "changes" be if there are no changes - it looks like it's currently returning {}?

@rallytime

This comment has been minimized.

Contributor

rallytime commented Apr 11, 2018

@OrlandoArcapix Was this working for you in a previous version? It looks like the grafana4 states are missing the test=true support, which is a duplicate of #43675. However, that issue doesn't specifically mention the dictionary error so let's keep this open for that part.

Changes should be an empty dictionary if there are no changes. I glanced through the code, but I don't see anything obvious there. I also don't see any recent changes besides some unicode updates in these files for this release. Do you have anything else like some tracebacks in your logs that might further help trouble shoot that?

@OrlandoArcapix

This comment has been minimized.

Contributor

OrlandoArcapix commented Apr 11, 2018

Hey @rallytime - yeah, it works okay in 2017.7, this (the "changes={}" thing) just cropped up in 2018.3.0 (the missing "test=true" issue is present for me in 2017.7).

I didn't spot anything of interest in the debug logging when I was doing this - but I'll get a node up and see if I can get a cleaner test case for further debugging.

@OrlandoArcapix

This comment has been minimized.

Contributor

OrlandoArcapix commented Apr 12, 2018

Here we go - here's an output from a fairly clean environment.

# salt-call state.apply grafana.test --log-level=trace test=false
[DEBUG   ] Reading configuration from /etc/salt/minion
[DEBUG   ] Including configuration from '/etc/salt/minion.d/minion.conf'
[DEBUG   ] Reading configuration from /etc/salt/minion.d/minion.conf
[WARNING ] The 'saltenv' and 'environment' minion config options cannot both be used. Ignoring 'environment' in favor of 'saltenv'.
[TRACE   ] The required configuration section, 'fluent_handler', was not found the in the configuration. Not loading the fluent logging handlers module.
[TRACE   ] None of the required configuration sections, 'logstash_udp_handler' and 'logstash_zmq_handler', were found in the configuration. Not loading the Logstash logging handlers module.
[DEBUG   ] Configuration file path: /etc/salt/minion
[WARNING ] Insecure logging configuration detected! Sensitive data may be logged.
[DEBUG   ] Grains refresh requested. Refreshing grains.
[DEBUG   ] Reading configuration from /etc/salt/minion
[DEBUG   ] Including configuration from '/etc/salt/minion.d/minion.conf'
[DEBUG   ] Reading configuration from /etc/salt/minion.d/minion.conf
[TRACE   ] 'esxcli' could not be found in the following search path: '[u'/usr/lpp/mmfs/bin', u'/usr/local/sbin', u'/sbin', u'/bin', u'/usr/sbin', u'/usr/bin', u'/opt/arcapix/bin', u'/root/bin', u'/usr/local/bin']'
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Depends decorator instantiated with dep list of (False,)
[TRACE   ] Error loading grains.napalm: "napalm"" (/usr/lib/python2.7/site-packages/salt/grains/napalm.pyc) cannot be loaded: NAPALM is not installed or not running in a (proxy) minion
[TRACE   ] Loading core.append_domain grain
[TRACE   ] Loading core.default_gateway grain
[TRACE   ] Loading core.dns grain
[TRACE   ] Loading core.get_machine_id grain
[TRACE   ] Loading core.get_master grain
[TRACE   ] Loading core.get_server_id grain
[TRACE   ] Loading core.hostname grain
[TRACE   ] Loading core.hwaddr_interfaces grain
[TRACE   ] Loading core.id_ grain
[TRACE   ] Loading core.ip4_interfaces grain
[TRACE   ] Loading core.ip6_interfaces grain
[TRACE   ] Loading core.ip_fqdn grain
[TRACE   ] Loading core.ip_interfaces grain
[TRACE   ] Loading core.linux_distribution grain
[TRACE   ] Loading core.locale_info grain
[TRACE   ] Loading core.os_data grain
[TRACE   ] Loading core.path grain
[TRACE   ] Loading core.pythonexecutable grain
[TRACE   ] Loading core.pythonpath grain
[TRACE   ] Loading core.pythonversion grain
[TRACE   ] Loading core.saltpath grain
[TRACE   ] Loading core.saltversion grain
[TRACE   ] Loading core.saltversioninfo grain
[TRACE   ] Loading core.zmqversion grain
[TRACE   ] Loading disks.disks grain
[TRACE   ] Device sda reports itself as an HDD
[TRACE   ] Loading extra.config grain
[TRACE   ] Loading extra.shell grain
[TRACE   ] Loading mdadm.mdadm grain
[TRACE   ] Loading minion_process.grains grain
[TRACE   ] Loading opts.opts grain
[TRACE   ] Loading zfs.zfs grain
[TRACE   ] 'zfs-fuse' could not be found in the following search path: '[u'/usr/lpp/mmfs/bin', u'/usr/local/sbin', u'/sbin', u'/bin', u'/usr/sbin', u'/usr/bin', u'/opt/arcapix/bin', u'/root/bin', u'/usr/local/bin']'
[DEBUG   ] Determining pillar cache
[DEBUG   ] LazyLoaded jinja.render
[DEBUG   ] LazyLoaded yaml.render
[DEBUG   ] LazyLoaded jinja.render
[DEBUG   ] LazyLoaded yaml.render
[DEBUG   ] LazyLoaded state.apply
[DEBUG   ] LazyLoaded saltutil.is_running
[DEBUG   ] LazyLoaded grains.get
[DEBUG   ] LazyLoaded roots.envs
[DEBUG   ] Could not LazyLoad roots.init: 'roots.init' is not available.
[DEBUG   ] Updating roots fileserver cache
[TRACE   ] Lockfile /var/cache/salt/minion/file_lists/roots/.pixstor4.w created
[TRACE   ] roots: Processing /opt/arcapix/salt/states/grafana
[TRACE   ] roots: /opt/arcapix/salt/states/grafana is not a link
[TRACE   ] roots: /opt/arcapix/salt/states/grafana relative path is grafana
[TRACE   ] roots: Processing /opt/arcapix/salt/states/grafana/test.sls
[TRACE   ] roots: /opt/arcapix/salt/states/grafana/test.sls is not a link
[TRACE   ] roots: /opt/arcapix/salt/states/grafana/test.sls relative path is grafana/test.sls
[TRACE   ] Lockfile /var/cache/salt/minion/file_lists/roots/.pixstor4.w removed
[DEBUG   ] Determining pillar cache
[DEBUG   ] LazyLoaded jinja.render
[DEBUG   ] LazyLoaded yaml.render
[INFO    ] Loading fresh modules for state activity
[DEBUG   ] LazyLoaded jinja.render
[DEBUG   ] LazyLoaded yaml.render
[DEBUG   ] In saltenv 'pixstor4', looking at rel_path 'grafana/test.sls' to resolve 'salt://grafana/test.sls'
[DEBUG   ] In saltenv 'pixstor4', ** considering ** path '/var/cache/salt/minion/files/pixstor4/grafana/test.sls' to resolve 'salt://grafana/test.sls'
[DEBUG   ] compile template: /var/cache/salt/minion/files/pixstor4/grafana/test.sls
[DEBUG   ] Jinja search path: [u'/var/cache/salt/minion/files/pixstor4']
[DEBUG   ] LazyLoaded roots.envs
[DEBUG   ] Could not LazyLoad roots.init: 'roots.init' is not available.
[PROFILE ] Time (in seconds) to render '/var/cache/salt/minion/files/pixstor4/grafana/test.sls' using 'jinja' renderer: 0.0212528705597
[DEBUG   ] Rendered data from file: /var/cache/salt/minion/files/pixstor4/grafana/test.sls:
test grafana org:
  grafana4_org.present:
    - name: 'Test'
    - users:
        admin: Admin

test grafana user:
  grafana4_user.present:
    - name: test
    - password: 'somepass'
    - is_admin: False
    - email: 'test@localhost'

[DEBUG   ] Results of YAML rendering:
OrderedDict([(u'test grafana org', OrderedDict([(u'grafana4_org.present', [OrderedDict([(u'name', u'Test')]), OrderedDict([(u'users', OrderedDict([(u'admin', u'Admin')]))])])])), (u'test grafana user', OrderedDict([(u'grafana4_user.present', [OrderedDict([(u'name', u'test')]), OrderedDict([(u'password', u'somepass')]), OrderedDict([(u'is_admin', False)]), OrderedDict([(u'email', u'test@localhost')])])]))])
[PROFILE ] Time (in seconds) to render '/var/cache/salt/minion/files/pixstor4/grafana/test.sls' using 'yaml' renderer: 0.00322008132935
[DEBUG   ] LazyLoaded config.option
[DEBUG   ] LazyLoaded grafana4.get_org
[DEBUG   ] LazyLoaded grafana4_org.present
[INFO    ] Running state [Test] at time 09:45:30.910291
[INFO    ] Executing state grafana4_org.present for [Test]
[DEBUG   ] Starting new HTTP connection (1): localhost
[DEBUG   ] http://localhost:3030 "GET /api/orgs/name/Test HTTP/1.1" 200 100
[DEBUG   ] Starting new HTTP connection (1): localhost
[DEBUG   ] http://localhost:3030 "GET /api/orgs/name/Test HTTP/1.1" 200 100
[DEBUG   ] Starting new HTTP connection (1): localhost
[DEBUG   ] http://localhost:3030 "POST /api/user/using/2 HTTP/1.1" 200 65
[DEBUG   ] Starting new HTTP connection (1): localhost
[DEBUG   ] http://localhost:3030 "GET /api/org/preferences HTTP/1.1" 200 67
[DEBUG   ] Starting new HTTP connection (1): localhost
[DEBUG   ] http://localhost:3030 "GET /api/orgs/name/Test HTTP/1.1" 200 100
[DEBUG   ] Starting new HTTP connection (1): localhost
[DEBUG   ] http://localhost:3030 "POST /api/user/using/2 HTTP/1.1" 200 65
[DEBUG   ] Starting new HTTP connection (1): localhost
[DEBUG   ] http://localhost:3030 "GET /api/org/users HTTP/1.1" 200 143
[DEBUG   ] Starting new HTTP connection (1): localhost
[DEBUG   ] http://localhost:3030 "GET /api/orgs/name/Test HTTP/1.1" 200 100
[DEBUG   ] Starting new HTTP connection (1): localhost
[DEBUG   ] http://localhost:3030 "POST /api/user/using/2 HTTP/1.1" 200 65
[DEBUG   ] Starting new HTTP connection (1): localhost
[DEBUG   ] http://localhost:3030 "GET /api/org/users HTTP/1.1" 200 143
[INFO    ] Org Test already up-to-date
[INFO    ] Completed state [Test] at time 09:45:31.413157 (duration_in_ms=502.867)
[DEBUG   ] LazyLoaded grafana4_user.present
[INFO    ] Running state [test] at time 09:45:31.414310
[INFO    ] Executing state grafana4_user.present for [test]
[DEBUG   ] Starting new HTTP connection (1): localhost
[DEBUG   ] http://localhost:3030 "GET /api/users HTTP/1.1" 200 219
[DEBUG   ] Starting new HTTP connection (1): localhost
[DEBUG   ] http://localhost:3030 "GET /api/users/4 HTTP/1.1" 200 106
[INFO    ] User test already up-to-date
[INFO    ] Completed state [test] at time 09:45:31.510603 (duration_in_ms=96.292)
[DEBUG   ] File /var/cache/salt/minion/accumulator/56895760 does not exist, no need to cleanup
[DEBUG   ] LazyLoaded config.option
[DEBUG   ] LazyLoaded state.check_result
[DEBUG   ] LazyLoaded highstate.output
[TRACE   ] data = {u'local': {u'grafana4_org_|-test grafana org_|-Test_|-present': {u'comment': u"An exception occurred in this state: 'Changes' should be a dictionary.", u'name': u'later', u'start_time': u'', u'result': False, u'duration': u'', u'changes': {}}, u'grafana4_user_|-test grafana user_|-test_|-present': {u'comment': u"An exception occurred in this state: 'Changes' should be a dictionary.", u'name': u'later', u'start_time': u'', u'result': False, u'duration': u'', u'changes': {}}}}
local:
The State execution failed to record the order in which all states were executed. The state return missing data is:
{u'changes': {},
 u'comment': u"An exception occurred in this state: 'Changes' should be a dictionary.",
 u'name': u'later',
 u'result': False}
The State execution failed to record the order in which all states were executed. The state return missing data is:
{u'changes': {},
 u'comment': u"An exception occurred in this state: 'Changes' should be a dictionary.",
 u'name': u'later',
 u'result': False}
----------
          ID: test grafana org
    Function: grafana4_org.present
        Name: Test
      Result: False
     Comment: An exception occurred in this state: 'Changes' should be a dictionary.
     Changes:
----------
          ID: test grafana user
    Function: grafana4_user.present
        Name: test
      Result: False
     Comment: An exception occurred in this state: 'Changes' should be a dictionary.
     Changes:

Summary for local
------------
Succeeded: 0
Failed:    2
------------
Total states run:     2
Total run time:   0.000 ms

After a bit of debugging - I wondered about this line:

ret['changes'] = None

where it sets "changes" to "None", rather than {}:

    if not create:
        if ret['changes']:
            ret['comment'] = 'Org {0} updated'.format(name)
        else:
            ret['changes'] = None
            ret['comment'] = 'Org {0} already up-to-date'.format(name)

(and this line in grafana4_user.py:

ret['changes'] = None
)

Indeed, if I change this to {} instead of None, it seems to work okay* - does that seem a reasonable workaround? If it does, I can put in a quick pull request with that fix applied.

*okay:

  • remove a grafana org, it is recreated when applying the state with test=false
  • remove a grafana org, it is not created when applying state with test=true, but neither is it reported as being in the wrong state
@rallytime

This comment has been minimized.

Contributor

rallytime commented Apr 12, 2018

@OrlandoArcapix Yep, that would do it. changes should not be None, it should be an empty dictionary. A PR would be most welcome!

A more involved fix will be needed for the test=true bug. The states were never written with support for that, unfortunately. I can talk you through it in general terms if you wanted to fix that as well, otherwise the empty dict issue would be just fine to fix this issue you're presently hitting here.

@OrlandoArcapix

This comment has been minimized.

Contributor

OrlandoArcapix commented Apr 13, 2018

There's a few other instances of setting changes to None outside of the grafana4 state:

# grep "changes'] = None" *
boto_cfn.py:        ret['changes'] = None
boto_cfn.py:        ret['changes'] = None
boto_cfn.py:        ret['changes'] = None
boto_iam.py:    ret['changes'] = None
boto_iot.py:            ret['changes'] = None
glassfish.py:            ret['changes'] = None
glassfish.py:            ret['changes'] = None
glassfish.py:        ret['changes'] = None
grafana_datasource.py:            ret['changes'] = None
influxdb_user.py:                ret['changes'] = None
vault.py:        ret['changes'] = None
zenoss.py:        ret['changes'] = None
zenoss.py:        ret['changes'] = None

Worth getting these changed at the same time?

@OrlandoArcapix

This comment has been minimized.

Contributor

OrlandoArcapix commented Apr 13, 2018

Pull request in to fix the return of 'changes' in the grafana4 states: #47048

@rallytime

This comment has been minimized.

Contributor

rallytime commented Apr 13, 2018

Awesome! Thanks @OrlandoArcapix! If you wanted to fix those other references (probably in some new PRs since I am not sure which branch those should be fixed in offhand), that would be great!

I'll close this one up for now since you've fixed the main issue.

@rallytime rallytime closed this Apr 13, 2018

bbinet added a commit to bbinet/salt that referenced this issue Jul 20, 2018

bbinet added a commit to bbinet/salt that referenced this issue Jul 20, 2018

cro added a commit to cro/salt that referenced this issue Jul 26, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment