Adds Windows pagefiles plugin
Configures the Windows pagefiles on volumes identified by mount point or label. The pagefile size is currently set as system managed. Change-Id: Ibb8721854ffb62f6026abf951c96969d1a132e1f Implements: blueprint add-pagefiles-plugin Co-Authored-By: Stefan Caraiman <scaraiman@cloudbasesolutions.com>
This commit is contained in:
		
							
								
								
									
										79
									
								
								cloudbaseinit/plugins/windows/pagefiles.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								cloudbaseinit/plugins/windows/pagefiles.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| # Copyright (c) 2017 Cloudbase Solutions Srl | ||||
| # | ||||
| #    Licensed under the Apache License, Version 2.0 (the "License"); you may | ||||
| #    not use this file except in compliance with the License. You may obtain | ||||
| #    a copy of the License at | ||||
| # | ||||
| #         http://www.apache.org/licenses/LICENSE-2.0 | ||||
| # | ||||
| #    Unless required by applicable law or agreed to in writing, software | ||||
| #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||||
| #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||||
| #    License for the specific language governing permissions and limitations | ||||
| #    under the License. | ||||
|  | ||||
| import os | ||||
|  | ||||
| from oslo_log import log as oslo_logging | ||||
|  | ||||
| from cloudbaseinit import conf as cloudbaseinit_conf | ||||
| from cloudbaseinit import exception | ||||
| from cloudbaseinit.osutils import factory as osutils_factory | ||||
| from cloudbaseinit.plugins.common import base | ||||
|  | ||||
| CONF = cloudbaseinit_conf.CONF | ||||
| LOG = oslo_logging.getLogger(__name__) | ||||
|  | ||||
|  | ||||
| class PageFilesPlugin(base.BasePlugin): | ||||
|  | ||||
|     def _get_page_file_volumes_by_mount_point(self, osutils): | ||||
|         page_file_volume_paths = [] | ||||
|         for mount_point in CONF.page_file_volume_mount_points: | ||||
|             try: | ||||
|                 paths = osutils.get_volume_path_names_by_mount_point( | ||||
|                     mount_point) | ||||
|                 if paths: | ||||
|                     page_file_volume_paths.append(paths[0]) | ||||
|             except exception.ItemNotFoundException: | ||||
|                 LOG.info("Mount point not found: %s", mount_point) | ||||
|         return page_file_volume_paths | ||||
|  | ||||
|     def _get_page_file_volumes_by_label(self, osutils): | ||||
|         page_file_logical_drives = [] | ||||
|         logical_drives = osutils.get_logical_drives() | ||||
|         for logical_drive in logical_drives: | ||||
|             label = osutils.get_volume_label(logical_drive) | ||||
|             if not label: | ||||
|                 continue | ||||
|             if label.upper() in [ | ||||
|                     v.upper() for v in CONF.page_file_volume_labels]: | ||||
|                 page_file_logical_drives.append(logical_drive) | ||||
|         return page_file_logical_drives | ||||
|  | ||||
|     def _get_page_file_volumes(self, osutils): | ||||
|         return list(set(self._get_page_file_volumes_by_mount_point(osutils)) | | ||||
|                     set(self._get_page_file_volumes_by_label(osutils))) | ||||
|  | ||||
|     def execute(self, service, shared_data): | ||||
|         osutils = osutils_factory.get_os_utils() | ||||
|         page_file_volumes = sorted(self._get_page_file_volumes(osutils)) | ||||
|         reboot_required = False | ||||
|  | ||||
|         if not page_file_volumes: | ||||
|             LOG.info("No page file volume found, skipping configuration") | ||||
|         else: | ||||
|             page_files = [ | ||||
|                 (os.path.join(v, "pagefile.sys"), 0, 0) | ||||
|                 for v in page_file_volumes] | ||||
|  | ||||
|             current_page_files = osutils.get_page_files() | ||||
|             if sorted(current_page_files) != sorted(page_files): | ||||
|                 osutils.set_page_files(page_files) | ||||
|                 LOG.info("Page file configuration set: %s", page_files) | ||||
|                 reboot_required = True | ||||
|  | ||||
|         return base.PLUGIN_EXECUTE_ON_NEXT_BOOT, reboot_required | ||||
|  | ||||
|     def get_os_requirements(self): | ||||
|         return 'win32', (5, 2) | ||||
		Reference in New Issue
	
	Block a user
	 Alessandro Pilotti
					Alessandro Pilotti