usr/src/cmd/aimanifest/aimanifest.py
author Jack Schwartz <Jack.Schwartz@Oracle.COM>
Thu, 21 Apr 2011 12:16:26 -0700
changeset 1087 96b6cc8130c5
child 1309 a58fac510fb6
permissions -rw-r--r--
6994260 Implement Auto-Installer Derived Manifests 7033335 If root is the first user of InstallLogger, only root can use 7036438 update-manifest command needed 15491 installadm needs to list default custom manifests
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1087
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
     1
#!/usr/bin/python2.6
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
     2
#
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
     3
# CDDL HEADER START
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
     4
#
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
     8
#
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    11
# See the License for the specific language governing permissions
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    12
# and limitations under the License.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    13
#
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    19
#
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    20
# CDDL HEADER END
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    21
#
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    22
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    23
#
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    24
# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    25
#
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    26
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    27
"""
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    28
aimanifest.py: aimanifest commandline wrapper around Manifest Input Module
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    29
"""
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    30
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    31
import errno
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    32
import gettext
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    33
import logging
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    34
import os
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    35
import sys
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    36
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    37
from optparse import OptionParser
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    38
from traceback import print_exc
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    39
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    40
import solaris_install.manifest_input as milib
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    41
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    42
from solaris_install.logger import InstallLogger
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    43
from solaris_install.manifest_input.mim import ManifestInput
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    44
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    45
_ = gettext.translation('aimanifest', '/usr/share/locale',
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    46
                        fallback=True).gettext
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    47
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    48
AIM_LOGGER = None
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    49
SCHEMA_FILE = "/usr/share/install/ai.dtd"
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    50
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    51
VALIDATE = True
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    52
NO_VALIDATE = False
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    53
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    54
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    55
class AimOptionParser(OptionParser):
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    56
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    57
    OptionParser which provides error_w_errno() to return a more correct errno
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    58
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    59
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    60
    def error_w_errno(self, errnum, message):
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    61
        '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    62
        Log and display a message, and exit with errnum status
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    63
        '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    64
        AIM_LOGGER.error(message)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    65
        print >> sys.stderr, _("Usage:\n") + self.usage + "\n"
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    66
        print >> sys.stderr, os.path.basename(sys.argv[0]) + \
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    67
                                             ": error: " + message
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    68
        sys.exit(errnum)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    69
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    70
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    71
def usage(argv):
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    72
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    73
    Assemble command usage string.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    74
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    75
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    76
    name = os.path.basename(argv[0])
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    77
    usage_str = _(
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    78
        "    %s subcommand cmd_options\n" +
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    79
        "    subcommands:\n" +
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    80
        "    " + name + " set [-r] <path> <value>  " +
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    81
                  "Change value or add/change attributes\n" +
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    82
        "    " + name + " add [-r] <path> <value>  Add new element\n" +
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    83
        "    " + name + " get [-r] <path>          " +
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    84
                  "Retrieve element value or attributes\n" +
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    85
        "    " + name + " load [-i] <filename>     " +
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    86
                  "Load / incrementally overlay XML file\n" +
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    87
        "    " + name + " validate                 Validate XML data\n" +
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    88
        "\n    The -r option to set/add/get displays the path of " +
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    89
                  "the returned element\n" +
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    90
        "    in terms of node IDs.  This path may be used in " +
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    91
                  "subsequent calls to\n" +
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    92
        "    %s to specify the affected element more directly.\n") % (
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    93
        name, name)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    94
    return usage_str
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    95
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    96
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    97
def _handle_error(error):
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    98
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
    99
    Display the error message, log the whole traceback and set errno
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   100
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   101
    Args:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   102
      error: exception containing message and, if IOError, an errno.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   103
              Assume messages are localized.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   104
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   105
    Returns:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   106
      errno: EINVAL unless overridden by an IOError exception's errno.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   107
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   108
    print >> sys.stderr, str(error)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   109
    AIM_LOGGER.exception(str(error))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   110
    rval = getattr(error, "errno", errno.EINVAL)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   111
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   112
    # Handle the cases where the errno field exists in the exception
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   113
    # but is None or 0
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   114
    if not rval:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   115
        rval = errno.EIO if isinstance(error, IOError) else errno.EINVAL
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   116
    return rval
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   117
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   118
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   119
def _log_final_status(mim, path=None):
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   120
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   121
    Log status.  Usually called after running a subcommand.  Checks to see if
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   122
    the manifest validates, when this information would be logged.  Does
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   123
    nothing if logging is disabled.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   124
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   125
    Args:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   126
      mim: Reference to the Manifest Input Module, needed for validation.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   127
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   128
      path: Nodepath, used for printing only.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   129
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   130
    if AIM_LOGGER.isEnabledFor(logging.INFO):
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   131
        try:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   132
            mim.validate()
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   133
            validated = _("Pass")
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   134
        except (milib.MimError, IOError):
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   135
            validated = _("Fail")
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   136
        out = _("cmd:success, validation:") + validated
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   137
        if path:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   138
            out += _(", node:") + path
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   139
        AIM_LOGGER.info(out)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   140
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   141
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   142
def _setup_logging():
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   143
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   144
    Set up logging.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   145
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   146
    If AIM_LOGFILE is set in the environment, enable logging to the file
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   147
    specified by AIM_LOGFILE.  Enable logging at the level specified by
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   148
    the environment variable AIM_LOGLEVEL if set, else set to the INFO level
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   149
    by default.  (These two variables (and logging here in general) is to
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   150
    support the Derived Manifest Module (DMM).
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   151
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   152
    # pylint: disable-msg=W0603
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   153
    global AIM_LOGGER
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   154
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   155
    logging.setLoggerClass(InstallLogger)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   156
    AIM_LOGGER = logging.getLogger("aimanifest")
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   157
    logfile_name = os.environ.get("AIM_LOGFILE")
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   158
    if logfile_name is not None:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   159
        logging.basicConfig(format="%(asctime)s: %(name)s: "
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   160
                                   "%(levelname)s: %(message)s",
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   161
                            datefmt="%H:%M:%S",
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   162
                            filename=logfile_name,
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   163
                            filemode="a")
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   164
        logging_level = os.environ.get("AIM_LOGLEVEL")
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   165
        if logging_level and logging_level.isdigit():
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   166
            AIM_LOGGER.setLevel(int(logging_level))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   167
        else:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   168
            AIM_LOGGER.setLevel(logging.INFO)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   169
    else:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   170
        AIM_LOGGER.setLevel(logging.NOTSET)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   171
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   172
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   173
def _shutdown_logging():
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   174
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   175
    Shut down logging.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   176
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   177
    logging.shutdown()
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   178
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   179
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   180
def _do_aimanifest(argv):
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   181
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   182
    Main.  See usage for argv details.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   183
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   184
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   185
    usage_str = usage(argv)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   186
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   187
    if len(argv) <= 1:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   188
        AIM_LOGGER.error(_("Error: Missing subcommand"))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   189
        print >> sys.stderr, _("Usage:\n") + usage_str
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   190
        return errno.EINVAL
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   191
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   192
    parser = AimOptionParser(usage=usage_str)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   193
    parser.add_option("-i", "--incremental", dest="is_incremental",
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   194
                      default=False, action="store_true",
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   195
                      help=_("Do not clear data before adding new data"))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   196
    parser.add_option("-r", dest="show_path", default=False,
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   197
                      action="store_true",
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   198
                      help=_("Return unique path to affected node"))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   199
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   200
    (options, args) = parser.parse_args(argv[1:])
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   201
    len_args = len(args)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   202
    command = args[0]
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   203
    path = args[1] if (len_args > 1) else None
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   204
    value = args[2] if (len_args > 2) else None
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   205
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   206
    cmds_r_option = ["add", "set", "get"]
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   207
    cmds_w_value_arg = ["add", "set"]
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   208
    cmds_wo_value_arg = ["get", "load"]
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   209
    cmds_w_no_args = ["validate"]
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   210
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   211
    if ((command in cmds_w_value_arg and (len_args < 3)) or
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   212
        (command in cmds_wo_value_arg and (len_args < 2))):
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   213
        parser.error_w_errno(errno.EINVAL, _("missing argument"))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   214
    if ((command in cmds_w_value_arg and (len_args > 3)) or
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   215
        (command in cmds_wo_value_arg and (len_args > 2)) or
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   216
        (command in cmds_w_no_args and (len_args > 1))):
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   217
        parser.error_w_errno(errno.EINVAL, _("extra arguments given"))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   218
    if (command != "load") and options.is_incremental:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   219
        parser.error_w_errno(errno.EINVAL,
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   220
                     _("-i is not applicable for command given"))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   221
    if command not in cmds_r_option and options.show_path:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   222
        parser.error_w_errno(errno.EINVAL,
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   223
                     _("-r is not applicable for command given"))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   224
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   225
    # Pass AIM_MANIFEST as the output file.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   226
    try:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   227
        mim = ManifestInput(os.environ.get("AIM_MANIFEST"), SCHEMA_FILE)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   228
    except (milib.MimError, IOError) as err:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   229
        return (_handle_error(err))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   230
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   231
    # Note: warnings already localized.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   232
    warnings = mim.get_warnings()
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   233
    if warnings is not None:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   234
        for msg in warnings:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   235
            print >> sys.stderr, msg
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   236
            AIM_LOGGER.error(msg)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   237
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   238
    if (command == "set") or (command == "add"):
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   239
        AIM_LOGGER.info(_("command:%(mcommand)s, path:%(mpath)s, "
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   240
                "value:%(mvalue)s") %
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   241
                {"mcommand": command, "mpath": path, "mvalue": value})
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   242
        try:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   243
            if command == "set":
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   244
                path = mim.set(path, value)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   245
            else:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   246
                path = mim.add(path, value)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   247
            mim.commit(NO_VALIDATE)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   248
        except (milib.MimError, IOError) as err:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   249
            return (_handle_error(err))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   250
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   251
        _log_final_status(mim, path)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   252
        if options.show_path:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   253
            # Localization not needed here.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   254
            print path
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   255
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   256
    elif command == "get":
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   257
        AIM_LOGGER.info(_("command:%(mcommand)s, path:%(mpath)s") %
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   258
                {"mcommand": command, "mpath": path})
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   259
        try:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   260
            (value, path) = mim.get(path)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   261
        except (milib.MimError, IOError) as err:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   262
            return (_handle_error(err))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   263
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   264
        if value is None:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   265
            value = "\"\""
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   266
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   267
        AIM_LOGGER.info(_("successful: returns value:%(mvalue)s, "
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   268
                      "path:%(mpath)s") % {"mvalue": value, "mpath": path})
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   269
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   270
        if not options.show_path:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   271
            path = ""
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   272
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   273
        # Localization not needed here.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   274
        print "%s %s" % (value, path)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   275
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   276
    elif (command == "load"):
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   277
        # path arg holds the filename
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   278
        AIM_LOGGER.info(_("command:%(mcommand)s, "
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   279
                      "incremental:%(mincr)s, file:%(mfile)s") %
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   280
                    {"mcommand": command, "mincr": str(options.is_incremental),
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   281
                     "mfile": path})
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   282
        try:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   283
            mim.load(path, options.is_incremental)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   284
            mim.commit(NO_VALIDATE)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   285
        except (milib.MimError, IOError) as err:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   286
            return (_handle_error(err))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   287
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   288
        # Note: warnings already localized.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   289
        warnings = mim.get_warnings()
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   290
        if warnings is not None:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   291
            for msg in warnings:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   292
                print >> sys.stderr, msg
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   293
                AIM_LOGGER.error(msg)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   294
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   295
        _log_final_status(mim, path)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   296
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   297
    elif (command == "validate"):
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   298
        AIM_LOGGER.info(_("Command:%s") % command)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   299
        try:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   300
            mim.validate()
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   301
            AIM_LOGGER.info(_("Validation successful"))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   302
        except milib.MimDTDInvalid as err:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   303
            errorlist = err.errors
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   304
            for error in errorlist:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   305
                # These messages come already localized.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   306
                print >> sys.stderr, error
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   307
                AIM_LOGGER.error(error)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   308
            return errno.EINVAL
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   309
        except (milib.MimError, IOError) as err:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   310
            return (_handle_error(err))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   311
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   312
    else:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   313
        AIM_LOGGER.error(_("Invalid subcommand \"%s\"") % command)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   314
        print >> sys.stderr, _("Usage:\n") + usage_str
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   315
        return errno.EINVAL
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   316
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   317
    return 0  # No errors
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   318
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   319
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   320
def main(argv):
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   321
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   322
    Main program.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   323
    '''
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   324
    _setup_logging()
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   325
    rval = 1
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   326
    try:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   327
        rval = _do_aimanifest(argv)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   328
    except StandardError as err:
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   329
        # Catch unexpected exceptions, logging and displaying a traceback.
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   330
        print >> sys.stderr, str(err)
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   331
        AIM_LOGGER.exception(str(err))
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   332
        print_exc()
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   333
    _shutdown_logging()
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   334
    return rval
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   335
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   336
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   337
if __name__ == "__main__":
96b6cc8130c5 6994260 Implement Auto-Installer Derived Manifests
Jack Schwartz <Jack.Schwartz@Oracle.COM>
parents:
diff changeset
   338
    sys.exit(main(sys.argv))