usr/src/lib/install_target/controller.py
author Drew Fisher <drew.fisher@oracle.com>
Mon, 08 Aug 2011 14:21:15 -0600
changeset 1376 1586eba25902
parent 1370 0e49021cc774
child 1377 51a448c0a1b5
permissions -rw-r--r--
7076343 AI fails in snv_172 in the target-discovery phase
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
     1
#!/usr/bin/python
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
     2
#
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
     3
# CDDL HEADER START
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
     4
#
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
     8
#
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    11
# See the License for the specific language governing permissions
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    12
# and limitations under the License.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    13
#
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    19
#
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    20
# CDDL HEADER END
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    21
#
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    22
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    23
#
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    24
# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    25
#
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    26
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    27
""" controller.py, TargetController and related classes.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    28
"""
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    29
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    30
import logging
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    31
import os
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    32
import platform
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    33
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    34
from copy import copy, deepcopy
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    35
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    36
from solaris_install import Popen
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    37
from solaris_install.data_object.simple import SimpleXmlHandlerBase
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    38
from solaris_install.logger import INSTALL_LOGGER_NAME
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    39
from solaris_install.target import Target
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    40
from solaris_install.target.libadm.const import V_ROOT
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    41
from solaris_install.target.logical import Logical, BE
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    42
from solaris_install.target.physical import Disk, Partition, Slice
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    43
from solaris_install.target.size import Size
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    44
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    45
LOGGER = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    46
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    47
# If install image size not available, use 4GB
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    48
FALLBACK_IMAGE_SIZE = Size("4" + Size.gb_units)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    49
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    50
# Values for Swap and Dump calculations.  All values are in MB
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
    51
MIN_SWAP_SIZE = 1024
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
    52
MAX_SWAP_SIZE = (Size("4gb")).get(Size.mb_units)
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    53
MIN_DUMP_SIZE = 256
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
    54
MAX_DUMP_SIZE = (Size("64gb")).get(Size.mb_units)
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    55
OVERHEAD = 1024
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    56
FUTURE_UPGRADE_SPACE = (Size("2gb")).get(Size.mb_units)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    57
# Swap ZVOL is required if memory is below this
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    58
ZVOL_REQ_MEM = 900
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    59
1121
670325895b19 7004610 Update Text Installer to use CUD
Karen Tung <karen.tung@oracle.com>
parents: 1113
diff changeset
    60
VFSTAB_FILE = "etc/vfstab"
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    61
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    62
# "TargetController data" is an area in the DataObjectCache
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    63
# intended for the TargetController class's private use.  It
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    64
# is identified by a top-level <target> element, with the name
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    65
# "TargetController data", under the DOC's persistent tree.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    66
# See TargetControllerBackupEntry class for more details.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    67
DATA_AREA_NAME = "TargetController data"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    68
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    69
DEFAULT_LOGICAL_NAME = "logical"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    70
DEFAULT_ZPOOL_NAME = "rpool"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    71
DEFAULT_VDEV_NAME = "vdev"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    72
VDEV_REDUNDANCY_NONE = "none"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    73
VDEV_REDUNDANCY_MIRROR = "mirror"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    74
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    75
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    76
class BadDiskError(Exception):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    77
    ''' General purpose error class for when TargetController is unable
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    78
        to access a disk.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    79
    '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    80
    pass
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    81
1236
2f3a9d3aa9cb 7051027 Installer not enabling disk write cache when entire disk selected
Drew Fisher <drew.fisher@oracle.com>
parents: 1204
diff changeset
    82
1204
5c7590b24780 7050438 Update GUI Install to use CUD
Dermot <Dermot.McCluskey@Oracle.COM>
parents: 1151
diff changeset
    83
class SubSizeDiskError(BadDiskError):
5c7590b24780 7050438 Update GUI Install to use CUD
Dermot <Dermot.McCluskey@Oracle.COM>
parents: 1151
diff changeset
    84
    ''' Specific exception sub-class for when a disk is below the
5c7590b24780 7050438 Update GUI Install to use CUD
Dermot <Dermot.McCluskey@Oracle.COM>
parents: 1151
diff changeset
    85
        minimum required size for installation.
5c7590b24780 7050438 Update GUI Install to use CUD
Dermot <Dermot.McCluskey@Oracle.COM>
parents: 1151
diff changeset
    86
    '''
5c7590b24780 7050438 Update GUI Install to use CUD
Dermot <Dermot.McCluskey@Oracle.COM>
parents: 1151
diff changeset
    87
    pass
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
    88
1236
2f3a9d3aa9cb 7051027 Installer not enabling disk write cache when entire disk selected
Drew Fisher <drew.fisher@oracle.com>
parents: 1204
diff changeset
    89
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    90
class SwapDumpGeneralError(Exception):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    91
    ''' General exception for errors computing swap and dump values.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    92
    '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    93
    pass
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    94
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
    95
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    96
class SwapDumpSpaceError(Exception):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    97
    ''' Not enough space in the target disk for successful installation.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    98
    '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
    99
    pass
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   100
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   101
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   102
class TargetController(object):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   103
    ''' The TargetController (TC) class is intended to be used by all the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   104
        Install client apps for the purpose of selecting the disk
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   105
        or disks for the install.  It creates and sets up the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   106
        "desired targets" area in the DataObjectCache (DOC) in the manner
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   107
        expected by the TargetInstantiation (TI) checkpoint, which
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   108
        will typically be run later.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   109
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   110
        TC also calculates minimum and recommended sizes for the installation
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   111
        target, based on the passed-in image size and calculates sizes
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   112
        for swap and dump devices, if required.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   113
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   114
        NB:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   115
        Where TC methods accept Disk objects as parameters, these can
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   116
        be the actual Disk objects discovered by TargetDiscovery
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   117
        (TD), which the calling application will have retrieved from the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   118
        "discovered targets" area of the DOC.  Or, they can be other
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   119
        Disk objects which represent the same disks as the "discovered
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   120
        targets".  In this case, TargetController will locate the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   121
        corresponding Disks from "discovered targets" before processing
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   122
        them.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   123
        Where TC methods return Disk objects, these will always be
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   124
        (possibly modified) copies of those discovered disks: TC takes
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   125
        in references to the "discovered targets", makes copies of those
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   126
        objects, places the copies in "desired targets" and returns the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   127
        copies to the calling code.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   128
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   129
        TC does not itself control changes to the partitioning layout
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   130
        of the selected disk(s) - this is done directly by the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   131
        application by operating on the Disk objects returned from
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   132
        TC's methods.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   133
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   134
        TC also maintains a backup of the previously selected disk(s),
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   135
        so that if the user makes changes to the partitioning layout
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   136
        of the selected disk(s); then changes the selected disk(s);
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   137
        and then changes back to the original disk(s), the previous
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   138
        partitioning layout that they configured will not be lost.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   139
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   140
        APIs:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   141
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   142
        from solaris_install.target.controller import TargetController, \
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   143
            BadDiskError, SwapDumpGeneralError, SwapDumpSpaceError
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   144
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   145
        target_controller = TargetController(doc, debug=False)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   146
        disks = target_controller.initialize(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   147
            image_size=FALLBACK_IMAGE_SIZE,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   148
            no_initial_disk=False,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   149
            no_initial_logical=False,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   150
            install_mountpoint="/a",
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   151
            unique_zpool_name=False)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   152
        logical = target_controller.apply_default_logical(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   153
            logical=None,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   154
            mountpoint="/a",
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   155
            redundancy="none",
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   156
            unique_zpool_name=True)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   157
        disk = target_controller.select_initial_disk()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   158
        disks = target_controller.select_disk(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   159
            disks,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   160
            use_whole_disk=False)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   161
        disks = target_controller.add_disk(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   162
            disks,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   163
            use_whole_disk=False)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   164
        disks = target_controller.reset_layout(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   165
            disk=None,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   166
            use_whole_disk=False)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   167
        target_controller.apply_default_layout(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   168
            disk,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   169
            use_whole_disk,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   170
            wipe_disk=False,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   171
            in_zpool=DEFAULT_ZPOOL_NAME,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   172
            in_vdev=DEFAULT_VDEV_NAME)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   173
        swap_type, swap_size, dump_type, dump_size = \
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   174
            target_controller.calc_swap_dump_size(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   175
                installation_size,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   176
                available_size,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   177
                swap_included=False)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   178
        target_controller.setup_vfstab_for_swap(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   179
            pool_name,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   180
            basedir)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   181
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   182
        min_size = target_controller.minimum_target_size
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   183
        rec_size = target_controller.recommended_target_size
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   184
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   185
        type = TargetController.SWAP_DUMP_ZVOL
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   186
        type = TargetController.SWAP_DUMP_NONE
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   187
    '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   188
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   189
    SWAP_DUMP_ZVOL = "ZVOL"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   190
    SWAP_DUMP_NONE = "None"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   191
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   192
    #--------------------------------------------------------------------------
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   193
    # Public methods
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   194
1355
7e6507b2a970 6260 sparc AI need a way to mechanism to explicitly ask for creating label on Sparc disk
Drew Fisher <drew.fisher@oracle.com>
parents: 1236
diff changeset
   195
    def __init__(self, doc, debug=False, dry_run=False):
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   196
        ''' Initializer method.  Called by the constructor.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   197
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   198
            Parameters:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   199
            doc.  A reference to a DataObjectCache instance where
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   200
                TD places details of the "discovered targets" and
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   201
                where TC will create the "desired targets" area.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   202
            debug=False.  If True, XML is generated for the backup
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   203
                area and will get written to logs.
1355
7e6507b2a970 6260 sparc AI need a way to mechanism to explicitly ask for creating label on Sparc disk
Drew Fisher <drew.fisher@oracle.com>
parents: 1236
diff changeset
   204
            dry_run=False.  If True, certain actions will be prevented
7e6507b2a970 6260 sparc AI need a way to mechanism to explicitly ask for creating label on Sparc disk
Drew Fisher <drew.fisher@oracle.com>
parents: 1236
diff changeset
   205
                from running so the disks are not modified
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   206
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   207
            Returns: Nothing
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   208
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   209
            Raises: Nothing
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   210
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   211
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   212
        global LOGGER
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   213
        LOGGER = logging.getLogger(INSTALL_LOGGER_NAME)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   214
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   215
        self._doc = doc
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   216
        self._debug = debug
1355
7e6507b2a970 6260 sparc AI need a way to mechanism to explicitly ask for creating label on Sparc disk
Drew Fisher <drew.fisher@oracle.com>
parents: 1236
diff changeset
   217
        self._dry_run = dry_run
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   218
        self._discovered_root = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   219
        self._discovered_disks = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   220
        self._desired_root = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   221
        self._backup_area = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   222
        self._need_backup = False
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   223
        self._logical = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   224
        self._zpool = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   225
        self._vdev = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   226
        self._be = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   227
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   228
        self._image_size = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   229
        self._mem_size = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   230
        self._minimum_target_size = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   231
        self._recommended_target_size = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   232
        self._swap_dump_computed = False
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   233
        self._swap_type = TargetController.SWAP_DUMP_NONE
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   234
        self._swap_size = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   235
        self._dump_type = TargetController.SWAP_DUMP_NONE
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   236
        self._dump_size = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   237
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   238
        self._this_processor = platform.processor()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   239
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   240
        super(TargetController, self).__init__()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   241
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   242
    def initialize(self, image_size=FALLBACK_IMAGE_SIZE,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   243
        no_initial_logical=False, no_initial_disk=False,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   244
        install_mountpoint="/a", unique_zpool_name=False):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   245
        ''' Creates the top-level structure for the "desired targets" area
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   246
            in the DOC and, optionally, selects an initial disk to be the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   247
            target for this install.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   248
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   249
            The TargetDiscovery checkpoint must have run successfully,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   250
            saving details of the system's storage devices in the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   251
            "discovered targets" area of the DOC, before initialize()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   252
            is called, or an error is raised.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   253
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   254
            Parameters:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   255
            image_size=FALLBACK_IMAGE_SIZE.  If specified, must be a Size
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   256
                object.  TC will use this value to compute the minimum
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   257
                disk size that can be selected.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   258
            no_initial_logical=False. If set to True, then initialize will
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
   259
                not set up a default rpool structure. Will also ensure
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   260
                no default disk is selected.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   261
            no_initial_disk=False.  If set to True, then initialize will
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   262
                not select an initial disk.  This may be useful for non-
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   263
                interactive installers, where they know before calling TC
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   264
                which disk(s) they will be installing on.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   265
            install_mountpoint="/a". The mountpoint attribute of the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   266
                created BE will be set to this value.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   267
            unique_zpool_name=False If set to True, will ensure that the name
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   268
                of the pool will not match any existing zpools on the system.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   269
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   270
            Returns: A list of the initially selected Disks.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   271
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   272
            Raises: BadDiskError
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   273
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   274
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   275
        # Ensure that TD has already been successfully run by searching
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   276
        # for a <target name="discovered"> root node in the DOC. Save a
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   277
        # reference to this node for future use.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   278
        self._discovered_root = self._doc.persistent.get_first_child(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   279
            name=Target.DISCOVERED)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   280
        if self._discovered_root is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   281
            raise BadDiskError("No discovered targets available")
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   282
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   283
        self._image_size = image_size
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   284
        self._mem_size = _get_system_memory()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   285
        # Reset these values to None so they get correctly recomputed
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   286
        self._minimum_target_size = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   287
        self._recommended_target_size = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   288
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   289
        # Clear out any previous "desired targets" from the DOC
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   290
        self._doc.persistent.delete_children(name=Target.DESIRED,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   291
            class_type=Target)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   292
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   293
        # Create a tree of DataObjects representing the initial
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   294
        # top-level nodes of the "desired targets" tree to be created
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   295
        # in the DOC.  The created tree will be similar to:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   296
        #   <target name="desired">
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   297
        #       <!-- selected disks will be inserted here -->
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   298
        #       <logical>
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   299
        #           <zpool name="rpool" is_root="true">
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   300
        #               <vdev name="vdev"/>
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   301
        #               <be name="solaris" mountpoint="/a"/>
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   302
        #           </zpool>
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   303
        #       </logical>
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   304
        #   </target>
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   305
        self._desired_root = Target(Target.DESIRED)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   306
        self._doc.persistent.insert_children(self._desired_root)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   307
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   308
        # Return after creating Desired root node
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   309
        if no_initial_logical:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   310
            return list()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   311
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   312
        self._logical = self.apply_default_logical(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   313
            mountpoint=install_mountpoint,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   314
            unique_zpool_name=unique_zpool_name)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   315
        self._desired_root.insert_children(self._logical)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   316
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   317
        if no_initial_disk:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   318
            return list()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   319
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   320
        # select an initial disk and return it
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   321
        initial_disk = self.select_initial_disk()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   322
        return_disks = self._add_disks([initial_disk], False)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   323
        self._need_backup = True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   324
        return return_disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   325
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   326
    def apply_default_logical(self, logical=None, mountpoint="/a",
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   327
        redundancy="none", unique_zpool_name=True):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   328
        ''' Create a default logical layout for root pool.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   329
            Only create logical element if not already done so, if not
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   330
            none it is assumed this logical contains no children.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   331
            Optionally, ensure root pool name is unique and does not
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   332
            exist already.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   333
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   334
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   335
        if logical is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   336
            logical = Logical(DEFAULT_LOGICAL_NAME)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   337
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   338
        self._zpool = logical.add_zpool(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   339
            DEFAULT_ZPOOL_NAME, is_root=True)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   340
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   341
        if unique_zpool_name:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   342
            # Ensure this root pool name is unique
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   343
            if self._zpool.exists:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   344
                self._zpool._name = self._get_unique_pool_name(self._zpool)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   345
                LOGGER.warning("Default root zpool '%s' exists, Using '%s' " \
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   346
                    "instead." % (DEFAULT_ZPOOL_NAME, self._zpool._name))
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   347
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   348
        self._vdev = self._zpool.add_vdev(DEFAULT_VDEV_NAME, redundancy)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
   349
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   350
        self._be = BE()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   351
        self._be.mountpoint = mountpoint
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   352
        self._zpool.insert_children(self._be)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   353
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   354
        return logical
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   355
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   356
    def select_disk(self, disks, use_whole_disk=False):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   357
        ''' Select one or more disks to be used for the install.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   358
            If any disk(s) were previously selected, they will be
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   359
            replaced with the newly selected disks.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   360
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   361
            Parameters:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   362
            disks, either a single Disk object or a list of Disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   363
            use_whole_disk=False, specifies whether the selected
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   364
                disk(s) are to be used as entire disks or whether
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   365
                they will be divided into partitions
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   366
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   367
            Returns:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   368
            A list containing the selected disk(s).
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   369
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   370
            Raises: BadDiskError
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   371
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   372
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   373
        # If initialize() has not already been called, call it.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   374
        # In this situation we do not select an initial disk.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   375
        if self._desired_root is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   376
            self.initialize(no_initial_disk=True)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   377
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   378
        # param disks can either be a singleton Disk object
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   379
        # or a tuple of Disk objects
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   380
        if isinstance(disks, Disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   381
            disks = [disks]
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   382
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   383
        disks = self._get_corresponding_discovered_disks(disks)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   384
        self._check_disks_are_suitable(disks)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   385
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   386
        previous_disks = self._get_desired_disks()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   387
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   388
        # Clear the previously selected disks (if any) from "desired targets"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   389
        self._desired_root.delete_children(class_type=Disk,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   390
            not_found_is_err=False)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   391
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   392
        if self._need_backup:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   393
            # Backup the previously selected disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   394
            self._backup_disks(previous_disks)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   395
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   396
        return_disks = self._add_disks(disks, use_whole_disk)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   397
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   398
        # If use_whole_disk=False on this call to select_disk(),
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   399
        # then we will need to back up the disk layout on the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   400
        # next call to select_disk().  (If use_whole_disk=True, there
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   401
        # is no user-defined layout to back up.)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   402
        if use_whole_disk == False:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   403
            self._need_backup = True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   404
        else:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   405
            self._need_backup = False
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   406
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   407
        return return_disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   408
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   409
    def add_disk(self, disks, use_whole_disk=False):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   410
        ''' Add one or more disks to the currently selected disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   411
            for this install.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   412
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   413
            Parameters:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   414
            disks, either a single Disk object or a list of Disks.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   415
            use_whole_disk=False, specifies whether the selected
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   416
                disk(s) are to be used as entire disks or whether
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   417
                they will be divided into partitions
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   418
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   419
            Returns: A list containing the added disk(s).
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   420
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   421
            Raises: BadDiskError
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   422
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   423
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   424
        # If initialize() has not already been called, call it.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   425
        # In this situation we do not select an initial disk.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   426
        if self._desired_root is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   427
            self.initialize(no_initial_disk=True)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   428
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   429
        # param disks can either be a singleton Disk object
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   430
        # or a list of Disk objects
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   431
        if isinstance(disks, Disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   432
            disks = [disks]
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   433
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   434
        disks = self._get_corresponding_discovered_disks(disks)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   435
        self._check_disks_are_suitable(disks)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   436
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   437
        # Check that disk(s) being added are not already in "desired targets"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   438
        current_disks = self._get_desired_disks()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   439
        if current_disks is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   440
            for current_disk in current_disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   441
                for new_disk in disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   442
                    if current_disk.name_matches(new_disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   443
                        raise BadDiskError("Attempt to add same disk twice!")
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   444
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   445
        return_disks = self._add_disks(disks, use_whole_disk)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   446
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   447
        return return_disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   448
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   449
    def reset_layout(self, disk=None, use_whole_disk=False):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   450
        ''' Resets the partitioning layout of either all currently
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   451
            selected disks, or a specific disk, back to their
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   452
            original layout from "discovered targets". However
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   453
            for disks that have no usable partitions and/or slices
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   454
            the call to apply_default_layout will also reset the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   455
            suggested layout before returning.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   456
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   457
            Parameters:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   458
            disk=None.  If not given, or None, then all the currently
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   459
                selected disks are reset.  Otherwise disk must be a
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   460
                single Disk object.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   461
            use_whole_disk=False, specifies whether the selected
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   462
                disk(s) are to be used as entire disks or whether
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   463
                they will be divided into partitions
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   464
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   465
            Returns:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   466
            A list containing the reset Disks.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   467
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   468
            Raises:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   469
            BadDiskError
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   470
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   471
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   472
        # Ensure initialize() has already been called.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   473
        if self._desired_root is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   474
            raise BadDiskError("No selected disks to reset!")
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   475
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   476
        current_disks = self._get_desired_disks()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   477
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   478
        disks = list()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   479
        if disk is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   480
            # The user didn't say which disk(s) to reset.  So get from
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   481
            # the "discovered targets", the disks corresponding to
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   482
            # all the currently selected disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   483
            for current_disk in current_disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   484
                for discovered_disk in self.discovered_disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   485
                    if current_disk.name_matches(discovered_disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   486
                        disks.append(discovered_disk)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   487
        else:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   488
            disks.append(disk)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   489
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   490
        return_disks = list()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   491
        for disk in disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   492
            if disk.ctd not in \
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   493
                [disc_disk.ctd for disc_disk in self.discovered_disks]:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   494
                raise BadDiskError(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   495
                    "Trying to reset a disk not in discovered targets!")
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   496
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   497
            # find the disk in the descovered disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   498
            for disc_disk in self.discovered_disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   499
                if disk.ctd == disc_disk.ctd:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   500
                    break
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   501
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   502
            # remove equivalent disk from "desired targets"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   503
            found = False
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   504
            for current_disk in current_disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   505
                if disk.name_matches(current_disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   506
                    self._desired_root.delete_children(children=current_disk,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   507
                        not_found_is_err=True)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   508
                    found = True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   509
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   510
            if not found:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   511
                raise BadDiskError("Trying to reset an unselected disk!")
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   512
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   513
            # re-insert a fresh copy of the disk, with the original
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   514
            # layout discovered by TD, into "desired targets". However
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   515
            # for disks that have no usable partitions and/or slices
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   516
            # the call to apply_default_layout will also reset the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   517
            # suggested layout before returning.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   518
            if disc_disk is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   519
                copy_disk = deepcopy(disc_disk)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   520
                self.apply_default_layout(copy_disk, use_whole_disk, False)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   521
                if self._fixup_disk(copy_disk, use_whole_disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   522
                    self._desired_root.insert_children(copy_disk,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   523
                        before=self._logical)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   524
                return_disks.append(copy_disk)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   525
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   526
        return return_disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   527
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   528
    def apply_default_layout(self, disk, use_whole_disk,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   529
        wipe_disk=False, in_zpool=DEFAULT_ZPOOL_NAME,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   530
        in_vdev=DEFAULT_VDEV_NAME):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   531
        ''' Attempt to apply the default layout to a disk.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   532
            Only apply to disks if we are not using whole disk.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   533
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   534
            If wipe disk specified then delete all existing partition
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   535
            and slice information from the disk supplied.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   536
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   537
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   538
        if use_whole_disk:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   539
            return
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   540
1355
7e6507b2a970 6260 sparc AI need a way to mechanism to explicitly ask for creating label on Sparc disk
Drew Fisher <drew.fisher@oracle.com>
parents: 1236
diff changeset
   541
        # force a VTOC label and update the disk's geometry and dev_size
1369
681cdf117ece 7075669 controller.py shouldn't try to relabel a disk already labeled with a VTOC label (fix for unittests)
Drew Fisher <drew.fisher@oracle.com>
parents: 1364
diff changeset
   542
        if disk.label == "VTOC" and not self._dry_run:
1364
9e621cf78c3d 7075669 controller.py shouldn't try to relabel a disk already labeled with a VTOC label
Drew Fisher <drew.fisher@oracle.com>
parents: 1355
diff changeset
   543
            # look for this disk in the DISCOVERED target tree to see if the
9e621cf78c3d 7075669 controller.py shouldn't try to relabel a disk already labeled with a VTOC label
Drew Fisher <drew.fisher@oracle.com>
parents: 1355
diff changeset
   544
            # label changed from EFI to VTOC
1376
1586eba25902 7076343 AI fails in snv_172 in the target-discovery phase
Drew Fisher <drew.fisher@oracle.com>
parents: 1370
diff changeset
   545
            for discovered_disk in self.discovered_disks:
1364
9e621cf78c3d 7075669 controller.py shouldn't try to relabel a disk already labeled with a VTOC label
Drew Fisher <drew.fisher@oracle.com>
parents: 1355
diff changeset
   546
                if disk.ctd == discovered_disk.ctd:
9e621cf78c3d 7075669 controller.py shouldn't try to relabel a disk already labeled with a VTOC label
Drew Fisher <drew.fisher@oracle.com>
parents: 1355
diff changeset
   547
                    if discovered_disk.label == "GPT":
9e621cf78c3d 7075669 controller.py shouldn't try to relabel a disk already labeled with a VTOC label
Drew Fisher <drew.fisher@oracle.com>
parents: 1355
diff changeset
   548
                        # we need to reset the label
9e621cf78c3d 7075669 controller.py shouldn't try to relabel a disk already labeled with a VTOC label
Drew Fisher <drew.fisher@oracle.com>
parents: 1355
diff changeset
   549
                        disk._set_vtoc_label_and_geometry(self._dry_run)
1355
7e6507b2a970 6260 sparc AI need a way to mechanism to explicitly ask for creating label on Sparc disk
Drew Fisher <drew.fisher@oracle.com>
parents: 1236
diff changeset
   550
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   551
        if wipe_disk:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   552
            for obj in [Partition, Slice]:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   553
                disk.delete_children(class_type=obj)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   554
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   555
        partitions = disk.get_descendants(class_type=Partition)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   556
        slices = disk.get_descendants(class_type=Slice)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   557
        # set the start sector to one cylinder worth of sectors
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   558
        start = disk.geometry.cylsize
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   559
        slice_size = disk.disk_prop.dev_size.sectors - start
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   560
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   561
        if not partitions and not slices:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   562
            # We need to add some back in to create the disk set up in such a
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   563
            # way that we end up with a bootable pool.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   564
            if self._this_processor == "i386":
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   565
                new_partition = disk.add_partition("1", start, slice_size,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   566
                    Size.sector_units, partition_type=191,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   567
                    bootid=Partition.ACTIVE)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   568
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   569
                new_slice = new_partition.add_slice("0", start, slice_size,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
   570
                    Size.sector_units, force=True)
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   571
            else:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   572
                new_slice = disk.add_slice("0", start, slice_size,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
   573
                    Size.sector_units, force=True)
1236
2f3a9d3aa9cb 7051027 Installer not enabling disk write cache when entire disk selected
Drew Fisher <drew.fisher@oracle.com>
parents: 1204
diff changeset
   574
2f3a9d3aa9cb 7051027 Installer not enabling disk write cache when entire disk selected
Drew Fisher <drew.fisher@oracle.com>
parents: 1204
diff changeset
   575
            # enable the disk's write-cache if wipe_disk is True.
2f3a9d3aa9cb 7051027 Installer not enabling disk write cache when entire disk selected
Drew Fisher <drew.fisher@oracle.com>
parents: 1204
diff changeset
   576
            if wipe_disk:
2f3a9d3aa9cb 7051027 Installer not enabling disk write cache when entire disk selected
Drew Fisher <drew.fisher@oracle.com>
parents: 1204
diff changeset
   577
                disk.write_cache = True
2f3a9d3aa9cb 7051027 Installer not enabling disk write cache when entire disk selected
Drew Fisher <drew.fisher@oracle.com>
parents: 1204
diff changeset
   578
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   579
        else:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   580
            # Compile a list of the usable slices, if any
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   581
            slice_list = list()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   582
            for slc in slices:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   583
                if slc.name != "2":
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   584
                    if slc.size >= self.minimum_target_size:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   585
                        slice_list.append(slc)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   586
                        break
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   587
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   588
            if self._this_processor == "sparc":
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   589
                # No Partitions to look through, just check the slices.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   590
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   591
                if slice_list:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   592
                    # We have a useable slice already, so nothing more to do
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   593
                    return
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   594
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   595
                # No useable slices. Clear the slices and add a root slice
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   596
                disk.delete_children(class_type=Slice)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   597
                new_slice = disk.add_slice("0", start, slice_size,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
   598
                    Size.sector_units, force=True)
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   599
            else:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   600
                for partition in partitions:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   601
                    if partition.is_solaris and disk.label == "VTOC":
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   602
                        # Mark partition as ACTIVE to be sure, and change
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   603
                        # action to create to ensure active flag is set.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   604
                        # Create shouldn't change existing VTOC unless the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   605
                        # sizes differ for any reason, which they shouldn't
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   606
                        partition.action = "create"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   607
                        if partition.is_primary:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   608
                            partition.bootid = Partition.ACTIVE
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   609
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   610
                        if slice_list:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   611
                            # We have a useable slice already, so nothing
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   612
                            # more to do.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   613
                            return
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   614
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   615
                        # No useable slices. Clear the slices and add a
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   616
                        # root slice
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   617
                        partition.delete_children(class_type=Slice)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   618
                        new_slice = partition.add_slice("0", start,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
   619
                            slice_size, Size.sector_units, force=True)
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   620
                        break
1113
3d0384a5e577 7042689 slim_unit_tests failure for target controller is broken after 7042578 is put back.
dermotm@brokedown
parents: 1112
diff changeset
   621
                else:
3d0384a5e577 7042689 slim_unit_tests failure for target controller is broken after 7042578 is put back.
dermotm@brokedown
parents: 1112
diff changeset
   622
                    return
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   623
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   624
        new_slice.tag = V_ROOT
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   625
        new_slice.in_vdev = in_vdev
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   626
        new_slice.in_zpool = in_zpool
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   627
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   628
    def select_initial_disk(self):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   629
        ''' Iterate through the disks discovered by TD and select
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   630
            one of them to be the initial install target.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   631
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   632
            Returns: The selected Disk object
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   633
1204
5c7590b24780 7050438 Update GUI Install to use CUD
Dermot <Dermot.McCluskey@Oracle.COM>
parents: 1151
diff changeset
   634
            Raises: SubSizeDiskError, BadDiskError
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   635
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   636
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   637
        # Check #1 - look for a disk has the disk_keyword "boot_disk"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   638
        # and is big enough
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   639
        for disk in self.discovered_disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   640
            if disk.is_boot_disk() and self._is_big_enough(disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   641
                return disk
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   642
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   643
        # Check #2 - get 1st disk that is big enough
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   644
        for disk in self.discovered_disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   645
            if self._is_big_enough(disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   646
                return disk
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   647
        else:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   648
            raise BadDiskError(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   649
                "None of the available disks are big enough for install!")
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   650
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   651
    def calc_swap_dump_size(self, installation_size, available_size,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   652
                            swap_included=False):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   653
        ''' Calculate swap/dump, based on the amount of
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   654
            system memory, installation size and available size.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   655
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   656
            The following rules are used for determining the type of
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   657
            swap to be created, whether swap zvol is required and the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   658
            size of swap to be created.
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
   659
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   660
            memory        type           required    size
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   661
            --------------------------------------------------
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   662
            <900mb        zvol           yes          1G (MIN_SWAP_SIZE)
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   663
            900mb-4G	  zvol		  no          1G
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   664
            4G-16G        zvol            no          2G
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   665
            16G-128G      zvol            no          4G 
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   666
            >128G         zvol            no          4G (MAX_SWAP_SIZE)
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   667
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   668
            The following rules are used for calculating the amount
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   669
            of required space for dump.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   670
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   671
            memory        type            size
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   672
            --------------------------------------------------
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   673
            <0.5G         zvol            256MB (MIN_DUMP_SIZE)
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   674
            0.5G-128G     zvol            256M-64G (1/2 of memory)
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   675
            >128G         zvol            64G (MAX_DUMP_SIZE)
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   676
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   677
            If slice/zvol is required, and there's not enough space in the,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   678
            target, an error will be raised.  If swap zvol is
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   679
            not required, spaces in the root pool will first be allocated
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   680
            for installation data, any left over space up to 80% of
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   681
            the total root pool size, will be allocated for swap/dump.
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   682
            This is to make sure that the root pool is less than
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   683
            80% full.
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   684
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   685
            Size of all calculation is done in MB
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
   686
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   687
            Parameters:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   688
            - installation_size: Size object.  The size required for
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   689
              the installation
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   690
            - available_size: Size object.  The available size on the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   691
              target disk.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   692
            - swap_included=False: Boolean.  Indicates whether required swap
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   693
              space is already included and validated in the installation size.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   694
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   695
            Returns:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   696
            Tuple consisting of:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   697
                swap_type, swap_size, dump_type, dump_size
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   698
            whose types are:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   699
                string, Size object, string, Size object
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   700
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   701
            Raise:
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
   702
                SwapDumpSpaceError
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   703
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   704
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   705
        if self._swap_dump_computed:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   706
            # Only need to compute these once:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   707
            return(self._swap_type, self._swap_size, self._dump_type,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   708
                   self._dump_size)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   709
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   710
        if (installation_size > available_size):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   711
            LOGGER.error("Space required for installation: %s",
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   712
                          installation_size)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   713
            LOGGER.error("Total available space: %s", available_size)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   714
            raise SwapDumpSpaceError
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   715
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   716
        # Do all calcuations in MB
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   717
        installation_size_mb = installation_size.get(units=Size.mb_units)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   718
        available_size_mb = available_size.get(units=Size.mb_units)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   719
        swap_size_mb = self._get_required_swap_size()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   720
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   721
        swap_required = False
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   722
        if swap_size_mb != 0:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   723
            swap_required = True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   724
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   725
        LOGGER.debug("Installation size: %s", installation_size)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   726
        LOGGER.debug("Available size: %s", available_size)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   727
        LOGGER.debug("Memory: %sMB. Swap Required: %s",
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   728
            self._mem_size, swap_required)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   729
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   730
        if swap_required:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   731
            # Make sure target disk has enough space for both swap and software
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   732
            if swap_included:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   733
                required_size_mb = installation_size_mb
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   734
            else:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   735
                required_size_mb = installation_size_mb + swap_size_mb
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   736
                if (available_size_mb < required_size_mb):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   737
                    LOGGER.error("Space required for installation "
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   738
                        "with required swap: %s", required_size_mb)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   739
                    LOGGER.error("Total available space: %s", available_size)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   740
                    raise SwapDumpSpaceError
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
   741
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   742
            # Since ZFS pools perform best when it is less than 80% full,
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   743
            # specify 80% of available size for dump calculation
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   744
            dump_size_mb = self._calc_dump_size(
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   745
                int(available_size_mb * 0.8) - required_size_mb)
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   746
        else:
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   747
            # Since ZFS pools perform best when it is less than 80% full,
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   748
            # use 80% of available_size for swap/dump calculation
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   749
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   750
            free_space_mb = int(available_size_mb * 0.8) - installation_size_mb
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   751
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   752
            if free_space_mb > 0:
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   753
                swap_size_mb = self._calc_swap_size(
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   754
                    ((free_space_mb * MIN_SWAP_SIZE) /
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   755
                    (MIN_SWAP_SIZE + MIN_DUMP_SIZE)))
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   756
            
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   757
                dump_size_mb = self._calc_dump_size( \
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
   758
                    free_space_mb - swap_size_mb)
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   759
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   760
        self._swap_size = Size(str(swap_size_mb) + Size.mb_units)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   761
        if swap_size_mb > 0:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   762
            self._swap_type = TargetController.SWAP_DUMP_ZVOL
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   763
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   764
        self._dump_size = Size(str(dump_size_mb) + Size.mb_units)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   765
        if dump_size_mb > 0:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   766
            self._dump_type = TargetController.SWAP_DUMP_ZVOL
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   767
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   768
        LOGGER.debug("Swap Type: %s", self._swap_type)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   769
        LOGGER.debug("Swap Size: %s", self._swap_size)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   770
        LOGGER.debug("Dump Type: %s", self._dump_type)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   771
        LOGGER.debug("Dump Size: %s", self._dump_size)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   772
        self._swap_dump_computed = True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   773
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   774
        return (self._swap_type, self._swap_size, self._dump_type,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   775
            self._dump_size)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   776
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   777
    def setup_vfstab_for_swap(self, pool_name, basedir):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   778
        '''Add the swap device to /etc/vfstab.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   779
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   780
        swap_device = self._get_swap_device(pool_name)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   781
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   782
        if swap_device is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   783
            #nothing to do
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   784
            return
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   785
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   786
        fname = os.path.join(basedir, VFSTAB_FILE)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   787
        try:
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
   788
            with open(fname, 'a+') as vf:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
   789
                vf.write("%s\t%s\t\t%s\t\t%s\t%s\t%s\t%s\n" %
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   790
                    (swap_device, "-", "-", "swap", "-", "no", "-"))
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   791
        except IOError, ioe:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   792
            LOGGER.error("Failed to write to %s", fname)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   793
            LOGGER.exception(ioe)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   794
            raise SwapDumpGeneralError
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   795
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   796
    @property
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   797
    def minimum_target_size(self):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   798
        ''' The minimum amount of space required for an installation.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   799
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   800
            This takes into account MIN_SWAP_SIZE required for
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   801
            low-memory system.
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
   802
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   803
            Returns: Size object
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   804
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   805
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   806
        if self._minimum_target_size is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   807
            swap_size_mb = self._get_required_swap_size()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   808
            min_size_mb = self._image_size.get(units=Size.mb_units) \
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   809
                + OVERHEAD + swap_size_mb
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   810
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   811
            self._minimum_target_size = Size(str(min_size_mb) + Size.mb_units)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   812
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   813
        return(self._minimum_target_size)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   814
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   815
    @property
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   816
    def recommended_target_size(self):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   817
        ''' The recommended size to perform an installation.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   818
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   819
            This takes into account estimated space to perform an upgrade.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   820
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   821
            Returns: Size object
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   822
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   823
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   824
        if self._recommended_target_size is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   825
            rec_size_mb = self.minimum_target_size.get(units=Size.mb_units) \
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   826
                + FUTURE_UPGRADE_SPACE
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   827
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   828
            self._recommended_target_size = Size(str(rec_size_mb) \
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   829
                + Size.mb_units)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   830
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   831
        return(self._recommended_target_size)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   832
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   833
    #--------------------------------------------------------------------------
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   834
    # Private methods
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   835
    def _get_unique_pool_name(self, zpool):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   836
        ''' Get the next available pool name that does not exist, via
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   837
            appending ascending numbers to end of the zpool.name.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   838
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   839
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   840
        ztmp = copy(zpool)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   841
        zcount = 1
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   842
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   843
        ztmp._name = zpool.name + str(zcount)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   844
        while ztmp.exists:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   845
            zcount += 1
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   846
            ztmp._name = zpool.name + str(zcount)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   847
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   848
        return ztmp.name
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   849
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   850
    def _add_disks(self, disks, use_whole_disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   851
        ''' Convenience method called from select_disk, add_disk
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   852
            and initialize.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   853
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   854
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   855
        # if use_whole_disk is False, then check if there is a backup
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   856
        # available for this exact set of disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   857
        backup = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   858
        if not use_whole_disk:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   859
            backup = self._fetch_from_backup(disks)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   860
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   861
        return_disks = list()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   862
        if backup is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   863
            self._backup_area.delete_children(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   864
                children=backup,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   865
                not_found_is_err=True)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   866
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   867
            for disk in backup.disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   868
                if self._fixup_disk(disk, use_whole_disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   869
                    self._desired_root.insert_children(disk,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   870
                        before=self._logical)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   871
                    return_disks = backup.disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   872
        else:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   873
            for disk in disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   874
                copy_disk = deepcopy(disk)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   875
                self.apply_default_layout(copy_disk, use_whole_disk, False)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   876
                if not self._fixup_disk(copy_disk, use_whole_disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   877
                    continue
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   878
                self._desired_root.insert_children(copy_disk,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   879
                    before=self._logical)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   880
                return_disks.append(copy_disk)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   881
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   882
        # If there is now 1 disk selected, set the vdev redundancy
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   883
        # to "none".  Otherwise, set it to "mirror".
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   884
        if len(self._get_desired_disks()) == 1:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   885
            self._vdev.redundancy = "none"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   886
        else:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   887
            self._vdev.redundancy = "mirror"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   888
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   889
        return return_disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   890
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   891
    def _get_corresponding_discovered_disks(self, disks):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   892
        ''' Given a list of Disk object, return the corresponding
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   893
            Disks from "desired targets" which represent those same
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   894
            disks.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   895
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   896
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   897
        return_disks = list()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   898
        for disk in disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   899
            found = False
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   900
            for discovered_disk in self.discovered_disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   901
                if disk == discovered_disk:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   902
                    found = True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   903
                    return_disks.append(disk)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   904
                    break
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   905
                if disk.name_matches(discovered_disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   906
                    found = True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   907
                    return_disks.append(discovered_disk)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   908
                    break
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   909
            if not found:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   910
                raise BadDiskError("No equivalent Disk in discovered targets!")
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   911
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   912
        return return_disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   913
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   914
    def _check_disks_are_suitable(self, disks):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   915
        ''' Convenience method that checks that the passed-in disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   916
            are all from the "discovered targets" list created by TD
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   917
            and that they are all large enough for installing Solaris.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   918
            If either check fails for any disk an exception is raised.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   919
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   920
            Returns: nothing
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   921
1204
5c7590b24780 7050438 Update GUI Install to use CUD
Dermot <Dermot.McCluskey@Oracle.COM>
parents: 1151
diff changeset
   922
            Raises: SubSizeDiskError, BadDiskError
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   923
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   924
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   925
        for disk in disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   926
            # confirm that the passed in disks are all from TD list
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   927
            # (they must be the actual Disk objects from TD, not copies).
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   928
            if disk not in self.discovered_disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   929
                raise BadDiskError("Disk is not in discovered targets!")
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   930
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   931
            if not self._is_big_enough(disk):
1204
5c7590b24780 7050438 Update GUI Install to use CUD
Dermot <Dermot.McCluskey@Oracle.COM>
parents: 1151
diff changeset
   932
                raise SubSizeDiskError("Disk is not big enough for install")
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   933
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   934
    def _backup_disks(self, disks):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   935
        ''' Make a backup of a set of disks.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   936
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   937
            If the backup area does not already exist, create it.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   938
            If there is already an older entry in the backup area
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   939
            for the exact combination of disks being backed up,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   940
            then delete that backup entry.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   941
            Finally, construct a new backup entry for the passed-in
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   942
            disks and save it in the backup area.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   943
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   944
            Returns: nothing.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   945
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   946
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   947
        if disks is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   948
            return
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   949
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   950
        # If "TargetController data" area does not already exist, create it
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   951
        if self._backup_area is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   952
            self._backup_area = Target(DATA_AREA_NAME)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   953
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   954
            self._doc.persistent.insert_children(self._backup_area)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   955
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   956
        # if an older backup of same disk(s) exists, delete it
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   957
        backup_entries = self._backup_area.get_children()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   958
        if backup_entries is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   959
            for backup_entry in backup_entries:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   960
                if backup_entry.contains_same_disks(disks):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   961
                    self._backup_area.delete_children(children=backup_entry,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   962
                        not_found_is_err=True)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   963
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   964
        # Construct the new backup entry
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   965
        new_backup_entry = TargetControllerBackupEntry("backup")
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   966
        new_backup_entry.insert_children(disks)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   967
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   968
        self._backup_area.insert_children(new_backup_entry)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   969
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   970
    def _fetch_from_backup(self, disks):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   971
        ''' Retrieve a list of Disks from the backup area that matches the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   972
            passed-in disks, if such a backup exists.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   973
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   974
            Iterates through the backup area, comparing the Disks in each
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   975
            backup entry with the list of Disks passed in.  If a match
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   976
            is found, then return the corresponding list of Disks from
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   977
            the backup area.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   978
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   979
            The Disks passed in are typically objects taken directly from
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   980
            the "discovered targets" area, while the returned  Disks are
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   981
            copies of those objects containing the most recent layout
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   982
            modifications which the user has made for those disks.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   983
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   984
            Returns a TargetControllerBackupEntry object if a match is found.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   985
            Otherwise, returns None.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   986
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   987
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   988
        if self._backup_area is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   989
            return None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   990
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   991
        backup_entries = self._backup_area.get_children()
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   992
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   993
        if backup_entries is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   994
            return None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   995
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   996
        for backup_entry in backup_entries:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   997
            if backup_entry.contains_same_disks(disks):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   998
                return backup_entry
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
   999
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1000
        return None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1001
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1002
    def _fixup_disk(self, disk, use_whole_disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1003
        ''' Prepare the passed-in Disk object for placement
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1004
            in the "desired targets" area.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1005
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1006
            Returns:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1007
            True if disk or slice successfully setup;
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1008
            False if not.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1009
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1010
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1011
        if not use_whole_disk:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1012
            slices = disk.get_descendants(class_type=Slice)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1013
            if not slices:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1014
                if self._vdev is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1015
                    disk.in_vdev = self._vdev.name
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1016
                if self._zpool is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1017
                    disk.in_zpool = self._zpool.name
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1018
                return True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1019
            else:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1020
                if len(slices) == 1:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1021
                    # There is only one slice we need to check to see if it's
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1022
                    # slice "2". If is it we need to add a slice "0" and set
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1023
                    # in_vdev and in_zpool.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1024
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1025
                    # NB: This will need to be updated when GPT is supported
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1026
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1027
                    if slices[0].name == "2":
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1028
                        # Add a slice
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1029
                        start = 1
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1030
                        slice_size = disk.disk_prop.dev_size.sectors - start
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1031
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1032
                        # parent will either be a Partition (i386) or a
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1033
                        # Slice (sparc)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1034
                        parent = slices[0].parent
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1035
                        new_slice = parent.add_slice("0", start, slice_size,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
  1036
                            Size.sector_units, force=True)
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1037
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1038
                        new_slice.tag = V_ROOT
1204
5c7590b24780 7050438 Update GUI Install to use CUD
Dermot <Dermot.McCluskey@Oracle.COM>
parents: 1151
diff changeset
  1039
                        new_slice.force = True
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1040
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1041
                        if self._vdev is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1042
                            new_slice.in_vdev = self._vdev.name
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1043
                        if self._zpool is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1044
                            new_slice.in_zpool = self._zpool.name
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1045
                        return True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1046
                    else:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1047
                        if self._vdev is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1048
                            slices[0].in_vdev = self._vdev.name
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1049
                        if self._zpool is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1050
                            slices[0].in_zpool = self._zpool.name
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1051
                        return True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1052
                else:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1053
                    for nextslice in slices:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1054
                        if nextslice.name != "2" and int(nextslice.name) < 8:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1055
                            # find the first slice that's big enough
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1056
                            # and move on
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1057
                            if nextslice.size >= self.minimum_target_size:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1058
                                if self._vdev is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1059
                                    nextslice.in_vdev = self._vdev.name
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1060
                                if self._zpool is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1061
                                    nextslice.in_zpool = self._zpool.name
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1062
                                return True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1063
                    return False
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1064
        else:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1065
            new_slice = None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1066
            # If user requested use_whole_disk, then:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1067
            # - delete any partitions on the disk
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1068
            # - delete any slices on the disk
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1069
            # - set the whole_disk attribute on the disk
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1070
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1071
            self.apply_default_layout(disk, use_whole_disk=False,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1072
                wipe_disk=True)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1073
            # We don't want the whole disk here right now since that
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1074
            # causes zpool create to use an EFI label on the disk which
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1075
            # is not supported by ZFS boot. When EFI support is available
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1076
            # disk.whole_disk should be set to the value of us_whole_disk
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1077
            disk.whole_disk = False
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1078
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1079
            # Set the in_vdev and/or in_zpool attributes
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1080
            slices = disk.get_descendants(name="0", class_type=Slice)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1081
            if slices:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1082
                # There should only be one slice with name="0"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1083
                slice_zero = slices[0]
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1084
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1085
                # Set the in_vdev and/or in_zpool attributes
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1086
                if self._vdev is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1087
                    slice_zero.in_vdev = self._vdev.name
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1088
                if self._zpool is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1089
                    slice_zero.in_zpool = self._zpool.name
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1090
                slice_zero.tag = V_ROOT
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1091
                return True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1092
            return False
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1093
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1094
    @property
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1095
    def discovered_disks(self):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1096
        ''' Returns a list of the disks discovered by TD.'''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1097
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1098
        if self._discovered_disks is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1099
            if self._discovered_root is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1100
                return None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1101
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1102
            self._discovered_disks = self._discovered_root.get_children(
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1103
                class_type=Disk)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1104
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1105
        return self._discovered_disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1106
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1107
    def _get_desired_disks(self):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1108
        ''' Returns the list of disks currently in desired targets.'''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1109
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1110
        if self._desired_root is None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1111
            return None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1113
        return self._desired_root.get_children(class_type=Disk)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1114
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1115
    def _is_big_enough(self, disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1116
        ''' Returns True if the passed in Disk is big enough
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1117
            to install Solaris; otherwise returns False.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1118
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1119
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1120
        if disk.disk_prop is not None and disk.disk_prop.dev_size is not None:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1121
            if disk.disk_prop.dev_size >= self.minimum_target_size:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1122
                return True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1123
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1124
        return False
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1125
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1126
    def _calc_swap_size(self, available_space):
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1127
        ''' Calculates size of swap based on amount of
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1128
            physical memory.
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1129
 
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1130
            The following rule is applied:
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1131
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1132
            memory        	swap size
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1133
            --------------------------------------------------
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1134
            <4G                 1G
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1135
            4G-16G              2G
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1136
            >16G                4G
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1137
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1138
            Parameters:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1139
            - available_space: Space that can be dedicated to swap (MB)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1140
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1141
            Returns:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1142
               size of swap in MB
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1143
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1144
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1145
        if available_space == 0:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1146
            return 0
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1147
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1148
        if self._mem_size <= (Size("4gb")).get(Size.mb_units):
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1149
            size = (Size("1gb")).get(Size.mb_units)
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1150
        elif self._mem_size > (Size("16gb")).get(Size.mb_units):
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1151
            size = (Size("4gb")).get(Size.mb_units)
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1152
        else:
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1153
            size = (Size("2gb")).get(Size.mb_units)
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1154
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1155
        if available_space < size:
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1156
            size = available_space
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1157
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1158
        return size
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1159
        
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1160
    def _calc_dump_size(self, available_space):
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1161
        ''' Calculates size of dump based on amount of physical memory.
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1162
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1163
            The following rule is applied:
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1164
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1165
            memory        	dump size
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1166
            --------------------------------------------------
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1167
            <0.5G               256mb (MIN_DUMP_SIZE)
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1168
            0.5-128G            1/2 of memory
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1169
            >128G               64G (MAX_DUMP_SIZE)
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1170
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1171
            If calculated space is more than the available space,
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1172
            the dump size will be trimmed down to the available space.
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1173
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1174
            Parameters:
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1175
            - available_space: Space that can be dedicated to dump (MB)
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1176
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1177
            Returns:
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1178
               size of dump in MB
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1179
        '''
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1180
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1181
        if available_space == 0:
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1182
            return 0
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1183
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1184
        if self._mem_size < (Size("0.5gb")).get(Size.mb_units):
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1185
            size = MIN_DUMP_SIZE
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1186
        elif self._mem_size > (Size("128gb")).get(Size.mb_units):
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1187
            size = MAX_DUMP_SIZE
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1188
        else:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1189
            size = self._mem_size / 2
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1190
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1191
        if available_space < size:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1192
            size = available_space
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1193
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1194
        return int(size)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1195
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1196
    def _get_required_swap_size(self):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1197
        ''' Determines whether swap is required.  If so, the amount of
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1198
            space used for swap is returned.  If swap is not required,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1199
            0 will be returned.  Value returned is in MB.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1200
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1201
            If system memory is less than 900mb, swap is required.
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1369
diff changeset
  1202
            Minimum required space for swap is MIN_SWAP_SIZE.
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1203
        '''
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
  1204
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1205
        if self._mem_size < ZVOL_REQ_MEM:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1206
            return MIN_SWAP_SIZE
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1207
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1208
        return 0
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1209
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1210
    def _get_swap_device(self, pool_name):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1211
        ''' Return the string representing the device used for swap '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1212
        if self._swap_type == TargetController.SWAP_DUMP_ZVOL:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1213
            return "/dev/zvol/dsk/" + pool_name + "/swap"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1214
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1215
        return None
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1216
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1217
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1218
class TargetControllerBackupEntry(SimpleXmlHandlerBase):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1219
    ''' This class is only used within the TargetController class.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1220
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1221
        Class for storing backups of previously selected
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1222
        disks, so that they can be retrieved, with any
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1223
        layout changes that the user has made, if those
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1224
        disks are selected again.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1225
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1226
        Each backup entry consists of a top-level object
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1227
        plus a unique conbination of one or more disk
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1228
        objects, which are stored as its children.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1229
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1230
        Only a unique conbination of selected disks can be
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1231
        restored:  eg if the user had previously selected
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1232
        a disk on its own and is now selecting that disk
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1233
        as part of a tuple of disks, the backup will not
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1234
        be retrieved.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1235
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1236
        This is a sub-class of SimpleXmlHandlerBase, meaning
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1237
        it can be stored in the DOC.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1238
    '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1239
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1240
    # SimpleXmlHandlerBase class requires that this be redefined
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1241
    TAG_NAME = "backup_entry"
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1242
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1243
    def __init__(self, name):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1244
        ''' Initializer method.'''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1245
        super(TargetControllerBackupEntry, self).__init__(name)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1246
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1247
    @property
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1248
    def disks(self):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1249
        ''' Returns all the children objects, which will always be disks.'''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1250
        return self.get_children(not_found_is_err=True)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1251
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1252
    def contains_same_disks(self, disks):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1253
        ''' Returns True if this objects's children represent
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1254
            the same list of Disks as the list of Disks passed in.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1255
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1256
            Otherwise, returns False.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1257
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1258
            Disks being the "same" means the current object and the
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1259
            passed-in list contain the same number of Disks and each
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1260
            of the passed-in Disks has the same identifier as one
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1261
            of the current object's Disks.
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1262
        '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1263
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1264
        backup_entry_disks = self.disks
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1265
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1266
        if len(backup_entry_disks) != len(disks):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1267
            return False
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1268
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1269
        for disk in disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1270
            found = False
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1271
            for backup_disk in backup_entry_disks:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1272
                if disk.name_matches(backup_disk):
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1273
                    found = True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1274
            if not found:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1275
                return False
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1276
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1277
        return True
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1278
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1279
#------------------------------------------------------------------------------
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1280
# Module private functions
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1281
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1140
diff changeset
  1282
1112
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1283
def _get_system_memory():
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1284
    ''' Returns the amount of memory available in the system '''
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1285
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1286
    memory_size = 0
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1287
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1288
    p = Popen.check_call(["/usr/sbin/prtconf"], stdout=Popen.STORE,
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1289
        stderr=Popen.STORE, logger=LOGGER)
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1290
    for line in p.stdout.splitlines():
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1291
        if "Memory size" in line:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1292
            memory_size = int(line.split()[2])
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1293
            break
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1294
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1295
    if memory_size <= 0:
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1296
        # We should have a valid size now
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1297
        LOGGER.error("Unable to determine amount of system memory")
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1298
        raise SwapDumpGeneralError
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1299
6a71a28b230b 7042578 Add TargetController to CUD
dermotm@brokedown
parents:
diff changeset
  1300
    return memory_size