Bug 1972283 - AttributeError: module 'collections' has no attribute 'Iterable'
Summary: AttributeError: module 'collections' has no attribute 'Iterable'
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: cloud-init
Version: rawhide
Hardware: Unspecified
OS: Unspecified
urgent
urgent
Target Milestone: ---
Assignee: Dusty Mabe
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2021-06-15 15:22 UTC by Viktor Ashirov
Modified: 2021-06-17 17:29 UTC (History)
8 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2021-06-17 17:29:12 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Launchpad 1932048 0 None None None 2021-06-15 15:46:03 UTC

Description Viktor Ashirov 2021-06-15 15:22:05 UTC
Description of problem:
cloud-init crashes with AttributeError: module 'collections' has no attribute 'Iterable'

Version-Release number of selected component (if applicable):
cloud-init-20.4-5.fc35.noarch.rpm 

How reproducible:
always

Steps to Reproduce:
1. /usr/bin/cloud-init init

Actual results:
><fs> cat /var/log/cloud-init-output.log 
failed run of stage init-local
------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python3.10/site-packages/cloudinit/cmd/main.py", line 653, in status_wrapper
    ret = functor(name, args)
  File "/usr/lib/python3.10/site-packages/cloudinit/cmd/main.py", line 261, in main_init
    logging.setupLogging(init.cfg)
  File "/usr/lib/python3.10/site-packages/cloudinit/log.py", line 81, in setupLogging
    elif isinstance(a_cfg, (collections.Iterable)):
AttributeError: module 'collections' has no attribute 'Iterable'
------------------------------------------------------------
failed run of stage init
------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python3.10/site-packages/cloudinit/cmd/main.py", line 653, in status_wrapper
    ret = functor(name, args)
  File "/usr/lib/python3.10/site-packages/cloudinit/cmd/main.py", line 261, in main_init
    logging.setupLogging(init.cfg)
  File "/usr/lib/python3.10/site-packages/cloudinit/log.py", line 81, in setupLogging
    elif isinstance(a_cfg, (collections.Iterable)):
AttributeError: module 'collections' has no attribute 'Iterable'
------------------------------------------------------------
failed run of stage modules-config
------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python3.10/site-packages/cloudinit/cmd/main.py", line 653, in status_wrapper
    ret = functor(name, args)
  File "/usr/lib/python3.10/site-packages/cloudinit/cmd/main.py", line 509, in main_modules
    logging.setupLogging(mods.cfg)
  File "/usr/lib/python3.10/site-packages/cloudinit/log.py", line 81, in setupLogging
    elif isinstance(a_cfg, (collections.Iterable)):
AttributeError: module 'collections' has no attribute 'Iterable'
------------------------------------------------------------
failed run of stage modules-final
------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python3.10/site-packages/cloudinit/cmd/main.py", line 653, in status_wrapper
    ret = functor(name, args)
  File "/usr/lib/python3.10/site-packages/cloudinit/cmd/main.py", line 509, in main_modules
    logging.setupLogging(mods.cfg)
  File "/usr/lib/python3.10/site-packages/cloudinit/log.py", line 81, in setupLogging
    elif isinstance(a_cfg, (collections.Iterable)):
AttributeError: module 'collections' has no attribute 'Iterable'
------------------------------------------------------------


Expected results:
cloud-init doesn't crash

Additional info:

Comment 1 Viktor Ashirov 2021-06-15 15:30:35 UTC
Here's a quick fix: 

diff --git a/cloudinit/log.py b/cloudinit/log.py
index 2e5df042..fbd3e80a 100644
--- a/cloudinit/log.py
+++ b/cloudinit/log.py
@@ -8,7 +8,10 @@
 #
 # This file is part of cloud-init. See LICENSE file for license information.
 
-import collections
+try:
+    import collections.abc as collectionsAbc  # python 3.6+
+except ImportError:
+    import collections as collectionsAbc
 import io
 import logging
 import logging.config
@@ -78,7 +81,7 @@ def setupLogging(cfg=None):
         for a_cfg in cfg['log_cfgs']:
             if isinstance(a_cfg, str):
                 log_cfgs.append(a_cfg)
-            elif isinstance(a_cfg, (collections.Iterable)):
+            elif isinstance(a_cfg, (collectionsAbc.Iterable)):
                 cfg_str = [str(c) for c in a_cfg]
                 log_cfgs.append('\n'.join(cfg_str))
             else:

Comment 2 Viktor Ashirov 2021-06-16 07:38:19 UTC
Moving to POST as it's fixed upstream: https://github.com/canonical/cloud-init/pull/922
And raising the priority because latest rawhide qcow2 images are unusable without working cloud-init.

Comment 3 Viktor Ashirov 2021-06-17 17:29:12 UTC
Fixed in https://koji.fedoraproject.org/koji/buildinfo?buildID=1772815


Note You need to log in before you can comment on or make changes to this bug.