usr/src/cmd/auto-install/checkpoints/target_selection.py
author Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
Fri, 18 May 2012 08:18:06 -0700
changeset 1681 c1f54cfadbac
parent 1623 cb56a2fb4925
permissions -rw-r--r--
7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
     1
#!/usr/bin/python
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
     2
#
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
     3
# CDDL HEADER START
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
     4
#
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
     8
#
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    11
# See the License for the specific language governing permissions
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    12
# and limitations under the License.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    13
#
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    19
#
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    20
# CDDL HEADER END
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    21
#
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    22
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    23
#
1595
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
    24
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    25
#
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    26
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    27
''' target_selection.py - Select Install Target(s)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    28
'''
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
    29
from collections import Iterable
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    30
import copy
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    31
import os
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    32
import platform
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    33
import re
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    34
import traceback
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    35
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
    36
from bootmgmt.bootinfo import SystemFirmware
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    37
from operator import attrgetter
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    38
import osol_install.errsvc as errsvc
1595
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
    39
import osol_install.liberrsvc as liberrsvc
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
    40
from solaris_install import gpt_firmware_check
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    41
from solaris_install.engine import InstallEngine
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    42
from solaris_install.engine.checkpoint import AbstractCheckpoint as Checkpoint
1681
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    43
from solaris_install.target.libefi.const import EFI_SYSTEM, \
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    44
    EFI_BIOS_BOOT, EFI_RESERVED, EFI_NUMUSERPAR, EFI_PREFERRED_RSVPAR
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    45
from solaris_install.target import Target, vdevs
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    46
from solaris_install.target.controller import TargetController, \
1681
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    47
    DEFAULT_VDEV_NAME, SwapDumpGeneralError, SwapDumpSpaceError
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    48
from solaris_install.target.logical import Logical, Zpool, Vdev, BE, Zvol, \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    49
    Filesystem, DatasetOptions, PoolOptions
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
    50
from solaris_install.target.physical import Disk, Iscsi, GPTPartition, \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
    51
    Partition, Slice, InsufficientSpaceError, NoPartitionSlotsFree, \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
    52
    NoGPTPartitionSlotsFree
1595
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
    53
from solaris_install.target.shadow.physical import ShadowPhysical
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    54
from solaris_install.target.size import Size
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    55
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    56
DISK_RE = "c\d+(?:t\d+)?d\d+"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    57
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
    58
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
    59
def is_iterable(obj):  # move to common?
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
    60
    return isinstance(obj, Iterable)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
    61
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    62
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    63
class SelectionError(Exception):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    64
    '''Error generated when any selection problems occur'''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    65
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    66
    def __init__(self, msg):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    67
        Exception.__init__(self)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    68
        self.msg = msg
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    69
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    70
    def __str__(self):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    71
        return self.msg
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    72
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    73
1681
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    74
class DiskMatches(object):
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    75
    '''Used to find the set of discovered disks that match the
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    76
       set of disk(s) specified in the AI manifest
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    77
    '''
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    78
    def __init__(self, disk):
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    79
        self.disk = disk
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    80
        self.matches = list()
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    81
        self.mapped_disk = None
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    82
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    83
    @property
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    84
    def nr_matches(self):
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    85
        return len(self.matches)
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    86
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    87
    def add_match(self, match):
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    88
        self.matches.append(match)
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    89
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
    90
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    91
class TargetSelection(Checkpoint):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    92
    '''TargetSelection - Checkpoint to select install target.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    93
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    94
       This checkpoint attempts to select the install target(s) based on
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    95
       the information provided in the discovered targets and the target
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    96
       information provided in the AI Manifest.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    97
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    98
       If it's not possible to determine a selection, then a SelectionError
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
    99
       exception will be raised, causing the installation to fail.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   100
    '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   101
    RAIDZ_REDUNDANCY = ['raidz', 'raidz1', 'raidz2', 'raidz3']
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   102
    TOPLEVEL_REDUNDANCY = ['none', 'mirror']
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   103
    TOPLEVEL_REDUNDANCY.extend(RAIDZ_REDUNDANCY)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   104
    INVALID_ROOT_VDEV = ['log', 'logmirror']
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   105
    PRESERVED = ['preserve', 'use_existing']
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   106
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   107
    def __init__(self, name, be_mountpoint="/a"):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   108
        super(TargetSelection, self).__init__(name)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   109
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   110
        # instance attributes
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   111
        self.be_mountpoint = be_mountpoint
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   112
        self.doc = InstallEngine.get_instance().data_object_cache
1252
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
   113
        self.dry_run = False
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   114
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   115
        # Initialize TargetController
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: 1323
diff changeset
   116
        self.controller = TargetController(self.doc, dry_run=self.dry_run)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   117
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   118
        # Cache of Discovered Tree, Disks  in the DOC, will be filled in later
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   119
        self._discovered = None
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
   120
        self._wipe_disk = False
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   121
        self._discovered_disks = list()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   122
        self._discovered_zpools = list()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   123
        self._discovered_zpool_map = dict()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   124
        self._remaining_zpool_map = dict()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   125
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   126
        self._cpu = platform.processor()
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   127
        self._gpt_capable = gpt_firmware_check()
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   128
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   129
        self._firmware = SystemFirmware.get().fw_name
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   130
        self._reset_maps()
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   131
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   132
    @property
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   133
    def cpu(self):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   134
        return self._cpu
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   135
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   136
    @property
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   137
    def gpt_capable(self):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   138
        return self._gpt_capable
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   139
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   140
    def _reset_maps(self):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   141
        '''Reset all local map information to default values
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   142
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   143
        # Whether swap/dump is to be created, noswap = Don't create swap
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   144
        self._nozpools = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   145
        self._noswap = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   146
        self._nodump = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   147
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   148
        # Cache of various information useful during parsing of manifest info
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   149
        self._root_pool = None     # Should be only one root pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   150
        self._be = None            # Should be only one BE
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   152
        self._is_generated_root_pool = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   153
        self._root_vdev = None     # Will only be set if we create a new rpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   154
                                   # due to none existing in manifest
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   155
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   156
        self._swap_zvol_map = dict()  # Map of zpool:swap to Zvol object
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   157
        self._dump_zvol = None   # Can only have one dump device
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   158
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   159
        self._no_logical_disks = list()  # List of disks with no zpool or vdev
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   160
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   161
        # Assuming only one target object per manifest.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   162
        # If supporting more than one target, these will become lists
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   163
        # of dictionaries accessed via a target index.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   164
        self._zpool_map = dict()   # Map of zpool names to Zpool object
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   165
        self._vdev_map = dict()    # Map of zpool:vdev names to Vdev objects
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   166
        self._vdev_added_map = dict()  # Map of zpool:vdev names we added
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   167
        self._zvol_map = dict()    # Map of zpool:zvols names to Zvol objects
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   168
        self._fs_map = dict()      # Map of zpool:datasets to Dataset objects
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   169
        self._pool_options = dict()  # Map of zpool names to PoolOption objects
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   170
        self._dataset_options = dict()  # Map of zpool names to DatasetOptions
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   171
        self._disk_map = dict()      # Map of disks to Disk objects
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   172
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   173
    def _pretty_print_disk(self, disk):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   174
        '''Print disk identifier rather than whole disk's str()'''
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   175
        if is_iterable(disk):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   176
            ret_str = ""
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   177
            for _disk in disk:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   178
                if len(ret_str) != 0:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   179
                    ret_str += ", "
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   180
                ret_str += self._pretty_print_disk(_disk)
1681
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
   181
            return ret_str
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   182
        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   183
            if isinstance(disk, Disk):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   184
                if disk.ctd is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   185
                    return "%s" % disk.ctd
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   186
                if disk.volid is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   187
                    return "[volid='%s']" % disk.volid
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   188
                if disk.devpath is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   189
                    return "[devpath='%s']" % disk.devpath
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   190
                if disk.devid is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   191
                    return "[devid='%s']" % disk.devid
1197
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   192
                if disk.receptacle is not None:
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   193
                    return "[receptacle='%s']" % disk.receptacle
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   194
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   195
                if disk.disk_prop is not None:
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   196
                    disk_props = list()
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   197
                    if disk.disk_prop.dev_type is not None:
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   198
                        disk_props.append(
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   199
                            "dev_type='%s'" % (disk.disk_prop.dev_type))
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   200
                    if disk.disk_prop.dev_vendor is not None:
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   201
                        disk_props.append(
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   202
                            "dev_vendor='%s'" % (disk.disk_prop.dev_vendor))
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   203
                    if disk.disk_prop.dev_chassis is not None:
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   204
                        disk_props.append(
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   205
                            "dev_chassis='%s'" %
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   206
                            (disk.disk_prop.dev_chassis))
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   207
                    if disk.disk_prop.dev_size is not None:
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   208
                        disk_props.append(
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   209
                            "dev_size='%s'" %
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   210
                            (str(disk.disk_prop.dev_size.sectors) +
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   211
                             Size.sector_units))
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   212
                    if disk_props:
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   213
                        disk_props_str = "[" + ",".join(disk_props) + "]"
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   214
                        return disk_props_str
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   215
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   216
                # All else fails, maybe looking for boot-disk?
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   217
                if disk.is_boot_disk():
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   218
                    return "[boot-disk]"
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   219
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
   220
        return str(disk)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   221
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   222
    def _handle_vdev(self, vdev):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   223
        '''Create Vdev object
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   224
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   225
        self.logger.debug("Processing Vdev '%s', redundancy='%s'" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   226
            (vdev.name, vdev.redundancy))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   227
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   228
        new_vdev = copy.copy(vdev)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   229
        return new_vdev
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   230
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   231
    def _handle_filesystem(self, fs):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   232
        '''Create Filesystem Object
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   233
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   234
        self.logger.debug("Processing Filesystem '%s', action='%s', "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   235
            "mountpoint='%s'" % (fs.name, fs.action, fs.mountpoint))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   236
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   237
        new_fs = copy.copy(fs)
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   238
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   239
        # Handle options children
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   240
        for options in fs.children:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   241
            new_options = self._handle_options(options)
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   242
            if new_options is not None:
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   243
                new_fs.insert_children(new_options)
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   244
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   245
        return new_fs
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   246
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   247
    def _handle_zvol(self, zvol):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   248
        '''Create Zvol object
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   249
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   250
        self.logger.debug("Processing Zvol '%s', action='%s', use='%s'" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   251
            (zvol.name, zvol.action, zvol.use))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   252
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   253
        new_zvol = copy.copy(zvol)
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   254
        # Handle options children
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   255
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   256
        for options in zvol.children:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   257
            new_options = self._handle_options(options)
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   258
            if new_options is not None:
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   259
                new_zvol.insert_children(new_options)
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   260
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   261
        return new_zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   262
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   263
    def _handle_options(self, options):
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   264
        '''Create Zpool or Dataset Options object
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   265
        '''
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   266
        self.logger.debug("Processing Options '%s'" %
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   267
            str(options))
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   268
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   269
        new_options = copy.copy(options)
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   270
        return new_options
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   271
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   272
    def _handle_pool_options(self, pool_options):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   273
        '''Create PoolOptions object
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   274
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   275
        self.logger.debug("Processing Pool Options '%s'" %
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   276
            str(pool_options))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   277
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   278
        new_pool_options = copy.copy(pool_options)
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   279
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   280
        # Handle options children
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   281
        for options in pool_options.children:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   282
            new_options = self._handle_options(options)
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   283
            if new_options is not None:
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   284
                new_pool_options.insert_children(new_options)
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   285
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   286
        return new_pool_options
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   287
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   288
    def _handle_dataset_options(self, dataset_options):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   289
        '''Create DatasetOption object
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   290
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   291
        self.logger.debug("Processing Dataset Options '%s'" %
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   292
            str(dataset_options))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   293
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   294
        new_dataset_options = copy.copy(dataset_options)
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   295
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   296
        # Handle options children
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   297
        for options in dataset_options.children:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   298
            new_options = self._handle_options(options)
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   299
            if new_options is not None:
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   300
                new_dataset_options.insert_children(new_options)
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   301
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   302
        return new_dataset_options
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   303
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   304
    def _handle_be(self, be):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   305
        '''Create BE object, set mountpoint to that passed in
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   306
           to target_selection init.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   307
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   308
        self.logger.debug("Processing BE '%s'" % (be.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   309
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   310
        new_be = copy.copy(be)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   311
        new_be.mountpoint = self.be_mountpoint
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   312
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   313
        # Handle options children
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   314
        for options in be.children:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   315
            new_options = self._handle_options(options)
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   316
            if new_options is not None:
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   317
                new_be.insert_children(new_options)
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   318
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   319
        return new_be
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   320
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   321
    def _handle_zpool(self, zpool, logical):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   322
        '''Process all zpool children, handling each child object type
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   323
           and returning Zpool object
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   324
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   325
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   326
        self.logger.debug("Processing Zpool '%s', action='%s', is_root='%s',"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   327
            " mountpoint='%s'" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   328
            (zpool.name, zpool.action, zpool.is_root, zpool.mountpoint))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   329
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   330
        this_be = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   331
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   332
        if zpool.name in self._zpool_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   333
            raise SelectionError("Zpool '%s' specified twice" % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   334
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   335
        vdev_count = 0
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   336
        new_zpool = copy.copy(zpool)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   337
        logical.insert_children(new_zpool)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   338
        for child in zpool.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   339
            if isinstance(child, Vdev):
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   340
                new_vdev = self._handle_vdev(child)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   341
                if new_vdev is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   342
                    vdev_key = new_zpool.name + ":" + new_vdev.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   343
                    if vdev_key not in self._vdev_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   344
                        self._vdev_map[vdev_key] = new_vdev
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   345
                        self.logger.debug("Adding Vdev '%s' to zpool" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   346
                            (new_vdev.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   347
                        new_zpool.insert_children(new_vdev)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   348
                        vdev_count += 1
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   349
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   350
                        raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   351
                            "Vdev '%s' specified twice in zpool '%s'" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   352
                            (new_vdev.name, new_zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   353
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   354
                    raise SelectionError("Failed to copy Vdev.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   355
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   356
            elif isinstance(child, Filesystem):
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   357
                new_fs = self._handle_filesystem(child)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   358
                if new_fs is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   359
                    if new_fs.action == "preserve" and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   360
                        new_zpool.action not in self.PRESERVED:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   361
                        raise SelectionError("Filesystem '%s' cannot be "
1227
4ecf733307ad 7058653 undefined variable disk_kd and discovered_disk in checkpoints/target_selection.py
Drew Fisher <drew.fisher@oracle.com>
parents: 1197
diff changeset
   362
                            "preserved in non-preserved zpool '%s'." % \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   363
                            (new_fs.name, new_zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   364
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   365
                    fs_key = new_zpool.name + ":" + new_fs.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   366
                    # Filesystem name must be unique within each pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   367
                    if fs_key not in self._fs_map and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   368
                        fs_key not in self._zvol_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   369
                        self._fs_map[fs_key] = new_fs
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   370
                        self.logger.debug("Adding Filesystem '%s' to zpool" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   371
                            (new_fs.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   372
                        new_zpool.insert_children(new_fs)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   373
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   374
                        raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   375
                            "Filesystem '%s' specified twice in zpool '%s'" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   376
                            (new_fs.name, new_zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   377
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   378
                    raise SelectionError("Failed to copy Filesystem.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   379
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   380
            elif isinstance(child, Zvol):
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   381
                new_zvol = self._handle_zvol(child)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   382
                if new_zvol is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   383
                    if new_zvol.action in self.PRESERVED and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   384
                        new_zpool.action not in self.PRESERVED:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   385
                        raise SelectionError("Zvol '%s' cannot be "
1227
4ecf733307ad 7058653 undefined variable disk_kd and discovered_disk in checkpoints/target_selection.py
Drew Fisher <drew.fisher@oracle.com>
parents: 1197
diff changeset
   386
                            "preserved in non-preserved zpool '%s'." % \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   387
                            (new_zvol.name, zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   388
                    zvol_key = new_zpool.name + ":" + new_zvol.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   389
                    # Zvol name must be unique within each pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   390
                    if zvol_key not in self._zvol_map and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   391
                        zvol_key not in self._fs_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   392
                        if new_zvol.use == "swap":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   393
                            # Cannot specify Swap Zvol and noswap == true
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   394
                            if self._noswap:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   395
                                if zpool.action in self.PRESERVED:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   396
                                    raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   397
                                        "Swap zvol already exists and "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   398
                                        "noswap specified in manifest.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   399
                                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   400
                                    raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   401
                                        "Both swap zvol and noswap specified "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   402
                                        "in manifest.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   403
                            self._swap_zvol_map[zvol_key] = new_zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   404
                        elif new_zvol.use == "dump":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   405
                            # Can only specify one Dump Zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   406
                            if self._dump_zvol is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   407
                                raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   408
                                    "Dump zvol specified twice.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   409
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   410
                            # Cannot specify Dump Zvol and nodump == true
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   411
                            if self._nodump:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   412
                                if zpool.action in self.PRESERVED:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   413
                                    raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   414
                                        "Dump zvol already exists and "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   415
                                        "nodump specified in manifest.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   416
                                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   417
                                    raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   418
                                        "Both dump zvol and nodump specified "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   419
                                        "in manifest.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   420
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   421
                            # Cannot delete a dump zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   422
                            if new_zvol.action == "delete":
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   423
                                self._raise_dump_zvol_deletion_exception()
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   424
                            self._dump_zvol = new_zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   425
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   426
                        self._zvol_map[zvol_key] = new_zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   427
                        self.logger.debug("Adding Zvol '%s' to zpool" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   428
                            (new_zvol.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   429
                        new_zpool.insert_children(new_zvol)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   430
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   431
                        raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   432
                            "Zvol '%s' specified twice in zpool '%s'" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   433
                            (new_zvol.name, new_zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   434
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   435
                    raise SelectionError("Failed to copy Zvol.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   436
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   437
            elif isinstance(child, PoolOptions):
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   438
                new_pool_options = self._handle_pool_options(child)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   439
                if new_pool_options is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   440
                    # Can only specify one pool_options per zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   441
                    if new_zpool.name not in self._pool_options:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   442
                        self._pool_options[new_zpool.name] = new_pool_options
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   443
                        self.logger.debug("Adding Pool Options '%s' to"
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   444
                            "zpool '%s'" % (new_pool_options, new_zpool.name))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   445
                        new_zpool.insert_children(new_pool_options)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   446
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   447
                        raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   448
                            "More than one pool_options specified "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   449
                            "zpool '%s'" % (new_zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   450
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   451
                    raise SelectionError("Failed to copy PoolOptions.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   452
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   453
            elif isinstance(child, DatasetOptions):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   454
                # Validate only one dataset options
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   455
                new_dataset_options = self._handle_dataset_options(child)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   456
                if new_dataset_options is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   457
                    # Can only specify one dataset_options per zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   458
                    if new_zpool.name not in self._dataset_options:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   459
                        self._dataset_options[new_zpool.name] = \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   460
                            new_dataset_options
1273
c4a56398929a 7052475 need to process dataset options from the AI manifest
Darren Kenny <Darren.Kenny@Oracle.COM>
parents: 1266
diff changeset
   461
                        self.logger.debug("Adding Dataset Options to zpool")
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   462
                        new_zpool.insert_children(new_dataset_options)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   463
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   464
                        raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   465
                            "More than one dataset_options specified "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   466
                            "in zpool '%s'" % (new_zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   467
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   468
                    raise SelectionError("Failed to copy DatasetOptions.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   469
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   470
            elif isinstance(child, BE):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   471
                if not zpool.is_root:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   472
                    raise SelectionError("BE cannot be part of non root "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   473
                        "pool '%s'" % (zpool.name))
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   474
                new_be = self._handle_be(child)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   475
                if new_be is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   476
                    # BE can only be specified once in entire manifest
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   477
                    if self._be is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   478
                        self._be = new_be
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   479
                        this_be = new_be
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   480
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   481
                        self.logger.debug("Adding BE '%s' to zpool" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   482
                            (new_be.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   483
                        new_zpool.insert_children(new_be)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   484
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   485
                        if this_be is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   486
                            raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   487
                                "More than one BE specified in zpool '%s'" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   488
                                (new_zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   489
                        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   490
                            raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   491
                                "Only one BE element allowed per logical.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   492
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   493
                    raise SelectionError("Failed to copy BE.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   494
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   495
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   496
                raise SelectionError("Invalid zpool sub element")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   497
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   498
        if vdev_count == 0:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   499
            # Zpool specified in manifest but no vdevs were specified
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   500
            # Add a default vdev of type mirror to add any disks to later
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   501
            self.logger.debug("No Vdevs found in zpool '%s', adding mirror."
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   502
                % (new_zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   503
            new_vdev = new_zpool.add_vdev(DEFAULT_VDEV_NAME, "mirror")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   504
            vdev_key = new_zpool.name + ":" + new_vdev.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   505
            self._vdev_map[vdev_key] = new_vdev
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   506
            self._vdev_added_map[vdev_key] = new_vdev
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   507
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   508
        return new_zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   509
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   510
    def _handle_preserved_zpool(self, discovered_zpool, zpool):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   511
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   512
            Process all zpool children, handling each child object type
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   513
            and returning Zpool object.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   514
            Preserving a Zpool effectively means maintaining the physical
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   515
            device structure of a zpool, so you cannot add new physical
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   516
            devices via AI, you can however change what's contained on the
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   517
            zpool, e.g. create/delete filesystems/Zvols.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   518
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   519
            Filesystems:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   520
                - Create, must not already exist
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   521
                - Delete, must exist already
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   522
                - Preserve, nothing to do, but must exist already.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   523
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   524
            Zvols:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   525
                - Create, must not already exist
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   526
                - Delete, must exist already
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   527
                - Preserve, nothing to do, but must exist already.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   528
                - use_existing, must exist, and usage must be changing
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   529
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   530
            BE's:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   531
                - Can only be one BE, BE's are not copied from discovered
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   532
                  as there could be laods.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   533
                - Ensure this BE does not exist already, if not specified
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   534
                  Ensure default created BE does not already exist.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   535
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   536
            Dataset Options:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   537
                - Not allowed in AI, user can do this manually, requires
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   538
                  parsing of string options and zfs knowledge of what options
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   539
                  can be applied post pool creation.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   540
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   541
            Pool Options:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   542
                - Not allowed in AI, user can do this manually, requires
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   543
                  parsing of string options and zfs knowledge of what options
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   544
                  can be applied post pool creation.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   545
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   546
        self.logger.debug("Processing %s Zpool '%s', action='%s',"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   547
            " is_root='%s', mountpoint='%s'" % (zpool.action, zpool.name,
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   548
            zpool.action, zpool.is_root, zpool.mountpoint))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   549
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   550
        discovered_bes = self._get_discovered_be(zpool)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   551
        this_be = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   552
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   553
        discovered_zpool.action = zpool.action
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   554
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   555
        for child in zpool.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   556
            if isinstance(child, Vdev):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   557
                raise SelectionError("Cannot specify vdev's for preserved "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   558
                    "zpool '%s'." % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   559
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   560
            elif isinstance(child, Filesystem):
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   561
                new_fs = self._handle_filesystem(child)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   562
                if new_fs is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   563
                    fs_key = zpool.name + ":" + new_fs.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   564
                    # Check if this filesystem already exists as zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   565
                    if fs_key in self._zvol_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   566
                        raise SelectionError("Filesystem '%s' specified on "
1227
4ecf733307ad 7058653 undefined variable disk_kd and discovered_disk in checkpoints/target_selection.py
Drew Fisher <drew.fisher@oracle.com>
parents: 1197
diff changeset
   567
                            "preserved zpool '%s' exists as Zvol." % \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   568
                            (new_fs.name, zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   569
                    elif fs_key in self._fs_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   570
                        # Only preserve and delete are allowed for existing
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   571
                        if new_fs.action not in ["preserve", "delete"]:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   572
                            raise SelectionError("Filesystem '%s' specified on"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   573
                                " preserved zpool '%s' contains invalid action"
1227
4ecf733307ad 7058653 undefined variable disk_kd and discovered_disk in checkpoints/target_selection.py
Drew Fisher <drew.fisher@oracle.com>
parents: 1197
diff changeset
   574
                                " of '%s'." % \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   575
                                (new_fs.name, zpool.name, new_fs.action))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   576
                        # Remove discovered item in order to add user specified
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   577
                        discovered_zpool.delete_children(new_fs)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   578
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   579
                        # Only create allowed for new filesystems
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   580
                        if new_fs.action != "create":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   581
                            raise SelectionError("Filesystem '%s' specified on"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   582
                                " preserved zpool '%s' contains invalid action"
1227
4ecf733307ad 7058653 undefined variable disk_kd and discovered_disk in checkpoints/target_selection.py
Drew Fisher <drew.fisher@oracle.com>
parents: 1197
diff changeset
   583
                                " of '%s'." % \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   584
                                (new_fs.name, zpool.name, new_fs.action))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   585
                        self._fs_map[fs_key] = new_fs
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   586
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   587
                    self.logger.debug("Adding Filesystem '%s' to zpool" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   588
                         (new_fs.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   589
                    discovered_zpool.insert_children(new_fs)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   590
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   591
                    raise SelectionError("Failed to process Filesystem.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   592
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   593
            elif isinstance(child, Zvol):
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   594
                new_zvol = self._handle_zvol(child)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   595
                if new_zvol is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   596
                    zvol_key = zpool.name + ":" + new_zvol.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   597
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   598
                    # Check if This Zvol already exists as filesystem
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   599
                    if zvol_key in self._fs_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   600
                        raise SelectionError("Zvol '%s' specified on "
1227
4ecf733307ad 7058653 undefined variable disk_kd and discovered_disk in checkpoints/target_selection.py
Drew Fisher <drew.fisher@oracle.com>
parents: 1197
diff changeset
   601
                            "preserved zpool '%s' exists as Filesystem." % \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   602
                            (new_zvol.name, zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   603
                    elif zvol_key in self._zvol_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   604
                        # Only preserve, delete, use_existing are allowed
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   605
                        if new_zvol.action not in \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   606
                            ["preserve", "delete", "use_existing"]:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   607
                            raise SelectionError("Zvol '%s' specified on "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   608
                                "preserved zpool '%s' contains invalid action "
1227
4ecf733307ad 7058653 undefined variable disk_kd and discovered_disk in checkpoints/target_selection.py
Drew Fisher <drew.fisher@oracle.com>
parents: 1197
diff changeset
   609
                                "of '%s'." % \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   610
                                (new_zvol.name, zpool.name, new_zvol.action))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   611
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   612
                        discovered_zvol = discovered_zpool.get_first_child(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   613
                            new_zvol.name, Zvol)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   614
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   615
                        if discovered_zvol is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   616
                            raise SelectionError("Zvol '%s' not found in "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   617
                                "discovered." % (new_zvol.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   618
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   619
                        if new_zvol.action == "use_existing":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   620
                            if discovered_zvol.use == new_zvol.use:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   621
                                raise SelectionError("Zvol '%s' marked as "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   622
                                    "use_existing but usage has not changed." %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   623
                                    (new_zvol.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   624
                            elif discovered_zvol.use == "dump":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   625
                                # Cannot delete a dump zvol
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   626
                                self._raise_dump_zvol_deletion_exception()
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   627
1227
4ecf733307ad 7058653 undefined variable disk_kd and discovered_disk in checkpoints/target_selection.py
Drew Fisher <drew.fisher@oracle.com>
parents: 1197
diff changeset
   628
                            elif new_zvol.use == "dump":
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   629
                                # Can only specify one Dump Zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   630
                                if self._dump_zvol is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   631
                                    raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   632
                                        "Dump zvol specified twice.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   633
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   634
                                # Cannot specify Dump Zvol and nodump == true
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   635
                                if self._nodump:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   636
                                    raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   637
                                        "Both dump zvol and nodump "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   638
                                        "specified in manifest.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   639
                                # Make a copy of discovered zvol to ensure we
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   640
                                # get same size specification
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   641
                                new_zvol = copy.deepcopy(discovered_zvol)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   642
                                new_zvol.action = "create"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   643
                                new_zvol.use = "dump"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   644
                                self._dump_zvol = new_zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   645
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   646
                            elif new_zvol.use == "swap":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   647
                                # Cannot have Swap Zvol and noswap == true
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   648
                                if self._noswap:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   649
                                    raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   650
                                        "Both swap zvol and noswap "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   651
                                        "specified in manifest.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   652
                                if new_zvol in self._swap_zvol_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   653
                                    raise SelectionError("Zvol '%s' specified "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   654
                                        "as swap twice in preserved zpool "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   655
                                        "'%s'" % (new_zvol.name, zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   656
                                new_zvol = copy.deepcopy(discovered_zvol)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   657
                                new_zvol.action = "create"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   658
                                new_zvol.use = "swap"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   659
                                self._swap_zvol_map[zvol_key] = new_zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   660
                            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   661
                                new_zvol = copy.deepcopy(discovered_zvol)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   662
                                new_zvol.action = "create"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   663
                                new_zvol.use = "none"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   664
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   665
                            if discovered_zvol.use == "swap":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   666
                                # Remove this device from swap map
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   667
                                if new_zvol in self._swap_zvol_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   668
                                    del self._swap_zvol_map[zvol_key]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   669
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   670
                        # Remove discovered item in order to add user specified
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   671
                        discovered_zpool.delete_children(new_zvol)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   672
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   673
                        # Only create allowed for new zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   674
                        if new_zvol.action != "create":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   675
                            raise SelectionError("Zvol '%s' specified on "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   676
                                "preserved zpool '%s' contains invalid action "
1227
4ecf733307ad 7058653 undefined variable disk_kd and discovered_disk in checkpoints/target_selection.py
Drew Fisher <drew.fisher@oracle.com>
parents: 1197
diff changeset
   677
                                "of '%s'." % \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   678
                                (new_zvol.name, zpool.name, new_zvol.action))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   679
                        self._zvol_map[zvol_key] = new_zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   680
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   681
                    self._zvol_map[zvol_key] = new_zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   682
                    self.logger.debug("Adding Zvol '%s' to zpool" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   683
                        (new_zvol.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   684
                    discovered_zpool.insert_children(new_zvol)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   685
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   686
                    raise SelectionError("Failed to copy Zvol.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   687
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   688
            elif isinstance(child, PoolOptions):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   689
                raise SelectionError("Cannot specify Pool Option's for "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   690
                    "preserved zpool '%s'." % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   691
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   692
            elif isinstance(child, DatasetOptions):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   693
                raise SelectionError("Cannot specify Dataset Option's for "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   694
                    "preserved zpool '%s'." % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   695
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   696
            elif isinstance(child, BE):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   697
                if not zpool.is_root:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   698
                    raise SelectionError("BE cannot be part of non root "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   699
                        "pool '%s'" % (zpool.name))
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   700
                new_be = self._handle_be(child)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   701
                if new_be is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   702
                    # Ensure this boot environment does not exist on
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   703
                    # this preserved/use_existing zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   704
                    if new_be.exists:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   705
                        raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   706
                                "BE '%s' specified in preserved "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   707
                                "zpool '%s' already exists. To install to "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   708
                                "existing zpool you must specify a unique "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   709
                                "BE in the manifest." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   710
                                (new_be.name, zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   711
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   712
                    # BE can only be specified once in entire manifest
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   713
                    if self._be is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   714
                        self._be = new_be
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   715
                        this_be = new_be
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   716
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   717
                        self.logger.debug("Adding BE '%s' to zpool" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   718
                            (new_be.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   719
                        discovered_zpool.insert_children(new_be)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   720
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   721
                        if this_be is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   722
                            raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   723
                                "More than one BE specified in zpool '%s'" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   724
                                (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   725
                        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   726
                            raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   727
                                "Only one BE element allowed per logical.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   728
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   729
                    raise SelectionError("Failed to copy BE.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   730
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   731
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   732
                raise SelectionError("Invalid zpool sub element")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   733
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   734
    def _handle_logical(self, logical):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   735
        '''Create Logical structure from manifest, validating
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   736
           zpools and contents in the process
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   737
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   738
        # Clear the Error service
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   739
        errsvc.clear_error_list()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   740
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   741
        self.logger.debug("Processing Logical noswap : %s, nodump : %s" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   742
            (logical.noswap, logical.nodump))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   743
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   744
        # Set whether to specifically not create swap/dump
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   745
        self._noswap = logical.noswap
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   746
        self._nodump = logical.nodump
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   747
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   748
        new_logical = copy.copy(logical)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   749
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   750
        preserving_zpools = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   751
        for zpool in logical.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   752
            # This will always be true as Logical can only contain zpools
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   753
            if isinstance(zpool, Zpool):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   754
                if zpool.action in self.PRESERVED:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   755
                    preserving_zpools = True
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   756
                    disc_zpool = self._get_discovered_zpool(zpool)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   757
                    if disc_zpool is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   758
                        raise SelectionError("Failed to find zpool '%s' in "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   759
                            "discovered logical tree." % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   760
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   761
                    if zpool.action == "use_existing" and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   762
                        not disc_zpool.is_root:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   763
                        raise SelectionError("Specified action of "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   764
                            "'use_existing' on pool '%s' is invalid. '%s' "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   765
                            "is not a root pool." % (zpool.name, zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   766
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   767
                    new_zpool = self._handle_zpool(disc_zpool, new_logical)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   768
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   769
                    # Copy physical devices to desired
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   770
                    self._copy_zpool_discovered_devices(new_zpool)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   771
                else:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   772
                    new_zpool = self._handle_zpool(zpool, new_logical)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   773
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   774
                if new_zpool is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   775
                    if new_zpool.name not in self._zpool_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   776
                        if new_zpool.is_root:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   777
                            # Only one root pool can be specified
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   778
                            if self._root_pool is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   779
                                raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   780
                                    "Root pool specified twice")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   781
                            self.logger.debug("Root zpool found '%s'" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   782
                                (new_zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   783
                            self._root_pool = new_zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   784
                        self.logger.debug("Adding zpool '%s' to logical" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   785
                            (new_zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   786
                        self._zpool_map[new_zpool.name] = new_zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   787
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   788
                        raise SelectionError("Zpool '%s' specified twice" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   789
                            (new_zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   790
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   791
                if zpool.action in self.PRESERVED:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   792
                    self._handle_preserved_zpool(new_zpool, zpool)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   793
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   794
                raise SelectionError("Invalid logical child.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   795
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   796
        if preserving_zpools:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   797
            # Need to update all devices, and remove any references to
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   798
            # Zpools that do not exist.
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   799
            self._remove_invalid_zpool_references(new_logical)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   800
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   801
        if self._zpool_map is None or len(self._zpool_map) == 0:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   802
            self._nozpools = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   803
            new_logical = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   804
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   805
        # Check error service for errors
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   806
        errors = errsvc.get_all_errors()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   807
        if errors:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   808
            existing_desired = \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   809
                self.doc.persistent.get_first_child(Target.DESIRED)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   810
            if existing_desired:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   811
                self.logger.debug("Desired =\n%s\n" % (str(existing_desired)))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   812
            errstr = "Following errors occurred processing logical :\n%s" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   813
                (str(errors[0]))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   814
            raise SelectionError(errstr)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   815
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   816
        return new_logical
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   817
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   818
    def _raise_dump_zvol_deletion_exception(self):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   819
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   820
            Dump zvol's cannot be unassigned from being a dump device.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   821
            Bug 6910925 is addressing this issue, however until resolved
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   822
            we have to trap and tell the user that this is not possible.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   823
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   824
        self.logger.debug("Workaround for releaseing Zvol as dump device.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   825
        self.logger.debug("Create a new Zvol on another pool, and assign ")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   826
        self.logger.debug("this Zvol as the dump device. The original dump")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   827
        self.logger.debug("assigned Zvol and it's pool can now be destroyed.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   828
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   829
        raise SelectionError("Dump device cannot be unassigned. Due to "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   830
            "RFE 6910925. See install_log for workaround.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   831
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   832
    def _remove_invalid_zpool_references(self, logical):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   833
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   834
            Process all physical devices, remove any references to in_zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   835
            in_vdev referencing pools not in this logical tree.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   836
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   837
            Whilst processing the disks add them to the internal maps.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   838
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   839
            At this stage self._zpool_map will have been populated.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   840
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   841
        # Cycle through all desired physical disks checking what pool if
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   842
        # any these disks/devices are assigned to.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   843
        # If the pool does not exist in this logical, then reset their
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   844
        # in_zpool and in_vdev attributes to None
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   845
        new_desired_target = self._get_new_desired_target()
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   846
        desired_disks = new_desired_target.get_descendants(class_type=Disk)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   847
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   848
        for disk in desired_disks:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   849
            if disk.in_zpool is not None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   850
                disk.in_zpool not in self._zpool_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   851
                disk.in_zpool = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   852
                disk.in_vdev = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   853
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   854
            # Process any children and ensure they are unset aswell
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   855
            for disk_kid in disk.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   856
                if (isinstance(disk_kid, Partition) or \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   857
                    isinstance(disk_kid, Slice)) and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   858
                    disk_kid.in_zpool is not None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   859
                    disk_kid.in_zpool not in self._zpool_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   860
                    disk_kid.in_zpool = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   861
                    disk_kid.in_vdev = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   862
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   863
                if isinstance(disk_kid, Partition):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   864
                    for slc in disk_kid.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   865
                        if isinstance(slc, Slice) and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   866
                            slc.in_zpool is not None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   867
                            slc.in_zpool not in self._zpool_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   868
                            slc.in_zpool = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   869
                            slc.in_vdev = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   870
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   871
        # Add all these disks to map
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   872
        self._add_disks_to_map(desired_disks)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   873
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   874
    def _add_disks_to_map(self, disks):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   875
        '''
1536
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
   876
            Given a single disk, or list of disks, add them to the internal
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
   877
            disk map, raising an exception if disk or any of its active ctd
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
   878
            aliases have already been added.
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   879
        '''
1536
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
   880
        # convert disks to a list if it's not one already
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   881
        if not is_iterable(disks):
1536
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
   882
            disks = [disks]
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
   883
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   884
        for disk in disks:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   885
            if disk.ctd in self._disk_map:
1536
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
   886
                # Seems that the disk is specified more than once in the
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
   887
                # manifest!
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   888
                raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   889
                    "Disk '%s' matches already used disk '%s'." %
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   890
                    (self._pretty_print_disk(disk), disk.ctd))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   891
            self._disk_map[disk.ctd] = disk
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   892
1536
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
   893
            # also add all active ctd aliases for this disk to make sure we
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
   894
            # don't try to do two different operations (on two different ctd
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
   895
            # strings) which are actually the same disk.
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
   896
            for active_ctd in disk.active_ctds:
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
   897
                self._disk_map[active_ctd] = disk
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
   898
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   899
    def _get_discovered_be(self, zpool):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   900
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   901
            Retrieve the list of boot environments for a specific discovered
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   902
            zpool.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   903
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   904
        discovered = self.doc.persistent.get_first_child(Target.DISCOVERED)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   905
        discovered_zpools = discovered.get_descendants(name=zpool.name,
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   906
            class_type=Zpool)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   907
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   908
        if not discovered_zpools:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   909
            return None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   910
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   911
        found_be = discovered_zpools[0].get_descendants(class_type=BE)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   912
        return found_be
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   913
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   914
    def _get_discovered_zpool(self, zpool):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   915
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   916
            Process list of discovered zpools for matching zpool.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   917
            Return None if not found or zpool object if found.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   918
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   919
        discovered = self.doc.persistent.get_first_child(Target.DISCOVERED)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   920
        discovered_zpools = discovered.get_descendants(name=zpool.name,
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   921
            class_type=Zpool)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   922
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   923
        if not discovered_zpools:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   924
            return None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   925
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   926
        found_zpool = copy.deepcopy(discovered_zpools[0])
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   927
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   928
        # Remove BE's as they cannot be preserved/recreated via AI
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   929
        found_zpool.delete_children(class_type=BE)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   930
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   931
        return found_zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   932
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   933
    def _copy_zpool_discovered_devices(self, zpool):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   934
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   935
            For zpools being preserved, copy all devices associated with
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   936
            this zpool into desired tree.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   937
            When copying devices, entire disk tree needs to be copied if
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   938
            any part of the disk resides on this zpool, by default all elements
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   939
            are set to "preserved", so nothing will get destroyed, TI needs
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   940
            to have all elements of the disk tree structure or it will wipe
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   941
            them.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   942
            Throw exception if after processing all physical devices, and
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   943
            none were found for this zpool.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   944
        '''
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   945
        new_desired_target = self._get_new_desired_target()
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   946
        discovered = self.doc.persistent.get_first_child(Target.DISCOVERED)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   947
        discovered_disks = discovered.get_descendants(class_type=Disk)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   948
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   949
        device_found = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   950
        for disk in discovered_disks:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   951
            disk_copy = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   952
            disk_found = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   953
            if disk.in_zpool is not None and disk.in_zpool == zpool.name:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   954
                # Copy entire disk
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   955
                disk_copy = copy.deepcopy(disk)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   956
                disk_found = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   957
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   958
                for disk_kid in disk.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   959
                    if isinstance(disk_kid, Partition):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   960
                        if disk_kid.in_zpool is not None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   961
                            disk_kid.in_zpool == zpool.name:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   962
                            disk_found = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   963
                            break
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   964
                        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   965
                            for slc in disk_kid.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   966
                                if isinstance(slc, Slice):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   967
                                    # Only copy if in this zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   968
                                    if slc.in_zpool is not None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   969
                                        slc.in_zpool == zpool.name:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   970
                                        disk_found = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   971
                                        break
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   972
1227
4ecf733307ad 7058653 undefined variable disk_kd and discovered_disk in checkpoints/target_selection.py
Drew Fisher <drew.fisher@oracle.com>
parents: 1197
diff changeset
   973
                    elif isinstance(disk_kid, Slice):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   974
                        if disk_kid.in_zpool is not None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   975
                            disk_kid.in_zpool == zpool.name:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   976
                            disk_found = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   977
                            break
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   978
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   979
                if disk_found:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   980
                    disk_copy = copy.deepcopy(disk)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   981
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   982
            if disk_copy is not None and disk_found:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   983
                # If this is the root pool, make sure solaris partition
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   984
                # is marked as Active, Final Validation fails otherwise
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   985
                if zpool.is_root and self.cpu == 'i386':
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   986
                    solaris2_part_type = Partition.name_to_num("Solaris2")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   987
                    for disk_kid in disk_copy.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   988
                        if isinstance(disk_kid, Partition) and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   989
                            disk_kid.part_type == solaris2_part_type:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   990
                            disk_kid.bootid = Partition.ACTIVE
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   991
                            break
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   992
                new_desired_target.insert_children(disk_copy)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   993
                device_found = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   994
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   995
        if not device_found:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   996
            raise SelectionError("Failed to find any discovered devices for "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   997
                "zpool '%s'." % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
   998
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
   999
    def _validate_zpool_actions(self, zpool):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1000
        '''Perform some validation on zpool actions against
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1001
           root pool and existing zpool's.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1002
           Ensure pool name does not exist as a current directory, it pool does
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1003
           not exist already and is being created.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1004
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1005
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1006
        if zpool.exists:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1007
            # Get zpool discovered object
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1008
            discovered_zpool = self._get_discovered_zpool(zpool)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1009
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1010
            if discovered_zpool is None:
1252
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1011
                if self.dry_run:
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1012
                    # Throw warning only if in dry run mode
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1013
                    self.logger.warning("zpool.exists() reports zpool '%s' "
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1014
                        "exists, but zpool object not in Discovered tree." % \
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1015
                        (zpool.name))
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1016
                else:
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1017
                    raise SelectionError("zpool.exists() reports zpool '%s' "
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1018
                        "exists, but zpool object not in Discovered tree." % \
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1019
                        (zpool.name))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1020
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1021
            if zpool.action == "create":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1022
                # Log warning stating zpool will be destroyed
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1023
                self.logger.warning("Existing zpool '%s' will be destroyed."
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1024
                                    % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1025
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1026
            elif zpool.action == "preserve" and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1027
                (zpool.is_root or discovered_zpool.is_root):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1028
                # Manifest specifies to preserve pool, and either manifest
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1029
                # or discovered specify this as root pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1030
                raise SelectionError("Invalid preservation specified for "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1031
                    "root zpool '%s'. Use 'use_existing' action." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1032
                    (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1033
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1034
            elif zpool.action == "use_existing":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1035
                # Pool must be a an existing root pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1036
                if not discovered_zpool.is_root:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1037
                    raise SelectionError("Cannot specify 'use_existing' "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1038
                        "action for already existing non root zpool '%s'."
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1039
                        % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1040
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1041
                if not zpool.is_root:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1042
                    raise SelectionError("Cannot specify 'use_existing' "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1043
                        "action on non root zpool '%s'." % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1044
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1045
                # Preserving a root pool, let's make sure there is
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1046
                # sufficient space left in this pool for a solaris install
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1047
                zpool_available_size = self._get_existing_zpool_size(zpool)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1048
                if zpool_available_size < self.controller.minimum_target_size:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1049
                    raise SelectionError("Preserved root pool '%s' has "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1050
                        "available space of '%s', which is insufficient "
1247
e93173cd968b 7059210 Spelling Error: Minimim space required is '5.00gb'. Should be Minimum
Drew Fisher <drew.fisher@oracle.com>
parents: 1227
diff changeset
  1051
                        "space to install to. Minimum space "
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1052
                        "required is '%s'."
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1053
                        % (zpool.name, str(zpool_available_size),
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1054
                        str(self.controller.minimum_target_size)))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1055
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1056
        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1057
            if zpool.action == "delete":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1058
                self.logger.warning("Manifest specifies to delete non "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1059
                    "existent zpool '%s'." % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1060
            elif zpool.action == "preserve":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1061
                raise SelectionError("Cannot 'preserve' non existent zpool "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1062
                    "'%s'." % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1063
            elif zpool.action == "use_existing":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1064
                raise SelectionError("Cannot 'use_existing' non existent "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1065
                    "zpool '%s'." % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1066
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1067
                # Attempting to create a new Zpool, ensure pool name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1068
                # is not an existing directory as zpool create will fail.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1069
                if os.path.isdir(os.path.join("/", zpool.name)):
1252
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1070
                    if self.dry_run:
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1071
                        # Dry run mode, just post warning to log
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1072
                        self.logger.warning("Pool name '%s' is not valid, "
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1073
                            "directory exists with this name." % (zpool.name))
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1074
                    else:
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1075
                        raise SelectionError("Pool name '%s' is not valid, "
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  1076
                            "directory exists with this name." % (zpool.name))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1077
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1078
    def _get_existing_zpool_size(self, zpool):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1079
        '''Retrieve the size available for this zpool via the "size"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1080
           zpool property. Returned size is a Size object.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1081
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1082
        if zpool.exists:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1083
            propdict = zpool.get("size")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1084
            retsize = Size(propdict.get("size", "0b"))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1085
        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1086
            retsize = Size("0b")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1087
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1088
        return retsize
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1089
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1090
    def _get_zpool_available_size(self, zpool):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1091
        '''Process all the devices in the first toplevel of this zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1092
           returning what the available size for this zpool if created.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1093
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1094
           "none" : concatenate size of all devices
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1095
           "mirror", "raidz*" : get size of smallest device
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1096
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1097
           returns Size object
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1098
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1099
        retsize = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1100
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1101
        if zpool.action in self.PRESERVED:
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1102
            # Pool is being preserved so no devices in desired,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1103
            # Get size from discovered disks instead
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1104
            retsize = self._get_existing_zpool_size(zpool)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1105
        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1106
            # Get available size from desired targets
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1107
            for vdev in zpool.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1108
                if isinstance(vdev, Vdev):
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1109
                    vdev_devices = self._get_vdev_devices(zpool.name,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1110
                        vdev.name, self._disk_map)
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1111
                    if vdev.redundancy in self.TOPLEVEL_REDUNDANCY:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1112
                        if vdev_devices:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1113
                            for device in vdev_devices:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1114
                                if hasattr(device, "size"):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1115
                                    dsize = copy.copy(device.size)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1116
                                else:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1117
                                    dsize = copy.copy(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1118
                                        device.disk_prop.dev_size)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1119
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1120
                                if retsize is None:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1121
                                    retsize = dsize
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1122
                                else:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1123
                                    devsize = dsize
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1124
                                    if vdev.redundancy == "none":
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1125
                                        # Concatenate device sizes together
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1126
                                        retsize = Size(str(retsize.byte_value +
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1127
                                            devsize.byte_value) +
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1128
                                            Size.byte_units)
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1129
                                    else:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1130
                                        # Get size of smallest device
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1131
                                        if devsize < retsize:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1132
                                            retsize = devsize
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1133
                            # Break after first Toplevel vdev
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1134
                            break
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1135
                        else:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1136
                            raise SelectionError("Vdev '%s' on zpool '%s' "
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1137
                                "must contain at least one device." % \
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1138
                                (vdev.name, zpool.name))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1139
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1140
        if retsize is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1141
            raise SelectionError("Could not determine the available size in "
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1142
                "pool '%s'. Toplevel Vdev could not be found." % (zpool.name))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1143
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1144
        return retsize
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1145
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1146
    def _validate_swap_and_dump(self, desired):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1147
        '''Ensure at least one swap and one dump device exist in logical
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1148
           tree.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1149
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1150
           If none exist, unless noswap or nodump are set to true we will, by
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1151
           default, create one of each in the root pool if sufficient space
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1152
           available.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1153
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1154
        # Get Logical sections
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1155
        logical = desired.get_first_child(class_type=Logical)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1156
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1157
        if logical is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1158
            # swap :
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1159
            if (not logical.noswap and len(self._swap_zvol_map) == 0) or \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1160
                (not logical.nodump and self._dump_zvol is None):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1161
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1162
                # One or both of swap and dump not already created, get
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1163
                # default type/sizes if we are to create them
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1164
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1165
                # Create swap/dump zvol in root pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1166
                swap_added = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1167
                dump_added = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1168
                for zpool in [z for z in logical.children if z.is_root]:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1169
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1170
                    # This needs to be done for on the pool itself as we
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1171
                    # need to process this pool to get the available size
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1172
                    # To install to.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1173
                    try:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1174
                        (swap_type, swap_size, dump_type, dump_size) = \
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1175
                            self.controller.calc_swap_dump_size(
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1176
                                self.controller.minimum_target_size,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1177
                                self._get_zpool_available_size(zpool))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1178
                    except (SwapDumpGeneralError, SwapDumpSpaceError) as ex:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1179
                        raise SelectionError("Error determining swap/dump "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1180
                            "requirements.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1181
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1182
                    # Only process root pools (should only be one either way)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1183
                    if not logical.noswap and len(self._swap_zvol_map) == 0:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1184
                        # Swap does not exist so attempt to create
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1185
                        if swap_type == self.controller.SWAP_DUMP_ZVOL and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1186
                            swap_size > Size("0b"):
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1187
                            zvol_name = self._get_unique_dataset_name(zpool,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1188
                                                                      "swap")
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1189
                            self._create_swap_dump_zvol(zpool, zvol_name,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1190
                                "swap", swap_size)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1191
                            swap_added = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1192
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1193
                    if not logical.nodump and self._dump_zvol is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1194
                        # Dump does not exist so attempt to create
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1195
                        if dump_type == self.controller.SWAP_DUMP_ZVOL and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1196
                            dump_size > Size("0b"):
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1197
                            zvol_name = self._get_unique_dataset_name(zpool,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1198
                                                                      "dump")
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1355
diff changeset
  1199
                            # Since the dump zvol is specified implicitly, do
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1355
diff changeset
  1200
                            # not fail installation because of creation error.
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1201
                            self._create_swap_dump_zvol(zpool, zvol_name,
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1355
diff changeset
  1202
                                "dump", dump_size, create_failure_ok=True)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1203
                            dump_added = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1204
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1205
                if not swap_added and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1206
                    not logical.noswap and len(self._swap_zvol_map) == 0:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1207
                    self.logger.warning("Failed to add default swap zvol to "
1391
3304042aeed6 7077923 Auto-install fails to create VTOC slices automatically determined to be less than min-install size
Matt Keenan <matt.keenan@oracle.com>
parents: 1370
diff changeset
  1208
                        "root pool, possibly because of insufficient space.")
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1209
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1210
                if not dump_added and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1211
                    not logical.nodump and self._dump_zvol is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1212
                    self.logger.warning("Failed to add default dump zvol to "
1391
3304042aeed6 7077923 Auto-install fails to create VTOC slices automatically determined to be less than min-install size
Matt Keenan <matt.keenan@oracle.com>
parents: 1370
diff changeset
  1213
                        "root pool, possibly because of insufficient space.")
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1214
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1215
    def _get_unique_dataset_name(self, zpool, dataset_name):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1216
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1217
            Ensure this dataset name does not exist in this zpool.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1218
            If it does, then append N to end until unique.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1219
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1220
        unique = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1221
        unique_name = dataset_name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1222
        append_digit = 1
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1223
        while not unique:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1224
            unique = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1225
            for child in zpool.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1226
                if (isinstance(child, Filesystem) or \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1227
                    isinstance(child, Zvol)) and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1228
                    child.name == unique_name:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1229
                    unique_name = dataset_name + str(append_digit)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1230
                    append_digit = append_digit + 1
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1231
                    unique = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1232
                    break
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1233
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1234
        return unique_name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1235
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1236
    def _create_swap_dump_zvol(self, zpool, zvol_name, zvol_use, zvol_size,
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1355
diff changeset
  1237
                                create_failure_ok=False):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1238
        '''Create a swap or dump Zvol on a zpool.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1239
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1240
           Input:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1241
               zpool : zpool object to add zvol to
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1242
               zvol_name : Str zvol name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1243
               zvol_use : Str zvol usage, "swap" or "dump"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1244
               zvol_size : Size Object
1391
3304042aeed6 7077923 Auto-install fails to create VTOC slices automatically determined to be less than min-install size
Matt Keenan <matt.keenan@oracle.com>
parents: 1370
diff changeset
  1245
               create_failure_ok: indicate whether zvol creation failure
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1355
diff changeset
  1246
                                  can be ignored.  Only used for "dump" zvol.
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1247
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1248
        zvol = zpool.add_zvol(zvol_name, int(zvol_size.get(Size.mb_units)),
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1249
            Size.mb_units, use=zvol_use)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1250
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1251
        if zvol_use == "swap":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1252
            swap_key = zpool.name + ":swap"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1253
            self._swap_zvol_map[swap_key] = zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1254
        else:
1370
0e49021cc774 6987821 text installer fails on systems with large memory
Karen Tung <Karen.Tung@oracle.com>
parents: 1355
diff changeset
  1255
            zvol.create_failure_ok = create_failure_ok
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1256
            self._dump_zvol = zvol
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1257
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1258
    def _validate_logical(self, desired):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1259
        '''Process Logical components of desired tree ensuring:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1260
           - mirror, at least two devices
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1261
           - logmirror, at least two devices
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1262
           - raidz1, at least two devices
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1263
           - raidz2, at least three devices
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1264
           - raidz3, at least four devices
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1265
           - Ensure at least one of none|mirror|raidz exists per pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1266
           - Ensure only one BE specified per pool, if none add one.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1267
           - Ensure only one DatasetOptions specified per pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1268
           - Ensure only one PoolOptions specified per pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1269
           - Ensure only one pool is set to root pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1270
           - root_pool, ensure single device or if multiple devices,
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1271
             redundancy is set to mirror.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1272
           - Root pool cannot contain log or logmirror devices
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1273
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1274
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1275
        # Get Logical sections
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1276
        logicals = desired.get_children(class_type=Logical)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1277
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1278
        # Validate correct number of devices per redundancy
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1279
        for logical in logicals:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1280
            self.logger.debug("Validating desired  logical =\n%s\n" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1281
                (str(logical)))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1282
            be = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1283
            found_be = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1284
            found_dataset_options = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1285
            found_pool_options = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1286
            found_root_pool = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1287
            found_swap = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1288
            found_dump = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1289
            self._remaining_zpool_map = \
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1290
                self._compile_remaining_existing_devices_map(logical)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1291
            for zpool in logical.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1292
                if zpool.is_root:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1293
                    if found_root_pool:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1294
                        raise SelectionError("Root pool specified twice")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1295
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1296
                        found_root_pool = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1297
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1298
                        # Ensure Root pool size is large enough to install to
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1299
                        zpool_available_size = \
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1300
                            self._get_zpool_available_size(zpool)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1301
                        if zpool_available_size < \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1302
                            self.controller.minimum_target_size:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1303
                            raise SelectionError("Root pool '%s' has "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1304
                                "available space of '%s', which is "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1305
                                "insufficient space to install to. "
1247
e93173cd968b 7059210 Spelling Error: Minimim space required is '5.00gb'. Should be Minimum
Drew Fisher <drew.fisher@oracle.com>
parents: 1227
diff changeset
  1306
                                "Minimum space required is '%s'."
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1307
                                % (zpool.name, str(zpool_available_size),
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1308
                                str(self.controller.minimum_target_size)))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1309
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1310
                # Perform some validations on zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1311
                # Check if this zpool already exists etc
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1312
                self._validate_zpool_actions(zpool)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1313
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1314
                found_toplevel = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1315
                for child in zpool.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1316
                    if isinstance(child, Vdev):
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1317
                        self._validate_vdev(zpool, child)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1318
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1319
                        # Ensure something other than log/cache/spare is set
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1320
                        if child.redundancy in self.TOPLEVEL_REDUNDANCY and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1321
                            not found_toplevel:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1322
                            found_toplevel = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1323
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1324
                    elif isinstance(child, BE):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1325
                        if not zpool.is_root:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1326
                            raise SelectionError("BE '%s' cannot be part of "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1327
                                "non root pool '%s'." %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1328
                                (child.name, zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1329
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1330
                        if found_be:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1331
                            raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1332
                                "More than one BE specified in zpool '%s'." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1333
                                (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1334
                        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1335
                            found_be = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1336
                            be = child
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1337
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1338
                    elif isinstance(child, DatasetOptions):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1339
                        if found_dataset_options:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1340
                            raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1341
                                "More than one dataset_options specified "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1342
                                "in zpool '%s'." % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1343
                        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1344
                            found_dataset_options = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1345
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1346
                    elif isinstance(child, PoolOptions):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1347
                        if found_pool_options:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1348
                            raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1349
                                "More than one pool_options specified "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1350
                                "zpool '%s'." % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1351
                        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1352
                            found_pool_options = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1353
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1354
                    elif isinstance(child, Zvol):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1355
                        if child.use == "swap":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1356
                            found_swap = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1357
                        elif child.use == "dump":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1358
                            found_dump = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1359
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1360
                # If the pool does not contain any toplevel vdevs throw
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1361
                # exception. For pools marked for deletion not an error.
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1362
                if not found_toplevel and zpool.action != "delete":
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1363
                    raise SelectionError("Must specify at least one toplevel"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1364
                        " child redundancy in pool '%s'." % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1365
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1366
                if zpool.is_root:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1367
                    if not found_be:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1368
                        # Root pool with no BE, so insert one
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1369
                        self.logger.debug("Found root pool '%s' with no BE, "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1370
                            "inserting one." % (zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1371
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1372
                        # Ensure BE name is unique and does not exist already
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1373
                        self._be = BE()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1374
                        if self._be.exists:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1375
                            raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1376
                                "BE '%s' specified in zpool '%s' already "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1377
                                "exists. You must specify a unique "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1378
                                "BE in the manifest." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1379
                                (self._be.name, zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1380
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1381
                        self._be.mountpoint = self.be_mountpoint
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1382
                        zpool.insert_children(self._be)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1383
                        found_be = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1384
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1385
                        # Ensure mountpoint is set
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1386
                        if be.mountpoint is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1387
                            be.mountpoint = self.be_mountpoint
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1388
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1389
            if not logical.noswap and not found_swap:
1391
3304042aeed6 7077923 Auto-install fails to create VTOC slices automatically determined to be less than min-install size
Matt Keenan <matt.keenan@oracle.com>
parents: 1370
diff changeset
  1390
                self.logger.warning("Swap zvol not being created.")
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1391
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1392
            if not logical.nodump and not found_dump:
1391
3304042aeed6 7077923 Auto-install fails to create VTOC slices automatically determined to be less than min-install size
Matt Keenan <matt.keenan@oracle.com>
parents: 1370
diff changeset
  1393
                self.logger.warning("Dump zvol not being created.")
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1394
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1395
            if not found_root_pool:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1396
                raise SelectionError("No root pool specified.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1397
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1398
            if not found_be:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1399
                raise SelectionError("No BE specified.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1400
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1401
    def _validate_vdev(self, zpool, child):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1402
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1403
            Validate Vdev
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1404
            - Ensure correct number of devices for redundancy
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1405
            - Root pool contains correct redundancy type
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1406
            - Preserved pool contains no devices
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1407
        '''
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1408
        vdev_devices = self._get_vdev_devices(zpool.name,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1409
            child.name, self._disk_map)
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1410
        self._validate_vdev_devices(zpool, child, vdev_devices)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1411
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1412
        if not zpool.action in self.PRESERVED:
1266
6b6ba78c5310 7063283 Unable to create UFS swap via AI Install. Tries to associate swap with zpool
Matt Keenan <matt.keenan@oracle.com>
parents: 1252
diff changeset
  1413
            if not vdev_devices:
6b6ba78c5310 7063283 Unable to create UFS swap via AI Install. Tries to associate swap with zpool
Matt Keenan <matt.keenan@oracle.com>
parents: 1252
diff changeset
  1414
                raise SelectionError(
6b6ba78c5310 7063283 Unable to create UFS swap via AI Install. Tries to associate swap with zpool
Matt Keenan <matt.keenan@oracle.com>
parents: 1252
diff changeset
  1415
                    "Vdev '%s' on zpool '%s' must contain at least one "
6b6ba78c5310 7063283 Unable to create UFS swap via AI Install. Tries to associate swap with zpool
Matt Keenan <matt.keenan@oracle.com>
parents: 1252
diff changeset
  1416
                    "device." % (child.name, zpool.name))
6b6ba78c5310 7063283 Unable to create UFS swap via AI Install. Tries to associate swap with zpool
Matt Keenan <matt.keenan@oracle.com>
parents: 1252
diff changeset
  1417
            elif ((not zpool.is_root and
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1418
                child.redundancy == "mirror") or \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1419
                child.redundancy == "logmirror" or
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1420
                child.redundancy == "raidz" or
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1421
                child.redundancy == "raidz1") and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1422
                len(vdev_devices) < 2:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1423
                vdev_key = zpool.name + ":" + child.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1424
                if vdev_key in self._vdev_added_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1425
                    # Data pool where we added default child of
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1426
                    # type mirror, reset to "none"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1427
                    self.logger.debug("Changing data redundancy"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1428
                        " from 'mirror' to 'none'.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1429
                    child.redundancy = "none"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1430
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1431
                    raise SelectionError(\
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1432
                        "Invalid %s redundancy specified in pool"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1433
                        " '%s', child '%s'. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1434
                        "Must contain at least 2 devices." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1435
                        (child.redundancy, zpool.name, child.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1436
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1437
            elif child.redundancy == "raidz2" and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1438
                len(vdev_devices) < 3:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1439
                raise SelectionError(\
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1440
                    "Invalid raidz2 redundancy specified in "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1441
                    "pool '%s', child '%s'. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1442
                    "Must contain at least 3 devices." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1443
                    (zpool.name, child.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1444
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1445
            elif child.redundancy == "raidz3" and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1446
                len(vdev_devices) < 4:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1447
                raise SelectionError(\
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1448
                    "Invalid raidz3 redundancy specified in "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1449
                    "zpool '%s', child '%s'. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1450
                    "Must contain at least 4 devices." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1451
                    (zpool.name, child.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1452
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1453
            elif not vdev_devices:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1454
                raise SelectionError(\
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1455
                    "Invalid '%s' redundancy specified in "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1456
                    "zpool '%s', child '%s'. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1457
                    "Must contain at least 1 device." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1458
                    (child.redundancy, zpool.name, child.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1459
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1460
            elif zpool.is_root and len(vdev_devices) > 1:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1461
                if child.redundancy == "none":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1462
                    # Root pool with more than one device cannot
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1463
                    # have redundancy of "none", reset to "mirror"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1464
                    self.logger.debug("Changing root redundancy"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1465
                        " from 'none' to 'mirror'.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1466
                    child.redundancy = "mirror"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1467
                elif child.redundancy in self.RAIDZ_REDUNDANCY:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1468
                    raise SelectionError("Root pool redundancy"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1469
                        " cannot be raidz*. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1470
                        "zpool '%s', child '%s'" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1471
                        (zpool.name, child.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1472
                elif child.redundancy in self.INVALID_ROOT_VDEV:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1473
                    raise SelectionError("Root pool cannot"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1474
                        " contain '%s' vdevs. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1475
                        "zpool '%s', child '%s'" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1476
                        (child.redundancy, zpool.name, child.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1477
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1478
            elif len(vdev_devices) == 1 and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1479
                child.redundancy == "mirror":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1480
                vdev_key = zpool.name + ":" + child.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1481
                if zpool.is_root:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1482
                    # Root pool with one device cannot
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1483
                    # have redundancy of "mirror", reset to "none"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1484
                    self.logger.debug("Changing root redundancy"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1485
                        " from 'mirror' to 'none'.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1486
                    child.redundancy = "none"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1487
                elif vdev_key in self._vdev_added_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1488
                    # Data pool where we added default child of
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1489
                    # type mirror, reset to "none"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1490
                    self.logger.debug("Changing data redundancy"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1491
                        " from 'mirror' to 'none'.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1492
                    child.redundancy = "none"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1493
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1494
        if zpool.is_root and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1495
            child.redundancy in self.RAIDZ_REDUNDANCY:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1496
            raise SelectionError("Root pool redundancy"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1497
                " cannot be raidz. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1498
                "zpool '%s', child '%s'" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1499
                (zpool.name, child.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1500
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1501
        elif zpool.is_root and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1502
            child.redundancy in self.INVALID_ROOT_VDEV:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1503
            raise SelectionError("Root pool cannot"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1504
                " contain '%s' vdevs. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1505
                "zpool '%s', child '%s'" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1506
                (child.redundancy, zpool.name, child.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1507
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1508
    def _validate_vdev_devices(self, zpool, vdev, vdev_devices):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1509
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1510
            Given a list of devices being used in this zpool/vdev, validate
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1511
            that these devices are not already being used in another zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1512
            that exists and is not being destroyed or recreated by this
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1513
            install.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1514
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1515
            self._remaining_zpool_map contains a list of devices that cannot
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1516
            be used in an install. This method assumes this has already been
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1517
            populated before calling this routine.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1518
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1519
            Also validate that each device being used is physically greater
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1520
            than 64MB, or zpool create will fail.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1521
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1522
        if vdev.redundancy in self.TOPLEVEL_REDUNDANCY:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1523
            size_64mb = Size("64" + Size.mb_units)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1524
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1525
        for device in vdev_devices:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1526
            tmp_slice = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1527
            tmp_part = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1528
            tmp_disk = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1529
            if isinstance(device, Slice):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1530
                tmp_slice = device
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1531
                if isinstance(device.parent, Partition):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1532
                    tmp_disk = device.parent.parent
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1533
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1534
                    tmp_disk = device.parent
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1535
            elif isinstance(device, Partition):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1536
                tmp_part = device
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1537
                tmp_disk = device.parent
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1538
            elif isinstance(device, GPTPartition):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1539
                tmp_slice = device
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1540
                tmp_disk = device.parent
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1541
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1542
                tmp_disk = device
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1543
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1544
            # Construct what device would be in zpool create
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1545
            ctd = ""
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1546
            if tmp_part is not None and tmp_slice is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1547
                ctd = "p" + tmp_part.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1548
            elif tmp_part is None and tmp_slice is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1549
                ctd = "s" + tmp_slice.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1550
            ctd = ":" + tmp_disk.ctd + ctd
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1551
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1552
            matching_devs = [key for key in self._remaining_zpool_map \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1553
                             if key.endswith(ctd)]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1554
            if matching_devs:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1555
                key_parts = matching_devs[0].split(':')
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1556
                raise SelectionError("Device '%s' already in use by zpool "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1557
                                     " '%s'. Cannot be reused in zpool '%s'." %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1558
                                     (key_parts[2], key_parts[0], zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1559
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1560
                # If just using disk, we need to append s0, when the pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1561
                # is created libzfs actually uses device s0 to create the
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1562
                # the pool, zpool status strips this s0 off when displaying
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1563
                # back to the user, but libzfs correctly returns s0.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1564
                # So add s0 to end and check map again
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1565
                if tmp_part is None and tmp_slice is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1566
                    ctd = ctd + "s0"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1567
                    matching_devs = [key for key in self._remaining_zpool_map \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1568
                                                    if key.endswith(ctd)]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1569
                    if matching_devs:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1570
                        key_parts = matching_devs[0].split(':')
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1571
                        raise SelectionError("Device '%s' already in use by "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1572
                            "zpool '%s'. Cannot be reused in zpool '%s'." %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1573
                            (key_parts[2], key_parts[0], zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1574
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1575
            if isinstance(device, Disk):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1576
                if device.disk_prop is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1577
                    dev_size = device.disk_prop.dev_size
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1578
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1579
                    raise SelectionError("Disk device '%s' in vdev '%s' on "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1580
                        "pool '%s' missing size specification." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1581
                        (key_parts[2], vdev.name, key_parts[0]))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1582
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1583
                dev_size = device.size
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1584
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1585
            if vdev.redundancy in self.TOPLEVEL_REDUNDANCY and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1586
                dev_size < size_64mb:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1587
                raise SelectionError("Device '%s' in toplevel vdev '%s' "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1588
                    " on zpool '%s' is less then minimum zpool device "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1589
                    "size of 64MB." % (key_parts[2], vdev.name, key_parts[0]))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1590
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1591
    def _compile_remaining_existing_devices_map(self, logical):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1592
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1593
            Process list of self._discovered_zpool_map, along with
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1594
            all the zpools being defined in desired.logical, and come
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1595
            up with a unique list of devices that will exist on the system
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1596
            and cannot be specified in logical.desired.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1597
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1598
        remaining_map = copy.copy(self._discovered_zpool_map)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1599
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1600
        for zpool in logical.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1601
            zpool_key = zpool.name + ":"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1602
            if zpool.exists:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1603
                # Desired zpool exists, regardless of action simply
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1604
                # remove all current devices relating to this zpool
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1605
                iter_remaining_map = copy.copy(remaining_map)
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1606
                for zpool_map_key in iter_remaining_map:
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1607
                    if zpool_map_key.startswith(zpool_key):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1608
                        del remaining_map[zpool_map_key]
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1609
                del iter_remaining_map
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1610
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1611
        return remaining_map
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1612
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1613
    def _get_existing_zpool_map(self):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1614
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1615
            For all zpools that have been discovered, get dictionary of
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1616
            devices for each zpool and populate private variable
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1617
            self._discovered_zpool_map.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1618
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1619
        zpool_map = dict()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1620
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1621
        # Cycle through existing zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1622
        for zpool in self._discovered_zpools:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1623
            # Get list of physical devices on this existing pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1624
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1625
            # Get dictionary of disk devices for this zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1626
            # Must check zpool.exists, if get_vdev_mapping is called
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1627
            # with a pool that does not exist, zpool_get_config() cores
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1628
            # and self._discovered_zpools could be populated from tests
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1629
            if zpool.exists:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1630
                vdev_map = vdevs._get_vdev_mapping(zpool.name)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1631
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1632
                vdev_map = dict()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1633
            for vdev_key in vdev_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1634
                for device in vdev_map[vdev_key]:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1635
                    # Get device ctd from end of device path
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1636
                    device_ctd = device.split('/')[-1]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1637
1681
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  1638
                    # Create a dummy disk object for _get_candidate_disks()
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1639
                    disk = Disk("foo")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1640
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1641
                    # Retrieve the disk only portion of the ctd
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1642
                    match = re.match(DISK_RE, device_ctd, re.I)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1643
                    if match is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1644
                        disk.ctd = match.group()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1645
1681
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  1646
                        # Attempt to find a matching disk
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1647
                        # this should always be successful
1681
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  1648
                        matched_disk = self._get_candidate_disks(disk)
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  1649
                        if matched_disk.nr_matches == 1:
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1650
                            devkey = zpool.name + ":" + disk.ctd + ":" + \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1651
                                     device_ctd
1681
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  1652
                            zpool_map[devkey] = matched_disk.matches[0]
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1653
                        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1654
                            raise SelectionError("Unable to find discovered "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1655
                                "disk '%s', used in zpool '%s'." %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1656
                                (disk.ctd, zpool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1657
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1658
                        # Zpool device is not a disk, must be a file
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1659
                        disk.ctd = device_ctd
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1660
                        devkey = zpool.name + ":" + device + ":" + \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1661
                                 device_ctd
1536
b87779efc2f9 7088826 target discovery needs augmentation to handle aliases, wwn, and active/passive paths
Drew Fisher <drew.fisher@oracle.com>
parents: 1391
diff changeset
  1662
                        zpool_map[devkey] = disk
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1663
        return zpool_map
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1664
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1665
    def _validate_disks(self, desired):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1666
        '''Process Disk components of desired tree ensuring:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1667
           A device is uniquely identifiable as belonging to a zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1668
           either via in_zpool and/or in_vdev being specified. A parent
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1669
           cannot be identifiable if it contains children, the identifiers
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1670
           must reside on the lowest child.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1671
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1672
           - Disk validation :
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1673
               Whole-Disk, has kids - fail
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1674
               Whole-Disk, no kids, not identifiable - fail
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1675
               Whole-Disk, in root pool and is VTOC - fail
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1676
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1677
               Not Whole-Disk, no kids - fail
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1678
               Not Whole-Disk, has kids, is identifiable - fail as kids should
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1679
                   contain the identifying information not the disk
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1680
               Not whole-disk, has kids, not identifiable - good, process kids
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1681
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1682
               Two disks with same name, fail
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1683
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1684
               Disk has children, for partitions or slices must be VTOC
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1685
               Disk has children, for GPT Partitions must be GPT label
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1686
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1687
           - Partition validation :
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1688
               - To get to validate a partition, disk parent must be not
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1689
                 whole disk, and parent disk is not identifiable
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1690
               - Action other than create and use_existing are ignored.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1691
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1692
               - for each create/use_existing partition :
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1693
                   - identifiable, has kids - fail should not have slices
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1694
                   - identifiable, no kids - good for non root pool
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1695
                   - identifiable, no kids - fail if root pool
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1696
                   - not identifiable, no kids - fail
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1697
                   - not identifiable, has kids - good, process kids(slices)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1698
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1699
               - two partitions with same name on same disk, fail
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1700
               - Only one is_solaris partition exists on a disk
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1701
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1702
           - Slice validation :
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1703
               - To get to validate a slice on sparc, disk parent must be not
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1704
                 whole disk. and disk parent is not identifiable
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1705
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1706
               - Any action other than create is ignored
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1707
               - For each sparc create slices :
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1708
                   - identifiable - good
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1709
                   - identifiable, and is_swap - fail
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1710
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1711
               - For X86 slices, to get this far, parent partition must be
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1712
                 not identifiable and actioned create/use-existing
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1713
               - For each i386 create slice:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1714
                   - identifiable - good
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1715
                   - identifiable, and is_swap - fail
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1716
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1717
               - two slices with same name on same disk, or partition, fail
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1718
               - At least one root pool slice must exist.
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1719
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1720
           - GPT Partition validation :
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1721
               - To get to validate a partition, disk parent must be not
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1722
                 whole disk, and parent disk is not identifiable
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1723
               - Disk label needs to be "GPT" and not "VTOC"
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1724
               - Any action other than create is ignored
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1725
               - Multiple Solaris GPT Partitions is allowed
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1726
               - two GPT Partitions with same name on same disk, fail
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1727
               - At least one root pool GPT Partition must exist.
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1728
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1729
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1730
        # Get Disk sections
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1731
        disks = desired.get_children(class_type=Disk)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1732
        self.logger.debug("Validating DESIRED Disks")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1733
        self.logger.debug("Disks(Desired) =\n%s\n" %
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1734
            (self._pretty_print_disk(disks)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1735
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1736
        tmp_disk_map = list()       # List of disk ctd's
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1737
        tmp_partition_map = list()  # list of disk:partition
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1738
        tmp_slice_map = list()  # list of disk:slice or disk:partition:slice
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1739
        tmp_gptpartition_map = list()  # list of disk:gpt_partition
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1740
        root_partyslice_found = False
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1741
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1742
        for disk in disks:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1743
            if not self.gpt_capable:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1744
                # OBP can't boot from GPT, make sure root pool is on VTOC
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1745
                if self._check_disk_in_root_pool(disk) and \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1746
                   disk.label != "VTOC":
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1747
                    raise SelectionError(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1748
                        "Root pool Disk '%s' must contain VTOC label "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1749
                        "not '%s'." % (self._pretty_print_disk(disk),
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1750
                        disk.label))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1751
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1752
            # XXX PSARC 2008/769 (Search: "pcfs")
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1753
            if self._firmware == 'uefi64' and \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1754
               disk.geometry.blocksize != 512 and \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1755
               self._check_disk_in_root_pool(disk):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1756
                raise SelectionError(
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1757
                    "Root pool disk needs pcfs(7fs) for UEFI System "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1758
                    "partition, but blocksize %d is not 512" % \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1759
                    (disk.geometry.blocksize))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1760
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1761
            # VTOC labeled disks can only have Slice children on SPARC and
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1762
            # Partition children on x86
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1763
            if disk.has_children:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1764
                if disk.label == "VTOC":
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1765
                    if disk.kernel_arch == "sparc":
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1766
                        if not isinstance(disk.children[0], Slice):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1767
                            raise SelectionError(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1768
                                "VTOC Disk '%s' must contain slice(s) and not "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1769
                                "%s" % (self._pretty_print_disk(disk),
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1770
                                        type(disk.children[0])))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1771
                    else:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1772
                        if not isinstance(disk.children[0], Partition):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1773
                            raise SelectionError(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1774
                                "VTOC Disk '%s' must contain partition(s) "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1775
                                "and not %s" % (self._pretty_print_disk(disk),
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1776
                                                type(disk.children[0])))
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1777
                else:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1778
                    if not isinstance(disk.children[0], GPTPartition):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1779
                        raise SelectionError(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1780
                            "GPT Disk '%s' must contain gpt_partition(s) and "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1781
                            "not %s" % (self._pretty_print_disk(disk),
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1782
                                        type(disk.children[0])))
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1783
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1784
            # Validate in_zpool specified and in_vdev not, but > 1 vdevs
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1785
            if disk.ctd in tmp_disk_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1786
                raise SelectionError(
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1787
                    "Disk '%s' specified more than once." % \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1788
                    (self._pretty_print_disk(disk)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1789
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1790
            # Add disk to temporary list map
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1791
            tmp_disk_map.append(disk.ctd)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1792
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1793
            if disk.whole_disk:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1794
                # Whole disk cannot be in root pool
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1795
                if self._check_in_root_pool(disk):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1796
                    if disk.label == "VTOC":
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1797
                        raise SelectionError("Disk '%s', Using whole disk "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1798
                            "and located in root pool not valid." % \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1799
                            (self._pretty_print_disk(disk)))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1800
                    else:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1801
                        # Whole disk GPT in root pool has partyslice
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1802
                        root_partyslice_found = True
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1803
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1804
                # Whole disk cannot have children specified.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1805
                if disk.has_children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1806
                    raise SelectionError("Disk '%s', Using whole disk "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1807
                        "and has partition/slice specified is not valid." % \
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1808
                        (self._pretty_print_disk(disk)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1809
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1810
                # Disk is not uniquely identifiable
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1811
                if not self._device_is_identifiable(disk):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1812
                    raise SelectionError("Disk '%s', Using whole disk "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1813
                        "and not logically uniquely identifiable. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1814
                        "in_zpool '%s', in_vdev '%s'" % \
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1815
                        (self._pretty_print_disk(disk), disk.in_zpool,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1816
                        disk.in_vdev))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1817
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1818
                # Not Whole-Disk, no kids - fail
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1819
                if len(disk.children) == 0:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1820
                    raise SelectionError("Disk '%s' Not using whole disk "
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1821
                        "and no partition/slice specified which is invalid."
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1822
                        % (self._pretty_print_disk(disk)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1823
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1824
                # Not Whole-Disk, has kids, is identifiable - fail
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1825
                if disk.has_children and \
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1826
                    self._device_is_identifiable(disk):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1827
                    raise SelectionError("Disk '%s', Not using whole disk, "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1828
                        "has children and is logically uniquely identifiable"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1829
                        " which is invalid.  in_zpool '%s', in_vdev '%s'" % \
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1830
                        (self._pretty_print_disk(disk), disk.in_zpool,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1831
                        disk.in_vdev))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1832
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1833
                # Not whole-disk, has kids, not identifiable - good
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1834
                if disk.has_children and \
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1835
                    not self._device_is_identifiable(disk):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1836
                    # Process kids, identify should be set there
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1837
                    solaris_partition_found = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1838
                    for disk_kid in disk.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1839
                        # Partition, check only exists once
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1840
                        if isinstance(disk_kid, Partition):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1841
                            partkey = disk.ctd + ":" + disk_kid.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1842
                            if partkey in tmp_partition_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1843
                                raise SelectionError("Partition '%s' "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1844
                                    "specified twice on disk '%s'." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1845
                                    (disk_kid.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1846
                                    self._pretty_print_disk(disk)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1847
                            tmp_partition_map.append(partkey)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1848
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1849
                            # Ensure only one solaris partition resides on disk
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1850
                            if disk_kid.is_solaris and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1851
                               disk_kid.action != "delete":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1852
                                if solaris_partition_found:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1853
                                    raise SelectionError("Disk '%s' cannot "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1854
                                        "contain multiple Solaris partitions."
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1855
                                        % (self._pretty_print_disk(disk)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1856
                                solaris_partition_found = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1857
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1858
                            # Slice check only exists once on this disk/part.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1859
                            for slc in disk_kid.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1860
                                slicekey = disk.ctd + ":" + disk_kid.name + \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1861
                                    ":" + slc.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1862
                                if slicekey in tmp_slice_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1863
                                    raise SelectionError("Slice '%s' "
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1864
                                        "specified twice within partition '%s'"
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1865
                                        " on disk '%s'." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1866
                                        (slc.name, disk_kid.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1867
                                        self._pretty_print_disk(disk)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1868
                                tmp_slice_map.append(slicekey)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1869
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1870
                                # Is identifiable, make sure not set for swap
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1871
                                if self._device_is_identifiable(slc) and \
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1872
                                    slc.is_swap:
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1873
                                    raise SelectionError("Slice '%s' in disk "
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1874
                                        "'%s' cannot be assigned to swap and "
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1875
                                        "be part of a zpool. in_zpool '%s', "
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1876
                                        "in_vdev '%s'" % (slc.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1877
                                        self._pretty_print_disk(disk),
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1878
                                        slc.in_zpool, slc.in_vdev))
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1879
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1880
                        # Slice check only exists once on this disk
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1881
                        elif isinstance(disk_kid, Slice):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1882
                            slicekey = disk.ctd + ":" + disk_kid.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1883
                            if slicekey in tmp_slice_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1884
                                raise SelectionError("Slice '%s' "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1885
                                    "specified twice on disk '%s'." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1886
                                    (disk_kid.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1887
                                    self._pretty_print_disk(disk)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1888
                            tmp_slice_map.append(slicekey)
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1889
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1890
                            # Is identifiable, make sure not set for swap
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1891
                            if self._device_is_identifiable(disk_kid) and \
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1892
                                disk_kid.is_swap:
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1893
                                raise SelectionError("Slice '%s' in disk "
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1894
                                    "'%s' cannot be assigned to swap and "
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1895
                                    "be part of a zpool. in_zpool '%s', "
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1896
                                    "in_vdev '%s'" % (disk_kid.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1897
                                    self._pretty_print_disk(disk),
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1898
                                    disk_kid.in_zpool, disk_kid.in_vdev))
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  1899
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1900
                        # GPTPartition checks
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1901
                        elif isinstance(disk_kid, GPTPartition):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1902
                            gptkey = disk.ctd + ":" + disk_kid.name
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1903
                            if gptkey in tmp_gptpartition_map:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1904
                                raise SelectionError("GPT Partition '%s' "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1905
                                    "specified twice on disk '%s'." % \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1906
                                    (disk_kid.name,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1907
                                    self._pretty_print_disk(disk)))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1908
                            tmp_gptpartition_map.append(gptkey)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1909
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1910
                        # Not partition/slice throw error
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1911
                        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1912
                            raise SelectionError("Invalid child element on "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1913
                                "disk '%s' : '%s'." %
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1914
                                (self._pretty_print_disk(disk), disk_kid))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1915
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1916
                        # Partition, create or use_existing action
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1917
                        if isinstance(disk_kid, Partition) and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1918
                           disk_kid.action in \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1919
                           ["create", "use_existing_solaris2"]:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1920
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1921
                            # identifiable, has kids
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1922
                            if self._device_is_identifiable(disk_kid) and \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1923
                                disk_kid.has_children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1924
                                raise SelectionError("Partition '%s' on disk "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1925
                                    "'%s' is logically uniquely "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1926
                                    "identifiable and has slice children "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1927
                                    "which is invalid. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1928
                                    "in_zpool '%s', in_vdev '%s'" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1929
                                    (disk_kid.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1930
                                    self._pretty_print_disk(disk),
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1931
                                    disk_kid.in_zpool, disk_kid.in_vdev))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1932
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1933
                            # identifiable, no kids, in root pool
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1934
                            if self._device_is_identifiable(disk_kid) and \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1935
                                len(disk_kid.children) == 0 and \
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1936
                                 self._check_in_root_pool(disk_kid):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1937
                                raise SelectionError("Partition '%s' on disk "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1938
                                    "'%s' is logically uniquely "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1939
                                    "identifiable with no slice children "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1940
                                    "but is on root pool which is invalid. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1941
                                    "in_zpool '%s', in_vdev '%s'" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1942
                                    (disk_kid.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1943
                                    self._pretty_print_disk(disk),
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1944
                                    disk_kid.in_zpool, disk_kid.in_vdev))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1945
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1946
                            # not identifiable, no kids - fail
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1947
                            if not self._device_is_identifiable(disk_kid) \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1948
                               and len(disk_kid.children) == 0 \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1949
                               and disk_kid.is_solaris:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1950
                                raise SelectionError("Partition '%s' on disk "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1951
                                    "'%s' is not logically uniquely "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1952
                                    "identifiable and has no slice children "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1953
                                    "whish is invalid. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1954
                                    "in_zpool '%s', in_vdev '%s'" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1955
                                    (disk_kid.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1956
                                    self._pretty_print_disk(disk),
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1957
                                    disk_kid.in_zpool, disk_kid.in_vdev))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1958
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1959
                            # has kids, check if root pool slice is here
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1960
                            # Creation of VTOC slices not in a pool is allowed.
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1961
                            if not self._device_is_identifiable(disk_kid) \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1962
                               and disk_kid.has_children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1963
                                for slc in disk_kid.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1964
                                    if isinstance(slc, Slice) and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1965
                                        slc.action == "create":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1966
                                        # X86 Slice not identifiable
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1967
                                        if self._device_is_identifiable(slc) \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1968
                                            and self._check_in_root_pool(slc):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1969
                                            root_partyslice_found = True
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1970
                                    elif not isinstance(slc, Slice):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1971
                                        raise SelectionError("Invalid child "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1972
                                          "element on partition '%s' : "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1973
                                          "'%s'." % (disk_kid.name, str(slc)))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1974
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1975
                        # Slice, create action, check if in root pool.
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1976
                        # Creation of VTOC slices not in a pool is allowed.
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1977
                        elif isinstance(disk_kid, Slice) and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  1978
                            disk_kid.action == "create":
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1979
                            # Sparc Slice identifiable and in root pool
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1980
                            if self._device_is_identifiable(disk_kid) and \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1981
                               self._check_in_root_pool(disk_kid):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1982
                                root_partyslice_found = True
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1983
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1984
                        # GPTPartition, create action, check if in root pool.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1985
                        # The DTD will prevent the creation of both a Slice and
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1986
                        # GPTPartition child for Disk objects.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1987
                        elif isinstance(disk_kid, GPTPartition) and \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1988
                            disk_kid.action == "create":
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1989
                            # GPTPartition identifiable and in root pool
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1990
                            if self._device_is_identifiable(disk_kid) and \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1991
                               self._check_in_root_pool(disk_kid):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1992
                                root_partyslice_found = True
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1993
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  1994
        # At least one root slice must be found over all disks
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1995
        if not root_partyslice_found:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1996
            raise SelectionError("Could not find root pool slice or GPT "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1997
                "Partition on any disk.  Valid Solaris installations must "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1998
                "contain at least one root pool slice/GPT Partition.")
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  1999
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2000
    def _device_is_identifiable(self, device):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2001
        '''A device can be uniquely identified by using one or both of
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2002
           it's in_zpool and in_vdev attributes.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2003
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2004
           Input :
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2005
               device - A disk, partition or slice device Object
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2006
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2007
           Output :
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2008
               None : if not uniquely identifiable in logical section
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2009
               zpool/vdev tuple : Unique logical location
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2010
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2011
        unique_zpool = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2012
        unique_vdev = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2013
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2014
        # Both in_zpool and in_vdev are specified
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2015
        if device.in_zpool is not None and device.in_vdev is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2016
            vdev_key = device.in_zpool + ":" + device.in_vdev
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2017
            if vdev_key not in self._vdev_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2018
                self.logger.debug("Device '%s' identification failed : "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2019
                    "Combination does not exist. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2020
                    "in_zpool '%s', in_vdev '%s'." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2021
                    (device.name, device.in_zpool, device.in_vdev))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2022
                return None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2023
            unique_zpool = self._zpool_map[device.in_zpool]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2024
            unique_vdev = self._vdev_map[vdev_key]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2025
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2026
        # in_zpool specified, in_vdev not specified
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2027
        elif device.in_zpool is not None and device.in_vdev is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2028
            if device.in_zpool not in self._zpool_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2029
                self.logger.debug("Device '%s' identification failed. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2030
                    "Pool does not exist. in_zpool '%s', in_vdev '%s'." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2031
                    (device.name, device.in_zpool, device.in_vdev))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2032
                return None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2033
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2034
            unique_zpool = self._zpool_map[device.in_zpool]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2035
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2036
            pool_vdevs = self._get_vdevs_in_zpool(device.in_zpool)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2037
            if len(pool_vdevs) > 1:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2038
                self.logger.debug("Device '%s' identification failed. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2039
                    "More than one vdev in zpool. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2040
                    "in_zpool '%s', in_vdev '%s'." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2041
                    (device.name, device.in_zpool, device.in_vdev))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2042
                return None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2043
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2044
            elif len(pool_vdevs) == 1:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2045
                # Only one vdev in this zpool so therefore device is
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2046
                # uniquely identifiable, set in_vdev on this device
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2047
                # for completeness.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2048
                device.in_vdev = pool_vdevs[0].name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2049
                unique_vdev = pool_vdevs[0]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2050
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2051
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2052
                # Pool has no vdevs, this should not be the case at
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2053
                # this juncture, throw exception.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2054
                raise SelectionError("Zpool '%s' does not contain any "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2055
                    "Vdev's." % (device.in_zpool))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2056
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2057
        # in_zpool not specified, in_vdev specified
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2058
        elif device.in_zpool is None and device.in_vdev is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2059
            # The only way a device can be uniquely identified in this
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2060
            # Scenario is if the vdev name specified exists uniquely
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2061
            # when compared across all pools
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2062
            for vdev_key in self._vdev_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2063
                if self._vdev_map[vdev_key].name == device.in_vdev:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2064
                    if not unique_vdev:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2065
                        zpool_name = vdev_key.split(":")[0]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2066
                        unique_zpool = self._zpool_map[zpool_name]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2067
                        unique_vdev = self._vdev_map[vdev_key]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2068
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2069
                        # 2nd Vdev with this name, so not unique
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2070
                        self.logger.debug(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2071
                            "Device '%s' identification failed. Vdev not "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2072
                            "unique. in_zpool '%s', in_vdev '%s'." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2073
                            (device.name, device.in_zpool, device.in_vdev))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2074
                        return None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2075
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2076
            # Vdev not found at all
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2077
            if not unique_vdev:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2078
                self.logger.debug("Device '%s' identification failed. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2079
                    "Vdev not found. in_zpool '%s', in_vdev '%s'." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2080
                    (device.name, device.in_zpool, device.in_vdev))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2081
                return None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2082
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2083
                # We've found one unique vdev, set the device in_zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2084
                # for completeness.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2085
                device.in_zpool = unique_zpool.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2086
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2087
        # Neither are set so not identifiable
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2088
        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2089
            return None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2090
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2091
        return (unique_zpool, unique_vdev)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2092
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2093
    def _get_vdevs_in_zpool(self, zpoolname):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2094
        '''Given a zpool name, retrieve the list of vdevs in this
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2095
           pool from the vdev_map.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2096
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2097
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2098
        pool_vdevs = list()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2099
        start_vdev_key = zpoolname + ":"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2100
        for vdev_key in self._vdev_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2101
            if vdev_key.startswith(start_vdev_key):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2102
                pool_vdevs.append(self._vdev_map[vdev_key])
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2103
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2104
        return pool_vdevs
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2105
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2106
    @staticmethod
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2107
    def __get_zpool_redundancies(zpool):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2108
        '''Traverse all vdev children in a zpool returning a unique list
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2109
           of redundancy types defined in this zpool.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2110
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2111
        vdev_redundancies = dict()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2112
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2113
        for vdev in zpool.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2114
            if isinstance(vdev, Vdev):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2115
                vdev_redundancies[vdev.redundancy] = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2116
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2117
        return vdev_redundancies.keys()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2118
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2119
    def _get_vdev_devices(self, zpool_name, vdev_name, device_map):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2120
        '''Get list of devices with this vdev name.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2121
           If not set then recursively check for in_vdev setting on children.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2122
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2123
           Cater for device_map being either a list or a dictionary.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2124
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2125
           If in_vdev set on both parent and children, throw exception.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2126
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2127
           Device can be identified as part of a vdev either via in_vdev or
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2128
           in_zpool or both. As long as it's uniquely identifiable.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2129
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2130
           Remember a vdev name is only unique within's it's zpool, different
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2131
           zpool's can contain vdevs with the same name.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2132
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2133
        vdev_devices = list()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2134
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2135
        if isinstance(device_map, dict):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2136
            tmp_device_map = device_map.values()
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2137
        elif is_iterable(device_map):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2138
            tmp_device_map = device_map
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2139
        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2140
            # Return now, as nothing to traverse
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2141
            return vdev_devices
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2142
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2143
        for device in tmp_device_map:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2144
            identity_tuple = self._device_is_identifiable(device)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2145
            if identity_tuple:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2146
                if (isinstance(device, Disk) or
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2147
                    isinstance(device, Partition)) and device.has_children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2148
                    # If disk or partition and has children, and is
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2149
                    # identifiable this is an error, as one/all of the
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2150
                    # children should contain identifying information
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2151
                    device_str = self._get_device_type_string(device)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2152
                    raise SelectionError("%s '%s' is uniquely identifiable "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2153
                        "and it has children. Invalid, as children should "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2154
                        "contain identifying information. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2155
                        "in_zpool '%s', in_vdev '%s'." % (device_str,
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2156
                        device.name, device.in_zpool, device.in_vdev))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2157
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2158
                # Append this device if the found device matches both
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2159
                # zpool and vdev names
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2160
                if identity_tuple[0].name == zpool_name and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2161
                    identity_tuple[1].name == vdev_name:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2162
                    vdev_devices.append(device)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2163
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2164
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2165
                if device.in_zpool is not None or device.in_vdev is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2166
                    # Throw exception, as cannot identify uniquely yet
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2167
                    # some logical identification information present
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2168
                    device_str = self._get_device_type_string(device)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2169
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2170
                    if isinstance(device, Slice):
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2171
                        # Only raise exception if not a swap slice and
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2172
                        # slice is being not being deleted.
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2173
                        if device.action != "delete" and not device.is_swap:
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2174
                            raise SelectionError("Logical information present "
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2175
                                "on %s '%s', but is not enough to uniquely "
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2176
                                "identify it. in_zpool '%s', in_vdev '%s'." %
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2177
                                (device_str, device.name, device.in_zpool,
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2178
                                 device.in_vdev))
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2179
                    else:
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2180
                        raise SelectionError("Logical information present on "
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2181
                            "%s '%s', but is not enough to uniquely identify "
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2182
                            "it. in_zpool '%s', in_vdev '%s'." % (device_str,
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2183
                            device.name, device.in_zpool, device.in_vdev))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2184
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2185
                if (isinstance(device, Disk) or
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2186
                    isinstance(device, Partition)) and device.has_children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2187
                    # Device has children which should identify location
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2188
                    tmp_devices = self._get_vdev_devices(zpool_name,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2189
                        vdev_name, device.children)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2190
                    for dev in tmp_devices:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2191
                        vdev_devices.append(dev)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2192
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2193
        return vdev_devices
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2194
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2195
    @staticmethod
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2196
    def _get_device_type_string(device):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2197
        '''Get a descriptive string for the device'''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2198
        if isinstance(device, Disk):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2199
            device_str = "Disk"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2200
        elif isinstance(device, Partition):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2201
            device_str = "Partition"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2202
        elif isinstance(device, Slice):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2203
            device_str = "Slice"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2204
        return device_str
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2205
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2206
    def _check_disk_in_root_pool(self, disk):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2207
        '''Tests if a specified disk is in the root pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2208
           if the disk does not have in_zpool, in_vdev specified
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2209
           then start processing children. If no chilcren throw
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2210
           error.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2211
           Check all children, and if any one of them are in the root
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2212
           pool return true, otherwise return false.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2213
        '''
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2214
        if self._check_in_root_pool(disk):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2215
            return True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2216
        elif disk.has_children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2217
            for disk_kid in disk.children:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2218
                if self._check_in_root_pool(disk_kid):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2219
                    return True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2220
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2221
                if isinstance(disk_kid, Partition) and disk_kid.children > 0:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2222
                    for slc in disk_kid.children:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2223
                        if self._check_in_root_pool(slc):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2224
                            return True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2225
        return False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2226
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2227
    def _check_in_root_pool(self, device):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2228
        '''Tests if a device (disk/partition/slice) is in the root pool.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2229
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2230
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2231
        if device.in_zpool == self._root_pool.name:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2232
            return True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2233
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2234
        rpool_vdev_id = "%s:%s" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2235
            (self._root_pool.name, device.in_vdev)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2236
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2237
        if device.in_zpool is None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2238
           rpool_vdev_id in self._vdev_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2239
            # Assumption is we've validated the uniqueness of vdev
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2240
            # specification in the object earlier in _check_valid_zpool_vdev()
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2241
            return True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2242
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2243
        return False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2244
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2245
    def _handle_gpt_partition(self, gpe, new_disk, discovered_disk):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2246
        '''Handle the GPT partition as specified in the manifest.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2247
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2248
           Will return a new GPTPartition object to be inserted in the DESIRED
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2249
           tree such that Target Instantiation is able to perform.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2250
        '''
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2251
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2252
        try:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2253
            position = int(gpe.name)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2254
        except ValueError:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2255
            raise SelectionError('Invalid Partition name: "%s"' % (gpe.name))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2256
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2257
        # Solaris only understands 0-6 and 8. gpt7 is the new s2.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2258
        # libefi only writes down 0-8 inclusive.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2259
        # we would like 0 to be EFI_SYSTEM or EFI_BIOS_BOOT and 8 to be
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2260
        # EFI_RESERVED. But neither are required.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2261
        if position not in range(0, EFI_NUMUSERPAR):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2262
            if not (EFI_PREFERRED_RSVPAR == position and \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2263
                    gpe.guid == EFI_RESERVED):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2264
                raise SelectionError(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2265
                    'Invalid Partition name: "%s"' % (gpe.name))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2266
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2267
        if position == EFI_NUMUSERPAR:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2268
            raise SelectionError(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2269
                'Reserved Partition name (indicates whole disk): 7')
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2270
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2271
        # valid to be on x86 or sparc
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2272
        existing = discovered_disk.get_first_child(gpe.name,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2273
            class_type=GPTPartition)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2274
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2275
        if gpe.action == "delete":
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2276
            if existing is None:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2277
                self.logger.warn(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2278
                    "Attempt to delete non-existant GPT partition "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2279
                    "%s on disk %s ignored" % (gpe.name,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2280
                    self._pretty_print_disk(discovered_disk)))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2281
                return  # nothing more to do
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2282
            else:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2283
                new_gpe = copy.copy(existing)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2284
                new_gpe.action = "delete"
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2285
                new_gpe.in_zpool = None
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2286
                new_gpe.in_vdev = None
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2287
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2288
        elif gpe.action == "preserve":
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2289
            if existing is None:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2290
                raise SelectionError(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2291
                    "Cannont preserve GPT partition %s that doesn't exist"
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2292
                    "on disk %s" % (gpe.name,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2293
                    self._pretty_print_disk(discovered_disk)))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2294
            else:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2295
                new_gpe = copy.copy(existing)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2296
                new_gpe.action = "preserve"
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2297
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2298
        else:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2299
            if gpe.action != "create":
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2300
                raise SelectionError(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2301
                    "Unexpected action '%s' on GPT partition %s" %
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2302
                    (gpe.action, gpe.name))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2303
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2304
            if existing is not None and existing.action != "delete":
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2305
                self.logger.warn(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2306
                    "Creating GPT partition %s on disk %s will destroy "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2307
                    "existing data." % (gpe.name,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2308
                    self._pretty_print_disk(discovered_disk)))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2309
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2310
            # create it in any case
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2311
            new_gpe = copy.copy(gpe)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2312
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2313
            # in_zpool and in_vdev attributes determine if its in
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2314
            # root pool. No need to check or set bootid
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2315
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2316
            gaps = new_disk.get_gaps()
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2317
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2318
            # unspecified start sector: go find gap that we can use
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2319
            if new_gpe.size.sectors != 0 and \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2320
               new_gpe.start_sector in (0, None):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2321
                # choose first gap with size >= what we are seeking
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2322
                try:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2323
                    gap = filter(lambda hole: hole.size >= new_gpe.size,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2324
                                 gaps)[0]
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2325
                    new_gpe.start_sector = gap.start_sector
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2326
                except IndexError:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2327
                    # none found, we will just accept largest
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2328
                    raise SelectionError("Failed to find gap on disk"
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2329
                        " of sufficient size to put partition"
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2330
                        " %s in to" % (new_gpe.name))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2331
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2332
            # unspecified size: use largest gap.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2333
            if new_gpe.size.sectors == 0:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2334
                try:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2335
                    gap = max(gaps, key=lambda hole: hole.size)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2336
                except ValueError:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2337
                    # there are no gaps
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2338
                    raise SelectionError("Failed to find gap on disk to put "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2339
                        "partition %s in to" % (new_gpe.name))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2340
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2341
                new_gpe.start_sector = gap.start_sector
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2342
                new_gpe.size = gap.size
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2343
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2344
            # Only process solaris partitions
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2345
            if gpe.is_solaris:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2346
                # GPTPartitions never have slices
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2347
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2348
                # If it's a root pool, or we have a partition that's not in
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2349
                # a pool we assume it should be in the root pool.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2350
                if self._check_in_root_pool(gpe) \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2351
                   or (gpe.in_zpool is None and \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2352
                       gpe.in_vdev is None and \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2353
                       self._root_pool is not None):
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2354
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2355
                    # Assume it should be in the root pool since
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2356
                    # nothing specific provided in the manifest
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2357
                    new_gpe.in_zpool = self._root_pool.name
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2358
                    if self._root_vdev is not None:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2359
                        new_gpe.in_vdev = self._root_vdev.name
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2360
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2361
        # Generic processing for all cases
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2362
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2363
        # Insert partition now, since shadowlist validation will require
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2364
        # that the disk be known for partitions or children.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2365
        new_disk.insert_children(new_gpe)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2366
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2367
        errors = errsvc.get_all_errors()
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2368
        # Found errors and they cannot be ignored
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2369
        if errors:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2370
            # Print desired contents to log
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2371
            existing_desired = \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2372
                self.doc.persistent.get_first_child(Target.DESIRED)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2373
            if existing_desired:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2374
                self.logger.debug("Desired =\n%s\n" % \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2375
                    (str(existing_desired)))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2376
            self.logger.debug("Partition =\n%s\n" % (str(new_gpe)))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2377
            errstr = \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2378
                "Following errors occurred processing partition :\n%s" % \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2379
                (str(errors[0]))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2380
            raise SelectionError(errstr)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2381
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2382
        return new_gpe
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2383
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2384
    def _handle_partition(self, partition, new_disk, discovered_disk):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2385
        '''Handle the partition as specified in the manifest.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2386
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2387
           Will return a new Partition object to be inserted in the DESIRED
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2388
           tree such that Target Instantiation is able to perform.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2389
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2390
        # Ensure this is an i386 machine if partitions are specified.
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2391
        if self.cpu != "i386":
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2392
            raise SelectionError(
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2393
                "Cannot specify partitions on %s machine architecture." % \
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2394
                (self.cpu))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2395
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2396
        existing_partition = discovered_disk.get_first_child(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2397
            partition.name, class_type=Partition)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2398
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2399
        if partition.action in ["preserve", "delete", "use_existing_solaris2"]:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2400
            if existing_partition is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2401
                # If it's delete action, just do nothing since it's not really
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2402
                # an issue to delete something that's not there.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2403
                if partition.action == "delete":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2404
                    self.logger.warn(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2405
                        "Attempt to delete non-existant partition"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2406
                        " %s on disk %s ignored" % (partition.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2407
                        self._pretty_print_disk(discovered_disk)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2408
                    # Return now since there's nothing to do.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2409
                    return
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2410
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2411
                    raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2412
                        "Cannot %s partition %s that doesn't exist on disk %s"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2413
                        % (partition.action, partition.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2414
                           self._pretty_print_disk(discovered_disk)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2415
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2416
                # Do nothing, just copy over.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2417
                new_partition = copy.copy(existing_partition)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2418
                new_partition.action = partition.action
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2419
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2420
                # Initialize logical information on deleted partitions
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2421
                if new_partition.action == "delete":
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2422
                    new_partition.in_zpool = None
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2423
                    new_partition.in_vdev = None
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2424
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2425
        elif partition.action == "create":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2426
            if existing_partition is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2427
                self.logger.warn(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2428
                    "Creating partition %s on disk %s will "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2429
                    "destroy existing data." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2430
                    (partition.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2431
                     self._pretty_print_disk(discovered_disk)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2432
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2433
            new_partition = copy.copy(partition)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2434
        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2435
            raise SelectionError("Unexpected action '%s' on partition %s"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2436
                % (partition.name, partition.action))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2437
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2438
        if partition.action in ["use_existing_solaris2", "create"]:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2439
            # Mark partition as ACTIVE, if it's Solaris
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2440
            if new_partition.is_solaris:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2441
                # Need to set attribute, since Partition.change_bootid
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2442
                # manipulates the parent object, which there isn't yet...
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2443
                # Only applies to primary partitions
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2444
                if partition.is_primary:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2445
                    new_partition.bootid = Partition.ACTIVE
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2446
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2447
            if new_partition.size.sectors == 0 or \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2448
               new_partition.start_sector is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2449
                # According to DTD, if size is not specified, should use
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2450
                # parents size information.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2451
                # If start_sector is None, try to allocate size into a gap.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2452
                if partition.action == "create":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2453
                    if partition.is_logical:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2454
                        gaps = new_disk.get_logical_partition_gaps()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2455
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2456
                        gaps = new_disk.get_gaps()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2457
                    largest_gap = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2458
                    for gap in gaps:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2459
                        if new_partition.start_sector is None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2460
                           new_partition.size.sectors != 0 and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2461
                           gap.size >= new_partition.size:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2462
                            # Specified a size with only start_sector missing.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2463
                            new_partition.start_sector = gap.start_sector
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2464
                            break
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2465
                        if largest_gap is None or \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2466
                           gap.size.sectors > largest_gap.size.sectors:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2467
                            largest_gap = gap
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2468
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2469
                        # Will be skipped if searching for a gap to insert a
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2470
                        # partition of a given size succeeds.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2471
                        if largest_gap is None or \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2472
                           largest_gap.size < new_partition.size:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2473
                            raise SelectionError("Failed to find gap on disk"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2474
                                " of sufficient size to put partition"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2475
                                " %s in to" % (new_partition.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2476
                        new_partition.start_sector = largest_gap.start_sector
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2477
                        new_partition.size = largest_gap.size
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2478
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2479
                    raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2480
                        "Cannot find size of existing partition '%s' on "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2481
                        "discovered_disk '%s'"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2482
                        % (new_partition.name, discovered_disk.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2483
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2484
            # Need to do more than just copy
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2485
            if discovered_disk.disk_prop is not None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2486
               new_partition.size > discovered_disk.disk_prop.dev_size:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2487
                raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2488
                    "Partition %s has a size larger than the disk %s" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2489
                    (new_partition.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2490
                    self._pretty_print_disk(discovered_disk)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2491
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2492
            # Insert partition now, since shadowlist validation will require
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2493
            # that the disk be known for partitions or children.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2494
            new_disk.insert_children(new_partition)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2495
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2496
            # Check error service for errors as if we insert slices errors
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2497
            # Generated from this insert will get cleared both having the
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2498
            # the same mod_id.
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2499
            errors = errsvc.get_all_errors()
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2500
            # Found errors and they cannot be ignored
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2501
            if errors:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2502
                # Print desired contents to log
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2503
                existing_desired = \
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2504
                    self.doc.persistent.get_first_child(Target.DESIRED)
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2505
                if existing_desired:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2506
                    self.logger.debug("Desired =\n%s\n" % \
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2507
                        (str(existing_desired)))
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2508
                self.logger.debug("Partition =\n%s\n" % (str(new_partition)))
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2509
                errstr = \
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2510
                    "Following errors occurred processing partition :\n%s" % \
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2511
                    (str(errors[0]))
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2512
                raise SelectionError(errstr)
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2513
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2514
            # Only process solaris partitions
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2515
            if partition.is_solaris:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2516
                if not partition.has_children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2517
                    # If it's a root pool, or we have a partition that's not in
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2518
                    # a pool we assume it should be in the root pool.
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2519
                    if self._check_in_root_pool(partition) \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2520
                       or (partition.in_zpool is None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2521
                           partition.in_vdev is None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2522
                           self._root_pool is not None):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2523
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2524
                        # Need to add a slice since a root pool cannot exist on
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2525
                        # partition vdevs, must be slice vdevs
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2526
                        start = 1  # Will be rounded up to cylinder by TI
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2527
                        slice_size = new_partition.size.sectors
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2528
                        new_slice = new_partition.add_slice("0", start,
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2529
                            slice_size, Size.sector_units, force=True)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2530
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2531
                        if partition.in_zpool is None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2532
                           partition.in_vdev is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2533
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2534
                            # Assume it should be in the root pool since
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2535
                            # nothing specific provided in the manifest
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2536
                            new_slice.in_zpool = self._root_pool.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2537
                            if self._root_vdev is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2538
                                new_slice.in_vdev = self._root_vdev.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2539
                        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2540
                            # Copy in_zpool/vdev to slice, and remove from
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2541
                            # partition.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2542
                            new_slice.in_zpool = new_partition.in_zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2543
                            new_slice.in_vdev = new_partition.in_vdev
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2544
                            new_partition.in_zpool = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2545
                            new_partition.in_vdev = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2546
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2547
                else:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2548
                    self._handle_slices(partition.children,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2549
                                        new_partition, existing_partition)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2550
        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2551
            # Insert partition now, since shadowlist validation will require
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2552
            # that the disk be known for partitions or children.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2553
            new_disk.insert_children(new_partition)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2554
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2555
        return new_partition
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2556
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2557
    def _handle_slice(self, orig_slice, parent_object, existing_parent_obj):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2558
        '''Handle the slice as specified in the manifest.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2559
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2560
           Will return a new Slice object to be inserted in the DESIRED
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2561
           tree such that Target Instantiation is able to perform.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2562
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2563
        if orig_slice.name == "2":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2564
            # Skip s2 definition, shouldn't be there, and Target Instantiation
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2565
            # will create
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2566
            self.logger.warning("Skipping orig_slice 2 definition")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2567
            return None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2568
1152
67a7b566bd10 7048532 NoneType object exception occurred referecing existing_parent_object
Matt Keenan <matt.keenan@oracle.com>
parents: 1151
diff changeset
  2569
        if existing_parent_obj is not None:
67a7b566bd10 7048532 NoneType object exception occurred referecing existing_parent_object
Matt Keenan <matt.keenan@oracle.com>
parents: 1151
diff changeset
  2570
            existing_slice = existing_parent_obj.get_first_child(
67a7b566bd10 7048532 NoneType object exception occurred referecing existing_parent_object
Matt Keenan <matt.keenan@oracle.com>
parents: 1151
diff changeset
  2571
                                    orig_slice.name, class_type=Slice)
67a7b566bd10 7048532 NoneType object exception occurred referecing existing_parent_object
Matt Keenan <matt.keenan@oracle.com>
parents: 1151
diff changeset
  2572
        else:
67a7b566bd10 7048532 NoneType object exception occurred referecing existing_parent_object
Matt Keenan <matt.keenan@oracle.com>
parents: 1151
diff changeset
  2573
            existing_slice = None
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2574
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2575
        if orig_slice.action in ["preserve", "delete"]:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2576
            if existing_slice is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2577
                # If it's delete action, just do nothing since it's not really
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2578
                # an issue to delete something that's not there.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2579
                if orig_slice.action == "delete":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2580
                    if isinstance(parent_object, Disk):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2581
                        self.logger.warn(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2582
                            "Attempt to delete non-existant slice"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2583
                            " %s on disk %s ignored" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2584
                            (orig_slice.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2585
                            self._pretty_print_disk(parent_object)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2586
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2587
                        self.logger.warn(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2588
                            "Attempt to delete non-existant slice"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2589
                            " %s on partition '%s', disk %s ignored" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2590
                            (orig_slice.name, parent_object.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2591
                            self._pretty_print_disk(parent_object.parent)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2592
                    # Return now since there's nothing to do.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2593
                    return None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2594
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2595
                    if isinstance(parent_object, Disk):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2596
                        raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2597
                            "Cannot %s slice %s that doesn't exist on disk %s"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2598
                            % (orig_slice.action, orig_slice.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2599
                            self._pretty_print_disk(parent_object)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2600
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2601
                        raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2602
                            "Cannot %s slice %s that doesn't exist on "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2603
                            "partition %s, disk %s" % (orig_slice.action,
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2604
                            orig_slice.name, parent_object.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2605
                            self._pretty_print_disk(parent_object.parent)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2606
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2607
                # Do nothing, just copy over.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2608
                new_slice = copy.copy(existing_slice)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2609
                new_slice.action = orig_slice.action
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2610
                # For slices being deleted initialize out logical info. This
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2611
                # Will ensure later on at least one slice gets assigned to the
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2612
                # root pool.
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2613
                if new_slice.action == "delete":
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2614
                    new_slice.in_zpool = None
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2615
                    new_slice.in_vdev = None
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  2616
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2617
        elif orig_slice.action == "create":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2618
            if existing_slice is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2619
                if isinstance(parent_object, Disk):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2620
                    self.logger.warn(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2621
                        "Creating slice %s on disk %s will "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2622
                        "destroy existing data." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2623
                        (orig_slice.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2624
                        self._pretty_print_disk(parent_object)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2625
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2626
                    self.logger.warn(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2627
                        "Creating slice %s on partition %s, disk %s will "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2628
                        "destroy existing data." % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2629
                        (orig_slice.name, parent_object.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2630
                        self._pretty_print_disk(parent_object.parent)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2631
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2632
            new_slice = copy.copy(orig_slice)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2633
        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2634
            raise SelectionError("Unexpected action '%s' on slice %s"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2635
                % (orig_slice.name, orig_slice.action))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2636
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2637
        if new_slice.action == "create":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2638
            if isinstance(parent_object, Disk):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2639
                if parent_object.disk_prop is not None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2640
                   new_slice.size > parent_object.disk_prop.dev_size:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2641
                    raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2642
                        "Slice %s has a size larger than the disk %s" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2643
                        (new_slice.name,
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2644
                         self._pretty_print_disk(parent_object)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2645
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2646
                # It's a partition
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2647
                if parent_object.size is not None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2648
                   new_slice.size > parent_object.size:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2649
                    raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2650
                        "Slice %s has a size larger than the containing "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2651
                        "partition %s" % (new_slice.name,
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2652
                        parent_object.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2653
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2654
        if new_slice.action == "create" and (new_slice.size.sectors == 0 or
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2655
           new_slice.start_sector is None):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2656
            # According to DTD, if size is not specified, should use
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2657
            # parents size information.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2658
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2659
            if new_slice.size.sectors == 0 or new_slice.start_sector is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2660
                # According to DTD, if size is not specified, should use
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2661
                # parents size information.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2662
                # If start_sector is None, try to allocate size into a gap.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2663
                if orig_slice.action == "create":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2664
                    gaps = parent_object.get_gaps()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2665
                    largest_gap = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2666
                    for gap in gaps:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2667
                        if new_slice.start_sector is None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2668
                           new_slice.size.sectors > 0 and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2669
                           gap.size >= new_slice.size:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2670
                            # Specified a size with only start_sector missing.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2671
                            new_slice.start_sector = gap.start_sector
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2672
                            break
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2673
                        if largest_gap is None or \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2674
                           gap.size.sectors > largest_gap.size.sectors:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2675
                            largest_gap = gap
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2676
                    else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2677
                        # Will be skipped if searching for a gap to insert a
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2678
                        # slice of a given size succeeds.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2679
                        if largest_gap is None or \
1391
3304042aeed6 7077923 Auto-install fails to create VTOC slices automatically determined to be less than min-install size
Matt Keenan <matt.keenan@oracle.com>
parents: 1370
diff changeset
  2680
                           largest_gap.size < new_slice.size:
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2681
                            raise SelectionError("Failed to find gap on disk"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2682
                                " of sufficient size to put slice"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2683
                                " %s in to" % (new_slice.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2684
                        new_slice.start_sector = largest_gap.start_sector
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2685
                        new_slice.size = largest_gap.size
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2686
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2687
        return new_slice
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2688
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2689
    def _handle_slices(self, slices, new_parent_obj, existing_parent_obj):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2690
        '''Process list of slices and attach to new_parent_obj as children.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2691
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2692
           Returns a list of new slices.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2693
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2694
        # Specifics in manifest take precedence, so
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2695
        # if they exist already, ignore them.
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2696
        # In wipe_disk scenario we don't want to merge
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2697
        if existing_parent_obj is not None and not self._wipe_disk and \
1157
1d35c8956cab 7049686 should not give error on sparc :'Disk' object has no attribute 'action'
Matt Keenan <matt.keenan@oracle.com>
parents: 1152
diff changeset
  2698
            ((isinstance(new_parent_obj, Disk)) or \
1d35c8956cab 7049686 should not give error on sparc :'Disk' object has no attribute 'action'
Matt Keenan <matt.keenan@oracle.com>
parents: 1152
diff changeset
  2699
             (isinstance(new_parent_obj, Partition) and \
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2700
              new_parent_obj.action == "use_existing_solaris2")):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2701
            tmp_slices = list()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2702
            for exist_slice in existing_parent_obj.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2703
                skip_slice = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2704
                for mf_slice in slices:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2705
                    if mf_slice.name == exist_slice.name:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2706
                        # Already inserted, skip
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2707
                        break
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2708
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2709
                    slice_copy = copy.copy(exist_slice)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2710
                    # Remove in_zpool/in_vdev values
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2711
                    # because these should exist in
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2712
                    # manifest but don't and will cause
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2713
                    # validations to fail.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2714
                    slice_copy.in_zpool = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2715
                    slice_copy.in_vdev = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2716
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2717
                    tmp_slices.append(slice_copy)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2718
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2719
            # Temporarily skip validation since
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2720
            # may cause validation failures
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2721
            new_parent_obj.validate_children = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2722
            new_parent_obj.insert_children(tmp_slices)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2723
            new_parent_obj.validate_children = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2724
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2725
        # Need to handle all preserved slices first inserting them into
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2726
        # new parent, this ensures get_gaps works for newly created slices
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2727
        for orig_slice in [s for s in slices if s.action == "preserve"]:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2728
            new_slice = self._handle_slice(orig_slice, new_parent_obj,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2729
                                           existing_parent_obj)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2730
            if new_slice is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2731
                new_parent_obj.insert_children(new_slice)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2732
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2733
        # While processing slices, remember whether we found
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2734
        # any slices with an in_zpool or in_vdev, and if not
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2735
        # then we will use the first large enough slice.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2736
        first_large_slice = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2737
        found_zpool_vdev_slice = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2738
        for orig_slice in [s for s in slices if s.action != "preserve"]:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2739
            new_slice = self._handle_slice(orig_slice, new_parent_obj,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2740
                                           existing_parent_obj)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2741
            if new_slice is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2742
                new_parent_obj.insert_children(new_slice)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2743
                if new_slice.in_zpool is None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2744
                   new_slice.in_vdev is None:
1266
6b6ba78c5310 7063283 Unable to create UFS swap via AI Install. Tries to associate swap with zpool
Matt Keenan <matt.keenan@oracle.com>
parents: 1252
diff changeset
  2745
                    if not new_slice.is_swap and \
6b6ba78c5310 7063283 Unable to create UFS swap via AI Install. Tries to associate swap with zpool
Matt Keenan <matt.keenan@oracle.com>
parents: 1252
diff changeset
  2746
                       first_large_slice is None and \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2747
                       new_slice.action == "create" and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2748
                       new_slice.size >= self.controller.minimum_target_size:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2749
                        # Remember the first sufficiently large slice thats
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2750
                        # got a create or use_existing action
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2751
                        first_large_slice = new_slice
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2752
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2753
                    found_zpool_vdev_slice = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2754
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2755
        # Check to see if we didn't find any specific references to vdevs
1266
6b6ba78c5310 7063283 Unable to create UFS swap via AI Install. Tries to associate swap with zpool
Matt Keenan <matt.keenan@oracle.com>
parents: 1252
diff changeset
  2756
        # Sets in_zpool/in_vdev on at least one slice, do not set on a slice
6b6ba78c5310 7063283 Unable to create UFS swap via AI Install. Tries to associate swap with zpool
Matt Keenan <matt.keenan@oracle.com>
parents: 1252
diff changeset
  2757
        # that has in_use set to swap
6b6ba78c5310 7063283 Unable to create UFS swap via AI Install. Tries to associate swap with zpool
Matt Keenan <matt.keenan@oracle.com>
parents: 1252
diff changeset
  2758
        if self._is_generated_root_pool and not found_zpool_vdev_slice:
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2759
            if first_large_slice is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2760
                # Set in_zpool/in_vdev on slice, and remove from
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2761
                # disk parent object (just in case)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2762
                first_large_slice.in_zpool = self._root_pool.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2763
                if self._root_vdev is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2764
                    first_large_slice.in_vdev = self._root_vdev.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2765
                new_parent_obj.in_zpool = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2766
                new_parent_obj.in_vdev = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2767
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2768
                raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2769
                    "No slice large enough to install to was found on disk")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2770
1681
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  2771
    def _handle_disk(self, disk, discovered_disk):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2772
        '''Handle a disk object.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2773
1681
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  2774
           Make a copy of the discovered disk, and then if necessary
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  2775
           add/remove partitions based on version passed that came
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2776
           from the manifest.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2777
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2778
           Returns: the new disk to be inserted into the DESIRED Tree
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2779
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2780
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2781
        self.logger.debug("Processing disk : %s" %
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2782
            self._pretty_print_disk(disk))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2783
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2784
        ret_disk = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2785
        errsvc.clear_error_list()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2786
        # Check that in_zpool and in_vdev values from manifest are valid
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2787
        self._check_valid_zpool_vdev(disk)
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2788
        self._wipe_disk = False
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2789
1323
7e185ea5a224 7068381 AI doesn't retry to list the iscsi target if the OS Device Name is not available
Drew Fisher <drew.fisher@oracle.com>
parents: 1319
diff changeset
  2790
        # create an anonymous function for testing if an object is an Iscsi DOC
7e185ea5a224 7068381 AI doesn't retry to list the iscsi target if the OS Device Name is not available
Drew Fisher <drew.fisher@oracle.com>
parents: 1319
diff changeset
  2791
        # object
7e185ea5a224 7068381 AI doesn't retry to list the iscsi target if the OS Device Name is not available
Drew Fisher <drew.fisher@oracle.com>
parents: 1319
diff changeset
  2792
        is_iscsi = lambda(child): isinstance(child, Iscsi)
7e185ea5a224 7068381 AI doesn't retry to list the iscsi target if the OS Device Name is not available
Drew Fisher <drew.fisher@oracle.com>
parents: 1319
diff changeset
  2793
7e185ea5a224 7068381 AI doesn't retry to list the iscsi target if the OS Device Name is not available
Drew Fisher <drew.fisher@oracle.com>
parents: 1319
diff changeset
  2794
        # check first to see if the user has requested to use the whole disk
7e185ea5a224 7068381 AI doesn't retry to list the iscsi target if the OS Device Name is not available
Drew Fisher <drew.fisher@oracle.com>
parents: 1319
diff changeset
  2795
        # and that disk either has no children or only Iscsi children
7e185ea5a224 7068381 AI doesn't retry to list the iscsi target if the OS Device Name is not available
Drew Fisher <drew.fisher@oracle.com>
parents: 1319
diff changeset
  2796
        if disk.whole_disk and \
7e185ea5a224 7068381 AI doesn't retry to list the iscsi target if the OS Device Name is not available
Drew Fisher <drew.fisher@oracle.com>
parents: 1319
diff changeset
  2797
           (not disk.has_children or all(map(is_iscsi, disk.children))):
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2798
            # Traditional whole_disk scenario where we apply default layout
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2799
            # Only copy the disk, not it's children.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2800
            disk_copy = copy.copy(discovered_disk)
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2801
            self._add_disks_to_map(disk_copy)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2802
            self.logger.debug("Using Whole Disk")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2803
            if disk.in_zpool is None and disk.in_vdev is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2804
                self.logger.debug("Zpool/Vdev not specified")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2805
                if self._is_generated_root_pool:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2806
                    self.logger.debug("Assigning to temporary root pool")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2807
                    # Assign to temporary root pool if one exists
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2808
                    disk.in_zpool = self._root_pool.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2809
                    disk.in_vdev = self._root_vdev.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2810
                elif self._root_pool is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2811
                    # Assign to real root pool if one exists
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2812
                    disk.in_zpool = self._root_pool.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2813
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2814
            if not self._check_in_root_pool(disk):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2815
                self.logger.debug("Disk Not in root pool")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2816
                # We can leave it for ZFS to partition itself optimally
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2817
                disk_copy.whole_disk = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2818
                # Add vdev/zpool values to disk_copy
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2819
                disk_copy.in_zpool = disk.in_zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2820
                disk_copy.in_vdev = disk.in_vdev
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2821
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2822
                root_vdev = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2823
                if self._root_vdev is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2824
                    root_vdev = self._root_vdev.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2825
                elif disk.in_vdev is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2826
                    root_vdev = disk.in_vdev
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2827
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2828
                root_pool = None
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2829
                if self._root_pool is not None:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2830
                    root_pool = self._root_pool.name
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2831
                elif disk.in_zpool is not None:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2832
                    root_pool = disk.in_zpool
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2833
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2834
                self.logger.debug("Disk in root pool")
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2835
                self.logger.debug("Whole Disk, applying default layout")
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2836
                disk_copy.label = self.gpt_capable and "GPT" or "VTOC"
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2837
                self.controller.apply_default_layout(disk_copy,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2838
                    use_whole_disk=(disk_copy.label == "GPT"),
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2839
                    wipe_disk=True, in_zpool=self._root_pool.name,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2840
                    in_vdev=root_vdev)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2841
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2842
            ret_disk = disk_copy
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2843
        else:
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2844
            if disk.whole_disk and disk.has_children:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2845
                # Whole disk of True and disk has children interpreted as
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2846
                # wipe disk and replace with this layout.
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2847
                self._wipe_disk = True
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2848
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2849
            # Copy disk
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2850
            # merging of partitions and slices from manifest with existing
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2851
            # layouts is only done if not wiping the disk.
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2852
            disk_copy = copy.copy(discovered_disk)
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2853
            self._add_disks_to_map(disk_copy)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2854
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2855
            # Get partitions and slices from manifest version of Disk
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2856
            partitions = disk.get_children(class_type=Partition)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2857
            slices = disk.get_children(class_type=Slice)
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2858
            gpt_partitions = disk.get_children(class_type=GPTPartition)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2859
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2860
            # Do some basic sanity checks
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2861
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2862
            # If not partitions, but have slices, fail now, if i386
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2863
            if self.cpu == "i386" and not partitions and slices:
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2864
                raise SelectionError("Invalid specification of slices "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2865
                        "outside of partition on the %s platform"
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2866
                        % (self.cpu))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2867
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2868
            # If partitions, fail now, if not i386
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2869
            if self.cpu != "i386" and partitions:
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2870
                raise SelectionError("Invalid specification of partitions "
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2871
                        "on this %s platform" % (self.cpu))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2872
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2873
            if self.cpu == "i386":
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2874
                if partitions and gpt_partitions:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2875
                    raise SelectionError(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2876
                        "Both partition(s) and gpt_partition(s) specified")
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2877
                if not partitions and not gpt_partitions:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2878
                    raise SelectionError(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2879
                        "If whole_disk is False, you need to provide "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2880
                        "information for gpt_partitions or partitions")
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2881
            else:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2882
                if slices and gpt_partitions:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2883
                    raise SelectionError(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2884
                        "Both slice(s) and gpt_partition(s) specified")
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2885
                if not slices and not gpt_partitions:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2886
                    raise SelectionError(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2887
                        "If whole_disk is False, you need to provide "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2888
                        "information for gpt_partitions or slices")
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2889
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2890
            if disk_copy.label != "VTOC" and not gpt_partitions:
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: 1323
diff changeset
  2891
                disk_copy._set_vtoc_label_and_geometry(self.dry_run)
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2892
                self._wipe_disk = True  # can't preserve GPT Partitions
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2893
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2894
            if gpt_partitions:  # could be x86 or sparc
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2895
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2896
                disk_copy.label = "GPT"
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2897
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2898
                # remove any user specified actions on special partitions.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2899
                gpt_partitions = filter(lambda gpe: gpe.guid not in (
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2900
                                            EFI_SYSTEM, EFI_BIOS_BOOT,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2901
                                            EFI_RESERVED),
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2902
                                        gpt_partitions)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2903
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2904
                # split up our gpt_partitions into groups based on action.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2905
                preserve, create, delete, unknown = (list(), list(),
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2906
                                                     list(), list())
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2907
                for gpe in gpt_partitions:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2908
                    {"preserve": preserve,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2909
                     "create": create,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2910
                     "delete": delete,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2911
                    }.get(gpe.action, unknown).append(gpe)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2912
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2913
                # First handle any preserved partitions.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2914
                for gpe in preserve:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2915
                    self._handle_gpt_partition(gpe, disk_copy,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2916
                        discovered_disk)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2917
                    # Insertion to disk done in _handle_gpt_partition
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2918
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2919
                # Now look at the old disk for "system" or "reserved" and
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2920
                # preserve all that are found.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2921
                exist = discovered_disk.get_children(class_type=GPTPartition)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2922
                special = filter(lambda gpe: gpe.guid in (EFI_RESERVED,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2923
                                             discovered_disk.sysboot_guid),
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2924
                                 exist)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2925
                for gpe in special:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2926
                    self._handle_gpt_partition(gpe, disk_copy,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2927
                        discovered_disk)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2928
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2929
                # Next add system partitions if they weren't preserved.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2930
                try:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2931
                    disk_copy.add_required_partitions(donor=None)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2932
                except InsufficientSpaceError as err:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2933
                    raise SelectionError("%s: %s" % (err.message,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2934
                        self._pretty_print_disk(discovered_disk)))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2935
                except NoGPTPartitionSlotsFree:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2936
                    # only system has to be mountable, never reserved
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2937
                    raise SelectionError("No free slots available for boot "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2938
                        "partition." % \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2939
                        (self._pretty_print_disk(discovered_disk)))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2940
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2941
                # Handle the create, which must not bump into special or
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2942
                # preserved. ShadowList will prevent this. Handle delete
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2943
                # at the same time as that just adds them to DOC for later
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2944
                # inspection.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2945
                for gpe in create + delete:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2946
                    self._handle_gpt_partition(gpe, disk_copy,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2947
                        discovered_disk)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2948
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2949
                # At this point we have disk with GPT partitions but probably
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2950
                # in a jumbled order, resort by action and name. This just
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2951
                # makes it easier to see what happened in desired tree.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2952
                disk_copy._children.sort(key=lambda gpe: gpe.action)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2953
                disk_copy._children.sort(key=lambda gpe: int(gpe.name))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2954
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2955
            elif partitions:  # On X86
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2956
                # Process partitions, checking for use_existing_solaris2
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2957
                for partition in partitions:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2958
                    # If there is no name specified only seek if no name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2959
                    # provided.
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2960
                    if not partition.name and \
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2961
                       partition.action == "use_existing_solaris2":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2962
                        # Pre-empt this by replacing it with a discovered
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2963
                        # Solaris2 partition if one exists
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2964
                        solaris_partition = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2965
                        for existing_partition in discovered_disk.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2966
                            if existing_partition.is_solaris:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2967
                                solaris_partition = existing_partition
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2968
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2969
                        if solaris_partition is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2970
                            raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2971
                                "Cannot find a pre-existig Solaris "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2972
                                "partition on disk %s"
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  2973
                                % (self._pretty_print_disk(discovered_disk)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2974
                        else:
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2975
                            # Found existing solaris partition to process
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2976
                            tmp_partition = copy.copy(solaris_partition)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2977
                            # Ensure partition action maintained.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2978
                            tmp_partition.action = partition.action
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2979
                            if not partition.has_children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2980
                                if solaris_partition.has_children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2981
                                    # Because no slices are being specified in
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2982
                                    # the manifest we have to assume we are to
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2983
                                    # create a slice for root.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2984
                                    # TODO: Should this be looking for a gap?
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2985
                                    self.logger.warn(
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  2986
                                        "Existing partition's slices are not "
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2987
                                        "being preserved")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2988
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2989
                                # Temporarily skip validation since
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2990
                                # tmp_partition not yet in disk and will cause
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2991
                                # failures.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2992
                                tmp_partition.validate_children = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2993
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2994
                                # Add a slice 0 for the root pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2995
                                # Size calculated automatically later.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2996
                                tmp_slice = tmp_partition.add_slice("0", 1, 0,
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2997
                                    Size.sector_units, force=True)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2998
                                tmp_partition.validate_children = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  2999
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3000
                                # Assign to root pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3001
                                tmp_slice.in_zpool = self._root_pool.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3002
                                if self._root_vdev is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3003
                                    tmp_slice.in_vdev = self._root_vdev.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3004
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3005
                            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3006
                                # Specifics in manifest take precedence, so
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3007
                                # copy first.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3008
                                tmp_slices = list()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3009
                                for mf_slice in partition.children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3010
                                    tmp_slices.append(copy.copy(mf_slice))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3011
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3012
                                # Only merge partitions if not wiping disk
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3013
                                if not self._wipe_disk:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3014
                                    for exist_slice in \
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3015
                                        solaris_partition.children:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3016
                                        skip_slice = False
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3017
                                        for mf_slice in partition.children:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3018
                                            if mf_slice.name == \
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3019
                                               exist_slice.name:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3020
                                                # Already inserted, skip
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3021
                                                break
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3022
                                        else:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3023
                                            slice_copy = copy.copy(exist_slice)
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3024
                                            # Remove in_zpool/in_vdev values
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3025
                                            # because these should exist in
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3026
                                            # manifest but don't and will
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3027
                                            # cause validations to fail.
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3028
                                            slice_copy.in_zpool = None
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3029
                                            slice_copy.in_vdev = None
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3030
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3031
                                            tmp_slices.append(slice_copy)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3032
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3033
                                # Temporarily skip validation since
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3034
                                # tmp_partition not yet in disk and will cause
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3035
                                # failures.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3036
                                tmp_partition.validate_children = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3037
                                tmp_partition.insert_children(tmp_slices)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3038
                                tmp_partition.validate_children = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3039
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3040
                            # Do susbstitution
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3041
                            partitions.remove(partition)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3042
                            partitions.insert(int(tmp_partition.name),
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3043
                                tmp_partition)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3044
                            # Break now, since partitions list has changed.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3045
                            break
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3046
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3047
                # Only merge partitions if not wiping disk
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3048
                if not self._wipe_disk:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3049
                    # Copy over any existing partitions, if they are not in the
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3050
                    # manifest, since the manifest takes priority.
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3051
                    # Sort byname to ensure we handle primaries first.
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3052
                    skip_existing_logicals = False
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3053
                    for existing_partition in \
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3054
                        sorted(discovered_disk.children, \
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3055
                            key=attrgetter("name")):
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3056
                        for mf_partition in partitions:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3057
                            if mf_partition.name == existing_partition.name:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3058
                                if existing_partition.is_extended and \
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3059
                                mf_partition.action in ["create", "delete"]:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3060
                                    # If we're replacing an extended partition
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3061
                                    # then we need to ensure any existing
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3062
                                    # logicals are not copied over,
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3063
                                    # effectively deleting them.
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3064
                                    skip_existing_logicals = True
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3065
                                break
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3066
                        else:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3067
                            # Copy everything else, unless it's a logical and
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3068
                            # we're supposed to be skipping them.
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3069
                            if not (existing_partition.is_logical and
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3070
                                    skip_existing_logicals):
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3071
                                partitions.append(
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3072
                                    copy.copy(existing_partition))
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3073
                                # Also insert to new disk so gaps calculations
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3074
                                # work
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3075
                                disk_copy.insert_children(
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3076
                                    copy.copy(existing_partition))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3077
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3078
                extended_partitions = [p for p in partitions if p.is_extended]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3079
                if len(extended_partitions) > 1:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3080
                    raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3081
                        "It is only possible to have at most 1 extended"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3082
                        " partition defined")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3083
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3084
                for partition in partitions:
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3085
                    if not self._wipe_disk:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3086
                        if disk_copy.get_first_child(partition.name) \
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3087
                           is not None:
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3088
                            # Skip this, we've already processed it above.
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3089
                            continue
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3090
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3091
                    # Ensure partition is set to be in temporary root pool
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3092
                    # _handle_partition() relies on this.
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3093
                    if partition.is_solaris:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3094
                        try:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3095
                            efi_sys, resv, partition = \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3096
                                disk_copy.add_required_partitions(partition)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3097
                        except InsufficientSpaceError as err:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3098
                            raise SelectionError("%s: %s" % (err.message,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3099
                                self._pretty_print_disk(discovered_disk)))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3100
                        except NoPartitionSlotsFree:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3101
                            raise SelectionError("No free slots available for "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3102
                                "EFI system partition.")
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3103
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3104
                        if self._is_generated_root_pool \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3105
                           and not partition.has_children \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3106
                           and partition.action == "create" \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3107
                           and partition.in_zpool is None \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3108
                           and partition.in_vdev is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3109
                            # Assign to temporary root pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3110
                            partition.in_zpool = self._root_pool.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3111
                            partition.in_vdev = self._root_vdev.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3112
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3113
                    # Process partitions, and contained slices
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3114
                    new_partition = self._handle_partition(partition,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3115
                        disk_copy, discovered_disk)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3116
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3117
                    # Insertion to disk done in _handle_partition()
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3118
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3119
                # This is most likely going to fail. We only get here, however,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3120
                # if the user is switching from BIOS to UEFI and trying to use
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3121
                # existing solaris partition.
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3122
                try:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3123
                    efi_sys, resv, partition = \
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3124
                        disk_copy.add_required_partitions(donor=None)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3125
                except InsufficientSpaceError as err:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3126
                    raise SelectionError("%s: %s: install would not be able "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3127
                        "to preserve Solaris2 partition" % (err.message,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3128
                        self._pretty_print_disk(discovered_disk)))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3129
                except NoPartitionSlotsFree:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3130
                    raise SelectionError("No free slots available for "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3131
                        "EFI system partition: install would not be able to "
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3132
                        "preserve Solaris2 partition")
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3133
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3134
            else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3135
                # Can assume we're on SPARC machine now.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3136
                if len(slices) == 1 and slices[0].name == "2":
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3137
                    # There is only one slice we need to check to see if
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3138
                    # it's slice "2". If it is we need to add a slice "0"
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3139
                    # and set in_vdev and in_zpool.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3140
                    # Add a slice
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3141
                    start = 1  # Will be rounded up to cylinder by TI
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3142
                    slice_size = \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3143
                      disk_copy.disk_copy_prop.dev_size.sectors - start
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3144
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3145
                    new_slice = disk_copy.add_slice("0", start,
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3146
                        slice_size, Size.sector_units, force=True)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3147
                    if slices[0].in_vdev is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3148
                        new_slice.in_vdev = slices[0].in_vdev
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3149
                    if self._root_pool is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3150
                        new_slice.in_zpool = self._root_pool.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3151
                else:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3152
                    self._handle_slices(slices, disk_copy, discovered_disk)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3153
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3154
            ret_disk = disk_copy
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3155
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3156
        self.logger.debug("Finished processing disk : %s" %
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3157
            self._pretty_print_disk(disk))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3158
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3159
        # Check error service for errors
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3160
        errors = errsvc.get_all_errors()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3161
1595
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3162
        for err in errors:
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3163
            if self._wipe_disk and \
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3164
                isinstance(err.error_data[liberrsvc.ES_DATA_EXCEPTION],
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3165
                           ShadowPhysical.SliceInUseError):
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3166
                self.logger.debug("SliceInUseError - not fatal")
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3167
                self.logger.debug("Error module ID: %s.. error type: %s" % \
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3168
                        (err.get_mod_id(), str(err.get_error_type())))
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3169
                self.logger.debug("Exception value: %s" % \
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3170
                        err.error_data[liberrsvc.ES_DATA_EXCEPTION].value)
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3171
            else:
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3172
                self.logger.error("Error module ID: %s.. error type: %s" % \
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3173
                                 (err.get_mod_id(), str(err.get_error_type())))
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3174
                self.logger.error("Error class: %r" % \
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3175
                                  err.error_data[liberrsvc.ES_DATA_EXCEPTION])
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3176
                self.logger.error("Exception value: %s" % \
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3177
                        err.error_data[liberrsvc.ES_DATA_EXCEPTION].value)
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3178
                raise SelectionError("Final Validation Failed. See "
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3179
                                     "install_log for more details.")
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3180
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3181
        return ret_disk
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3182
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3183
    def _create_temp_logical_tree(self, existing_logicals):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3184
        '''Create a set of logicals that we will use should there be no other
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3185
           logicals defined in the manifest.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3186
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3187
        if existing_logicals:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3188
            # Add Zpool to existing logical, pick first one
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3189
            logical = existing_logicals[0]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3190
        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3191
            logical = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3192
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3193
        logical = self.controller.apply_default_logical(logical,
1252
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  3194
            self.be_mountpoint, redundancy="mirror",
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  3195
            unique_zpool_name=not self.dry_run)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3196
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3197
        # There may be more than one pool in this logical, so need to
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3198
        # iterate over all pools breaking when root pool found.
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3199
        zpools = logical.get_children(class_type=Zpool)
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3200
        for zpool in zpools:
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3201
            if zpool.is_root:
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3202
                break
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3203
        else:
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3204
            # This should never happen as the controller method
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3205
            # apply_default_logical, will have created a root pool.
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3206
            raise SelectionError("Failed to find controller created root pool")
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3207
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3208
        vdev = zpool.get_first_child(class_type=Vdev)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3209
        be = zpool.get_first_child(class_type=BE)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3210
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3211
        # Set instance variables
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3212
        self._is_generated_root_pool = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3213
        self._root_pool = zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3214
        self._root_vdev = vdev
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3215
        self._be = be
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3216
        # Add pool to maps so final validations will work
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3217
        self._zpool_map[zpool.name] = zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3218
        vdev_key = zpool.name + ":" + vdev.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3219
        self._vdev_map[vdev_key] = vdev
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3220
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3221
        return logical
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3222
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3223
    def _cleanup_temp_logical(self, logical, existing_logicals):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3224
        if not self._is_generated_root_pool:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3225
            return
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3226
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3227
        if logical not in existing_logicals:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3228
            logical.delete()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3229
        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3230
            logical.delete_children(self._root_pool)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3231
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3232
        # Remove pool from maps since we're not using it.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3233
        del self._zpool_map[self._root_pool.name]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3234
        vdev_key = self._root_pool.name + ":" + self._root_vdev.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3235
        del self._vdev_map[vdev_key]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3236
        # Reset instance variables
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3237
        self._is_generated_root_pool = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3238
        self._root_pool = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3239
        self._root_vdev = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3240
        self._be = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3241
1681
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3242
    def _get_candidate_disks(self, disk):
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3243
        ''' Find all of the disks in the discovered disk list that
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3244
            match the disk specification from the manifest
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3245
        '''
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3246
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3247
        matched_disks = DiskMatches(disk)
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3248
        for discovered_disk in self._discovered_disks:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3249
            # Attempt to match ctd/volid/devpath/devid first
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3250
            if discovered_disk.name_matches(disk):
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3251
                # there will only be a single match so return
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3252
                matched_disks.add_match(discovered_disk)
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3253
                return matched_disks
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3254
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3255
            # Attempt to match each of the discovered disks against disk_prop.
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3256
            # Only match disk properties if all ctd/receptacle/wwn are None,
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3257
            # then attempt to match on boot disk or one of the disk properties
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3258
            # specified
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3259
            if disk.ctd is None and disk.volid is None and \
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3260
               disk.devpath is None and disk.devid is None and \
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3261
               disk.receptacle is None and disk.wwn is None:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3262
                # Attempt to match disk_prop. Any of the properties
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3263
                # dev_type/dev_vendor/dev_size must been specified
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3264
                if discovered_disk.disk_prop is not None and \
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3265
                   disk.disk_prop is not None:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3266
                    if discovered_disk.disk_prop.prop_matches(disk.disk_prop):
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3267
                        matched_disks.add_match(discovered_disk)
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3268
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3269
                # Attempt to match on boot_disk
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3270
                if disk.is_boot_disk() and discovered_disk.is_boot_disk():
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3271
                    matched_disks.add_match(discovered_disk)
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3272
                    return matched_disks
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3273
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3274
        return matched_disks
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3275
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3276
    def _generate_candidate_disk_list(self, disks):
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3277
        ''' Map all of the disks specified in the AI manifest to devices
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3278
            specified in the discovered tree.  This will be a candidate
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3279
            list of devices that each device specification in the AI
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3280
            manifest could potentially map to.  For explicit specifications
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3281
            like ctd, devid, ... the list of devices would be at most a
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3282
            single device.  For the non-deterministic criteria (disk_size,
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3283
            dev_vendor, ...) the potential mappings would be 0 or more
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3284
            disks from the discovered list.  The candidate list is then
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3285
            sorted by the number of matches (least to most).  This sorted
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3286
            list is used to create the desired target list.
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3287
        '''
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3288
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3289
        # For each disk specified in the manifest generate
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3290
        # a list of matches from the discovered disk list
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3291
        candidate_disk_list = list()
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3292
        for disk in disks:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3293
            if self._is_generated_root_pool:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3294
                # Fail if manifest has disk references to temporary pool
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3295
                # that was just created
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3296
                if disk.in_zpool == self._root_pool.name or \
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3297
                   disk.in_vdev == self._root_vdev.name:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3298
                    raise SelectionError("Invalid selection of non-existent "
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3299
                                         "pool or vdev for disk")
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3300
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3301
            candidate_disk_list.append(self._get_candidate_disks(disk))
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3302
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3303
        # Now process the disks in order of possible matches (least to most)
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3304
        candidate_disk_list.sort(key=lambda obj: obj.nr_matches)
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3305
        mapped_disk_list = list()
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3306
        for candidate_disk in candidate_disk_list:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3307
            # Traverse the set of matches looking for an unused disk
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3308
            for matched_disk in candidate_disk.matches:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3309
                if matched_disk.ctd not in mapped_disk_list:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3310
                    candidate_disk.mapped_disk = matched_disk
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3311
                    mapped_disk_list.append(matched_disk.ctd)
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3312
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3313
                    self.logger.debug(
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3314
                        "Mapped disk specification %s -> %s." %
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3315
                        (self._pretty_print_disk(candidate_disk.disk),
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3316
                        self._pretty_print_disk(candidate_disk.mapped_disk)))
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3317
                    break
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3318
            else:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3319
                raise SelectionError(
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3320
                    "Unable to locate the disk '%s' on the system." %
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3321
                    self._pretty_print_disk(candidate_disk.disk))
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3322
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3323
        return candidate_disk_list
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3324
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3325
    def _handle_target(self, target):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3326
        '''Process target section in manifest'''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3327
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3328
        # Reset all local map information
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3329
        self._reset_maps()
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3330
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3331
        new_desired_target = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3332
        logical_inserted = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3333
        skip_disk_processing = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3334
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3335
        # Get Logical sections
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3336
        logicals = target.get_children(class_type=Logical)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3337
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3338
        # It's possible that there are no logicial sections.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3339
        if logicals:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3340
            for logical in logicals:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3341
                new_logical = self._handle_logical(logical)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3342
                if new_logical is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3343
                    if new_desired_target is None:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3344
                        new_desired_target = self._get_new_desired_target()
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3345
                    new_desired_target.insert_children(new_logical)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3346
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3347
        if new_desired_target is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3348
            all_whole_disk = None
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3349
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3350
            # Check if all disks are specified as whole disk and they
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3351
            # don't have logical identifiers, and finally that they don't
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3352
            # have any children.
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3353
            disks = target.get_children(class_type=Disk)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3354
            for disk in disks:
1303
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3355
                if disk.whole_disk and disk.in_zpool is None and \
97cab8039183 7057944 CUD/AI needs a way to be able to wipe existing layout on disk before applying a new layout.
Matt Keenan <matt.keenan@oracle.com>
parents: 1273
diff changeset
  3356
                   disk.in_vdev is None and not disk.has_children:
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3357
                    if all_whole_disk is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3358
                        all_whole_disk = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3359
                else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3360
                    all_whole_disk = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3361
                    break
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3362
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3363
            if all_whole_disk is not None and all_whole_disk:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3364
                # Can use TargetController now
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3365
                # Call initialize again to ensure logicals created, since
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3366
                # previously called to not create logicals.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3367
                self.controller.initialize(no_initial_disk=True,
1252
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  3368
                                           unique_zpool_name=not self.dry_run)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3369
1681
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3370
                # Get the list of disks from the discovered list that map to
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3371
                # the set of desired disks from the AI manifest
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3372
                candidate_disk_list = \
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3373
                    self._generate_candidate_disk_list(disks)
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3374
                mapped_disks = [candidate.mapped_disk for candidate in
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3375
                                candidate_disk_list]
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3376
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3377
                selected_disks = self.controller.select_disk(mapped_disks,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3378
                    use_whole_disk=True)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3379
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3380
                # Target Controller will insert default root pool need to
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3381
                # Set this for validation of name later on
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3382
                self._is_generated_root_pool = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3383
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3384
                # Need to update the logical map, as new one just created
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3385
                new_desired_target = self._get_new_desired_target()
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3386
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3387
                # Get New Logical sections
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3388
                logicals = new_desired_target.get_children(class_type=Logical)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3389
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3390
                if logicals is not None and logicals:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3391
                    for logical in logicals:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3392
                        # A logical may have been specified just for
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3393
                        # the purposes of noswap and nodump, ensure
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3394
                        # This information is passed onto handle_logical
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3395
                        if self._nozpools:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3396
                            logical.noswap = self._noswap
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3397
                            logical.nodump = self._nodump
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3398
                        # No need to insert into new_desired, already there
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3399
                        self._handle_logical(logical)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3400
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3401
                # Update disk map
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3402
                self._add_disks_to_map(selected_disks)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3403
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3404
                skip_disk_processing = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3405
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3406
        # No disks specified or at least one was not whole_disk
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3407
        if not skip_disk_processing:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3408
            if self._root_pool is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3409
                # There is no zpool, so we will add one temporarily
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3410
                # This will allow us to fill-in the in_zpool/in_vdev for disks
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3411
                # that don't have any explicitly set already.
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3412
                tmp_logical = self._create_temp_logical_tree(logicals)
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3413
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3414
                if new_desired_target is None:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3415
                    new_desired_target = self._get_new_desired_target()
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3416
                if tmp_logical not in logicals or self._nozpools:
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3417
                    # Insert new logical into desired tree
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3418
                    new_desired_target.insert_children(tmp_logical)
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3419
                else:
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3420
                    # Could be re-using existing logical section.
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3421
                    # Replace in desired tree with this one.
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3422
                    existing_logical = new_desired_target.get_first_child(
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3423
                                                    class_type=Logical)
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3424
                    if existing_logical:
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3425
                        new_desired_target.delete_children(existing_logical)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3426
                    new_desired_target.insert_children(tmp_logical)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3427
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3428
            # It's also possible to have no disks, if so install to first
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3429
            # available disk that is large enough to install to.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3430
            # Should be cycling through manifest disks or discovered disks
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3431
            # looking at _handle_disk
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3432
            disks = target.get_children(class_type=Disk)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3433
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3434
            # If no Disks, but have a logical section, then we need to
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3435
            # auto-select, and add disk.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3436
            if not disks and self._root_pool is not None and \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3437
                self._root_pool.action not in self.PRESERVED:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3438
                initial_disks = copy.copy(
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3439
                    self.controller.select_initial_disk())
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3440
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3441
                if initial_disks is not None:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3442
                    selected_disks = self.controller.select_disk(initial_disks,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3443
                        use_whole_disk=True)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3444
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3445
                    self.logger.info("Selected Disk(s) : %s" % \
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3446
                        (self._pretty_print_disk(selected_disks)))
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3447
                    pool_vdevs = self._get_vdevs_in_zpool(
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3448
                        self._root_pool.name)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3449
                    root_vdev_name = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3450
                    if self._root_vdev is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3451
                        root_vdev_name = self._root_vdev.name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3452
                    elif len(pool_vdevs) > 1:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3453
                        self.logger.debug(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3454
                            "Automatic disk selection failed. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3455
                            "More than one possible vdev in zpool. "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3456
                            "in_zpool '%s'." % (self._root_pool.name))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3457
                    elif len(pool_vdevs) == 1:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3458
                        root_vdev_name = pool_vdevs[0].name
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3459
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3460
                    for disk in selected_disks:
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3461
                        self.controller.apply_default_layout(disk,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3462
                            use_whole_disk=(disk.label == "GPT"),
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3463
                            wipe_disk=True, in_zpool=self._root_pool.name,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3464
                            in_vdev=root_vdev_name)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3465
                        self._disk_map[disk.ctd] = disk
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3466
1681
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3467
            if disks:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3468
                candidate_disk_list = \
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3469
                    self._generate_candidate_disk_list(disks)
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3470
                for candidate_disk in candidate_disk_list:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3471
                    new_disk = self._handle_disk(candidate_disk.disk,
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3472
                        candidate_disk.mapped_disk)
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3473
                    if new_disk is not None:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3474
                        if new_desired_target is None:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3475
                            new_desired_target = \
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3476
                                self._get_new_desired_target()
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3477
                        new_desired_target.insert_children(new_disk)
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3478
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3479
                if new_desired_target is not None:
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3480
                    self.logger.info("Selected Disk(s) : %s" % \
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3481
                        self._pretty_print_disk(
c1f54cfadbac 7147174 Target selection doesn't work correctly when multiple disks specified via disk_props
Harold N Shaw- Oracle <Harold.Shaw@oracle.COM>
parents: 1623
diff changeset
  3482
                        new_desired_target.get_descendants(class_type=Disk)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3483
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3484
            # If disks were added to temporary root pool, make it permanent
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3485
            if self._is_generated_root_pool:
1177
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3486
                # At this point any slices that were specified but don't
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3487
                # contain identifiable info, will cause no devices to be
f0e6e450a3e7 7050875 Cannot create a swap slice in CUD/AI
Matt Keenan <matt.keenan@oracle.com>
parents: 1157
diff changeset
  3488
                # returned.
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3489
                vdev_devices = self._get_vdev_devices(self._root_pool.name,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3490
                                                      self._root_vdev.name,
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3491
                                                      self._disk_map)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3492
                if vdev_devices is not None and vdev_devices:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3493
                    # Keep root pool since we used it.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3494
                    self._is_generated_root_pool = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3495
                else:
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3496
                    self._cleanup_temp_logical(logical, logicals)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3497
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3498
        if new_desired_target is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3499
            self.logger.debug("Validating desired =\n%s\n" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3500
                (str(new_desired_target)))
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3501
            self._validate_swap_and_dump(new_desired_target)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3502
            self._validate_logical(new_desired_target)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3503
            self._validate_disks(new_desired_target)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3504
            # Do final validation before passing to Target Instantiation
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3505
            if not new_desired_target.final_validation():
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3506
                errors = errsvc.get_all_errors()
1595
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3507
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3508
                for err in errors:
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3509
                    if isinstance(err.error_data[liberrsvc.ES_DATA_EXCEPTION],
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3510
                                  ShadowPhysical.SliceInUseError):
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3511
                        self.logger.debug("SliceInUseError - not fatal")
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3512
                        self.logger.debug("Error module ID: %s.. error " \
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3513
                                          "type: %s" % (err.get_mod_id(),\
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3514
                                          str(err.get_error_type())))
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3515
                        self.logger.debug("Exception value: %s" % \
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3516
                            err.error_data[liberrsvc.ES_DATA_EXCEPTION].value)
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3517
                    else:
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3518
                        self.logger.error("Error module ID: %s.. error " \
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3519
                                          "type: %s" % (err.get_mod_id(),\
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3520
                                          str(err.get_error_type())))
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3521
                        self.logger.error("Error class: %r" % \
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3522
                                  err.error_data[liberrsvc.ES_DATA_EXCEPTION])
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3523
                        self.logger.error("Exception value: %s" % \
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3524
                            err.error_data[liberrsvc.ES_DATA_EXCEPTION].value)
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3525
                        raise SelectionError("Final Validation Failed. See "
2effcc9ee20b 7143082 In Solaris11 AI, specifying <disk whole_disk="true"> in ai_manifest will not wipe out disk
nirmal27<Nirmal.Agarwal@oracle.com>
parents: 1536
diff changeset
  3526
                             "install_log for more details.")
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3527
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3528
        return new_desired_target
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3529
1252
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  3530
    def select_targets(self, from_manifest, discovered, dry_run=False):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3531
        '''The starting point for selecting targets.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3532
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3533
           Arguments:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3534
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3535
           - from_manifest: A referents to a list of target objects that were
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3536
                            imported from the manifest.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3537
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3538
           - discovered:    A reference to the root node of the discovered
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3539
                            targets.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3540
1252
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  3541
           - dry_run:       Target Selection dry_run indicator. Mainly used
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  3542
                            by unit tests.
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  3543
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3544
           If there are no targets in the manifest, we will defer to Target
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3545
           Controller to do the selection of the disk to install to.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3546
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3547
           If there are targets, we will process them by traversing the tree
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3548
           using _handle_XXXX methods for each object type.
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3549
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3550
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3551
        if discovered is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3552
            raise SelectionError("No installation targets found.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3553
1252
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  3554
        self.dry_run = 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: 1323
diff changeset
  3555
        self.controller._dry_run = self.dry_run
1252
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  3556
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3557
        # Store list of discovered disks
1197
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
  3558
        self._discovered_disks = discovered.get_children(class_type=Disk)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3559
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3560
        # Store list of discovered zpools
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3561
        self._discovered_zpools = discovered.get_descendants(class_type=Zpool)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3562
        if len(self._discovered_zpools) > 0:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3563
            # Store map of devices on discovered zpools
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3564
            self._discovered_zpool_map = self._get_existing_zpool_map()
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3565
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3566
        if len(self._discovered_disks) == 0:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3567
            raise SelectionError("No installation target disks found.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3568
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3569
        if from_manifest:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3570
            self.logger.debug("from_manifest =\n%s\n" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3571
                              (str(from_manifest[0])))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3572
        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3573
            self.logger.debug("from_manifest = NONE\n")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3574
        self.logger.debug("discovered =\n%s\n" % (str(discovered)))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3575
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3576
        # Check if all Targets have children
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3577
        targets_have_children = False
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3578
        if from_manifest:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3579
            for target in from_manifest:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3580
                if target.has_children:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3581
                    targets_have_children = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3582
                    break
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3583
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3584
        selected_disks = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3585
        new_target = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3586
        if from_manifest is None or not targets_have_children:
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: 1323
diff changeset
  3587
            # Default to TargetController's automatic mechanism.
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: 1323
diff changeset
  3588
            # Initial disks returned here have been added to the desired tree.
1252
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  3589
            initial_disks = self.controller.initialize(
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  3590
                unique_zpool_name=not self.dry_run)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3591
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3592
            # Occasionally initialize fails to select a disk because
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3593
            # it cannot find a slice large enough to install to, however
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3594
            # we are using whole disk, so just find first one large enough
1197
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
  3595
            if not initial_disks:
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: 1323
diff changeset
  3596
                # select_initial_disk returns a direct reference to the
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: 1323
diff changeset
  3597
                # discovered tree, make a copy of the returned object to
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: 1323
diff changeset
  3598
                # ensure we don't change the discovered disk object
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: 1323
diff changeset
  3599
                initial_disks = copy.copy(
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: 1323
diff changeset
  3600
                    self.controller.select_initial_disk())
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3601
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3602
            self.logger.info("Selected Disk(s) : %s" % \
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3603
                (self._pretty_print_disk(initial_disks)))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3604
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: 1323
diff changeset
  3605
            # Add selected disks to the desired tree, using controller.
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3606
            # Ensure whole-disk is selected for each disk.
1197
41dc6c86a4c3 7020411 support in TD/TI for interfaces that provide CRO information in libdevinfo
Drew Fisher <drew.fisher@oracle.com>
parents: 1177
diff changeset
  3607
            selected_disks = self.controller.select_disk(initial_disks,
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3608
                use_whole_disk=True)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3609
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3610
            # Target Controller will insert default root pool need to
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3611
            # Set this for validation of name later on
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3612
            self._is_generated_root_pool = True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3613
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3614
            # Target Controller is not setting the mountpoint for the default
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3615
            # BE so need to set it here just in case.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3616
            # Also getting the desired tree and doing some validation here
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3617
            # seems like a good idea too.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3618
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3619
            # As desired tree has been configured, makes sense to fill out
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3620
            # The internal maps, and call various validate functions, doing
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3621
            # this ensure both target controller and target selection are
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3622
            # populating the desired tree in the same manner.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3623
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3624
            existing_desired = \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3625
                self.doc.persistent.get_first_child(Target.DESIRED)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3626
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3627
            if existing_desired:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3628
                # Traverse Logicals until we get the BE
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3629
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3630
                self.logger.debug("No targets specified in Manifest, "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3631
                    "Target Controller has selected default target.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3632
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3633
                self.logger.debug("Target Controller Pre-Desired : \n%s\n" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3634
                    (str(existing_desired)))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3635
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3636
                self.logger.debug("Target Selection ensuring BE "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3637
                    "mountpoint set to '%s'." % (self.be_mountpoint))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3638
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3639
                # Get New Logical sections
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3640
                logicals = existing_desired.get_children(class_type=Logical)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3641
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3642
                # Update logical maps and set be mountpoint
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3643
                if logicals is not None and logicals:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3644
                    be = None
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3645
                    for logical in logicals:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3646
                        # A logical may have been specified just for
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3647
                        # the purposes of noswap and nodump, ensure
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3648
                        # This information is passed onto handle_logical
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3649
                        if self._nozpools:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3650
                            logical.noswap = self._noswap
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3651
                            logical.nodump = self._nodump
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3652
                        # No need to insert into new_desired, already there
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3653
                        self._handle_logical(logical)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3654
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3655
                        # Get BE object from root pool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3656
                        for zpool in \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3657
                                [z for z in logical.children if z.is_root]:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3658
                            be = zpool.get_first_child(class_type=BE)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3659
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3660
                if be is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3661
                    self.logger.debug("Setting BE mountpoint to '%s'" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3662
                        (self.be_mountpoint))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3663
                    be.mountpoint = self.be_mountpoint
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3664
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3665
                self._add_disks_to_map(selected_disks)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3666
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3667
                # As TC has configured the logical section we also need
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3668
                # to ensure swap and dump zvols exist if required.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3669
                self.logger.debug("Target Selection ensuring swap/dump "
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3670
                    "configured if required.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3671
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3672
                self._validate_swap_and_dump(existing_desired)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3673
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3674
                # Validate logical/disk portions of desired tree
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3675
                self._validate_logical(existing_desired)
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3676
                self._validate_disks(existing_desired)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3677
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3678
                self.logger.debug("Target Controller Post-Desired : \n%s\n" %
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3679
                    (str(existing_desired)))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3680
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3681
        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3682
            # Can't rely on TargetController much here, so perform own
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3683
            # selections and interpret values from the manifest.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3684
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3685
            if from_manifest:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3686
                # The AI DTD only allows for one <target> element.
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3687
                new_target = self._handle_target(from_manifest[0])
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3688
                if new_target is not None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3689
                    # Got a new DESIRED tree, so add to DOC
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3690
                    existing_desired = \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3691
                        self.doc.persistent.get_first_child(Target.DESIRED)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3692
                    if existing_desired:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3693
                        self.doc.persistent.delete_children(existing_desired)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3694
                    self.doc.persistent.insert_children(new_target)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3695
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3696
        if not selected_disks and not new_target:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3697
            raise SelectionError("Unable to find suitable target for install.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3698
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3699
        self.logger.debug("Selected disk(s): %s" % (repr(selected_disks)))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3700
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3701
    def _check_valid_zpool_vdev(self, disk):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3702
        '''Check that disk refers to known zpool and/or vdev
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3703
           Will raise an SelectionError exception if anything is wrong.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3704
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3705
        if disk.in_zpool is not None and len(disk.in_zpool) > 0:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3706
            if disk.in_zpool not in self._zpool_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3707
                raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3708
                    "Disk %s specifies non-existent in_zpool: %s"
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3709
                    % (self._pretty_print_disk(disk), disk.in_zpool))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3710
            # Limit vdev match to specific zpool
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3711
            zpool_list_to_match = [disk.in_zpool]
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3712
        else:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3713
            # Need to compare vdev to all known zpools.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3714
            zpool_list_to_match = self._zpool_map.keys()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3715
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3716
        # If only specify vdev, then try see if it exists
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3717
        # as a vdev in one of the known zpools
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3718
        if disk.in_vdev is not None and len(disk.in_vdev) > 0:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3719
            vdev_matches = 0
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3720
            for zpool in zpool_list_to_match:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3721
                vdev_id = "%s:%s" % \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3722
                    (zpool, disk.in_vdev)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3723
                if vdev_id in self._vdev_map:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3724
                    vdev_matches += 1
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3725
            if vdev_matches == 0:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3726
                raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3727
                    "Disk %s specifies non-existent in_vdev: %s"
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3728
                    % (self._pretty_print_disk(disk), disk.in_vdev))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3729
            elif vdev_matches > 1:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3730
                raise SelectionError(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3731
                    "Disk %s specifies non-unique in_vdev: %s"
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3732
                    % (self._pretty_print_disk(disk), disk.in_vdev))
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3733
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3734
        # TODO : If disk.in_zpool and disk.in_vdev are none, should we
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3735
        # be checking the children here
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3736
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3737
        # If we got this far we're ok, otherwise an exception will be raised.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3738
        return True
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3739
1623
cb56a2fb4925 PSARC 2012/074 UEFI/GRUB2/Large Disk Boot (UGLDB) (Install phase II):
Niall Power <niall.power@oracle.com>
parents: 1606
diff changeset
  3740
    def _get_new_desired_target(self):
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3741
        '''Create a new DESIRED tree using Target Controller
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3742
           initialize which performs the following :
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3743
           - Sets minimum_target_size
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3744
           - deletes any existing desired tree
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3745
           - Calls Target(Target.DESIRED)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3746
           - Inserts Desired into DOC
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3747
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3748
        new_desired_target = \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3749
            self.doc.persistent.get_first_child(Target.DESIRED)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3750
        if new_desired_target is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3751
            self.controller.initialize(no_initial_logical=True,
1252
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  3752
                                       unique_zpool_name=not self.dry_run)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3753
            new_desired_target = \
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3754
                self.doc.persistent.get_first_child(Target.DESIRED)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3755
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3756
        if new_desired_target is None:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3757
            raise SelectionError("Failed to create new DESIRED tree.")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3758
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3759
        return new_desired_target
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3760
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3761
    def parse_doc(self):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3762
        '''Method for locating objects in the  data object cache (DOC) for
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3763
           use by the checkpoint.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3764
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3765
           Will return a tuple of Data Object references for the Targets:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3766
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3767
           (from_manifest, discovered)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3768
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3769
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3770
        from_manifest = self.doc.find_path(
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3771
            "//[@solaris_install.auto_install.ai_instance.AIInstance?2]"
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3772
            "//[@solaris_install.target.Target?2]")
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3773
        discovered = self.doc.persistent.get_first_child(Target.DISCOVERED)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3774
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3775
        return (from_manifest, discovered)
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3776
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3777
    # Implement AbstractCheckpoint methods.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3778
    def get_progress_estimate(self):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3779
        '''Returns an estimate of the time this checkpoint will take
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3780
        '''
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3781
        return 3
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3782
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3783
    def execute(self, dry_run=False):
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3784
        '''Primary execution method used by the Checkpoint parent class
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3785
           to select the targets during an install.
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3786
        '''
1606
363231223160 7097012 AI should output to /dev/console as well as /system/volatile/install_log
John Fischer <john.fischer@oracle.com>
parents: 1595
diff changeset
  3787
        self.logger.debug("=== Executing Target Selection Checkpoint ==")
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3788
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3789
        try:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3790
            (from_manifest, discovered) = self.parse_doc()
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3791
1252
131154a3dcbe 7061408 TargetSelection should not fail if zpool directory exists when running unit tests
Matt Keenan <matt.keenan@oracle.com>
parents: 1247
diff changeset
  3792
            self.select_targets(from_manifest, discovered, dry_run)
1151
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3793
        except Exception:
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3794
            self.logger.debug("%s" % (traceback.format_exc()))
95413393ef67 7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
diff changeset
  3795
            raise