
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>
80 lines
3.0 KiB
Python
80 lines
3.0 KiB
Python
# 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)
|