xref: /onnv-gate/usr/src/cmd/beadm/messages.py (revision 13013:3c7681e3e323)
1*13013Sglenn.lagasse@oracle.com# CDDL HEADER START
2*13013Sglenn.lagasse@oracle.com#
3*13013Sglenn.lagasse@oracle.com# The contents of this file are subject to the terms of the
4*13013Sglenn.lagasse@oracle.com# Common Development and Distribution License (the "License").
5*13013Sglenn.lagasse@oracle.com# You may not use this file except in compliance with the License.
6*13013Sglenn.lagasse@oracle.com#
7*13013Sglenn.lagasse@oracle.com# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
8*13013Sglenn.lagasse@oracle.com# or http://www.opensolaris.org/os/licensing.
9*13013Sglenn.lagasse@oracle.com# See the License for the specific language governing permissions
10*13013Sglenn.lagasse@oracle.com# and limitations under the License.
11*13013Sglenn.lagasse@oracle.com#
12*13013Sglenn.lagasse@oracle.com# When distributing Covered Code, include this CDDL HEADER in each
13*13013Sglenn.lagasse@oracle.com# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
14*13013Sglenn.lagasse@oracle.com# If applicable, add the following below this CDDL HEADER, with the
15*13013Sglenn.lagasse@oracle.com# fields enclosed by brackets "[]" replaced with your own identifying
16*13013Sglenn.lagasse@oracle.com# information: Portions Copyright [yyyy] [name of copyright owner]
17*13013Sglenn.lagasse@oracle.com#
18*13013Sglenn.lagasse@oracle.com# CDDL HEADER END
19*13013Sglenn.lagasse@oracle.com#
20*13013Sglenn.lagasse@oracle.com
21*13013Sglenn.lagasse@oracle.com#
22*13013Sglenn.lagasse@oracle.com# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
23*13013Sglenn.lagasse@oracle.com#
24*13013Sglenn.lagasse@oracle.com
25*13013Sglenn.lagasse@oracle.com"""
26*13013Sglenn.lagasse@oracle.combeadm - The Boot Environment Administration tool.
27*13013Sglenn.lagasse@oracle.com
28*13013Sglenn.lagasse@oracle.comA module containing all of the messages output by beadm.
29*13013Sglenn.lagasse@oracle.com"""
30*13013Sglenn.lagasse@oracle.com
31*13013Sglenn.lagasse@oracle.comimport sys
32*13013Sglenn.lagasse@oracle.comfrom beadm import _
33*13013Sglenn.lagasse@oracle.com
34*13013Sglenn.lagasse@oracle.comclass Msgs:
35*13013Sglenn.lagasse@oracle.com    """Indices corresponding to message numbers for beadm."""
36*13013Sglenn.lagasse@oracle.com
37*13013Sglenn.lagasse@oracle.com    (BEADM_ERR_ACTIVATE,
38*13013Sglenn.lagasse@oracle.com    BEADM_ERR_BE_EXISTS,
39*13013Sglenn.lagasse@oracle.com    BEADM_ERR_SNAP_EXISTS,
40*13013Sglenn.lagasse@oracle.com    BEADM_ERR_CREATE,
41*13013Sglenn.lagasse@oracle.com    BEADM_ERR_DESTROY,
42*13013Sglenn.lagasse@oracle.com    BEADM_ERR_DESTROY_ACTIVE,
43*13013Sglenn.lagasse@oracle.com    BEADM_ERR_BE_DOES_NOT_EXIST,
44*13013Sglenn.lagasse@oracle.com    BEADM_ERR_NO_BES_EXIST,
45*13013Sglenn.lagasse@oracle.com    BEADM_ERR_MSG_SUB,
46*13013Sglenn.lagasse@oracle.com    BEADM_ERR_ILL_SUBCOMMAND,
47*13013Sglenn.lagasse@oracle.com    BEADM_ERR_INVALID_RESPONSE,
48*13013Sglenn.lagasse@oracle.com    BEADM_ERR_LIST,
49*13013Sglenn.lagasse@oracle.com    BEADM_ERR_LIST_DATA,
50*13013Sglenn.lagasse@oracle.com    BEADM_ERR_LOG_CREATE,
51*13013Sglenn.lagasse@oracle.com    BEADM_ERR_LOG_RM,
52*13013Sglenn.lagasse@oracle.com    BEADM_ERR_MOUNT,
53*13013Sglenn.lagasse@oracle.com    BEADM_ERR_MOUNT_EXISTS,
54*13013Sglenn.lagasse@oracle.com    BEADM_ERR_MOUNTED,
55*13013Sglenn.lagasse@oracle.com    BEADM_ERR_MOUNTPOINT,
56*13013Sglenn.lagasse@oracle.com    BEADM_ERR_MUTUALLY_EXCL,
57*13013Sglenn.lagasse@oracle.com    BEADM_ERR_NO_MSG,
58*13013Sglenn.lagasse@oracle.com    BEADM_ERR_NO_ZPOOL,
59*13013Sglenn.lagasse@oracle.com    BEADM_ERR_NOT_SUPPORTED_NGZ,
60*13013Sglenn.lagasse@oracle.com    BEADM_ERR_OPT_ARGS,
61*13013Sglenn.lagasse@oracle.com    BEADM_ERR_OS,
62*13013Sglenn.lagasse@oracle.com    BEADM_ERR_PERMISSIONS,
63*13013Sglenn.lagasse@oracle.com    BEADM_ERR_RENAME,
64*13013Sglenn.lagasse@oracle.com    BEADM_ERR_SHARED_FS,
65*13013Sglenn.lagasse@oracle.com    BEADM_ERR_SNAP_DOES_NOT_EXISTS,
66*13013Sglenn.lagasse@oracle.com    BEADM_ERR_UNMOUNT,
67*13013Sglenn.lagasse@oracle.com    BEADM_ERR_UNMOUNT_ACTIVE,
68*13013Sglenn.lagasse@oracle.com    BEADM_ERR_BENAME,
69*13013Sglenn.lagasse@oracle.com    BEADM_MSG_ACTIVE_ON_BOOT,
70*13013Sglenn.lagasse@oracle.com    BEADM_MSG_DESTROY,
71*13013Sglenn.lagasse@oracle.com    BEADM_MSG_DESTROY_NO,
72*13013Sglenn.lagasse@oracle.com    BEADM_MSG_BE_CREATE_START,
73*13013Sglenn.lagasse@oracle.com    BEADM_MSG_BE_CREATE_SUCCESS,
74*13013Sglenn.lagasse@oracle.com    BEADM_MSG_FREE_FORMAT,
75*13013Sglenn.lagasse@oracle.com    ) = range(38)
76*13013Sglenn.lagasse@oracle.com
77*13013Sglenn.lagasse@oracle.com    # Indices corresponding to message numbers for libbe that we are
78*13013Sglenn.lagasse@oracle.com    # interested in expanding messages.
79*13013Sglenn.lagasse@oracle.com    (BE_ERR_ACCESS,
80*13013Sglenn.lagasse@oracle.com    BE_ERR_ACTIVATE_CURR,
81*13013Sglenn.lagasse@oracle.com    BE_ERR_AUTONAME,
82*13013Sglenn.lagasse@oracle.com    BE_ERR_BE_NOENT,
83*13013Sglenn.lagasse@oracle.com    BE_ERR_BUSY,
84*13013Sglenn.lagasse@oracle.com    BE_ERR_CANCELED,
85*13013Sglenn.lagasse@oracle.com    BE_ERR_CLONE,
86*13013Sglenn.lagasse@oracle.com    BE_ERR_COPY,
87*13013Sglenn.lagasse@oracle.com    BE_ERR_CREATDS,
88*13013Sglenn.lagasse@oracle.com    BE_ERR_CURR_BE_NOT_FOUND,
89*13013Sglenn.lagasse@oracle.com    BE_ERR_DESTROY,
90*13013Sglenn.lagasse@oracle.com    BE_ERR_DEMOTE,
91*13013Sglenn.lagasse@oracle.com    BE_ERR_DSTYPE,
92*13013Sglenn.lagasse@oracle.com    BE_ERR_BE_EXISTS,
93*13013Sglenn.lagasse@oracle.com    BE_ERR_INIT,
94*13013Sglenn.lagasse@oracle.com    BE_ERR_INTR,
95*13013Sglenn.lagasse@oracle.com    BE_ERR_INVAL,
96*13013Sglenn.lagasse@oracle.com    BE_ERR_INVALPROP,
97*13013Sglenn.lagasse@oracle.com    BE_ERR_INVALMOUNTPOINT,
98*13013Sglenn.lagasse@oracle.com    BE_ERR_MOUNT,
99*13013Sglenn.lagasse@oracle.com    BE_ERR_MOUNTED,
100*13013Sglenn.lagasse@oracle.com    BE_ERR_NAMETOOLONG,
101*13013Sglenn.lagasse@oracle.com    BE_ERR_NOENT,
102*13013Sglenn.lagasse@oracle.com    BE_ERR_POOL_NOENT,
103*13013Sglenn.lagasse@oracle.com    BE_ERR_NODEV,
104*13013Sglenn.lagasse@oracle.com    BE_ERR_NOTMOUNTED,
105*13013Sglenn.lagasse@oracle.com    BE_ERR_NOMEM,
106*13013Sglenn.lagasse@oracle.com    BE_ERR_NONINHERIT,
107*13013Sglenn.lagasse@oracle.com    BE_ERR_NXIO,
108*13013Sglenn.lagasse@oracle.com    BE_ERR_NOSPC,
109*13013Sglenn.lagasse@oracle.com    BE_ERR_NOTSUP,
110*13013Sglenn.lagasse@oracle.com    BE_ERR_OPEN,
111*13013Sglenn.lagasse@oracle.com    BE_ERR_PERM,
112*13013Sglenn.lagasse@oracle.com    BE_ERR_UNAVAIL,
113*13013Sglenn.lagasse@oracle.com    BE_ERR_PROMOTE,
114*13013Sglenn.lagasse@oracle.com    BE_ERR_ROFS,
115*13013Sglenn.lagasse@oracle.com    BE_ERR_READONLYDS,
116*13013Sglenn.lagasse@oracle.com    BE_ERR_READONLYPROP,
117*13013Sglenn.lagasse@oracle.com    BE_ERR_SS_EXISTS,
118*13013Sglenn.lagasse@oracle.com    BE_ERR_SS_NOENT,
119*13013Sglenn.lagasse@oracle.com    BE_ERR_UMOUNT,
120*13013Sglenn.lagasse@oracle.com    BE_ERR_UMOUNT_CURR_BE,
121*13013Sglenn.lagasse@oracle.com    BE_ERR_UMOUNT_SHARED,
122*13013Sglenn.lagasse@oracle.com    BE_ERR_UNKNOWN,
123*13013Sglenn.lagasse@oracle.com    BE_ERR_ZFS,
124*13013Sglenn.lagasse@oracle.com    BE_ERR_DESTROY_CURR_BE,
125*13013Sglenn.lagasse@oracle.com    BE_ERR_GEN_UUID,
126*13013Sglenn.lagasse@oracle.com    BE_ERR_PARSE_UUID,
127*13013Sglenn.lagasse@oracle.com    BE_ERR_NO_UUID,
128*13013Sglenn.lagasse@oracle.com    BE_ERR_ZONE_NO_PARENTBE,
129*13013Sglenn.lagasse@oracle.com    BE_ERR_ZONE_MULTIPLE_ACTIVE,
130*13013Sglenn.lagasse@oracle.com    BE_ERR_ZONE_NO_ACTIVE_ROOT,
131*13013Sglenn.lagasse@oracle.com    BE_ERR_ZONE_ROOT_NOT_LEGACY,
132*13013Sglenn.lagasse@oracle.com    BE_ERR_NO_MOUNTED_ZONE,
133*13013Sglenn.lagasse@oracle.com    BE_ERR_MOUNT_ZONEROOT,
134*13013Sglenn.lagasse@oracle.com    BE_ERR_UMOUNT_ZONEROOT,
135*13013Sglenn.lagasse@oracle.com    BE_ERR_ZONES_UNMOUNT,
136*13013Sglenn.lagasse@oracle.com    BE_ERR_FAULT,
137*13013Sglenn.lagasse@oracle.com    BE_ERR_RENAME_ACTIVE,
138*13013Sglenn.lagasse@oracle.com    BE_ERR_NO_MENU,
139*13013Sglenn.lagasse@oracle.com    BE_ERR_DEV_BUSY,
140*13013Sglenn.lagasse@oracle.com    BE_ERR_BAD_MENU_PATH,
141*13013Sglenn.lagasse@oracle.com    BE_ERR_ZONE_SS_EXISTS
142*13013Sglenn.lagasse@oracle.com    ) = range(4000, 4063)
143*13013Sglenn.lagasse@oracle.com
144*13013Sglenn.lagasse@oracle.com    # Error message dictionaries.
145*13013Sglenn.lagasse@oracle.com    mBeadmErr = {}
146*13013Sglenn.lagasse@oracle.com    mBeadmOut = {}
147*13013Sglenn.lagasse@oracle.com    mBeadmLog = {}
148*13013Sglenn.lagasse@oracle.com
149*13013Sglenn.lagasse@oracle.com    # Errors from beadm (to stderr).
150*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_ACTIVATE] = _("Unable to activate %(0)s.\n%(1)s")
151*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_BE_EXISTS] = _("BE %s already exists. Please choose a different BE name.")
152*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_BE_DOES_NOT_EXIST] = _("%s does not exist or appear to be a valid BE.\nPlease check that the name of the BE provided is correct.")
153*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_NO_BES_EXIST] = _("No boot environments found on this system.")
154*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_CREATE] = _("Unable to create %(0)s.\n%(1)s")
155*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_DESTROY] = _("Unable to destroy %(0)s.\n%(1)s")
156*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_DESTROY_ACTIVE] = _("%(0)s is the currently active BE and cannot be destroyed.\nYou must boot from another BE in order to destroy %(1)s.")
157*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_MSG_SUB] = _("Fatal error. No message associated with index %d")
158*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_ILL_SUBCOMMAND] = _("Illegal subcommand %s")
159*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_INVALID_RESPONSE] = _("Invalid response. Please enter 'y' or 'n'.")
160*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_LIST] = _("Unable to display Boot Environment: %s")
161*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_LIST_DATA] = _("Unable to process list data.")
162*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_LOG_CREATE] = _("Unable to create log file.")
163*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_LOG_RM] = _("Unable to remove %s")
164*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_MOUNT] = _("Unable to mount %(0)s.\n%(1)s")
165*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_MOUNT_EXISTS] = _("%s is already mounted.\nPlease unmount the BE before mounting it again.")
166*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_MOUNTED] = _("Unable to destroy %(0)s.\nIt is currently mounted and must be unmounted before it can be destroyed.\nUse 'beadm unmount %(1)s' to unmount the BE before destroying\nit or 'beadm destroy -fF %(2)s'.")
167*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_MOUNTPOINT] = _("Invalid mount point %s. Mount point must start with a /.")
168*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_MUTUALLY_EXCL] = _("Invalid options: %s are mutually exclusive.")
169*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_NO_MSG] = _("Unable to find message for error code: %d")
170*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_NO_ZPOOL] = _("BE: %s was not found in any pool.\n The pool may not exist or the name of the BE is not correct.")
171*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_NOT_SUPPORTED_NGZ] = _("beadm is not supported in a non-global zone.")
172*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_OPT_ARGS] = _("Invalid options and arguments:")
173*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_OS] = _("System error: %s")
174*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_RENAME] = _("Rename of BE %(0)s failed.\n%(1)s")
175*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_SHARED_FS] = _("%s is a shared file system and it cannot be unmounted.")
176*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_SNAP_DOES_NOT_EXISTS] = _("%s does not exist or appear to be a valid snapshot.\nPlease check that the name of the snapshot provided is correct.")
177*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_SNAP_EXISTS] = _("Snapshot %s already exists.\n Please choose a different snapshot name.")
178*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_UNMOUNT] = _("Unable to unmount %(0)s.\n%(1)s")
179*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_UNMOUNT_ACTIVE] = _("%s is the currently active BE.\nIt cannot be unmounted unless another BE is the currently active BE.")
180*13013Sglenn.lagasse@oracle.com    mBeadmErr[BE_ERR_ZONES_UNMOUNT] = _("Unable to destroy one of %(0)s's zone BE's.\nUse 'beadm destroy -fF %(1)s' or 'zfs -f destroy <dataset>'.")
181*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_PERMISSIONS] = _("You have insufficient privileges to execute this command.\nEither use 'pfexec' to execute the command or become superuser.")
182*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_ERR_BENAME] = _("The BE name provided is invalid.\n Please check it and try again.")
183*13013Sglenn.lagasse@oracle.com
184*13013Sglenn.lagasse@oracle.com    # Catchall
185*13013Sglenn.lagasse@oracle.com    mBeadmErr[BEADM_MSG_FREE_FORMAT] = "%s"
186*13013Sglenn.lagasse@oracle.com
187*13013Sglenn.lagasse@oracle.com    # Messages from beadm (to stdout).
188*13013Sglenn.lagasse@oracle.com    mBeadmOut[BEADM_MSG_ACTIVE_ON_BOOT] = _("The BE that was just destroyed was the 'active on boot' BE.\n%s is now the 'active on boot' BE. Use 'beadm activate' to change it.\n")
189*13013Sglenn.lagasse@oracle.com    mBeadmOut[BEADM_MSG_DESTROY] = _("Are you sure you want to destroy %s?  This action cannot be undone(y/[n]):")
190*13013Sglenn.lagasse@oracle.com    mBeadmOut[BEADM_MSG_DESTROY_NO] = _("%s has not been destroyed.\n")
191*13013Sglenn.lagasse@oracle.com
192*13013Sglenn.lagasse@oracle.com    # Messages from beadm (to log only).
193*13013Sglenn.lagasse@oracle.com    mBeadmLog[BEADM_MSG_BE_CREATE_START] = "Attempting to create %s"
194*13013Sglenn.lagasse@oracle.com    mBeadmLog[BEADM_MSG_BE_CREATE_SUCCESS] = "%s was created successfully"
195*13013Sglenn.lagasse@oracle.com
196*13013Sglenn.lagasse@oracle.commsgLog, msgOut, msgErr = range(3)
197*13013Sglenn.lagasse@oracle.com
198*13013Sglenn.lagasse@oracle.comdef printLog(string, log_fd):
199*13013Sglenn.lagasse@oracle.com    """Print log."""
200*13013Sglenn.lagasse@oracle.com
201*13013Sglenn.lagasse@oracle.com    sendMsg(string, msgLog, log_fd)
202*13013Sglenn.lagasse@oracle.com
203*13013Sglenn.lagasse@oracle.comdef printStdout(string, log_fd):
204*13013Sglenn.lagasse@oracle.com    """Print standard output."""
205*13013Sglenn.lagasse@oracle.com
206*13013Sglenn.lagasse@oracle.com    sendMsg(string, msgOut, log_fd)
207*13013Sglenn.lagasse@oracle.com
208*13013Sglenn.lagasse@oracle.comdef printStderr(string, log_fd):
209*13013Sglenn.lagasse@oracle.com    """Print standard error."""
210*13013Sglenn.lagasse@oracle.com
211*13013Sglenn.lagasse@oracle.com    sendMsg(string, msgErr, log_fd)
212*13013Sglenn.lagasse@oracle.com
213*13013Sglenn.lagasse@oracle.comdef composeMsg(string, txt=None):
214*13013Sglenn.lagasse@oracle.com    """
215*13013Sglenn.lagasse@oracle.com    Compose the message to be dispayed.
216*13013Sglenn.lagasse@oracle.com    txt can be either a list or string object.
217*13013Sglenn.lagasse@oracle.com    Return the newly composed string.
218*13013Sglenn.lagasse@oracle.com    """
219*13013Sglenn.lagasse@oracle.com
220*13013Sglenn.lagasse@oracle.com    try:
221*13013Sglenn.lagasse@oracle.com        msg = string % txt
222*13013Sglenn.lagasse@oracle.com    except TypeError:
223*13013Sglenn.lagasse@oracle.com        msg = string
224*13013Sglenn.lagasse@oracle.com
225*13013Sglenn.lagasse@oracle.com    return (msg)
226*13013Sglenn.lagasse@oracle.com
227*13013Sglenn.lagasse@oracle.comdef sendMsg(string, mode, log_fd=-1):
228*13013Sglenn.lagasse@oracle.com    """Send message."""
229*13013Sglenn.lagasse@oracle.com
230*13013Sglenn.lagasse@oracle.com    if mode == msgOut:
231*13013Sglenn.lagasse@oracle.com        print >> sys.stdout, string,
232*13013Sglenn.lagasse@oracle.com    if mode == msgErr:
233*13013Sglenn.lagasse@oracle.com        print >> sys.stderr, string
234*13013Sglenn.lagasse@oracle.com    if log_fd != -1 or mode == msgLog:
235*13013Sglenn.lagasse@oracle.com        log_fd.write(string + "\n")
236*13013Sglenn.lagasse@oracle.com
237*13013Sglenn.lagasse@oracle.comdef printMsg(msg_idx=-1, txt="", log_fd=-1):
238*13013Sglenn.lagasse@oracle.com    """Print the message based on the message index."""
239*13013Sglenn.lagasse@oracle.com
240*13013Sglenn.lagasse@oracle.com    if msg_idx in Msgs.mBeadmErr:
241*13013Sglenn.lagasse@oracle.com        printStderr(composeMsg(Msgs.mBeadmErr[msg_idx], txt),
242*13013Sglenn.lagasse@oracle.com            log_fd)
243*13013Sglenn.lagasse@oracle.com    elif msg_idx in Msgs.mBeadmOut:
244*13013Sglenn.lagasse@oracle.com        printStdout(composeMsg(Msgs.mBeadmOut[msg_idx], txt),
245*13013Sglenn.lagasse@oracle.com            log_fd)
246*13013Sglenn.lagasse@oracle.com    elif msg_idx in Msgs.mBeadmLog:
247*13013Sglenn.lagasse@oracle.com        printLog(composeMsg(Msgs.mBeadmLog[msg_idx], txt), log_fd)
248*13013Sglenn.lagasse@oracle.com    else:
249*13013Sglenn.lagasse@oracle.com        printStderr(composeMsg(Msgs.mLibbe[BEADM_ERR_MSG_SUB],
250*13013Sglenn.lagasse@oracle.com            msg_idx), -1)
251*13013Sglenn.lagasse@oracle.com        sys.exit(1)
252*13013Sglenn.lagasse@oracle.com
253*13013Sglenn.lagasse@oracle.comdef getMsg(msg_idx=-1, txt=""):
254*13013Sglenn.lagasse@oracle.com    """Print the message based on the message index."""
255*13013Sglenn.lagasse@oracle.com
256*13013Sglenn.lagasse@oracle.com    if msg_idx in  Msgs.mBeadmErr:
257*13013Sglenn.lagasse@oracle.com        return(composeMsg(Msgs.mBeadmErr[msg_idx], txt))
258*13013Sglenn.lagasse@oracle.com    elif msg_idx in Msgs.mBeadmOut:
259*13013Sglenn.lagasse@oracle.com        return(composeMsg(Msgs.mBeadmOut[msg_idx], txt))
260*13013Sglenn.lagasse@oracle.com    elif msg_idx in Msgs.mBeadmLog:
261*13013Sglenn.lagasse@oracle.com        return(composeMsg(Msgs.mBeadmLog[msg_idx], txt))
262*13013Sglenn.lagasse@oracle.com    else:
263*13013Sglenn.lagasse@oracle.com        return(composeMsg(Msgs.mLibbe[BEADM_ERR_MSG_SUB]))
264*13013Sglenn.lagasse@oracle.com        sys.exit(1)
265