author | Bart Smaalders <Bart.Smaalders@Sun.COM> |
Fri, 10 Oct 2008 22:15:14 -0700 | |
changeset 584 | 22bc748edce6 |
parent 580 | be647ae49f92 |
child 598 | c53f6107fdb6 |
permissions | -rw-r--r-- |
409
713e20963dc2
2314 shebang lines should use minimum python version
Shawn Walker <swalker@opensolaris.org>
parents:
384
diff
changeset
|
1 |
#!/usr/bin/python2.4 |
50 | 2 |
# |
3 |
# CDDL HEADER START |
|
4 |
# |
|
5 |
# The contents of this file are subject to the terms of the |
|
6 |
# Common Development and Distribution License (the "License"). |
|
7 |
# You may not use this file except in compliance with the License. |
|
8 |
# |
|
9 |
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
|
10 |
# or http://www.opensolaris.org/os/licensing. |
|
11 |
# See the License for the specific language governing permissions |
|
12 |
# and limitations under the License. |
|
13 |
# |
|
14 |
# When distributing Covered Code, include this CDDL HEADER in each |
|
15 |
# file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
|
16 |
# If applicable, add the following below this CDDL HEADER, with the |
|
17 |
# fields enclosed by brackets "[]" replaced with your own identifying |
|
18 |
# information: Portions Copyright [yyyy] [name of copyright owner] |
|
19 |
# |
|
20 |
# CDDL HEADER END |
|
21 |
# |
|
22 |
||
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
23 |
# Copyright 2008 Sun Microsystems, Inc. All rights reserved. |
50 | 24 |
# Use is subject to license terms. |
25 |
||
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
26 |
import os |
50 | 27 |
import pkg.fmri as fmri |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
28 |
import pkg.client.api_errors as api_errors |
556
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
29 |
import pkg.client.imagestate as imagestate |
50 | 30 |
import pkg.client.pkgplan as pkgplan |
516
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
31 |
import pkg.client.indexer as indexer |
495
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
32 |
import pkg.search_errors as se |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
33 |
from pkg.client.imageconfig import REQUIRE_OPTIONAL |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
34 |
import pkg.client.actuator as actuator |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
35 |
|
111 | 36 |
from pkg.client.filter import compile_filter |
384
9d4746e5dd3e
115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents:
368
diff
changeset
|
37 |
from pkg.misc import msg |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
38 |
from pkg.misc import CLIENT_DEFAULT_MEM_USE_KB |
111 | 39 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
40 |
from pkg.client.retrieve import ManifestRetrievalError |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
41 |
from pkg.client.retrieve import DatastreamRetrievalError |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
42 |
|
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
43 |
UNEVALUATED = 0 # nothing done yet |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
44 |
EVALUATED_PKGS = 1 # established fmri changes |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
45 |
EVALUATED_OK = 2 # ready to execute |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
46 |
PREEXECUTED_OK = 3 # finished w/ preexecute |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
47 |
PREEXECUTED_ERROR = 4 # whoops |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
48 |
EXECUTED_OK = 5 # finished execution |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
49 |
EXECUTED_ERROR = 6 # failed |
50 | 50 |
|
51 |
class ImagePlan(object): |
|
52 |
"""An image plan takes a list of requested packages, an Image (and its |
|
53 |
policy restrictions), and returns the set of package operations needed |
|
54 |
to transform the Image to the list of requested packages. |
|
55 |
||
56 |
Use of an ImagePlan involves the identification of the Image, the |
|
57 |
Catalogs (implicitly), and a set of complete or partial package FMRIs. |
|
58 |
The Image's policy, which is derived from its type and configuration |
|
59 |
will cause the formulation of the plan or an exception state. |
|
60 |
||
61 |
XXX In the current formulation, an ImagePlan can handle [null -> |
|
62 |
PkgFmri] and [PkgFmri@Version1 -> PkgFmri@Version2], for a set of |
|
63 |
PkgFmri objects. With a correct Action object definition, deletion |
|
64 |
should be able to be represented as [PkgFmri@V1 -> null]. |
|
65 |
||
66 |
XXX Should we allow downgrades? There's an "arrow of time" associated |
|
67 |
with the smf(5) configuration method, so it's better to direct |
|
68 |
manipulators to snapshot-based rollback, but if people are going to do |
|
69 |
"pkg delete fmri; pkg install fmri@v(n - 1)", then we'd better have a |
|
70 |
plan to identify when this operation is safe or unsafe.""" |
|
71 |
||
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
72 |
def __init__(self, image, progtrack, check_cancelation, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
73 |
recursive_removal = False, filters = None, noexecute = False): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
74 |
if filters is None: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
75 |
filters = [] |
50 | 76 |
self.image = image |
77 |
self.state = UNEVALUATED |
|
67
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
78 |
self.recursive_removal = recursive_removal |
235
61994d15c39b
373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents:
195
diff
changeset
|
79 |
self.progtrack = progtrack |
50 | 80 |
|
556
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
81 |
self.noexecute = noexecute |
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
82 |
if noexecute: |
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
83 |
self.__intent = imagestate.INTENT_EVALUATE |
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
84 |
else: |
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
85 |
self.__intent = imagestate.INTENT_PROCESS |
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
86 |
|
50 | 87 |
self.target_fmris = [] |
66 | 88 |
self.target_rem_fmris = [] |
50 | 89 |
self.pkg_plans = [] |
577
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
90 |
self.target_insall_count = 0 |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
91 |
self.target_update_count = 0 |
50 | 92 |
|
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
93 |
self.__directories = None |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
94 |
self.__link_actions = None |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
95 |
|
111 | 96 |
ifilters = [ |
97 |
"%s = %s" % (k, v) |
|
98 |
for k, v in image.cfg_cache.filters.iteritems() |
|
99 |
] |
|
100 |
self.filters = [ compile_filter(f) for f in filters + ifilters ] |
|
101 |
||
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
102 |
self.check_cancelation = check_cancelation |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
103 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
104 |
self.actuators = None |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
105 |
|
50 | 106 |
def __str__(self): |
107 |
if self.state == UNEVALUATED: |
|
63
ba3a4af65479
add -R/$PKG_IMAGE to pkg, and -n and -v to install
Danek Duvall <danek.duvall@sun.com>
parents:
60
diff
changeset
|
108 |
s = "UNEVALUATED:\n" |
50 | 109 |
for t in self.target_fmris: |
63
ba3a4af65479
add -R/$PKG_IMAGE to pkg, and -n and -v to install
Danek Duvall <danek.duvall@sun.com>
parents:
60
diff
changeset
|
110 |
s = s + "+%s\n" % t |
66 | 111 |
for t in self.target_rem_fmris: |
112 |
s = s + "-%s\n" % t |
|
50 | 113 |
return s |
114 |
||
63
ba3a4af65479
add -R/$PKG_IMAGE to pkg, and -n and -v to install
Danek Duvall <danek.duvall@sun.com>
parents:
60
diff
changeset
|
115 |
s = "" |
50 | 116 |
for pp in self.pkg_plans: |
117 |
s = s + "%s\n" % pp |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
118 |
|
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
119 |
s = s + "Actuators:\n%s" % self.actuators |
50 | 120 |
return s |
121 |
||
539
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
122 |
def get_plan(self, full=True): |
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
123 |
if full: |
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
124 |
return str(self) |
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
125 |
|
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
126 |
output = "" |
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
127 |
for pp in self.pkg_plans: |
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
128 |
output += "%s -> %s\n" % (pp.origin_fmri, |
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
129 |
pp.destination_fmri) |
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
130 |
|
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
131 |
return output |
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
132 |
|
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
133 |
def display(self): |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
134 |
for pp in self.pkg_plans: |
384
9d4746e5dd3e
115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents:
368
diff
changeset
|
135 |
msg("%s -> %s" % (pp.origin_fmri, pp.destination_fmri)) |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
136 |
msg("Actuators:\n" % self.actuators) |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
137 |
|
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
138 |
def is_proposed_fmri(self, fmri): |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
139 |
for pf in self.target_fmris: |
258
b3b7592412ec
270 Need ability to rename packages
johansen <johansen@sun.com>
parents:
251
diff
changeset
|
140 |
if self.image.fmri_is_same_pkg(fmri, pf): |
316
d6ba58c63264
1039 circular dependency in packages is detected at install-time
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
315
diff
changeset
|
141 |
return not self.image.fmri_is_successor(fmri, pf) |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
142 |
return False |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
143 |
|
67
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
144 |
def is_proposed_rem_fmri(self, fmri): |
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
145 |
for pf in self.target_rem_fmris: |
258
b3b7592412ec
270 Need ability to rename packages
johansen <johansen@sun.com>
parents:
251
diff
changeset
|
146 |
if self.image.fmri_is_same_pkg(fmri, pf): |
67
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
147 |
return True |
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
148 |
return False |
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
149 |
|
50 | 150 |
def propose_fmri(self, fmri): |
151 |
# is a version of fmri.stem in the inventory? |
|
135
a1e20e9a9845
add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents:
111
diff
changeset
|
152 |
if self.image.has_version_installed(fmri): |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
153 |
return |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
154 |
|
50 | 155 |
# is there a freeze or incorporation statement? |
156 |
# do any of them eliminate this fmri version? |
|
157 |
# discard |
|
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
158 |
|
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
159 |
# |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
160 |
# update so that we meet any optional dependencies |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
161 |
# |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
162 |
|
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
163 |
fmri = self.image.apply_optional_dependencies(fmri) |
316
d6ba58c63264
1039 circular dependency in packages is detected at install-time
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
315
diff
changeset
|
164 |
|
64
3233dde68b2e
support installing multiple packages at once from the commandline
Danek Duvall <danek.duvall@sun.com>
parents:
63
diff
changeset
|
165 |
# Add fmri to target list only if it (or a successor) isn't |
3233dde68b2e
support installing multiple packages at once from the commandline
Danek Duvall <danek.duvall@sun.com>
parents:
63
diff
changeset
|
166 |
# there already. |
3233dde68b2e
support installing multiple packages at once from the commandline
Danek Duvall <danek.duvall@sun.com>
parents:
63
diff
changeset
|
167 |
for i, p in enumerate(self.target_fmris): |
258
b3b7592412ec
270 Need ability to rename packages
johansen <johansen@sun.com>
parents:
251
diff
changeset
|
168 |
if self.image.fmri_is_successor(fmri, p): |
b3b7592412ec
270 Need ability to rename packages
johansen <johansen@sun.com>
parents:
251
diff
changeset
|
169 |
self.target_fmris[i] = fmri |
b3b7592412ec
270 Need ability to rename packages
johansen <johansen@sun.com>
parents:
251
diff
changeset
|
170 |
break |
472
9cec1a1677e1
2795 two versions of a package can be installed
Tom Mueller <Tom.Mueller@sun.com>
parents:
462
diff
changeset
|
171 |
if self.image.fmri_is_successor(p, fmri): |
9cec1a1677e1
2795 two versions of a package can be installed
Tom Mueller <Tom.Mueller@sun.com>
parents:
462
diff
changeset
|
172 |
break |
64
3233dde68b2e
support installing multiple packages at once from the commandline
Danek Duvall <danek.duvall@sun.com>
parents:
63
diff
changeset
|
173 |
else: |
3233dde68b2e
support installing multiple packages at once from the commandline
Danek Duvall <danek.duvall@sun.com>
parents:
63
diff
changeset
|
174 |
self.target_fmris.append(fmri) |
50 | 175 |
|
176 |
return |
|
177 |
||
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
178 |
def older_version_proposed(self, fmri): |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
179 |
# returns true if older version of this fmri has been |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
180 |
# proposed already |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
181 |
for p in self.target_fmris: |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
182 |
if self.image.fmri_is_successor(fmri, p): |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
183 |
return True |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
184 |
return False |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
185 |
|
66 | 186 |
# XXX Need to make sure that the same package isn't being added and |
187 |
# removed in the same imageplan. |
|
188 |
def propose_fmri_removal(self, fmri): |
|
135
a1e20e9a9845
add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents:
111
diff
changeset
|
189 |
if not self.image.has_version_installed(fmri): |
66 | 190 |
return |
191 |
||
192 |
for i, p in enumerate(self.target_rem_fmris): |
|
258
b3b7592412ec
270 Need ability to rename packages
johansen <johansen@sun.com>
parents:
251
diff
changeset
|
193 |
if self.image.fmri_is_successor(fmri, p): |
b3b7592412ec
270 Need ability to rename packages
johansen <johansen@sun.com>
parents:
251
diff
changeset
|
194 |
self.target_rem_fmris[i] = fmri |
b3b7592412ec
270 Need ability to rename packages
johansen <johansen@sun.com>
parents:
251
diff
changeset
|
195 |
break |
66 | 196 |
else: |
135
a1e20e9a9845
add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents:
111
diff
changeset
|
197 |
self.target_rem_fmris.append(fmri) |
66 | 198 |
|
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
199 |
def gen_new_installed_pkgs(self): |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
200 |
""" generates all the actions in the new set of installed pkgs""" |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
201 |
assert self.state >= EVALUATED_PKGS |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
202 |
fmri_set = set(self.image.gen_installed_pkgs()) |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
203 |
|
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
204 |
for p in self.pkg_plans: |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
205 |
p.update_pkg_set(fmri_set) |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
206 |
|
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
207 |
for fmri in fmri_set: |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
208 |
yield fmri |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
209 |
|
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
210 |
def gen_new_installed_actions(self): |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
211 |
"""generates actions in new installed image""" |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
212 |
|
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
213 |
for fmri in self.gen_new_installed_pkgs(): |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
214 |
for act in self.image.get_manifest(fmri, |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
215 |
filtered=True).actions: |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
216 |
yield act |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
217 |
|
567
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
218 |
def gen_new_installed_actions_bytype(self, type): |
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
219 |
"""generates actions in new installed image""" |
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
220 |
|
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
221 |
for fmri in self.gen_new_installed_pkgs(): |
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
222 |
m = self.image.get_manifest(fmri, filtered=True) |
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
223 |
for act in m.gen_actions_by_type(type): |
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
224 |
yield act |
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
225 |
|
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
226 |
def get_directories(self): |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
227 |
""" return set of all directories in target image """ |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
228 |
# always consider var and var/pkg fixed in image.... |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
229 |
# XXX should be fixed for user images |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
230 |
if self.__directories == None: |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
231 |
dirs = set(["var/pkg", "var/sadm/install"]) |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
232 |
dirs.update( |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
233 |
[ |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
234 |
os.path.normpath(d) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
235 |
for act in self.gen_new_installed_actions() |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
236 |
for d in act.directory_references() |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
237 |
]) |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
238 |
self.__directories = self.image.expanddirs(dirs) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
239 |
|
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
240 |
return self.__directories |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
241 |
|
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
242 |
def get_link_actions(self): |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
243 |
"""return a dictionary of hardlink action lists indexed by |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
244 |
target """ |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
245 |
if self.__link_actions == None: |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
246 |
d = {} |
567
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
247 |
for act in \ |
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
248 |
self.gen_new_installed_actions_bytype("hardlink"): |
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
249 |
t = act.get_target_path() |
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
250 |
if t in d: |
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
251 |
d[t].append(act) |
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
252 |
else: |
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
253 |
d[t] = [act] |
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
254 |
self.__link_actions = d |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
255 |
return self.__link_actions |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
256 |
|
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
257 |
def evaluate_fmri(self, pfmri): |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
258 |
|
577
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
259 |
self.progtrack.evaluate_progress(pfmri) |
556
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
260 |
self.image.state.set_target(pfmri, self.__intent) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
261 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
262 |
if self.check_cancelation(): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
263 |
raise api_errors.CanceledException() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
264 |
|
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
265 |
m = self.image.get_manifest(pfmri) |
50 | 266 |
|
267 |
# [manifest] examine manifest for dependencies |
|
567
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
268 |
for a in m.gen_actions_by_type("depend"): |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
269 |
|
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
270 |
type = a.attrs["type"] |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
271 |
|
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
272 |
f = fmri.PkgFmri(a.attrs["fmri"], |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
273 |
self.image.attrs["Build-Release"]) |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
274 |
|
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
275 |
if self.image.has_version_installed(f) and \ |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
276 |
type != "exclude": |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
277 |
continue |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
278 |
|
65
af18f4c81c61
Prevent infinite dependency recursion on install.
Danek Duvall <danek.duvall@sun.com>
parents:
64
diff
changeset
|
279 |
# XXX This alone only prevents infinite recursion when a |
af18f4c81c61
Prevent infinite dependency recursion on install.
Danek Duvall <danek.duvall@sun.com>
parents:
64
diff
changeset
|
280 |
# cycle member is on the commandline, as we never update |
af18f4c81c61
Prevent infinite dependency recursion on install.
Danek Duvall <danek.duvall@sun.com>
parents:
64
diff
changeset
|
281 |
# target_fmris. Is target_fmris supposed to be just |
af18f4c81c61
Prevent infinite dependency recursion on install.
Danek Duvall <danek.duvall@sun.com>
parents:
64
diff
changeset
|
282 |
# what was specified on the commandline, or include what |
af18f4c81c61
Prevent infinite dependency recursion on install.
Danek Duvall <danek.duvall@sun.com>
parents:
64
diff
changeset
|
283 |
# we've found while processing dependencies? |
af18f4c81c61
Prevent infinite dependency recursion on install.
Danek Duvall <danek.duvall@sun.com>
parents:
64
diff
changeset
|
284 |
# XXX probably should just use propose_fmri() here |
135
a1e20e9a9845
add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents:
111
diff
changeset
|
285 |
# instead of this and the has_version_installed() call |
a1e20e9a9845
add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents:
111
diff
changeset
|
286 |
# above. |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
287 |
if self.is_proposed_fmri(f): |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
288 |
continue |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
289 |
|
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
290 |
# XXX LOG "%s not in pending transaction; |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
291 |
# checking catalog" % f |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
292 |
|
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
293 |
required = True |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
294 |
excluded = False |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
295 |
if type == "optional" and \ |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
296 |
not self.image.cfg_cache.get_policy(REQUIRE_OPTIONAL): |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
297 |
required = False |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
298 |
elif type == "transfer" and \ |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
299 |
not self.image.older_version_installed(f): |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
300 |
required = False |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
301 |
elif type == "exclude": |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
302 |
excluded = True |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
303 |
elif type == "incorporate": |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
304 |
self.image.update_optional_dependency(f) |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
305 |
if self.image.older_version_installed(f) or \ |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
306 |
self.older_version_proposed(f): |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
307 |
required = True |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
308 |
else: |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
309 |
required = False |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
310 |
|
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
311 |
if not required: |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
312 |
continue |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
313 |
|
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
314 |
if excluded: |
556
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
315 |
self.image.state.set_target() |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
316 |
raise RuntimeError, "excluded by '%s'" % f |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
317 |
|
135
a1e20e9a9845
add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents:
111
diff
changeset
|
318 |
# treat-as-required, treat-as-required-unless-pinned, |
a1e20e9a9845
add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents:
111
diff
changeset
|
319 |
# ignore |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
320 |
# skip if ignoring |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
321 |
# if pinned |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
322 |
# ignore if treat-as-required-unless-pinned |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
323 |
# else |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
324 |
# **evaluation of incorporations** |
135
a1e20e9a9845
add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents:
111
diff
changeset
|
325 |
# [imageplan] pursue installation of this package |
a1e20e9a9845
add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents:
111
diff
changeset
|
326 |
# --> |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
327 |
# backtrack or reset?? |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
328 |
|
419
a38f1ed7cf76
1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents:
417
diff
changeset
|
329 |
# This will be the newest version of the specified |
a38f1ed7cf76
1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents:
417
diff
changeset
|
330 |
# dependency package, coming from the preferred |
a38f1ed7cf76
1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents:
417
diff
changeset
|
331 |
# authority, if it's available there. |
a38f1ed7cf76
1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents:
417
diff
changeset
|
332 |
cf = self.image.inventory([ a.attrs["fmri"] ], |
a38f1ed7cf76
1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents:
417
diff
changeset
|
333 |
all_known = True, preferred = True, |
a38f1ed7cf76
1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents:
417
diff
changeset
|
334 |
first_only = True).next()[0] |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
335 |
|
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
336 |
# XXX LOG "adding dependency %s" % pfmri |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
337 |
|
384
9d4746e5dd3e
115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents:
368
diff
changeset
|
338 |
#msg("adding dependency %s" % cf) |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
339 |
|
258
b3b7592412ec
270 Need ability to rename packages
johansen <johansen@sun.com>
parents:
251
diff
changeset
|
340 |
self.propose_fmri(cf) |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
341 |
self.evaluate_fmri(cf) |
50 | 342 |
|
556
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
343 |
self.image.state.set_target() |
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
344 |
|
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
345 |
def add_pkg_plan(self, pfmri): |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
346 |
"""add a pkg plan to imageplan for fully evaluated frmi""" |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
347 |
m = self.image.get_manifest(pfmri) |
580
be647ae49f92
3717 More cancelation points are needed to allow gui responsiveness
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
577
diff
changeset
|
348 |
pp = pkgplan.PkgPlan(self.image, self.progtrack, \ |
be647ae49f92
3717 More cancelation points are needed to allow gui responsiveness
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
577
diff
changeset
|
349 |
self.check_cancelation) |
50 | 350 |
|
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
351 |
try: |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
352 |
pp.propose_destination(pfmri, m) |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
353 |
except RuntimeError: |
384
9d4746e5dd3e
115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents:
368
diff
changeset
|
354 |
msg("pkg: %s already installed" % pfmri) |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
355 |
return |
50 | 356 |
|
111 | 357 |
pp.evaluate(self.filters) |
50 | 358 |
|
577
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
359 |
if pp.origin_fmri: |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
360 |
self.target_update_count += 1 |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
361 |
else: |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
362 |
self.target_insall_count += 1 |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
363 |
|
50 | 364 |
self.pkg_plans.append(pp) |
365 |
||
66 | 366 |
def evaluate_fmri_removal(self, pfmri): |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
367 |
# prob. needs breaking up as well |
66 | 368 |
assert self.image.has_manifest(pfmri) |
369 |
||
577
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
370 |
self.progtrack.evaluate_progress(pfmri) |
432
578875da6e04
48 Removing a dependency is not flagged, and recovery is not obvious
Danek Duvall <danek.duvall@sun.com>
parents:
429
diff
changeset
|
371 |
|
578875da6e04
48 Removing a dependency is not flagged, and recovery is not obvious
Danek Duvall <danek.duvall@sun.com>
parents:
429
diff
changeset
|
372 |
dependents = self.image.get_dependents(pfmri, self.progtrack) |
66 | 373 |
|
135
a1e20e9a9845
add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents:
111
diff
changeset
|
374 |
# Don't consider those dependencies already being removed in |
a1e20e9a9845
add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents:
111
diff
changeset
|
375 |
# this imageplan transaction. |
a1e20e9a9845
add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents:
111
diff
changeset
|
376 |
for i, d in enumerate(dependents): |
432
578875da6e04
48 Removing a dependency is not flagged, and recovery is not obvious
Danek Duvall <danek.duvall@sun.com>
parents:
429
diff
changeset
|
377 |
if d in self.target_rem_fmris: |
135
a1e20e9a9845
add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents:
111
diff
changeset
|
378 |
del dependents[i] |
a1e20e9a9845
add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents:
111
diff
changeset
|
379 |
|
67
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
380 |
if dependents and not self.recursive_removal: |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
381 |
raise api_errors.NonLeafPackageException(pfmri, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
382 |
dependents) |
67
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
383 |
|
580
be647ae49f92
3717 More cancelation points are needed to allow gui responsiveness
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
577
diff
changeset
|
384 |
pp = pkgplan.PkgPlan(self.image, self.progtrack, \ |
be647ae49f92
3717 More cancelation points are needed to allow gui responsiveness
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
577
diff
changeset
|
385 |
self.check_cancelation) |
66 | 386 |
|
556
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
387 |
self.image.state.set_target(pfmri, self.__intent) |
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
388 |
m = self.image.get_manifest(pfmri) |
66 | 389 |
|
390 |
try: |
|
391 |
pp.propose_removal(pfmri, m) |
|
392 |
except RuntimeError: |
|
556
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
393 |
self.image.state.set_target() |
384
9d4746e5dd3e
115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents:
368
diff
changeset
|
394 |
msg("pkg %s not installed" % pfmri) |
66 | 395 |
return |
396 |
||
397 |
pp.evaluate() |
|
398 |
||
67
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
399 |
for d in dependents: |
432
578875da6e04
48 Removing a dependency is not flagged, and recovery is not obvious
Danek Duvall <danek.duvall@sun.com>
parents:
429
diff
changeset
|
400 |
if self.is_proposed_rem_fmri(d): |
578875da6e04
48 Removing a dependency is not flagged, and recovery is not obvious
Danek Duvall <danek.duvall@sun.com>
parents:
429
diff
changeset
|
401 |
continue |
578875da6e04
48 Removing a dependency is not flagged, and recovery is not obvious
Danek Duvall <danek.duvall@sun.com>
parents:
429
diff
changeset
|
402 |
if not self.image.has_version_installed(d): |
67
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
403 |
continue |
432
578875da6e04
48 Removing a dependency is not flagged, and recovery is not obvious
Danek Duvall <danek.duvall@sun.com>
parents:
429
diff
changeset
|
404 |
self.target_rem_fmris.append(d) |
577
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
405 |
self.progtrack.evaluate_progress(d) |
432
578875da6e04
48 Removing a dependency is not flagged, and recovery is not obvious
Danek Duvall <danek.duvall@sun.com>
parents:
429
diff
changeset
|
406 |
self.evaluate_fmri_removal(d) |
67
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
407 |
|
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
408 |
# Post-order append will ensure topological sorting for acyclic |
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
409 |
# dependency graphs. Cycles need to be arbitrarily broken, and |
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
410 |
# are done so in the loop above. |
66 | 411 |
self.pkg_plans.append(pp) |
556
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
412 |
self.image.state.set_target() |
66 | 413 |
|
50 | 414 |
def evaluate(self): |
415 |
assert self.state == UNEVALUATED |
|
577
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
416 |
|
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
417 |
evaluate_npkgs = len(self.target_fmris) + \ |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
418 |
len(self.target_rem_fmris) |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
419 |
self.progtrack.evaluate_start(evaluate_npkgs) |
235
61994d15c39b
373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents:
195
diff
changeset
|
420 |
|
368
777fb019e807
1338 traceback when installing a package with a dependency that can not be satisfied
Brock Pytlik <bpytlik@sun.com>
parents:
329
diff
changeset
|
421 |
outstring = "" |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
422 |
|
65
af18f4c81c61
Prevent infinite dependency recursion on install.
Danek Duvall <danek.duvall@sun.com>
parents:
64
diff
changeset
|
423 |
# Operate on a copy, as it will be modified in flight. |
af18f4c81c61
Prevent infinite dependency recursion on install.
Danek Duvall <danek.duvall@sun.com>
parents:
64
diff
changeset
|
424 |
for f in self.target_fmris[:]: |
577
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
425 |
self.progtrack.evaluate_progress(f) |
368
777fb019e807
1338 traceback when installing a package with a dependency that can not be satisfied
Brock Pytlik <bpytlik@sun.com>
parents:
329
diff
changeset
|
426 |
try: |
777fb019e807
1338 traceback when installing a package with a dependency that can not be satisfied
Brock Pytlik <bpytlik@sun.com>
parents:
329
diff
changeset
|
427 |
self.evaluate_fmri(f) |
777fb019e807
1338 traceback when installing a package with a dependency that can not be satisfied
Brock Pytlik <bpytlik@sun.com>
parents:
329
diff
changeset
|
428 |
except KeyError, e: |
556
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
429 |
outstring += "Attempting to install %s " \ |
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
430 |
"causes:\n\t%s\n" % (f.get_name(), e) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
431 |
except (ManifestRetrievalError, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
432 |
DatastreamRetrievalError), e: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
433 |
raise api_errors.NetworkUnavailableException( |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
434 |
str(e)) |
50 | 435 |
|
368
777fb019e807
1338 traceback when installing a package with a dependency that can not be satisfied
Brock Pytlik <bpytlik@sun.com>
parents:
329
diff
changeset
|
436 |
if outstring: |
777fb019e807
1338 traceback when installing a package with a dependency that can not be satisfied
Brock Pytlik <bpytlik@sun.com>
parents:
329
diff
changeset
|
437 |
raise RuntimeError("No packages were installed because " |
777fb019e807
1338 traceback when installing a package with a dependency that can not be satisfied
Brock Pytlik <bpytlik@sun.com>
parents:
329
diff
changeset
|
438 |
"package dependencies could not be satisfied\n" + |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
439 |
outstring) |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
440 |
|
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
441 |
for f in self.target_fmris: |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
442 |
self.add_pkg_plan(f) |
577
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
443 |
self.progtrack.evaluate_progress(f) |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
444 |
|
67
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
66
diff
changeset
|
445 |
for f in self.target_rem_fmris[:]: |
66 | 446 |
self.evaluate_fmri_removal(f) |
577
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
447 |
self.progtrack.evaluate_progress(f) |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
448 |
|
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
449 |
# we now have a workable set of packages to add/upgrade/remove |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
450 |
# now combine all actions together to create a synthetic single |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
451 |
# step upgrade operation, and handle editable files moving from |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
452 |
# package to package. See theory comment in execute, below. |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
453 |
|
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
454 |
self.state = EVALUATED_PKGS |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
455 |
|
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
456 |
self.removal_actions = [ (p, src, dest) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
457 |
for p in self.pkg_plans |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
458 |
for src, dest in p.gen_removal_actions() |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
459 |
] |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
460 |
|
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
461 |
self.update_actions = [ (p, src, dest) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
462 |
for p in self.pkg_plans |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
463 |
for src, dest in p.gen_update_actions() |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
464 |
] |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
465 |
|
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
466 |
self.install_actions = [ (p, src, dest) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
467 |
for p in self.pkg_plans |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
468 |
for src, dest in p.gen_install_actions() |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
469 |
] |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
470 |
|
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
471 |
self.progtrack.evaluate_progress() |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
472 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
473 |
self.actuators = actuator.Actuator() |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
474 |
|
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
475 |
# iterate over copy of removals since we're modding list |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
476 |
# keep track of deletion count so later use of index works |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
477 |
named_removals = {} |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
478 |
deletions = 0 |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
479 |
for i, a in enumerate(self.removal_actions[:]): |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
480 |
# remove dir removals if dir is still in final image |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
481 |
if a[1].name == "dir" and \ |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
482 |
os.path.normpath(a[1].attrs["path"]) in \ |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
483 |
self.get_directories(): |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
484 |
del self.removal_actions[i - deletions] |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
485 |
deletions += 1 |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
486 |
continue |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
487 |
# store names of files being removed under own name |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
488 |
# or original name if specified |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
489 |
if a[1].name == "file": |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
490 |
attrs = a[1].attrs |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
491 |
fname = attrs.get("original_name", |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
492 |
"%s:%s" % (a[0].origin_fmri.get_name(), attrs["path"])) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
493 |
named_removals[fname] = \ |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
494 |
(i - deletions, |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
495 |
id(self.removal_actions[i-deletions][1])) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
496 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
497 |
self.actuators.scan_removal(a[1].attrs) |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
498 |
|
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
499 |
self.progtrack.evaluate_progress() |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
500 |
|
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
501 |
for a in self.install_actions: |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
502 |
# In order to handle editable files that move their path or |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
503 |
# change pkgs, for all new files with original_name attribute, |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
504 |
# make sure file isn't being removed by checking removal list. |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
505 |
# if it is, tag removal to save file, and install to recover |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
506 |
# cached version... caching is needed if directories |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
507 |
# are removed or don't exist yet. |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
508 |
if a[2].name == "file" and "original_name" in a[2].attrs and \ |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
509 |
a[2].attrs["original_name"] in named_removals: |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
510 |
cache_name = a[2].attrs["original_name"] |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
511 |
index = named_removals[cache_name][0] |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
512 |
assert(id(self.removal_actions[index][1]) == |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
513 |
named_removals[cache_name][1]) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
514 |
self.removal_actions[index][1].attrs["save_file"] = \ |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
515 |
cache_name |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
516 |
a[2].attrs["save_file"] = cache_name |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
517 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
518 |
self.actuators.scan_install(a[2].attrs) |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
519 |
|
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
520 |
self.progtrack.evaluate_progress() |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
521 |
# Go over update actions |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
522 |
l_actions = self.get_link_actions() |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
523 |
l_refresh = [] |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
524 |
for a in self.update_actions: |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
525 |
# for any files being updated that are the target of |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
526 |
# _any_ hardlink actions, append the hardlink actions |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
527 |
# to the update list so that they are not broken... |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
528 |
if a[2].name == "file": |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
529 |
path = a[2].attrs["path"] |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
530 |
if path in l_actions: |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
531 |
l_refresh.extend([(a[0], l, l) for l in l_actions[path]]) |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
532 |
|
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
533 |
# scan both old and new actions |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
534 |
# repairs may result in update action w/o orig action |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
535 |
if a[1]: |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
536 |
self.actuators.scan_update(a[1].attrs) |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
537 |
self.actuators.scan_update(a[2].attrs) |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
538 |
self.update_actions.extend(l_refresh) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
539 |
|
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
540 |
# sort actions to match needed processing order |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
541 |
self.removal_actions.sort(key = lambda obj:obj[1], reverse=True) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
542 |
self.update_actions.sort(key = lambda obj:obj[2]) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
543 |
self.install_actions.sort(key = lambda obj:obj[2]) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
544 |
|
577
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
545 |
remove_npkgs = len(self.target_rem_fmris) |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
546 |
npkgs = 0 |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
547 |
nfiles = 0 |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
548 |
nbytes = 0 |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
549 |
nactions = 0 |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
550 |
for p in self.pkg_plans: |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
551 |
nf, nb = p.get_xferstats() |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
552 |
nbytes += nb |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
553 |
nfiles += nf |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
554 |
nactions += p.get_nactions() |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
555 |
|
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
556 |
# It's not perfectly accurate but we count a download |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
557 |
# even if the package will do zero data transfer. This |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
558 |
# makes the pkg stats consistent between download and |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
559 |
# install. |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
560 |
npkgs += 1 |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
561 |
|
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
562 |
self.progtrack.download_set_goal(npkgs, nfiles, nbytes) |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
563 |
|
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
564 |
self.progtrack.evaluate_done(self.target_insall_count, \ |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
565 |
self.target_update_count, remove_npkgs) |
235
61994d15c39b
373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents:
195
diff
changeset
|
566 |
|
50 | 567 |
self.state = EVALUATED_OK |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
568 |
|
329 | 569 |
def nothingtodo(self): |
368
777fb019e807
1338 traceback when installing a package with a dependency that can not be satisfied
Brock Pytlik <bpytlik@sun.com>
parents:
329
diff
changeset
|
570 |
""" Test whether this image plan contains any work to do """ |
329 | 571 |
|
368
777fb019e807
1338 traceback when installing a package with a dependency that can not be satisfied
Brock Pytlik <bpytlik@sun.com>
parents:
329
diff
changeset
|
572 |
return not self.pkg_plans |
329 | 573 |
|
417
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
574 |
def preexecute(self): |
237
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
575 |
"""Invoke the evaluated image plan |
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
576 |
preexecute, execute and postexecute |
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
577 |
execute actions need to be sorted across packages |
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
578 |
""" |
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
579 |
|
50 | 580 |
assert self.state == EVALUATED_OK |
581 |
||
368
777fb019e807
1338 traceback when installing a package with a dependency that can not be satisfied
Brock Pytlik <bpytlik@sun.com>
parents:
329
diff
changeset
|
582 |
if self.nothingtodo(): |
417
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
583 |
self.state = PREEXECUTED_OK |
368
777fb019e807
1338 traceback when installing a package with a dependency that can not be satisfied
Brock Pytlik <bpytlik@sun.com>
parents:
329
diff
changeset
|
584 |
return |
329 | 585 |
|
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
586 |
# Checks the index to make sure it exists and is |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
587 |
# consistent. If it's inconsistent an exception is thrown. |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
588 |
# If it's totally absent, it will index the existing packages |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
589 |
# so that the incremental update that follows at the end of |
516
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
590 |
# the function will work correctly. It also repairs the index |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
591 |
# for this BE so the user can boot into this BE and have a |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
592 |
# correct index. |
495
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
593 |
try: |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
594 |
self.image.update_index_dir() |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
595 |
ind = indexer.Indexer(self.image.index_dir, |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
596 |
CLIENT_DEFAULT_MEM_USE_KB, progtrack=self.progtrack) |
516
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
597 |
if not ind.check_index_existence() or \ |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
598 |
not ind.check_index_has_exactly_fmris( |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
599 |
self.image.gen_installed_pkg_names()): |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
600 |
# XXX Once we have a framework for emitting a |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
601 |
# message to the user in this spot in the |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
602 |
# code, we should tell them something has gone |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
603 |
# wrong so that we continue to get feedback to |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
604 |
# allow us to debug the code. |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
605 |
ind.rebuild_index_from_scratch( |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
606 |
self.image.get_fmri_manifest_pairs()) |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
607 |
except se.IndexingException: |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
608 |
# If there's a problem indexing, we want to attempt |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
609 |
# to finish the installation anyway. If there's a |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
610 |
# problem updating the index on the new image, |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
611 |
# that error needs to be communicated to the user. |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
612 |
pass |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
613 |
|
417
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
614 |
try: |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
615 |
for p in self.pkg_plans: |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
616 |
p.preexecute() |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
617 |
|
481
9fa0541013b3
2402 pkg unable to remove executable file that is in use on Windows
Tom Mueller <Tom.Mueller@sun.com>
parents:
472
diff
changeset
|
618 |
for p in self.pkg_plans: |
9fa0541013b3
2402 pkg unable to remove executable file that is in use on Windows
Tom Mueller <Tom.Mueller@sun.com>
parents:
472
diff
changeset
|
619 |
p.download() |
9fa0541013b3
2402 pkg unable to remove executable file that is in use on Windows
Tom Mueller <Tom.Mueller@sun.com>
parents:
472
diff
changeset
|
620 |
|
417
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
621 |
self.progtrack.download_done() |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
622 |
except: |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
623 |
self.state = PREEXECUTED_ERROR |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
624 |
raise |
235
61994d15c39b
373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents:
195
diff
changeset
|
625 |
|
417
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
626 |
self.state = PREEXECUTED_OK |
235
61994d15c39b
373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents:
195
diff
changeset
|
627 |
|
417
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
628 |
def execute(self): |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
629 |
"""Invoke the evaluated image plan |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
630 |
preexecute, execute and postexecute |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
631 |
execute actions need to be sorted across packages |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
632 |
""" |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
633 |
assert self.state == PREEXECUTED_OK |
235
61994d15c39b
373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents:
195
diff
changeset
|
634 |
|
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
635 |
# |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
636 |
# what determines execution order? |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
637 |
# |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
638 |
# The following constraints are key in understanding imageplan |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
639 |
# execution: |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
640 |
# |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
641 |
# 1) All non-directory actions (files, users, hardlinks, symbolic |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
642 |
# links, etc.) must appear in only a single installed package. |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
643 |
# |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
644 |
# 2) All installed packages must be consistent in their view of |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
645 |
# action types; if /usr/openwin is a directory in one package, it |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
646 |
# must be a directory in all packages, never a symbolic link. This |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
647 |
# includes implicitly defined directories. |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
648 |
# |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
649 |
# A key goal in IPS is to be able to undergo an arbtrary transformation |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
650 |
# in package contents in a single step. Packages must be able to exchange |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
651 |
# files, convert directories to symbolic links, etc.; so long as the start |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
652 |
# and end states meet the above two constraints IPS must be able to transition |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
653 |
# between the states directly. This leads to the following: |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
654 |
# |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
655 |
# 1) All actions must be ordered across packages; packages cannot be updated |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
656 |
# one at a time. |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
657 |
# |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
658 |
# This is readily apparent when one considers two packages exchanging |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
659 |
# files in their new versions; in each case the package now owning the |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
660 |
# file must be installed last, but it is not possible for each package to |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
661 |
# to be installed before the other. Clearly, all the removals must be done |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
662 |
# first, followed by the installs and updates. |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
663 |
# |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
664 |
# 2) Installs of new actions must preceed updates of existing ones. |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
665 |
# |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
666 |
# In order to accomodate changes of file ownership of existing files |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
667 |
# to a newly created user, it is necessary for the installation of that |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
668 |
# user to preceed the update of files to reflect their new ownership. |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
669 |
# |
417
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
670 |
|
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
671 |
if self.nothingtodo(): |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
672 |
self.state = EXECUTED_OK |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
673 |
return |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
674 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
675 |
self.actuators.exec_prep(self.image) |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
676 |
|
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
677 |
self.actuators.exec_pre_actuators(self.image) |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
678 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
679 |
try: |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
680 |
|
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
681 |
# execute removals |
237
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
682 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
683 |
self.progtrack.actions_set_goal("Removal Phase", |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
684 |
len(self.removal_actions)) |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
685 |
for p, src, dest in self.removal_actions: |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
686 |
p.execute_removal(src, dest) |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
687 |
self.progtrack.actions_add_progress() |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
688 |
self.progtrack.actions_done() |
237
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
689 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
690 |
# execute installs |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
691 |
|
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
692 |
self.progtrack.actions_set_goal("Install Phase", |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
693 |
len(self.install_actions)) |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
694 |
|
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
695 |
for p, src, dest in self.install_actions: |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
696 |
p.execute_install(src, dest) |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
697 |
self.progtrack.actions_add_progress() |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
698 |
self.progtrack.actions_done() |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
699 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
700 |
# execute updates |
237
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
701 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
702 |
self.progtrack.actions_set_goal("Update Phase", |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
703 |
len(self.update_actions)) |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
704 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
705 |
for p, src, dest in self.update_actions: |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
706 |
p.execute_update(src, dest) |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
707 |
self.progtrack.actions_add_progress() |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
708 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
709 |
self.progtrack.actions_done() |
237
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
710 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
711 |
# handle any postexecute operations |
237
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
712 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
713 |
for p in self.pkg_plans: |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
714 |
p.postexecute() |
50 | 715 |
|
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
716 |
self.image.clear_pkg_state() |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
717 |
|
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
718 |
except: |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
719 |
self.actuators.exec_fail_actuators(self.image) |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
720 |
raise |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
721 |
else: |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
722 |
self.actuators.exec_post_actuators(self.image) |
516
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
723 |
|
50 | 724 |
self.state = EXECUTED_OK |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
725 |
|
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
726 |
# reduce memory consumption |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
727 |
|
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
728 |
del self.removal_actions |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
729 |
del self.update_actions |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
730 |
del self.install_actions |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
731 |
|
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
732 |
del self.target_rem_fmris |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
733 |
del self.target_fmris |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
734 |
del self.__directories |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
735 |
|
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
736 |
del self.actuators |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
737 |
|
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
738 |
# Perform the incremental update to the search indexes |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
739 |
# for all changed packages |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
740 |
plan_info = [] |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
741 |
for p in self.pkg_plans: |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
742 |
d_fmri = p.destination_fmri |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
743 |
d_manifest_path = None |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
744 |
if d_fmri: |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
745 |
d_manifest_path = \ |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
746 |
self.image.get_manifest_path(d_fmri) |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
747 |
o_fmri = p.origin_fmri |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
748 |
o_manifest_path = None |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
749 |
o_filter_file = None |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
750 |
if o_fmri: |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
751 |
o_manifest_path = \ |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
752 |
self.image.get_manifest_path(o_fmri) |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
753 |
plan_info.append((d_fmri, d_manifest_path, o_fmri, |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
754 |
o_manifest_path)) |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
755 |
del self.pkg_plans |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
756 |
self.progtrack.actions_set_goal("Index Phase", len(plan_info)) |
495
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
757 |
try: |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
758 |
self.image.update_index_dir() |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
759 |
ind = indexer.Indexer(self.image.index_dir, |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
760 |
CLIENT_DEFAULT_MEM_USE_KB, progtrack=self.progtrack) |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
761 |
ind.client_update_index((self.filters, plan_info)) |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
762 |
except (KeyboardInterrupt, |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
763 |
se.ProblematicPermissionsIndexException): |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
764 |
# ProblematicPermissionsIndexException is included here |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
765 |
# as there's little chance that trying again will fix |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
766 |
# this problem. |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
767 |
raise |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
768 |
except Exception, e: |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
769 |
del(ind) |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
770 |
# XXX Once we have a framework for emitting a message |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
771 |
# to the user in this spot in the code, we should tell |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
772 |
# them something has gone wrong so that we continue to |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
773 |
# get feedback to allow us to debug the code. |
e420b536e34e
2989 errors during index update shouldn't prevent the operation from succeding
Brock Pytlik <bpytlik@sun.com>
parents:
481
diff
changeset
|
774 |
self.image.rebuild_search_index(self.progtrack) |