usr/src/cmd/ai-webserver/publish_manifest.py
author Sue Sohn <Susan.Sohn@Oracle.COM>
Fri, 20 Aug 2010 11:31:18 -0600
changeset 862 e9f31f2f2f2d
parent 772 usr/src/cmd/ai-webserver/publish-manifest.py@402b6c262e9d
child 906 1293ecd7e911
permissions -rw-r--r--
16423 Updates to AI schema should be made 15449 installadm add validates combined manifest against image-specific schema as well as schema in /usr/share/auto_install/ 6975043 separate criteria and ai manifest 6975686 installadm list shows value rather than range if lower bound is 0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
     1
#!/usr/bin/python2.6
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
     2
#
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
     3
# CDDL HEADER START
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
     4
#
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
     8
#
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    11
# See the License for the specific language governing permissions
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    12
# and limitations under the License.
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    13
#
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    19
#
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    20
# CDDL HEADER END
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    21
#
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    22
# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    23
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    24
"""
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    25
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
    26
A/I Publish_Manifest
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    27
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    28
"""
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    29
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    30
import os.path
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    31
import sys
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    32
import StringIO
314
065a1f30bfda 4110 - A/I Python code needs to use gettext() more cleanly
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 302
diff changeset
    33
import gettext
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
    34
import lxml.etree
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
    35
import hashlib
625
b9566ecaa511 11933 - AI install issue with nightly build of 10/12 with the fix of 4152.
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 617
diff changeset
    36
from optparse import OptionParser
b9566ecaa511 11933 - AI install issue with nightly build of 10/12 with the fix of 4152.
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 617
diff changeset
    37
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
    38
import osol_install.auto_install.AI_database as AIdb
625
b9566ecaa511 11933 - AI install issue with nightly build of 10/12 with the fix of 4152.
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 617
diff changeset
    39
import osol_install.auto_install.verifyXML as verifyXML
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
    40
import osol_install.libaiscf as smf
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    41
523
9abfbbe9b302 4325 Better syntactic treatment of IP and MAC address AI criteria
Jack Schwartz <Jack.A.Schwartz@Sun.COM>
parents: 475
diff changeset
    42
INFINITY = str(0xFFFFFFFFFFFFFFFF)
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    43
IMG_AI_MANIFEST_DTD = "auto_install/ai.dtd"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    44
SYS_AI_MANIFEST_DTD = "/usr/share/auto_install/ai.dtd"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    45
677
6d71cbed2556 13518 'installadm add' does not validate against AI schema from the image
Jan Damborsky <jan.damborsky@sun.com>
parents: 670
diff changeset
    46
IMG_AI_MANIFEST_SCHEMA = "auto_install/ai_manifest.rng"
523
9abfbbe9b302 4325 Better syntactic treatment of IP and MAC address AI criteria
Jack Schwartz <Jack.A.Schwartz@Sun.COM>
parents: 475
diff changeset
    47
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    48
def parse_options(cmd_options=None):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
    49
    """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
    50
    Parse and validate options
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    51
    Args: Optional cmd_options, used for unit testing. Otherwise, cmd line
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    52
          options handled by OptionParser
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
    53
    Returns: the DataFiles object populated and initialized
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
    54
    Raises: The DataFiles initialization of manifest(s) A/I, SC, SMF looks for
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
    55
            many error conditions and, when caught, are flagged to the user
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
    56
            via raising SystemExit exceptions.
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
    57
    """
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    58
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    59
    usage = _("usage: %prog -n service_name -m AI_manifest"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    60
              " [-c <criteria=value|range> ... | -C criteria_file]")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    61
    parser = OptionParser(usage=usage, prog="add-manifest")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    62
    parser.add_option("-c", dest="criteria_c", action="append",
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    63
                      default=[], help=_("Specify criteria: "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    64
                      "<-c criteria=value|range> ..."))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    65
    parser.add_option("-C",  dest="criteria_file",
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    66
                      default=None, help=_("Specify name of criteria "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    67
                      "XML file."))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    68
    parser.add_option("-m",  dest="manifest_path",
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    69
                      default=None, help=_("Specify name of manifest "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    70
                      "to set criteria for."))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    71
    parser.add_option("-n",  dest="service_name",
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    72
                      default=None, help=_("Specify name of install "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    73
                      "service."))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    74
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    75
    # Get the parsed options using parse_args().  We know we don't have
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    76
    # args, so we're just grabbing the first item of the tuple returned.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    77
    options, args = parser.parse_args(cmd_options)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    78
    if len(args):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    79
        parser.error(_("Unexpected arguments: %s" % args))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    80
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    81
    # options are:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    82
    #    -c  criteria=<value/range> ...
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    83
    #    -C  XML file with criteria specified
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    84
    #    -n  service name
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    85
    #    -m  manifest path to work with
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
    86
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
    87
    # check that we got the install service's name and
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    88
    # an AI manifest
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    89
    if options.manifest_path is None or options.service_name is None:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    90
        parser.error(_("Missing one or more required options."))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    91
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    92
    # check that we aren't mixing -c and -C
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    93
    if (options.criteria_c and options.criteria_file):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    94
        parser.error(_("Options used are mutually exclusive."))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    95
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    96
    # if we have criteria from cmd line, convert into dictionary
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    97
    criteria_dict = None
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    98
    if options.criteria_c:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
    99
        try:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   100
            criteria_dict = criteria_to_dict(options.criteria_c)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   101
        except ValueError as err:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   102
            parser.error(err)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   103
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   104
    if options.criteria_file:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   105
        if not os.path.exists(options.criteria_file):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   106
            parser.error(_("Unable to find criteria file: %s") % 
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   107
                         options.criteria_file)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   108
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   109
    # get an AIservice object for requested service
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   110
    try:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   111
        svc = smf.AIservice(smf.AISCF(FMRI="system/install/server"),
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   112
                            options.service_name)
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   113
    except KeyError:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   114
        parser.error(_("Failed to find service %s") % options.service_name)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   115
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   116
    # get the service's data directory path and imagepath
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   117
    try:
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   118
        image_path = svc['image_path']
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   119
        # txt_record is of the form "aiwebserver=example:46503" so split
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   120
	# on ":" and take the trailing portion for the port number
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   121
        port = svc['txt_record'].rsplit(':')[-1]
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   122
    except KeyError, err:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   123
        parser.error(_("SMF data for service %s is corrupt. Missing "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   124
                       "property: %s\n") % (options.service_name, err))
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   125
    service_dir = os.path.abspath("/var/ai/" + port)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   126
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   127
    # check that the service and imagepath directories exist,
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   128
    # and the AI.db, criteria_schema.rng and ai_manifest.rng files
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   129
    # are present otherwise the service is misconfigured
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   130
    if not (os.path.isdir(service_dir) and
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   131
            os.path.exists(os.path.join(service_dir, "AI.db"))):
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   132
        parser.error("Need a valid A/I service directory")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   133
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   134
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   135
    try:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   136
        files = DataFiles(service_dir=service_dir, image_path=image_path,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   137
                      database_path=os.path.join(service_dir, "AI.db"),
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   138
                      manifest_file=options.manifest_path,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   139
                      criteria_dict=criteria_dict,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   140
                      criteria_file=options.criteria_file)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   141
    except (AssertionError, IOError, ValueError) as err:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   142
        raise SystemExit(err)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   143
    except (lxml.etree.LxmlError) as err:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   144
        raise SystemExit(_("Error:\tmanifest error: %s") % err)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   145
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   146
    return(files)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   147
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   148
def criteria_to_dict(criteria):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   149
    """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   150
    Convert criteria list into dictionary. This function is intended to be
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   151
    called by a main function, or the options parser, so it can potentially
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   152
    raise the SystemExit exception.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   153
    Args: criteria in list format: [ criteria=value, criteria=value, ... ]
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   154
          where value can be a:  single value
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   155
                                 range (<lower>-<upper>)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   156
    Returns: dictionary of criteria { criteria: value, criteria: value, ... }
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   157
             with all keys and values in lower case
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   158
    Raises: ValueError on malformed name=value strings in input list.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   159
    """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   160
    cri_dict = {}
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   161
    for entry in criteria:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   162
        entries = entry.lower().partition("=")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   163
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   164
        if entries[1]:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   165
            if not entries[0]:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   166
                raise ValueError(_("Missing criteria name in "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   167
                                   "'%s'\n") % entry)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   168
            elif entries[0] in cri_dict:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   169
                raise ValueError(_("Duplicate criteria: '%s'\n") %
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   170
                             entries[0])
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   171
            elif not entries[2]:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   172
                raise ValueError(_("Missing value for criteria "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   173
                                   "'%s'\n") % entries[0])
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   174
            cri_dict[entries[0]] = entries[2]
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   175
        else:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   176
            raise ValueError(_("Criteria must be of the form "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   177
                               "<criteria>=<value>\n"))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   178
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   179
    return cri_dict
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   180
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   181
def find_colliding_criteria(criteria, db, exclude_manifests=None):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   182
    """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   183
    Returns: A dictionary of colliding criteria with keys being manifest name
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   184
             and instance tuples and values being the DB column names which
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   185
             collided
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   186
    Args:    criteria - Criteria object holding the criteria that is to be
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   187
                        added/set for a manifest.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   188
             db - AI_database object for the install service.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   189
             exclude_manifests -A list of manifest names from DB to ignore.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   190
                                This arg is passed in when we're calling this
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   191
                                function to find criteria collisions for an
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   192
                                already published manifest.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   193
    Raises:  SystemExit if: criteria is not found in database
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   194
                            value is not valid for type (integer and hexadecimal
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   195
                            checks)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   196
                            range is improper
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   197
    """
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   198
    class Fields(object):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   199
        """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   200
        Define convenience indexes
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   201
        """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   202
        # manifest name is row index 0
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   203
        MANNAME = 0
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   204
        # manifest instance is row index 1
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   205
        MANINST = 1
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   206
        # criteria is row index 2 (when a single valued criteria)
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   207
        CRIT = 2
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   208
        # minimum criteria is row index 2 (when a range valued criteria)
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   209
        MINCRIT = 2
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   210
        # maximum criteria is row index 3 (when a range valued criteria)
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   211
        MAXCRIT = 3
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   212
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   213
    # collisions is a dictionary to hold keys of the form (manifest name,
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   214
    # instance) which will point to a comma-separated string of colliding
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   215
    # criteria
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   216
    collisions = dict()
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   217
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   218
    # verify each range criteria in the manifest is well formed and collect
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   219
    # collisions with database entries
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   220
    for crit in criteria:
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   221
        # gather this criteria's values from the manifest
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   222
        man_criterion = criteria[crit]
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   223
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   224
        # check "value" criteria here (check the criteria exists in DB, and
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   225
        # then find collisions)
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   226
        if isinstance(man_criterion, basestring):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   227
            # only check criteria in use in the DB
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   228
            if crit not in AIdb.getCriteria(db.getQueue(),
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   229
                                            onlyUsed=False, strip=False):
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   230
                raise SystemExit(_("Error:\tCriteria %s is not a " +
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   231
                                   "valid criteria!") % crit)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   232
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   233
            # get all values in the database for this criteria (and
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   234
            # manifest/instance pairs for each value)
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   235
            db_criteria = AIdb.getSpecificCriteria(
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   236
                db.getQueue(), crit, 
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   237
                provideManNameAndInstance=True,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   238
                excludeManifests=exclude_manifests)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   239
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   240
            # will iterate over a list of the form [manName, manInst, crit,
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   241
            # None]
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   242
            for row in db_criteria:
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   243
                # check if the database and manifest values differ
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   244
                if(str(row[Fields.CRIT]).lower() ==
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   245
		   str(man_criterion).lower()):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   246
                    # record manifest name, instance and criteria name
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   247
                    try:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   248
                        collisions[row[Fields.MANNAME],
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   249
                                   row[Fields.MANINST]] += crit + ","
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   250
                    except KeyError:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   251
                        collisions[row[Fields.MANNAME],
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   252
                                   row[Fields.MANINST]] = crit + ","
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   253
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   254
        # This is a range criteria.  (Check that ranges are valid, that
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   255
        # "unbounded" gets set to 0/+inf, ensure the criteria exists
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   256
        # in the DB, then look for collisions.)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   257
        else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   258
            # check for a properly ordered range (with unbounded being 0 or
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   259
            # Inf.) but ensure both are not unbounded
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   260
            if(
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   261
               # Check for a range of -inf to inf -- not a valid range
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   262
               (man_criterion[0] == "unbounded" and
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   263
                man_criterion[1] == "unbounded"
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   264
               ) or
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   265
               # Check min > max -- range order reversed
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   266
               (
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   267
                (man_criterion[0] != "unbounded" and
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   268
                 man_criterion[1] != "unbounded"
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   269
                ) and
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   270
                (man_criterion[0] > man_criterion[1])
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   271
               )
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   272
              ):
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   273
                raise SystemExit(_("Error:\tCriteria %s "
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   274
                                   "is not a valid range (MIN > MAX) or "
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   275
                                   "(MIN and MAX unbounded).") % crit)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   276
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   277
            # Clean-up NULL's and changed "unbounded"s to 0 and
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   278
            # really large numbers in case this Python does
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   279
            # not support IEEE754.  Note "unbounded"s are already
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   280
            # converted to lower case during manifest processing.
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   281
            if man_criterion[0] == "unbounded":
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   282
                man_criterion[0] = "0"
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   283
            if man_criterion[1] == "unbounded":
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   284
                man_criterion[1] = INFINITY
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   285
            if crit == "mac":
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   286
                # convert hex mac address (w/o colons) to a number
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   287
                try:
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   288
                    man_criterion[0] = long(str(man_criterion[0]).upper(), 16)
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   289
                    man_criterion[1] = long(str(man_criterion[1]).upper(), 16)
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   290
                except ValueError:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   291
                    raise SystemExit(_("Error:\tCriteria %s "
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   292
                                       "is not a valid hexadecimal value") %
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   293
                                     crit)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   294
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   295
            else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   296
                # this is a decimal value
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   297
                try:
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   298
                    man_criterion = [long(str(man_criterion[0]).upper()),
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   299
                                     long(str(man_criterion[1]).upper())]
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   300
                except ValueError:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   301
                    raise SystemExit(_("Error:\tCriteria %s "
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   302
                                       "is not a valid integer value") % crit)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   303
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   304
            # check to see that this criteria exists in the database columns
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   305
            if ('MIN' + crit not in AIdb.getCriteria(
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   306
                db.getQueue(), onlyUsed=False, strip=False))\
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   307
                and ('MAX' + crit not in AIdb.getCriteria(
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   308
                db.getQueue(), onlyUsed=False, strip=False)):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   309
                    raise SystemExit(_("Error:\tCriteria %s is not a "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   310
                                       "valid criteria!") % crit)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   311
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   312
            db_criteria = AIdb.getSpecificCriteria(
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   313
                db.getQueue(), 'MIN' + crit, 'MAX' + crit,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   314
                provideManNameAndInstance=True,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   315
                excludeManifests=exclude_manifests)
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   316
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   317
            # will iterate over a list of the form [manName, manInst, mincrit,
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   318
            # maxcrit]
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   319
            for row in db_criteria:
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   320
                # arbitrarily large number in case this Python does
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   321
                # not support IEEE754
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   322
                db_criterion = ["0", INFINITY]
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   323
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   324
                # now populate in valid database values (i.e. non-NULL values)
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   325
                if row[Fields.MINCRIT]:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   326
                    db_criterion[0] = row[Fields.MINCRIT]
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   327
                if row[Fields.MAXCRIT]:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   328
                    db_criterion[1] = row[Fields.MAXCRIT]
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   329
                if crit == "mac":
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   330
                    # use a hexadecimal conversion
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   331
                    db_criterion = [long(str(db_criterion[0]), 16),
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   332
                                    long(str(db_criterion[1]), 16)]
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   333
                else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   334
                    # these are decimal numbers
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   335
                    db_criterion = [long(str(db_criterion[0])),
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   336
                                    long(str(db_criterion[1]))]
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   337
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   338
                # these three criteria can determine if there's a range overlap
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   339
                if((man_criterion[1] >= db_criterion[0] and
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   340
                   db_criterion[1] >= man_criterion[0]) or
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   341
                   man_criterion[0] == db_criterion[1]):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   342
                    # range overlap so record the collision
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   343
                    try:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   344
                        collisions[row[Fields.MANNAME],
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   345
                                   row[Fields.MANINST]] += "MIN" + crit + ","
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   346
                        collisions[row[Fields.MANNAME],
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   347
                                   row[Fields.MANINST]] += "MAX" + crit + ","
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   348
                    except KeyError:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   349
                        collisions[row[Fields.MANNAME],
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   350
                                   row[Fields.MANINST]] = "MIN" + crit + ","
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   351
                        collisions[row[Fields.MANNAME],
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   352
                                   row[Fields.MANINST]] += "MAX" + crit + ","
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   353
    return collisions
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   354
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   355
def find_colliding_manifests(criteria, db, collisions, append_manifest=None):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   356
    """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   357
    For each manifest/instance pair in collisions check that the manifest
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   358
    criteria diverge (i.e. are not exactly the same) and that the ranges do not
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   359
    collide for ranges.
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   360
    Raises if: a range collides, or if the manifest has the same criteria as a
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   361
    manifest already in the database (SystemExit raised)
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   362
    Returns: Nothing
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   363
    Args: criteria - Criteria object holding the criteria that is to be
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   364
                     added/set for a manifest.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   365
          db - AI_database object for the install service.
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   366
          collisions - a dictionary with collisions, as produced by
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   367
                       find_colliding_criteria()
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   368
          append_manifest - name of manifest we're appending criteria to.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   369
                            This arg is passed in when we're calling this
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   370
                            function to find criteria collisions for an
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   371
                            already published manifest that we're appending
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   372
                            criteria to.
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   373
    """
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   374
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   375
    # If we're appending criteria to an already published manifest, get a
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   376
    # dictionary of the criteria that's already published for that manifest.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   377
    if append_manifest is not None:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   378
        published_criteria = AIdb.getManifestCriteria(append_manifest, 0,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   379
                                                      db.getQueue(),
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   380
                                                      humanOutput=True,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   381
                                                      onlyUsed=False)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   382
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   383
    # check every manifest in collisions to see if manifest collides (either
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   384
    # identical criteria, or overlaping ranges)
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   385
    for man_inst in collisions:
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   386
        # get all criteria from this manifest/instance pair
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   387
        db_criteria = AIdb.getManifestCriteria(man_inst[0],
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   388
                                               man_inst[1],
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   389
                                               db.getQueue(),
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   390
                                               humanOutput=True,
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   391
                                               onlyUsed=False)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   392
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   393
        # iterate over every criteria in the database
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   394
        for crit in AIdb.getCriteria(db.getQueue(),
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   395
                                     onlyUsed=False, strip=False):
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   396
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   397
            # Get the criteria name (i.e. no MIN or MAX)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   398
            crit_name = crit.replace('MIN', '', 1).replace('MAX', '', 1)
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   399
            # Set man_criterion to the key of the DB criteria or None
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   400
            man_criterion = criteria[crit_name]
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   401
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   402
            if man_criterion and crit.startswith('MIN'):
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   403
                man_criterion = man_criterion[0]
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   404
            elif man_criterion and crit.startswith('MAX'):
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   405
                man_criterion = man_criterion[1]
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   406
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   407
            # If man_criterion is still None, and if we're appending criteria
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   408
            # to an already published manifest, look for criteria in the
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   409
            # published set of criteria for the manifest we're appending to
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   410
            # as well, because existing criteria might cause a collision,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   411
            # which we need to compare for.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   412
            if man_criterion is None and append_manifest is not None:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   413
                man_criterion = published_criteria[str(crit)]
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   414
                # replace database NULL's with Python None
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   415
                if man_criterion == '':
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   416
                    man_criterion = None
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   417
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   418
            # set the database criteria
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   419
            if db_criteria[str(crit)] == '':
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   420
                # replace database NULL's with a Python None
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   421
                db_criterion = None
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   422
            else:
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   423
                db_criterion = db_criteria[str(crit)]
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   424
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   425
            # Replace unbounded's in the criteria (i.e. 0/+inf)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   426
            # with a Python None.
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   427
            if isinstance(man_criterion, basestring) and \
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   428
               man_criterion == "unbounded":
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   429
                man_criterion = None
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   430
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   431
            # check to determine if this is a range collision by using
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   432
            # collisions and if not are the manifests divergent
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   433
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   434
            if((crit.startswith('MIN') and
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   435
                collisions[man_inst].find(crit + ",") != -1) or
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   436
               (crit.startswith('MAX') and
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   437
                collisions[man_inst].find(crit + ",") != -1)
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   438
              ):
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   439
                if (str(db_criterion).lower() != str(man_criterion).lower()):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   440
                    raise SystemExit(_("Error:\tManifest has a range "
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   441
                                       "collision with manifest:%s/%i"
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   442
                                       "\n\tin criteria: %s!") %
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   443
                                     (man_inst[0], man_inst[1],
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   444
                                      crit.replace('MIN', '', 1).
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   445
                                      replace('MAX', '', 1)))
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   446
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   447
            # the range did not collide or this is a single value (if we
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   448
            # differ we can break out knowing we diverge for this
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   449
            # manifest/instance)
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   450
            elif(str(db_criterion).lower() != str(man_criterion).lower()):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   451
                # manifests diverge (they don't collide)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   452
                break
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   453
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   454
        # end of for loop and we never broke out (diverged)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   455
        else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   456
            raise SystemExit(_("Error:\tManifest has same criteria as " +
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   457
                               "manifest: %s/%i!") %
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   458
                             (man_inst[0], man_inst[1]))
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   459
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   460
def insert_SQL(files):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   461
    """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   462
    Ensures all data is properly sanitized and formatted, then inserts it into
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   463
    the database
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   464
    Args: None
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   465
    Returns: None
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   466
    """
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   467
    query = "INSERT INTO manifests VALUES("
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   468
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   469
    # add the manifest name to the query string
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   470
    query += "'" + AIdb.sanitizeSQL(files.manifest_name) + "',"
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   471
    # check to see if manifest name is alreay in database (affects instance
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   472
    # number)
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   473
    if AIdb.sanitizeSQL(files.manifest_name) in \
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   474
        AIdb.getManNames(files.database.getQueue()):
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   475
            # database already has this manifest name get the number of
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   476
            # instances
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   477
        instance = AIdb.numInstances(AIdb.sanitizeSQL(files.manifest_name),
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   478
                                     files.database.getQueue())
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   479
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   480
    # this a new manifest
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   481
    else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   482
        instance = 0
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   483
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   484
    # actually add the instance to the query string
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   485
    query += str(instance) + ","
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   486
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   487
    # we need to fill in the criteria or NULLs for each criteria the database
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   488
    # supports (so iterate over each criteria)
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   489
    for crit in AIdb.getCriteria(files.database.getQueue(),
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   490
                                 onlyUsed=False, strip=False):
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   491
        # for range values trigger on the MAX criteria (skip the MIN's
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   492
        # arbitrary as we handle rows in one pass)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   493
        if crit.startswith('MIN'):
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   494
            continue
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   495
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   496
        # get the values from the manifest
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   497
        values = files.criteria[crit.replace('MAX', '', 1)]
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   498
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   499
        # If the critera manifest didn't specify this criteria, fill in NULLs
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   500
        if values is None:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   501
            # use the criteria name to determine if this is a range
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   502
            if crit.startswith('MAX'):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   503
                query += "NULL,NULL,"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   504
            # this is a single value
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   505
            else:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   506
                query += "NULL,"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   507
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   508
        # this is a single criteria (not a range)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   509
        elif isinstance(values, basestring):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   510
            # translate "unbounded" to a database NULL
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   511
            if values == "unbounded":
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   512
                query += "NULL,"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   513
            else:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   514
                # use lower case for text strings
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   515
                query += "'" + AIdb.sanitizeSQL(str(values).lower()) + "',"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   516
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   517
        # else values is a range
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   518
        else:
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   519
            for value in values:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   520
                # translate "unbounded" to a database NULL
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   521
                if value == "unbounded":
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   522
                    query += "NULL,"
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   523
                # we need to deal with mac addresses specially being
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   524
                # hexadecimal
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   525
                elif crit.endswith("mac"):
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   526
                    # need to insert with hex operand x'<val>'
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   527
                    # use an upper case string for hex values
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   528
                    query += "x'" + AIdb.sanitizeSQL(str(value).upper())+"',"
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   529
                else:
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   530
                    query += AIdb.sanitizeSQL(str(value).upper()) + ","
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   531
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   532
    # strip trailing comma and close parentheses
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   533
    query = query[:-1] + ")"
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   534
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   535
    # update the database
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   536
    query = AIdb.DBrequest(query, commit=True)
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   537
    files.database.getQueue().put(query)
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   538
    query.waitAns()
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   539
    # in case there's an error call the response function (which will print the
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   540
    # error)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   541
    query.getResponse()
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   542
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   543
def do_default(files):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   544
    """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   545
    Removes old default.xml after ensuring proper format of new manifest
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   546
    (does not copy new manifest over -- see place_manifest)
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   547
    Args: None
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   548
    Returns: None
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   549
    Raises if: Manifest has criteria, old manifest can not be removed (exits
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   550
               with SystemExit)
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   551
    """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   552
    # check to see if any criteria is present -- if so, it can not be a default
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   553
    # manifest (as they do not have criteria)
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   554
    if files.criteria:
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   555
        raise SystemExit(_("Error:\tCan not use AI criteria in a default " +
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   556
                           "manifest"))
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   557
    # remove old manifest
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   558
    try:
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   559
        os.remove(os.path.join(files.get_service(), 'AI_data', 'default.xml'))
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   560
    except IOError, ioerr:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   561
        raise SystemExit(_("Error:\tUnable to remove default.xml:\n\t%s") %
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   562
                           ioerr)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   563
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   564
def place_manifest(files):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   565
    """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   566
    Compares src and dst manifests to ensure they are the same; if manifest
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   567
    does not yet exist, copies new manifest into place and sets correct
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   568
    permissions and ownership
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   569
    Args: files - DataFiles object holding all of the relevant and verified
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   570
                  information for the manifest we're publishing.
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   571
    Returns: None
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   572
    Raises if: src and dst manifests differ (in MD5 sum), unable to write dst
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   573
               manifest (raises SystemExit -- no clean up of database performed)
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   574
    """
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   575
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   576
    manifest_path = os.path.join(files.get_service(), "AI_data",
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   577
                                files.manifest_name)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   578
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   579
    if files.is_dtd:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   580
        root = files._AI_root
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   581
    else:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   582
        root = files._criteria_root
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   583
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   584
    # if the manifest already exists see if it is different from what was
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   585
    # passed in. If so, warn the user that we're using the existing manifest
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   586
    if os.path.exists(manifest_path):
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   587
        old_manifest = open(manifest_path, "r")
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   588
        existing_MD5 = hashlib.md5("".join(old_manifest.readlines())).digest()
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   589
        old_manifest.close()
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   590
        current_MD5 = hashlib.md5(lxml.etree.tostring(root,
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   591
                                 pretty_print=True, encoding=unicode)).digest()
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   592
        if existing_MD5 != current_MD5:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   593
            raise SystemExit(_("Error:\tNot copying manifest, source and "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   594
                               "current versions differ -- criteria in "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   595
                               "place."))
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   596
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   597
    # the manifest does not yet exist so write it out
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   598
    else:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   599
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   600
        # Remove all <ai_criteria> elements if they exist.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   601
        for tag in root.xpath('/ai_criteria_manifest/ai_criteria'):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   602
            tag.getparent().remove(tag)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   603
 
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   604
        try:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   605
            root.write(manifest_path, pretty_print=True)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   606
        except IOError as err:
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   607
            raise SystemExit(_("Error:\tUnable to write to dest. "
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   608
                               "manifest:\n\t%s") % err)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   609
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   610
    # change read and write for owner
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   611
    os.chmod(manifest_path, 0600)
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   612
    # change to user/group root (uid/gid 0)
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   613
    os.chown(manifest_path, 0, 0)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   614
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   615
def verifyCriteria(schema, criteria_path, db, is_dtd=True):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   616
    """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   617
    Used for verifying and loading criteria XML from a Criteria manifest,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   618
    which can be a combined Criteria manifest (for backwards compatibility
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   619
    in supporting older install services) or a criteria manifest with just
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   620
    criteria.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   621
    Args:       schema - path to schema file for criteria manifest.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   622
                criteria_path - path to criteria XML manifest file to verify.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   623
                db - database object for install service
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   624
                is_dtd - criteria file should contain criteria only, no
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   625
                         AI or SC manifest info
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   626
    Raises IOError:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   627
        *if the schema does not open
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   628
        *if the XML file does not open
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   629
    Raises ValueError:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   630
        *if the XML is invalid according to the schema or has a syntax error
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   631
    Returns:    A valid XML DOM of the criteria manifest and all MAC and IPV4
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   632
                values are formatted according to
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   633
                verifyXML.prepValuesAndRanges().
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   634
    """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   635
    schema = open(schema, 'r')
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   636
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   637
    # Remove AI and SC elements from within the Criteria manifests if
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   638
    # they exist.  We validate those separately later.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   639
    try:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   640
        crit = lxml.etree.parse(criteria_path)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   641
    except lxml.etree.XMLSyntaxError, err:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   642
        raise ValueError(_("Error: %s") % err.error_log.last_error)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   643
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   644
    ai_sc_list = list()
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   645
    ai_sc_paths = (".//ai_manifest_file", ".//ai_embedded_manifest",
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   646
                   ".//sc_manifest_file", ".//sc_embedded_manifest")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   647
    for path in ai_sc_paths:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   648
        elements = crit.iterfind(path)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   649
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   650
        for elem in elements:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   651
            if is_dtd:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   652
                raise ValueError(_("Error:\tCriteria file should not contain "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   653
                                   "AI or SC manifest tags: %s") %
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   654
                                 criteria_path)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   655
            ai_sc_list.append(elem)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   656
            elem.getparent().remove(elem)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   657
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   658
    # Verify the remaing DOM, which should only contain criteria
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   659
    root = (verifyXML.verifyRelaxNGManifest(schema,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   660
            StringIO.StringIO(lxml.etree.tostring(crit.getroot()))))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   661
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   662
    if isinstance(root, lxml.etree._LogEntry):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   663
        raise ValueError(_("Error:\tFile %s failed validation:\n\t%s") %
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   664
                         (criteria_path, root.message))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   665
    try:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   666
        verifyXML.prepValuesAndRanges(root, db)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   667
    except ValueError, err:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   668
        raise ValueError(_("Error:\tCriteria manifest error: %s") % err)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   669
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   670
    # Reinsert AI and SC elements back into the _criteria_root DOM.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   671
    for ai_sc_element in ai_sc_list:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   672
        root.getroot().append(ai_sc_element)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   673
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   674
    return root
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   675
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   676
def verifyCriteriaDict(schema, criteria_dict, db):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   677
    """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   678
    Used for verifying and loading criteria from a dictionary of criteria.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   679
    Args:       schema - path to schema file for criteria manifest.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   680
                criteria_dict - dictionary of criteria to verify, in the form
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   681
                                of { criteria: value, criteria: value, ... }
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   682
                db - database object for install service
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   683
    Raises IOError:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   684
               * if the schema does not open
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   685
           ValueError:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   686
                * if the criteria_dict dictionary is empty
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   687
                * if the XML is invalid according to the schema
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   688
           AssertionError:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   689
                * if a value in the dictionary is empty
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   690
    Returns:    A valid XML DOM of the criteria and all MAC and IPV4 values
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   691
                are formatted according to verifyXML.prepValuesAndRanges().
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   692
    """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   693
    schema = open(schema, 'r')
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   694
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   695
    if not criteria_dict:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   696
        raise ValueError("Error:\tCriteria dictionary empty: %s\n"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   697
                         % criteria_dict)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   698
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   699
    root = lxml.etree.Element("ai_criteria_manifest")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   700
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   701
    for name, value_or_range in criteria_dict.iteritems():
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   702
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   703
        if value_or_range is None:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   704
            raise AssertionError(_("Error: Missing value for criteria "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   705
                                   "'%s'") % name)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   706
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   707
        crit = lxml.etree.SubElement(root, "ai_criteria")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   708
        crit.set("name", name)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   709
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   710
        # If criteria is a range, split on "-" and add to
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   711
        # XML DOM as a range element.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   712
        if AIdb.isRangeCriteria(db.getQueue(), name):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   713
            # Split on "-"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   714
            range_value = value_or_range.split('-', 1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   715
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   716
            # If there was only a single value, means user specified
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   717
            # this range criteria as a single value, add it as a single
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   718
            # value
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   719
            if len(range_value) == 1:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   720
                value_elem = lxml.etree.SubElement(crit, "value")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   721
                value_elem.text = value_or_range
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   722
            else:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   723
                range_elem = lxml.etree.SubElement(crit, "range")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   724
                range_elem.text = " ".join(range_value)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   725
        else:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   726
            value_elem = lxml.etree.SubElement(crit, "value")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   727
            value_elem.text = value_or_range
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   728
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   729
    # Verify the generated criteria DOM
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   730
    root = verifyXML.verifyRelaxNGManifest(schema,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   731
                        StringIO.StringIO(lxml.etree.tostring(root)))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   732
    if isinstance(root, lxml.etree._LogEntry):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   733
        raise ValueError(_("Error: Criteria failed validation:\n\t%s") %
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   734
                           root.message)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   735
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   736
    try:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   737
        verifyXML.prepValuesAndRanges(root, db)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   738
    except ValueError, err:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   739
        raise ValueError(_("Error:\tCriteria error: %s") % err)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   740
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   741
    return root
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   742
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   743
# The criteria class is a list object with an overloaded get_item method
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   744
# to act like a dictionary, looking up values from an underlying XML DOM.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   745
class Criteria(list):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   746
    """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   747
    Wrap list class to provide lookups in the criteria file when requested
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   748
    """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   749
    def __init__(self, criteria_root):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   750
        # store the criteria manifest DOM root
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   751
        self._criteria_root = criteria_root
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   752
        # call the _init_() for the list class with a generator provided by
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   753
        # find_criteria() to populate this _criteria() instance.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   754
        super(Criteria, self).__init__(self.find_criteria())
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   755
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   756
    def find_criteria(self):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   757
        """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   758
        Find criteria from the criteria DOM.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   759
        Returns: A generator providing all criteria name attributes from
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   760
                 <ai_criteria> tags
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   761
        """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   762
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   763
        if self._criteria_root is None:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   764
            return
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   765
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   766
        root = self._criteria_root.findall(".//ai_criteria")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   767
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   768
        # actually find criteria
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   769
        for tag in root:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   770
            for child in tag.getchildren():
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   771
                if (child.tag == "range" or child.tag == "value") and \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   772
                    child.text is not None:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   773
                    # criteria names are lower case
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   774
                    yield tag.attrib['name'].lower()
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   775
                else:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   776
                    # should not happen according to schema
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   777
                    raise AssertionError(_("Criteria contains no values"))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   778
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   779
    def get_criterion(self, criterion):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   780
        """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   781
        Return criterion out of the criteria DOM
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   782
        Returns: A list for range criterion with a min and max entry
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   783
                 A string for value criterion
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   784
        """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   785
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   786
        if self._criteria_root is None:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   787
            return None
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   788
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   789
        source = self._criteria_root
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   790
        for tag in source.getiterator('ai_criteria'):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   791
            crit = tag.get('name')
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   792
            # compare criteria name case-insensitive
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   793
            if crit.lower() == criterion.lower():
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   794
                for child in tag.getchildren():
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   795
                    if child.tag == "range":
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   796
                        # this is a range response (split on white space)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   797
                        return child.text.split()
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   798
                    elif child.tag == "value":
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   799
                        # this is a value response (strip white space)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   800
                        return child.text.strip()
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   801
                    # should not happen according to schema
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   802
                    elif child.text is None:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   803
                        raise AssertionError(_("Criteria contains no values"))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   804
        return None
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   805
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   806
    """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   807
    Look up a requested criteria (akin to dictionary access) but for an
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   808
    uninitialized key will not raise an exception but return None)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   809
    """
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   810
    __getitem__ = get_criterion
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   811
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   812
    # disable trying to update criteria
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   813
    __setitem__ = None
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   814
    __delitem__ = None
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   815
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   816
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   817
class DataFiles(object):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   818
    """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   819
    Class to contain and work with data files necessary for program
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   820
    """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   821
    # schema for validating an AI criteria manifest
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   822
    criteriaSchema = "/usr/share/auto_install/criteria_schema.rng"
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   823
    # DTD for validating an SMF SC manifest
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   824
    smfDtd = "/usr/share/lib/xml/dtd/service_bundle.dtd.1"
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   825
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   826
    def __init__(self, service_dir=None, image_path=None,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   827
                 database_path=None, manifest_file=None,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   828
                 criteria_dict=None, criteria_file=None):
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   829
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   830
        """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   831
        Initialize DataFiles instance. All parameters optional, however, proper
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   832
        setup order asurred, if all data provided upon instantiation.
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   833
        """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   834
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   835
        #
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   836
        # State variables
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   837
        #################
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   838
        #
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   839
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   840
        # Variable to cache criteria class for criteria property
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   841
        self._criteria_cache = None
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   842
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   843
        # Holds path to AI manifest being published (may not be set if an
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   844
        # embedded manifest)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   845
        self._manifest = None
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   846
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   847
        self.criteria_dict = criteria_dict
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   848
        self.criteria_file = criteria_file
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   849
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   850
        # Flag to indicate we're operating with the newer AI DTD,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   851
        # or with the older AI rng schema
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   852
        self.is_dtd = True
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   853
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   854
        #
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   855
        # File system path variables
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   856
        ############################
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   857
        #
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   858
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   859
        # Check AI Criteria Schema exists
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   860
        if not os.path.exists(self.criteriaSchema):
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   861
            raise IOError(_("Error:\tUnable to find criteria_schema: " +
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   862
                            "%s") % self.criteriaSchema)
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   863
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   864
        # Check SC manifest SMF DTD exists
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   865
        if not os.path.exists(self.smfDtd):
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   866
            raise IOError(_("Error:\tUnable to find SMF system " +
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   867
                            "configuration DTD: %s") % self.smfDtd)
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   868
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   869
        # A/I Manifest Schema
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   870
        self._AIschema = None
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   871
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   872
        # Holds path to service directory (i.e. /var/ai/46501)
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   873
        self._service = None
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   874
        if service_dir:
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   875
            self.service = service_dir
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   876
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   877
        # Holds path to AI image
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   878
        self._imagepath = None
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   879
        if image_path:
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   880
            self.image_path = image_path
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   881
            # set the AI schema once image_path is set
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   882
            self.set_AI_schema()
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   883
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   884
        # Holds database object for criteria database
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   885
        self._db = None
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   886
        if database_path:
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   887
            # Set Database Path and Open SQLite3 Object
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   888
            self.database = database_path
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   889
            # verify the database's table/column structure (or exit if errors)
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   890
            self.database.verifyDBStructure()
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   891
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   892
        # Holds DOM for criteria manifest
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   893
        self._criteria_root = None
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   894
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   895
        # Determine if we're operating with the newer AI DTD,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   896
        # or with the older AI rng schema
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   897
        try:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   898
            lxml.etree.DTD(self.AI_schema)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   899
            self.is_dtd = True
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   900
        except lxml.etree.DTDParseError:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   901
            try:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   902
                lxml.etree.RelaxNG(file=self.AI_schema)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   903
                self.is_dtd = False
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   904
            except lxml.etree.RelaxNGParseError:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   905
                raise ValueError(_("Error: Unable to determine AI manifest "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   906
                                   "validation type.\n"))
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   907
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   908
        # Verify the AI manifest to make sure its valid
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   909
        if self.is_dtd:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   910
            self._manifest = manifest_file
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   911
            self.verify_AI_manifest()
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   912
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   913
            # Holds DOMs for SC manifests
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   914
            self._smfDict = dict()
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   915
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   916
            # Look for a SC manifests specified within the manifest file
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   917
            # sets _smfDict DOMs
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   918
            self.find_SC_from_manifest(self._AI_root, self.manifest_path)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   919
        else:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   920
            # Holds path for manifest file (if reference to AI manifest URI
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   921
            # found inside the combined Criteria manifest)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   922
            self._manifest = None
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   923
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   924
            self.criteria_path = manifest_file
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   925
            self._criteria_root = verifyCriteria(self.criteriaSchema,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   926
                                                 self.criteria_path,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   927
                                                 self.database,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   928
                                                 is_dtd=self.is_dtd)
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   929
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   930
            # Holds DOM for AI manifest
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   931
            self._AI_root = None
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   932
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   933
            # Since we were provided a combined criteria manifest, look for
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   934
            # an A/I manifest specified by the criteria manifest
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   935
            if self._criteria_root:
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   936
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   937
                # This will set _manifest to be the AI manifest path (if a
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   938
                # file), or set _AI_root to the correct location in the
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   939
                # criteria DOM (if embedded), or exit (if unable to find an
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   940
                # AI manifest)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   941
                self.find_AI_from_criteria()
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   942
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   943
                # This will parse _manifest (if it was set from above), load
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   944
                # it into an XML DOM and set _AI_root to it.  The _AI_root DOM
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   945
                # will then be verified.  The function will exit on error.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   946
                self.verify_AI_manifest()
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   947
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   948
                # Holds DOMs for SC manifests
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   949
                self._smfDict = dict()
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
   950
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   951
                # Look for a SC manifests specified within the manifest file
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   952
                # sets _smfDict DOMs
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   953
                self.find_SC_from_manifest(self._criteria_root,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   954
                                           self.criteria_path)
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   955
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   956
        # Process criteria from -c, or -C.  This will setup _criteria_root
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   957
        # as a DOM and will overwrite the DOM from criteria found in a
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   958
        # combined Criteria manifest.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   959
        if self.criteria_file:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   960
            self.criteria_path = self.criteria_file
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   961
            root = verifyCriteria(self.criteriaSchema, self.criteria_path,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   962
                                  self.database, is_dtd=self.is_dtd)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   963
            # Set this criteria into _criteria_root
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   964
            self.set_criteria_root(root)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   965
        elif self.criteria_dict:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   966
            root = verifyCriteriaDict(self.criteriaSchema, self.criteria_dict,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   967
                                      self.database)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   968
            # Set this criteria into _criteria_root
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   969
            self.set_criteria_root(root)
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   970
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   971
    @property
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   972
    def criteria(self):
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   973
        """
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   974
        Function to provide access to criteria class (and provide caching of
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   975
        class created)
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   976
        Returns: A criteria instance
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   977
        """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   978
        # if we don't have a cached _criteria class, create one and update the
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   979
        # cache
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   980
        if not self._criteria_cache:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
   981
            self._criteria_cache = Criteria(self._criteria_root)
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   982
        # now return cached _criteria class
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   983
        return self._criteria_cache
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   984
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   985
    def open_database(self, db_file):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   986
        """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   987
        Sets self._db (opens database object) and errors if already set or file
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   988
        does not yet exist
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   989
        Args: A file path to an SQLite3 database
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   990
        Raises: SystemExit if path does not exist,
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   991
                AssertionError if self._db is already set
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   992
        Returns: Nothing
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   993
        """
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   994
        if not os.path.exists(db_file):
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   995
            raise SystemExit(_("Error:\tFile %s is not a valid database "
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   996
                               "file") % db_file)
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
   997
        elif self._db is None:
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
   998
            self._db = AIdb.DB(db_file, commit=True)
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
   999
        else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1000
            raise AssertionError('Opening database when already open!')
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
  1001
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1002
    def get_database(self):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1003
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1004
        Returns self._db (database object) and errors if not set
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1005
        Raises: AssertionError if self._db is not yet set
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1006
        Returns: SQLite3 database object
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1007
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1008
        if isinstance(self._db, AIdb.DB):
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1009
            return(self._db)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1010
        else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1011
            raise AssertionError('Database not yet open!')
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
  1012
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1013
    database = property(get_database, open_database, None,
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1014
                        "Holds database object for criteria database")
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1015
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1016
    def get_service(self):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1017
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1018
        Returns self._service and errors if not yet set
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1019
        Raises: AssertionError if self._service is not yet set
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1020
        Returns: String object
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1021
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1022
        if self._service is not None:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1023
            return(self._service)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1024
        else:
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1025
            raise AssertionError('Service not yet set!')
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
  1026
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1027
    def set_service(self, serv=None):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1028
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1029
        Sets self._service and errors if already set
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1030
        Args: A string path to an AI service directory
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1031
        Raises: SystemExit if path does not exist,
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1032
                AssertionError if self._service is already set
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1033
        Returns: Nothing
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1034
        """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1035
        if not os.path.isdir(serv):
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1036
            raise SystemExit(_("Error:\tDirectory %s is not a valid AI "
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1037
                               "directory") % serv)
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1038
        elif self._service is None:
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1039
            self._service = os.path.abspath(serv)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1040
        else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1041
            raise AssertionError('Setting service when already set!')
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
  1042
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1043
    service = property(get_service, set_service, None,
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1044
                       "Holds path to service directory (i.e. /var/ai/46501)")
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1045
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1046
    def find_SC_from_manifest(self, manifest_root, manifest_path):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1047
        """
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1048
        Find SC manifests as referenced in the manifest file.  We search for
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1049
        embedded SC manifests first, then do a subsequent search for SC file
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1050
        references and expand them in-place in the manifest_root DOM, to be
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1051
        embedded SC manifests.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1052
        Preconditions: None
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1053
        Postconditions: self._smfDict will be a dictionary containing all
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1054
                        SC manifest DOMs
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1055
        Raises: AssertionError: - if manifest_root or manifest_path are not set
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1056
                                - if two SC manifests are named the same
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1057
        Args:   manifest_root - a valid XML DOM of the manifest from which
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1058
                                will find SC manifests.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1059
                manifest_path - a path to the file from which manifest_root
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1060
                        was created.
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1061
        Returns: None
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1062
        """
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1063
        root = manifest_root.iterfind(".//sc_embedded_manifest")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1064
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1065
        # For each SC manifest embedded: verify it, adding it to the
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1066
        # dictionary of SMF SC manifests
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1067
        for SC_man in root:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1068
            # strip the comments off the SC manifest
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1069
            xml_data = lxml.etree.tostring(SC_man.getchildren()[0])
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1070
            xml_data = xml_data.replace("<!-- ", "").replace("-->", "")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1071
            xml_data = StringIO.StringIO(xml_data)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1072
            # parse and read in the SC manifest
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1073
            self._smfDict[SC_man.attrib['name']] = \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1074
                self.verify_SC_manifest(xml_data, name=SC_man.attrib['name'])
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1075
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1076
        root = manifest_root.iterfind(".//sc_manifest_file")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1077
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1078
        # For each SC manifest file: get the URI and verify it, adding it to
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1079
        # the dictionary of SMF SC manifests (this means we can support a
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1080
        # manifest file with multiple SC manifests embedded or referenced)
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1081
        for SC_man in root:
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1082
            if SC_man.attrib['name'] in self._smfDict:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1083
                raise AssertionError(_("Error:\tTwo SC manifests with name %s")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1084
                                     % SC_man.attrib['name'])
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1085
            # if this is an absolute path just hand it off
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1086
            if os.path.isabs(str(SC_man.attrib['URI'])):
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1087
                self._smfDict[SC_man.attrib['name']] = \
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1088
                    self.verify_SC_manifest(SC_man.attrib['URI'])
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1089
            # this is not an absolute path - make it one
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1090
            else:
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1091
                self._smfDict[SC_man.attrib['name']] = \
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1092
                    self.verify_SC_manifest(os.path.join(os.path.dirname(
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1093
                                          manifest_path),
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1094
                                          SC_man.attrib['URI']))
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1095
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1096
            # Replace each SC manifest file element in the manifest root DOM
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1097
            # with an embedded manifest, using the content from its referenced
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1098
            # file, which has just been loaded into the _smfDict of SC DOMs.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1099
            old_sc = self._smfDict[SC_man.attrib['name']]
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1100
            new_sc = lxml.etree.Element("sc_embedded_manifest")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1101
            new_sc.set("name", SC_man.get("name"))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1102
            new_sc.text = "\n\t"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1103
            new_sc.tail = "\n"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1104
            embedded_sc = lxml.etree.Comment(" <?xml version='%s'?>\n\t"%
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1105
                        old_sc.docinfo.xml_version +
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1106
                        lxml.etree.tostring(old_sc, pretty_print=True,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1107
                                encoding=unicode, xml_declaration=False))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1108
            embedded_sc.tail = "\n"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1109
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1110
            new_sc.append(embedded_sc)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1111
            SC_man.getparent().replace(SC_man, new_sc)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1112
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
  1113
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1114
    def find_AI_from_criteria(self):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1115
        """
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1116
        Find AI manifest as referenced or embedded in a criteria manifest.
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1117
        Preconditions: self._criteria_root is a valid XML DOM
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1118
        Postconditions: self.manifest_path will be set if using a free-standing
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1119
                        AI manifest otherwise self._AI_root will be set to a
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1120
                        valid XML DOM for the AI manifest
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1121
        Raises: ValueError for XML processing errors
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1122
                           for no ai_manifest_file specification
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1123
                AssertionError if _criteria_root not set
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1124
        """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1125
        if self._criteria_root is None:
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1126
            raise AssertionError(_("Error:\t_criteria_root not set!"))
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1127
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1128
        # Try to find an embedded AI manifest.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1129
        root = self._criteria_root.find(".//ai_embedded_manifest")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1130
        if root is not None:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1131
            self._AI_root = root.find(".//ai_manifest")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1132
            if self._AI_root is not None:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1133
                return
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1134
            else:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1135
                raise ValueError(_("Error: <ai_embedded_manifest> missing "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1136
                                       "<ai_manifest>"))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1137
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1138
        # Try to find an AI manifest file reference.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1139
        root = self._criteria_root.find(".//ai_manifest_file")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1140
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1141
        if root is not None:
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1142
            try:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1143
                if os.path.isabs(root.attrib['URI']):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1144
                    self.manifest_path = root.attrib['URI']
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1145
                else:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1146
                    # if we do not have an absolute path try using the criteria
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1147
                    # manifest's location for a base
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1148
                    self.manifest_path = \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1149
                        os.path.join(os.path.dirname(self.criteria_path),
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1150
                                     root.attrib['URI'])
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1151
                return
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1152
            except KeyError:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1153
                raise ValueError(_("Error: <ai_manifest_file> missing URI"))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1154
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1155
        raise ValueError(_("Error: No <ai_manifest_file> or "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1156
                           "<ai_embedded_manifest> element in "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1157
                           "criteria manifest."))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1158
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1159
    @property
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1160
    def AI_schema(self):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1161
        """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1162
        Returns self._AIschema and errors if not yet set
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1163
        Args: None
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1164
        Raises: AssertionError if self._AIschema is not yet set
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1165
        Returns: String object
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1166
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1167
        if self._AIschema is not None:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1168
            return (self._AIschema)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1169
        else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1170
            raise AssertionError('AIschema not set')
536
ae182deb9b05 7986 AI should validate manifests against an install image's schema
Ethan Quach <Ethan.Quach@sun.com>
parents: 523
diff changeset
  1171
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1172
    def set_AI_schema(self):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1173
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1174
        Sets self._AIschema and errors if imagepath not yet set.
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1175
        Args: None
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1176
        Raises: SystemExit if unable to find a valid AI schema
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1177
        Returns: None
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1178
        """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1179
        if os.path.exists(os.path.join(self.image_path,
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1180
                                       IMG_AI_MANIFEST_DTD)):
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1181
            self._AIschema = os.path.join(self.image_path,
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1182
                                          IMG_AI_MANIFEST_DTD)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1183
        elif os.path.exists(os.path.join(self.image_path,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1184
                                         IMG_AI_MANIFEST_SCHEMA)):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1185
            self._AIschema = os.path.join(self.image_path,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1186
                                         IMG_AI_MANIFEST_SCHEMA)
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1187
        else:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1188
            if os.path.exists(SYS_AI_MANIFEST_DTD):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1189
                self._AIschema = SYS_AI_MANIFEST_DTD
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1190
                print (_("Warning: Using AI manifest dtd <%s>\n") %
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1191
                        self._AIschema)
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1192
            else:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1193
                raise SystemExit(_("Error:\tUnable to find an AI dtd!"))
536
ae182deb9b05 7986 AI should validate manifests against an install image's schema
Ethan Quach <Ethan.Quach@sun.com>
parents: 523
diff changeset
  1194
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1195
    def get_image_path(self):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1196
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1197
        Returns self._imagepath and errors if not set
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1198
        Raises: AssertionError if self._imagepath is not yet set
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1199
        Returns: String object
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1200
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1201
        if self._imagepath is not None:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1202
            return (self._imagepath)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1203
        else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1204
            raise AssertionError('Imagepath not set')
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1205
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1206
    def set_image_path(self, imagepath):
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1207
        """
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1208
        Sets self._imagepath but exits if already set or not a directory
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1209
        Args: image path to a valid AI image
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1210
        Raises: SystemExit if image path provided is not a directory
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1211
                AssertionError if image path is already set
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1212
        Returns: None
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1213
        """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1214
        if not os.path.isdir(imagepath):
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1215
            raise SystemExit(_("Error:\tInvalid imagepath " +
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1216
                               "directory: %s") % imagepath)
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1217
        if self._imagepath is None:
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1218
            self._imagepath = os.path.abspath(imagepath)
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1219
        else:
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1220
            raise AssertionError('imagepath already set')
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1221
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1222
    image_path = property(get_image_path, set_image_path, None,
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1223
                        "Holds path to service's AI image")
536
ae182deb9b05 7986 AI should validate manifests against an install image's schema
Ethan Quach <Ethan.Quach@sun.com>
parents: 523
diff changeset
  1224
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1225
    def get_manifest_path(self):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1226
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1227
        Returns self._manifest and errors if not set
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1228
        Raises: AssertionError if self._manifest is not yet set
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1229
        Returns: String object path to AI manifest
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1230
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1231
        if self._manifest is not None:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1232
            return(self._manifest)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1233
        else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1234
            raise AssertionError('Manifest path not yet set!')
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
  1235
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1236
    def set_manifest_path(self, mani=None):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1237
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1238
        Sets self._manifest and errors if already set
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1239
        Args: path to an AI manifest
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1240
        Raises: AssertionError if manifest is already set
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1241
        Returns: None
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1242
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1243
        if self._manifest is None:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1244
            self._manifest = os.path.abspath(mani)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1245
        else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1246
            raise AssertionError('Setting manifest when already set!')
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
  1247
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1248
    manifest_path = property(get_manifest_path, set_manifest_path, None,
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1249
                             "Holds path to AI manifest being published")
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1250
    @property
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1251
    def manifest_name(self):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1252
        """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1253
        Returns: manifest name as defined in the A/I manifest (ensuring .xml is
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1254
                 applied to the string)
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1255
        Raises: SystemExit if <ai_manifest> tag can not be found
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1256
        """
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1257
        if self._AI_root.getroot().tag == "ai_manifest":
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1258
            name = self._AI_root.getroot().attrib['name']
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1259
        elif self._AI_root.getroot().tag == "auto_install":
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1260
            try:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1261
                ai_instance = self._AI_root.find(".//ai_instance")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1262
            except lxml.etree.LxmlError, err:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1263
                raise SystemExit(_("Error:\tAI manifest error: %s") %err)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1264
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1265
            name = ai_instance.attrib['name']
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1266
        else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1267
            raise SystemExit(_("Error:\tCan not find <ai_manifest> tag!"))
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1268
        # everywhere we expect manifest names to be file names so ensure
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1269
        # the name matches
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1270
        if not name.endswith('.xml'):
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1271
            name += ".xml"
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1272
        return name
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
  1273
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1274
    def verify_AI_manifest(self):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1275
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1276
        Used for verifying and loading AI manifest as defined by
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1277
            DataFiles._AIschema.
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1278
        Args: None.
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1279
        Preconditions:  Expects its is_dtd variable to be set to determine
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1280
                        how to validate the AI manifest.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1281
        Postconditions: Sets _AI_root on success to a XML DOM of the AI
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1282
                        manifest.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1283
        Raises: IOError on file open error.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1284
                ValueError on validation error.
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1285
        """
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1286
        schema = file(self.AI_schema, 'r')
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1287
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1288
        try:
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1289
            xml_data = file(self.manifest_path, 'r')
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1290
        except AssertionError:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1291
            # manifest path will be unset if we're not using a separate file
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1292
            # for A/I manifest so we must emulate a file
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1293
            xml_data = StringIO.StringIO(lxml.etree.tostring(self._AI_root))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1294
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1295
        if self.is_dtd:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1296
            self._AI_root = verifyXML.verifyDTDManifest(xml_data,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1297
                                                        self.AI_schema)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1298
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1299
            if isinstance(self._AI_root, list):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1300
                err = '\n'.join(self._AI_root)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1301
                raise ValueError(_("Error: AI manifest failed validation:\n%s")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1302
                                 % err)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1303
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1304
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1305
        else:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1306
            self._AI_root = verifyXML.verifyRelaxNGManifest(schema, xml_data)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1307
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1308
            if isinstance(self._AI_root, lxml.etree._LogEntry):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1309
                # catch if we are not using a manifest we can name with
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1310
                # manifest_path
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1311
                try:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1312
                    # manifest_path is a property that may raise an
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1313
                    # AssertionError
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1314
                    man_path = self.manifest_path
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1315
                    raise ValueError(_("Error:\tFile %s failed validation:"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1316
                                 "\n\t%s") %
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1317
                                 (os.path.basename(man_path),
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1318
                                  self._AI_root.message))
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1319
                # manifest_path will throw an AssertionError if it does not
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1320
                # have a path use a different error message
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1321
                except AssertionError:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1322
                    raise ValueError(_("Error: AI manifest failed validation:"
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1323
                                   "\n\t%s") % self._AI_root.message)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
  1324
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1325
            # Replace the <ai_manifest_file> element (if one exists) with an
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1326
            # <ai_embedded_manifest> element, using content from its referenced
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1327
            # file which was just loaded into the _AI_root XML DOM
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1328
            ai_manifest_file = self._criteria_root.find(".//ai_manifest_file")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1329
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1330
            if ai_manifest_file is not None:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1331
                new_ai = lxml.etree.Element("ai_embedded_manifest")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1332
                # add newlines to separate ai_embedded_manifest 
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1333
                # from children
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1334
                new_ai.text = "\n\t"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1335
                new_ai.tail = "\n"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1336
                self._AI_root.getroot().tail = "\n"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1337
                new_ai.append(self._AI_root.getroot())
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1338
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1339
                ai_manifest_file.getparent().replace(ai_manifest_file, new_ai)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1340
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
  1341
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1342
    def verify_SC_manifest(self, data, name=None):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1343
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1344
        Used for verifying and loading SC manifest
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1345
        Args:    data - file path, or StringIO object.
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1346
                 name - Optionally, takes a name to provide error output,
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1347
                        as a StringIO object will not have a file path to
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1348
                        provide.
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1349
        Returns: Provide an XML DOM for the SC manifest
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1350
        Raises:  SystemExit on validation or file open error.
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1351
        """
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1352
        if not isinstance(data, StringIO.StringIO):
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1353
            try:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1354
                data = file(data, 'r')
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1355
            except IOError:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1356
                if name is None:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1357
                    raise SystemExit(_("Error:\tCan not open: %s") % data)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1358
                else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1359
                    raise SystemExit(_("Error:\tCan not open: %s") % name)
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1360
        xml_root = verifyXML.verifyDTDManifest(data, self.smfDtd)
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1361
        if isinstance(xml_root, list):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1362
            if not isinstance(data, StringIO.StringIO):
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1363
                print >> sys.stderr, (_("Error:\tFile %s failed validation:") %
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1364
                                      data.name)
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1365
            else:
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1366
                print >> sys.stderr, (_("Error:\tSC Manifest %s failed "
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1367
                                        "validation:") % name)
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1368
            for err in xml_root:
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1369
                print >> sys.stderr, err
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1370
            raise SystemExit()
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1371
        return(xml_root)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
  1372
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1373
    def set_criteria_root(self, root=None):
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1374
        """
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1375
        Used to set _criteria_root DOM with the criteria from the passed
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1376
        in root DOM.  If _criteria_root already exists, overwrite its
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1377
        <ai_criteria> elements with the criteria found in root.  If
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1378
        _criteria_root doesn't already exist, simply set the root DOM
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1379
        passed in as _criteria_root.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1380
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1381
        Args: root - A DOM for a criteria manifest
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1382
        Postconditions: _criteria_root will be set with a criteria manifest
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1383
                        DOM, or have its <ai_criteria> elements replaced with
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1384
                        the criteria from the root DOM passed in.
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1385
        """
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1386
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1387
        # If the _criteria_root is not yet set, set it to the root
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1388
        # DOM passed in.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1389
        if self._criteria_root is None:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1390
            self._criteria_root = root
523
9abfbbe9b302 4325 Better syntactic treatment of IP and MAC address AI criteria
Jack Schwartz <Jack.A.Schwartz@Sun.COM>
parents: 475
diff changeset
  1391
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1392
        # Else _criteria_root already exists (because this is being
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1393
        # called with an older install service where the manifest input
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1394
        # is a combined Criteria manifest), use the criteria specified
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1395
        # in 'root' to overwrite any criteria in _criteria_root.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1396
        else:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1397
            # Remove all <ai_criteria> elements if they exist.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1398
            removed_criteria = False
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1399
            path = '/ai_criteria_manifest/ai_criteria'
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1400
            for tag in self._criteria_root.xpath(path):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1401
                removed_criteria = True
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1402
                tag.getparent().remove(tag)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1403
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1404
            # If we removed a criteria from _criteria_root, this means
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1405
            # criteria was also specified in a combined Criteria manifest.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1406
            # Warn user that those will be ignored, and criteria specified 
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1407
            # on the command line via -c or -C override those.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1408
            if removed_criteria:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1409
                print("Warning: criteria specified in multiple places.\n"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1410
                      "  Ignoring criteria from combined Criteria manifest "
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1411
                      "file.\n")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1412
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1413
            # Append all criteria from the new criteria root.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1414
            ai_criteria = root.iterfind(".//ai_criteria")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1415
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1416
            self._criteria_root.getroot().extend(ai_criteria)
287
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
  1417
13cbbc65259c 3440 Need webserver for A/I support
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents:
diff changeset
  1418
if __name__ == '__main__':
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1419
    gettext.install("ai", "/usr/lib/locale")
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1420
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1421
    # check that we are root
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1422
    if os.geteuid() != 0:
772
402b6c262e9d 11510 create-client: accepts a SPARC image path for an X86 service
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 686
diff changeset
  1423
        raise SystemExit(_("Error:\tNeed root privileges to execute"))
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1424
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1425
    # load in all the options and file data
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1426
    data = parse_options()
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1427
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1428
    # if we have a default manifest do default manifest handling
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1429
    if data.manifest_name == "default.xml":
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1430
        do_default(data)
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1431
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1432
    # if we have a non-default manifest first ensure it is a unique criteria
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1433
    # set and then, if unique, add the manifest to the criteria database
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1434
    else:
670
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1435
        # if we have a None criteria from the criteria list then the manifest
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1436
        # has no criteria which is illegal for a non-default manifest
2565d2cc3a1c 12300 publish-manifest: needs to have correct usage message
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 649
diff changeset
  1437
        if not data.criteria:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1438
            raise SystemExit(_("Error:\tAt least one criterion must be " +
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1439
                               "provided with a non-default manifest."))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1440
        find_colliding_manifests(data.criteria, data.database,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents: 772
diff changeset
  1441
            find_colliding_criteria(data.criteria, data.database))
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1442
        insert_SQL(data)
630
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1443
354d968d3628 4318 - publish-manifest needs to error about no criteria in non-default manifests
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 625
diff changeset
  1444
    # move the manifest into place
649
ba353c37b287 12670 Change nested try/except in distro_const.py missed during 2.6 python porting
Clay Baenziger <ClayB@OpenSolaris.ORG>
parents: 630
diff changeset
  1445
    place_manifest(data)