Public bug reported:

this was originally filed at
  https://bugs.centos.org/view.php?id=13931

If a datasource has vendordata_raw attribute that ends up
with something other than None or bytes, then storing the vendordata_raw
will cause a stack trace like:

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/cloudinit/cmd/main.py", line 513, in 
status_wrapper
    ret = functor(name, args)
  File "/usr/lib/python2.7/site-packages/cloudinit/cmd/main.py", line 281, in 
main_init
    init.update()
  File "/usr/lib/python2.7/site-packages/cloudinit/stages.py", line 357, in 
update
    self._store_vendordata()
  File "/usr/lib/python2.7/site-packages/cloudinit/stages.py", line 381, in 
_store_vendordata
    util.write_file(self._get_ipath('vendordata_raw'), raw_vd, 0o600)
  File "/usr/lib/python2.7/site-packages/cloudinit/util.py", line 1755, in 
write_file
    content = encode_text(content)
  File "/usr/lib/python2.7/site-packages/cloudinit/util.py", line 154, in 
encode_text
    return text.encode(encoding)
AttributeError: 'dict' object has no attribute 'encode'


Any datasource that uses convert_vendordata is possibly affected.

This is bad in that it fails, but not as bad as it could be.  Cloud-init
itself never re-constitutes the blob on disk.  Its only a convenience for
the user.

What we should do:
 a.) always have vendordata_raw be bytes
 b.) write them as bytes to the file

We can still allow the datasource to use something like 'convert_vendordata'
intelligently to get types other than bytes.  We just have to have
the 'get_vendordata' function access a different attribute in the datasource.

ie:
- DataSource.vendordata_raw should always be the raw bytes as found.
- get_vendordata would then use some other attribuate 'vendordata_converted' 
(?) to take advantage of the datasource specific knowlege.

** Affects: cloud-init
     Importance: Medium
         Status: Confirmed

** Affects: cloud-init (CentOS)
     Importance: Unknown
         Status: Unknown

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to cloud-init.
https://bugs.launchpad.net/bugs/1723213

Title:
  vendor_raw stored to disk is broken if non-empty and not bytes

Status in cloud-init:
  Confirmed
Status in cloud-init package in CentOS:
  Unknown

Bug description:
  this was originally filed at
    https://bugs.centos.org/view.php?id=13931

  If a datasource has vendordata_raw attribute that ends up
  with something other than None or bytes, then storing the vendordata_raw
  will cause a stack trace like:

  Traceback (most recent call last):
    File "/usr/lib/python2.7/site-packages/cloudinit/cmd/main.py", line 513, in 
status_wrapper
      ret = functor(name, args)
    File "/usr/lib/python2.7/site-packages/cloudinit/cmd/main.py", line 281, in 
main_init
      init.update()
    File "/usr/lib/python2.7/site-packages/cloudinit/stages.py", line 357, in 
update
      self._store_vendordata()
    File "/usr/lib/python2.7/site-packages/cloudinit/stages.py", line 381, in 
_store_vendordata
      util.write_file(self._get_ipath('vendordata_raw'), raw_vd, 0o600)
    File "/usr/lib/python2.7/site-packages/cloudinit/util.py", line 1755, in 
write_file
      content = encode_text(content)
    File "/usr/lib/python2.7/site-packages/cloudinit/util.py", line 154, in 
encode_text
      return text.encode(encoding)
  AttributeError: 'dict' object has no attribute 'encode'

  
  Any datasource that uses convert_vendordata is possibly affected.

  This is bad in that it fails, but not as bad as it could be.  Cloud-init
  itself never re-constitutes the blob on disk.  Its only a convenience for
  the user.

  What we should do:
   a.) always have vendordata_raw be bytes
   b.) write them as bytes to the file

  We can still allow the datasource to use something like 'convert_vendordata'
  intelligently to get types other than bytes.  We just have to have
  the 'get_vendordata' function access a different attribute in the datasource.

  ie:
  - DataSource.vendordata_raw should always be the raw bytes as found.
  - get_vendordata would then use some other attribuate 'vendordata_converted' 
(?) to take advantage of the datasource specific knowlege.

To manage notifications about this bug go to:
https://bugs.launchpad.net/cloud-init/+bug/1723213/+subscriptions

-- 
Mailing list: https://launchpad.net/~yahoo-eng-team
Post to     : yahoo-eng-team@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to