New Question

Revision history [back]

click to hide/show revision 1
initial version

Finally, I modify configdrive.py to dismount CDROM:

C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\metadata\services\configdrive.py

import os import shutil +import ctypes ... def cleanup(self): LOG.debug('Deleting metadata folder: %r', self.mgr.targetpath) shutil.rmtree(self.mgr.targetpath, ignoreerrors=True) self.metadatapath = None + driveletter = os.popen('wmic logicaldisk where VolumeName="config-2" get Caption | findstr /I ":"').read() + if driveletter: + LOG.debug('Eject metadata drive: %s', str(driveletter).rstrip()) + ctypes.windll.WINMM.mciSendStringW(u"open " + str(driveletter).rstrip() + " type cdaudio alias ddrive", None, 0, None) + ctypes.windll.WINMM.mciSendStringW(u"set d_drive door open", None, 0, None)

Finally, I modify configdrive.py to dismount CDROM:

C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\metadata\services\configdrive.py

import os os import shutil +import ctypes ctypes ... def cleanup(self): LOG.debug('Deleting metadata folder: %r', self.mgr.targetpath) shutil.rmtree(self.mgr.targetpath, path, ignoreerrors=True) self.metadatapath = None + driveletter = os.popen('wmic logicaldisk where where VolumeName="config-2" get Caption | | findstr /I ":"').read() + if driveletter: + LOG.debug('Eject metadata drive: %s', %s', str(driveletter).rstrip()) + ctypes.windll.WINMM.mciSendStringW(u"open + ctypes.windll.WINMM.mciSendStringW(u"open " + str(driveletter).rstrip() + " " type cdaudio alias ddrive", None, 0, 0, None) + ctypes.windll.WINMM.mciSendStringW(u"set + ctypes.windll.WINMM.mciSendStringW(u"set d_drive door open", None, 0, None)

Finally, I modify configdrive.py to dismount CDROM:

C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\metadata\services\configdrive.py

  

import os import shutil +import ctypes ... def cleanup(self): LOG.debug('Deleting metadata folder: %r', self.mgr.targetpath) self._mgr.target_path) shutil.rmtree(self.mgr.targetpath, ignoreerrors=True) shutil.rmtree(self._mgr.target_path, ignore_errors=True) self.metadatapath self._metadata_path = None + driveletter drive_letter = os.popen('wmic logicaldisk where where VolumeName="config-2" get Caption | | findstr /I ":"').read() + if driveletter: drive_letter: + LOG.debug('Eject metadata drive: %s', str(driveletter).rstrip()) %s', str(drive_letter).rstrip()) + ctypes.windll.WINMM.mciSendStringW(u"open ctypes.windll.WINMM.mciSendStringW(u"open " + str(driveletter).rstrip() str(drive_letter).rstrip() + " " type cdaudio alias ddrive", d_drive", None, 0, 0, None) + ctypes.windll.WINMM.mciSendStringW(u"set ctypes.windll.WINMM.mciSendStringW(u"set d_drive door open", None, 0, None)

None)

Finally, I modify configdrive.py to dismount CDROM:

C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\metadata\services\configdrive.py

  import os   import shutil
+import ctypes ...
    def cleanup(self):
        LOG.debug('Deleting metadata folder: %r', self._mgr.target_path)
        shutil.rmtree(self._mgr.target_path, ignore_errors=True)
        self._metadata_path = None
+       drive_letter = os.popen('wmic logicaldisk where VolumeName="config-2" get Caption | findstr /I ":"').read()
+       if drive_letter:
+           LOG.debug('Eject metadata drive: %s', str(drive_letter).rstrip())
+           ctypes.windll.WINMM.mciSendStringW(u"open " + str(drive_letter).rstrip() + " type cdaudio alias d_drive", None, 0, None)
+           ctypes.windll.WINMM.mciSendStringW(u"set d_drive door open", None, 0, None)

Finally, I modify configdrive.py to dismount CDROM:

C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\metadata\services\configdrive.py

  import os  
  import shutil
+import ctypes ctypes

... def cleanup(self): LOG.debug('Deleting metadata folder: %r', self._mgr.target_path) shutil.rmtree(self._mgr.target_path, ignore_errors=True) self._metadata_path self.mgr.targetpath) shutil.rmtree(self.mgr.targetpath, ignoreerrors=True) self.metadatapath = None + drive_letter + driveletter = os.popen('wmic logicaldisk where VolumeName="config-2" get Caption | findstr /I ":"').read() + if drive_letter: driveletter: + LOG.debug('Eject metadata drive: %s', str(drive_letter).rstrip()) str(driveletter).rstrip()) + ctypes.windll.WINMM.mciSendStringW(u"open " + str(drive_letter).rstrip() str(driveletter).rstrip() + " type cdaudio alias d_drive", ddrive", None, 0, None) + ctypes.windll.WINMM.mciSendStringW(u"set d_drive door open", None, 0, None) None)

Finally, I modify configdrive.py to dismount CDROM:

C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\metadata\services\configdrive.py

 

import os
import shutil +import ctypes

... def cleanup(self): LOG.debug('Deleting metadata folder: %r', self.mgr.targetpath) shutil.rmtree(self.mgr.targetpath, ignoreerrors=True) self.metadatapath = None + driveletter = os.popen('wmic logicaldisk where VolumeName="config-2" get Caption | findstr /I ":"').read() + if driveletter: + LOG.debug('Eject metadata drive: %s', str(driveletter).rstrip()) + ctypes.windll.WINMM.mciSendStringW(u"open " + str(driveletter).rstrip() + " type cdaudio alias ddrive", None, 0, None) + ctypes.windll.WINMM.mciSendStringW(u"set d_drive door open", None, 0, None)

Finally, I modify configdrive.py to dismount CDROM:

C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\metadata\services\configdrive.py

 import os 
os import shutil +import ctypes ... ... def cleanup(self): LOG.debug('Deleting metadata folder: %r', self.mgr.targetpath) self._mgr.target_path) shutil.rmtree(self.mgr.targetpath, ignoreerrors=True) shutil.rmtree(self._mgr.target_path, ignore_errors=True) self.metadatapath self._metadata_path = None + driveletter drive_letter = os.popen('wmic logicaldisk where VolumeName="config-2" get Caption | findstr /I ":"').read() + if driveletter: drive_letter: + LOG.debug('Eject metadata drive: %s', str(driveletter).rstrip()) str(drive_letter).rstrip()) + ctypes.windll.WINMM.mciSendStringW(u"open " + str(driveletter).rstrip() str(drive_letter).rstrip() + " type cdaudio alias ddrive", d_drive", None, 0, None) + ctypes.windll.WINMM.mciSendStringW(u"set d_drive door open", None, 0, None)

None)

Finally, I modify configdrive.py to dismount CDROM:CDROM, and tested in windows 2016 Std server:

C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\metadata\services\configdrive.py

 import os
 import shutil
+import ctypes
 ... ...
        def cleanup(self):
            LOG.debug('Deleting metadata folder: %r', self._mgr.target_path)
            shutil.rmtree(self._mgr.target_path, ignore_errors=True)
            self._metadata_path = None
    +       drive_letter = os.popen('wmic logicaldisk where VolumeName="config-2" get Caption | findstr /I ":"').read()
    +       if drive_letter:
    +           LOG.debug('Eject metadata drive: %s', str(drive_letter).rstrip())
    +           ctypes.windll.WINMM.mciSendStringW(u"open " + str(drive_letter).rstrip() + " type cdaudio alias d_drive", None, 0, None)
    +           ctypes.windll.WINMM.mciSendStringW(u"set d_drive door open", None, 0, None)

Finally, I modify configdrive.py to dismount CDROM, and tested in windows 2016 Std server:server.

Update: just tested windows 2012 R2, also work.

C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\metadata\services\configdrive.py

 import os
 import shutil
+import ctypes
 ... ...
        def cleanup(self):
            LOG.debug('Deleting metadata folder: %r', self._mgr.target_path)
            shutil.rmtree(self._mgr.target_path, ignore_errors=True)
            self._metadata_path = None
    +       drive_letter = os.popen('wmic logicaldisk where VolumeName="config-2" get Caption | findstr /I ":"').read()
    +       if drive_letter:
    +           LOG.debug('Eject metadata drive: %s', str(drive_letter).rstrip())
    +           ctypes.windll.WINMM.mciSendStringW(u"open " + str(drive_letter).rstrip() + " type cdaudio alias d_drive", None, 0, None)
    +           ctypes.windll.WINMM.mciSendStringW(u"set d_drive door open", None, 0, None)