src/modules/client/actuator.py
author Erik Trauschke <Erik.Trauschke@oracle.com>
Wed, 19 Dec 2012 14:15:28 -0800
changeset 2839 7b0fc73bf146
parent 2708 4dac3e277ccf
child 3014 a88a867e3a9d
permissions -rw-r--r--
15981296 pkg API should have basic input checking for clients other than the CLI
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1516
8c950a3b4171 10485 move pkg(5) to Python 2.6
Rich Burridge <rich.burridge@sun.com>
parents: 1505
diff changeset
     1
#!/usr/bin/python
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     2
#
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     3
# CDDL HEADER START
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     4
#
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     8
#
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    11
# See the License for the specific language governing permissions
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    12
# and limitations under the License.
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    13
#
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    19
#
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    20
# CDDL HEADER END
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    21
#
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    22
1992
627a96abb313 15031 pkg install traceback if multiple actuator values present
Richard Lowe <richlowe@richlowe.net>
parents: 1747
diff changeset
    23
#
2690
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    24
# Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
1992
627a96abb313 15031 pkg install traceback if multiple actuator values present
Richard Lowe <richlowe@richlowe.net>
parents: 1747
diff changeset
    25
#
627a96abb313 15031 pkg install traceback if multiple actuator values present
Richard Lowe <richlowe@richlowe.net>
parents: 1747
diff changeset
    26
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
    27
import pkg.smf as smf
2708
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
    28
import pkg.actions
2333
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
    29
import os
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    30
2690
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    31
import pkg.misc
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    32
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
    33
from pkg.client.debugvalues import DebugValues
2333
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
    34
from pkg.client.imagetypes import IMG_USER, IMG_ENTIRE
1992
627a96abb313 15031 pkg install traceback if multiple actuator values present
Richard Lowe <richlowe@richlowe.net>
parents: 1747
diff changeset
    35
2708
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
    36
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
    37
class Actuator(object):
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    38
        """Actuators are action attributes that cause side effects
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    39
        on live images when those actions are updated, installed
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    40
        or removed.  Since no side effects are caused when the
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    41
        affected image isn't the current root image, the OS may
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    42
        need to cause the equivalent effect during boot.
2708
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
    43
        This is Solaris specific for now. """
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    44
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    45
        actuator_attrs = set([
1328
5c3747a4fe0a 9387 pkg fix should honor reboot-needed flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1019
diff changeset
    46
            "reboot-needed",    # have to reboot to update this file
2708
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
    47
            "release-note",     # conditionally include this file
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
    48
                                # in release notes
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    49
            "refresh_fmri",     # refresh this service on any change
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    50
            "restart_fmri",     # restart this service on any change
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    51
            "suspend_fmri",     # suspend this service during update
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    52
            "disable_fmri"      # disable this service prior to removal
1992
627a96abb313 15031 pkg install traceback if multiple actuator values present
Richard Lowe <richlowe@richlowe.net>
parents: 1747
diff changeset
    53
        ])
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    54
2690
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    55
        __state__desc = {
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    56
                "install": {
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    57
                    "disable_fmri": set(),
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    58
                    "reboot-needed": set(),
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    59
                    "refresh_fmri": set(),
2708
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
    60
                    "release-note": [(pkg.actions.generic.NSG, pkg.fmri.PkgFmri)],
2690
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    61
                    "restart_fmri": set(),
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    62
                    "suspend_fmri": set(),
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    63
                },
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    64
                "removal": {
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    65
                    "disable_fmri": set(),
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    66
                    "reboot-needed": set(),
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    67
                    "refresh_fmri": set(),
2708
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
    68
                    "release-note": [(pkg.actions.generic.NSG, pkg.fmri.PkgFmri)],
2690
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    69
                    "restart_fmri": set(),
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    70
                    "suspend_fmri": set(),
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    71
                },
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    72
                "update": {
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    73
                    "disable_fmri": set(),
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    74
                    "reboot-needed": set(),
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    75
                    "refresh_fmri": set(),
2708
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
    76
                    "release-note": [(pkg.actions.generic.NSG, pkg.fmri.PkgFmri)],
2690
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    77
                    "restart_fmri": set(),
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    78
                    "suspend_fmri": set(),
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    79
                },
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    80
        }
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    81
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    82
        def __init__(self):
2708
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
    83
                self.install = {}
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
    84
                self.removal = {}
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
    85
                self.update =  {}
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    86
                self.suspend_fmris = None
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    87
                self.tmp_suspend_fmris = None
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    88
                self.do_nothing = True
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    89
                self.cmd_path = ""
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    90
2690
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    91
        @staticmethod
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    92
        def getstate(obj, je_state=None):
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    93
                """Returns the serialized state of this object in a format
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    94
                that that can be easily stored using JSON, pickle, etc."""
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    95
                return pkg.misc.json_encode(Actuator.__name__, obj.__dict__,
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    96
                    Actuator.__state__desc, je_state=je_state)
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    97
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    98
        @staticmethod
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
    99
        def setstate(obj, state, jd_state=None):
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   100
                """Update the state of this object using previously serialized
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   101
                state obtained via getstate()."""
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   102
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   103
                # get the name of the object we're dealing with
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   104
                name = type(obj).__name__
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   105
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   106
                # decode serialized state into python objects
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   107
                state = pkg.misc.json_decode(name, state,
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   108
                    Actuator.__state__desc, jd_state=jd_state)
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   109
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   110
                # bulk update
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   111
                obj.__dict__.update(state)
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   112
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   113
        @staticmethod
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   114
        def fromstate(state, jd_state=None):
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   115
                """Allocate a new object using previously serialized state
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   116
                obtained via getstate()."""
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   117
                rv = Actuator()
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   118
                Actuator.setstate(rv, state, jd_state)
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   119
                return rv
11a8cae074e0 7140224 package downloaded messages displayed twice for each zone
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2517
diff changeset
   120
2205
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2040
diff changeset
   121
        def __bool__(self):
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2040
diff changeset
   122
                return self.install or self.removal or self.update
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2040
diff changeset
   123
2708
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   124
        def __nonzero__(self):
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   125
                return bool(self.install or self.removal or self.update)
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   126
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   127
        # scan_* functions take ActionPlan arguments (see imageplan.py)
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   128
        def scan_install(self, ap):
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   129
                self.__scan(self.install, ap.dst, ap.p.destination_fmri)
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   130
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   131
        def scan_removal(self, ap):
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   132
                self.__scan(self.removal, ap.src, ap.p.origin_fmri)
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   133
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   134
        def scan_update(self, ap):
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   135
                if ap.src:
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   136
                        self.__scan(self.update, ap.src, ap.p.destination_fmri)
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   137
                self.__scan(self.update, ap.dst, ap.p.destination_fmri)
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   138
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   139
        def __scan(self, dictionary, act, fmri):
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   140
                attrs = act.attrs
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   141
                for a in set(attrs.keys()) & self.actuator_attrs:
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   142
                        if a != "release-note":
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   143
                                values = attrs[a]
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   144
                                if not isinstance(values, list):
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   145
                                        values = [values]
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   146
                                dictionary.setdefault(a, set()).update(values)
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   147
                        else:
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   148
                                if act.name == "file": # ignore for non-files
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   149
                                        dictionary.setdefault(a, list()).append(
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   150
                                            (act, fmri))
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   151
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 1992
diff changeset
   152
        def get_list(self):
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 1992
diff changeset
   153
                """Returns a list of actuator value pairs, suitable for printing"""
1521
946bd128177d 8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents: 1516
diff changeset
   154
                def check_val(dfmri):
946bd128177d 8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents: 1516
diff changeset
   155
                        # For actuators which are a single, global function that
946bd128177d 8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents: 1516
diff changeset
   156
                        # needs to get executed, simply print true.
2708
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   157
                        if callable(dfmri) or isinstance(dfmri, list):
1521
946bd128177d 8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents: 1516
diff changeset
   158
                                return [ "true" ]
946bd128177d 8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents: 1516
diff changeset
   159
                        else:
946bd128177d 8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents: 1516
diff changeset
   160
                                return dfmri
946bd128177d 8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents: 1516
diff changeset
   161
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1328
diff changeset
   162
                merge = {}
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1328
diff changeset
   163
                for d in [self.removal, self.update, self.install]:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1328
diff changeset
   164
                        for a in d.keys():
1521
946bd128177d 8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents: 1516
diff changeset
   165
                                for smf in check_val(d[a]):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1328
diff changeset
   166
                                        merge.setdefault(a, set()).add(smf)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1328
diff changeset
   167
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1328
diff changeset
   168
                if self.reboot_needed():
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1328
diff changeset
   169
                        merge["reboot-needed"] = set(["true"])
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1328
diff changeset
   170
                else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1328
diff changeset
   171
                        merge["reboot-needed"] = set(["false"])
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 1992
diff changeset
   172
                return [(fmri, smf)
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 1992
diff changeset
   173
                        for fmri in merge
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 1992
diff changeset
   174
                        for smf in merge[fmri]
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 1992
diff changeset
   175
                        ]
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1328
diff changeset
   176
2708
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   177
        def get_release_note_info(self):
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   178
                """Returns a list of tuples of possible release notes"""
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   179
                return self.update.get("release-note", []) + \
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   180
                    self.install.get("release-note", [])
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   181
                
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 1992
diff changeset
   182
        def get_services_list(self):
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 1992
diff changeset
   183
                """Returns a list of services that would be restarted"""
2333
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   184
                return [(fmri, smf) for fmri, smf in self.get_list()
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 1992
diff changeset
   185
                    if smf not in ["true", "false"]]
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 1992
diff changeset
   186
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 1992
diff changeset
   187
        def __str__(self):
2333
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   188
                return "\n".join("  %16s: %s" % (fmri, smf)
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 1992
diff changeset
   189
                    for fmri, smf in self.get_list())
690
f01787008e69 4659 actuator printing w/ install -nv is incorrect
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 655
diff changeset
   190
2517
8f26a1d7100c 18827 pkg(1) should provide interfaces to control backup BE creation
Shawn Walker <shawn.walker@oracle.com>
parents: 2333
diff changeset
   191
        def reboot_advised(self):
8f26a1d7100c 18827 pkg(1) should provide interfaces to control backup BE creation
Shawn Walker <shawn.walker@oracle.com>
parents: 2333
diff changeset
   192
                """Returns True if action install execution may require a
8f26a1d7100c 18827 pkg(1) should provide interfaces to control backup BE creation
Shawn Walker <shawn.walker@oracle.com>
parents: 2333
diff changeset
   193
                reboot."""
8f26a1d7100c 18827 pkg(1) should provide interfaces to control backup BE creation
Shawn Walker <shawn.walker@oracle.com>
parents: 2333
diff changeset
   194
8f26a1d7100c 18827 pkg(1) should provide interfaces to control backup BE creation
Shawn Walker <shawn.walker@oracle.com>
parents: 2333
diff changeset
   195
                return bool("true" in self.install.get("reboot-needed", []))
8f26a1d7100c 18827 pkg(1) should provide interfaces to control backup BE creation
Shawn Walker <shawn.walker@oracle.com>
parents: 2333
diff changeset
   196
1328
5c3747a4fe0a 9387 pkg fix should honor reboot-needed flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1019
diff changeset
   197
        def reboot_needed(self):
2517
8f26a1d7100c 18827 pkg(1) should provide interfaces to control backup BE creation
Shawn Walker <shawn.walker@oracle.com>
parents: 2333
diff changeset
   198
                """Returns True if action execution requires a new boot
8f26a1d7100c 18827 pkg(1) should provide interfaces to control backup BE creation
Shawn Walker <shawn.walker@oracle.com>
parents: 2333
diff changeset
   199
                environment."""
8f26a1d7100c 18827 pkg(1) should provide interfaces to control backup BE creation
Shawn Walker <shawn.walker@oracle.com>
parents: 2333
diff changeset
   200
1328
5c3747a4fe0a 9387 pkg fix should honor reboot-needed flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1019
diff changeset
   201
                return bool("true" in self.update.get("reboot-needed", [])) or \
5c3747a4fe0a 9387 pkg fix should honor reboot-needed flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1019
diff changeset
   202
                    bool("true" in self.removal.get("reboot-needed", []))
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   203
2708
4dac3e277ccf 7137406 pkg image-update could display release notes (or pointer to)
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2690
diff changeset
   204
        def exec_prep(self, image):
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   205
                if not image.is_liveroot():
2333
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   206
                        # we're doing off-line pkg ops; we need
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   207
                        # to support self-assembly milestone
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   208
                        # so create the necessary marker file
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   209
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   210
                        if image.type != IMG_USER:
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   211
                                path = os.path.join(image.root,
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   212
                                    ".SELF-ASSEMBLY-REQUIRED")
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   213
                                # create only if it doesn't exist
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   214
                                if not os.path.exists(path):
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   215
                                        os.close(os.open(path,
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   216
                                            os.O_EXCL  |
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   217
                                            os.O_CREAT |
d7d310363aeb 18191 need flag to indicate some self-assembly is required
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2310
diff changeset
   218
                                            os.O_WRONLY))
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   219
                        if not DebugValues.get_value("smf_cmds_dir"):
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   220
                                return
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   221
                self.do_nothing = False
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   222
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   223
        def exec_pre_actuators(self, image):
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   224
                """do pre execution actuator processing..."""
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   225
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   226
                if self.do_nothing:
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   227
                        return
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   228
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   229
                suspend_fmris = self.update.get("suspend_fmri", set())
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   230
                tmp_suspend_fmris = set()
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   231
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   232
                disable_fmris = self.removal.get("disable_fmri", set())
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   233
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   234
                suspend_fmris = smf.check_fmris("suspend_fmri", suspend_fmris)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   235
                disable_fmris = smf.check_fmris("disable_fmri", disable_fmris)
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   236
                # eliminate services not loaded or not running
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   237
                # remember those services enabled only temporarily
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   238
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   239
                for fmri in suspend_fmris.copy():
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   240
                        state = smf.get_state(fmri)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   241
                        if state <= smf.SMF_SVC_TMP_ENABLED:
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   242
                                suspend_fmris.remove(fmri)
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   243
                        if state == smf.SMF_SVC_TMP_ENABLED:
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   244
                                tmp_suspend_fmris.add(fmri)
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   245
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   246
                for fmri in disable_fmris.copy():
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   247
                        if smf.is_disabled(fmri):
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   248
                                disable_fmris.remove(fmri)
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   249
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   250
                self.suspend_fmris = suspend_fmris
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   251
                self.tmp_suspend_fmris = tmp_suspend_fmris
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   252
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   253
                params = tuple(suspend_fmris | tmp_suspend_fmris)
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   254
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   255
                if params:
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   256
                        smf.disable(params, temporary=True)
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   257
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   258
                params = tuple(disable_fmris)
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   259
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   260
                if params:
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   261
                        smf.disable(params)
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   262
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   263
        def exec_fail_actuators(self, image):
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   264
                """handle a failed install"""
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   265
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   266
                if self.do_nothing:
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   267
                        return
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   268
1992
627a96abb313 15031 pkg install traceback if multiple actuator values present
Richard Lowe <richlowe@richlowe.net>
parents: 1747
diff changeset
   269
                params = tuple(self.suspend_fmris |
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   270
                    self.tmp_suspend_fmris)
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   271
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   272
                if params:
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   273
                        smf.mark("maintenance", params)
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   274
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   275
        def exec_post_actuators(self, image):
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   276
                """do post execution actuator processing"""
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   277
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   278
                if self.do_nothing:
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   279
                        return
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   280
2040
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   281
                # handle callables first
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   282
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   283
                for act in self.removal.itervalues():
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   284
                        if callable(act):
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   285
                                act()
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   286
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   287
                for act in self.install.itervalues():
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   288
                        if callable(act):
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   289
                                act()
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   290
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   291
                for act in self.update.itervalues():
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   292
                        if callable(act):
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   293
                                act()
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   294
e7fbac4a4ab1 16898 callable actuators (e.g. built-in ones) should fire before package-specified ones
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
   295
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   296
                refresh_fmris = self.removal.get("refresh_fmri", set()) | \
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   297
                    self.update.get("refresh_fmri", set()) | \
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   298
                    self.install.get("refresh_fmri", set())
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   299
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   300
                restart_fmris = self.removal.get("restart_fmri", set()) | \
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   301
                    self.update.get("restart_fmri", set()) | \
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   302
                    self.install.get("restart_fmri", set())
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   303
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   304
                refresh_fmris = smf.check_fmris("refresh_fmri", refresh_fmris)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   305
                restart_fmris = smf.check_fmris("restart_fmri", restart_fmris)
1747
4e2bf9d7a383 11617 looking for missing property value in actuator code causes KeyError
Tim Foster <tim.foster@sun.com>
parents: 1540
diff changeset
   306
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   307
                # ignore services not present or not
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   308
                # enabled
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   309
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   310
                for fmri in refresh_fmris.copy():
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   311
                        if smf.is_disabled(fmri):
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   312
                                refresh_fmris.remove(fmri)
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   313
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   314
                params = tuple(refresh_fmris)
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   315
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   316
                if params:
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   317
                        smf.refresh(params)
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   318
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   319
                for fmri in restart_fmris.copy():
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   320
                        if smf.is_disabled(fmri):
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   321
                                restart_fmris.remove(fmri)
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   322
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   323
                params = tuple(restart_fmris)
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   324
                if params:
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   325
                        smf.restart(params)
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   326
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   327
                # reenable suspended services that were running
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   328
                # be sure to not enable services that weren't running
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   329
                # and temp. enable those services that were in that
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   330
                # state.
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   331
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   332
                params = tuple(self.suspend_fmris)
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   333
                if params:
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   334
                        smf.enable(params)
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   335
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   336
                params = tuple(self.tmp_suspend_fmris)
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   337
                if params:
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2205
diff changeset
   338
                        smf.enable(params, temporary=True)