Horizon fails with empty 'cache_server_ip'

Bug #1644434 reported by Yotaro Konishi
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
puppet-horizon
Fix Released
High
Takashi Kajinami

Bug Description

According to https://docs.puppet.com/puppet/4.8/reference/lang_data_boolean.html, Puppet4 evaluates an empty string and an empty array as 'True' (With Puppet3, an empty string means 'False' but an empty array means 'True').

Therefore, if an empty string or array is assigend to 'cache_server_ip', following codes of templates/local_settings.py.erb

=====
    <% if @cache_server_ip %>
          <% if @cache_server_ip.kind_of?(Array) %>
            <% split = ":" + @cache_server_port + "','" %>
        'LOCATION': [ <% @cache_server_ip.each do |ip| -%>'<%= ip -%>:<%= @cache_server_port -%>',<% end -%> ],
          <% else %>
        'LOCATION': '<%= @cache_server_ip %>:<%= @cache_server_port %>',
          <% end %>
    <% end %>
=====

generates following local_settings.

=====
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',

        'LOCATION': [ ],

    }
}
=====

And this configuration ('LOCATION': [ ]) causes a Horizon error.

=====
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: Found 'compress' tags in:
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: /usr/share/openstack-dashboard/openstack_dashboard/templates/horizon/_conf.html
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: /usr/share/openstack-dashboard/openstack_dashboard/templates/_stylesheets.html
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: /usr/share/openstack-dashboard/openstack_dashboard/templates/horizon/_scripts.html
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: Compressing... Traceback (most recent call last):
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: File "/usr/share/openstack-dashboard/manage.py", line 23, in <module>
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: execute_from_command_line(sys.argv)
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute_from_command_line
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: utility.execute()
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 346, in execute
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: self.fetch_command(subcommand).run_from_argv(self.argv)
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 394, in run_from_argv
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: self.execute(*args, **cmd_options)
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 445, in execute
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: output = self.handle(*args, **options)
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: File "/usr/lib/python2.7/site-packages/compressor/management/commands/compress.py", line 286, in handle
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: self.compress(sys.stdout, **options)
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: File "/usr/lib/python2.7/site-packages/compressor/management/commands/compress.py", line 233, in compress
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: rendered = parser.render_nodelist(template, context, node)
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: File "/usr/lib/python2.7/site-packages/compressor/offline/django.py", line 120, in render_nodelist
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: return node.nodelist.render(context)
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: File "/usr/lib/python2.7/site-packages/django/template/base.py", line 905, in render
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: bit = self.render_node(node, context)
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 79, in render_node
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: return node.render(context)
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: File "/usr/lib/python2.7/site-packages/django/templatetags/cache.py", line 42, in render
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: fragment_cache = caches['default']
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: File "/usr/lib/python2.7/site-packages/django/core/cache/__init__.py", line 113, in __getitem__
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: cache = _create_cache(alias)
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: File "/usr/lib/python2.7/site-packages/django/core/cache/__init__.py", line 88, in _create_cache
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: return backend_cls(location, params)
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: File "/usr/lib/python2.7/site-packages/django/core/cache/backends/locmem.py", line 31, in __init__
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: self._cache = _caches.setdefault(name, {})
Notice: /Stage[main]/Horizon/Exec[refresh_horizon_django_compress]/returns: TypeError: unhashable type: 'list'
======

I think we should check whether not only 'cache_server_ip' is True, but also it is empty or not.

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to puppet-horizon (master)
Changed in puppet-horizon:
status: New → In Progress
Changed in puppet-horizon:
assignee: nobody → Takashi Kajinami (kajinamit)
importance: Undecided → High
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to puppet-horizon (master)

Reviewed: https://review.opendev.org/c/openstack/puppet-horizon/+/824079
Committed: https://opendev.org/openstack/puppet-horizon/commit/da4b549f6ab66ea0bf411d319c7fd44570557eee
Submitter: "Zuul (22348)"
Branch: master

commit da4b549f6ab66ea0bf411d319c7fd44570557eee
Author: Takashi Kajinami <email address hidden>
Date: Tue Jan 11 10:18:58 2022 +0900

    Make sure cache_server_ip is not empty

    Closes-Bug: #1644434
    Change-Id: I781bcac250ac55b5fd3df2faa32891afb1461687

Changed in puppet-horizon:
status: In Progress → Fix Released
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to puppet-horizon (stable/xena)

Fix proposed to branch: stable/xena
Review: https://review.opendev.org/c/openstack/puppet-horizon/+/824422

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to puppet-horizon (stable/xena)

Reviewed: https://review.opendev.org/c/openstack/puppet-horizon/+/824422
Committed: https://opendev.org/openstack/puppet-horizon/commit/847ef38394c70ea19457e38ddbb5a705e8f5d5aa
Submitter: "Zuul (22348)"
Branch: stable/xena

commit 847ef38394c70ea19457e38ddbb5a705e8f5d5aa
Author: Takashi Kajinami <email address hidden>
Date: Tue Jan 11 10:18:58 2022 +0900

    Make sure cache_server_ip is not empty

    Closes-Bug: #1644434
    Change-Id: I781bcac250ac55b5fd3df2faa32891afb1461687
    (cherry picked from commit da4b549f6ab66ea0bf411d319c7fd44570557eee)

tags: added: in-stable-xena
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix included in openstack/puppet-horizon 20.2.0

This issue was fixed in the openstack/puppet-horizon 20.2.0 release.

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix included in openstack/puppet-horizon 19.5.0

This issue was fixed in the openstack/puppet-horizon 19.5.0 release.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.